@@ -136,7 +136,8 @@ export function UploadModal(closeModal) {
136136 setFetchingFiles ( false ) ;
137137 } ;
138138
139- const handleDeleteFile = async ( file ) => {
139+ const handleDeleteFile = async ( e , file ) => {
140+ e . stopPropagation ( ) ;
140141 await deleteFile ( file . Key ) ;
141142 await fetchDashboardFiles ( ) ;
142143 } ;
@@ -237,76 +238,84 @@ export function UploadModal(closeModal) {
237238 </ Show >
238239 < Show when = { dashOpen ( ) } >
239240 < ModalBody >
240- < p > Total bucket usage: { formatFileSize ( dashboardFiles ( ) . reduce ( ( acc , file ) => acc + file . Size , 0 ) ) } </ p >
241- < div class = { styles . previewArea } >
242- < For each = { dashboardFiles ( ) } >
243- { ( file ) => {
244- const extension = file . Key . split ( "." ) . pop ( ) ;
245- const isImage = [ "jpg" , "jpeg" , "png" , "gif" , "webp" , "svg" ] . includes ( extension ) ;
246- const isVideo = [ "mp4" , "webm" ] . includes ( extension ) ;
241+ < Show when = { fetchingFiles ( ) } >
242+ < p > Loading files...</ p >
243+ </ Show >
244+ < Show when = { ! fetchingFiles ( ) } >
245+ < p >
246+ Total bucket usage: { formatFileSize ( dashboardFiles ( ) . reduce ( ( acc , file ) => acc + file . Size , 0 ) ) }
247+ </ p >
248+ < div class = { styles . previewArea } >
249+ < For each = { dashboardFiles ( ) } >
250+ { ( file ) => {
251+ const extension = file . Key . split ( "." ) . pop ( ) ;
252+ const isImage = [ "jpg" , "jpeg" , "png" , "gif" , "webp" , "svg" ] . includes ( extension ) ;
253+ const isVideo = [ "mp4" , "webm" ] . includes ( extension ) ;
247254
248- const [ preview , setPreview ] = createSignal ( store . previews [ file . Key ] ) ;
255+ const [ preview , setPreview ] = createSignal ( store . previews [ file . Key ] ) ;
249256
250- if ( ! preview ( ) && ( isImage || isVideo ) ) {
251- getFilePreview ( file , isImage , isVideo , store . publicUrl ) . then ( ( url ) => {
252- store . previews = { ...store . previews , [ file . Key ] : url } ;
253- setPreview ( url ) ;
254- } ) ;
255- }
257+ if ( ! preview ( ) && ( isImage || isVideo ) ) {
258+ getFilePreview ( file , isImage , isVideo , store . publicUrl ) . then ( ( url ) => {
259+ store . previews = { ...store . previews , [ file . Key ] : url } ;
260+ setPreview ( url ) ;
261+ } ) ;
262+ }
256263
257- return (
258- < div
259- class = { styles . dashboardItem }
260- use :focusring
261- onclick = { ( ) => {
262- const fiber = getFiber ( document . querySelector ( '[class*="slateContainer"]' ) ) ;
263- const editor = fiber . child . pendingProps . editor ;
264+ return (
265+ < div
266+ class = { styles . dashboardItem }
267+ use :focusring
268+ onclick = { ( e ) => {
269+ e . stopPropagation ( ) ;
270+ const fiber = getFiber ( document . querySelector ( '[class*="slateContainer"]' ) ) ;
271+ const editor = fiber . child . pendingProps . editor ;
264272
265- const url = getUrl ( file , store . publicUrl ) ;
266- editor . insertText ( url + " " ) ;
267- } }
268- >
269- { preview ( ) && isImage && (
270- < img src = { preview ( ) } alt = { file . Key } class = { styles . previewImage } />
271- ) }
272- { preview ( ) && isVideo && (
273- < img src = { preview ( ) } alt = { file . Key } class = { styles . previewVideo } />
274- ) }
275- { ( ! preview ( ) || ( ! isImage && ! isVideo ) ) && < div class = { styles . previewIcon } > 📄</ div > }
276- < div class = { styles . previewItemInfo } >
277- < p > { file . Key } </ p >
278- < p > { formatFileSize ( file . Size ) } </ p >
279- < p > { formatDate ( file . LastModified ) } </ p >
273+ const url = getUrl ( file , store . publicUrl ) ;
274+ editor . insertText ( url + " " ) ;
275+ } }
276+ >
277+ { preview ( ) && isImage && (
278+ < img src = { preview ( ) } alt = { file . Key } class = { styles . previewImage } />
279+ ) }
280+ { preview ( ) && isVideo && (
281+ < img src = { preview ( ) } alt = { file . Key } class = { styles . previewVideo } />
282+ ) }
283+ { ( ! preview ( ) || ( ! isImage && ! isVideo ) ) && < div class = { styles . previewIcon } > 📄</ div > }
284+ < div class = { styles . previewItemInfo } >
285+ < p > { file . Key } </ p >
286+ < p > { formatFileSize ( file . Size ) } </ p >
287+ < p > { formatDate ( file . LastModified ) } </ p >
288+ </ div >
289+ < button class = { styles . removeButton } onClick = { ( e ) => handleDeleteFile ( e , file ) } >
290+ < svg
291+ aria-hidden = "true"
292+ role = "img"
293+ xmlns = "http://www.w3.org/2000/svg"
294+ width = "24"
295+ height = "24"
296+ fill = "none"
297+ viewBox = "0 0 24 24"
298+ >
299+ < path
300+ fill = "currentColor"
301+ d = "M14.25 1c.41 0 .75.34.75.75V3h5.25c.41 0 .75.34.75.75v.5c0 .41-.34.75-.75.75H3.75A.75.75 0 0 1 3 4.25v-.5c0-.41.34-.75.75-.75H9V1.75c0-.41.34-.75.75-.75h4.5Z"
302+ class = ""
303+ > </ path >
304+ < path
305+ fill = "currentColor"
306+ fill-rule = "evenodd"
307+ d = "M5.06 7a1 1 0 0 0-1 1.06l.76 12.13a3 3 0 0 0 3 2.81h8.36a3 3 0 0 0 3-2.81l.75-12.13a1 1 0 0 0-1-1.06H5.07ZM11 12a1 1 0 1 0-2 0v6a1 1 0 1 0 2 0v-6Zm3-1a1 1 0 0 1 1 1v6a1 1 0 1 1-2 0v-6a1 1 0 0 1 1-1Z"
308+ clip-rule = "evenodd"
309+ class = ""
310+ > </ path >
311+ </ svg >
312+ </ button >
280313 </ div >
281- < button class = { styles . removeButton } onClick = { ( ) => handleDeleteFile ( file ) } >
282- < svg
283- aria-hidden = "true"
284- role = "img"
285- xmlns = "http://www.w3.org/2000/svg"
286- width = "24"
287- height = "24"
288- fill = "none"
289- viewBox = "0 0 24 24"
290- >
291- < path
292- fill = "currentColor"
293- d = "M14.25 1c.41 0 .75.34.75.75V3h5.25c.41 0 .75.34.75.75v.5c0 .41-.34.75-.75.75H3.75A.75.75 0 0 1 3 4.25v-.5c0-.41.34-.75.75-.75H9V1.75c0-.41.34-.75.75-.75h4.5Z"
294- class = ""
295- > </ path >
296- < path
297- fill = "currentColor"
298- fill-rule = "evenodd"
299- d = "M5.06 7a1 1 0 0 0-1 1.06l.76 12.13a3 3 0 0 0 3 2.81h8.36a3 3 0 0 0 3-2.81l.75-12.13a1 1 0 0 0-1-1.06H5.07ZM11 12a1 1 0 1 0-2 0v6a1 1 0 1 0 2 0v-6Zm3-1a1 1 0 0 1 1 1v6a1 1 0 1 1-2 0v-6a1 1 0 0 1 1-1Z"
300- clip-rule = "evenodd"
301- class = ""
302- > </ path >
303- </ svg >
304- </ button >
305- </ div >
306- ) ;
307- } }
308- </ For >
309- </ div >
314+ ) ;
315+ } }
316+ </ For >
317+ </ div >
318+ </ Show >
310319 </ ModalBody >
311320 </ Show >
312321 < ModalFooter >
0 commit comments