Generalized Query Loaders Documentation
This documentation describes how to pass nested variables to queries using a parameter generation function and how to implement query loaders with custom logic.
Query Params Generator Implementation
The queryParamsGenerator
function generates query parameters based on the input parameters.
Usage
export const queryParamsGenerator = (params) => ({
nestedParam1: {
subParam: {
key: params.value,
},
},
nestedParam2: { key: params.value },
});
Query Loader Implementation
This section describes how to implement query loaders using the variables generated by the queryParamsGenerator
function.
Example Query Loader 1: CustomQueryLoader1
The CustomQueryLoader1
loads data using the variables generated by the queryParamsGenerator
function with a specified fetch policy.
Usage
const CustomQueryLoader1 = useCustomQuery1({
variables: queryParamsGenerator(params).nestedParam1,
fetchPolicy: 'custom-fetch-policy',
});
General Example
Here is a generalized example of how to use the CustomQueryLoader1 and CustomQueryLoader2 together:
import { useCustomQuery1, useCustomQuery2 } from './path/to/queries';
import { dimentsions } from './dimension.js';
export const queryParamsGenerator = (params) => ({
nestedParam1: {
subParam: {
key: params.value,
},
dimensions: dimensions,
},
nestedParam2: { key: params.value },
});
const ExampleComponent= (props) => {
const params = { value: 'uniqueIdentifier' };
const QueryLoader1 = useQuery1({
variables: queryParamsGenerator(params).nestedParam1,
fetchPolicy: 'cache-only',
});
const QueryLoader2 = useCustomQuery2({
variables: queryParamsGenerator(params).nestedParam2,
fetchPolicy: 'cache-only',
});
return (
<React.Suspense fallback={<Spinner></Spinner>}>
<Await
resolve={Promise.all([QueryLoader1,QueryLoader2])}
>
<ExampleComponent
loaderData={[QueryLoader1, QueryLoader2]}
{...props}
/>
</Await>
</React.Suspense>
)
}