fix(contract-number): локальный mode и отдельный customerInput без сброса value

This commit is contained in:
2026-07-16 15:54:56 +03:00
parent 45475691cc
commit 1e0f811f11

View File

@@ -60,17 +60,13 @@ export default function ContractNumberField({
}: ContractNumberFieldProps) { }: ContractNumberFieldProps) {
const parsed = parseValue(value); const parsed = parseValue(value);
const [mode, setMode] = useState<'mine' | 'customer'>(parsed.mode); const [mode, setMode] = useState<'mine' | 'customer'>(parsed.mode);
const customerValue = parsed.mode === 'customer' ? parsed.value : ''; const [customerInput, setCustomerInput] = useState(
parsed.mode === 'customer' ? parsed.value : ''
);
const [preview, setPreview] = useState<string>(''); const [preview, setPreview] = useState<string>('');
const [loading, setLoading] = useState(false); const [loading, setLoading] = useState(false);
const [error, setError] = useState<string>(''); const [error, setError] = useState<string>('');
// Синхронизируем локальное состояние mode с value prop, чтобы при повторном открытии
// глобального редактирования переключатель соответствовал сохранённому значению.
useEffect(() => {
setMode(parsed.mode);
}, [parsed.mode]);
const legalEntityFormId = config?.legalEntityFormId; const legalEntityFormId = config?.legalEntityFormId;
const legalEntityTaskId = parsed.legalEntityTaskId; const legalEntityTaskId = parsed.legalEntityTaskId;
@@ -118,19 +114,20 @@ export default function ContractNumberField({
const handleModeChange = (newMode: 'mine' | 'customer') => { const handleModeChange = (newMode: 'mine' | 'customer') => {
setMode(newMode); setMode(newMode);
if (newMode === 'mine') { if (newMode === 'mine') {
onChange({ mode: 'mine', value: '', legalEntityTaskId: parsed.legalEntityTaskId }); onChange({ mode: 'mine', value: parsed.value || '', legalEntityTaskId: parsed.legalEntityTaskId });
} else { } else {
onChange({ mode: 'customer', value: parsed.value || '', legalEntityTaskId: parsed.legalEntityTaskId }); onChange({ mode: 'customer', value: parsed.value || '', legalEntityTaskId: parsed.legalEntityTaskId });
} }
}; };
const handleCustomerChange = (val: string) => { const handleCustomerChange = (val: string) => {
setCustomerInput(val);
onChange({ mode: 'customer', value: val, legalEntityTaskId: parsed.legalEntityTaskId }); onChange({ mode: 'customer', value: val, legalEntityTaskId: parsed.legalEntityTaskId });
}; };
const handleLegalEntityChange = (taskId: string) => { const handleLegalEntityChange = (taskId: string) => {
const num = taskId ? parseInt(taskId) : undefined; const num = taskId ? parseInt(taskId) : undefined;
onChange({ mode, value: mode === 'mine' ? (parsed.value || '') : customerValue, legalEntityTaskId: num }); onChange({ mode, value: mode === 'mine' ? (parsed.value || '') : customerInput, legalEntityTaskId: num });
}; };
const isGenerated = !!(parsed.mode === 'mine' && parsed.value && parsed.value !== ''); const isGenerated = !!(parsed.mode === 'mine' && parsed.value && parsed.value !== '');
@@ -174,7 +171,7 @@ export default function ContractNumberField({
{mode === 'customer' ? ( {mode === 'customer' ? (
<Input <Input
type="text" type="text"
value={customerValue} value={customerInput}
onChange={(e) => handleCustomerChange(e.target.value)} onChange={(e) => handleCustomerChange(e.target.value)}
placeholder={compact ? 'Шифр' : 'Введите шифр заказчика'} placeholder={compact ? 'Шифр' : 'Введите шифр заказчика'}
disabled={disabled} disabled={disabled}