feat(clerk): add dedicated nav pages, state restore, and fullscreen ESC fix

- Add ClerkUiStateService with full account state save/restore (no double network call on back navigation)
- Add Photo & Signature, Standing Instructions, Today's Activity as dedicated nav pages
- Remove photo/signature, standing instructions, linked accounts, today's activity panels from main dashboard
- Add ESC key to exit fullscreen; clicking Clerk nav immediately restores fullscreen without re-navigating
- Compact clerk dashboard UI with reduced font sizes and padding throughout
- Add CashierOnlyGuard for route protection

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Jaanu423
2026-06-09 12:49:06 +05:30
co-authored by Claude Sonnet 4.6
parent f7d9259eb7
commit 40a436dabe
20 changed files with 3708 additions and 1020 deletions
+42
View File
@@ -10,6 +10,7 @@ import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { Route } from '../core/route/route.service';
import { CashierOnlyGuard } from '../core/authentication/cashier-only.guard';
import { CashExchangeEntryComponent } from './cash-exchange-entry/cash-exchange-entry.component';
import { CurrencyExchangeDetailComponent } from './currency-exchange-detail/currency-exchange-detail.component';
import { CashTransferComponent } from './cash-transfer/cash-transfer.component';
@@ -24,6 +25,46 @@ import { ShareCollectionComponent } from './share-collection/share-collection.co
const routes: Routes = [
Route.withShell([
{
path: 'clerk',
data: { title: 'Clerk', breadcrumb: 'Clerk' },
children: [
{
path: 'dashboard',
loadComponent: () =>
import('../clerk/clerk-dashboard/clerk-dashboard.component').then((m) => m.ClerkDashboardComponent),
data: { title: 'Clerk Dashboard', breadcrumb: 'Clerk Dashboard' }
},
{
path: 'account-facilities',
loadComponent: () =>
import('../clerk/account-facilities/account-facilities.component').then(
(m) => m.AccountFacilitiesComponent
),
data: { title: 'Account Facilities', breadcrumb: 'Account Facilities' }
},
{
path: 'photo-signature',
loadComponent: () =>
import('../clerk/photo-signature/photo-signature.component').then((m) => m.PhotoSignatureComponent),
data: { title: 'Photo & Signature', breadcrumb: 'Photo & Signature' }
},
{
path: 'standing-instructions',
loadComponent: () =>
import('../clerk/standing-instructions/standing-instructions.component').then(
(m) => m.StandingInstructionsComponent
),
data: { title: 'Standing Instructions', breadcrumb: 'Standing Instructions' }
},
{
path: 'today-activity',
loadComponent: () =>
import('../clerk/today-activity/today-activity.component').then((m) => m.TodayActivityComponent),
data: { title: "Today's Activity", breadcrumb: "Today's Activity" }
}
]
},
{
path: 'cashier',
data: { title: 'Cashier', breadcrumb: 'Cashier' },
@@ -85,6 +126,7 @@ const routes: Routes = [
},
{
path: 'transaction-entry',
canActivate: [CashierOnlyGuard],
loadComponent: () =>
import('./transaction-entry/transaction-entry.component').then((m) => m.TransactionEntryComponent),
data: {