diff --git a/ordinis-admin-ui/src/components/record/ConflictDiffModal.tsx b/ordinis-admin-ui/src/components/record/ConflictDiffModal.tsx new file mode 100644 index 0000000..455162f --- /dev/null +++ b/ordinis-admin-ui/src/components/record/ConflictDiffModal.tsx @@ -0,0 +1,225 @@ +import { useMemo } from 'react' +import { useTranslation } from 'react-i18next' +import { ArrowsClockwiseIcon, WarningIcon } from '@phosphor-icons/react' +import { Dialog, DialogContent } from '@/ui' +import { useRecordRaw } from '@/api/queries' +import type { CreateRecordRequest } from '@/api/client' +import { cn } from '@/lib/utils' + +/** + * ConflictDiffModal — handoff line 444 ("Save → optimistic update + toast; + * conflict → modal with diff"). + * + *
Опoшается когда PUT /records/{key} вернул 409 (optimistic-lock fail — + * другой пользователь сохранил тот же record между нашим load и submit'ом). + * + *
Сравнивает локальный payload (что юзер пытался сохранить) с серверным + * текущим состоянием (refetch через useRecordRaw). Per-field diff list: + * показываем только те properties у которых local≠server. Footer actions: + *