mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-24 21:51:34 +10:00
feat(resume): ✨ implement resume locking feature
This commit is contained in:
38
apps/client/src/services/resume/lock.ts
Normal file
38
apps/client/src/services/resume/lock.ts
Normal file
@ -0,0 +1,38 @@
|
||||
import { ResumeDto } from "@reactive-resume/dto";
|
||||
import { useMutation } from "@tanstack/react-query";
|
||||
|
||||
import { axios } from "@/client/libs/axios";
|
||||
import { queryClient } from "@/client/libs/query-client";
|
||||
|
||||
type LockResumeArgs = {
|
||||
id: string;
|
||||
set: boolean;
|
||||
};
|
||||
|
||||
export const lockResume = async ({ id, set }: LockResumeArgs) => {
|
||||
const response = await axios.patch(`/resume/${id}/lock`, { set });
|
||||
|
||||
queryClient.setQueryData<ResumeDto>(["resume", { id: response.data.id }], response.data);
|
||||
|
||||
queryClient.setQueryData<ResumeDto[]>(["resumes"], (cache) => {
|
||||
if (!cache) return [response.data];
|
||||
return cache.map((resume) => {
|
||||
if (resume.id === response.data.id) return response.data;
|
||||
return resume;
|
||||
});
|
||||
});
|
||||
|
||||
return response.data;
|
||||
};
|
||||
|
||||
export const useLockResume = () => {
|
||||
const {
|
||||
error,
|
||||
isPending: loading,
|
||||
mutateAsync: lockResumeFn,
|
||||
} = useMutation({
|
||||
mutationFn: lockResume,
|
||||
});
|
||||
|
||||
return { lockResume: lockResumeFn, loading, error };
|
||||
};
|
||||
@ -1,28 +1,41 @@
|
||||
import { ResumeDto, UpdateResumeDto } from "@reactive-resume/dto";
|
||||
import { useMutation } from "@tanstack/react-query";
|
||||
import { AxiosResponse } from "axios";
|
||||
import { AxiosError, AxiosResponse } from "axios";
|
||||
import debounce from "lodash.debounce";
|
||||
|
||||
import { toast } from "@/client/hooks/use-toast";
|
||||
import { axios } from "@/client/libs/axios";
|
||||
import { queryClient } from "@/client/libs/query-client";
|
||||
|
||||
export const updateResume = async (data: UpdateResumeDto) => {
|
||||
const response = await axios.patch<ResumeDto, AxiosResponse<ResumeDto>, UpdateResumeDto>(
|
||||
`/resume/${data.id}`,
|
||||
data,
|
||||
);
|
||||
try {
|
||||
const response = await axios.patch<ResumeDto, AxiosResponse<ResumeDto>, UpdateResumeDto>(
|
||||
`/resume/${data.id}`,
|
||||
data,
|
||||
);
|
||||
|
||||
queryClient.setQueryData<ResumeDto>(["resume", { id: response.data.id }], response.data);
|
||||
queryClient.setQueryData<ResumeDto>(["resume", { id: response.data.id }], response.data);
|
||||
|
||||
queryClient.setQueryData<ResumeDto[]>(["resumes"], (cache) => {
|
||||
if (!cache) return [response.data];
|
||||
return cache.map((resume) => {
|
||||
if (resume.id === response.data.id) return response.data;
|
||||
return resume;
|
||||
queryClient.setQueryData<ResumeDto[]>(["resumes"], (cache) => {
|
||||
if (!cache) return [response.data];
|
||||
return cache.map((resume) => {
|
||||
if (resume.id === response.data.id) return response.data;
|
||||
return resume;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
return response.data;
|
||||
return response.data;
|
||||
} catch (error) {
|
||||
if (error instanceof AxiosError) {
|
||||
const message = error.response?.data.message ?? error.message;
|
||||
|
||||
toast({
|
||||
variant: "error",
|
||||
title: "There was an error while updating your resume.",
|
||||
description: message,
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
export const debouncedUpdateResume = debounce(updateResume, 500);
|
||||
@ -34,17 +47,6 @@ export const useUpdateResume = () => {
|
||||
mutateAsync: updateResumeFn,
|
||||
} = useMutation({
|
||||
mutationFn: updateResume,
|
||||
onSuccess: (data) => {
|
||||
queryClient.setQueryData<ResumeDto>(["resume", { id: data.id }], data);
|
||||
|
||||
queryClient.setQueryData<ResumeDto[]>(["resumes"], (cache) => {
|
||||
if (!cache) return [data];
|
||||
return cache.map((resume) => {
|
||||
if (resume.id === data.id) return data;
|
||||
return resume;
|
||||
});
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
return { updateResume: updateResumeFn, loading, error };
|
||||
|
||||
Reference in New Issue
Block a user