fix: allow Edit only on Available assets

The builder only allows the Asset details activity in Available, so the
runtime rejected Edit in Assigned and Under Repair. Disable the button
outside Available with a hint to return the asset first, and keep the
closed-asset notice keyed to the open states.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
vamsi.balaga 2026-10-27 18:53:44 +05:30
parent 96718d173c
commit 72cdae3d1c

View File

@ -168,18 +168,21 @@ export default function AssetDetails() {
const isAssigned = isAssetState(row, ASSET_STATE.ASSIGNED) const isAssigned = isAssetState(row, ASSET_STATE.ASSIGNED)
const isAvailable = isAssetState(row, ASSET_STATE.AVAILABLE) const isAvailable = isAssetState(row, ASSET_STATE.AVAILABLE)
const isUnderRepair = isAssetState(row, ASSET_STATE.UNDER_REPAIR) const isUnderRepair = isAssetState(row, ASSET_STATE.UNDER_REPAIR)
// ASSIGNED and Send for Repair run in Available; Reassigned in Assigned; Lost // ASSIGNED, Send for Repair and Edit (Asset details) run in Available;
// in either; Repair Completed in Under Repair; Edit in all three. RETURNED // Reassigned in Assigned; Lost in either; Repair Completed in Under Repair.
// runs in any state but Closed, and the runtime says if the state doesn't // The builder has Asset details in Available only, so the runtime rejects it
// allow it. If the view sends no state, let the runtime decide rather than // elsewhere ("Asset details" is not allowed in "Assigned"). RETURNED runs in
// hiding the buttons. // any state but Closed, and the runtime says if the state doesn't allow it.
// If the view sends no state, let the runtime decide rather than hiding the
// buttons.
const isOpen = !state || isAvailable || isAssigned || isUnderRepair
const canAssign = !state || isAvailable const canAssign = !state || isAvailable
const canReassign = !state || isAssigned const canReassign = !state || isAssigned
const canReturn = !isAssetState(row, ASSET_STATE.CLOSED) && !isEndState(row) const canReturn = !isAssetState(row, ASSET_STATE.CLOSED) && !isEndState(row)
const canReportLost = !state || isAvailable || isAssigned const canReportLost = !state || isAvailable || isAssigned
const canSendForRepair = !state || isAvailable const canSendForRepair = !state || isAvailable
const canCompleteRepair = !state || isUnderRepair const canCompleteRepair = !state || isUnderRepair
const canEdit = !state || isAvailable || isAssigned || isUnderRepair const canEdit = !state || isAvailable
// Assigned or reassigned, whichever is newer, is who has it now. // Assigned or reassigned, whichever is newer, is who has it now.
const current = currentAssignment(row) const current = currentAssignment(row)
@ -251,7 +254,12 @@ export default function AssetDetails() {
<Button icon="history" onClick={load} disabled={loading}> <Button icon="history" onClick={load} disabled={loading}>
{loading ? 'Refreshing…' : 'Refresh'} {loading ? 'Refreshing…' : 'Refresh'}
</Button> </Button>
<Button icon="edit" onClick={() => openActivity('edit')} disabled={!canEdit}> <Button
icon="edit"
onClick={() => openActivity('edit')}
disabled={!canEdit}
title={canEdit ? undefined : 'Only an Available asset can be edited. Return it first.'}
>
Edit Edit
</Button> </Button>
<Button <Button
@ -289,7 +297,7 @@ export default function AssetDetails() {
} }
/> />
{!canEdit && ( {!isOpen && (
<div className="notice notice--warning" role="status"> <div className="notice notice--warning" role="status">
<Icon name="alert" size={15} /> <Icon name="alert" size={15} />
<span> <span>