aboutsummaryrefslogtreecommitdiffstats
path: root/sdnr/wt/odlux/framework/src/utilities/withComponents.ts
diff options
context:
space:
mode:
Diffstat (limited to 'sdnr/wt/odlux/framework/src/utilities/withComponents.ts')
-rw-r--r--sdnr/wt/odlux/framework/src/utilities/withComponents.ts20
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