/*** * Controls are rendered in the property panel from the property config * Controls are higher order components that update a widgets property */ import { Component } from "react"; import _ from "lodash"; import { ControlType } from "../../constants/PropertyControlConstants"; import { ErrorCode } from "../../constants/validationErrorCodes"; abstract class BaseControl extends Component { updateProperty(propertyName: string, propertyValue: any) { if (!_.isNil(this.props.onPropertyChange)) this.props.onPropertyChange(propertyName, propertyValue); } abstract getControlType(): ControlType; } export interface ControlBuilder { buildPropertyControl(controlProps: T): JSX.Element; } export interface ControlProps extends ControlData, ControlFunctions { key?: string; } export interface ControlData { id: string; label: string; propertyName: string; controlType: ControlType; propertyValue?: any; propertyError?: ErrorCode; } export interface ControlFunctions { onPropertyChange?: (propertyName: string, propertyValue: string) => void; getDynamicValue: (dynamicBinding: string) => any; setPropertyValidation: (propertyName: string, errorCode: ErrorCode) => void; } export default BaseControl;