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