feat: Add Jest Test for propertyPaneConfiguration validation (#8773)

This commit is contained in:
Aswath K 2022-01-13 10:54:12 +05:30 committed by GitHub
parent cc426f1455
commit ef9c8e0aa3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 582 additions and 69 deletions

View File

@ -107,7 +107,7 @@
"momentDate": "{{moment()}}",
"defaultRowIndexBinding": "{{Table1.selectedRowIndex",
"bindingAlign": "{{currentRow.userName.indexOf('Michael') > -1 ? 'LEFT' : 'RIGHT'}}",
"bindingSize": "{{currentRow.userName.indexOf('Michael') > -1 ? 'PARAGRAGH' : 'HEADING1'}}",
"bindingSize": "{{currentRow.userName.indexOf('Michael') > -1 ? 'PARAGRAPH' : 'HEADING1'}}",
"bindingVerticalAlig": "{{currentRow.userName.indexOf('Michael') > -1 ? 'TOP' : 'BOTTOM'}}",
"bindingTextColor": "{{currentRow.userName.indexOf('Michael') > -1 ? 'GREEN' : 'RED'}}",
"bindingButton": "{{currentRow.userName.indexOf('Michael') > -1 ? 'Discount' : 'NoDiscount'}}",

View File

@ -4,6 +4,7 @@ import tablePropertyPaneConfig from "widgets/TableWidget/widget/propertyConfig";
import chartPorpertyConfig from "widgets/ChartWidget/widget/propertyConfig";
import { EvaluationSubstitutionType } from "entities/DataTree/dataTreeFactory";
import { AutocompleteDataType } from "utils/autocomplete/TernServer";
import { ValidationTypes } from "constants/WidgetValidation";
describe("getAllPathsFromPropertyConfig", () => {
it("works as expected for table widget", () => {
@ -219,6 +220,222 @@ describe("getAllPathsFromPropertyConfig", () => {
default: [],
},
},
"primaryColumns.createdAt.isCellVisible": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.BOOLEAN,
},
},
"primaryColumns.name.isCellVisible": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.BOOLEAN,
},
},
"primaryColumns.status.isCellVisible": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.BOOLEAN,
},
},
"primaryColumns.status.isDisabled": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.BOOLEAN,
},
},
"primaryColumns.createdAt.inputFormat": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
allowedValues: [
"Epoch",
"Milliseconds",
"YYYY-MM-DD",
"YYYY-MM-DD HH:mm",
"YYYY-MM-DDTHH:mm:ss.sssZ",
"YYYY-MM-DDTHH:mm:ss",
"YYYY-MM-DD hh:mm:ss",
"Do MMM YYYY",
"DD/MM/YYYY",
"DD/MM/YYYY HH:mm",
"LLL",
"LL",
"D MMMM, YYYY",
"H:mm A D MMMM, YYYY",
"MM-DD-YYYY",
"DD-MM-YYYY",
"MM/DD/YYYY",
"DD/MM/YYYY",
"DD/MM/YY",
"MM/DD/YY",
],
},
},
},
"primaryColumns.createdAt.outputFormat": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
allowedValues: [
"Epoch",
"Milliseconds",
"YYYY-MM-DD",
"YYYY-MM-DD HH:mm",
"YYYY-MM-DDTHH:mm:ss.sssZ",
"YYYY-MM-DDTHH:mm:ss",
"YYYY-MM-DD hh:mm:ss",
"Do MMM YYYY",
"DD/MM/YYYY",
"DD/MM/YYYY HH:mm",
"LLL",
"LL",
"D MMMM, YYYY",
"H:mm A D MMMM, YYYY",
"MM-DD-YYYY",
"DD-MM-YYYY",
"MM/DD/YYYY",
"DD/MM/YYYY",
"DD/MM/YY",
"MM/DD/YY",
],
},
},
},
"primaryColumns.name.horizontalAlignment": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
allowedValues: ["LEFT", "CENTER", "RIGHT"],
},
},
},
"primaryColumns.createdAt.horizontalAlignment": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
allowedValues: ["LEFT", "CENTER", "RIGHT"],
},
},
},
"primaryColumns.name.textSize": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
allowedValues: [
"HEADING1",
"HEADING2",
"HEADING3",
"PARAGRAPH",
"PARAGRAPH2",
],
},
},
},
"primaryColumns.createdAt.textSize": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
allowedValues: [
"HEADING1",
"HEADING2",
"HEADING3",
"PARAGRAPH",
"PARAGRAPH2",
],
},
},
},
"primaryColumns.createdAt.fontStyle": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
},
},
"primaryColumns.name.fontStyle": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
},
},
"primaryColumns.createdAt.verticalAlignment": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
allowedValues: ["TOP", "CENTER", "BOTTOM"],
},
},
},
"primaryColumns.name.verticalAlignment": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
allowedValues: ["TOP", "CENTER", "BOTTOM"],
},
},
},
"primaryColumns.createdAt.textColor": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
regex: /^(?![<|{{]).+/,
},
},
},
"primaryColumns.name.textColor": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
regex: /^(?![<|{{]).+/,
},
},
},
"primaryColumns.createdAt.cellBackground": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
regex: /^(?![<|{{]).+/,
},
},
},
"primaryColumns.name.cellBackground": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
regex: /^(?![<|{{]).+/,
},
},
},
"primaryColumns.status.buttonColor": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
regex: /^(?![<|{{]).+/,
},
},
},
"primaryColumns.status.buttonLabelColor": {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
regex: /^(?![<|{{]).+/,
},
},
},
},
};

View File

@ -1,4 +1,4 @@
import { registerWidget } from "./WidgetRegisterHelpers";
import { registerWidget, WidgetConfiguration } from "./WidgetRegisterHelpers";
import CanvasWidget, {
CONFIG as CANVAS_WIDGET_CONFIG,
} from "widgets/CanvasWidget";
@ -123,53 +123,59 @@ import MapChartWidget, {
import log from "loglevel";
export const ALL_WDIGETS_AND_CONFIG = [
[CanvasWidget, CANVAS_WIDGET_CONFIG],
[SkeletonWidget, SKELETON_WIDGET_CONFIG],
[ContainerWidget, CONTAINER_WIDGET_CONFIG],
[TextWidget, TEXT_WIDGET_CONFIG],
[TableWidget, TABLE_WIDGET_CONFIG],
[CheckboxWidget, CHECKBOX_WIDGET_CONFIG],
[RadioGroupWidget, RADIO_GROUP_WIDGET_CONFIG],
[ButtonWidget, BUTTON_WIDGET_CONFIG],
[DropdownWidget, DROPDOWN_WIDGET_CONFIG],
[ImageWidget, IMAGE_WIDGET_CONFIG],
[VideoWidget, VIDEO_WIDGET_CONFIG],
[TabsWidget, TABS_WIDGET_CONFIG],
[InputWidget, INPUT_WIDGET_CONFIG],
[ModalWidget, MODAL_WIDGET_CONFIG],
[ChartWidget, CHART_WIDGET_CONFIG],
[MapWidget, MAP_WIDGET_CONFIG],
[FilePickerWidget, FILEPICKER_WIDGET_CONFIG],
[RichTextEditorWidget, RICH_TEXT_EDITOR_WIDGET_CONFIG],
[DatePickerWidget, DATE_PICKER_WIDGET_CONFIG],
[DatePickerWidget2, DATE_PICKER_WIDGET_2_CONFIG],
[SwitchWidget, SWITCH_WIDGET_CONFIG],
[FormWidget, FORM_WIDGET_CONFIG],
[FormButtonWidget, FORM_BUTTON_WIDGET_CONFIG],
[IconWidget, ICON_WIDGET_CONFIG],
[ListWidget, LIST_WIDGET_CONFIG],
[RateWidget, RATE_WIDGET_CONFIG],
[IframeWidget, IFRAME_WIDGET_CONFIG],
[TabsMigratorWidget, TABS_MIGRATOR_WIDGET_CONFIG],
[DividerWidget, DIVIDER_WIDGET_CONFIG],
[MenuButtonWidget, MENU_BUTTON_WIDGET_CONFIG],
[MultiSelectWidget, MULTI_SELECT_WIDGET_CONFIG],
[IconButtonWidget, ICON_BUTTON_WIDGET_CONFIG],
[CheckboxGroupWidget, CHECKBOX_GROUP_WIDGET_CONFIG],
[FilePickerWidgetV2, FILEPICKER_WIDGET_V2_CONFIG],
[StatboxWidget, STATBOX_WIDGET_CONFIG],
[AudioRecorderWidget, AUDIO_RECORDER_WIDGET_CONFIG],
[DocumentViewerWidget, DOCUMENT_VIEWER_WIDGET_CONFIG],
[ButtonGroupWidget, BUTTON_GROUP_CONFIG],
[MultiSelectTreeWidget, MULTI_SELECT_TREE_WIDGET_CONFIG],
[SingleSelectTreeWidget, SINGLE_SELECT_TREE_WIDGET_CONFIG],
[SwitchGroupWidget, SWITCH_GROUP_WIDGET_CONFIG],
[AudioWidget, AUDIO_WIDGET_CONFIG],
[ProgressBarWidget, PROGRESSBAR_WIDGET_CONFIG],
[CameraWidget, CAMERA_WIDGET_CONFIG],
[MapChartWidget, MAP_CHART_WIDGET_CONFIG],
];
export const registerWidgets = () => {
const start = performance.now();
registerWidget(CanvasWidget, CANVAS_WIDGET_CONFIG);
registerWidget(SkeletonWidget, SKELETON_WIDGET_CONFIG);
registerWidget(ContainerWidget, CONTAINER_WIDGET_CONFIG);
registerWidget(TextWidget, TEXT_WIDGET_CONFIG);
registerWidget(TableWidget, TABLE_WIDGET_CONFIG);
registerWidget(CheckboxWidget, CHECKBOX_WIDGET_CONFIG);
registerWidget(RadioGroupWidget, RADIO_GROUP_WIDGET_CONFIG);
registerWidget(ButtonWidget, BUTTON_WIDGET_CONFIG);
registerWidget(DropdownWidget, DROPDOWN_WIDGET_CONFIG);
registerWidget(ImageWidget, IMAGE_WIDGET_CONFIG);
registerWidget(VideoWidget, VIDEO_WIDGET_CONFIG);
registerWidget(TabsWidget, TABS_WIDGET_CONFIG);
registerWidget(InputWidget, INPUT_WIDGET_CONFIG);
registerWidget(ModalWidget, MODAL_WIDGET_CONFIG);
registerWidget(ChartWidget, CHART_WIDGET_CONFIG);
registerWidget(MapWidget, MAP_WIDGET_CONFIG);
registerWidget(FilePickerWidget, FILEPICKER_WIDGET_CONFIG);
registerWidget(RichTextEditorWidget, RICH_TEXT_EDITOR_WIDGET_CONFIG);
registerWidget(DatePickerWidget, DATE_PICKER_WIDGET_CONFIG);
registerWidget(DatePickerWidget2, DATE_PICKER_WIDGET_2_CONFIG);
registerWidget(SwitchWidget, SWITCH_WIDGET_CONFIG);
registerWidget(FormWidget, FORM_WIDGET_CONFIG);
registerWidget(FormButtonWidget, FORM_BUTTON_WIDGET_CONFIG);
registerWidget(IconWidget, ICON_WIDGET_CONFIG);
registerWidget(ListWidget, LIST_WIDGET_CONFIG);
registerWidget(RateWidget, RATE_WIDGET_CONFIG);
registerWidget(IframeWidget, IFRAME_WIDGET_CONFIG);
registerWidget(TabsMigratorWidget, TABS_MIGRATOR_WIDGET_CONFIG);
registerWidget(DividerWidget, DIVIDER_WIDGET_CONFIG);
registerWidget(MenuButtonWidget, MENU_BUTTON_WIDGET_CONFIG);
registerWidget(MultiSelectWidget, MULTI_SELECT_WIDGET_CONFIG);
registerWidget(IconButtonWidget, ICON_BUTTON_WIDGET_CONFIG);
registerWidget(CheckboxGroupWidget, CHECKBOX_GROUP_WIDGET_CONFIG);
registerWidget(FilePickerWidgetV2, FILEPICKER_WIDGET_V2_CONFIG);
registerWidget(StatboxWidget, STATBOX_WIDGET_CONFIG);
registerWidget(AudioRecorderWidget, AUDIO_RECORDER_WIDGET_CONFIG);
registerWidget(DocumentViewerWidget, DOCUMENT_VIEWER_WIDGET_CONFIG);
registerWidget(ButtonGroupWidget, BUTTON_GROUP_CONFIG);
registerWidget(MultiSelectTreeWidget, MULTI_SELECT_TREE_WIDGET_CONFIG);
registerWidget(SingleSelectTreeWidget, SINGLE_SELECT_TREE_WIDGET_CONFIG);
registerWidget(SwitchGroupWidget, SWITCH_GROUP_WIDGET_CONFIG);
registerWidget(AudioWidget, AUDIO_WIDGET_CONFIG);
registerWidget(ProgressBarWidget, PROGRESSBAR_WIDGET_CONFIG);
registerWidget(CameraWidget, CAMERA_WIDGET_CONFIG);
registerWidget(MapChartWidget, MAP_CHART_WIDGET_CONFIG);
for (const widget of ALL_WDIGETS_AND_CONFIG) {
registerWidget(widget[0], widget[1] as WidgetConfiguration);
}
log.debug("Widget registration took: ", performance.now() - start, "ms");
};

View File

@ -0,0 +1,89 @@
import {
PropertyPaneConfig,
PropertyPaneControlConfig,
ValidationConfig,
} from "constants/PropertyControlConstants";
import { ValidationTypes } from "constants/WidgetValidation";
import { ALL_WDIGETS_AND_CONFIG } from "./WidgetRegistry";
function validatePropertyPaneConfig(config: PropertyPaneConfig[]) {
for (const sectionOrControlConfig of config) {
if (sectionOrControlConfig.children) {
for (const propertyControlConfig of sectionOrControlConfig.children) {
const propertyControlValidation = validatePropertyControl(
propertyControlConfig,
);
if (propertyControlValidation !== true)
return propertyControlValidation;
}
}
}
return true;
}
function validatePropertyControl(config: PropertyPaneConfig): boolean | string {
const _config = config as PropertyPaneControlConfig;
const controls = ["INPUT_TEXT"];
if (
(_config.isJSConvertible || controls.includes(_config.controlType)) &&
!_config.isTriggerProperty
) {
if (!_config.isBindProperty)
return `${
_config.propertyName
}: isBindProperty should be true if isJSConvertible is true or when control type is [${controls.join(
" | ",
)}]`;
if (!_config.validation)
return `${
_config.propertyName
}: validation should be defined if isJSConvertible is true or when control type is [${controls.join(
" | ",
)}]`;
}
if (_config.validation !== undefined) {
const res = validateValidationStructure(_config.validation);
if (res !== true) return `${_config.propertyName}: ${res}`;
}
if (_config.children) {
for (const child of _config.children) {
const res = validatePropertyControl(child);
if (res !== true) return `${_config.propertyName}.${res}`;
}
}
if (_config.panelConfig) {
const res = validatePropertyPaneConfig(_config.panelConfig.children);
if (res !== true) return `${_config.propertyName}.${res}`;
}
return true;
}
function validateValidationStructure(
config: ValidationConfig,
): boolean | string {
if (
config.type === ValidationTypes.FUNCTION &&
config.params &&
config.params.fn
) {
if (!config.params.expected)
return `For a ${ValidationTypes.FUNCTION} type validation, expected type and example are mandatory`;
}
return true;
}
describe("Tests all widget's propertyPane config", () => {
ALL_WDIGETS_AND_CONFIG.forEach((widgetAndConfig) => {
const widget: any = widgetAndConfig[0];
it(`Checks ${widget.getWidgetType()}'s propertyPaneConfig`, () => {
const propertyPaneConfig = widget.getPropertyPaneConfig();
const validatedPropertyPaneConfig = validatePropertyPaneConfig(
propertyPaneConfig,
);
expect(validatedPropertyPaneConfig).toStrictEqual(true);
});
});
});

View File

@ -132,9 +132,14 @@ class ButtonGroupWidget extends BaseWidget<
},
],
isJSConvertible: true,
isBindProperty: false,
isBindProperty: true,
isTriggerProperty: false,
validation: { type: ValidationTypes.TEXT },
validation: {
type: ValidationTypes.TEXT,
params: {
allowedValues: ["SIMPLE", "MENU"],
},
},
},
{
propertyName: "buttonColor",

View File

@ -207,7 +207,7 @@ class DatePickerWidget extends BaseWidget<DatePickerWidgetProps, WidgetState> {
],
isBindProperty: true,
isTriggerProperty: false,
dateFormat: { type: ValidationTypes.TEXT },
validation: { type: ValidationTypes.TEXT },
},
{
propertyName: "isRequired",

View File

@ -106,9 +106,15 @@ class DividerWidget extends BaseWidget<DividerWidgetProps, WidgetState> {
propertyName: "dividerColor",
label: "Divider Color",
controlType: "COLOR_PICKER",
isBindProperty: false,
isBindProperty: true,
isJSConvertible: true,
isTriggerProperty: false,
validation: {
type: ValidationTypes.TEXT,
params: {
regex: /^(?![<|{{]).+/,
},
},
},
{
helpText: "Controls the type of divider cap",
@ -136,8 +142,16 @@ class DividerWidget extends BaseWidget<DividerWidgetProps, WidgetState> {
iconSize: "large",
},
],
isBindProperty: false,
isBindProperty: true,
isTriggerProperty: false,
validation: {
type: ValidationTypes.TEXT,
params: {
allowedValues: ["nc", "arrow", "dot"],
required: true,
default: "arrow",
},
},
},
{
helpText:

View File

@ -55,7 +55,7 @@ class FormButtonWidget extends ButtonWidget {
label: "Disabled Invalid Forms",
controlType: "SWITCH",
isJSConvertible: true,
isBindProperty: false,
isBindProperty: true,
isTriggerProperty: false,
validation: { type: ValidationTypes.BOOLEAN },
},

View File

@ -104,6 +104,12 @@ class ProgressBarWidget extends BaseWidget<
isBindProperty: true,
isJSConvertible: true,
isTriggerProperty: false,
validation: {
type: ValidationTypes.TEXT,
params: {
regex: /^(?![<|{{]).+/,
},
},
},
],
},

View File

@ -197,6 +197,12 @@ export default [
isJSConvertible: true,
isBindProperty: true,
isTriggerProperty: false,
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.BOOLEAN,
},
},
},
{
propertyName: "isDisabled",
@ -208,6 +214,12 @@ export default [
isJSConvertible: true,
isBindProperty: true,
isTriggerProperty: false,
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.BOOLEAN,
},
},
dependencies: [
"primaryColumns",
"derivedColumns",
@ -230,6 +242,12 @@ export default [
customJSControl: "COMPUTE_VALUE",
isJSConvertible: true,
isBindProperty: true,
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.BOOLEAN,
},
},
isTriggerProperty: false,
dependencies: [
"primaryColumns",
@ -347,6 +365,36 @@ export default [
"columnOrder",
],
isBindProperty: true,
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
allowedValues: [
"Epoch",
"Milliseconds",
"YYYY-MM-DD",
"YYYY-MM-DD HH:mm",
"YYYY-MM-DDTHH:mm:ss.sssZ",
"YYYY-MM-DDTHH:mm:ss",
"YYYY-MM-DD hh:mm:ss",
"Do MMM YYYY",
"DD/MM/YYYY",
"DD/MM/YYYY HH:mm",
"LLL",
"LL",
"D MMMM, YYYY",
"H:mm A D MMMM, YYYY",
"MM-DD-YYYY",
"DD-MM-YYYY",
"MM/DD/YYYY",
"DD/MM/YYYY",
"DD/MM/YY",
"MM/DD/YY",
],
},
},
},
isTriggerProperty: false,
},
{
@ -454,6 +502,36 @@ export default [
"columnType",
],
isBindProperty: true,
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
allowedValues: [
"Epoch",
"Milliseconds",
"YYYY-MM-DD",
"YYYY-MM-DD HH:mm",
"YYYY-MM-DDTHH:mm:ss.sssZ",
"YYYY-MM-DDTHH:mm:ss",
"YYYY-MM-DD hh:mm:ss",
"Do MMM YYYY",
"DD/MM/YYYY",
"DD/MM/YYYY HH:mm",
"LLL",
"LL",
"D MMMM, YYYY",
"H:mm A D MMMM, YYYY",
"MM-DD-YYYY",
"DD-MM-YYYY",
"MM/DD/YYYY",
"DD/MM/YYYY",
"DD/MM/YY",
"MM/DD/YY",
],
},
},
},
isTriggerProperty: false,
},
{
@ -526,6 +604,15 @@ export default [
"columnOrder",
],
isBindProperty: true,
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
allowedValues: ["LEFT", "CENTER", "RIGHT"],
},
},
},
isTriggerProperty: false,
},
{
@ -574,6 +661,21 @@ export default [
],
isBindProperty: true,
isTriggerProperty: false,
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
allowedValues: [
"HEADING1",
"HEADING2",
"HEADING3",
"PARAGRAPH",
"PARAGRAPH2",
],
},
},
},
},
{
propertyName: "fontStyle",
@ -603,6 +705,12 @@ export default [
],
isBindProperty: true,
isTriggerProperty: false,
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
},
},
},
{
propertyName: "verticalAlignment",
@ -632,6 +740,15 @@ export default [
"columnOrder",
],
isBindProperty: true,
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
allowedValues: ["TOP", "CENTER", "BOTTOM"],
},
},
},
isTriggerProperty: false,
},
{
@ -647,6 +764,15 @@ export default [
"columnOrder",
],
isBindProperty: true,
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
regex: /^(?![<|{{]).+/,
},
},
},
isTriggerProperty: false,
},
{
@ -662,6 +788,15 @@ export default [
"columnOrder",
],
isBindProperty: true,
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
regex: /^(?![<|{{]).+/,
},
},
},
isTriggerProperty: false,
},
],
@ -797,6 +932,15 @@ export default [
"columnOrder",
],
isBindProperty: true,
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
regex: /^(?![<|{{]).+/,
},
},
},
isTriggerProperty: false,
},
{
@ -872,12 +1016,15 @@ export default [
"derivedColumns",
"columnOrder",
],
isBindProperty: false,
isBindProperty: true,
isTriggerProperty: false,
validation: {
type: ValidationTypes.TEXT,
type: ValidationTypes.TABLE_PROPERTY,
params: {
allowedValues: ["CIRCLE", "SHARP", "ROUNDED"],
type: ValidationTypes.TEXT,
params: {
allowedValues: ["CIRCLE", "SHARP", "ROUNDED"],
},
},
},
},
@ -899,19 +1046,22 @@ export default [
"derivedColumns",
"columnOrder",
],
isBindProperty: false,
isBindProperty: true,
isTriggerProperty: false,
validation: {
type: ValidationTypes.TEXT,
type: ValidationTypes.TABLE_PROPERTY,
params: {
allowedValues: [
"NONE",
"VARIANT1",
"VARIANT2",
"VARIANT3",
"VARIANT4",
"VARIANT5",
],
type: ValidationTypes.TEXT,
params: {
allowedValues: [
"NONE",
"VARIANT1",
"VARIANT2",
"VARIANT3",
"VARIANT4",
"VARIANT5",
],
},
},
},
},
@ -932,7 +1082,16 @@ export default [
"derivedColumns",
"columnOrder",
],
isBindProperty: false,
isBindProperty: true,
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
regex: /^(?![<|{{]).+/,
},
},
},
isTriggerProperty: false,
},
{
@ -954,6 +1113,15 @@ export default [
updateHook: updateDerivedColumnsHook,
isBindProperty: true,
isTriggerProperty: false,
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
regex: /^(?![<|{{]).+/,
},
},
},
},
{
@ -962,11 +1130,19 @@ export default [
"Sets the custom color preset based on the menu button variant",
label: "Menu Color",
controlType: "COLOR_PICKER",
isBindProperty: false,
isBindProperty: true,
isTriggerProperty: false,
isJSConvertible: true,
placeholderText: "#FFFFFF / Gray / rgb(255, 99, 71)",
validation: { type: ValidationTypes.TEXT },
validation: {
type: ValidationTypes.TABLE_PROPERTY,
params: {
type: ValidationTypes.TEXT,
params: {
regex: /^(?![<|{{]).+/,
},
},
},
hidden: (props: TableWidgetProps, propertyPath: string) => {
return hideByColumnType(props, propertyPath, [
ColumnTypes.MENU_BUTTON,