import React, {useContext} from "react"; import FileBrowser from 'react-keyed-file-browser'; import { Button as SButton, CardContent, CardDescription, CardHeader, CardMeta, Confirm, Container, Divider, Dropdown, Header as SHeader, Image, Modal, PlaceholderLine, TableCell, TableHeaderCell, } from "semantic-ui-react"; import 'react-keyed-file-browser/dist/react-keyed-file-browser.css'; import {deleteFile, refreshDirectoryFiles, refreshFiles} from "../api"; import { CardGroupCentered, CardPosterLink, cardTitleWrapper, isoDatetimeToString, ExternalCardLink, FileIcon, humanFileSize, isEmpty, mimetypeColor, PageContainer, Paginator, textEllipsis, useTitle, CardLink } from "./Common"; import {useBrowseFiles, useQuery, useSearchFiles} from "../hooks/customHooks"; import {Route, Routes} from "react-router-dom"; import {CardPlacholder} from "./Placeholder"; import {ArchiveCard, ArchiveRowCells} from "./Archive"; import Grid from "semantic-ui-react/dist/commonjs/collections/Grid"; import {ThemeContext} from "../contexts/contexts"; import {Button, Card, CardIcon, Header, Icon, Placeholder, Segment} from "./Theme"; import {SelectableTable} from "./Tables"; import {VideoCard, VideoRowCells} from "./Videos"; import _ from 'lodash'; const icons = { File: , Folder: , FolderOpen: , Image: , PDF: , }; export function Files() { useTitle('Files'); const {t} = useContext(ThemeContext); const {browseFiles, setOpenFolders, fetchFiles} = useBrowseFiles(); const [deleteOpen, setDeleteOpen] = React.useState(false); const [selectedFile, setSelectedFile] = React.useState(null); const [selectedDirectory, setSelectedDirectory] = React.useState(null); const handleFolderChange = async (file, browserProps) => { let openFolders = Object.keys(browserProps.openFolders); setOpenFolders(openFolders); } const onSelect = async (file) => { // A user can only select one file or one directory. if (file.key.endsWith('/')) { setSelectedFile(null); setSelectedDirectory(file); } else { setSelectedDirectory(null); setSelectedFile(file); } } const onDeleteFile = async () => { await deleteFile(selectedFile.key); await fetchFiles(); } const openDelete = () => { setDeleteOpen(true); } const closeDelete = () => { setDeleteOpen(false); } const clearSelection = async (e) => { e.preventDefault(); setOpenFolders(null); setSelectedDirectory(null); setSelectedFile(null); await fetchFiles(); } let clearButton = ; let buttons; if (selectedFile) { buttons = <> ; } else if (selectedDirectory) { buttons = <> ; } else { buttons = ; } return <> {clearButton} {buttons}
<>} // Hide the preview that the 3rd party provided. />
} function EbookCard({file}) { const {s} = useContext(ThemeContext); let {ebook, suffix} = file; const downloadUrl = `/download/${encodeURIComponent(file.path)}`; const isEpub = file['mimetype'].startsWith('application/epub'); const viewerUrl = isEpub ? `/epub.html?url=${downloadUrl}` : null; let cover = ; if (ebook && ebook.cover_path) { const coverSrc = `/media/${encodeURIComponent(ebook.cover_path)}`; cover = ; } suffix = suffix ? _.trimStart(suffix, '.').toUpperCase() : null; const downloadButton = ; const detailsButton = ; } function DirectoryFilesRefreshButton({directory}) { const {t} = useContext(ThemeContext); const [loading, setLoading] = React.useState(false); const [name, setName] = React.useState('refresh'); const handleClick = async () => { setLoading(true); await refreshDirectoryFiles(directory); setLoading(false); setName('check'); } return <> ; } export function FilesRoute() { return ( }/> ); }