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