@vuu-ui/vuu-utils 0.8.57 → 0.8.58
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/component-registry.js +43 -17
- package/cjs/component-registry.js.map +1 -1
- package/cjs/index.js +4 -0
- package/cjs/index.js.map +1 -1
- package/esm/component-registry.js +40 -18
- package/esm/component-registry.js.map +1 -1
- package/esm/index.js +1 -1
- package/package.json +6 -6
- package/types/component-registry.d.ts +9 -2
|
@@ -2,6 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
var columnUtils = require('./column-utils.js');
|
|
4
4
|
|
|
5
|
+
const containersSet = /* @__PURE__ */ new Set();
|
|
6
|
+
const viewsSet = /* @__PURE__ */ new Set();
|
|
7
|
+
const layoutComponentsMap = /* @__PURE__ */ new Map();
|
|
5
8
|
const cellRenderersMap = /* @__PURE__ */ new Map();
|
|
6
9
|
const columnHeaderRenderersMap = /* @__PURE__ */ new Map();
|
|
7
10
|
const configEditorsMap = /* @__PURE__ */ new Map();
|
|
@@ -18,25 +21,34 @@ const isTypeCompatible = (rendererType, serverDataType) => {
|
|
|
18
21
|
return rendererType === serverDataType;
|
|
19
22
|
}
|
|
20
23
|
};
|
|
24
|
+
const isContainer = (componentType) => containersSet.has(componentType);
|
|
25
|
+
const isView = (componentType) => viewsSet.has(componentType);
|
|
26
|
+
const isLayoutComponent = (componentType) => isContainer(componentType) || isView(componentType);
|
|
21
27
|
const isCellRenderer = (type, component) => component !== void 0 && type === "cell-renderer";
|
|
22
28
|
const isColumnHeaderContentRenderer = (type, component) => type === "column-header-content-renderer";
|
|
23
29
|
const isColumnHeaderLabelRenderer = (type, component) => type === "column-header-label-renderer";
|
|
24
30
|
const isCellConfigPanel = (type, component) => type === "cell-config-panel";
|
|
25
31
|
const isEditRuleValidator = (type, component) => type === "data-edit-validator";
|
|
26
32
|
const isRowClassGenerator = (type, component) => type === "row-class-generator";
|
|
27
|
-
function registerComponent(componentName, component,
|
|
28
|
-
if (
|
|
33
|
+
function registerComponent(componentName, component, componentType, options) {
|
|
34
|
+
if (componentType === "container" || componentType === "view" || componentType === "component") {
|
|
35
|
+
layoutComponentsMap.set(componentName, component);
|
|
36
|
+
if (componentType === "container") {
|
|
37
|
+
containersSet.add(componentName);
|
|
38
|
+
} else if (componentType === "view") {
|
|
39
|
+
viewsSet.add(componentName);
|
|
40
|
+
}
|
|
41
|
+
} else if (isCellRenderer(componentType, component)) {
|
|
29
42
|
cellRenderersMap.set(componentName, component);
|
|
30
|
-
} else if (isColumnHeaderContentRenderer(
|
|
43
|
+
} else if (isColumnHeaderContentRenderer(componentType)) {
|
|
31
44
|
columnHeaderRenderersMap.set(componentName, component);
|
|
32
|
-
} else if (isColumnHeaderLabelRenderer(
|
|
45
|
+
} else if (isColumnHeaderLabelRenderer(componentType)) {
|
|
33
46
|
columnHeaderRenderersMap.set(componentName, component);
|
|
34
|
-
} else if (isCellConfigPanel(
|
|
47
|
+
} else if (isCellConfigPanel(componentType)) {
|
|
35
48
|
cellConfigPanelsMap.set(componentName, component);
|
|
36
|
-
} else if (isEditRuleValidator(
|
|
49
|
+
} else if (isEditRuleValidator(componentType)) {
|
|
37
50
|
editRuleValidatorsMap.set(componentName, component);
|
|
38
|
-
} else if (isRowClassGenerator(
|
|
39
|
-
console.log(`register ${componentName}`);
|
|
51
|
+
} else if (isRowClassGenerator(componentType)) {
|
|
40
52
|
rowClassGeneratorsMap.set(componentName, component);
|
|
41
53
|
}
|
|
42
54
|
if (options) {
|
|
@@ -60,6 +72,16 @@ const getRegisteredCellRenderers = (serverDataType) => {
|
|
|
60
72
|
return allRenderers;
|
|
61
73
|
}
|
|
62
74
|
};
|
|
75
|
+
const getLayoutComponent = (componentName) => {
|
|
76
|
+
const layoutComponent = layoutComponentsMap.get(componentName);
|
|
77
|
+
if (layoutComponent) {
|
|
78
|
+
return layoutComponent;
|
|
79
|
+
} else {
|
|
80
|
+
throw Error(
|
|
81
|
+
`layout component ${componentName} not found in ComponentRegistry`
|
|
82
|
+
);
|
|
83
|
+
}
|
|
84
|
+
};
|
|
63
85
|
const getCellRendererOptions = (renderName) => optionsMap.get(renderName);
|
|
64
86
|
function getCellRenderer(column) {
|
|
65
87
|
return dataCellRenderer(column);
|
|
@@ -75,6 +97,15 @@ function getColumnHeaderLabelRenderer(column) {
|
|
|
75
97
|
}
|
|
76
98
|
}
|
|
77
99
|
const getRowClassNameGenerator = (generatorId) => rowClassGeneratorsMap.get(generatorId);
|
|
100
|
+
function getConfigurationEditor(configEditor = "") {
|
|
101
|
+
return configEditorsMap.get(configEditor);
|
|
102
|
+
}
|
|
103
|
+
function getCellConfigPanelRenderer(name) {
|
|
104
|
+
return cellConfigPanelsMap.get(name);
|
|
105
|
+
}
|
|
106
|
+
function getEditRuleValidator(name) {
|
|
107
|
+
return editRuleValidatorsMap.get(name);
|
|
108
|
+
}
|
|
78
109
|
function dataCellRenderer(column) {
|
|
79
110
|
if (columnUtils.isTypeDescriptor(column.type)) {
|
|
80
111
|
const { renderer } = column.type;
|
|
@@ -87,15 +118,6 @@ function dataCellRenderer(column) {
|
|
|
87
118
|
return cellRenderersMap.get("input-cell");
|
|
88
119
|
}
|
|
89
120
|
}
|
|
90
|
-
function getConfigurationEditor(configEditor = "") {
|
|
91
|
-
return configEditorsMap.get(configEditor);
|
|
92
|
-
}
|
|
93
|
-
function getCellConfigPanelRenderer(name) {
|
|
94
|
-
return cellConfigPanelsMap.get(name);
|
|
95
|
-
}
|
|
96
|
-
function getEditRuleValidator(name) {
|
|
97
|
-
return editRuleValidatorsMap.get(name);
|
|
98
|
-
}
|
|
99
121
|
|
|
100
122
|
exports.getCellConfigPanelRenderer = getCellConfigPanelRenderer;
|
|
101
123
|
exports.getCellRenderer = getCellRenderer;
|
|
@@ -104,8 +126,12 @@ exports.getColumnHeaderContentRenderer = getColumnHeaderContentRenderer;
|
|
|
104
126
|
exports.getColumnHeaderLabelRenderer = getColumnHeaderLabelRenderer;
|
|
105
127
|
exports.getConfigurationEditor = getConfigurationEditor;
|
|
106
128
|
exports.getEditRuleValidator = getEditRuleValidator;
|
|
129
|
+
exports.getLayoutComponent = getLayoutComponent;
|
|
107
130
|
exports.getRegisteredCellRenderers = getRegisteredCellRenderers;
|
|
108
131
|
exports.getRowClassNameGenerator = getRowClassNameGenerator;
|
|
132
|
+
exports.isContainer = isContainer;
|
|
133
|
+
exports.isLayoutComponent = isLayoutComponent;
|
|
134
|
+
exports.isView = isView;
|
|
109
135
|
exports.registerComponent = registerComponent;
|
|
110
136
|
exports.registerConfigurationEditor = registerConfigurationEditor;
|
|
111
137
|
//# sourceMappingURL=component-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-registry.js","sources":["../src/component-registry.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuColumnDataType,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnDescriptor,\n ColumnDescriptorCustomRenderer,\n ColumnTypeRendering,\n EditValidationRule,\n HeaderCellProps,\n TableCellRendererProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport { FunctionComponent as FC, HTMLAttributes } from \"react\";\nimport {\n ColumnMap,\n isColumnTypeRenderer,\n isTypeDescriptor,\n} from \"./column-utils\";\n\nexport interface CellConfigPanelProps extends HTMLAttributes<HTMLDivElement> {\n onConfigChange: () => void;\n}\n\nexport type PropertyChangeHandler = (\n propertyName: string,\n propertyValue: string | number | boolean\n) => void;\n\nexport type ColumnRenderPropsChangeHandler = (\n renderProps: ColumnTypeRendering\n) => void;\n\nexport interface ConfigurationEditorProps {\n column: ColumnDescriptorCustomRenderer;\n onChangeRendering: ColumnRenderPropsChangeHandler;\n}\n\nexport type RowClassNameGenerator = (\n row: DataSourceRow,\n columnMap: ColumnMap\n) => string | undefined;\n\nexport type RowClassGenerator = {\n id: string;\n fn: RowClassNameGenerator;\n};\n\nexport type ConfigEditorComponent = FC<CellConfigPanelProps>;\n\nconst cellRenderersMap = new Map<string, FC<TableCellRendererProps>>();\nconst columnHeaderRenderersMap = new Map<string, FC<HeaderCellProps>>();\nconst configEditorsMap = new Map<string, FC<ConfigurationEditorProps>>();\nconst cellConfigPanelsMap = new Map<string, ConfigEditorComponent>();\nconst editRuleValidatorsMap = new Map<string, EditRuleValidator>();\nconst optionsMap = new Map<string, CellRendererOptions>();\nconst rowClassGeneratorsMap = new Map<string, RowClassGenerator>();\n\nexport type EditRuleValidator = (\n editRule: EditValidationRule,\n value?: VuuRowDataItemType\n) => boolean | string;\n\nexport type ComponentType =\n | \"cell-renderer\"\n | \"cell-config-panel\"\n | \"column-header-content-renderer\"\n | \"column-header-label-renderer\"\n | \"data-edit-validator\"\n | \"row-class-generator\";\n\ntype CellRendererOptions = {\n // [key: string]: unknown;\n configEditor?: string;\n description?: string;\n label?: string;\n serverDataType?: VuuColumnDataType | VuuColumnDataType[] | \"json\" | \"private\";\n userCanAssign?: boolean;\n};\nexport interface CellRendererDescriptor extends CellRendererOptions {\n name: string;\n}\n\nconst isTypeCompatible = (\n rendererType:\n | VuuColumnDataType\n | (VuuColumnDataType | \"json\")[]\n | \"json\"\n | \"private\"\n | undefined,\n serverDataType: VuuColumnDataType | \"json\"\n) => {\n if (rendererType === undefined || rendererType === \"private\") {\n return true;\n } else if (Array.isArray(rendererType)) {\n return rendererType.includes(serverDataType);\n } else {\n return rendererType === serverDataType;\n }\n};\n\nconst isCellRenderer = (\n type: ComponentType,\n component: unknown\n): component is FC<TableCellRendererProps> =>\n component !== undefined && type === \"cell-renderer\";\n\nconst isColumnHeaderContentRenderer = (\n type: ComponentType,\n component: unknown\n): component is FC<HeaderCellProps> =>\n type === \"column-header-content-renderer\";\nconst isColumnHeaderLabelRenderer = (\n type: ComponentType,\n component: unknown\n): component is FC<HeaderCellProps> => type === \"column-header-label-renderer\";\n\nconst isCellConfigPanel = (\n type: ComponentType,\n component: unknown\n): component is FC<CellConfigPanelProps> => type === \"cell-config-panel\";\n\nconst isEditRuleValidator = (\n type: ComponentType,\n component: unknown\n): component is EditRuleValidator => type === \"data-edit-validator\";\n\nconst isRowClassGenerator = (\n type: ComponentType,\n component: unknown\n): component is RowClassGenerator => type === \"row-class-generator\";\n\nexport function registerComponent<\n T extends\n | CellConfigPanelProps\n | EditRuleValidator\n | HeaderCellProps\n | RowClassGenerator\n | TableCellRendererProps = TableCellRendererProps\n>(\n componentName: string,\n component: T extends EditRuleValidator | RowClassGenerator ? T : FC<T>,\n type: ComponentType = \"cell-renderer\",\n options: CellRendererOptions\n): void {\n if (isCellRenderer(type, component)) {\n cellRenderersMap.set(componentName, component);\n } else if (isColumnHeaderContentRenderer(type, component)) {\n columnHeaderRenderersMap.set(componentName, component);\n } else if (isColumnHeaderLabelRenderer(type, component)) {\n columnHeaderRenderersMap.set(componentName, component);\n } else if (isCellConfigPanel(type, component)) {\n cellConfigPanelsMap.set(componentName, component);\n } else if (isEditRuleValidator(type, component)) {\n editRuleValidatorsMap.set(componentName, component);\n } else if (isRowClassGenerator(type, component)) {\n console.log(`register ${componentName}`);\n rowClassGeneratorsMap.set(componentName, component);\n }\n if (options) {\n optionsMap.set(componentName, options);\n }\n}\n\nexport const registerConfigurationEditor = (\n componentName: string,\n configurationEditor: FC<ConfigurationEditorProps>\n) => {\n configEditorsMap.set(componentName, configurationEditor);\n};\n\n// This is invoked by settings panel to allow users to assign\n// non-default, cell renderers. Ignore renderers registered\n// with the attribute userCanAssign = false\nexport const getRegisteredCellRenderers = (\n serverDataType?: VuuColumnDataType | \"json\"\n): CellRendererDescriptor[] => {\n const rendererNames = Array.from(cellRenderersMap.keys());\n const allRenderers = rendererNames\n .map<CellRendererDescriptor>((name) => ({\n name,\n ...(optionsMap.get(name) as CellRendererOptions),\n }))\n .filter(({ userCanAssign }) => userCanAssign !== false);\n if (serverDataType) {\n return allRenderers.filter((renderer) =>\n isTypeCompatible(renderer.serverDataType, serverDataType)\n );\n } else {\n return allRenderers;\n }\n};\n\nexport const getCellRendererOptions = (renderName: string) =>\n optionsMap.get(renderName);\n\nexport function getCellRenderer(column: ColumnDescriptor) {\n return dataCellRenderer(column);\n}\nexport function getColumnHeaderContentRenderer(column: ColumnDescriptor) {\n if (column.colHeaderContentRenderer) {\n return columnHeaderRenderersMap.get(column.colHeaderContentRenderer);\n }\n}\nexport function getColumnHeaderLabelRenderer(column: ColumnDescriptor) {\n if (column.colHeaderLabelRenderer) {\n return columnHeaderRenderersMap.get(column.colHeaderLabelRenderer);\n }\n}\nexport const getRowClassNameGenerator = (generatorId: string) =>\n rowClassGeneratorsMap.get(generatorId);\n\nfunction dataCellRenderer(column: ColumnDescriptor) {\n if (isTypeDescriptor(column.type)) {\n const { renderer } = column.type;\n if (isColumnTypeRenderer(renderer)) {\n return cellRenderersMap.get(renderer.name);\n }\n } else if (column.serverDataType === \"boolean\") {\n return cellRenderersMap.get(\"checkbox-cell\");\n } else if (column.editable) {\n // we can only offer a text input edit as a generic editor.\n // If a more specialised editor is required, user must configure\n // it in column config.\n return cellRenderersMap.get(\"input-cell\");\n }\n}\n\nexport function getConfigurationEditor(configEditor = \"\") {\n return configEditorsMap.get(configEditor);\n}\n\nexport function getCellConfigPanelRenderer(name: string) {\n return cellConfigPanelsMap.get(name);\n}\n\nexport function getEditRuleValidator(name: string) {\n return editRuleValidatorsMap.get(name);\n}\n"],"names":["isTypeDescriptor","isColumnTypeRenderer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component-registry.js","sources":["../src/component-registry.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuColumnDataType,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnDescriptor,\n ColumnDescriptorCustomRenderer,\n ColumnTypeRendering,\n EditValidationRule,\n HeaderCellProps,\n TableCellRendererProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport { FunctionComponent as FC, HTMLAttributes } from \"react\";\nimport {\n ColumnMap,\n isColumnTypeRenderer,\n isTypeDescriptor,\n} from \"./column-utils\";\n\nexport interface CellConfigPanelProps extends HTMLAttributes<HTMLDivElement> {\n onConfigChange: () => void;\n}\n\nexport type PropertyChangeHandler = (\n propertyName: string,\n propertyValue: string | number | boolean\n) => void;\n\nexport type ColumnRenderPropsChangeHandler = (\n renderProps: ColumnTypeRendering\n) => void;\n\nexport interface ConfigurationEditorProps {\n column: ColumnDescriptorCustomRenderer;\n onChangeRendering: ColumnRenderPropsChangeHandler;\n}\n\nexport type RowClassNameGenerator = (\n row: DataSourceRow,\n columnMap: ColumnMap\n) => string | undefined;\n\nexport type RowClassGenerator = {\n id: string;\n fn: RowClassNameGenerator;\n};\n\nexport type ConfigEditorComponent = FC<CellConfigPanelProps>;\n\nconst containersSet = new Set<string>();\nconst viewsSet = new Set<string>();\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst layoutComponentsMap = new Map<string, FC<any>>();\nconst cellRenderersMap = new Map<string, FC<TableCellRendererProps>>();\nconst columnHeaderRenderersMap = new Map<string, FC<HeaderCellProps>>();\nconst configEditorsMap = new Map<string, FC<ConfigurationEditorProps>>();\nconst cellConfigPanelsMap = new Map<string, ConfigEditorComponent>();\nconst editRuleValidatorsMap = new Map<string, EditRuleValidator>();\nconst optionsMap = new Map<string, CellRendererOptions>();\nconst rowClassGeneratorsMap = new Map<string, RowClassGenerator>();\n\nexport type EditRuleValidator = (\n editRule: EditValidationRule,\n value?: VuuRowDataItemType\n) => boolean | string;\n\nexport type layoutComponentType = \"container\" | \"view\";\n\nexport type ComponentType =\n | layoutComponentType\n | \"cell-renderer\"\n | \"cell-config-panel\"\n | \"column-header-content-renderer\"\n | \"column-header-label-renderer\"\n | \"component\"\n | \"data-edit-validator\"\n | \"row-class-generator\";\n\ntype CellRendererOptions = {\n configEditor?: string;\n description?: string;\n label?: string;\n serverDataType?: VuuColumnDataType | VuuColumnDataType[] | \"json\" | \"private\";\n userCanAssign?: boolean;\n};\nexport interface CellRendererDescriptor extends CellRendererOptions {\n name: string;\n}\n\nconst isTypeCompatible = (\n rendererType:\n | VuuColumnDataType\n | (VuuColumnDataType | \"json\")[]\n | \"json\"\n | \"private\"\n | undefined,\n serverDataType: VuuColumnDataType | \"json\"\n) => {\n if (rendererType === undefined || rendererType === \"private\") {\n return true;\n } else if (Array.isArray(rendererType)) {\n return rendererType.includes(serverDataType);\n } else {\n return rendererType === serverDataType;\n }\n};\n\nexport const isContainer = (componentType: string) =>\n containersSet.has(componentType);\nexport const isView = (componentType: string) => viewsSet.has(componentType);\nexport const isLayoutComponent = (\n componentType: string\n): componentType is layoutComponentType =>\n isContainer(componentType) || isView(componentType);\n\nconst isCellRenderer = (\n type: ComponentType,\n component: unknown\n): component is FC<TableCellRendererProps> =>\n component !== undefined && type === \"cell-renderer\";\n\nconst isColumnHeaderContentRenderer = (\n type: ComponentType,\n component: unknown\n): component is FC<HeaderCellProps> =>\n type === \"column-header-content-renderer\";\nconst isColumnHeaderLabelRenderer = (\n type: ComponentType,\n component: unknown\n): component is FC<HeaderCellProps> => type === \"column-header-label-renderer\";\n\nconst isCellConfigPanel = (\n type: ComponentType,\n component: unknown\n): component is FC<CellConfigPanelProps> => type === \"cell-config-panel\";\n\nconst isEditRuleValidator = (\n type: ComponentType,\n component: unknown\n): component is EditRuleValidator => type === \"data-edit-validator\";\n\nconst isRowClassGenerator = (\n type: ComponentType,\n component: unknown\n): component is RowClassGenerator => type === \"row-class-generator\";\n\nexport function registerComponent(\n componentName: string,\n component: RowClassGenerator,\n componentType: \"row-class-generator\",\n options?: CellRendererOptions\n): void;\nexport function registerComponent(\n componentName: string,\n component: EditRuleValidator,\n componentType: \"data-edit-validator\",\n options?: CellRendererOptions\n): void;\nexport function registerComponent(\n componentName: string,\n // unknown won't work for us here, we'll get the default children\n // definition for FC which conflicts with some components props.\n // VoidFunctionComponent doesn't help either\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: FC<any>,\n componentType: Omit<\n ComponentType,\n \"data-edit-validator\" | \"row-class-generator\"\n >,\n options?: CellRendererOptions\n): void;\nexport function registerComponent(\n componentName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n componentType: any,\n options?: CellRendererOptions\n): void {\n if (\n componentType === \"container\" ||\n componentType === \"view\" ||\n componentType === \"component\"\n ) {\n layoutComponentsMap.set(componentName, component);\n if (componentType === \"container\") {\n containersSet.add(componentName);\n } else if (componentType === \"view\") {\n viewsSet.add(componentName);\n }\n } else if (isCellRenderer(componentType, component)) {\n cellRenderersMap.set(componentName, component);\n } else if (isColumnHeaderContentRenderer(componentType, component)) {\n columnHeaderRenderersMap.set(componentName, component);\n } else if (isColumnHeaderLabelRenderer(componentType, component)) {\n columnHeaderRenderersMap.set(componentName, component);\n } else if (isCellConfigPanel(componentType, component)) {\n cellConfigPanelsMap.set(componentName, component);\n } else if (isEditRuleValidator(componentType, component)) {\n editRuleValidatorsMap.set(componentName, component);\n } else if (isRowClassGenerator(componentType, component)) {\n rowClassGeneratorsMap.set(componentName, component);\n }\n if (options) {\n optionsMap.set(componentName, options);\n }\n}\n\nexport const registerConfigurationEditor = (\n componentName: string,\n configurationEditor: FC<ConfigurationEditorProps>\n) => {\n configEditorsMap.set(componentName, configurationEditor);\n};\n\n// This is invoked by settings panel to allow users to assign\n// non-default, cell renderers. Ignore renderers registered\n// with the attribute userCanAssign = false\nexport const getRegisteredCellRenderers = (\n serverDataType?: VuuColumnDataType | \"json\"\n): CellRendererDescriptor[] => {\n const rendererNames = Array.from(cellRenderersMap.keys());\n const allRenderers = rendererNames\n .map<CellRendererDescriptor>((name) => ({\n name,\n ...(optionsMap.get(name) as CellRendererOptions),\n }))\n .filter(({ userCanAssign }) => userCanAssign !== false);\n if (serverDataType) {\n return allRenderers.filter((renderer) =>\n isTypeCompatible(renderer.serverDataType, serverDataType)\n );\n } else {\n return allRenderers;\n }\n};\n\nexport const getLayoutComponent = (componentName: string) => {\n const layoutComponent = layoutComponentsMap.get(componentName);\n if (layoutComponent) {\n return layoutComponent;\n } else {\n throw Error(\n `layout component ${componentName} not found in ComponentRegistry`\n );\n }\n};\n\nexport const getCellRendererOptions = (renderName: string) =>\n optionsMap.get(renderName);\n\nexport function getCellRenderer(column: ColumnDescriptor) {\n return dataCellRenderer(column);\n}\nexport function getColumnHeaderContentRenderer(column: ColumnDescriptor) {\n if (column.colHeaderContentRenderer) {\n return columnHeaderRenderersMap.get(column.colHeaderContentRenderer);\n }\n}\nexport function getColumnHeaderLabelRenderer(column: ColumnDescriptor) {\n if (column.colHeaderLabelRenderer) {\n return columnHeaderRenderersMap.get(column.colHeaderLabelRenderer);\n }\n}\nexport const getRowClassNameGenerator = (generatorId: string) =>\n rowClassGeneratorsMap.get(generatorId);\n\nexport function getConfigurationEditor(configEditor = \"\") {\n return configEditorsMap.get(configEditor);\n}\n\nexport function getCellConfigPanelRenderer(name: string) {\n return cellConfigPanelsMap.get(name);\n}\n\nexport function getEditRuleValidator(name: string) {\n return editRuleValidatorsMap.get(name);\n}\n\nfunction dataCellRenderer(column: ColumnDescriptor) {\n if (isTypeDescriptor(column.type)) {\n const { renderer } = column.type;\n if (isColumnTypeRenderer(renderer)) {\n return cellRenderersMap.get(renderer.name);\n }\n } else if (column.serverDataType === \"boolean\") {\n return cellRenderersMap.get(\"checkbox-cell\");\n } else if (column.editable) {\n // we can only offer a text input edit as a generic editor.\n // If a more specialised editor is required, user must configure\n // it in column config.\n return cellRenderersMap.get(\"input-cell\");\n }\n}\n"],"names":["isTypeDescriptor","isColumnTypeRenderer"],"mappings":"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"}
|
package/cjs/index.js
CHANGED
|
@@ -137,8 +137,12 @@ exports.getColumnHeaderContentRenderer = componentRegistry.getColumnHeaderConten
|
|
|
137
137
|
exports.getColumnHeaderLabelRenderer = componentRegistry.getColumnHeaderLabelRenderer;
|
|
138
138
|
exports.getConfigurationEditor = componentRegistry.getConfigurationEditor;
|
|
139
139
|
exports.getEditRuleValidator = componentRegistry.getEditRuleValidator;
|
|
140
|
+
exports.getLayoutComponent = componentRegistry.getLayoutComponent;
|
|
140
141
|
exports.getRegisteredCellRenderers = componentRegistry.getRegisteredCellRenderers;
|
|
141
142
|
exports.getRowClassNameGenerator = componentRegistry.getRowClassNameGenerator;
|
|
143
|
+
exports.isContainer = componentRegistry.isContainer;
|
|
144
|
+
exports.isLayoutComponent = componentRegistry.isLayoutComponent;
|
|
145
|
+
exports.isView = componentRegistry.isView;
|
|
142
146
|
exports.registerComponent = componentRegistry.registerComponent;
|
|
143
147
|
exports.registerConfigurationEditor = componentRegistry.registerConfigurationEditor;
|
|
144
148
|
exports.DataWindow = DataWindow.DataWindow;
|
package/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { isTypeDescriptor, isColumnTypeRenderer } from './column-utils.js';
|
|
2
2
|
|
|
3
|
+
const containersSet = /* @__PURE__ */ new Set();
|
|
4
|
+
const viewsSet = /* @__PURE__ */ new Set();
|
|
5
|
+
const layoutComponentsMap = /* @__PURE__ */ new Map();
|
|
3
6
|
const cellRenderersMap = /* @__PURE__ */ new Map();
|
|
4
7
|
const columnHeaderRenderersMap = /* @__PURE__ */ new Map();
|
|
5
8
|
const configEditorsMap = /* @__PURE__ */ new Map();
|
|
@@ -16,25 +19,34 @@ const isTypeCompatible = (rendererType, serverDataType) => {
|
|
|
16
19
|
return rendererType === serverDataType;
|
|
17
20
|
}
|
|
18
21
|
};
|
|
22
|
+
const isContainer = (componentType) => containersSet.has(componentType);
|
|
23
|
+
const isView = (componentType) => viewsSet.has(componentType);
|
|
24
|
+
const isLayoutComponent = (componentType) => isContainer(componentType) || isView(componentType);
|
|
19
25
|
const isCellRenderer = (type, component) => component !== void 0 && type === "cell-renderer";
|
|
20
26
|
const isColumnHeaderContentRenderer = (type, component) => type === "column-header-content-renderer";
|
|
21
27
|
const isColumnHeaderLabelRenderer = (type, component) => type === "column-header-label-renderer";
|
|
22
28
|
const isCellConfigPanel = (type, component) => type === "cell-config-panel";
|
|
23
29
|
const isEditRuleValidator = (type, component) => type === "data-edit-validator";
|
|
24
30
|
const isRowClassGenerator = (type, component) => type === "row-class-generator";
|
|
25
|
-
function registerComponent(componentName, component,
|
|
26
|
-
if (
|
|
31
|
+
function registerComponent(componentName, component, componentType, options) {
|
|
32
|
+
if (componentType === "container" || componentType === "view" || componentType === "component") {
|
|
33
|
+
layoutComponentsMap.set(componentName, component);
|
|
34
|
+
if (componentType === "container") {
|
|
35
|
+
containersSet.add(componentName);
|
|
36
|
+
} else if (componentType === "view") {
|
|
37
|
+
viewsSet.add(componentName);
|
|
38
|
+
}
|
|
39
|
+
} else if (isCellRenderer(componentType, component)) {
|
|
27
40
|
cellRenderersMap.set(componentName, component);
|
|
28
|
-
} else if (isColumnHeaderContentRenderer(
|
|
41
|
+
} else if (isColumnHeaderContentRenderer(componentType)) {
|
|
29
42
|
columnHeaderRenderersMap.set(componentName, component);
|
|
30
|
-
} else if (isColumnHeaderLabelRenderer(
|
|
43
|
+
} else if (isColumnHeaderLabelRenderer(componentType)) {
|
|
31
44
|
columnHeaderRenderersMap.set(componentName, component);
|
|
32
|
-
} else if (isCellConfigPanel(
|
|
45
|
+
} else if (isCellConfigPanel(componentType)) {
|
|
33
46
|
cellConfigPanelsMap.set(componentName, component);
|
|
34
|
-
} else if (isEditRuleValidator(
|
|
47
|
+
} else if (isEditRuleValidator(componentType)) {
|
|
35
48
|
editRuleValidatorsMap.set(componentName, component);
|
|
36
|
-
} else if (isRowClassGenerator(
|
|
37
|
-
console.log(`register ${componentName}`);
|
|
49
|
+
} else if (isRowClassGenerator(componentType)) {
|
|
38
50
|
rowClassGeneratorsMap.set(componentName, component);
|
|
39
51
|
}
|
|
40
52
|
if (options) {
|
|
@@ -58,6 +70,16 @@ const getRegisteredCellRenderers = (serverDataType) => {
|
|
|
58
70
|
return allRenderers;
|
|
59
71
|
}
|
|
60
72
|
};
|
|
73
|
+
const getLayoutComponent = (componentName) => {
|
|
74
|
+
const layoutComponent = layoutComponentsMap.get(componentName);
|
|
75
|
+
if (layoutComponent) {
|
|
76
|
+
return layoutComponent;
|
|
77
|
+
} else {
|
|
78
|
+
throw Error(
|
|
79
|
+
`layout component ${componentName} not found in ComponentRegistry`
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
61
83
|
const getCellRendererOptions = (renderName) => optionsMap.get(renderName);
|
|
62
84
|
function getCellRenderer(column) {
|
|
63
85
|
return dataCellRenderer(column);
|
|
@@ -73,6 +95,15 @@ function getColumnHeaderLabelRenderer(column) {
|
|
|
73
95
|
}
|
|
74
96
|
}
|
|
75
97
|
const getRowClassNameGenerator = (generatorId) => rowClassGeneratorsMap.get(generatorId);
|
|
98
|
+
function getConfigurationEditor(configEditor = "") {
|
|
99
|
+
return configEditorsMap.get(configEditor);
|
|
100
|
+
}
|
|
101
|
+
function getCellConfigPanelRenderer(name) {
|
|
102
|
+
return cellConfigPanelsMap.get(name);
|
|
103
|
+
}
|
|
104
|
+
function getEditRuleValidator(name) {
|
|
105
|
+
return editRuleValidatorsMap.get(name);
|
|
106
|
+
}
|
|
76
107
|
function dataCellRenderer(column) {
|
|
77
108
|
if (isTypeDescriptor(column.type)) {
|
|
78
109
|
const { renderer } = column.type;
|
|
@@ -85,15 +116,6 @@ function dataCellRenderer(column) {
|
|
|
85
116
|
return cellRenderersMap.get("input-cell");
|
|
86
117
|
}
|
|
87
118
|
}
|
|
88
|
-
function getConfigurationEditor(configEditor = "") {
|
|
89
|
-
return configEditorsMap.get(configEditor);
|
|
90
|
-
}
|
|
91
|
-
function getCellConfigPanelRenderer(name) {
|
|
92
|
-
return cellConfigPanelsMap.get(name);
|
|
93
|
-
}
|
|
94
|
-
function getEditRuleValidator(name) {
|
|
95
|
-
return editRuleValidatorsMap.get(name);
|
|
96
|
-
}
|
|
97
119
|
|
|
98
|
-
export { getCellConfigPanelRenderer, getCellRenderer, getCellRendererOptions, getColumnHeaderContentRenderer, getColumnHeaderLabelRenderer, getConfigurationEditor, getEditRuleValidator, getRegisteredCellRenderers, getRowClassNameGenerator, registerComponent, registerConfigurationEditor };
|
|
120
|
+
export { getCellConfigPanelRenderer, getCellRenderer, getCellRendererOptions, getColumnHeaderContentRenderer, getColumnHeaderLabelRenderer, getConfigurationEditor, getEditRuleValidator, getLayoutComponent, getRegisteredCellRenderers, getRowClassNameGenerator, isContainer, isLayoutComponent, isView, registerComponent, registerConfigurationEditor };
|
|
99
121
|
//# sourceMappingURL=component-registry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-registry.js","sources":["../src/component-registry.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuColumnDataType,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnDescriptor,\n ColumnDescriptorCustomRenderer,\n ColumnTypeRendering,\n EditValidationRule,\n HeaderCellProps,\n TableCellRendererProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport { FunctionComponent as FC, HTMLAttributes } from \"react\";\nimport {\n ColumnMap,\n isColumnTypeRenderer,\n isTypeDescriptor,\n} from \"./column-utils\";\n\nexport interface CellConfigPanelProps extends HTMLAttributes<HTMLDivElement> {\n onConfigChange: () => void;\n}\n\nexport type PropertyChangeHandler = (\n propertyName: string,\n propertyValue: string | number | boolean\n) => void;\n\nexport type ColumnRenderPropsChangeHandler = (\n renderProps: ColumnTypeRendering\n) => void;\n\nexport interface ConfigurationEditorProps {\n column: ColumnDescriptorCustomRenderer;\n onChangeRendering: ColumnRenderPropsChangeHandler;\n}\n\nexport type RowClassNameGenerator = (\n row: DataSourceRow,\n columnMap: ColumnMap\n) => string | undefined;\n\nexport type RowClassGenerator = {\n id: string;\n fn: RowClassNameGenerator;\n};\n\nexport type ConfigEditorComponent = FC<CellConfigPanelProps>;\n\nconst cellRenderersMap = new Map<string, FC<TableCellRendererProps>>();\nconst columnHeaderRenderersMap = new Map<string, FC<HeaderCellProps>>();\nconst configEditorsMap = new Map<string, FC<ConfigurationEditorProps>>();\nconst cellConfigPanelsMap = new Map<string, ConfigEditorComponent>();\nconst editRuleValidatorsMap = new Map<string, EditRuleValidator>();\nconst optionsMap = new Map<string, CellRendererOptions>();\nconst rowClassGeneratorsMap = new Map<string, RowClassGenerator>();\n\nexport type EditRuleValidator = (\n editRule: EditValidationRule,\n value?: VuuRowDataItemType\n) => boolean | string;\n\nexport type ComponentType =\n | \"cell-renderer\"\n | \"cell-config-panel\"\n | \"column-header-content-renderer\"\n | \"column-header-label-renderer\"\n | \"data-edit-validator\"\n | \"row-class-generator\";\n\ntype CellRendererOptions = {\n // [key: string]: unknown;\n configEditor?: string;\n description?: string;\n label?: string;\n serverDataType?: VuuColumnDataType | VuuColumnDataType[] | \"json\" | \"private\";\n userCanAssign?: boolean;\n};\nexport interface CellRendererDescriptor extends CellRendererOptions {\n name: string;\n}\n\nconst isTypeCompatible = (\n rendererType:\n | VuuColumnDataType\n | (VuuColumnDataType | \"json\")[]\n | \"json\"\n | \"private\"\n | undefined,\n serverDataType: VuuColumnDataType | \"json\"\n) => {\n if (rendererType === undefined || rendererType === \"private\") {\n return true;\n } else if (Array.isArray(rendererType)) {\n return rendererType.includes(serverDataType);\n } else {\n return rendererType === serverDataType;\n }\n};\n\nconst isCellRenderer = (\n type: ComponentType,\n component: unknown\n): component is FC<TableCellRendererProps> =>\n component !== undefined && type === \"cell-renderer\";\n\nconst isColumnHeaderContentRenderer = (\n type: ComponentType,\n component: unknown\n): component is FC<HeaderCellProps> =>\n type === \"column-header-content-renderer\";\nconst isColumnHeaderLabelRenderer = (\n type: ComponentType,\n component: unknown\n): component is FC<HeaderCellProps> => type === \"column-header-label-renderer\";\n\nconst isCellConfigPanel = (\n type: ComponentType,\n component: unknown\n): component is FC<CellConfigPanelProps> => type === \"cell-config-panel\";\n\nconst isEditRuleValidator = (\n type: ComponentType,\n component: unknown\n): component is EditRuleValidator => type === \"data-edit-validator\";\n\nconst isRowClassGenerator = (\n type: ComponentType,\n component: unknown\n): component is RowClassGenerator => type === \"row-class-generator\";\n\nexport function registerComponent<\n T extends\n | CellConfigPanelProps\n | EditRuleValidator\n | HeaderCellProps\n | RowClassGenerator\n | TableCellRendererProps = TableCellRendererProps\n>(\n componentName: string,\n component: T extends EditRuleValidator | RowClassGenerator ? T : FC<T>,\n type: ComponentType = \"cell-renderer\",\n options: CellRendererOptions\n): void {\n if (isCellRenderer(type, component)) {\n cellRenderersMap.set(componentName, component);\n } else if (isColumnHeaderContentRenderer(type, component)) {\n columnHeaderRenderersMap.set(componentName, component);\n } else if (isColumnHeaderLabelRenderer(type, component)) {\n columnHeaderRenderersMap.set(componentName, component);\n } else if (isCellConfigPanel(type, component)) {\n cellConfigPanelsMap.set(componentName, component);\n } else if (isEditRuleValidator(type, component)) {\n editRuleValidatorsMap.set(componentName, component);\n } else if (isRowClassGenerator(type, component)) {\n console.log(`register ${componentName}`);\n rowClassGeneratorsMap.set(componentName, component);\n }\n if (options) {\n optionsMap.set(componentName, options);\n }\n}\n\nexport const registerConfigurationEditor = (\n componentName: string,\n configurationEditor: FC<ConfigurationEditorProps>\n) => {\n configEditorsMap.set(componentName, configurationEditor);\n};\n\n// This is invoked by settings panel to allow users to assign\n// non-default, cell renderers. Ignore renderers registered\n// with the attribute userCanAssign = false\nexport const getRegisteredCellRenderers = (\n serverDataType?: VuuColumnDataType | \"json\"\n): CellRendererDescriptor[] => {\n const rendererNames = Array.from(cellRenderersMap.keys());\n const allRenderers = rendererNames\n .map<CellRendererDescriptor>((name) => ({\n name,\n ...(optionsMap.get(name) as CellRendererOptions),\n }))\n .filter(({ userCanAssign }) => userCanAssign !== false);\n if (serverDataType) {\n return allRenderers.filter((renderer) =>\n isTypeCompatible(renderer.serverDataType, serverDataType)\n );\n } else {\n return allRenderers;\n }\n};\n\nexport const getCellRendererOptions = (renderName: string) =>\n optionsMap.get(renderName);\n\nexport function getCellRenderer(column: ColumnDescriptor) {\n return dataCellRenderer(column);\n}\nexport function getColumnHeaderContentRenderer(column: ColumnDescriptor) {\n if (column.colHeaderContentRenderer) {\n return columnHeaderRenderersMap.get(column.colHeaderContentRenderer);\n }\n}\nexport function getColumnHeaderLabelRenderer(column: ColumnDescriptor) {\n if (column.colHeaderLabelRenderer) {\n return columnHeaderRenderersMap.get(column.colHeaderLabelRenderer);\n }\n}\nexport const getRowClassNameGenerator = (generatorId: string) =>\n rowClassGeneratorsMap.get(generatorId);\n\nfunction dataCellRenderer(column: ColumnDescriptor) {\n if (isTypeDescriptor(column.type)) {\n const { renderer } = column.type;\n if (isColumnTypeRenderer(renderer)) {\n return cellRenderersMap.get(renderer.name);\n }\n } else if (column.serverDataType === \"boolean\") {\n return cellRenderersMap.get(\"checkbox-cell\");\n } else if (column.editable) {\n // we can only offer a text input edit as a generic editor.\n // If a more specialised editor is required, user must configure\n // it in column config.\n return cellRenderersMap.get(\"input-cell\");\n }\n}\n\nexport function getConfigurationEditor(configEditor = \"\") {\n return configEditorsMap.get(configEditor);\n}\n\nexport function getCellConfigPanelRenderer(name: string) {\n return cellConfigPanelsMap.get(name);\n}\n\nexport function getEditRuleValidator(name: string) {\n return editRuleValidatorsMap.get(name);\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component-registry.js","sources":["../src/component-registry.ts"],"sourcesContent":["import { DataSourceRow } from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuColumnDataType,\n VuuRowDataItemType,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n ColumnDescriptor,\n ColumnDescriptorCustomRenderer,\n ColumnTypeRendering,\n EditValidationRule,\n HeaderCellProps,\n TableCellRendererProps,\n} from \"@vuu-ui/vuu-table-types\";\nimport { FunctionComponent as FC, HTMLAttributes } from \"react\";\nimport {\n ColumnMap,\n isColumnTypeRenderer,\n isTypeDescriptor,\n} from \"./column-utils\";\n\nexport interface CellConfigPanelProps extends HTMLAttributes<HTMLDivElement> {\n onConfigChange: () => void;\n}\n\nexport type PropertyChangeHandler = (\n propertyName: string,\n propertyValue: string | number | boolean\n) => void;\n\nexport type ColumnRenderPropsChangeHandler = (\n renderProps: ColumnTypeRendering\n) => void;\n\nexport interface ConfigurationEditorProps {\n column: ColumnDescriptorCustomRenderer;\n onChangeRendering: ColumnRenderPropsChangeHandler;\n}\n\nexport type RowClassNameGenerator = (\n row: DataSourceRow,\n columnMap: ColumnMap\n) => string | undefined;\n\nexport type RowClassGenerator = {\n id: string;\n fn: RowClassNameGenerator;\n};\n\nexport type ConfigEditorComponent = FC<CellConfigPanelProps>;\n\nconst containersSet = new Set<string>();\nconst viewsSet = new Set<string>();\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst layoutComponentsMap = new Map<string, FC<any>>();\nconst cellRenderersMap = new Map<string, FC<TableCellRendererProps>>();\nconst columnHeaderRenderersMap = new Map<string, FC<HeaderCellProps>>();\nconst configEditorsMap = new Map<string, FC<ConfigurationEditorProps>>();\nconst cellConfigPanelsMap = new Map<string, ConfigEditorComponent>();\nconst editRuleValidatorsMap = new Map<string, EditRuleValidator>();\nconst optionsMap = new Map<string, CellRendererOptions>();\nconst rowClassGeneratorsMap = new Map<string, RowClassGenerator>();\n\nexport type EditRuleValidator = (\n editRule: EditValidationRule,\n value?: VuuRowDataItemType\n) => boolean | string;\n\nexport type layoutComponentType = \"container\" | \"view\";\n\nexport type ComponentType =\n | layoutComponentType\n | \"cell-renderer\"\n | \"cell-config-panel\"\n | \"column-header-content-renderer\"\n | \"column-header-label-renderer\"\n | \"component\"\n | \"data-edit-validator\"\n | \"row-class-generator\";\n\ntype CellRendererOptions = {\n configEditor?: string;\n description?: string;\n label?: string;\n serverDataType?: VuuColumnDataType | VuuColumnDataType[] | \"json\" | \"private\";\n userCanAssign?: boolean;\n};\nexport interface CellRendererDescriptor extends CellRendererOptions {\n name: string;\n}\n\nconst isTypeCompatible = (\n rendererType:\n | VuuColumnDataType\n | (VuuColumnDataType | \"json\")[]\n | \"json\"\n | \"private\"\n | undefined,\n serverDataType: VuuColumnDataType | \"json\"\n) => {\n if (rendererType === undefined || rendererType === \"private\") {\n return true;\n } else if (Array.isArray(rendererType)) {\n return rendererType.includes(serverDataType);\n } else {\n return rendererType === serverDataType;\n }\n};\n\nexport const isContainer = (componentType: string) =>\n containersSet.has(componentType);\nexport const isView = (componentType: string) => viewsSet.has(componentType);\nexport const isLayoutComponent = (\n componentType: string\n): componentType is layoutComponentType =>\n isContainer(componentType) || isView(componentType);\n\nconst isCellRenderer = (\n type: ComponentType,\n component: unknown\n): component is FC<TableCellRendererProps> =>\n component !== undefined && type === \"cell-renderer\";\n\nconst isColumnHeaderContentRenderer = (\n type: ComponentType,\n component: unknown\n): component is FC<HeaderCellProps> =>\n type === \"column-header-content-renderer\";\nconst isColumnHeaderLabelRenderer = (\n type: ComponentType,\n component: unknown\n): component is FC<HeaderCellProps> => type === \"column-header-label-renderer\";\n\nconst isCellConfigPanel = (\n type: ComponentType,\n component: unknown\n): component is FC<CellConfigPanelProps> => type === \"cell-config-panel\";\n\nconst isEditRuleValidator = (\n type: ComponentType,\n component: unknown\n): component is EditRuleValidator => type === \"data-edit-validator\";\n\nconst isRowClassGenerator = (\n type: ComponentType,\n component: unknown\n): component is RowClassGenerator => type === \"row-class-generator\";\n\nexport function registerComponent(\n componentName: string,\n component: RowClassGenerator,\n componentType: \"row-class-generator\",\n options?: CellRendererOptions\n): void;\nexport function registerComponent(\n componentName: string,\n component: EditRuleValidator,\n componentType: \"data-edit-validator\",\n options?: CellRendererOptions\n): void;\nexport function registerComponent(\n componentName: string,\n // unknown won't work for us here, we'll get the default children\n // definition for FC which conflicts with some components props.\n // VoidFunctionComponent doesn't help either\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: FC<any>,\n componentType: Omit<\n ComponentType,\n \"data-edit-validator\" | \"row-class-generator\"\n >,\n options?: CellRendererOptions\n): void;\nexport function registerComponent(\n componentName: string,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n componentType: any,\n options?: CellRendererOptions\n): void {\n if (\n componentType === \"container\" ||\n componentType === \"view\" ||\n componentType === \"component\"\n ) {\n layoutComponentsMap.set(componentName, component);\n if (componentType === \"container\") {\n containersSet.add(componentName);\n } else if (componentType === \"view\") {\n viewsSet.add(componentName);\n }\n } else if (isCellRenderer(componentType, component)) {\n cellRenderersMap.set(componentName, component);\n } else if (isColumnHeaderContentRenderer(componentType, component)) {\n columnHeaderRenderersMap.set(componentName, component);\n } else if (isColumnHeaderLabelRenderer(componentType, component)) {\n columnHeaderRenderersMap.set(componentName, component);\n } else if (isCellConfigPanel(componentType, component)) {\n cellConfigPanelsMap.set(componentName, component);\n } else if (isEditRuleValidator(componentType, component)) {\n editRuleValidatorsMap.set(componentName, component);\n } else if (isRowClassGenerator(componentType, component)) {\n rowClassGeneratorsMap.set(componentName, component);\n }\n if (options) {\n optionsMap.set(componentName, options);\n }\n}\n\nexport const registerConfigurationEditor = (\n componentName: string,\n configurationEditor: FC<ConfigurationEditorProps>\n) => {\n configEditorsMap.set(componentName, configurationEditor);\n};\n\n// This is invoked by settings panel to allow users to assign\n// non-default, cell renderers. Ignore renderers registered\n// with the attribute userCanAssign = false\nexport const getRegisteredCellRenderers = (\n serverDataType?: VuuColumnDataType | \"json\"\n): CellRendererDescriptor[] => {\n const rendererNames = Array.from(cellRenderersMap.keys());\n const allRenderers = rendererNames\n .map<CellRendererDescriptor>((name) => ({\n name,\n ...(optionsMap.get(name) as CellRendererOptions),\n }))\n .filter(({ userCanAssign }) => userCanAssign !== false);\n if (serverDataType) {\n return allRenderers.filter((renderer) =>\n isTypeCompatible(renderer.serverDataType, serverDataType)\n );\n } else {\n return allRenderers;\n }\n};\n\nexport const getLayoutComponent = (componentName: string) => {\n const layoutComponent = layoutComponentsMap.get(componentName);\n if (layoutComponent) {\n return layoutComponent;\n } else {\n throw Error(\n `layout component ${componentName} not found in ComponentRegistry`\n );\n }\n};\n\nexport const getCellRendererOptions = (renderName: string) =>\n optionsMap.get(renderName);\n\nexport function getCellRenderer(column: ColumnDescriptor) {\n return dataCellRenderer(column);\n}\nexport function getColumnHeaderContentRenderer(column: ColumnDescriptor) {\n if (column.colHeaderContentRenderer) {\n return columnHeaderRenderersMap.get(column.colHeaderContentRenderer);\n }\n}\nexport function getColumnHeaderLabelRenderer(column: ColumnDescriptor) {\n if (column.colHeaderLabelRenderer) {\n return columnHeaderRenderersMap.get(column.colHeaderLabelRenderer);\n }\n}\nexport const getRowClassNameGenerator = (generatorId: string) =>\n rowClassGeneratorsMap.get(generatorId);\n\nexport function getConfigurationEditor(configEditor = \"\") {\n return configEditorsMap.get(configEditor);\n}\n\nexport function getCellConfigPanelRenderer(name: string) {\n return cellConfigPanelsMap.get(name);\n}\n\nexport function getEditRuleValidator(name: string) {\n return editRuleValidatorsMap.get(name);\n}\n\nfunction dataCellRenderer(column: ColumnDescriptor) {\n if (isTypeDescriptor(column.type)) {\n const { renderer } = column.type;\n if (isColumnTypeRenderer(renderer)) {\n return cellRenderersMap.get(renderer.name);\n }\n } else if (column.serverDataType === \"boolean\") {\n return cellRenderersMap.get(\"checkbox-cell\");\n } else if (column.editable) {\n // we can only offer a text input edit as a generic editor.\n // If a more specialised editor is required, user must configure\n // it in column config.\n return cellRenderersMap.get(\"input-cell\");\n }\n}\n"],"names":[],"mappings":"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"}
|
package/esm/index.js
CHANGED
|
@@ -2,7 +2,7 @@ export { getAddedItems, getMissingItems, itemsChanged, itemsOrOrderChanged, move
|
|
|
2
2
|
export { boxContainsPoint } from './box-utils.js';
|
|
3
3
|
export { AggregationType, addColumnToSubscribedColumns, applyDefaultColumnConfig, applyGroupByToColumns, applySortToColumns, applyWidthToColumns, buildColumnMap, dataAndColumnUnchanged, dataColumnAndKeyUnchanged, existingSort, extractGroupColumn, findColumn, flattenColumnGroup, fromServerDataType, getCalculatedColumnDetails, getColumnByName, getColumnLabel, getColumnName, getColumnStyle, getColumnsInViewport, getDefaultAlignment, getDefaultColumnType, getGroupValueAndOffset, getRowRecord, getTableHeadings, getTypeFormattingFromColumn, hasHeadings, hasValidationRules, isCalculatedColumn, isColumnTypeRenderer, isDataLoading, isDateTimeColumn, isGroupColumn, isJsonAttribute, isJsonColumn, isJsonGroup, isLookupRenderer, isMappedValueTypeRenderer, isNotHidden, isNumericColumn, isPinned, isResizing, isTextColumn, isTypeDescriptor, isValidColumnAlignment, isValidPinLocation, isValueListRenderer, isVuuColumnDataType, mapSortCriteria, measurePinnedColumns, metadataKeys, moveColumnTo, projectUpdates, removeSort, replaceColumn, setAggregations, setCalculatedColumnExpression, setCalculatedColumnName, setCalculatedColumnType, sortPinnedColumns, subscribedOnly, toColumnDescriptor, toDataSourceColumns, updateColumn, updateColumnFormatting, updateColumnRenderProps, updateColumnType, visibleColumnAtIndex } from './column-utils.js';
|
|
4
4
|
export { getCookieValue } from './cookie-utils.js';
|
|
5
|
-
export { getCellConfigPanelRenderer, getCellRenderer, getCellRendererOptions, getColumnHeaderContentRenderer, getColumnHeaderLabelRenderer, getConfigurationEditor, getEditRuleValidator, getRegisteredCellRenderers, getRowClassNameGenerator, registerComponent, registerConfigurationEditor } from './component-registry.js';
|
|
5
|
+
export { getCellConfigPanelRenderer, getCellRenderer, getCellRendererOptions, getColumnHeaderContentRenderer, getColumnHeaderLabelRenderer, getConfigurationEditor, getEditRuleValidator, getLayoutComponent, getRegisteredCellRenderers, getRowClassNameGenerator, isContainer, isLayoutComponent, isView, registerComponent, registerConfigurationEditor } from './component-registry.js';
|
|
6
6
|
export { DataWindow } from './DataWindow.js';
|
|
7
7
|
export { MEASURES } from './common-types.js';
|
|
8
8
|
export { importCSS } from './css-utils.js';
|
package/package.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "0.8.
|
|
2
|
+
"version": "0.8.58",
|
|
3
3
|
"author": "heswell",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"types": "types/index.d.ts",
|
|
6
6
|
"devDependencies": {
|
|
7
|
-
"@vuu-ui/vuu-data-types": "0.8.
|
|
8
|
-
"@vuu-ui/vuu-table-types": "0.8.
|
|
9
|
-
"@vuu-ui/vuu-filter-types": "0.8.
|
|
10
|
-
"@vuu-ui/vuu-protocol-types": "0.8.
|
|
7
|
+
"@vuu-ui/vuu-data-types": "0.8.58",
|
|
8
|
+
"@vuu-ui/vuu-table-types": "0.8.58",
|
|
9
|
+
"@vuu-ui/vuu-filter-types": "0.8.58",
|
|
10
|
+
"@vuu-ui/vuu-protocol-types": "0.8.58"
|
|
11
11
|
},
|
|
12
12
|
"peerDependencies": {
|
|
13
13
|
"@internationalized/date": "^3.0.0",
|
|
14
|
-
"@vuu-ui/vuu-filter-parser": "0.8.
|
|
14
|
+
"@vuu-ui/vuu-filter-parser": "0.8.58",
|
|
15
15
|
"clsx": "^2.0.0",
|
|
16
16
|
"react": ">=17.0.2",
|
|
17
17
|
"react-dom": ">=17.0.2"
|
|
@@ -19,7 +19,8 @@ export type RowClassGenerator = {
|
|
|
19
19
|
};
|
|
20
20
|
export type ConfigEditorComponent = FC<CellConfigPanelProps>;
|
|
21
21
|
export type EditRuleValidator = (editRule: EditValidationRule, value?: VuuRowDataItemType) => boolean | string;
|
|
22
|
-
export type
|
|
22
|
+
export type layoutComponentType = "container" | "view";
|
|
23
|
+
export type ComponentType = layoutComponentType | "cell-renderer" | "cell-config-panel" | "column-header-content-renderer" | "column-header-label-renderer" | "component" | "data-edit-validator" | "row-class-generator";
|
|
23
24
|
type CellRendererOptions = {
|
|
24
25
|
configEditor?: string;
|
|
25
26
|
description?: string;
|
|
@@ -30,9 +31,15 @@ type CellRendererOptions = {
|
|
|
30
31
|
export interface CellRendererDescriptor extends CellRendererOptions {
|
|
31
32
|
name: string;
|
|
32
33
|
}
|
|
33
|
-
export declare
|
|
34
|
+
export declare const isContainer: (componentType: string) => boolean;
|
|
35
|
+
export declare const isView: (componentType: string) => boolean;
|
|
36
|
+
export declare const isLayoutComponent: (componentType: string) => componentType is layoutComponentType;
|
|
37
|
+
export declare function registerComponent(componentName: string, component: RowClassGenerator, componentType: "row-class-generator", options?: CellRendererOptions): void;
|
|
38
|
+
export declare function registerComponent(componentName: string, component: EditRuleValidator, componentType: "data-edit-validator", options?: CellRendererOptions): void;
|
|
39
|
+
export declare function registerComponent(componentName: string, component: FC<any>, componentType: Omit<ComponentType, "data-edit-validator" | "row-class-generator">, options?: CellRendererOptions): void;
|
|
34
40
|
export declare const registerConfigurationEditor: (componentName: string, configurationEditor: FC<ConfigurationEditorProps>) => void;
|
|
35
41
|
export declare const getRegisteredCellRenderers: (serverDataType?: VuuColumnDataType | "json") => CellRendererDescriptor[];
|
|
42
|
+
export declare const getLayoutComponent: (componentName: string) => FC<any>;
|
|
36
43
|
export declare const getCellRendererOptions: (renderName: string) => CellRendererOptions | undefined;
|
|
37
44
|
export declare function getCellRenderer(column: ColumnDescriptor): FC<TableCellRendererProps> | undefined;
|
|
38
45
|
export declare function getColumnHeaderContentRenderer(column: ColumnDescriptor): FC<HeaderCellProps> | undefined;
|