diff --git a/app/client/cypress/integration/CommonWidgets/Container_spec.js b/app/client/cypress/integration/CommonWidgets/Container_spec.js index a98657cc85..4cc35ed248 100644 --- a/app/client/cypress/integration/CommonWidgets/Container_spec.js +++ b/app/client/cypress/integration/CommonWidgets/Container_spec.js @@ -1,7 +1,7 @@ -var widgetsPage = require("../../locators/Widgets.json"); -var loginPage = require("../../locators/LoginPage.json"); +const widgetsPage = require("../../locators/Widgets.json"); +const loginPage = require("../../locators/LoginPage.json"); const loginData = require("../../fixtures/user.json"); -var commonlocators = require("../../locators/commonlocators.json"); +const commonlocators = require("../../locators/commonlocators.json"); context("Cypress test", function() { it("Container Widget Functionality", function() { diff --git a/app/client/cypress/integration/CommonWidgets/Text_spec.js b/app/client/cypress/integration/CommonWidgets/Text_spec.js index 6f935f9419..d795f45953 100644 --- a/app/client/cypress/integration/CommonWidgets/Text_spec.js +++ b/app/client/cypress/integration/CommonWidgets/Text_spec.js @@ -1,7 +1,7 @@ -var widgetsPage = require("../../locators/Widgets.json"); -var loginPage = require("../../locators/LoginPage.json"); +const widgetsPage = require("../../locators/Widgets.json"); +const loginPage = require("../../locators/LoginPage.json"); const loginData = require("../../fixtures/user.json"); -var commonlocators = require("../../locators/commonlocators.json"); +const commonlocators = require("../../locators/commonlocators.json"); context("Cypress test", function() { it("Text Widget Functionality", function() { diff --git a/app/client/src/components/editorComponents/DynamicActionCreator.tsx b/app/client/src/components/editorComponents/DynamicActionCreator.tsx index b0ae0a0ab9..5979354991 100644 --- a/app/client/src/components/editorComponents/DynamicActionCreator.tsx +++ b/app/client/src/components/editorComponents/DynamicActionCreator.tsx @@ -134,7 +134,7 @@ const getPageNameSelectedValue = (value: string) => { return matches.length ? matches[0][2] : "none"; }; -const getTextArgValue = (value: string) => { +export const getTextArgValue = (value: string) => { const matches = [...value.matchAll(ACTION_TRIGGER_REGEX)]; if (matches.length) { const stringValue = matches[0][2]; @@ -279,6 +279,8 @@ type ReduxStateProps = { interface Props { value: string; + isValid: boolean; + validationMessage?: string; onValueChange: (newValue: string) => void; } @@ -426,7 +428,8 @@ class DynamicActionCreator extends React.Component { label={arg.label} value={arg.getSelectedValue(value, false)} onChange={e => handleUpdate(e, arg.valueChangeHandler)} - isValid={true} + isValid={this.props.isValid} + validationMessage={this.props.validationMessage} /> ); diff --git a/app/client/src/components/propertyControls/ActionSelectorControl.tsx b/app/client/src/components/propertyControls/ActionSelectorControl.tsx index f2b858857b..4bd3a2813b 100644 --- a/app/client/src/components/propertyControls/ActionSelectorControl.tsx +++ b/app/client/src/components/propertyControls/ActionSelectorControl.tsx @@ -14,6 +14,8 @@ class ActionSelectorControl extends BaseControl { return ( ); diff --git a/app/client/src/components/propertyControls/ColumnActionSelectorControl.tsx b/app/client/src/components/propertyControls/ColumnActionSelectorControl.tsx index f6ce0ad607..42c01daab6 100644 --- a/app/client/src/components/propertyControls/ColumnActionSelectorControl.tsx +++ b/app/client/src/components/propertyControls/ColumnActionSelectorControl.tsx @@ -55,6 +55,8 @@ class ColumnActionSelectorControl extends BaseControl< /> = { [VALIDATION_TYPES.TEXT]: (value: any): ValidationResponse => { @@ -230,4 +235,54 @@ export const VALIDATORS: Record = { message: isValid ? "" : `${WIDGET_TYPE_VALIDATION_ERROR}: Date`, }; }, + [VALIDATION_TYPES.ACTION_SELECTOR]: (value: any): ValidationResponse => { + if (_.isString(value)) { + if (value.indexOf("navigateToUrl") !== -1) { + const url = getTextArgValue(value); + const isValidUrl = URL_REGEX.test(url); + console.log(url, isValidUrl); + debugger; + if (!isValidUrl) { + return { + isValid: false, + parsed: value, + message: `${URL_HTTP_VALIDATION_ERROR}`, + }; + } + } + } + return { + isValid: true, + parsed: value, + }; + }, + [VALIDATION_TYPES.ARRAY_ACTION_SELECTOR]: ( + value: any, + ): ValidationResponse => { + const { isValid, parsed, message } = VALIDATORS[VALIDATION_TYPES.ARRAY]( + value, + ); + let isValidFinal = isValid; + let finalParsed = parsed.slice(); + if (isValid) { + finalParsed = parsed.map((value: any) => { + const { isValid, message } = VALIDATORS[ + VALIDATION_TYPES.ACTION_SELECTOR + ](value.dynamicTrigger); + + isValidFinal = isValidFinal && isValid; + return { + ...value, + message: message, + isValid: isValid, + }; + }); + } + + return { + isValid: isValidFinal, + parsed: finalParsed, + message: message, + }; + }, }; diff --git a/app/client/src/widgets/CheckboxWidget.tsx b/app/client/src/widgets/CheckboxWidget.tsx index 7de2b1b50a..7845f2745c 100644 --- a/app/client/src/widgets/CheckboxWidget.tsx +++ b/app/client/src/widgets/CheckboxWidget.tsx @@ -16,6 +16,7 @@ class CheckboxWidget extends BaseWidget { ...BASE_WIDGET_VALIDATION, label: VALIDATION_TYPES.TEXT, defaultCheckedState: VALIDATION_TYPES.BOOLEAN, + onCheckChange: VALIDATION_TYPES.ACTION_SELECTOR, }; } diff --git a/app/client/src/widgets/DatePickerWidget.tsx b/app/client/src/widgets/DatePickerWidget.tsx index 7b7b3529bb..c1b2d105b6 100644 --- a/app/client/src/widgets/DatePickerWidget.tsx +++ b/app/client/src/widgets/DatePickerWidget.tsx @@ -26,6 +26,7 @@ class DatePickerWidget extends BaseWidget { maxDate: VALIDATION_TYPES.DATE, minDate: VALIDATION_TYPES.DATE, isRequired: VALIDATION_TYPES.BOOLEAN, + onDateSelected: VALIDATION_TYPES.ACTION_SELECTOR, }; } diff --git a/app/client/src/widgets/DropdownWidget.tsx b/app/client/src/widgets/DropdownWidget.tsx index c6dbfba739..a6170ea814 100644 --- a/app/client/src/widgets/DropdownWidget.tsx +++ b/app/client/src/widgets/DropdownWidget.tsx @@ -23,6 +23,7 @@ class DropdownWidget extends BaseWidget { selectionType: VALIDATION_TYPES.TEXT, selectedIndexArr: VALIDATION_TYPES.ARRAY, isRequired: VALIDATION_TYPES.BOOLEAN, + onOptionChange: VALIDATION_TYPES.ACTION_SELECTOR, defaultOptionValue: (value: string | string[], props?: WidgetProps) => { let values = value; diff --git a/app/client/src/widgets/FilepickerWidget.tsx b/app/client/src/widgets/FilepickerWidget.tsx index 3904c28678..e50a820a0f 100644 --- a/app/client/src/widgets/FilepickerWidget.tsx +++ b/app/client/src/widgets/FilepickerWidget.tsx @@ -37,6 +37,7 @@ class FilePickerWidget extends BaseWidget { allowedFileTypes: VALIDATION_TYPES.ARRAY, files: VALIDATION_TYPES.ARRAY, isRequired: VALIDATION_TYPES.BOOLEAN, + onFilesSelected: VALIDATION_TYPES.ACTION_SELECTOR, }; } diff --git a/app/client/src/widgets/FormButtonWidget.tsx b/app/client/src/widgets/FormButtonWidget.tsx index 6c141bbc16..60283c8cb1 100644 --- a/app/client/src/widgets/FormButtonWidget.tsx +++ b/app/client/src/widgets/FormButtonWidget.tsx @@ -33,6 +33,7 @@ class FormButtonWidget extends BaseWidget< disabledWhenInvalid: VALIDATION_TYPES.BOOLEAN, buttonStyle: VALIDATION_TYPES.TEXT, buttonType: VALIDATION_TYPES.TEXT, + onClick: VALIDATION_TYPES.ACTION_SELECTOR, }; } diff --git a/app/client/src/widgets/RadioGroupWidget.tsx b/app/client/src/widgets/RadioGroupWidget.tsx index 1a631b0163..9fabf3c91a 100644 --- a/app/client/src/widgets/RadioGroupWidget.tsx +++ b/app/client/src/widgets/RadioGroupWidget.tsx @@ -17,9 +17,9 @@ class RadioGroupWidget extends BaseWidget { label: VALIDATION_TYPES.TEXT, options: VALIDATION_TYPES.OPTIONS_DATA, selectedOptionValue: VALIDATION_TYPES.TEXT, - onSelectionChange: VALIDATION_TYPES.TEXT, defaultOptionValue: VALIDATION_TYPES.TEXT, isRequired: VALIDATION_TYPES.BOOLEAN, + onSelectionChange: VALIDATION_TYPES.ACTION_SELECTOR, }; } static getDerivedPropertiesMap() { diff --git a/app/client/src/widgets/RichTextEditorWidget.tsx b/app/client/src/widgets/RichTextEditorWidget.tsx index 7b2eea598f..c1b95a4899 100644 --- a/app/client/src/widgets/RichTextEditorWidget.tsx +++ b/app/client/src/widgets/RichTextEditorWidget.tsx @@ -17,6 +17,7 @@ class RichTextEditorWidget extends BaseWidget< defaultValue: VALIDATION_TYPES.TEXT, isDisabled: VALIDATION_TYPES.BOOLEAN, isVisible: VALIDATION_TYPES.BOOLEAN, + onTextChange: VALIDATION_TYPES.ACTION_SELECTOR, }; } diff --git a/app/client/src/widgets/TableWidget.tsx b/app/client/src/widgets/TableWidget.tsx index deb2b3967b..909fd30ad0 100644 --- a/app/client/src/widgets/TableWidget.tsx +++ b/app/client/src/widgets/TableWidget.tsx @@ -42,7 +42,9 @@ class TableWidget extends BaseWidget { prevPageKey: VALIDATION_TYPES.TEXT, label: VALIDATION_TYPES.TEXT, selectedRowIndex: VALIDATION_TYPES.NUMBER, - columnActions: VALIDATION_TYPES.ARRAY, + columnActions: VALIDATION_TYPES.ARRAY_ACTION_SELECTOR, + onRowSelected: VALIDATION_TYPES.ACTION_SELECTOR, + onPageChange: VALIDATION_TYPES.ACTION_SELECTOR, }; } static getDerivedPropertiesMap() {