new changes

This commit is contained in:
Mamalizz
2025-02-23 23:21:41 +03:30
parent eadcfcdc61
commit 1dcd3647ac
8 changed files with 129 additions and 109 deletions
@@ -11,64 +11,37 @@ export type CreateChatMessageRequest = {
new_message: string;
};
export type CreateChatMessageResponse = Chat[]
export type CreateChatMessageResponse = Chat[];
const useCreateChatMessage = (queryClient: QueryClient) => {
// state
const { $axios: axios } = useNuxtApp();
// method
// methods
const handleCreateChatMessage = async (variables: CreateChatMessageRequest) => {
const { data } = await axios.post<CreateChatMessageResponse>(`${API_ENDPOINTS.chat.new_message}/${variables.productId}`, variables);
const handleCreateChatMessage = async (
variables: CreateChatMessageRequest
) => {
const { data } = await axios.post<CreateChatMessageResponse>(
`${API_ENDPOINTS.chat.new_message}/${variables.productId}`,
variables
);
return data;
};
return useMutation({
mutationKey: [MUTATION_KEYS.create_chat],
mutationFn: (variables: CreateChatMessageRequest) => handleCreateChatMessage(variables),
mutationFn: (variables: CreateChatMessageRequest) =>
handleCreateChatMessage(variables),
onMutate: (newMessage) => {
const prevData = queryClient.getQueriesData({ queryKey: [QUERY_KEYS.chat] });
queryClient.setQueryData<InfiniteData<ApiPaginated<Chat>>>([QUERY_KEYS.chat], (oldData) => {
const lastPage = oldData!.pages[oldData!.pages.length - 1];
return {
pages: [
{
count: lastPage.count,
next: lastPage.next,
previous: lastPage.previous,
results: [
{
id: Date.now(),
content: newMessage.new_message,
sender: "user"
}
]
},
...oldData!.pages
],
pageParams: [
...oldData!.pageParams,
{
limit: 10,
offset: 0
}
]
};
const prevData = queryClient.getQueriesData({
queryKey: [QUERY_KEYS.chat],
});
return { prevData: prevData ? prevData[0][1] : undefined };
},
onSuccess: (response) => {
queryClient.setQueryData<InfiniteData<ApiPaginated<Chat>>>([QUERY_KEYS.chat], (oldData) => {
if (oldData) {
queryClient.setQueryData<InfiniteData<ApiPaginated<Chat>>>(
[QUERY_KEYS.chat],
(oldData) => {
const lastPage = oldData!.pages[oldData!.pages.length - 1];
return {
@@ -77,38 +50,72 @@ const useCreateChatMessage = (queryClient: QueryClient) => {
count: lastPage.count,
next: lastPage.next,
previous: lastPage.previous,
results: {
...response[0],
id: Date.now()
}
results: [
{
id: Date.now(),
content: newMessage.new_message,
sender: "user",
},
],
},
...oldData!.pages
...oldData!.pages,
],
pageParams: [
...oldData!.pageParams,
{
limit: 10,
offset: 0
}
]
offset: 0,
},
],
};
}
);
return oldData;
});
return { prevData: prevData ? prevData[0][1] : undefined };
},
onSuccess: (response) => {
queryClient.setQueryData<InfiniteData<ApiPaginated<Chat>>>(
[QUERY_KEYS.chat],
(oldData) => {
if (oldData) {
const lastPage =
oldData!.pages[oldData!.pages.length - 1];
return {
pages: [
{
count: lastPage.count,
next: lastPage.next,
previous: lastPage.previous,
results: {
...response[0],
id: Date.now(),
},
},
...oldData!.pages,
],
pageParams: [
...oldData!.pageParams,
{
limit: 10,
offset: 0,
},
],
};
}
return oldData;
}
);
},
onError: (err, newMessage, context) => {
if (context) {
queryClient.setQueryData(
[QUERY_KEYS.chat],
context.prevData
);
queryClient.setQueryData([QUERY_KEYS.chat], context.prevData);
}
},
onSettled: (newMessage) => {
queryClient.invalidateQueries({ queryKey: [QUERY_KEYS.chat] });
}
},
});
};