@@ -20,6 +20,7 @@ export type ComponentsSelectionContextValue = {
2020 isLoading : boolean ;
2121 error : unknown ;
2222 templateDefaultsError : string | null ;
23+ hasInitialized : boolean ;
2324} ;
2425
2526const ComponentsSelectionContext = createContext < ComponentsSelectionContextValue | undefined > ( undefined ) ;
@@ -69,12 +70,19 @@ export const ComponentsSelectionProvider: React.FC<ComponentsSelectionProviderPr
6970 ! availableManagedComponentsListData ?. items ||
7071 availableManagedComponentsListData . items . length === 0
7172 ) {
73+ if ( ! availableManagedComponentsListData ?. items ) {
74+ return ;
75+ }
76+ if ( availableManagedComponentsListData . items . length === 0 ) {
77+ setInitialComponentsList ( [ ] ) ;
78+ setComponentsList ( [ ] ) ;
79+ initializedComponents . current = true ;
7280 return ;
7381 }
74-
7582 const newComponentsList = availableManagedComponentsListData . items
7683 . map ( ( item ) => {
77- const versions = sortVersions ( item . status ?. versions ?? [ ] ) ;
84+ const rawVersions = Array . isArray ( item . status ?. versions ) ? ( item . status ?. versions as string [ ] ) : [ ] ;
85+ const versions = sortVersions ( rawVersions ) ;
7886 const template = defaultComponents . find ( ( dc ) => dc . name === ( item . metadata ?. name ?? '' ) ) ;
7987 const templateVersion = template ?. version ;
8088 let selectedVersion = template
@@ -112,7 +120,6 @@ export const ComponentsSelectionProvider: React.FC<ComponentsSelectionProviderPr
112120 setTemplateDefaultsError ( null ) ;
113121 return ;
114122 }
115-
116123 const errors : string [ ] = [ ] ;
117124 defaultComponents . forEach ( ( dc : TemplateDefaultComponent ) => {
118125 if ( ! dc ?. name ) return ;
@@ -136,16 +143,15 @@ export const ComponentsSelectionProvider: React.FC<ComponentsSelectionProviderPr
136143 if ( ! defaultComponents ?. length ) return ;
137144 if ( ! componentsList ?. length ) return ;
138145 if ( initialSelection && Object . keys ( initialSelection ) . length > 0 ) return ;
139-
140146 const anySelected = componentsList . some ( ( c ) => c . isSelected ) ;
141147 if ( anySelected ) return ;
142148
143149 const updated = componentsList . map ( ( c ) => {
144150 const template = defaultComponents . find ( ( dc ) => dc . name === c . name ) ;
145151 if ( ! template ) return c ;
146152 const templateVersion = template . version ;
147- const selectedVersion =
148- templateVersion && Array . isArray ( c . versions ) && c . versions . includes ( templateVersion ) ? templateVersion : '' ;
153+ const safeVersions = Array . isArray ( c . versions ) ? c . versions : [ ] ;
154+ const selectedVersion = templateVersion && safeVersions . includes ( templateVersion ) ? templateVersion : '' ;
149155 return { ...c , isSelected : true , selectedVersion } as ComponentsListItem ;
150156 } ) ;
151157
@@ -157,6 +163,7 @@ export const ComponentsSelectionProvider: React.FC<ComponentsSelectionProviderPr
157163 isLoading : Boolean ( isLoading ) ,
158164 error,
159165 templateDefaultsError,
166+ hasInitialized : Boolean ( initializedComponents . current ) ,
160167 } ;
161168
162169 return < ComponentsSelectionContext . Provider value = { value } > { children } </ ComponentsSelectionContext . Provider > ;
0 commit comments