11import React from "react" ;
22
33import { useQueryClient } from "@tanstack/react-query" ;
4- import { useAtom , useAtomValue , useSetAtom } from "jotai" ;
4+ import { useAtom } from "jotai" ;
55
66import { FieldDropdown } from "@framework/components/FieldDropdown" ;
77import type { ModuleSettingsProps } from "@framework/Module" ;
@@ -20,8 +20,8 @@ import { GroupType } from "@modules/_shared/DataProviderFramework/groups/groupTy
2020
2121import type { Interfaces } from "../interfaces" ;
2222
23- import { dataProviderManagerAtom , preferredViewLayoutAtom , userSelectedFieldIdentifierAtom } from "./atoms/baseAtoms" ;
24- import { selectedFieldIdentifierAtom } from "./atoms/derivedAtoms " ;
23+ import { dataProviderManagerAtom , dataProviderSerializedStateAtom } from "./atoms/baseAtoms" ;
24+ import { selectedFieldIdentifierAtom } from "./atoms/persistableFixableAtoms " ;
2525import { DataProviderManagerWrapper } from "./components/dataProviderManagerWrapper" ;
2626
2727export function Settings ( props : ModuleSettingsProps < Interfaces > ) : JSX . Element {
@@ -30,35 +30,29 @@ export function Settings(props: ModuleSettingsProps<Interfaces>): JSX.Element {
3030 const colorSet = useColorSet ( props . workbenchSettings ) ;
3131
3232 const [ dataProviderManager , setDataProviderManager ] = useAtom ( dataProviderManagerAtom ) ;
33+ const [ selectedFieldIdentifier , setSelectedFieldIdentifier ] = useAtom ( selectedFieldIdentifierAtom ) ;
3334
34- const selectedFieldIdentifier = useAtomValue ( selectedFieldIdentifierAtom ) ;
35- const setSelectedFieldIdentifier = useSetAtom ( userSelectedFieldIdentifierAtom ) ;
36- const [ preferredViewLayout , setPreferredViewLayout ] = useAtom ( preferredViewLayoutAtom ) ;
35+ const [ dataProviderSerializedState , setDataProviderSerializedState ] = useAtom ( dataProviderSerializedStateAtom ) ;
36+ const dataProviderSerializedStateRef = React . useRef ( dataProviderSerializedState ) ;
3737
38- const persistState = React . useCallback (
38+ const persistDataProviderManagerState = React . useCallback (
3939 function persistDataProviderManagerState ( ) {
4040 if ( ! dataProviderManager ) {
4141 return ;
4242 }
4343
4444 const serializedState = {
4545 dataProviderManager : dataProviderManager . serializeState ( ) ,
46- selectedFieldIdentifier,
47- preferredViewLayout,
4846 } ;
49- window . localStorage . setItem (
50- `${ props . settingsContext . getInstanceIdString ( ) } -settings` ,
51- JSON . stringify ( serializedState ) ,
52- ) ;
47+ setDataProviderSerializedState ( JSON . stringify ( serializedState ) ) ;
5348 } ,
54- [ dataProviderManager , selectedFieldIdentifier , preferredViewLayout , props . settingsContext ] ,
49+ [ dataProviderManager , setDataProviderSerializedState ] ,
5550 ) ;
5651
5752 const applyPersistedState = React . useCallback (
5853 function applyPersistedState ( dataProviderManager : DataProviderManager ) {
59- const serializedState = window . localStorage . getItem (
60- `${ props . settingsContext . getInstanceIdString ( ) } -settings` ,
61- ) ;
54+ const serializedState = dataProviderSerializedStateRef . current ;
55+
6256 if ( ! serializedState ) {
6357 const groupDelegate = dataProviderManager . getGroupDelegate ( ) ;
6458
@@ -80,21 +74,14 @@ export function Settings(props: ModuleSettingsProps<Interfaces>): JSX.Element {
8074 }
8175
8276 const parsedState = JSON . parse ( serializedState ) ;
83- if ( parsedState . fieldIdentifier ) {
84- setSelectedFieldIdentifier ( parsedState . fieldIdentifier ) ;
85- }
86- if ( parsedState . preferredViewLayout ) {
87- setPreferredViewLayout ( parsedState . preferredViewLayout ) ;
88- }
89-
9077 if ( parsedState . dataProviderManager ) {
9178 if ( ! dataProviderManager ) {
9279 return ;
9380 }
9481 dataProviderManager . deserializeState ( parsedState . dataProviderManager ) ;
9582 }
9683 } ,
97- [ setSelectedFieldIdentifier , setPreferredViewLayout , props . settingsContext , colorSet ] ,
84+ [ colorSet ] ,
9885 ) ;
9986
10087 React . useEffect (
@@ -121,31 +108,31 @@ export function Settings(props: ModuleSettingsProps<Interfaces>): JSX.Element {
121108 return ;
122109 }
123110
124- persistState ( ) ;
111+ persistDataProviderManagerState ( ) ;
125112
126113 const unsubscribeDataRev = dataProviderManager
127114 . getPublishSubscribeDelegate ( )
128- . makeSubscriberFunction ( DataProviderManagerTopic . DATA_REVISION ) ( persistState ) ;
115+ . makeSubscriberFunction ( DataProviderManagerTopic . DATA_REVISION ) ( persistDataProviderManagerState ) ;
129116
130117 const unsubscribeExpands = dataProviderManager
131118 . getGroupDelegate ( )
132119 . getPublishSubscribeDelegate ( )
133- . makeSubscriberFunction ( GroupDelegateTopic . CHILDREN_EXPANSION_STATES ) ( persistState ) ;
120+ . makeSubscriberFunction ( GroupDelegateTopic . CHILDREN_EXPANSION_STATES ) ( persistDataProviderManagerState ) ;
134121
135122 return function onUnmountEffect ( ) {
136123 unsubscribeDataRev ( ) ;
137124 unsubscribeExpands ( ) ;
138125 } ;
139126 } ,
140- [ dataProviderManager , props . workbenchSession , props . workbenchSettings , persistState ] ,
127+ [ dataProviderManager , props . workbenchSession , props . workbenchSettings , persistDataProviderManagerState ] ,
141128 ) ;
142129
143130 React . useEffect (
144131 function onFieldIdentifierChangedEffect ( ) {
145132 if ( ! dataProviderManager ) {
146133 return ;
147134 }
148- dataProviderManager . updateGlobalSetting ( "fieldId" , selectedFieldIdentifier ) ;
135+ dataProviderManager . updateGlobalSetting ( "fieldId" , selectedFieldIdentifier . value ) ;
149136 } ,
150137 [ selectedFieldIdentifier , dataProviderManager ] ,
151138 ) ;
@@ -159,7 +146,7 @@ export function Settings(props: ModuleSettingsProps<Interfaces>): JSX.Element {
159146 < CollapsibleGroup title = "Field" expanded >
160147 < FieldDropdown
161148 ensembleSet = { ensembleSet }
162- value = { selectedFieldIdentifier }
149+ value = { selectedFieldIdentifier . value }
163150 onChange = { handleFieldIdentifierChange }
164151 />
165152 </ CollapsibleGroup >
0 commit comments