@@ -72,21 +72,38 @@ export default function Visualization({
7272 return createListCollection ( { items } ) ;
7373 } , [ cogAssets , tilejsonLink , wmtsLink , itemAssetKeys ] ) ;
7474
75- const [ selected , setSelected ] = useState < string | undefined > ( ( ) => {
75+ const visualization = useStore ( ( store ) => store . visualization ) ;
76+ const setVisualization = useStore ( ( store ) => store . setVisualization ) ;
77+
78+ const validValues = useMemo (
79+ ( ) => new Set ( collection . items . map ( ( item ) => item . value ) ) ,
80+ [ collection ]
81+ ) ;
82+
83+ const fallback = useMemo ( ( ) => {
7684 const bestItemKey = pickBestKeyForItems ( allItems ) ;
7785 if ( bestItemKey && cogAssets . length === 0 && ! tilejsonLink && ! wmtsLink ) {
7886 return `items:${ bestItemKey } ` ;
7987 }
8088 return collection . items [ 0 ] ?. value ;
81- } ) ;
89+ } , [ allItems , cogAssets , tilejsonLink , wmtsLink , collection ] ) ;
90+
91+ const selected =
92+ visualization && validValues . has ( visualization ) ? visualization : fallback ;
93+
94+ useEffect ( ( ) => {
95+ if ( visualization && validValues . has ( visualization ) ) return ;
96+ if ( fallback && fallback !== visualization ) setVisualization ( fallback ) ;
97+ } , [ visualization , validValues , fallback , setVisualization ] ) ;
98+
8299 const [ enabled , setEnabled ] = useState ( true ) ;
83100
84101 const firstPage = itemPages [ 0 ] ;
85102 const [ lastFirstPage , setLastFirstPage ] = useState ( firstPage ) ;
86103 if ( lastFirstPage !== firstPage ) {
87104 setLastFirstPage ( firstPage ) ;
88105 const bestItemKey = pickBestKeyForItems ( allItems ) ;
89- if ( bestItemKey ) setSelected ( `items:${ bestItemKey } ` ) ;
106+ if ( bestItemKey ) setVisualization ( `items:${ bestItemKey } ` ) ;
90107 }
91108
92109 const setLayer = useStore ( ( store ) => store . setLayer ) ;
@@ -181,7 +198,7 @@ export default function Visualization({
181198 size = { "sm" }
182199 collection = { collection }
183200 value = { selected ? [ selected ] : [ ] }
184- onValueChange = { ( e ) => setSelected ( e . value [ 0 ] ) }
201+ onValueChange = { ( e ) => setVisualization ( e . value [ 0 ] ?? null ) }
185202 disabled = { ! enabled }
186203 >
187204 < Select . HiddenSelect />
0 commit comments