[FA-misc] Astro migration works, probably want to touchup the frontend but that can be in Phase 4
This commit is contained in:
49
fictionarchive-web-astro/src/lib/graphql/urqlStore.ts
Normal file
49
fictionarchive-web-astro/src/lib/graphql/urqlStore.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import { writable } from 'svelte/store';
|
||||
import type { OperationResult, TypedDocumentNode } from '@urql/core';
|
||||
import { client } from './client';
|
||||
|
||||
export function queryStore<Data, Variables extends object>(
|
||||
query: TypedDocumentNode<Data, Variables>,
|
||||
variables: Variables
|
||||
) {
|
||||
const result = writable<OperationResult<Data> | null>(null);
|
||||
const fetching = writable(true);
|
||||
|
||||
async function execute(vars: Variables = variables) {
|
||||
fetching.set(true);
|
||||
const res = await client.query(query, vars).toPromise();
|
||||
result.set(res);
|
||||
fetching.set(false);
|
||||
return res;
|
||||
}
|
||||
|
||||
// Initial fetch
|
||||
execute();
|
||||
|
||||
return {
|
||||
subscribe: result.subscribe,
|
||||
fetching: { subscribe: fetching.subscribe },
|
||||
refetch: execute,
|
||||
};
|
||||
}
|
||||
|
||||
export function mutationStore<Data, Variables extends object>(
|
||||
mutation: TypedDocumentNode<Data, Variables>
|
||||
) {
|
||||
const result = writable<OperationResult<Data> | null>(null);
|
||||
const fetching = writable(false);
|
||||
|
||||
async function execute(variables: Variables) {
|
||||
fetching.set(true);
|
||||
const res = await client.mutation(mutation, variables).toPromise();
|
||||
result.set(res);
|
||||
fetching.set(false);
|
||||
return res;
|
||||
}
|
||||
|
||||
return {
|
||||
subscribe: result.subscribe,
|
||||
fetching: { subscribe: fetching.subscribe },
|
||||
execute,
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user