2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-05-02 13:28:49 +00:00

Improve useInstance hook (#5710)

- Allow use without primary key
- Allow default value to be customizedr
This commit is contained in:
Oliver 2023-10-16 23:54:28 +11:00 committed by GitHub
parent 9705521cd2
commit 80a170d93c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -17,23 +17,29 @@ export function useInstance({
endpoint, endpoint,
pk, pk,
params = {}, params = {},
defaultValue = {},
hasPrimaryKey = true,
refetchOnMount = false, refetchOnMount = false,
refetchOnWindowFocus = false refetchOnWindowFocus = false
}: { }: {
endpoint: ApiPaths; endpoint: ApiPaths;
pk: string | undefined; pk?: string | undefined;
hasPrimaryKey?: boolean;
params?: any; params?: any;
defaultValue?: any;
refetchOnMount?: boolean; refetchOnMount?: boolean;
refetchOnWindowFocus?: boolean; refetchOnWindowFocus?: boolean;
}) { }) {
const [instance, setInstance] = useState<any>({}); const [instance, setInstance] = useState<any>(defaultValue);
const instanceQuery = useQuery({ const instanceQuery = useQuery({
queryKey: ['instance', endpoint, pk, params], queryKey: ['instance', endpoint, pk, params],
queryFn: async () => { queryFn: async () => {
if (pk == null || pk == undefined || pk.length == 0) { if (hasPrimaryKey) {
setInstance({}); if (pk == null || pk == undefined || pk.length == 0) {
return null; setInstance(defaultValue);
return null;
}
} }
let url = apiUrl(endpoint, pk); let url = apiUrl(endpoint, pk);
@ -48,12 +54,12 @@ export function useInstance({
setInstance(response.data); setInstance(response.data);
return response.data; return response.data;
default: default:
setInstance({}); setInstance(defaultValue);
return null; return null;
} }
}) })
.catch((error) => { .catch((error) => {
setInstance({}); setInstance(defaultValue);
console.error(`Error fetching instance ${url}:`, error); console.error(`Error fetching instance ${url}:`, error);
return null; return null;
}); });