diff --git a/ordinis-admin-ui/src/components/schema/DictionaryEditorDialog.tsx b/ordinis-admin-ui/src/components/schema/DictionaryEditorDialog.tsx index f58a0d3..79d09d5 100644 --- a/ordinis-admin-ui/src/components/schema/DictionaryEditorDialog.tsx +++ b/ordinis-admin-ui/src/components/schema/DictionaryEditorDialog.tsx @@ -138,6 +138,24 @@ export const DictionaryEditorDialog = ({ open, mode, onClose, onSuccess }: Props [isEdit, initial, changes, schemaVersion], ) + // Approval-aware Save: when editing an approval-required dict, any schema + // change OR toggling approvalRequired off OR changing approvalMinRole has + // to route through the schema-draft workflow. The backend will reject with + // 422 approval_required, but it's much better UX to disable Save up front + // and tell the user to open a draft instead. Mirror the three backend + // gate clauses exactly so the UX matches the server contract. + const wasApprovalRequired = + Boolean((initial as { approvalRequired?: boolean } | null)?.approvalRequired) + const initialMinRole = + ((initial as { approvalMinRole?: string } | null)?.approvalMinRole ?? '') || null + const currentMinRole = approvalMinRole.trim() === '' ? null : approvalMinRole.trim() + const schemaChangedFromInitial = isEdit && changes.length > 0 + const approvalToggledOff = isEdit && wasApprovalRequired && !approvalRequired + const minRoleChanged = isEdit && wasApprovalRequired && initialMinRole !== currentMinRole + const requiresDraftFlow = + isEdit && wasApprovalRequired + && (schemaChangedFromInitial || approvalToggledOff || minRoleChanged) + const activeMutation = isEdit ? updateMut : createMut const serverError = serverErrorMessage(activeMutation.error) @@ -412,6 +430,17 @@ export const DictionaryEditorDialog = ({ open, mode, onClose, onSuccess }: Props {serverError && {serverError}} + {requiresDraftFlow && ( + + {t('schema.approvalRequired.editorBlock', { + defaultValue: + 'Этот словарь требует ревью изменений. Закройте редактор и нажмите ' + + '«Создать черновик схемы» на странице справочника — там вы сможете ' + + 'отправить эти изменения на согласование.', + })} + + )} +