mirror of
https://github.com/Sea-Haven-Industries/shoc-frontend-new.git
synced 2026-10-03 12:43:24 +00:00
54 lines
1.8 KiB
TypeScript
54 lines
1.8 KiB
TypeScript
|
|
export function isWorkOrderCanceled(status: string | null | undefined): boolean {
|
||
|
|
return status === "Canceled" || status === "Cancelled";
|
||
|
|
}
|
||
|
|
|
||
|
|
export function isWorkOrderCompleted(status: string | null | undefined): boolean {
|
||
|
|
return status === "Completed" || status === "Done";
|
||
|
|
}
|
||
|
|
|
||
|
|
export function isWorkOrderCoreLocked(status: string | null | undefined): boolean {
|
||
|
|
return isWorkOrderCompleted(status);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function isWorkOrderFullyLocked(status: string | null | undefined): boolean {
|
||
|
|
return isWorkOrderCanceled(status);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function canMutateWorkOrderFlag(status: string | null | undefined): boolean {
|
||
|
|
return !isWorkOrderFullyLocked(status);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function canMutateWorkOrderComments(status: string | null | undefined): boolean {
|
||
|
|
return !isWorkOrderFullyLocked(status);
|
||
|
|
}
|
||
|
|
|
||
|
|
export function canMutateWorkOrderExtraDocs(status: string | null | undefined): boolean {
|
||
|
|
return !isWorkOrderFullyLocked(status);
|
||
|
|
}
|
||
|
|
|
||
|
|
const COMPLETED_BOARD_PATCH_KEYS = new Set(["flagColor"]);
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Board PATCH policy for SH-115. Comments and Extra Docs use dedicated endpoints
|
||
|
|
* (`canMutateWorkOrderComments` / `canMutateWorkOrderExtraDocs`). Those requests
|
||
|
|
* may still fail with 422 `ReadOnly` if the backend lock remains total.
|
||
|
|
*/
|
||
|
|
export function canApplyWorkOrderTablePatch(
|
||
|
|
status: string | null | undefined,
|
||
|
|
patch: Record<string, unknown>,
|
||
|
|
): boolean {
|
||
|
|
if (isWorkOrderFullyLocked(status)) {
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
if (!isWorkOrderCoreLocked(status)) {
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
const keys = Object.keys(patch);
|
||
|
|
return keys.length > 0 && keys.every((key) => COMPLETED_BOARD_PATCH_KEYS.has(key));
|
||
|
|
}
|
||
|
|
|
||
|
|
/** Completion document / completion-media surface — not Extra Docs or comments. */
|
||
|
|
export function isWorkOrderCompletionSurfaceReadOnly(status: string | null | undefined): boolean {
|
||
|
|
return isWorkOrderFullyLocked(status) || isWorkOrderCoreLocked(status);
|
||
|
|
}
|