[question][fix] optimize upvote invalidation queries

pull/411/head
Jeff Sieu 3 years ago
parent 22d5f54a47
commit e5533e798f

@ -74,6 +74,10 @@ export const useQuestionVote = (id: string) => {
create: 'questions.questions.createVote',
deleteKey: 'questions.questions.deleteVote',
idKey: 'questionId',
invalidateKeys: [
'questions.questions.getQuestionsByFilter',
'questions.questions.getQuestionById',
],
query: 'questions.questions.getVote',
update: 'questions.questions.updateVote',
});
@ -84,6 +88,10 @@ export const useAnswerVote = (id: string) => {
create: 'questions.answers.createVote',
deleteKey: 'questions.answers.deleteVote',
idKey: 'answerId',
invalidateKeys: [
'questions.answers.getAnswers',
'questions.answers.getAnswerById',
],
query: 'questions.answers.getVote',
update: 'questions.answers.updateVote',
});
@ -94,6 +102,7 @@ export const useQuestionCommentVote = (id: string) => {
create: 'questions.questions.comments.createVote',
deleteKey: 'questions.questions.comments.deleteVote',
idKey: 'questionCommentId',
invalidateKeys: ['questions.questions.comments.getQuestionComments'],
query: 'questions.questions.comments.getVote',
update: 'questions.questions.comments.updateVote',
});
@ -104,6 +113,7 @@ export const useAnswerCommentVote = (id: string) => {
create: 'questions.answers.comments.createVote',
deleteKey: 'questions.answers.comments.deleteVote',
idKey: 'answerCommentId',
invalidateKeys: ['questions.answers.comments.getAnswerComments'],
query: 'questions.answers.comments.getVote',
update: 'questions.answers.comments.updateVote',
});
@ -113,6 +123,7 @@ type VoteProps<VoteQueryKey extends QueryKey = QueryKey> = {
create: MutationKey;
deleteKey: MutationKey;
idKey: string;
invalidateKeys: Array<VoteQueryKey>;
query: VoteQueryKey;
update: MutationKey;
};
@ -121,21 +132,16 @@ export const useVote = <VoteQueryKey extends QueryKey = QueryKey>(
id: string,
opts: VoteProps<VoteQueryKey>,
) => {
const { create, deleteKey, query, update, idKey } = opts;
const { create, deleteKey, query, update, idKey, invalidateKeys } = opts;
const utils = trpc.useContext();
const onVoteUpdate = useCallback(() => {
// TODO: Optimise query invalidation
utils.invalidateQueries([query, { [idKey]: id } as any]);
utils.invalidateQueries(['questions.questions.getQuestionsByFilter']);
utils.invalidateQueries(['questions.questions.getQuestionById']);
utils.invalidateQueries(['questions.answers.getAnswers']);
utils.invalidateQueries(['questions.answers.getAnswerById']);
utils.invalidateQueries([
'questions.questions.comments.getQuestionComments',
]);
utils.invalidateQueries(['questions.answers.comments.getAnswerComments']);
}, [id, idKey, utils, query]);
for (const invalidateKey of invalidateKeys) {
utils.invalidateQueries([invalidateKey]);
}
}, [id, idKey, utils, query, invalidateKeys]);
const { data } = trpc.useQuery([
query,

Loading…
Cancel
Save