import { observer } from "mobx-react"; import { ArchiveIcon, DoneIcon, WarningIcon } from "outline-icons"; import * as React from "react"; import { useTranslation } from "react-i18next"; import { useTheme } from "styled-components"; import { FileOperationFormat, FileOperationState, FileOperationType, } from "@shared/types"; import FileOperation from "~/models/FileOperation"; import { Action } from "~/components/Actions"; import ListItem from "~/components/List/Item"; import Spinner from "~/components/Spinner"; import Time from "~/components/Time"; import useCurrentUser from "~/hooks/useCurrentUser"; import FileOperationMenu from "~/menus/FileOperationMenu"; type Props = { fileOperation: FileOperation; handleDelete?: (fileOperation: FileOperation) => Promise; }; const FileOperationListItem = ({ fileOperation, handleDelete }: Props) => { const { t } = useTranslation(); const user = useCurrentUser(); const theme = useTheme(); const stateMapping = { [FileOperationState.Creating]: t("Processing"), [FileOperationState.Uploading]: t("Processing"), [FileOperationState.Expired]: t("Expired"), [FileOperationState.Complete]: t("Completed"), [FileOperationState.Error]: t("Failed"), }; const iconMapping = { [FileOperationState.Creating]: , [FileOperationState.Uploading]: , [FileOperationState.Expired]: , [FileOperationState.Complete]: , [FileOperationState.Error]: , }; const formatMapping = { [FileOperationFormat.JSON]: "JSON", [FileOperationFormat.MarkdownZip]: "Markdown", [FileOperationFormat.HTMLZip]: "HTML", [FileOperationFormat.PDF]: "PDF", }; const format = formatMapping[fileOperation.format]; const title = fileOperation.type === FileOperationType.Import || fileOperation.collectionId ? fileOperation.name : t("All collections"); return ( {stateMapping[fileOperation.state]} •  {fileOperation.error && <>{fileOperation.error} • } {t(`{{userName}} requested`, { userName: user.id === fileOperation.user.id ? t("You") : fileOperation.user.name, })}