WunderGraph Solid Query Integration
npm install @leftoverstoday/solid-queryThis package provides a type-safe integration of Solid Query with WunderGraph.
Solid Query is a data fetching library for Solid.js.
> Warning: Only works with WunderGraph.
``shell`
npm install @wundergraph/solid-query @tanstack/solid-query
Before you can use the hooks, you need to modify your code generation to include the base typescript client.
`typescript`
// wundergraph.config.ts
configureWunderGraphApplication({
// ... omitted for brevity
codeGenerators: [
{
templates: [templates.typescript.client],
// the location where you want to generate the client
path: '../src/components/generated',
},
],
});
Second, run wunderctl generate to generate the code.
Now you can configure the hooks. Create a new file, for example lib/wundergraph.ts and add the following code:
`ts
import { createHooks } from '@wundergraph/solid-query';
import { createClient, Operations } from './components/generated/client';
const client = createClient(); // Typesafe WunderGraph client
export const { createQuery, createMutation, createSubscription, createFileUpload, useUser, useAuth } =
createHooks
`
In your App.tsx add QueryClientProvider:
`tsx
import { QueryClient, QueryClientProvider } from '@tanstack/solid-query';
const queryClient = new QueryClient();
export default App() {
return (
...
);
}
`
Now you can use the hooks in your components:
`ts`
const weather = createQuery({
operationName: 'Weather',
input: { forCity: city },
});
`ts`
const weather = createQuery({
operationName: 'Weather',
input: { forCity: city },
liveQuery: true,
});
`ts`
const weather = createSubscription({
operationName: 'LiveWeather',
input: {
forCity: 'Berlin',
},
});
`ts
const mutation = createMutation({
operationName: 'SetName',
});
mutation.mutate({ name: 'WunderGraph' });
await mutation.mutateAsync({ name: 'WunderGraph' });
`
`ts
const uploader = useFileUpload();
uploader.upload({
provider: 'minio',
files: new FileList(),
});
await uploader.upload({
provider: 'minio',
files: new FileList(),
});
uploader.fileKeys; // files that have been uploaded
`
`ts
const { login, logout } = useAuth();
login('github');
logout({ logoutOpenidConnectProvider: true });
`
`ts
const user = useUser();
user.data;
`
You can use the queryKey helper function to create a unique key for the query in a typesafe way. This is useful if you want to invalidate the query after mutating.
`ts
const queryClient = useQueryClient();
const mutation = useMutation({
operationName: 'SetName',
onSuccess() {
queryClient.invalidateQueries(queryKey({ operationName: 'Profile' }));
},
});
mutation.mutate({ name: 'WunderGraph' });
``
You can use all available options from Solid Query.