mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-25 06:18:45 +08:00
refactor(core): make subscription hook (#4669)
This commit is contained in:
@@ -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;
|
||||
};
|
||||
Reference in New Issue
Block a user