- Checkbox group widget - MultiSelecttree widget - Multiselect widget - dropdown widget - radio group widget - single select tree - switch group widget
265 lines
7.8 KiB
TypeScript
265 lines
7.8 KiB
TypeScript
import React from "react";
|
|
import { Alignment } from "@blueprintjs/core";
|
|
|
|
import BaseWidget, { WidgetProps, WidgetState } from "widgets/BaseWidget";
|
|
import { DerivedPropertiesMap } from "utils/WidgetFactory";
|
|
import { ValidationTypes } from "constants/WidgetValidation";
|
|
import { EventType } from "constants/AppsmithActionConstants/ActionConstants";
|
|
import { EvaluationSubstitutionType } from "entities/DataTree/dataTreeFactory";
|
|
|
|
import SwitchGroupComponent, { OptionProps } from "../component";
|
|
|
|
class SwitchGroupWidget extends BaseWidget<
|
|
SwitchGroupWidgetProps,
|
|
WidgetState
|
|
> {
|
|
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: "INPUT_TEXT",
|
|
placeholderText: '[{ "label": "Option1", "value": "Option2" }]',
|
|
isBindProperty: true,
|
|
isTriggerProperty: false,
|
|
validation: {
|
|
type: ValidationTypes.ARRAY,
|
|
params: {
|
|
children: {
|
|
type: ValidationTypes.OBJECT,
|
|
params: {
|
|
allowedKeys: [
|
|
{
|
|
name: "label",
|
|
type: ValidationTypes.TEXT,
|
|
params: {
|
|
default: "",
|
|
required: true,
|
|
unique: true,
|
|
},
|
|
},
|
|
{
|
|
name: "value",
|
|
type: ValidationTypes.TEXT,
|
|
params: {
|
|
default: "",
|
|
unique: true,
|
|
},
|
|
},
|
|
],
|
|
},
|
|
},
|
|
},
|
|
},
|
|
evaluationSubstitutionType:
|
|
EvaluationSubstitutionType.SMART_SUBSTITUTE,
|
|
},
|
|
{
|
|
helpText:
|
|
"Selects values of the options checked by default. Enter comma separated values for multiple selected",
|
|
propertyName: "defaultSelectedValues",
|
|
label: "Default Selected Values",
|
|
placeholderText: "Enter option values",
|
|
controlType: "INPUT_TEXT",
|
|
isBindProperty: true,
|
|
isTriggerProperty: false,
|
|
validation: {
|
|
type: ValidationTypes.ARRAY,
|
|
params: {
|
|
default: [],
|
|
children: {
|
|
type: ValidationTypes.TEXT,
|
|
},
|
|
strict: true,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
propertyName: "isInline",
|
|
helpText:
|
|
"Whether switches are to be displayed inline horizontally",
|
|
label: "Inline",
|
|
controlType: "SWITCH",
|
|
isJSConvertible: true,
|
|
isBindProperty: true,
|
|
isTriggerProperty: false,
|
|
validation: { type: ValidationTypes.BOOLEAN },
|
|
},
|
|
{
|
|
propertyName: "isRequired",
|
|
label: "Required",
|
|
helpText: "Makes input to the widget mandatory",
|
|
controlType: "SWITCH",
|
|
isJSConvertible: true,
|
|
isBindProperty: true,
|
|
isTriggerProperty: false,
|
|
validation: { type: ValidationTypes.BOOLEAN },
|
|
},
|
|
{
|
|
propertyName: "isVisible",
|
|
helpText: "Controls the visibility of the widget",
|
|
label: "Visible",
|
|
controlType: "SWITCH",
|
|
isJSConvertible: true,
|
|
isBindProperty: true,
|
|
isTriggerProperty: false,
|
|
validation: { type: ValidationTypes.BOOLEAN },
|
|
},
|
|
{
|
|
propertyName: "isDisabled",
|
|
helpText: "Disables input to the widget",
|
|
label: "Disabled",
|
|
controlType: "SWITCH",
|
|
isJSConvertible: true,
|
|
isBindProperty: true,
|
|
isTriggerProperty: false,
|
|
validation: { type: ValidationTypes.BOOLEAN },
|
|
},
|
|
{
|
|
propertyName: "animateLoading",
|
|
label: "Animate Loading",
|
|
controlType: "SWITCH",
|
|
helpText: "Controls the loading of the widget",
|
|
defaultValue: true,
|
|
isJSConvertible: true,
|
|
isBindProperty: true,
|
|
isTriggerProperty: false,
|
|
validation: { type: ValidationTypes.BOOLEAN },
|
|
},
|
|
{
|
|
propertyName: "alignment",
|
|
helpText: "Sets the alignment of the widget",
|
|
label: "Alignment",
|
|
controlType: "DROP_DOWN",
|
|
isBindProperty: true,
|
|
isTriggerProperty: false,
|
|
options: [
|
|
{
|
|
label: "Left",
|
|
value: Alignment.LEFT,
|
|
},
|
|
{
|
|
label: "Right",
|
|
value: Alignment.RIGHT,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
sectionName: "Actions",
|
|
children: [
|
|
{
|
|
helpText:
|
|
"Triggers an action when a switch state inside the group is changed",
|
|
propertyName: "onSelectionChange",
|
|
label: "onSelectionChange",
|
|
controlType: "ACTION_SELECTOR",
|
|
isJSConvertible: true,
|
|
isBindProperty: true,
|
|
isTriggerProperty: true,
|
|
},
|
|
],
|
|
},
|
|
];
|
|
}
|
|
|
|
static getDefaultPropertiesMap(): Record<string, string> {
|
|
return {
|
|
selectedValuesArray: "defaultSelectedValues",
|
|
};
|
|
}
|
|
|
|
static getMetaPropertiesMap(): Record<string, any> {
|
|
return {
|
|
selectedValuesArray: undefined,
|
|
};
|
|
}
|
|
|
|
static getDerivedPropertiesMap(): DerivedPropertiesMap {
|
|
return {
|
|
isValid: `{{ this.isRequired ? !!this.selectedValues.length : true }}`,
|
|
selectedValues: `{{
|
|
this.selectedValuesArray.filter(
|
|
selectedValue => this.options.map(option => option.value).includes(selectedValue)
|
|
)
|
|
}}`,
|
|
};
|
|
}
|
|
|
|
static getWidgetType(): string {
|
|
return "SWITCH_GROUP_WIDGET";
|
|
}
|
|
|
|
getPageView() {
|
|
const {
|
|
alignment,
|
|
isDisabled,
|
|
isInline,
|
|
isRequired,
|
|
isValid,
|
|
options,
|
|
parentRowSpace,
|
|
selectedValues,
|
|
} = this.props;
|
|
|
|
return (
|
|
<SwitchGroupComponent
|
|
alignment={alignment}
|
|
disabled={isDisabled}
|
|
inline={isInline}
|
|
onChange={this.handleSwitchStateChange}
|
|
options={options}
|
|
required={isRequired}
|
|
rowSpace={parentRowSpace}
|
|
selected={selectedValues}
|
|
valid={isValid}
|
|
/>
|
|
);
|
|
}
|
|
|
|
private handleSwitchStateChange = (value: string) => {
|
|
return (event: React.FormEvent<HTMLElement>) => {
|
|
let { selectedValuesArray } = this.props;
|
|
const isChecked = (event.target as HTMLInputElement).checked;
|
|
if (isChecked) {
|
|
selectedValuesArray = [...selectedValuesArray, value];
|
|
} else {
|
|
selectedValuesArray = selectedValuesArray.filter(
|
|
(item: string) => item !== value,
|
|
);
|
|
}
|
|
|
|
this.props.updateWidgetMetaProperty(
|
|
"selectedValuesArray",
|
|
selectedValuesArray,
|
|
{
|
|
triggerPropertyName: "onSelectionChange",
|
|
dynamicString: this.props.onSelectionChange,
|
|
event: {
|
|
type: EventType.ON_SWITCH_GROUP_SELECTION_CHANGE,
|
|
},
|
|
},
|
|
);
|
|
};
|
|
};
|
|
}
|
|
|
|
export interface SwitchGroupWidgetProps extends WidgetProps {
|
|
options: OptionProps[];
|
|
defaultSelectedValues: string[];
|
|
isInline: boolean;
|
|
isRequired?: boolean;
|
|
isValid?: boolean;
|
|
isDisabled?: boolean;
|
|
alignment: Alignment;
|
|
onSelectionChange?: boolean;
|
|
}
|
|
|
|
export default SwitchGroupWidget;
|