party-order list ok,

This commit is contained in:
louiscklaw
2025-06-16 00:01:36 +08:00
parent 77f7211317
commit 7370316ea0
10 changed files with 135 additions and 1876 deletions

View File

@@ -1,10 +1,10 @@
// src/actions/order.ts
// src/actions/party-order.ts
//
import { useMemo } from 'react';
import axiosInstance, { endpoints, fetcher } from 'src/lib/axios';
import type { IOrderItem } from 'src/types/party-order';
import type { IProductItem } from 'src/types/product';
import type { IPartyOrderItem } from 'src/types/party-order';
import type { SWRConfiguration } from 'swr';
import useSWR from 'swr';
import useSWR, { mutate } from 'swr';
// ----------------------------------------------------------------------
@@ -16,14 +16,14 @@ const swrOptions: SWRConfiguration = {
// ----------------------------------------------------------------------
type OrdersData = {
partyOrders: IOrderItem[];
type PartyOrdersData = {
partyOrders: IPartyOrderItem[];
};
export function useGetPartyOrders() {
const url = endpoints.partyOrder.list;
const { data, isLoading, error, isValidating, mutate } = useSWR<OrdersData>(
const { data, isLoading, error, isValidating } = useSWR<PartyOrdersData>(
url,
fetcher,
swrOptions
@@ -31,14 +31,13 @@ export function useGetPartyOrders() {
const memoizedValue = useMemo(
() => ({
orders: data?.partyOrders || [],
ordersLoading: isLoading,
ordersError: error,
ordersValidating: isValidating,
ordersEmpty: !isLoading && !isValidating && !data?.partyOrders.length,
mutate,
partyOrders: data?.partyOrders || [],
partyOrdersLoading: isLoading,
partyOrdersError: error,
partyOrdersValidating: isValidating,
partyOrdersEmpty: !isLoading && !isValidating && !data?.partyOrders.length,
}),
[data?.partyOrders, error, isLoading, isValidating, mutate]
[data?.partyOrders, error, isLoading, isValidating]
);
return memoizedValue;
@@ -46,23 +45,24 @@ export function useGetPartyOrders() {
// ----------------------------------------------------------------------
type OrderData = {
order: IOrderItem;
type PartyOrderData = {
partyOrder: IPartyOrderItem;
};
export function useGetOrder(orderId: string) {
const url = orderId ? [endpoints.order.details, { params: { orderId } }] : '';
export function useGetPartyOrder(partyOrderId: string) {
const url = partyOrderId ? [endpoints.partyOrder.details, { params: { partyOrderId } }] : '';
const { data, isLoading, error, isValidating } = useSWR<OrderData>(url, fetcher, swrOptions);
const { data, isLoading, error, isValidating } = useSWR<PartyOrderData>(url, fetcher, swrOptions);
const memoizedValue = useMemo(
() => ({
order: data?.order,
orderLoading: isLoading,
orderError: error,
orderValidating: isValidating,
partyOrder: data?.partyOrder,
partyOrderLoading: isLoading,
partyOrderError: error,
partyOrderValidating: isValidating,
mutate,
}),
[data?.order, error, isLoading, isValidating]
[data?.partyOrder, error, isLoading, isValidating]
);
return memoizedValue;
@@ -71,7 +71,7 @@ export function useGetOrder(orderId: string) {
// ----------------------------------------------------------------------
type SearchResultsData = {
results: IProductItem[];
results: IPartyOrderItem[];
};
export function useSearchProducts(query: string) {
@@ -98,129 +98,112 @@ export function useSearchProducts(query: string) {
// ----------------------------------------------------------------------
type SaveOrderData = {
name: string;
city: string;
role: string;
email: string;
state: string;
status: string;
address: string;
country: string;
zipCode: string;
company: string;
avatarUrl: string;
phoneNumber: string;
isVerified: boolean;
//
ordername: string;
password: string;
};
export async function createPartyOrder(partyOrderData: IPartyOrderItem) {
/**
* Work on server
*/
const data = { partyOrderData };
const {
data: { id },
} = await axiosInstance.post(endpoints.partyOrder.create, data);
export async function saveOrder(orderId: string, saveOrderData: SaveOrderData) {
// const url = orderId ? [endpoints.order.details, { params: { orderId } }] : '';
/**
* Work in local
*/
mutate(
endpoints.partyOrder.list,
(currentData: any) => {
const currentPartyOrders: IPartyOrderItem[] = currentData?.partyOrders;
const res = await axiosInstance.post(
//
`http://localhost:7272/api/order/saveOrder?orderId=${orderId}`,
{
data: saveOrderData,
}
const partyOrders = [...currentPartyOrders, { ...partyOrderData, id }];
return { ...currentData, partyOrders };
},
false
);
return res;
}
export async function uploadOrderImage(saveOrderData: SaveOrderData) {
console.log('uploadOrderImage ?');
// const url = orderId ? [endpoints.order.details, { params: { orderId } }] : '';
const res = await axiosInstance.get('http://localhost:7272/api/product/helloworld');
return res;
}
// ----------------------------------------------------------------------
type CreateOrderData = {
name: string;
city: string;
role: string;
email: string;
state: string;
status: string;
address: string;
country: string;
zipCode: string;
company: string;
avatarUrl: string;
phoneNumber: string;
isVerified: boolean;
//
ordername: string;
password: string;
};
export async function updatePartyOrder(partyOrderData: Partial<IPartyOrderItem>) {
/**
* Work on server
*/
const data = { partyOrderData };
await axiosInstance.put(endpoints.partyOrder.update, data);
export async function createOrder(createOrderData: CreateOrderData) {
console.log('create product ?');
// const url = productId ? [endpoints.product.details, { params: { productId } }] : '';
/**
* Work in local
*/
const res = await axiosInstance.post('http://localhost:7272/api/order/createOrder', {
data: createOrderData,
});
mutate(
endpoints.partyOrder.list,
(currentData: any) => {
const currentPartyOrders: IPartyOrderItem[] = currentData?.partyOrders;
return res;
const partyOrders = currentPartyOrders.map((partyOrder) =>
partyOrder.id === partyOrderData.id ? { ...partyOrder, ...partyOrderData } : partyOrder
);
return { ...currentData, partyOrders };
},
false
);
}
// ----------------------------------------------------------------------
type DeleteOrderResponse = {
success: boolean;
message?: string;
};
export async function deletePartyOrder(partyOrderId: string) {
/**
* Work on server
*/
const data = { partyOrderId };
await axiosInstance.patch(endpoints.partyOrder.delete, data);
export async function deletePartyOrder(orderId: string): Promise<DeleteOrderResponse> {
const url = `http://localhost:7272/api/order/deleteOrder?orderId=${orderId}`;
/**
* Work in local
*/
try {
const res = await axiosInstance.delete(url);
mutate(
endpoints.partyOrder.list,
(currentData: any) => {
const currentProducts: IPartyOrderItem[] = currentData?.partyOrders;
return {
success: true,
message: 'Order deleted successfully',
};
} catch (error) {
return {
success: false,
message: error instanceof Error ? error.message : 'Failed to delete product',
};
}
const partyOrders = currentProducts.filter((partyOrder) => partyOrder.id !== partyOrderId);
return { ...currentData, partyOrders };
},
false
);
}
// ----------------------------------------------------------------------
type ChangeStatusResponse = {
success: boolean;
message?: string;
};
// TODO: implement partyOrder changeStatus with url below
// const url = endpoints.order.changeStatus(orderId);
export async function changeStatus(partyOrderData: any, dummy: any) {
return true;
// /**
// * Work on server
// */
// const data = { partyOrderData };
// await axiosInstance.put(endpoints.partyOrder.update, data);
export async function changeStatus(
orderId: string,
newOrderStatus: string
): Promise<ChangeStatusResponse> {
const url = endpoints.order.changeStatus(orderId);
// /**
// * Work in local
// */
try {
const res = await axiosInstance.put(url, { data: { status: newOrderStatus } });
// mutate(
// endpoints.partyOrder.list,
// (currentData: any) => {
// const currentPartyOrders: IPartyOrderItem[] = currentData?.partyOrders;
return {
success: true,
message: 'status updated successfully',
};
} catch (error) {
return {
success: false,
message: error instanceof Error ? error.message : 'Failed to delete product',
};
}
// const partyOrders = currentPartyOrders.map((partyOrder) =>
// partyOrder.id === partyOrderData.id ? { ...partyOrder, ...partyOrderData } : partyOrder
// );
// return { ...currentData, partyOrders };
// },
// false
// );
}