@@ -5,7 +5,7 @@ import { useCallback, useEffect, useState } from "react";
55import { H } from "../APIClient" ;
66import { UploadQueue , QueueItem } from "../UploadQueue" ;
77import { ItemComponent } from "@/Components" ;
8- import { Item } from "../hupload" ;
8+ import { UploadableItem } from "../hupload" ;
99import { useAuthContext } from "@/AuthContext" ;
1010import { Message } from "@/Components/Message" ;
1111import { useShare } from "@/hooks" ;
@@ -16,9 +16,7 @@ import { ErrorPage } from "./ErrorPage";
1616export function SharePage ( ) {
1717 const { t } = useTranslation ( ) ;
1818
19- const [ items , setItems ] = useState < Item [ ] | undefined > ( undefined )
20- const [ queueItems , setQueueItems ] = useState < QueueItem [ ] > ( [ ] )
21- //const [expired,setExpired] = useState(false)
19+ const [ items , setItems ] = useState < UploadableItem [ ] > ( [ ] )
2220 const [ error , setError ] = useState < undefined | AxiosError > ( undefined )
2321
2422 // Initialize hooks
@@ -29,17 +27,41 @@ export function SharePage() {
2927 const expired = ( shareError ?. response ?. status === 410 )
3028
3129 const updateProgress = useCallback ( ( progress : QueueItem [ ] ) => {
32- setQueueItems ( ( currentQueue ) => {
33- const j = currentQueue . map ( ( currentItem ) => {
34- const p = progress . find ( ( p ) => p . file . name === currentItem . file . name )
30+ setItems ( ( currentItems ) => {
31+ const i = currentItems . map ( ( currentItem ) => {
32+ const p = progress . find ( ( p ) => p . file . name === currentItem . Path . split ( "/" ) [ 1 ] )
3533 if ( p ) {
36- return p
34+ if ( p . finished ) {
35+ setTimeout ( ( ) => {
36+ setItems ( ( currentItems ) => {
37+ return currentItems . map ( ( currentItem ) => {
38+ if ( currentItem . ItemInfo . Name === p . file . name ) {
39+ return { ...currentItem , QueueItem : undefined }
40+ }
41+ return currentItem
42+ } )
43+ } )
44+ } , 2000 )
45+ }
46+ return { ...currentItem , QueueItem : p }
3747 }
3848 return currentItem
3949 } )
40- const k = progress . filter ( ( p ) => ! j . some ( ( i ) => i . file . name === p . file . name ) )
41- return [ ...k , ...j ]
42- } )
50+ return i
51+ } )
52+
53+
54+ // setQueueItems((currentQueue) => {
55+ // const j = currentQueue.map((currentItem) => {
56+ // const p = progress.find((p) => p.file.name === currentItem.file.name)
57+ // if (p) {
58+ // return p
59+ // }
60+ // return currentItem
61+ // })
62+ // const k = progress.filter((p) => !j.some((i) => i.file.name === p.file.name))
63+ // return [...k, ...j]
64+ // })
4365 } , [ ] )
4466
4567 const queue = new UploadQueue ( H , "/shares/" + share ?. name , updateProgress )
@@ -50,7 +72,7 @@ export function SharePage() {
5072 // Get items from share
5173 if ( share ) {
5274 H . get ( '/shares/' + share . name + '/items' ) . then ( ( res ) => {
53- setItems ( res as Item [ ] )
75+ setItems ( res as UploadableItem [ ] )
5476 } )
5577 . catch ( ( e ) => {
5678 setError ( e )
@@ -153,10 +175,10 @@ export function SharePage() {
153175 // deleteItem deletes an item from the share.
154176 const deleteItem = ( item : string ) => {
155177 H . delete ( '/shares/' + share . name + '/items/' + item ) . then ( ( ) => {
156- setItems ( items ?. filter ( ( i ) => i . Path !== share . name + "/" + item ) )
178+ setItems ( items ?. filter ( ( i ) => i . Path !== share . name + "/" + item ) )
157179 } )
158180 . catch ( ( e ) => {
159- console . log ( e )
181+ console . log ( e )
160182 } )
161183 }
162184
@@ -172,7 +194,7 @@ export function SharePage() {
172194 </ Tooltip >
173195 ) }
174196 </ CopyButton >
175- { canDownload ( ) && items . length + queueItems . filter ( ( i ) => i . failed === false && i . finished === true ) . length > 0 &&
197+ { canDownload ( ) && items . length &&
176198 < Tooltip withArrow arrowOffset = { 10 } arrowSize = { 4 } label = { t ( "download_all" ) } >
177199 < Button component = "a" href = { '/d/' + share . name } justify = "center" variant = "outline" size = "xs" > < IconDownload style = { { width : '70%' , height : '70%' } } stroke = { 1.5 } /> { t ( "download_button" ) } </ Button >
178200 </ Tooltip >
@@ -193,24 +215,32 @@ export function SharePage() {
193215 < >
194216 < Dropzone
195217 onDrop = { ( files ) => {
196- // Filter out files that are already uploaded
197- const newItems = items . filter ( ( i ) => {
198- return ! files . some ( ( f ) => f . name === i . Path . split ( "/" ) [ 1 ] )
218+ const uploadableItems = files . map ( ( f ) => {
219+ return {
220+ Path : share . name + "/" + f . name ,
221+ ItemInfo : {
222+ Name : f . name ,
223+ Size : f . size ,
224+ } ,
225+ QueueItem : { } ,
226+ } as UploadableItem
227+ } )
228+
229+ setItems ( ( currentItems ) => {
230+ const i = [ ...currentItems , ...uploadableItems ]
231+ return i
199232 } )
233+ // // Filter out files that are already uploaded
234+ // const newItems = items.filter((i) => {
235+ // return !files.some((f) => f.name === i.Path.split("/")[1])
236+ // })
200237
201- setItems ( newItems )
238+ // setItems(newItems)
202239
203240 queue . addFiles ( files )
204- // .then((r) => {
205-
206- // //const finishedItems = r as Item[]
207-
208- // //setQueueItems([])
209- // setItems([...finishedItems, ...newItems])
210- // })
211- . catch ( ( e ) => {
212- console . log ( e )
213- } )
241+ . catch ( ( e ) => {
242+ console . log ( e )
243+ } )
214244 } }
215245
216246 onReject = { ( files ) => console . log ( 'rejected files' , files ) }
@@ -243,14 +273,6 @@ export function SharePage() {
243273 </ Dropzone >
244274 </ > }
245275
246- {
247- // Display upload queue items (queue items uploading or finished
248- // uploading)
249- queueItems . map ( ( q ) => (
250- < ItemComponent download = { false } canDelete = { false } key = { 'up_' + q . file . name } queueItem = { q } />
251- ) )
252- }
253-
254276 {
255277 // Display share items
256278 items . map ( ( item ) => (
0 commit comments