diff options
Diffstat (limited to 'sdnr/wt/odlux/framework/src/utilities/withComponents.ts')
-rw-r--r-- | sdnr/wt/odlux/framework/src/utilities/withComponents.ts | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/sdnr/wt/odlux/framework/src/utilities/withComponents.ts b/sdnr/wt/odlux/framework/src/utilities/withComponents.ts new file mode 100644 index 000000000..af7c65b5c --- /dev/null +++ b/sdnr/wt/odlux/framework/src/utilities/withComponents.ts @@ -0,0 +1,20 @@ +import * as React from 'react'; +import applicationService from '../services/applicationManager'; +export type WithComponents<T extends { [name: string]: string }> = { + components: { [prop in keyof T]: React.ComponentType } +}; + +export function withComponents<TProps,TMap extends { [name: string]: string }>(mapping: TMap) { + return (component: React.ComponentType<TProps & WithComponents<TMap>>): React.ComponentType<TProps> => { + const components = {} as any; + Object.keys(mapping).forEach(name => { + const [appKey, componentKey] = mapping[name].split('.'); + const reg = applicationService.applications[appKey]; + components[name] = reg && reg.exportedComponents && reg.exportedComponents[componentKey] || (() => null); + }); + return (props: TProps) => ( + React.createElement(component, Object.assign({ components }, props)) + ); + } +} +export default withComponents;
\ No newline at end of file |