add loading state for folder download
This commit is contained in:
parent
a35a7a790b
commit
4a7398bf59
1 changed files with 18 additions and 11 deletions
|
@ -166,6 +166,7 @@ const FileListing: FunctionComponent<{ query?: ParsedUrlQuery }> = ({ query }) =
|
||||||
const [selected, setSelected] = useState<{ [key: string]: boolean }>({})
|
const [selected, setSelected] = useState<{ [key: string]: boolean }>({})
|
||||||
const [totalSelected, setTotalSelected] = useState<0 | 1 | 2>(0)
|
const [totalSelected, setTotalSelected] = useState<0 | 1 | 2>(0)
|
||||||
const [totalGenerating, setTotalGenerating] = useState<boolean>(false)
|
const [totalGenerating, setTotalGenerating] = useState<boolean>(false)
|
||||||
|
const [folderGenerating, setFolderGenerating] = useState<{ [key: string]: boolean }>({})
|
||||||
|
|
||||||
const router = useRouter()
|
const router = useRouter()
|
||||||
const clipboard = useClipboard()
|
const clipboard = useClipboard()
|
||||||
|
@ -302,7 +303,8 @@ const FileListing: FunctionComponent<{ query?: ParsedUrlQuery }> = ({ query }) =
|
||||||
}
|
}
|
||||||
|
|
||||||
// Folder recursive download
|
// Folder recursive download
|
||||||
const handleFolderDownload = (path: string, name?: string) => () => {
|
const handleFolderDownload = (path: string, id: string, name?: string) => () => {
|
||||||
|
setFolderGenerating({ ...folderGenerating, [id]: true })
|
||||||
const files = (async function* () {
|
const files = (async function* () {
|
||||||
for await (const { meta: c, path: p, isFolder } of treeList(path)) {
|
for await (const { meta: c, path: p, isFolder } of treeList(path)) {
|
||||||
yield {
|
yield {
|
||||||
|
@ -313,7 +315,7 @@ const FileListing: FunctionComponent<{ query?: ParsedUrlQuery }> = ({ query }) =
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})()
|
})()
|
||||||
saveTreeFiles(files, name)
|
saveTreeFiles(files, name).then(() => setFolderGenerating({ ...folderGenerating, [id]: false }))
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
|
@ -415,15 +417,20 @@ const FileListing: FunctionComponent<{ query?: ParsedUrlQuery }> = ({ query }) =
|
||||||
>
|
>
|
||||||
<FontAwesomeIcon icon={['far', 'copy']} />
|
<FontAwesomeIcon icon={['far', 'copy']} />
|
||||||
</span>
|
</span>
|
||||||
<span
|
{folderGenerating[c.id] ? (
|
||||||
title="Download folder"
|
<Downloading title="Downloading folder, refresh page to cancel" />
|
||||||
className="hover:bg-gray-300 dark:hover:bg-gray-600 p-2 rounded cursor-pointer"
|
) : (
|
||||||
onClick={() => {
|
<span
|
||||||
handleFolderDownload(`${path === '/' ? '' : path}/${encodeURIComponent(c.name)}`, c.name)()
|
title="Download folder"
|
||||||
}}
|
className="hover:bg-gray-300 dark:hover:bg-gray-600 p-2 rounded cursor-pointer"
|
||||||
>
|
onClick={() => {
|
||||||
<FontAwesomeIcon icon={['far', 'arrow-alt-circle-down']} />
|
const p = `${path === '/' ? '' : path}/${encodeURIComponent(c.name)}`
|
||||||
</span>
|
handleFolderDownload(p, c.id, c.name)()
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<FontAwesomeIcon icon={['far', 'arrow-alt-circle-down']} />
|
||||||
|
</span>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
) : (
|
) : (
|
||||||
<div className="md:flex dark:text-gray-400 hidden p-1 text-gray-700">
|
<div className="md:flex dark:text-gray-400 hidden p-1 text-gray-700">
|
||||||
|
|
Loading…
Reference in a new issue