import React from "react"; import BaseWidget, { WidgetProps, WidgetState } from "./BaseWidget"; import { WidgetType } from "constants/WidgetConstants"; import RadioGroupComponent from "components/designSystems/blueprint/RadioGroupComponent"; import { EventType } from "constants/ActionConstants"; import { WidgetPropertyValidationType, BASE_WIDGET_VALIDATION, } from "utils/WidgetValidation"; import { VALIDATION_TYPES } from "constants/WidgetValidation"; import * as Sentry from "@sentry/react"; import withMeta, { WithMeta } from "./MetaHOC"; class RadioGroupWidget extends BaseWidget { static getPropertyPaneConfig() { return [ { sectionName: "General", children: [ { helpText: "Displays a list of options for a user to select. Values must be unique", propertyName: "options", label: "Options", controlType: "OPTION_INPUT", isJSConvertible: true, isBindProperty: true, isTriggerProperty: false, }, { helpText: "Selects a value of the options entered by default", propertyName: "defaultOptionValue", label: "Default Selected Value", placeholderText: "Enter option value", controlType: "INPUT_TEXT", isBindProperty: true, isTriggerProperty: false, }, { propertyName: "isRequired", label: "Required", helpText: "Makes input to the widget mandatory", controlType: "SWITCH", isJSConvertible: true, isBindProperty: true, isTriggerProperty: false, }, { helpText: "Controls the visibility of the widget", propertyName: "isVisible", label: "Visible", controlType: "SWITCH", isJSConvertible: true, isBindProperty: true, isTriggerProperty: false, }, { propertyName: "isDisabled", label: "Disabled", helpText: "Disables input to this widget", controlType: "SWITCH", isJSConvertible: true, isBindProperty: true, isTriggerProperty: false, }, ], }, { sectionName: "Actions", children: [ { helpText: "Triggers an action when a user changes the selected option", propertyName: "onSelectionChange", label: "onSelectionChange", controlType: "ACTION_SELECTOR", isJSConvertible: true, isBindProperty: true, isTriggerProperty: true, }, ], }, ]; } static getPropertyValidationMap(): WidgetPropertyValidationType { return { ...BASE_WIDGET_VALIDATION, label: VALIDATION_TYPES.TEXT, options: VALIDATION_TYPES.OPTIONS_DATA, selectedOptionValue: VALIDATION_TYPES.TEXT, defaultOptionValue: VALIDATION_TYPES.TEXT, isRequired: VALIDATION_TYPES.BOOLEAN, // onSelectionChange: VALIDATION_TYPES.ACTION_SELECTOR, }; } static getDerivedPropertiesMap() { return { selectedOption: "{{_.find(this.options, { value: this.selectedOptionValue })}}", isValid: `{{ this.isRequired ? !!this.selectedOptionValue : true }}`, value: `{{this.selectedOptionValue}}`, }; } static getDefaultPropertiesMap(): Record { return { selectedOptionValue: "defaultOptionValue", }; } static getMetaPropertiesMap(): Record { return { selectedOptionValue: undefined, }; } getPageView() { return ( ); } onRadioSelectionChange = (updatedValue: string) => { this.props.updateWidgetMetaProperty("selectedOptionValue", updatedValue, { dynamicString: this.props.onSelectionChange, event: { type: EventType.ON_OPTION_CHANGE, }, }); }; getWidgetType(): WidgetType { return "RADIO_GROUP_WIDGET"; } } export interface RadioOption { label: string; value: string; } export interface RadioGroupWidgetProps extends WidgetProps, WithMeta { label: string; options: RadioOption[]; selectedOptionValue: string; onSelectionChange: string; defaultOptionValue: string; isRequired?: boolean; } export default RadioGroupWidget; export const ProfiledRadioGroupWidget = Sentry.withProfiler( withMeta(RadioGroupWidget), );