Files
kjh2064 3f293d8aa8
deploy / deploy (push) Successful in 1m52s
deploy / notify (push) Successful in 1s
V13-FE-006: consolidate approved UI and contract hardening
2026-08-13 02:41:00 +09:00

31 lines
978 B
TypeScript

export type KbxTransactionMode = 'new' | 'edit' | 'view'
export interface KbxTransactionContext<THeader, TLine> {
header: THeader
lines: TLine[]
mode: KbxTransactionMode
status: string
dirty: boolean
version?: number
}
export type KbxRecordEditability = 'editable' | 'restricted' | 'readonly'
export interface KbxRecordStatePolicy {
status: string
editability: KbxRecordEditability
editableFields?: string[]
message?: string
}
export function resolveKbxRecordStatePolicy(policies: KbxRecordStatePolicy[], status: string): KbxRecordStatePolicy {
return policies.find(x => x.status === status) ?? { status, editability: 'readonly', message: '현재 상태에서는 수정할 수 없습니다.' }
}
export function kbxFieldReadonly(policy: KbxRecordStatePolicy, field: string): boolean {
if (policy.editability === 'readonly') return true
if (policy.editability === 'editable') return false
return !(policy.editableFields ?? []).includes(field)
}