fix(contract-number): сделать mode controlled, исправить редактирование шифра заказчика
- Убран локальный useState mode; режим всегда берется из value. - Добавлена синхронизация customerInput с внешним value. - При переключении на 'Мой номер' value сбрасывается для генерации номера. - При переключении на 'Номер заказчика' используется локальный шифр.
This commit is contained in:
@@ -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 });
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user