stacker.news/lib
ekzyis 8f590425dc
Image uploads (#576)
* Add icon to add images

* Open file explorer to select image

* Upload images to S3 on selection

* Show uploaded images below text input

* Link and remove image

* Fetch unsubmitted images from database

* Mark S3 images as submitted in imgproxy job

* Add margin-top

* Mark images as submitted on client after successful mutation

* Also delete objects in S3

* Allow items to have multiple uploads linked

* Overwrite old avatar

* Add fees for presigned URLs

* Use Github style upload

* removed upfront fees
* removed images provider since we no longer need to keep track of unsubmitted images on the client
* removed User.images resolver
* removed deleteImage mutation
* use Github style upload where it shows ![Uploading <filename>...]() first and then replaces that with ![<filename>](<url>) after successful upload

* Add Upload.paid boolean column

One item can have multiple images linked to it, but an image can also be used in multiple items (many-to-many relation).

Since we don't really care to which item an image is linked and vice versa, we just use a boolean column to mark if an image was already paid for.

This makes fee calculation easier since no JOINs are required.

* Add image fees during item creation/update

* we calculate image fees during item creation and update now
* function imageFees returns queries which deduct fees from user and mark images as paid + fees
* queries need to be run inside same transaction as item creation/update

* Allow anons to get presigned URLs

* Add comments regarding avatar upload

* Use megabytes in error message

* Remove unnecessary avatar check during image fees calculation

* Show image fees in frontend

* Also update image fees on blur

This makes sure that the images fees reflect the current state. For example, if an image was removed.

We could also add debounced requests.

* Show amount of unpaid images in receipt

* Fix fees in sats deducted from msats

* Fix algebraic order of fees

Spam fees must come immediately after the base fee since it multiplies the base fee.

* Fix image fees in edit receipt

* Fix stale fees shown

If we pay for an image and then want to edit the comment, the cache might return stale date; suggesting we didn't pay for the existing image yet.

* Add 0 base fee in edit receipt

* Remove 's' from 'image fees' in receipts

* Remove unnecessary async

* Remove 'Uploading <name>...' from text input on error

* Support upload of multiple files at once

* Add schedule to delete unused images

* Fix image fee display in receipts

* Use Drag and Drop API for image upload

* Remove dragOver style on drop

* Increase max upload size to 10MB to allow HQ camera pictures

* Fix free upload quota

* Fix stale image fees served

* Fix bad image fee return statements

* Fix multiplication with feesPerImage

* Fix NULL returned for size24h, sizeNow

* Remove unnecessary text field in query

* refactor: Unify <ImageUpload> and <Upload> component

* Add avatar cache busting using random query param

* Calculate image fee info in postgres function

* we now calculate image fee info in a postgres function which is much cleaner
* we use this function inside `create_item` and `update_item`: image fees are now deducted in the same transaction as creating/updating the item!
* reversed changes in `serializeInvoiceable`

* Fix line break in receipt

* Update upload limits

* Add comment about `e.target.value = null`

* Use debounce instead of onBlur to update image fees info

* Fix invoice amount

* Refactor avatar upload control flow

* Update image fees in onChange

* Fix rescheduling of other jobs

* also update schedule from every minute to every hour

* Add image fees in calling context

* keep item ids on uploads

* Fix incompatible onSubmit signature

* Revert "keep item ids on uploads"

This reverts commit 4688962abc.

* many2many item uploads

* pretty subdomain for images

* handle upload conditions for profile images and job logos

---------

Co-authored-by: ekzyis <ek@ekzyis.com>
Co-authored-by: ekzyis <ek@stacker.news>
2023-11-06 14:53:33 -06:00
..
apollo.js Convert worker to ESM (#500) 2023-09-23 20:19:35 -05:00
clicks.js Revert "Revert "shield your eyes; massive, squashed refactor; nextjs/react/react-dom/apollo upgrades"" 2023-07-23 10:08:43 -05:00
constants.js Image uploads (#576) 2023-11-06 14:53:33 -06:00
currency.js reuse validation on server 2023-02-08 13:39:53 -06:00
cursor.js Mention auto-complete (#532) 2023-10-04 15:10:56 -05:00
fancy-names.json Add setting to send diagnostics back to SN (#463) 2023-09-18 18:00:16 -05:00
form.js multiple forwards on a post (#403) 2023-08-23 17:44:17 -05:00
format.js Introduce format option on `numWithUnits` fn, consumed by bounty listing (#496) 2023-09-18 17:49:13 -05:00
item.js improve delete bot ux 2023-10-23 17:55:48 -05:00
lnurl.js LUD-18 Wallet implementation (#531) 2023-10-03 18:22:56 -05:00
md.js remove debug loggin for rehype plugin 2023-10-23 18:16:06 -05:00
new-comments.js subtle highlight of new comments 2023-08-06 14:18:40 -05:00
nostr.js Crosspost discussion items to nostr (#522) 2023-10-04 13:47:09 -05:00
package.json Convert worker to ESM (#500) 2023-09-23 20:19:35 -05:00
push-notifications.js Fix missing merge of FOLLOW push notifications (#596) 2023-11-05 15:06:38 -06:00
rainbow.js new bolt 2021-12-05 11:37:55 -06:00
rand.js use rand lightning animation when not logged in 2021-07-16 11:47:18 -05:00
remark-mention.js fix mdast find and replace imports 2023-07-24 20:03:56 -05:00
remark-sub.js fix markdown inline code and headings 2023-10-23 17:14:37 -05:00
rss.js Add category tag to RSS feed (#534) 2023-10-02 19:20:13 -05:00
time.js Convert worker to ESM (#500) 2023-09-23 20:19:35 -05:00
timedate-scraper.js Attempt to get publication year when auto-titling links (#520) 2023-10-20 19:23:50 -05:00
url.js Update twitter url regexs to match x.com or twitter.com (#454) 2023-08-30 20:13:43 -05:00
validate.js Add a setting for Default Withdrawal max fee (#552) 2023-10-20 19:09:41 -05:00