mirror of
https://github.com/stefanpejcic/openpanel
synced 2025-06-26 18:28:26 +00:00
fork refine
This commit is contained in:
82
packages/graphql/src/liveProvider/index.ts
Normal file
82
packages/graphql/src/liveProvider/index.ts
Normal file
@@ -0,0 +1,82 @@
|
||||
import { LiveProvider } from "@refinedev/core";
|
||||
import { Client } from "graphql-ws";
|
||||
|
||||
import {
|
||||
generateUseListSubscription,
|
||||
generateUseManySubscription,
|
||||
generateUseOneSubscription,
|
||||
} from "../utils";
|
||||
|
||||
const subscriptions = {
|
||||
useList: generateUseListSubscription,
|
||||
useOne: generateUseOneSubscription,
|
||||
useMany: generateUseManySubscription,
|
||||
};
|
||||
|
||||
export const liveProvider = (client: Client): LiveProvider => {
|
||||
return {
|
||||
subscribe: ({ callback, params }) => {
|
||||
const {
|
||||
resource,
|
||||
meta,
|
||||
pagination,
|
||||
sorters,
|
||||
filters,
|
||||
subscriptionType,
|
||||
id,
|
||||
ids,
|
||||
} = params ?? {};
|
||||
|
||||
if (!meta) {
|
||||
throw new Error(
|
||||
"[useSubscription]: `meta` is required in `params` for graphql subscriptions",
|
||||
);
|
||||
}
|
||||
|
||||
if (!subscriptionType) {
|
||||
throw new Error(
|
||||
"[useSubscription]: `subscriptionType` is required in `params` for graphql subscriptions",
|
||||
);
|
||||
}
|
||||
|
||||
if (!resource) {
|
||||
throw new Error(
|
||||
"[useSubscription]: `resource` is required in `params` for graphql subscriptions",
|
||||
);
|
||||
}
|
||||
|
||||
const genereteSubscription = subscriptions[subscriptionType];
|
||||
|
||||
const { query, variables, operation } = genereteSubscription({
|
||||
ids,
|
||||
id,
|
||||
resource,
|
||||
filters,
|
||||
meta,
|
||||
pagination,
|
||||
sorters,
|
||||
});
|
||||
|
||||
const onNext = (payload: any) => {
|
||||
callback(payload.data[operation]);
|
||||
};
|
||||
|
||||
const unsubscribe = client.subscribe(
|
||||
{
|
||||
query,
|
||||
variables,
|
||||
},
|
||||
{
|
||||
next: onNext,
|
||||
error: () => null,
|
||||
complete: () => null,
|
||||
},
|
||||
);
|
||||
|
||||
return unsubscribe;
|
||||
},
|
||||
unsubscribe: (unsubscribe) => {
|
||||
unsubscribe();
|
||||
},
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user