redesign
This commit is contained in:
@@ -13,8 +13,9 @@ import { Freshness } from '@/components/Freshness';
|
||||
import { KpiCard } from '@/components/KpiCard';
|
||||
import { PageHeader } from '@/components/PageHeader';
|
||||
import { SectionHeader } from '@/components/SectionHeader';
|
||||
import { useLocationSummary, useOrderSummary, useTenantLocations, useTenants } from '@/queries/hooks';
|
||||
import type { LocationOrderSummary, TenantInfo, TenantLocation } from '@/api/types';
|
||||
import { useOrderSummary, useOrders, useTenantLocations, useTenants } from '@/queries/hooks';
|
||||
import { branchOrderStats, NO_ORDERS } from '@/features/store-admin/branchStats';
|
||||
import type { TenantInfo, TenantLocation } from '@/api/types';
|
||||
import { TablePager } from '@/components/TablePager';
|
||||
import { usePaged } from '@/components/usePaged';
|
||||
import { Drawer } from '@/features/store-admin/Drawer';
|
||||
@@ -40,12 +41,15 @@ function money(value: number | undefined): string {
|
||||
/**
|
||||
* One tenant: its branches, and how each is performing.
|
||||
*
|
||||
* Order figures come from `/orders/getlocationsummary`, which is scoped to the
|
||||
* tenant and returns one row per branch. Counter sales are NOT folded in here:
|
||||
* the POS endpoints take a single required locationid, so a tenant-wide till
|
||||
* figure would mean one request per branch, and a blended number would be
|
||||
* eventually consistent in a way this page cannot honestly caption. Branch-level
|
||||
* POS lives on the branch screen instead.
|
||||
* Order figures are totalled from the tenant's own order rows and grouped by
|
||||
* branch. They used to come from `/orders/getlocationsummary`, which does return
|
||||
* one row per branch but carries no money on it at all — so every Revenue cell
|
||||
* in this table read ₹0 for as long as the page has existed.
|
||||
*
|
||||
* Counter sales are NOT folded in here: the POS endpoints take a single required
|
||||
* locationid, so a tenant-wide till figure would mean one request per branch,
|
||||
* and a blended number would be eventually consistent in a way this page cannot
|
||||
* honestly caption. Branch-level POS lives on the branch screen instead.
|
||||
*/
|
||||
export function StoreDetailPage() {
|
||||
const { tenantId } = useParams<{ tenantId: string }>();
|
||||
@@ -53,7 +57,11 @@ export function StoreDetailPage() {
|
||||
|
||||
const { data: tenants } = useTenants();
|
||||
const { data: locations, isLoading, error } = useTenantLocations(tenantid);
|
||||
const summary = useLocationSummary(tenantid);
|
||||
/* Per-branch takings come from the order rows. `getlocationsummary`, which
|
||||
used to feed this table, sends counts and no money at all — see
|
||||
`branchStats.ts`. No date range here on purpose: this is the platform's
|
||||
all-time view of a merchant, not a trading-day board. */
|
||||
const summary = useOrders(tenantid ? { tenantid, pagesize: 500 } : undefined);
|
||||
const orders = useOrderSummary(tenantid);
|
||||
|
||||
const tenant = useMemo(
|
||||
@@ -62,13 +70,10 @@ export function StoreDetailPage() {
|
||||
);
|
||||
|
||||
const rows = useMemo<BranchRow[]>(() => {
|
||||
const perLocation = new Map<number, LocationOrderSummary>();
|
||||
for (const entry of summary.data ?? []) {
|
||||
if (typeof entry.locationid === 'number') perLocation.set(entry.locationid, entry);
|
||||
}
|
||||
const perLocation = branchOrderStats(summary.data ?? []);
|
||||
|
||||
return ((locations ?? []) as TenantLocation[]).map((branch) => {
|
||||
const stats = perLocation.get(branch.locationid);
|
||||
const stats = perLocation.get(branch.locationid) ?? NO_ORDERS;
|
||||
return {
|
||||
locationid: branch.locationid,
|
||||
locationname: branch.locationname,
|
||||
@@ -77,8 +82,8 @@ export function StoreDetailPage() {
|
||||
branch.opentime && branch.closetime ? `${branch.opentime}–${branch.closetime}` : '—',
|
||||
radius: branch.deliveryradius ? `${(branch.deliveryradius / 1000).toFixed(1)} km` : '—',
|
||||
status: branch.status ?? 'Unknown',
|
||||
orders: Number(stats?.totalorders ?? 0),
|
||||
revenue: Number(stats?.revenue ?? 0),
|
||||
orders: stats.orders,
|
||||
revenue: stats.revenue,
|
||||
};
|
||||
});
|
||||
}, [locations, summary.data]);
|
||||
@@ -243,7 +248,7 @@ export function StoreDetailPage() {
|
||||
<KpiCard
|
||||
label="Revenue"
|
||||
value={money(totals.totalRevenue)}
|
||||
note="from order summary"
|
||||
note="across every branch"
|
||||
tone={totals.totalRevenue > 0 ? 'success' : 'neutral'}
|
||||
icon={<IndianRupee size={15} />}
|
||||
/>
|
||||
|
||||
Reference in New Issue
Block a user