Initial commit of react-revamp for Auditor Portal

This commit is contained in:
2026-06-10 18:33:17 +05:30
commit a4c0892741
45 changed files with 7095 additions and 0 deletions

138
src/store/feedStore.ts Normal file
View File

@@ -0,0 +1,138 @@
import { create } from 'zustand';
export interface FeedTab {
date: string;
isRectificationTab: boolean;
totalAnomalyCount: number;
anomalies: any[];
anomaliesCopy: any[];
selectedAnomalyIndex: number;
filters: any;
page: number;
rowsPerPage: number;
}
// Tracks what filter params were last used to fetch dashboard stats
interface DashboardCache {
siteId: string;
auditStatus: string;
fromDate: string;
tillDate: string;
assetIds: string;
minChainage: string;
maxChainage: string;
stats: {
total: number;
audited: number;
pending: number;
anomaliesFound: number;
} | null;
}
interface FeedState {
tabs: FeedTab[];
selectedTabIndex: number;
assets: any[];
assetTypes: any[];
filterFromDate: string;
filterTillDate: string;
filterMinChainage: string;
filterMaxChainage: string;
selectedAssetIds: number[];
sites: any[];
auditStatus: string;
selectedSite: any;
isFiltersModalOpen: boolean;
isInitialized: boolean;
// Cache: last filter key used for the second GlobalFeed effect
lastFetchedFilterKey: string;
// Dashboard stats cache
dashboardCache: DashboardCache;
// Actions
setTabs: (tabs: FeedTab[]) => void;
setSelectedTabIndex: (index: number) => void;
setAssets: (assets: any[]) => void;
setAssetTypes: (assetTypes: any[]) => void;
setSelectedAssetIds: (ids: number[]) => void;
setSites: (sites: any[]) => void;
setSelectedSite: (site: any) => void;
setAuditStatus: (status: string) => void;
setIsFiltersModalOpen: (isOpen: boolean) => void;
setIsInitialized: (val: boolean) => void;
setLastFetchedFilterKey: (key: string) => void;
setDashboardCache: (cache: DashboardCache) => void;
addTab: (tab: FeedTab) => void;
closeTab: (index: number) => void;
updateTab: (index: number, partialTab: Partial<FeedTab>) => void;
setFilterFromDate: (date: string) => void;
setFilterTillDate: (date: string) => void;
setFilterMinChainage: (val: string) => void;
setFilterMaxChainage: (val: string) => void;
resetStore: () => void;
}
const EMPTY_DASHBOARD_CACHE: DashboardCache = {
siteId: '__unset__',
auditStatus: '__unset__',
fromDate: '__unset__',
tillDate: '__unset__',
assetIds: '__unset__',
minChainage: '__unset__',
maxChainage: '__unset__',
stats: null,
};
const initialFeedState = {
tabs: [],
selectedTabIndex: -1,
assets: [],
assetTypes: [],
filterFromDate: '',
filterTillDate: '',
filterMinChainage: '',
filterMaxChainage: '',
selectedAssetIds: [],
selectedSite: null,
sites: [],
auditStatus: 'Auto Audits',
isFiltersModalOpen: false,
isInitialized: false,
lastFetchedFilterKey: '',
dashboardCache: EMPTY_DASHBOARD_CACHE,
};
export const useFeedStore = create<FeedState>((set) => ({
...initialFeedState,
resetStore: () => set(initialFeedState),
setTabs: (tabs) => set({ tabs }),
setSelectedTabIndex: (index) => set({ selectedTabIndex: index }),
setAssets: (assets) => set({ assets }),
setAssetTypes: (assetTypes) => set({ assetTypes }),
setSelectedAssetIds: (selectedAssetIds) => set({ selectedAssetIds }),
setSites: (sites) => set({ sites }),
setSelectedSite: (selectedSite) => set({ selectedSite }),
setAuditStatus: (auditStatus) => set({ auditStatus }),
setIsFiltersModalOpen: (isFiltersModalOpen) => set({ isFiltersModalOpen }),
setIsInitialized: (isInitialized) => set({ isInitialized }),
setLastFetchedFilterKey: (lastFetchedFilterKey) => set({ lastFetchedFilterKey }),
setDashboardCache: (dashboardCache) => set({ dashboardCache }),
setFilterFromDate: (filterFromDate) => set({ filterFromDate }),
setFilterTillDate: (filterTillDate) => set({ filterTillDate }),
setFilterMinChainage: (filterMinChainage) => set({ filterMinChainage }),
setFilterMaxChainage: (filterMaxChainage) => set({ filterMaxChainage }),
addTab: (tab) => set((state) => ({ tabs: [...state.tabs, tab], selectedTabIndex: state.tabs.length })),
closeTab: (index) => set((state) => {
const newTabs = [...state.tabs];
newTabs.splice(index, 1);
const newIndex = state.selectedTabIndex >= newTabs.length ? newTabs.length - 1 : state.selectedTabIndex;
return { tabs: newTabs, selectedTabIndex: newIndex };
}),
updateTab: (index, partialTab) => set((state) => {
const newTabs = [...state.tabs];
newTabs[index] = { ...newTabs[index], ...partialTab };
return { tabs: newTabs };
})
}));