2
0
mirror of https://github.com/inventree/InvenTree.git synced 2026-01-07 03:37:56 +00:00

Fix for data importer (#11076)

* Fix for data importer

- Ensure the "progress" stepper updates

* Prevent query with invalid PK

* Reduce useless API calls

- Instantiate column mappings with proper defaults
- Ignore duplicate updates
- Increase debounce times
This commit is contained in:
Oliver
2026-01-03 20:32:43 +11:00
committed by GitHub
parent f2f61e77b8
commit c032607921
4 changed files with 34 additions and 6 deletions

View File

@@ -84,16 +84,28 @@ function ImporterDefaultField({
}) {
const api = useApi();
const [rawValue, setRawValue] = useState<any>('');
const [rawValue, setRawValue] = useState<any>(undefined);
// Initialize raw value with provided default
useEffect(() => {
setRawValue(session.fieldDefaults[fieldName]);
}, [fieldName, session.fieldDefaults]);
const fieldType: string = useMemo(() => {
return session.availableFields[fieldName]?.type;
}, [fieldName, session.availableFields]);
const [value] = useDebouncedValue(rawValue, fieldType == 'string' ? 500 : 10);
const onChange = useCallback(
(value: any) => {
if (value === undefined) {
value = session.fieldDefaults[fieldName];
}
// No change - do nothing
if (value === session.fieldDefaults[fieldName]) {
return;
}
// Update the default value for the field
const defaults = {
...session.fieldDefaults,
@@ -114,6 +126,21 @@ function ImporterDefaultField({
[fieldName, session, session.fieldDefaults]
);
const getDebounceTime = (type: string) => {
switch (type) {
case 'string':
return 500;
case 'number':
case 'float':
case 'integer':
return 200;
default:
return 50;
}
};
const [value] = useDebouncedValue(rawValue, getDebounceTime(fieldType));
// Update the default value after the debounced value changes
useEffect(() => {
onChange(value);

View File

@@ -42,7 +42,7 @@ function ImportDrawerStepper({
>
<Stepper.Step label={t`Upload File`} />
<Stepper.Step label={t`Map Columns`} />
<Stepper.Step label={t`Import Data`} />
<Stepper.Step label={t`Import Rows`} />
<Stepper.Step label={t`Process Data`} />
<Stepper.Step label={t`Complete Import`} />
</Stepper>
@@ -133,7 +133,7 @@ export default function ImporterDrawer({
<Divider />
</Stack>
);
}, [session.sessionData]);
}, [currentStep, session.sessionData]);
return (
<Drawer

View File

@@ -42,6 +42,7 @@ export function useImportSession({
} = useInstance({
endpoint: ApiEndpoints.import_session_list,
pk: sessionId,
hasPrimaryKey: true,
defaultValue: {}
});

View File

@@ -85,7 +85,7 @@ export function useInstance<T = any>({
pk == null ||
pk == undefined ||
pk.toString().length == 0 ||
pk == '-1'
pk.toString() == '-1'
) {
setInstance(defaultValue);
return defaultValue;