@@ -12,7 +12,7 @@ import type { DndTargetState } from 'features/dnd/types';
12
12
import { selectAutoAddBoardId } from 'features/gallery/store/gallerySelectors' ;
13
13
import { selectMaxImageUploadCount } from 'features/system/store/configSlice' ;
14
14
import { toast } from 'features/toast/toast' ;
15
- import { memo , useCallback , useEffect , useMemo , useRef , useState } from 'react' ;
15
+ import { memo , useCallback , useEffect , useRef , useState } from 'react' ;
16
16
import { useTranslation } from 'react-i18next' ;
17
17
import { uploadImages } from 'services/api/endpoints/images' ;
18
18
import { useBoardName } from 'services/api/hooks/useBoardName' ;
@@ -75,12 +75,11 @@ export const FullscreenDropzone = memo(() => {
75
75
const maxImageUploadCount = useAppSelector ( selectMaxImageUploadCount ) ;
76
76
const [ dndState , setDndState ] = useState < DndTargetState > ( 'idle' ) ;
77
77
78
- const uploadFilesSchema = useMemo ( ( ) => getFilesSchema ( maxImageUploadCount ) , [ maxImageUploadCount ] ) ;
79
-
80
78
const validateAndUploadFiles = useCallback (
81
79
( files : File [ ] ) => {
82
80
log . info ( 'validateAndUploadFiles' ) ;
83
81
const { getState } = getStore ( ) ;
82
+ const uploadFilesSchema = getFilesSchema ( maxImageUploadCount ) ;
84
83
const parseResult = uploadFilesSchema . safeParse ( files ) ;
85
84
log . info ( 'parseResult' ) ;
86
85
@@ -110,7 +109,21 @@ export const FullscreenDropzone = memo(() => {
110
109
111
110
uploadImages ( uploadArgs ) ;
112
111
} ,
113
- [ maxImageUploadCount , t , uploadFilesSchema ]
112
+ [ maxImageUploadCount , t ]
113
+ ) ;
114
+
115
+ const onPaste = useCallback (
116
+ ( e : ClipboardEvent ) => {
117
+ log . info ( 'in paste' ) ;
118
+ log . info ( `clipboardData: ${ JSON . stringify ( e . clipboardData ) } ` ) ;
119
+ if ( ! e . clipboardData ?. files ) {
120
+ log . info ( 'no files' ) ;
121
+ return ;
122
+ }
123
+ const files = Array . from ( e . clipboardData . files ) ;
124
+ validateAndUploadFiles ( files ) ;
125
+ } ,
126
+ [ validateAndUploadFiles ]
114
127
) ;
115
128
116
129
useEffect ( ( ) => {
@@ -150,31 +163,19 @@ export const FullscreenDropzone = memo(() => {
150
163
151
164
useEffect ( ( ) => {
152
165
log . info ( 'use effect' ) ;
153
- const controller = new AbortController ( ) ;
166
+ // const controller = new AbortController();
154
167
try {
155
- window . addEventListener (
156
- 'paste' ,
157
- ( e ) => {
158
- log . info ( 'in paste' ) ;
159
- log . info ( `clipboardData: ${ JSON . stringify ( e . clipboardData ) } ` ) ;
160
- if ( ! e . clipboardData ?. files ) {
161
- log . info ( 'no files' ) ;
162
- return ;
163
- }
164
- const files = Array . from ( e . clipboardData . files ) ;
165
- validateAndUploadFiles ( files ) ;
166
- } ,
167
- { signal : controller . signal }
168
- ) ;
168
+ window . addEventListener ( 'paste' , onPaste ) ;
169
169
} catch ( error ) {
170
170
log . info ( `error: ${ JSON . stringify ( error ) } ` ) ;
171
171
}
172
172
173
173
return ( ) => {
174
174
log . info ( 'abort' ) ;
175
- controller . abort ( ) ;
175
+ window . removeEventListener ( 'paste' , onPaste ) ;
176
+ // controller.abort();
176
177
} ;
177
- } , [ validateAndUploadFiles ] ) ;
178
+ } , [ onPaste ] ) ;
178
179
179
180
return (
180
181
< Box ref = { ref } data-dnd-state = { dndState } sx = { sx } >
0 commit comments