feat: initialize dashboard structure with auth, feed management, and activity feed filtering components
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { create } from 'zustand';
|
||||
import { persist } from 'zustand/middleware';
|
||||
|
||||
export interface FeedTab {
|
||||
date: string;
|
||||
@@ -21,11 +22,16 @@ interface DashboardCache {
|
||||
assetIds: string;
|
||||
minChainage: string;
|
||||
maxChainage: string;
|
||||
searchAnomalyId: string;
|
||||
filterPlaza: string;
|
||||
isRectificationEnabled?: boolean;
|
||||
date?: string;
|
||||
stats: {
|
||||
total: number;
|
||||
audited: number;
|
||||
pending: number;
|
||||
anomaliesFound: number;
|
||||
globalTotal: number;
|
||||
batchTotal: number;
|
||||
batchAudited: number;
|
||||
batchPending: number;
|
||||
batchAnomaliesFound: number;
|
||||
} | null;
|
||||
}
|
||||
|
||||
@@ -38,6 +44,7 @@ interface FeedState {
|
||||
filterTillDate: string;
|
||||
filterMinChainage: string;
|
||||
filterMaxChainage: string;
|
||||
filterPlaza: string;
|
||||
selectedAssetIds: number[];
|
||||
sites: any[];
|
||||
auditStatus: string;
|
||||
@@ -48,6 +55,8 @@ interface FeedState {
|
||||
lastFetchedFilterKey: string;
|
||||
// Dashboard stats cache
|
||||
dashboardCache: DashboardCache;
|
||||
searchAnomalyId: string;
|
||||
isRectificationEnabled: boolean;
|
||||
|
||||
// Actions
|
||||
setTabs: (tabs: FeedTab[]) => void;
|
||||
@@ -69,6 +78,9 @@ interface FeedState {
|
||||
setFilterTillDate: (date: string) => void;
|
||||
setFilterMinChainage: (val: string) => void;
|
||||
setFilterMaxChainage: (val: string) => void;
|
||||
setFilterPlaza: (val: string) => void;
|
||||
setSearchAnomalyId: (id: string) => void;
|
||||
setIsRectificationEnabled: (val: boolean) => void;
|
||||
resetStore: () => void;
|
||||
}
|
||||
|
||||
@@ -80,6 +92,10 @@ const EMPTY_DASHBOARD_CACHE: DashboardCache = {
|
||||
assetIds: '__unset__',
|
||||
minChainage: '__unset__',
|
||||
maxChainage: '__unset__',
|
||||
searchAnomalyId: '__unset__',
|
||||
filterPlaza: '__unset__',
|
||||
isRectificationEnabled: false,
|
||||
date: '',
|
||||
stats: null,
|
||||
};
|
||||
|
||||
@@ -92,47 +108,74 @@ const initialFeedState = {
|
||||
filterTillDate: '',
|
||||
filterMinChainage: '',
|
||||
filterMaxChainage: '',
|
||||
filterPlaza: '',
|
||||
selectedAssetIds: [],
|
||||
selectedSite: null,
|
||||
sites: [],
|
||||
auditStatus: 'Auto Audits',
|
||||
auditStatus: 'Manual',
|
||||
isFiltersModalOpen: false,
|
||||
isInitialized: false,
|
||||
lastFetchedFilterKey: '',
|
||||
dashboardCache: EMPTY_DASHBOARD_CACHE,
|
||||
searchAnomalyId: '',
|
||||
isRectificationEnabled: false,
|
||||
};
|
||||
|
||||
export const useFeedStore = create<FeedState>((set) => ({
|
||||
...initialFeedState,
|
||||
export const useFeedStore = create<FeedState>()(
|
||||
persist(
|
||||
(set) => ({
|
||||
...initialFeedState,
|
||||
|
||||
resetStore: () => 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 };
|
||||
})
|
||||
}));
|
||||
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 }),
|
||||
setFilterPlaza: (filterPlaza) => set({ filterPlaza }),
|
||||
setSearchAnomalyId: (searchAnomalyId) => set({ searchAnomalyId }),
|
||||
setIsRectificationEnabled: (isRectificationEnabled) => set({ isRectificationEnabled }),
|
||||
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 };
|
||||
})
|
||||
}),
|
||||
{
|
||||
name: 'feed-store-storage',
|
||||
partialize: (state) => ({
|
||||
tabs: state.tabs,
|
||||
selectedTabIndex: state.selectedTabIndex,
|
||||
filterFromDate: state.filterFromDate,
|
||||
filterTillDate: state.filterTillDate,
|
||||
filterMinChainage: state.filterMinChainage,
|
||||
filterMaxChainage: state.filterMaxChainage,
|
||||
filterPlaza: state.filterPlaza,
|
||||
selectedAssetIds: state.selectedAssetIds,
|
||||
selectedSite: state.selectedSite,
|
||||
auditStatus: state.auditStatus,
|
||||
searchAnomalyId: state.searchAnomalyId,
|
||||
isRectificationEnabled: state.isRectificationEnabled,
|
||||
}),
|
||||
}
|
||||
)
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user