mirror of
https://github.com/inventree/InvenTree.git
synced 2026-01-08 04:07:59 +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:
@@ -84,16 +84,28 @@ function ImporterDefaultField({
|
|||||||
}) {
|
}) {
|
||||||
const api = useApi();
|
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(() => {
|
const fieldType: string = useMemo(() => {
|
||||||
return session.availableFields[fieldName]?.type;
|
return session.availableFields[fieldName]?.type;
|
||||||
}, [fieldName, session.availableFields]);
|
}, [fieldName, session.availableFields]);
|
||||||
|
|
||||||
const [value] = useDebouncedValue(rawValue, fieldType == 'string' ? 500 : 10);
|
|
||||||
|
|
||||||
const onChange = useCallback(
|
const onChange = useCallback(
|
||||||
(value: any) => {
|
(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
|
// Update the default value for the field
|
||||||
const defaults = {
|
const defaults = {
|
||||||
...session.fieldDefaults,
|
...session.fieldDefaults,
|
||||||
@@ -114,6 +126,21 @@ function ImporterDefaultField({
|
|||||||
[fieldName, session, session.fieldDefaults]
|
[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
|
// Update the default value after the debounced value changes
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
onChange(value);
|
onChange(value);
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ function ImportDrawerStepper({
|
|||||||
>
|
>
|
||||||
<Stepper.Step label={t`Upload File`} />
|
<Stepper.Step label={t`Upload File`} />
|
||||||
<Stepper.Step label={t`Map Columns`} />
|
<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`Process Data`} />
|
||||||
<Stepper.Step label={t`Complete Import`} />
|
<Stepper.Step label={t`Complete Import`} />
|
||||||
</Stepper>
|
</Stepper>
|
||||||
@@ -133,7 +133,7 @@ export default function ImporterDrawer({
|
|||||||
<Divider />
|
<Divider />
|
||||||
</Stack>
|
</Stack>
|
||||||
);
|
);
|
||||||
}, [session.sessionData]);
|
}, [currentStep, session.sessionData]);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Drawer
|
<Drawer
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ export function useImportSession({
|
|||||||
} = useInstance({
|
} = useInstance({
|
||||||
endpoint: ApiEndpoints.import_session_list,
|
endpoint: ApiEndpoints.import_session_list,
|
||||||
pk: sessionId,
|
pk: sessionId,
|
||||||
|
hasPrimaryKey: true,
|
||||||
defaultValue: {}
|
defaultValue: {}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ export function useInstance<T = any>({
|
|||||||
pk == null ||
|
pk == null ||
|
||||||
pk == undefined ||
|
pk == undefined ||
|
||||||
pk.toString().length == 0 ||
|
pk.toString().length == 0 ||
|
||||||
pk == '-1'
|
pk.toString() == '-1'
|
||||||
) {
|
) {
|
||||||
setInstance(defaultValue);
|
setInstance(defaultValue);
|
||||||
return defaultValue;
|
return defaultValue;
|
||||||
|
|||||||
Reference in New Issue
Block a user