refactor(core): make subscription hook (#4669)

This commit is contained in:
liuyi
2023-10-20 16:03:28 +08:00
committed by forehalo
parent 858a1da35f
commit 95d37fc63f
3 changed files with 146 additions and 72 deletions
@@ -0,0 +1,40 @@
import { type SubscriptionQuery, subscriptionQuery } from '@affine/graphql';
import { useQuery } from '@affine/workspace/affine/gql';
import { useCallback } from 'react';
export type Subscription = NonNullable<
NonNullable<SubscriptionQuery['currentUser']>['subscription']
>;
export type SubscriptionMutator = (update?: Partial<Subscription>) => void;
const selector = (data: SubscriptionQuery) =>
data.currentUser?.subscription ?? null;
export const useUserSubscription = () => {
const { data, mutate } = useQuery({
query: subscriptionQuery,
});
const set: SubscriptionMutator = useCallback(
(update?: Partial<Subscription>) => {
mutate(prev => {
if (!update || !prev?.currentUser?.subscription) {
return;
}
return {
currentUser: {
subscription: {
...prev.currentUser?.subscription,
...update,
},
},
};
});
},
[mutate]
);
return [selector(data), set] as const;
};