chore: sync GovOPlaN module split state
This commit is contained in:
@@ -9,16 +9,16 @@ import {
|
||||
unlockCampaignVersionUserLock,
|
||||
unlockCampaignVersionValidation,
|
||||
type CampaignVersionDetail,
|
||||
type CampaignVersionListItem,
|
||||
} from "../../../api/campaigns";
|
||||
type CampaignVersionListItem } from
|
||||
"../../../api/campaigns";
|
||||
import {
|
||||
canUnlockValidationVersion,
|
||||
formatDateTime,
|
||||
isFinalLockedVersion,
|
||||
isHistoricalCampaignVersion,
|
||||
isPermanentUserLockedVersion,
|
||||
isTemporaryUserLockedVersion,
|
||||
} from "../utils/campaignView";
|
||||
isTemporaryUserLockedVersion } from
|
||||
"../utils/campaignView";
|
||||
|
||||
type LockedVersionNoticeProps = {
|
||||
settings: ApiSettings;
|
||||
@@ -48,7 +48,7 @@ export default function LockedVersionNotice({ settings, campaignId, version, cur
|
||||
validationLock,
|
||||
temporaryUserLock,
|
||||
permanentUserLock,
|
||||
finalLock,
|
||||
finalLock
|
||||
});
|
||||
|
||||
async function runAction(action: Exclude<ConfirmAction, null>) {
|
||||
@@ -59,13 +59,13 @@ export default function LockedVersionNotice({ settings, campaignId, version, cur
|
||||
try {
|
||||
if (action === "unlock-validation") {
|
||||
await unlockCampaignVersionValidation(settings, campaignId, version.id);
|
||||
setLocalMessage("Validation lock removed. Validation, build and generated queue state were invalidated.");
|
||||
setLocalMessage("i18n:govoplan-campaign.validation_lock_removed_validation_build_and_gen.ea26975f");
|
||||
} else if (action === "unlock-user") {
|
||||
await unlockCampaignVersionUserLock(settings, campaignId, version.id);
|
||||
setLocalMessage("Temporary user lock removed. The version is editable again.");
|
||||
setLocalMessage("i18n:govoplan-campaign.temporary_user_lock_removed_the_version_is_edita.0ca4c587");
|
||||
} else {
|
||||
await lockCampaignVersionPermanently(settings, campaignId, version.id);
|
||||
setLocalMessage("Version permanently locked. Future changes require an editable copy.");
|
||||
setLocalMessage("i18n:govoplan-campaign.version_permanently_locked_future_changes_requir.fd718a84");
|
||||
}
|
||||
await reload();
|
||||
} catch (err) {
|
||||
@@ -83,7 +83,7 @@ export default function LockedVersionNotice({ settings, campaignId, version, cur
|
||||
try {
|
||||
const result = await forkCampaignVersion(settings, campaignId, version.id, {
|
||||
current_flow: "manual",
|
||||
current_step: version.current_step ?? null,
|
||||
current_step: version.current_step ?? null
|
||||
});
|
||||
setLocalMessage(`Created editable version #${result.version.version_number}.`);
|
||||
await reload();
|
||||
@@ -105,26 +105,26 @@ export default function LockedVersionNotice({ settings, campaignId, version, cur
|
||||
{localError && <span className="locked-version-error"> {localError}</span>}
|
||||
</div>
|
||||
<div className="button-row compact-actions locked-version-actions">
|
||||
{validationLock && (
|
||||
<Button onClick={() => setConfirmAction("unlock-validation")} disabled={!version || busy}>
|
||||
{busy ? "Working…" : "Unlock validation"}
|
||||
{validationLock &&
|
||||
<Button onClick={() => setConfirmAction("unlock-validation")} disabled={!version || busy}>
|
||||
{busy ? "i18n:govoplan-campaign.working.13b7bfca" : "i18n:govoplan-campaign.unlock_validation.f01952b6"}
|
||||
</Button>
|
||||
)}
|
||||
{temporaryUserLock && (
|
||||
<>
|
||||
}
|
||||
{temporaryUserLock &&
|
||||
<>
|
||||
<Button onClick={() => setConfirmAction("unlock-user")} disabled={!version || busy}>
|
||||
{busy ? "Working…" : "Unlock"}
|
||||
{busy ? "i18n:govoplan-campaign.working.13b7bfca" : "i18n:govoplan-campaign.unlock.1526a17e"}
|
||||
</Button>
|
||||
<Button variant="danger" onClick={() => setConfirmAction("permanent")} disabled={!version || busy}>
|
||||
Lock permanently
|
||||
i18n:govoplan-campaign.lock_permanently.cc0ce9e7
|
||||
</Button>
|
||||
</>
|
||||
)}
|
||||
{canCreateEditableCopy && (
|
||||
<Button variant="primary" onClick={() => void createEditableCopy()} disabled={!version || busy}>
|
||||
{busy ? "Creating copy…" : "Create editable copy"}
|
||||
}
|
||||
{canCreateEditableCopy &&
|
||||
<Button variant="primary" onClick={() => void createEditableCopy()} disabled={!version || busy}>
|
||||
{busy ? "i18n:govoplan-campaign.creating_copy.4247f587" : "i18n:govoplan-campaign.create_editable_copy.92d6d91b"}
|
||||
</Button>
|
||||
)}
|
||||
}
|
||||
</div>
|
||||
|
||||
<ConfirmDialog
|
||||
@@ -139,10 +139,10 @@ export default function LockedVersionNotice({ settings, campaignId, version, cur
|
||||
const action = confirmAction;
|
||||
setConfirmAction(null);
|
||||
if (action) void runAction(action);
|
||||
}}
|
||||
/>
|
||||
</DismissibleAlert>
|
||||
);
|
||||
}} />
|
||||
|
||||
</DismissibleAlert>);
|
||||
|
||||
}
|
||||
|
||||
type LockFlags = {
|
||||
@@ -154,82 +154,82 @@ type LockFlags = {
|
||||
};
|
||||
|
||||
function lockPresentation(
|
||||
version: CampaignVersionDetail | CampaignVersionListItem | null,
|
||||
flags: LockFlags,
|
||||
): { kind: string; title: string; description: string; info: string } {
|
||||
version: CampaignVersionDetail | CampaignVersionListItem | null,
|
||||
flags: LockFlags)
|
||||
: {kind: string;title: string;description: string;info: string;} {
|
||||
if (flags.historicalVersion) {
|
||||
return {
|
||||
kind: "historical",
|
||||
title: "Historical version.",
|
||||
description: "This version is review-only. Only the campaign's current working version may be edited in place.",
|
||||
info: `Version #${version?.version_number ?? "—"}.`,
|
||||
title: "i18n:govoplan-campaign.historical_version.adac5dba",
|
||||
description: "i18n:govoplan-campaign.this_version_is_review_only_only_the_campaign_s_.9e68f6a0",
|
||||
info: `Version #${version?.version_number ?? "—"}.`
|
||||
};
|
||||
}
|
||||
if (flags.temporaryUserLock) {
|
||||
return {
|
||||
kind: "temporary-user",
|
||||
title: "Temporarily locked version.",
|
||||
description: "Campaign data is read-only, but an authorized user may unlock it or make the lock permanent.",
|
||||
info: version?.user_locked_at ? `Locked ${formatDateTime(version.user_locked_at)}.` : "",
|
||||
title: "i18n:govoplan-campaign.temporarily_locked_version.696f85e3",
|
||||
description: "i18n:govoplan-campaign.campaign_data_is_read_only_but_an_authorized_use.f2e513b1",
|
||||
info: version?.user_locked_at ? `Locked ${formatDateTime(version.user_locked_at)}.` : ""
|
||||
};
|
||||
}
|
||||
if (flags.permanentUserLock) {
|
||||
return {
|
||||
kind: "permanent-user",
|
||||
title: "Permanently locked version.",
|
||||
description: "This user-requested snapshot cannot be unlocked. Create an editable copy for future changes.",
|
||||
info: version?.user_locked_at || version?.published_at
|
||||
? `Locked ${formatDateTime(version.user_locked_at ?? version.published_at)}.`
|
||||
: "",
|
||||
title: "i18n:govoplan-campaign.permanently_locked_version.248c2eeb",
|
||||
description: "i18n:govoplan-campaign.this_user_requested_snapshot_cannot_be_unlocked_.9e91210c",
|
||||
info: version?.user_locked_at || version?.published_at ?
|
||||
`Locked ${formatDateTime(version.user_locked_at ?? version.published_at)}.` :
|
||||
""
|
||||
};
|
||||
}
|
||||
if (flags.validationLock) {
|
||||
return {
|
||||
kind: "validation",
|
||||
title: "Temporarily locked after validation.",
|
||||
description: "This protects the validated build input. Unlocking invalidates validation, build and generated queue state.",
|
||||
info: version?.locked_at ? `Validated ${formatDateTime(version.locked_at)}.` : "",
|
||||
title: "i18n:govoplan-campaign.temporarily_locked_after_validation.c558ce56",
|
||||
description: "i18n:govoplan-campaign.this_protects_the_validated_build_input_unlockin.ed890772",
|
||||
info: version?.locked_at ? `Validated ${formatDateTime(version.locked_at)}.` : ""
|
||||
};
|
||||
}
|
||||
if (flags.finalLock) {
|
||||
return {
|
||||
kind: "delivery",
|
||||
title: "Permanently locked delivery snapshot.",
|
||||
description: "Delivery has started or the version is in a final state, so it cannot be unlocked in place.",
|
||||
info: version?.locked_at ? `Locked ${formatDateTime(version.locked_at)}.` : "",
|
||||
title: "i18n:govoplan-campaign.permanently_locked_delivery_snapshot.c3670daa",
|
||||
description: "i18n:govoplan-campaign.delivery_has_started_or_the_version_is_in_a_fina.571e86ed",
|
||||
info: version?.locked_at ? `Locked ${formatDateTime(version.locked_at)}.` : ""
|
||||
};
|
||||
}
|
||||
return {
|
||||
kind: "other",
|
||||
title: "Locked version.",
|
||||
description: "This version is read-only. Create an editable copy to continue working.",
|
||||
info: version?.locked_at ? `Locked ${formatDateTime(version.locked_at)}.` : "",
|
||||
title: "i18n:govoplan-campaign.locked_version.e755b179",
|
||||
description: "i18n:govoplan-campaign.this_version_is_read_only_create_an_editable_cop.9e0afd29",
|
||||
info: version?.locked_at ? `Locked ${formatDateTime(version.locked_at)}.` : ""
|
||||
};
|
||||
}
|
||||
|
||||
function confirmDialogTitle(action: ConfirmAction): string {
|
||||
if (action === "unlock-validation") return "Unlock validation?";
|
||||
if (action === "unlock-user") return "Unlock temporary lock?";
|
||||
if (action === "permanent") return "Lock permanently?";
|
||||
return "Confirm action";
|
||||
if (action === "unlock-validation") return "i18n:govoplan-campaign.unlock_validation.e3066247";
|
||||
if (action === "unlock-user") return "i18n:govoplan-campaign.unlock_temporary_lock.8a3ad468";
|
||||
if (action === "permanent") return "i18n:govoplan-campaign.lock_permanently.24d5b74d";
|
||||
return "i18n:govoplan-campaign.confirm_action.50649c5c";
|
||||
}
|
||||
|
||||
function confirmDialogMessage(action: ConfirmAction): string {
|
||||
if (action === "unlock-validation") {
|
||||
return "This makes the version editable and clears validation, build results, review acknowledgement and generated jobs for this version.";
|
||||
return "i18n:govoplan-campaign.this_makes_the_version_editable_and_clears_valid.89a6cd1b";
|
||||
}
|
||||
if (action === "unlock-user") {
|
||||
return "This removes the reversible user lock. Campaign data and existing workflow results are not otherwise changed.";
|
||||
return "i18n:govoplan-campaign.this_removes_the_reversible_user_lock_campaign_d.fcf8cb1d";
|
||||
}
|
||||
if (action === "permanent") {
|
||||
return "This lock cannot be removed by any role. The version remains available for review and audit, but future changes require an editable copy.";
|
||||
return "i18n:govoplan-campaign.this_lock_cannot_be_removed_by_any_role_the_vers.3054b076";
|
||||
}
|
||||
return "Continue?";
|
||||
return "i18n:govoplan-campaign.continue.4e6302ed";
|
||||
}
|
||||
|
||||
function confirmDialogLabel(action: ConfirmAction): string {
|
||||
if (action === "unlock-validation") return "Unlock validation";
|
||||
if (action === "unlock-user") return "Unlock";
|
||||
if (action === "permanent") return "Lock permanently";
|
||||
return "Confirm";
|
||||
}
|
||||
if (action === "unlock-validation") return "i18n:govoplan-campaign.unlock_validation.f01952b6";
|
||||
if (action === "unlock-user") return "i18n:govoplan-campaign.unlock.1526a17e";
|
||||
if (action === "permanent") return "i18n:govoplan-campaign.lock_permanently.cc0ce9e7";
|
||||
return "i18n:govoplan-campaign.confirm.04a21221";
|
||||
}
|
||||
Reference in New Issue
Block a user