11"use client" ;
22
3- import React , {
4- createContext ,
5- useCallback ,
6- useMemo ,
7- useEffect ,
8- useState ,
9- } from "react" ;
3+ import React , { createContext , useEffect , useState } from "react" ;
104import { Monitor } from "@mui/icons-material" ;
11- import JSONCrush from "jsoncrush" ;
12- import { useSearchParamsUtils } from "../hooks/searchParamsUtils" ;
135import { applicationList } from "../components/ApplicationList" ;
146import { DashboardGroup } from "../types/DashboardGroup" ;
157import ApplicationMetadata from "../types/ApplicationMetadata" ;
16- import { DashboardItem } from "../types/DashboardItem" ;
178
189// Create a context for the UserDashboard state
1910export const ApplicationsContext = createContext <
2011 [
2112 DashboardGroup [ ] ,
2213 React . Dispatch < React . SetStateAction < DashboardGroup [ ] > > ,
2314 ApplicationMetadata [ ] ,
15+ string , // Id of the current application
16+ React . Dispatch < React . SetStateAction < string > > ,
2417 ]
25- > ( [ [ ] , ( ) => { } , [ ] ] ) ;
18+ > ( [ [ ] , ( ) => { } , [ ] , "" , ( ) => { } ] ) ;
2619
2720interface ApplicationsProviderProps {
2821 children : React . ReactNode ;
@@ -45,88 +38,39 @@ export const ApplicationsProvider = ({
4538} : ApplicationsProviderProps ) => {
4639 const [ userDashboard , setUserDashboard ] = useState < DashboardGroup [ ] > ( [ ] ) ;
4740
48- const { getParam, setParam } = useSearchParamsUtils ( ) ;
49-
50- // save user dashboard to searchParams (but not icons)
51- const setUserDashboardParams = useCallback (
52- (
53- groups : DashboardGroup [ ] | ( ( prev : DashboardGroup [ ] ) => DashboardGroup [ ] ) ,
54- ) => {
55- if ( typeof groups === "function" ) {
56- groups = groups ( userDashboard ) ;
57- }
58- const newSections = groups . map ( ( group ) => {
59- return {
60- ...group ,
61- items : group . items . map ( ( item ) => {
62- return {
63- ...item ,
64- icon : ( ) => null ,
65- } ;
66- } ) ,
67- } ;
68- } ) ;
69- setParam ( "dashboard" , JSONCrush . crush ( JSON . stringify ( newSections ) ) ) ;
70- } ,
71- [ setParam , userDashboard ] ,
72- ) ;
73-
74- // get user sections from searchParams
75- const groupsParams = useMemo ( ( ) => getParam ( "dashboard" ) , [ getParam ] ) ;
41+ const [ currentAppId , setCurrentAppId ] = useState < string > ( "" ) ;
7642
7743 useEffect ( ( ) => {
7844 if ( userDashboard . length !== 0 ) return ;
79- if ( groupsParams ) {
80- const uncrushed = JSONCrush . uncrush ( groupsParams ) ;
81- try {
82- const newSections : DashboardGroup [ ] = JSON . parse ( uncrushed ) . map (
83- ( group : DashboardGroup ) => {
84- group . items = group . items . map ( ( item : DashboardItem ) => {
85- return {
86- ...item ,
87- //get icon from appList
88- icon :
89- appList . find ( ( app ) => app . name === item . type ) ?. icon || null ,
90- } ;
91- } ) ;
92- return group ;
93- } ,
94- ) ;
95- if ( newSections !== userDashboard ) {
96- setUserDashboard ( newSections ) ;
97- }
98- } catch ( e ) {
99- console . error ( "Error parsing user dashboard : " , uncrushed , e ) ;
100- }
101- } else {
102- setUserDashboard (
103- defaultUserDashboard || [
104- {
105- title : "My dashboard" ,
106- extended : true ,
107- items : [
108- {
109- title : "My Jobs" ,
110- type : "Job Monitor" ,
111- id : "JobMonitor0" ,
112- icon : Monitor ,
113- } ,
114- ] ,
115- } ,
116- ] ,
117- ) ;
118- }
119- } , [ appList , defaultUserDashboard , groupsParams ] ) ;
45+
46+ setUserDashboard (
47+ defaultUserDashboard || [
48+ {
49+ title : "My dashboard" ,
50+ extended : true ,
51+ items : [
52+ {
53+ title : "My Jobs" ,
54+ type : "Job Monitor" ,
55+ id : "JobMonitor0" ,
56+ icon : Monitor ,
57+ } ,
58+ ] ,
59+ } ,
60+ ] ,
61+ ) ;
62+ } , [ appList , defaultUserDashboard ] ) ;
12063
12164 return (
12265 < ApplicationsContext . Provider
12366 value = { [
12467 userDashboard ,
12568 ( group ) => {
12669 setUserDashboard ( group ) ;
127- setUserDashboardParams ( group ) ;
12870 } ,
12971 appList ,
72+ currentAppId ,
73+ setCurrentAppId ,
13074 ] }
13175 >
13276 { children }
0 commit comments