import { ReactElement, useState, useContext } from 'react' import { createPortal } from 'react-dom' import Drive from 'remixicon-react/HardDrive2LineIcon' import DriveFill from 'remixicon-react/HardDrive2FillIcon' import MoreFill from 'remixicon-react/MoreFillIcon' import { ContextMenu } from '../../ContextMenu/ContextMenu' import { useContextMenu } from '../../../hooks/useContextMenu' import { DriveInfo } from '@solarpunkltd/file-manager-lib' import { Context as FMContext } from '../../../../../providers/FileManager' import { handleForgetDrive } from '../../../utils/bee' import { ConfirmModal } from '../../ConfirmModal/ConfirmModal' import './DriveItem.scss' interface Props { drive: DriveInfo onForgot?: () => Promise | void setErrorMessage?: (error: string) => void } export function ExpiredDriveItem({ drive, onForgot, setErrorMessage }: Props): ReactElement { const { fm, 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 ? : }
{drive.name}
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 () => { if (!fm) return await handleForgetDrive( fm, drive, async () => { setShowForgetConfirm(false) await onForgot?.() }, () => { setShowForgetConfirm(false) setErrorMessage?.(`Failed to forget drive ${drive.name}`) setShowError(true) }, ) }} /> )}
) }