feat: relocate orders and deliveries to store console & polish store cover images

This commit is contained in:
Suriya
2026-06-03 18:20:43 +05:30
commit 6eaeb5c4a7
32 changed files with 13430 additions and 0 deletions

View File

@@ -0,0 +1,248 @@
/**
* @license
* SPDX-License-Identifier: Apache-2.0
*/
/**
* TanStack Query hooks wrapping the Fiesta REST client in `./fiestaApi`.
*
* Components call these (never fetch directly) to get caching, dedup, and
* loading/error state. These power the operational pages (Inventory, Orders &
* Deliveries, Operations, Reports, Stores/Logistics/Staffing); the Dashboard
* continues to use the Hasura hooks in `./queries`.
*/
import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import {
FIESTA_TENANT_ID,
FIESTA_APPLOCATION_ID,
FIESTA_PRIMARY_LOCATION_ID,
getOrderSummary,
getLocationSummary,
getOrderInsight,
getOrders,
getDeliverySummary,
getDeliveries,
getDeliveryInsight,
getRiders,
getRiderShifts,
getTenantLocations,
getAllTenants,
getTenantCustomers,
getStockStatement,
getProductsCount,
getAllUsers,
getUserById,
createUser,
updateUser,
CreateUserInput,
} from './fiestaApi';
export const fiestaKeys = {
orderSummary: (tenantid: number, fromdate: string, todate: string) =>
['fiesta', 'orderSummary', tenantid, fromdate, todate] as const,
locationSummary: (tenantid: number) => ['fiesta', 'locationSummary', tenantid] as const,
orderInsight: (tenantid: number) => ['fiesta', 'orderInsight', tenantid] as const,
orders: (params: Record<string, unknown>) => ['fiesta', 'orders', params] as const,
deliverySummary: (params: Record<string, unknown>) => ['fiesta', 'deliverySummary', params] as const,
deliveries: (params: Record<string, unknown>) => ['fiesta', 'deliveries', params] as const,
deliveryInsight: (tenantid: number) => ['fiesta', 'deliveryInsight', tenantid] as const,
riders: (params: Record<string, unknown>) => ['fiesta', 'riders', params] as const,
riderShifts: (applocationid: number) => ['fiesta', 'riderShifts', applocationid] as const,
tenantLocations: (tenantid: number) => ['fiesta', 'tenantLocations', tenantid] as const,
allTenants: (params: Record<string, unknown>) => ['fiesta', 'allTenants', params] as const,
tenantCustomers: (params: Record<string, unknown>) => ['fiesta', 'tenantCustomers', params] as const,
stockStatement: (params: Record<string, unknown>) => ['fiesta', 'stockStatement', params] as const,
productsCount: (params: Record<string, unknown>) => ['fiesta', 'productsCount', params] as const,
users: (params: Record<string, unknown>) => ['fiesta', 'users', params] as const,
user: (userid: number) => ['fiesta', 'user', userid] as const,
};
// ── Orders ──────────────────────────────────────────────────────────────────
export function useFiestaOrderSummary(tenantid: number = FIESTA_TENANT_ID, fromdate: string, todate: string) {
return useQuery({
queryKey: fiestaKeys.orderSummary(tenantid, fromdate, todate),
queryFn: () => getOrderSummary(tenantid, fromdate, todate),
enabled: Boolean(tenantid && fromdate && todate),
});
}
export function useFiestaLocationSummary(tenantid: number = FIESTA_TENANT_ID) {
return useQuery({
queryKey: fiestaKeys.locationSummary(tenantid),
queryFn: () => getLocationSummary(tenantid),
enabled: Boolean(tenantid),
});
}
export function useFiestaOrderInsight(tenantid: number = FIESTA_TENANT_ID) {
return useQuery({
queryKey: fiestaKeys.orderInsight(tenantid),
queryFn: () => getOrderInsight(tenantid),
enabled: Boolean(tenantid),
});
}
export function useFiestaOrders(opts: {
tenantid: number;
status: string;
fromdate: string;
todate: string;
pageno?: number;
pagesize?: number;
}) {
return useQuery({
queryKey: fiestaKeys.orders(opts),
queryFn: () => getOrders(opts),
enabled: Boolean(opts.tenantid && opts.status && opts.fromdate && opts.todate),
});
}
// ── Deliveries ────────────────────────────────────────────────────────────────
export function useFiestaDeliverySummary(opts: {
tenantid: number;
applocationid?: number;
fromdate: string;
todate: string;
}) {
return useQuery({
queryKey: fiestaKeys.deliverySummary(opts),
queryFn: () => getDeliverySummary(opts),
enabled: Boolean(opts.tenantid && opts.fromdate && opts.todate),
});
}
export function useFiestaDeliveries(opts: { tenantid: number; fromdate: string; todate: string }) {
return useQuery({
queryKey: fiestaKeys.deliveries(opts),
queryFn: () => getDeliveries(opts),
enabled: Boolean(opts.tenantid && opts.fromdate && opts.todate),
});
}
export function useFiestaDeliveryInsight(tenantid: number = FIESTA_TENANT_ID) {
return useQuery({
queryKey: fiestaKeys.deliveryInsight(tenantid),
queryFn: () => getDeliveryInsight(tenantid),
enabled: Boolean(tenantid),
});
}
// ── Partners / Riders ─────────────────────────────────────────────────────────
export function useFiestaRiders(opts: { applocationid?: number; tenantid: number }) {
return useQuery({
queryKey: fiestaKeys.riders(opts),
queryFn: () => getRiders(opts),
enabled: Boolean(opts.tenantid),
});
}
export function useFiestaRiderShifts(applocationid: number = FIESTA_APPLOCATION_ID) {
return useQuery({
queryKey: fiestaKeys.riderShifts(applocationid),
queryFn: () => getRiderShifts(applocationid),
enabled: Boolean(applocationid),
});
}
// ── Tenants / Customers ─────────────────────────────────────────────────────────
export function useFiestaTenantLocations(tenantid: number = FIESTA_TENANT_ID) {
return useQuery({
queryKey: fiestaKeys.tenantLocations(tenantid),
queryFn: () => getTenantLocations(tenantid),
enabled: Boolean(tenantid),
});
}
export function useFiestaAllTenants(opts: {
applocationid?: number;
status?: string;
pageno?: number;
pagesize?: number;
} = {}) {
return useQuery({
queryKey: fiestaKeys.allTenants(opts),
queryFn: () => getAllTenants(opts),
});
}
export function useFiestaTenantCustomers(opts: {
tenantid: number;
locationid: number;
keyword?: string;
pageno?: number;
pagesize?: number;
}) {
return useQuery({
queryKey: fiestaKeys.tenantCustomers(opts),
queryFn: () => getTenantCustomers(opts),
enabled: Boolean(opts.tenantid && opts.locationid),
});
}
// ── Products / Stock ─────────────────────────────────────────────────────────
export function useFiestaStockStatement(opts: {
tenantid: number;
locationid: number;
subcategoryid?: number;
keyword?: string;
pageno?: number;
pagesize?: number;
}) {
return useQuery({
queryKey: fiestaKeys.stockStatement(opts),
queryFn: () => getStockStatement(opts),
enabled: Boolean(opts.tenantid && opts.locationid),
});
}
export function useFiestaProductsCount(opts: { tenantid: number; categoryid: number; subcategoryid?: number }) {
return useQuery({
queryKey: fiestaKeys.productsCount(opts),
queryFn: () => getProductsCount(opts),
enabled: Boolean(opts.tenantid && opts.categoryid),
});
}
// ── Users ─────────────────────────────────────────────────────────────────────
export function useFiestaUsers(opts: {
tenantid: number;
roleid?: number;
keyword?: string;
pageno?: number;
pagesize?: number;
}) {
return useQuery({
queryKey: fiestaKeys.users(opts),
queryFn: () => getAllUsers(opts),
enabled: Boolean(opts.tenantid),
});
}
export function useFiestaUser(userid: number) {
return useQuery({
queryKey: fiestaKeys.user(userid),
queryFn: () => getUserById(userid),
enabled: Boolean(userid),
});
}
/** Create a user, then refresh every users list on success. */
export function useFiestaCreateUser() {
const qc = useQueryClient();
return useMutation({
mutationFn: (input: CreateUserInput) => createUser(input),
onSuccess: () => qc.invalidateQueries({ queryKey: ['fiesta', 'users'] }),
});
}
/** Update a user, then refresh every users list on success. */
export function useFiestaUpdateUser() {
const qc = useQueryClient();
return useMutation({
mutationFn: (input: Parameters<typeof updateUser>[0]) => updateUser(input),
onSuccess: () => qc.invalidateQueries({ queryKey: ['fiesta', 'users'] }),
});
}
export { FIESTA_TENANT_ID, FIESTA_APPLOCATION_ID, FIESTA_PRIMARY_LOCATION_ID };