PromucFlow_constructor/app/client/src/entities/DataTree/dataTreeWidget.ts

147 lines
4.8 KiB
TypeScript
Raw Normal View History

import WidgetFactory from "utils/WidgetFactory";
import { getAllPathsFromPropertyConfig } from "entities/Widget/utils";
import { getEntityDynamicBindingPathList } from "utils/DynamicBindingUtils";
import _ from "lodash";
import { FlattenedWidgetProps } from "reducers/entityReducers/canvasWidgetsReducer";
import { setOverridingProperty } from "./utils";
import {
OverridingPropertyPaths,
PropertyOverrideDependency,
OverridingPropertyType,
DataTreeWidget,
ENTITY_TYPE,
} from "./dataTreeFactory";
export const generateDataTreeWidget = (
widget: FlattenedWidgetProps,
widgetMetaProps: Record<string, unknown> = {},
): DataTreeWidget => {
const derivedProps: any = {};
const blockedDerivedProps: Record<string, true> = {};
const unInitializedDefaultProps: Record<string, undefined> = {};
const propertyOverrideDependency: PropertyOverrideDependency = {};
const overridingPropertyPaths: OverridingPropertyPaths = {};
const defaultMetaProps = WidgetFactory.getWidgetMetaPropertiesMap(
widget.type,
);
List Widget Phase 2 (#4189) * update meta properties + default properties map * update widget registery * update get meta property * update metahoc + widgetfactory + data tree evaluator * try sending function as string to worker * revert data tree evaluator update * pass default props map from dataTreeWidget file * wip * save child meta properties * remove console.log * save meta and default map in list * update listwidget * remove console.log + unused variables * revert getMetaPropertiesMap function * fix data tree test * fix list widget test * fix entity definition test * fix overriting of item in updatedItems * remove todo comments * fix meta prop issue * revert making meta properties from undefiend to "" & fix filepicker bug * fix test case * change items to listData and updatedItems to items * remove console.log * fix test * extract derived properties to dervied.js * disabled top, left, right resize handler list widget container * add test for dervied js * add test for selectedItem * fix background color bug on hover * remove console.log * fix chart widget inside list widget * fix checkbox issue + points raised by yogesh * revert the createImmerReducer usage * fix parse derived properties * remove internal props object that fails the test * fix import typo * allow bottom resize handler * fix template height check * fix template height check * update template size check * fix the is visible invalid prop issue * fix migration of list widget phase 2 * fix migration * remove unused import * fix migration * fix migration * remove console.log * hide delete option for container in entity explorer * fix testcases * remove unused import * fix switch widget meta prop Co-authored-by: root <root@DESKTOP-9GENCK0.localdomain> Co-authored-by: Pawan Kumar <pawankumar@Pawans-MacBook-Pro.local>
2021-06-18 07:42:57 +00:00
const derivedPropertyMap = WidgetFactory.getWidgetDerivedPropertiesMap(
widget.type,
);
const defaultProps = WidgetFactory.getWidgetDefaultPropertiesMap(widget.type);
List Widget Phase 2 (#4189) * update meta properties + default properties map * update widget registery * update get meta property * update metahoc + widgetfactory + data tree evaluator * try sending function as string to worker * revert data tree evaluator update * pass default props map from dataTreeWidget file * wip * save child meta properties * remove console.log * save meta and default map in list * update listwidget * remove console.log + unused variables * revert getMetaPropertiesMap function * fix data tree test * fix list widget test * fix entity definition test * fix overriting of item in updatedItems * remove todo comments * fix meta prop issue * revert making meta properties from undefiend to "" & fix filepicker bug * fix test case * change items to listData and updatedItems to items * remove console.log * fix test * extract derived properties to dervied.js * disabled top, left, right resize handler list widget container * add test for dervied js * add test for selectedItem * fix background color bug on hover * remove console.log * fix chart widget inside list widget * fix checkbox issue + points raised by yogesh * revert the createImmerReducer usage * fix parse derived properties * remove internal props object that fails the test * fix import typo * allow bottom resize handler * fix template height check * fix template height check * update template size check * fix the is visible invalid prop issue * fix migration of list widget phase 2 * fix migration * remove unused import * fix migration * fix migration * remove console.log * hide delete option for container in entity explorer * fix testcases * remove unused import * fix switch widget meta prop Co-authored-by: root <root@DESKTOP-9GENCK0.localdomain> Co-authored-by: Pawan Kumar <pawankumar@Pawans-MacBook-Pro.local>
2021-06-18 07:42:57 +00:00
const propertyPaneConfigs = WidgetFactory.getWidgetPropertyPaneConfig(
widget.type,
);
const dynamicBindingPathList = getEntityDynamicBindingPathList(widget);
// Ensure all dynamic bindings are strings as they will be evaluated
dynamicBindingPathList.forEach((dynamicPath) => {
const propertyPath = dynamicPath.key;
const propertyValue = _.get(widget, propertyPath);
if (_.isObject(propertyValue)) {
// Stringify this because composite controls may have bindings in the sub controls
_.set(widget, propertyPath, JSON.stringify(propertyValue));
}
});
// Derived props are stored in different maps for further treatment
Object.keys(derivedPropertyMap).forEach((propertyName) => {
// TODO regex is too greedy
// Replace the references to `this` with the widget name reference
// in the derived property bindings
derivedProps[propertyName] = derivedPropertyMap[propertyName].replace(
/this./g,
`${widget.widgetName}.`,
);
// Add these to the dynamicBindingPathList as well
dynamicBindingPathList.push({
key: propertyName,
});
});
Object.keys(derivedProps).forEach((propertyName) => {
// Do not log errors for the derived property bindings
blockedDerivedProps[propertyName] = true;
});
const overridingMetaPropsMap: Record<string, boolean> = {};
Object.entries(defaultProps).forEach(
([propertyName, defaultPropertyName]) => {
// why default value is undefined ?
if (!(defaultPropertyName in widget)) {
unInitializedDefaultProps[defaultPropertyName] = undefined;
}
// defaultProperty on eval needs to override the widget's property eg: defaultText overrides text
setOverridingProperty({
propertyOverrideDependency,
overridingPropertyPaths,
value: defaultPropertyName,
key: propertyName,
type: OverridingPropertyType.DEFAULT,
});
if (propertyName in defaultMetaProps) {
// Overriding properties will override the values of a property when evaluated
setOverridingProperty({
propertyOverrideDependency,
overridingPropertyPaths,
value: `meta.${propertyName}`,
key: propertyName,
type: OverridingPropertyType.META,
});
overridingMetaPropsMap[propertyName] = true;
}
},
);
const overridingMetaProps: Record<string, unknown> = {};
// overridingMetaProps has all meta property value either from metaReducer or default set by widget whose dependent property also has default property.
Object.entries(defaultMetaProps).forEach(([key, value]) => {
if (overridingMetaPropsMap[key]) {
overridingMetaProps[key] =
key in widgetMetaProps ? widgetMetaProps[key] : value;
}
});
const {
bindingPaths,
triggerPaths,
validationPaths,
} = getAllPathsFromPropertyConfig(widget, propertyPaneConfigs, {
...derivedPropertyMap,
...defaultMetaProps,
...unInitializedDefaultProps,
..._.keyBy(dynamicBindingPathList, "key"),
...overridingPropertyPaths,
});
return {
...widget,
...unInitializedDefaultProps,
...defaultMetaProps,
...widgetMetaProps,
...derivedProps,
List Widget Phase 2 (#4189) * update meta properties + default properties map * update widget registery * update get meta property * update metahoc + widgetfactory + data tree evaluator * try sending function as string to worker * revert data tree evaluator update * pass default props map from dataTreeWidget file * wip * save child meta properties * remove console.log * save meta and default map in list * update listwidget * remove console.log + unused variables * revert getMetaPropertiesMap function * fix data tree test * fix list widget test * fix entity definition test * fix overriting of item in updatedItems * remove todo comments * fix meta prop issue * revert making meta properties from undefiend to "" & fix filepicker bug * fix test case * change items to listData and updatedItems to items * remove console.log * fix test * extract derived properties to dervied.js * disabled top, left, right resize handler list widget container * add test for dervied js * add test for selectedItem * fix background color bug on hover * remove console.log * fix chart widget inside list widget * fix checkbox issue + points raised by yogesh * revert the createImmerReducer usage * fix parse derived properties * remove internal props object that fails the test * fix import typo * allow bottom resize handler * fix template height check * fix template height check * update template size check * fix the is visible invalid prop issue * fix migration of list widget phase 2 * fix migration * remove unused import * fix migration * fix migration * remove console.log * hide delete option for container in entity explorer * fix testcases * remove unused import * fix switch widget meta prop Co-authored-by: root <root@DESKTOP-9GENCK0.localdomain> Co-authored-by: Pawan Kumar <pawankumar@Pawans-MacBook-Pro.local>
2021-06-18 07:42:57 +00:00
defaultProps,
defaultMetaProps: Object.keys(defaultMetaProps),
dynamicBindingPathList,
logBlackList: {
...widget.logBlackList,
...blockedDerivedProps,
},
meta: {
...overridingMetaProps,
},
propertyOverrideDependency,
overridingPropertyPaths,
bindingPaths,
triggerPaths,
validationPaths,
ENTITY_TYPE: ENTITY_TYPE.WIDGET,
privateWidgets: {
...widget.privateWidgets,
},
};
};