fix(contract-number): сделать mode controlled, исправить редактирование шифра заказчика

- Убран локальный useState mode; режим всегда берется из value.
- Добавлена синхронизация customerInput с внешним value.
- При переключении на 'Мой номер' value сбрасывается для генерации номера.
- При переключении на 'Номер заказчика' используется локальный шифр.
This commit is contained in:
2026-07-16 16:34:25 +03:00
parent 1e0f811f11
commit 63c83a059d

View File

@@ -59,7 +59,8 @@ export default function ContractNumberField({
compact = false,
}: ContractNumberFieldProps) {
const parsed = parseValue(value);
const [mode, setMode] = useState<'mine' | 'customer'>(parsed.mode);
// mode всегда controlled из value — нет локального рассинхрона
const mode = parsed.mode;
const [customerInput, setCustomerInput] = useState(
parsed.mode === 'customer' ? parsed.value : ''
);
@@ -67,6 +68,13 @@ export default function ContractNumberField({
const [loading, setLoading] = useState(false);
const [error, setError] = useState<string>('');
// Синхронизируем локальный шифр с внешним value в режиме заказчика
useEffect(() => {
if (parsed.mode === 'customer') {
setCustomerInput(parsed.value || '');
}
}, [parsed.mode, parsed.value]);
const legalEntityFormId = config?.legalEntityFormId;
const legalEntityTaskId = parsed.legalEntityTaskId;
@@ -112,11 +120,12 @@ export default function ContractNumberField({
}, [fetchPreview]);
const handleModeChange = (newMode: 'mine' | 'customer') => {
setMode(newMode);
if (newMode === 'mine') {
onChange({ mode: 'mine', value: parsed.value || '', legalEntityTaskId: parsed.legalEntityTaskId });
// При переключении на "Мой номер" сбрасываем value — сервер сгенерирует номер
onChange({ mode: 'mine', value: '', legalEntityTaskId: parsed.legalEntityTaskId });
} else {
onChange({ mode: 'customer', value: parsed.value || '', legalEntityTaskId: parsed.legalEntityTaskId });
// При переключении на "Номер заказчика" используем локальный шифр
onChange({ mode: 'customer', value: customerInput || '', legalEntityTaskId: parsed.legalEntityTaskId });
}
};