1- import * as React from 'react' ;
1+ import { FC , useEffect , useState } from 'react' ;
22import {
3- isTopologyDataModelFactory as isDynamicTopologyDataModelFactory ,
4- TopologyDataModelFactory as DynamicTopologyDataModelFactory ,
3+ isTopologyDataModelFactory ,
4+ ResolvedExtension ,
5+ TopologyDataModelFactory ,
56 useResolvedExtensions ,
7+ WatchK8sResourcesGeneric ,
68} from '@console/dynamic-plugin-sdk' ;
79import DataModelExtension from './DataModelExtension' ;
810import { ModelContext , ExtensibleModel } from './ModelContext' ;
@@ -13,43 +15,45 @@ interface DataModelProviderProps {
1315 children ?: React . ReactNode ;
1416}
1517
16- const DataModelProvider : React . FC < DataModelProviderProps > = ( { namespace, children } ) => {
17- const [ model , setModel ] = React . useState < ExtensibleModel > ( new ExtensibleModel ( namespace ) ) ;
18+ const DataModelProvider : FC < DataModelProviderProps > = ( { namespace, children } ) => {
19+ const [ model , setModel ] = useState < ExtensibleModel > ( new ExtensibleModel ( namespace ) ) ;
1820
19- React . useEffect ( ( ) => {
21+ useEffect ( ( ) => {
2022 setModel ( new ExtensibleModel ( namespace ) ) ;
2123 } , [ namespace ] ) ;
2224
2325 // Use useResolvedExtensions to automatically resolve all CodeRefs in the extensions
24- const [ dynamicModelFactories , dynamicResolved ] = useResolvedExtensions <
25- DynamicTopologyDataModelFactory
26- > ( isDynamicTopologyDataModelFactory ) ;
26+ const [ modelFactories , factoriesResolved ] = useResolvedExtensions < TopologyDataModelFactory > (
27+ isTopologyDataModelFactory ,
28+ ) ;
2729
2830 // State to track resolved factories (with async resources resolved)
29- const [ resolvedFactories , setResolvedFactories ] = React . useState <
31+ const [ resolvedFactories , setResolvedFactories ] = useState <
3032 | {
31- properties : any ;
33+ properties : ResolvedExtension < TopologyDataModelFactory > [ 'properties' ] & {
34+ resources ?: WatchK8sResourcesGeneric ;
35+ } ;
3236 pluginID : string ;
3337 } [ ]
3438 | null
3539 > ( null ) ;
3640
3741 // Resolve any async resources from factories
38- React . useEffect ( ( ) => {
39- if ( ! dynamicResolved || ! dynamicModelFactories ) {
42+ useEffect ( ( ) => {
43+ if ( ! modelFactories || ! factoriesResolved ) {
4044 setResolvedFactories ( null ) ;
4145 return ;
4246 }
4347
4448 const resolveFactories = async ( ) => {
4549 const resolved = await Promise . all (
46- dynamicModelFactories . map ( async ( factory ) => {
50+ modelFactories . map ( async ( factory ) => {
4751 const { resources, ...rest } = factory . properties ;
4852
4953 // Check if resources is a function (CodeRef that returns Promise)
5054 if ( typeof resources === 'function' ) {
5155 try {
52- const resolvedResources = await resources ( ) ;
56+ const resolvedResources : WatchK8sResourcesGeneric = await resources ( ) ;
5357 return {
5458 properties : { ...rest , resources : resolvedResources } ,
5559 pluginID : factory . pluginID ,
@@ -76,7 +80,7 @@ const DataModelProvider: React.FC<DataModelProviderProps> = ({ namespace, childr
7680 } ;
7781
7882 resolveFactories ( ) ;
79- } , [ dynamicModelFactories , dynamicResolved ] ) ;
83+ } , [ modelFactories , factoriesResolved ] ) ;
8084
8185 return (
8286 < ModelContext . Provider value = { model } >
0 commit comments