import { useState, useMemo } from 'react'; import classes from './Repo.module.css'; import { IconSettings, IconInfoCircle, IconChevronDown, IconChevronUp, IconBellOff, IconLockPlus, } from '@tabler/icons-react'; import StorageBar from '../UI/StorageBar/StorageBar'; import QuickCommands from './QuickCommands/QuickCommands'; import { Repository, WizardEnvType, Optional } from '~/types'; import { fromUnixTime, formatDistanceStrict } from 'date-fns'; import useMedia from 'use-media'; type RepoProps = Omit & { repoManageEditHandler: () => void; wizardEnv: Optional; }; export default function Repo(props: RepoProps) { const isMobile = useMedia({ maxWidth: 1000 }); const currentDate = useMemo(() => new Date(), []); //Load displayDetails from LocalStorage const displayDetailsFromLS = (): boolean => { const key = `displayDetailsRepo${props.id}`; try { const storedValue = localStorage.getItem(key); if (storedValue === null) { const defaultValue = true; localStorage.setItem(key, JSON.stringify(defaultValue)); return defaultValue; } const parsedValue = JSON.parse(storedValue); if (typeof parsedValue === 'boolean') { return parsedValue; } localStorage.removeItem(key); return true; } catch (error) { localStorage.removeItem(key); return true; } }; //States const [displayDetails, setDisplayDetails] = useState(displayDetailsFromLS); //BUTTON : Display or not repo details for ONE repo const displayDetailsForOneHandler = (boolean: boolean) => { //Update localStorage localStorage.setItem('displayDetailsRepo' + props.id, JSON.stringify(boolean)); setDisplayDetails(boolean); }; //Status indicator const statusIndicator = () => { return props.status ? classes.statusIndicatorGreen : classes.statusIndicatorRed; }; //Alert indicator const alertIndicator = () => { if (props.alert === 0) { return (
); } }; const appendOnlyModeIndicator = () => { if (props.appendOnlyMode) { return (
); } }; const mobileView = () => { return ( <>
{props.alias}
{appendOnlyModeIndicator()} {alertIndicator()} {props.comment && (
{props.comment}
)}
{props.lastSave === 0 ? '-' : formatDistanceStrict(fromUnixTime(props.lastSave), currentDate, { addSuffix: true, })}
); }; if (isMobile) { return mobileView(); } else { return ( <> {displayDetails ? ( <>
{props.comment && (
{props.comment}
)} {appendOnlyModeIndicator()} {alertIndicator()}
{props.alias}
Repository Storage Size Storage Used Last change Edit
{props.repositoryName} {props.storageSize} GB
{props.lastSave === 0 ? '-' : formatDistanceStrict(fromUnixTime(props.lastSave), currentDate, { addSuffix: true, })}
props.repoManageEditHandler()} />
) : ( <>
{props.alias}
{appendOnlyModeIndicator()} {alertIndicator()} {props.comment && (
{props.comment}
)}
{props.lastSave === 0 ? '-' : formatDistanceStrict(fromUnixTime(props.lastSave), currentDate, { addSuffix: true, })}
)} {displayDetails ? (
{ displayDetailsForOneHandler(false); }} />
) : (
{ displayDetailsForOneHandler(true); }} />
)} ); } }