import {Editor, Extension} from '@tiptap/core' import toast from 'react-hot-toast' import {useMutation} from 'web/hooks/use-mutation' import {uploadImage} from 'web/lib/firebase/storage' export const Upload = Extension.create({ name: 'upload', addStorage: () => ({mutation: {}}), }) export const useUploadMutation = (editor: Editor | null) => useMutation( (files: File[]) => // TODO: Images should be uploaded under a particular username Promise.all(files.map((file) => uploadImage('default', file))), { onSuccess(urls) { if (!editor || !urls.length) return let trans = editor.chain().focus() urls.forEach((src) => { trans = trans.setImage({src}) trans = trans.createParagraphNear() }) trans.run() }, onError(error: any) { toast.error(error.message ?? error) }, }, ) export type UploadMutation = ReturnType