* Add directory download as zip feature Implements the ability for users to download directories as zip files if enabled in config. Adds a new API route for directory zipping, updates UI components to show a download button for directories, and introduces related config and type changes. Also includes a new download icon. * Windows path bugfix * Include empty directories in zip archive * Address feedback - `isDirectoryDownloadsAllowed` -> `areDirectoryDownloadsAllowed` - send `parentPath` & `name` to API instead of resolving `fullPath` on client - call `ensureUserPathIsValidAndSecurelyAccessible` before zipping - set config `allowDirectoryDownloads` default to `false` - add `zip` to Dockerfile and replace in-house zip algorithm - replace `download.svg` with heroicon's `arrow-down-tray` - `replace` with glob -> `replaceAll` with string * Cleanup apt-get command * Remove unused zip archive and directory functions
38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
import { Directory, DirectoryFile } from '/lib/types.ts';
|
|
import MainFiles from '/components/files/MainFiles.tsx';
|
|
|
|
interface FilesWrapperProps {
|
|
initialDirectories: Directory[];
|
|
initialFiles: DirectoryFile[];
|
|
initialPath: string;
|
|
baseUrl: string;
|
|
isFileSharingAllowed: boolean;
|
|
areDirectoryDownloadsAllowed: boolean;
|
|
fileShareId?: string;
|
|
}
|
|
|
|
// This wrapper is necessary because islands need to be the first frontend component, but they don't support functions as props, so the more complex logic needs to live in the component itself
|
|
export default function FilesWrapper(
|
|
{
|
|
initialDirectories,
|
|
initialFiles,
|
|
initialPath,
|
|
baseUrl,
|
|
isFileSharingAllowed,
|
|
areDirectoryDownloadsAllowed,
|
|
fileShareId,
|
|
}: FilesWrapperProps,
|
|
) {
|
|
return (
|
|
<MainFiles
|
|
initialDirectories={initialDirectories}
|
|
initialFiles={initialFiles}
|
|
initialPath={initialPath}
|
|
baseUrl={baseUrl}
|
|
isFileSharingAllowed={isFileSharingAllowed}
|
|
areDirectoryDownloadsAllowed={areDirectoryDownloadsAllowed}
|
|
fileShareId={fileShareId}
|
|
/>
|
|
);
|
|
}
|