agent conformation
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
import { useState, useRef, useEffect } from 'react';
|
||||
import { Check, ChevronDown, Monitor, Store, Users } from 'lucide-react';
|
||||
import { Check, ChevronDown, FileSpreadsheet, Monitor, Store, Users } from 'lucide-react';
|
||||
import { AppShell, type MenuEntry, type NavEntry } from '@/components/shell/AppShell';
|
||||
import { BranchScopeProvider, useBranchScope } from './BranchScope';
|
||||
import { useLiveEvents } from '@/queries/useLiveEvents';
|
||||
@@ -51,6 +51,16 @@ const MANAGE: readonly MenuEntry[] = [
|
||||
icon: <Monitor size={13} />,
|
||||
note: 'Till health, per counter',
|
||||
},
|
||||
/* Here rather than in the nav for the reason stated above: the four nav slots
|
||||
each answer a question about the trading day, and "did my spreadsheet
|
||||
land?" is not one of them. It is checked in the days AFTER an upload,
|
||||
while the catalogue service's admin decides whether to run it. */
|
||||
{
|
||||
to: '/admin/uploads',
|
||||
label: 'Uploads',
|
||||
icon: <FileSpreadsheet size={13} />,
|
||||
note: 'Spreadsheets sent to the catalogue',
|
||||
},
|
||||
];
|
||||
|
||||
export function StoreAdminShell() {
|
||||
|
||||
35
src/features/store-admin/pages/UploadsPage.tsx
Normal file
35
src/features/store-admin/pages/UploadsPage.tsx
Normal file
@@ -0,0 +1,35 @@
|
||||
import { VStack } from '@astryxdesign/core/VStack';
|
||||
import { PageHeader } from '@/components/PageHeader';
|
||||
import { useAuth } from '@/auth/AuthContext';
|
||||
import { useBranchScope } from '../BranchScope';
|
||||
import { UploadsPanel } from '@/features/uploads/UploadsPanel';
|
||||
|
||||
/**
|
||||
* This merchant's uploads.
|
||||
*
|
||||
* Scoped from the session, never from a picker — the same rule the import
|
||||
* itself follows. A store login's tenant is fixed by who they are, and offering
|
||||
* a choice with one legal answer is only a chance to get it wrong.
|
||||
*
|
||||
* The branch comes from the shared scope selector, so this page answers
|
||||
* whichever branch the header is currently pointed at; `selected` of null means
|
||||
* all of them, which is the right default for a merchant looking across their
|
||||
* outlets.
|
||||
*/
|
||||
export function UploadsPage() {
|
||||
const { user } = useAuth();
|
||||
const { selected } = useBranchScope();
|
||||
|
||||
return (
|
||||
<VStack gap={3}>
|
||||
<PageHeader
|
||||
title="Uploads"
|
||||
description="Spreadsheets sent to the catalogue service — what each one added, and whether it reached a shelf."
|
||||
/>
|
||||
<UploadsPanel
|
||||
tenantid={user?.tenantid ?? 0}
|
||||
{...(selected === null ? {} : { locationid: selected })}
|
||||
/>
|
||||
</VStack>
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user