new changes
This commit is contained in:
@@ -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(
|
||||
|
||||
@@ -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;
|
||||
@@ -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,29 +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] });
|
||||
const prevData = queryClient.getQueriesData({
|
||||
queryKey: [QUERY_KEYS.chat],
|
||||
});
|
||||
|
||||
queryClient.setQueryData<InfiniteData<ApiPaginated<Chat>>>([QUERY_KEYS.chat], (oldData) => {
|
||||
queryClient.setQueryData<InfiniteData<ApiPaginated<Chat>>>(
|
||||
[QUERY_KEYS.chat],
|
||||
(oldData) => {
|
||||
const lastPage = oldData!.pages[oldData!.pages.length - 1];
|
||||
|
||||
return {
|
||||
@@ -46,30 +54,32 @@ const useCreateChatMessage = (queryClient: QueryClient) => {
|
||||
{
|
||||
id: Date.now(),
|
||||
content: newMessage.new_message,
|
||||
sender: "user"
|
||||
}
|
||||
]
|
||||
sender: "user",
|
||||
},
|
||||
...oldData!.pages
|
||||
],
|
||||
},
|
||||
...oldData!.pages,
|
||||
],
|
||||
pageParams: [
|
||||
...oldData!.pageParams,
|
||||
{
|
||||
limit: 10,
|
||||
offset: 0
|
||||
}
|
||||
]
|
||||
offset: 0,
|
||||
},
|
||||
],
|
||||
};
|
||||
});
|
||||
|
||||
}
|
||||
);
|
||||
|
||||
return { prevData: prevData ? prevData[0][1] : undefined };
|
||||
},
|
||||
onSuccess: (response) => {
|
||||
|
||||
queryClient.setQueryData<InfiniteData<ApiPaginated<Chat>>>([QUERY_KEYS.chat], (oldData) => {
|
||||
queryClient.setQueryData<InfiniteData<ApiPaginated<Chat>>>(
|
||||
[QUERY_KEYS.chat],
|
||||
(oldData) => {
|
||||
if (oldData) {
|
||||
const lastPage = oldData!.pages[oldData!.pages.length - 1];
|
||||
const lastPage =
|
||||
oldData!.pages[oldData!.pages.length - 1];
|
||||
|
||||
return {
|
||||
pages: [
|
||||
@@ -79,36 +89,33 @@ const useCreateChatMessage = (queryClient: QueryClient) => {
|
||||
previous: lastPage.previous,
|
||||
results: {
|
||||
...response[0],
|
||||
id: Date.now()
|
||||
}
|
||||
id: Date.now(),
|
||||
},
|
||||
...oldData!.pages
|
||||
},
|
||||
...oldData!.pages,
|
||||
],
|
||||
pageParams: [
|
||||
...oldData!.pageParams,
|
||||
{
|
||||
limit: 10,
|
||||
offset: 0
|
||||
}
|
||||
]
|
||||
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] });
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
@@ -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}`, {
|
||||
const { data } = await axios.get<GetBranchResponse>(
|
||||
`${API_ENDPOINTS.chat.messages}/${productId}`,
|
||||
{
|
||||
params: {
|
||||
offset,
|
||||
limit
|
||||
limit,
|
||||
},
|
||||
headers: {
|
||||
Authorization: `Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoyMTY3ODE2OTAwLCJpYXQiOjE3MzU4MTY5MDAsImp0aSI6ImQwN2E2Y2Y2NzgwZjRlNTE5NWIzOGQxMTAzYzU4NDQ3IiwidXNlcl9pZCI6NX0.slwd7ZSV7nUXEuDTYwwHUOo9ekCefwEEL4kVv2vSTFo`
|
||||
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({
|
||||
queryFn: ({ pageParam }) =>
|
||||
handleGetChat({
|
||||
limit: pageParam.limit,
|
||||
offset: pageParam.offset,
|
||||
productId: productId
|
||||
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),
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user