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
@@ -5,17 +5,17 @@ import { API_ENDPOINTS } from "~/constants";
// types
export type CreateOrUpdateAddressRequest = Omit<Address, "is_main">;
export type CreateOrUpdateAddressResponse = Omit<Address, "is_main">;
const useCreateOrUpdateAddress = (update: ComputedRef<Boolean>) => {
// state
const { $axios: axios } = useNuxtApp();
// method
// methods
const handleCreateOrUpdateAddress = async (
addressData: CreateOrUpdateAddressRequest
addressData: CreateOrUpdateAddressResponse
) => {
const { data } = await axios[update.value ? "put" : "post"](
update.value
@@ -30,7 +30,7 @@ const useCreateOrUpdateAddress = (update: ComputedRef<Boolean>) => {
};
return useMutation({
mutationFn: (addressData: CreateOrUpdateAddressRequest) =>
mutationFn: (addressData: CreateOrUpdateAddressResponse) =>
handleCreateOrUpdateAddress(addressData),
});
};
@@ -14,7 +14,7 @@ const useDeleteAddress = () => {
const { $axios: axios } = useNuxtApp();
// method
// methods
const handleDeleteAddress = async (id: number) => {
const { data } = await axios.delete(
@@ -20,7 +20,7 @@ const useUpdateAccount = () => {
const { $axios: axios } = useNuxtApp();
// method
// methods
const handleUpdateAccount = async (params: UpdateAccountRequest) => {
const { data } = await axios.patch(
+11 -6
View File
@@ -1,11 +1,10 @@
export const useAuth = () => {
// state
const token = useCookie("token");
const refreshToken = useCookie("refresh-token");
// method
// methods
const updateToken = (newToken: string) => {
token.value = newToken;
@@ -15,7 +14,7 @@ export const useAuth = () => {
refreshToken.value = newToken;
};
const logout = (reload ?: boolean) => {
const logout = (reload?: boolean) => {
token.value = undefined;
refreshToken.value = undefined;
if (reload) window.location.reload();
@@ -25,6 +24,12 @@ export const useAuth = () => {
const isLoggedIn = computed(() => !!token.value);
return { token, refreshToken, updateRefreshToken, updateToken, logout, isLoggedIn };
};
return {
token,
refreshToken,
updateRefreshToken,
updateToken,
logout,
isLoggedIn,
};
};
@@ -6,17 +6,15 @@ import { API_ENDPOINTS } from "~/constants";
// types
export type RefreshAuthRequest = {
refresh: string,
refresh: string;
};
export type RefreshAuthResponse = {
access: string,
refresh: string,
access: string;
refresh: string;
};
const useRefreshAuth = () => {
// state
const { $axios: axios } = useNuxtApp();
@@ -24,12 +22,16 @@ const useRefreshAuth = () => {
// methods
const handleRefreshAuth = async (variables: RefreshAuthRequest) => {
const { data } = await axios.post<RefreshAuthResponse>(`${API_ENDPOINTS.auth.refresh}/`, variables);
const { data } = await axios.post<RefreshAuthResponse>(
`${API_ENDPOINTS.auth.refresh}`,
variables
);
return data;
};
return useMutation({
mutationFn: (variables: RefreshAuthRequest) => handleRefreshAuth(variables)
mutationFn: (variables: RefreshAuthRequest) =>
handleRefreshAuth(variables),
});
};
@@ -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] });
}
},
});
};
+30 -27
View File
@@ -8,34 +8,36 @@ import { useAuth } from "~/composables/api/auth/useAuth";
export type GetBranchResponse = ApiPaginated<Chat>;
const useGetBranch = (
productId: string | number,
enabled: Ref<boolean>
) => {
const useGetBranch = (productId: string | number, enabled: Ref<boolean>) => {
// state
const { $axios: axios } = useNuxtApp();
const { isLoggedIn } = useAuth();
// method
// methods
const handleGetChat = async ({ productId, limit, offset }: {
productId: number | string,
limit: number,
offset: number
const handleGetChat = async ({
productId,
limit,
offset,
}: {
productId: number | string;
limit: number;
offset: number;
}) => {
const { data } = await axios.get<GetBranchResponse>(`${API_ENDPOINTS.chat.messages}/${productId}`, {
params: {
offset,
limit
},
headers: {
Authorization: `Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoyMTY3ODE2OTAwLCJpYXQiOjE3MzU4MTY5MDAsImp0aSI6ImQwN2E2Y2Y2NzgwZjRlNTE5NWIzOGQxMTAzYzU4NDQ3IiwidXNlcl9pZCI6NX0.slwd7ZSV7nUXEuDTYwwHUOo9ekCefwEEL4kVv2vSTFo`
const { data } = await axios.get<GetBranchResponse>(
`${API_ENDPOINTS.chat.messages}/${productId}`,
{
params: {
offset,
limit,
},
headers: {
Authorization: `Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoyMTY3ODE2OTAwLCJpYXQiOjE3MzU4MTY5MDAsImp0aSI6ImQwN2E2Y2Y2NzgwZjRlNTE5NWIzOGQxMTAzYzU4NDQ3IiwidXNlcl9pZCI6NX0.slwd7ZSV7nUXEuDTYwwHUOo9ekCefwEEL4kVv2vSTFo`,
},
}
});
);
return data;
};
@@ -44,21 +46,22 @@ const useGetBranch = (
queryKey: [QUERY_KEYS.chat],
initialPageParam: {
limit: 10,
offset: 0
offset: 0,
},
queryFn: ({ pageParam }) => handleGetChat({
limit: pageParam.limit,
offset: pageParam.offset,
productId: productId
}),
queryFn: ({ pageParam }) =>
handleGetChat({
limit: pageParam.limit,
offset: pageParam.offset,
productId: productId,
}),
getNextPageParam: (lastPage, pages) => {
if (!lastPage.next) return undefined;
return {
limit: 10,
offset: pages.length * 10
offset: pages.length * 10,
};
}
},
});
};
@@ -6,24 +6,27 @@ import { API_ENDPOINTS } from "~/constants";
// types
export type CreateCommentRequest = {
content: string
content: string;
};
const useCreateComment = (id: number | string | undefined) => {
// state
const { $axios: axios } = useNuxtApp();
// method
// methods
const handleCreateComment = async (variables: CreateCommentRequest) => {
const { data } = await axios.post(`${API_ENDPOINTS.product.create_comment}/${id}`, variables);
const { data } = await axios.post(
`${API_ENDPOINTS.product.create_comment}/${id}`,
variables
);
return data;
};
return useMutation({
mutationFn: (variables: CreateCommentRequest) => handleCreateComment(variables)
mutationFn: (variables: CreateCommentRequest) =>
handleCreateComment(variables),
});
};