import React from "react"; import { IconName } from "@blueprintjs/icons"; import BaseWidget, { WidgetProps, WidgetState } from "widgets/BaseWidget"; import { WidgetType } from "constants/WidgetConstants"; import { ValidationTypes } from "constants/WidgetValidation"; import { EventType } from "constants/AppsmithActionConstants/ActionConstants"; import IconButtonComponent from "../component"; import { ButtonBorderRadius, ButtonBoxShadow, ButtonVariant, ButtonBorderRadiusTypes, ButtonVariantTypes, } from "components/constants"; import { Colors } from "constants/Colors"; export interface IconButtonWidgetProps extends WidgetProps { iconName?: IconName; buttonColor?: string; buttonVariant: ButtonVariant; borderRadius: ButtonBorderRadius; boxShadow: ButtonBoxShadow; boxShadowColor: string; isDisabled: boolean; isVisible: boolean; onClick?: string; } class IconButtonWidget extends BaseWidget { static getPropertyPaneConfig() { return [ { sectionName: "General", children: [ { propertyName: "iconName", label: "Icon", helpText: "Sets the icon to be used for the icon button", controlType: "ICON_SELECT", isBindProperty: false, isTriggerProperty: false, validation: { type: ValidationTypes.TEXT }, }, { propertyName: "isDisabled", helpText: "Disables input to the widget", label: "Disabled", 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 }, }, ], }, { sectionName: "Events", children: [ { helpText: "Triggers an action when the button is clicked", propertyName: "onClick", label: "onClick", controlType: "ACTION_SELECTOR", isJSConvertible: true, isBindProperty: true, isTriggerProperty: true, }, ], }, { sectionName: "Styles", children: [ { propertyName: "buttonColor", helpText: "Sets the style of the icon button", label: "Button Color", controlType: "COLOR_PICKER", isBindProperty: false, isTriggerProperty: false, }, { propertyName: "buttonVariant", label: "Button Variant", controlType: "DROP_DOWN", helpText: "Sets the variant of the icon button", options: [ { label: "Primary", value: ButtonVariantTypes.PRIMARY, }, { label: "Secondary", value: ButtonVariantTypes.SECONDARY, }, { label: "Tertiary", value: ButtonVariantTypes.TERTIARY, }, ], isBindProperty: false, isTriggerProperty: false, }, { propertyName: "borderRadius", label: "Border Radius", helpText: "Rounds the corners of the icon button's outer border edge", controlType: "BORDER_RADIUS_OPTIONS", options: [ ButtonBorderRadiusTypes.SHARP, ButtonBorderRadiusTypes.ROUNDED, ButtonBorderRadiusTypes.CIRCLE, ], isBindProperty: false, isTriggerProperty: false, validation: { type: ValidationTypes.TEXT, params: { allowedValues: ["CIRCLE", "SHARP", "ROUNDED"], }, }, }, { propertyName: "boxShadow", label: "Box Shadow", helpText: "Enables you to cast a drop shadow from the frame of the widget", controlType: "BOX_SHADOW_OPTIONS", isBindProperty: false, isTriggerProperty: false, validation: { type: ValidationTypes.TEXT, params: { allowedValues: [ "NONE", "VARIANT1", "VARIANT2", "VARIANT3", "VARIANT4", "VARIANT5", ], }, }, }, { propertyName: "boxShadowColor", helpText: "Sets the shadow color of the widget", label: "Shadow Color", controlType: "COLOR_PICKER", isBindProperty: false, isTriggerProperty: false, }, ], }, ]; } getPageView() { const { borderRadius, boxShadow, boxShadowColor, buttonColor, buttonVariant, iconName, isDisabled, isVisible, widgetId, } = this.props; return ( ); } static getWidgetType(): WidgetType { return "ICON_BUTTON_WIDGET"; } handleClick = () => { const { onClick } = this.props; if (onClick) { super.executeAction({ triggerPropertyName: "onClick", dynamicString: onClick, event: { type: EventType.ON_CLICK, }, }); } }; } export default IconButtonWidget;