From e1fdd52676653c65beba06283f07e470d7ee4668 Mon Sep 17 00:00:00 2001 From: rolandlor <33499567+rolandlor@users.noreply.github.com> Date: Wed, 18 Mar 2026 16:00:22 +0100 Subject: [PATCH] fix: spdv-963 - Expired admin drive upgrading handling (#230) * fix: spdv-963 * refactor: spdv-963 --- .../AdminStatusBar/AdminStatusBar.tsx | 19 +++++++++++++++++-- .../UpgradeDriveModal/UpgradeDriveModal.tsx | 11 +++++++++++ 2 files changed, 28 insertions(+), 2 deletions(-) diff --git a/src/modules/filemanager/components/AdminStatusBar/AdminStatusBar.tsx b/src/modules/filemanager/components/AdminStatusBar/AdminStatusBar.tsx index 82c15ee..953c273 100644 --- a/src/modules/filemanager/components/AdminStatusBar/AdminStatusBar.tsx +++ b/src/modules/filemanager/components/AdminStatusBar/AdminStatusBar.tsx @@ -3,11 +3,12 @@ import { DriveInfo, estimateDriveListMetadataSize } from '@solarpunkltd/file-man import { ReactElement, useCallback, useContext, useEffect, useMemo, useState } from 'react' import { Context as FMContext } from '../../../../providers/FileManager' +import { Context as SettingsContext } from '../../../../providers/Settings' import { getHumanReadableFileSize } from '../../../../utils/file' import { FILE_MANAGER_EVENTS, POLLING_TIMEOUT_MS } from '../../constants/common' import { TOOLTIPS } from '../../constants/tooltips' import { useStampPolling } from '../../hooks/useStampPolling' -import { calculateStampCapacityMetrics } from '../../utils/bee' +import { calculateStampCapacityMetrics, validateStampStillExists } from '../../utils/bee' import { ConfirmModal } from '../ConfirmModal/ConfirmModal' import { ProgressBar } from '../ProgressBar/ProgressBar' import { Tooltip } from '../Tooltip/Tooltip' @@ -32,6 +33,7 @@ export function AdminStatusBar({ setErrorMessage, }: AdminStatusBarProps): ReactElement { const { drives, setShowError, refreshStamp } = useContext(FMContext) + const { beeApi } = useContext(SettingsContext) const [isUpgradeDriveModalOpen, setIsUpgradeDriveModalOpen] = useState(false) const [isUpgradeTimeoutModalOpen, setIsUpgradeTimeoutModalOpen] = useState(false) @@ -236,7 +238,20 @@ export function AdminStatusBar({
!isBusy && actualStamp && adminDrive && setIsUpgradeDriveModalOpen(true)} + onClick={async () => { + if (!isBusy && actualStamp && adminDrive && beeApi) { + const isStampValid = await validateStampStillExists(beeApi, actualStamp.batchID) + + if (!isStampValid) { + setErrorMessage?.('The admin drive has expired. Please clear the browser cache and reload the page.') + setShowError(true) + + return + } + + setIsUpgradeDriveModalOpen(true) + } + }} aria-disabled={isBusy ? 'true' : 'false'} > {isBusy ? 'Working…' : 'Manage'} diff --git a/src/modules/filemanager/components/UpgradeDriveModal/UpgradeDriveModal.tsx b/src/modules/filemanager/components/UpgradeDriveModal/UpgradeDriveModal.tsx index 6b60200..b7fa696 100644 --- a/src/modules/filemanager/components/UpgradeDriveModal/UpgradeDriveModal.tsx +++ b/src/modules/filemanager/components/UpgradeDriveModal/UpgradeDriveModal.tsx @@ -26,6 +26,7 @@ import { getHumanReadableFileSize } from '../../../../utils/file' import { FILE_MANAGER_EVENTS, POLLING_TIMEOUT_MS } from '../../constants/common' import { desiredLifetimeOptions } from '../../constants/stamps' import { useStampPolling } from '../../hooks/useStampPolling' +import { validateStampStillExists } from '../../utils/bee' import { fromBytesConversion, getExpiryDateByLifetime, truncateNameMiddle } from '../../utils/common' import { Button } from '../Button/Button' import { CustomDropdown } from '../CustomDropdown/CustomDropdown' @@ -334,6 +335,16 @@ export function UpgradeDriveModal({ onClick={async () => { if (!beeApi || !walletBalance) return + const isStampValid = await validateStampStillExists(beeApi, stamp.batchID) + + if (!isStampValid) { + setErrorMessage?.('The admin drive has expired. Please clear the browser cache and reload the page.') + setShowError(true) + onCancelClick() + + return + } + try { setIsSubmitting(true) window.dispatchEvent(