import React from "react"; import BaseWidget, { WidgetProps, WidgetState } from "./BaseWidget"; import { WidgetType } from "constants/WidgetConstants"; import { EventType } from "constants/ActionConstants"; import DatePickerComponent from "components/designSystems/blueprint/DatePickerComponent"; import { WidgetPropertyValidationType, BASE_WIDGET_VALIDATION, } from "utils/ValidationFactory"; import { VALIDATION_TYPES } from "constants/WidgetValidation"; import { DerivedPropertiesMap, TriggerPropertiesMap, } from "utils/WidgetFactory"; import moment from "moment-timezone"; class DatePickerWidget extends BaseWidget { static getPropertyValidationMap(): WidgetPropertyValidationType { return { ...BASE_WIDGET_VALIDATION, timezone: VALIDATION_TYPES.TEXT, enableTimePicker: VALIDATION_TYPES.BOOLEAN, dateFormat: VALIDATION_TYPES.TEXT, label: VALIDATION_TYPES.TEXT, datePickerType: VALIDATION_TYPES.TEXT, maxDate: VALIDATION_TYPES.DATE, minDate: VALIDATION_TYPES.DATE, isRequired: VALIDATION_TYPES.BOOLEAN, onDateSelected: VALIDATION_TYPES.ACTION_SELECTOR, onDateRangeSelected: VALIDATION_TYPES.ACTION_SELECTOR, }; } static getDerivedPropertiesMap(): DerivedPropertiesMap { return { isValid: `{{ this.isRequired ? !!this.selectedDate : true }}`, }; } static getTriggerPropertyMap(): TriggerPropertiesMap { return { onDateSelected: true, }; } componentDidMount() { super.componentDidMount(); if (this.props.defaultDate) { this.updateWidgetMetaProperty( "selectedDate", new Date(this.props.defaultDate.dateValue), ); } } componentDidUpdate(prevProps: DatePickerWidgetProps) { super.componentDidUpdate(prevProps); if ( this.props.defaultDate && (prevProps.defaultDate === undefined || !moment(this.props.defaultDate.dateValue).isSame( moment(prevProps.defaultDate.dateValue), "second", )) ) { this.updateWidgetMetaProperty( "selectedDate", new Date(this.props.defaultDate.dateValue), ); } } getPageView() { return ( ); } onDateSelected = (selectedDate: Date) => { this.updateWidgetMetaProperty("selectedDate", selectedDate); if (this.props.onDateSelected) { super.executeAction({ dynamicString: this.props.onDateSelected, event: { type: EventType.ON_DATE_SELECTED, }, }); } }; getWidgetType(): WidgetType { return "DATE_PICKER_WIDGET"; } } export type DatePickerType = "DATE_PICKER" | "DATE_RANGE_PICKER"; export interface DatePickerWidgetProps extends WidgetProps { defaultDate: { dateValue: number; isTimeEnabled: boolean; timezone: string; }; selectedDate: Date; isDisabled: boolean; dateFormat: string; label: string; datePickerType: DatePickerType; onDateSelected?: string; onDateRangeSelected?: string; maxDate: Date; minDate: Date; isRequired?: boolean; } export default DatePickerWidget;