Skip to content

Commit 79e899c

Browse files
committed
♻️(frontend) add hooks useUploadFile
Move upload file logic to hooks useUploadFile. It will be more readable and easy to reuse.
1 parent 2194301 commit 79e899c

File tree

3 files changed

+42
-26
lines changed

3 files changed

+42
-26
lines changed

src/frontend/apps/impress/src/features/docs/doc-editor/components/BlockNoteEditor.tsx

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,14 @@ import { BlockNoteView } from '@blocknote/mantine';
44
import '@blocknote/mantine/style.css';
55
import { useCreateBlockNote } from '@blocknote/react';
66
import { HocuspocusProvider } from '@hocuspocus/provider';
7-
import { t } from 'i18next';
8-
import React, { useCallback, useEffect } from 'react';
7+
import React, { useEffect } from 'react';
98
import { useTranslation } from 'react-i18next';
109

1110
import { Box, TextErrors } from '@/components';
1211
import { useAuthStore } from '@/core/auth';
13-
import { useMediaUrl } from '@/core/config';
1412
import { Doc } from '@/features/docs/doc-management';
1513

16-
import { useCreateDocAttachment } from '../api/useCreateDocUpload';
14+
import { useUploadFile } from '../hook';
1715
import useSaveDoc from '../hook/useSaveDoc';
1816
import { useEditorStore, useHeadingStore } from '../stores';
1917
import { randomColor } from '../utils';
@@ -87,33 +85,14 @@ export const BlockNoteEditor = ({
8785
const isVersion = doc.id !== storeId;
8886
const { userData } = useAuthStore();
8987
const { setEditor } = useEditorStore();
90-
const mediaUrl = useMediaUrl();
91-
88+
const { t } = useTranslation();
9289
const readOnly = !doc.abilities.partial_update || isVersion;
9390
useSaveDoc(doc.id, provider.document, !readOnly);
94-
const {
95-
mutateAsync: createDocAttachment,
96-
isError: isErrorAttachment,
97-
error: errorAttachment,
98-
} = useCreateDocAttachment();
9991
const { setHeadings, resetHeadings } = useHeadingStore();
10092
const { i18n } = useTranslation();
10193
const lang = i18n.language;
10294

103-
const uploadFile = useCallback(
104-
async (file: File) => {
105-
const body = new FormData();
106-
body.append('file', file);
107-
108-
const ret = await createDocAttachment({
109-
docId: doc.id,
110-
body,
111-
});
112-
113-
return `${mediaUrl}${ret.file}`;
114-
},
115-
[createDocAttachment, doc.id, mediaUrl],
116-
);
95+
const { uploadFile, errorAttachment } = useUploadFile(doc.id);
11796

11897
const editor = useCreateBlockNote(
11998
{
@@ -153,7 +132,7 @@ export const BlockNoteEditor = ({
153132

154133
return (
155134
<Box $css={cssEditor(readOnly)}>
156-
{isErrorAttachment && (
135+
{errorAttachment && (
157136
<Box $margin={{ bottom: 'big' }}>
158137
<TextErrors
159138
causes={errorAttachment.cause}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
export * from './useSaveDoc';
2+
export * from './useUploadFile';
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { useCallback } from 'react';
2+
3+
import { useMediaUrl } from '@/core/config';
4+
5+
import { useCreateDocAttachment } from '../api';
6+
7+
export const useUploadFile = (docId: string) => {
8+
const mediaUrl = useMediaUrl();
9+
const {
10+
mutateAsync: createDocAttachment,
11+
isError: isErrorAttachment,
12+
error: errorAttachment,
13+
} = useCreateDocAttachment();
14+
15+
const uploadFile = useCallback(
16+
async (file: File) => {
17+
const body = new FormData();
18+
body.append('file', file);
19+
20+
const ret = await createDocAttachment({
21+
docId,
22+
body,
23+
});
24+
25+
return `${mediaUrl}${ret.file}`;
26+
},
27+
[createDocAttachment, docId, mediaUrl],
28+
);
29+
30+
return {
31+
uploadFile,
32+
isErrorAttachment,
33+
errorAttachment,
34+
};
35+
};

0 commit comments

Comments
 (0)