import { Box, Grid2 as Grid, Link, Skeleton, styled, Typography, useMediaQuery, useTheme } from "@mui/material"; import { useCallback, useContext, useEffect, useMemo, useState } from "react"; import { Trans, useTranslation } from "react-i18next"; import { Link as RouterLink } from "react-router-dom"; import { getFileInfo } from "../../../../api/api"; import { FileType } from "../../../../api/explorer"; import { useAppDispatch } from "../../../../redux/hooks"; import { sizeToString } from "../../../../util"; import CrUri from "../../../../util/uri"; import { DenseFilledTextField, NoWrapTypography } from "../../../Common/StyledComponents"; import UserAvatar from "../../../Common/User/UserAvatar"; import FileBadge from "../../../FileManager/FileBadge"; import SettingForm from "../../../Pages/Setting/SettingForm"; import SinglePolicySelectionInput from "../../Common/SinglePolicySelectionInput"; import UserDialog from "../../User/UserDialog/UserDialog"; import { FileDialogContext } from "./FileDialog"; import FileDirectLinks from "./FileDirectLinks"; import FileEntity from "./FileEntity"; import FileMetadata from "./FileMetadata"; const StyledFileBadge = styled(FileBadge)(({ theme }) => ({ minHeight: "40px", border: `1px solid ${theme.palette.mode === "light" ? "rgba(0, 0, 0, 0.23)" : "rgba(255, 255, 255, 0.23)"}`, })); const FileForm = () => { const dispatch = useAppDispatch(); const theme = useTheme(); const isMobile = useMediaQuery(theme.breakpoints.down("md")); const { t } = useTranslation("dashboard"); const { formRef, values, setFile } = useContext(FileDialogContext); const [userDialogOpen, setUserDialogOpen] = useState(false); const [userDialogID, setUserDialogID] = useState(0); const [fileParentLoading, setFileParentLoading] = useState(true); const [fileParent, setFileParent] = useState(null); useEffect(() => { setFileParentLoading(true); dispatch(getFileInfo({ id: values.file_hash_id }, true)) .then((res) => { const crUri = new CrUri(res.path); setFileParent(crUri.parent().toString()); }) .catch(() => { setFileParent(null); }) .finally(() => { setFileParentLoading(false); }); }, [values.id]); const onNameChange = useCallback( (e: React.ChangeEvent) => { setFile((prev) => ({ ...prev, name: e.target.value })); }, [setFile], ); const userClicked = (e: React.MouseEvent) => { e.preventDefault(); setUserDialogOpen(true); setUserDialogID(values?.edges?.owner?.id ?? 0); }; const sizeUsed = useMemo(() => { return sizeToString(values?.edges?.entities?.reduce((acc, entity) => acc + (entity.size ?? 0), 0) ?? 0); }, [values?.edges?.entities]); return ( <> setUserDialogOpen(false)} userID={userDialogID} /> e.preventDefault()}> {values.id} {sizeToString(values.size ?? 0)} {sizeUsed} , ]} ns="dashboard" values={{ num: values.edges?.shares?.length ?? 0 }} /> {values?.edges?.owner?.nick} {!fileParentLoading && ( <> {fileParent && ( )} {!fileParent && "-"} )} {fileParentLoading && } {}} /> ); }; export default FileForm;