import { DriveInfo } from '@solarpunkltd/file-manager-lib' import React, { ReactElement, useContext, useState } from 'react' import { createPortal } from 'react-dom' import DriveFill from 'remixicon-react/HardDrive2FillIcon' import Drive from 'remixicon-react/HardDrive2LineIcon' import MoreFill from 'remixicon-react/MoreFillIcon' import { Context as FMContext } from '../../../../../providers/FileManager' import { Context as SettingsContext } from '../../../../../providers/Settings' import { useContextMenu } from '../../../hooks/useContextMenu' import { handleDestroyAndForgetDrive } from '../../../utils/bee' import { truncateNameMiddle } from '../../../utils/common' import { ConfirmModal } from '../../ConfirmModal/ConfirmModal' import { ContextMenu } from '../../ContextMenu/ContextMenu' import './DriveItem.scss' interface Props { drive: DriveInfo onForgot?: () => Promise | void setErrorMessage?: (error: string) => void } export function ExpiredDriveItem({ drive, onForgot, setErrorMessage }: Props): ReactElement { const { beeApi } = useContext(SettingsContext) const { fm, adminDrive, setShowError } = useContext(FMContext) const [isHovered, setIsHovered] = useState(false) const [showForgetConfirm, setShowForgetConfirm] = useState(false) const { showContext, pos, contextRef, setPos, setShowContext } = useContextMenu() function handleMenuClick(e: React.MouseEvent) { setShowContext(true) setPos({ x: e.clientX, y: e.clientY }) } return (
setIsHovered(true)} onMouseLeave={() => setIsHovered(false)} >
{isHovered ? : }
{truncateNameMiddle(drive.name, 35, 8, 8)}
Stamp expired — files unavailable
{showContext && createPortal(
e.stopPropagation()} >
{ setShowContext(false) setShowForgetConfirm(true) }} > Forget drive
, document.body, )}
{showForgetConfirm && ( This will remove metadata for the drive with expired stamp Drive Name: {drive.name}{' '} Batch Id: {`${drive.batchId.toString().slice(0, 4)}...${drive.batchId.toString().slice(-4)}`} } confirmLabel="Forget drive" cancelLabel="Keep" onCancel={() => setShowForgetConfirm(false)} onConfirm={async () => { await handleDestroyAndForgetDrive({ beeApi, fm, drive, isDestroy: false, adminDrive, onSuccess: async () => { setShowForgetConfirm(false) await onForgot?.() }, onError: (err: unknown) => { setShowForgetConfirm(false) setErrorMessage?.(`Failed to forget drive ${drive.name}: ${err}`) setShowError(true) }, }) }} /> )}
) }