PromucFlow_constructor/app/client/src/utils/WidgetRegistry.tsx
Arsalan Yaldram 46b3627bac
feat: implemented slider widgets (#15712)
* feat: implemented slider widget from mantine ui

* fix: remove widget from widgetName

* fix: memoize marks, use primitives for rangeslider value

* fix: use theme accentColor, remove xs and xl size

* fix: renamed slider widget, added searchTags, parity properties

* feat: added labels to the slider widgets.

* fix: Rename SingleSlider components to Slider

* feat: added basic disabled state

* feat: added category slider widget, handled label callback function

* fix: Renamed slider widgets fixed imports and bindings.

* feat: widget redesign, added hover, focus, disabled states.

* feat: added isDirty meta property to the slider widgets.

* feat: Added onChange action triggers to the slider widgets.

* feat: added show marks label property for category widget.

* fix: fixed initial feedback on designs, issues.

* feat: added the new tabbed property pane improvements.

* feat: changes to the slider property panes.

* fix: removed show label on hover and add tooltip always on property.

* fix: slider sizes changed inline with the designs

* feat: added initial logos.

* fix: slider size subtext.

* feat: added show marks to number and range sliders.

* fix: Label will show one decimal point if step Size is in decimal.

* feat: added validations for the slider widgets.

* fix: remove mark dots when show marks is off, change icons.

* fix: addressed validations feedback.

* fix: added stepsize validation number widget & fixed top label aligning.

* fix: Long label styles.

* fix: wrapping removed for long labels, handled focus state.

* fix: remove overflow hidden.

* fix: added pointerEvents none to Marks.

* fix: added default value in the Number Slider widget.

* fix: refactor marks remove un-necessary function calls.

* fix: Review changes done.

* fix: remove transformstyles outside component.

* fix: remove old proprty pane config.

* fix: remove any type from widget files.

* fix: small code refactor validations category slider.

* fix: removed throttle, fixed slider setting to zero issue.

* fix: Added validation for stepSize RangeSlider. Added clamp for nextValue in getChangeValue.

* fix: number and category slider fire events only if value has changed.

* fix: added 0 as default for the min value, range and number sliders.

* fix: remove tooltip always on from category slider.

* fix: minRange validation accept only numbers.

* fix: added old property pane method.
2022-09-22 21:26:50 +05:30

241 lines
8.7 KiB
TypeScript

import log from "loglevel";
import AudioRecorderWidget, {
CONFIG as AUDIO_RECORDER_WIDGET_CONFIG,
} from "widgets/AudioRecorderWidget";
import AudioWidget, {
CONFIG as AUDIO_WIDGET_CONFIG,
} from "widgets/AudioWidget";
import ButtonGroupWidget, {
CONFIG as BUTTON_GROUP_CONFIG,
} from "widgets/ButtonGroupWidget";
import ButtonWidget, {
CONFIG as BUTTON_WIDGET_CONFIG,
} from "widgets/ButtonWidget";
import SelectWidget, {
CONFIG as SELECT_WIDGET_CONFIG,
} from "widgets/SelectWidget";
import CameraWidget, {
CONFIG as CAMERA_WIDGET_CONFIG,
} from "widgets/CameraWidget";
import CanvasWidget, {
CONFIG as CANVAS_WIDGET_CONFIG,
} from "widgets/CanvasWidget";
import ChartWidget, {
CONFIG as CHART_WIDGET_CONFIG,
} from "widgets/ChartWidget";
import CheckboxGroupWidget, {
CONFIG as CHECKBOX_GROUP_WIDGET_CONFIG,
} from "widgets/CheckboxGroupWidget";
import CheckboxWidget, {
CONFIG as CHECKBOX_WIDGET_CONFIG,
} from "widgets/CheckboxWidget";
import CircularProgressWidget, {
CONFIG as CIRCULAR_PROGRESS_WIDGET_CONFIG,
} from "widgets/CircularProgressWidget";
import ContainerWidget, {
CONFIG as CONTAINER_WIDGET_CONFIG,
} from "widgets/ContainerWidget";
import CurrencyInputWidget, {
CONFIG as CURRENCY_INPUT_WIDGET_V2_CONFIG,
} from "widgets/CurrencyInputWidget";
import DatePickerWidget, {
CONFIG as DATE_PICKER_WIDGET_CONFIG,
} from "widgets/DatePickerWidget";
import DatePickerWidget2, {
CONFIG as DATE_PICKER_WIDGET_2_CONFIG,
} from "widgets/DatePickerWidget2";
import DividerWidget, {
CONFIG as DIVIDER_WIDGET_CONFIG,
} from "widgets/DividerWidget";
import MultiSelectWidgetV2, {
CONFIG as MULTI_SELECT_WIDGET_V2_CONFIG,
} from "widgets/MultiSelectWidgetV2";
import DocumentViewerWidget, {
CONFIG as DOCUMENT_VIEWER_WIDGET_CONFIG,
} from "widgets/DocumentViewerWidget";
import DropdownWidget, {
CONFIG as DROPDOWN_WIDGET_CONFIG,
} from "widgets/DropdownWidget";
import FilePickerWidget, {
CONFIG as FILEPICKER_WIDGET_CONFIG,
} from "widgets/FilepickerWidget";
import FilePickerWidgetV2, {
CONFIG as FILEPICKER_WIDGET_V2_CONFIG,
} from "widgets/FilePickerWidgetV2";
import FormButtonWidget, {
CONFIG as FORM_BUTTON_WIDGET_CONFIG,
} from "widgets/FormButtonWidget";
import FormWidget, { CONFIG as FORM_WIDGET_CONFIG } from "widgets/FormWidget";
import IconButtonWidget, {
CONFIG as ICON_BUTTON_WIDGET_CONFIG,
} from "widgets/IconButtonWidget";
import IconWidget, { CONFIG as ICON_WIDGET_CONFIG } from "widgets/IconWidget";
import IframeWidget, {
CONFIG as IFRAME_WIDGET_CONFIG,
} from "widgets/IframeWidget";
import ImageWidget, {
CONFIG as IMAGE_WIDGET_CONFIG,
} from "widgets/ImageWidget";
import InputWidget, {
CONFIG as INPUT_WIDGET_CONFIG,
} from "widgets/InputWidget";
import InputWidgetV2, {
CONFIG as INPUT_WIDGET_V2_CONFIG,
} from "widgets/InputWidgetV2";
import ListWidget, { CONFIG as LIST_WIDGET_CONFIG } from "widgets/ListWidget";
import MapChartWidget, {
CONFIG as MAP_CHART_WIDGET_CONFIG,
} from "widgets/MapChartWidget";
import MapWidget, { CONFIG as MAP_WIDGET_CONFIG } from "widgets/MapWidget";
import MenuButtonWidget, {
CONFIG as MENU_BUTTON_WIDGET_CONFIG,
} from "widgets/MenuButtonWidget";
import ModalWidget, {
CONFIG as MODAL_WIDGET_CONFIG,
} from "widgets/ModalWidget";
import MultiSelectTreeWidget, {
CONFIG as MULTI_SELECT_TREE_WIDGET_CONFIG,
} from "widgets/MultiSelectTreeWidget";
import MultiSelectWidget, {
CONFIG as MULTI_SELECT_WIDGET_CONFIG,
} from "widgets/MultiSelectWidget";
import PhoneInputWidget, {
CONFIG as PHONE_INPUT_WIDGET_V2_CONFIG,
} from "widgets/PhoneInputWidget";
import ProgressBarWidget, {
CONFIG as PROGRESSBAR_WIDGET_CONFIG,
} from "widgets/ProgressBarWidget";
import RadioGroupWidget, {
CONFIG as RADIO_GROUP_WIDGET_CONFIG,
} from "widgets/RadioGroupWidget";
import RateWidget, { CONFIG as RATE_WIDGET_CONFIG } from "widgets/RateWidget";
import RichTextEditorWidget, {
CONFIG as RICH_TEXT_EDITOR_WIDGET_CONFIG,
} from "widgets/RichTextEditorWidget";
import SingleSelectTreeWidget, {
CONFIG as SINGLE_SELECT_TREE_WIDGET_CONFIG,
} from "widgets/SingleSelectTreeWidget";
import SkeletonWidget, {
CONFIG as SKELETON_WIDGET_CONFIG,
} from "widgets/SkeletonWidget";
import StatboxWidget, {
CONFIG as STATBOX_WIDGET_CONFIG,
} from "widgets/StatboxWidget";
import JSONFormWidget, {
CONFIG as JSON_FORM_WIDGET_CONFIG,
} from "widgets/JSONFormWidget";
import SwitchGroupWidget, {
CONFIG as SWITCH_GROUP_WIDGET_CONFIG,
} from "widgets/SwitchGroupWidget";
import SwitchWidget, {
CONFIG as SWITCH_WIDGET_CONFIG,
} from "widgets/SwitchWidget";
import TableWidget, {
CONFIG as TABLE_WIDGET_CONFIG,
} from "widgets/TableWidget";
import TabsMigratorWidget, {
CONFIG as TABS_MIGRATOR_WIDGET_CONFIG,
} from "widgets/TabsMigrator";
import TabsWidget, { CONFIG as TABS_WIDGET_CONFIG } from "widgets/TabsWidget";
import TextWidget, { CONFIG as TEXT_WIDGET_CONFIG } from "widgets/TextWidget";
import VideoWidget, {
CONFIG as VIDEO_WIDGET_CONFIG,
} from "widgets/VideoWidget";
import ProgressWidget, {
CONFIG as PROGRESS_WIDGET_CONFIG,
} from "widgets/ProgressWidget";
import { registerWidget } from "./WidgetRegisterHelpers";
import { WidgetConfiguration } from "widgets/constants";
import TableWidgetV2, {
CONFIG as TABLE_WIDGET_CONFIG_V2,
} from "widgets/TableWidgetV2";
import NumberSliderWidget, {
CONFIG as NUMBER_SLIDER_WIDGET_CONFIG,
} from "widgets/NumberSliderWidget";
import RangeSliderWidget, {
CONFIG as RANGE_SLIDER_WIDGET_CONFIG,
} from "widgets/RangeSliderWidget";
import CategorySliderWidget, {
CONFIG as CATEGORY_SLIDER_WIDGET_CONFIG,
} from "widgets/CategorySliderWidget";
import CodeScannerWidget, {
CONFIG as CODE_SCANNER_WIDGET_CONFIG,
} from "widgets/CodeScannerWidget";
export const ALL_WIDGETS_AND_CONFIG = [
[CanvasWidget, CANVAS_WIDGET_CONFIG],
[SkeletonWidget, SKELETON_WIDGET_CONFIG],
[ContainerWidget, CONTAINER_WIDGET_CONFIG],
[TextWidget, TEXT_WIDGET_CONFIG],
[TableWidget, TABLE_WIDGET_CONFIG],
[CheckboxWidget, CHECKBOX_WIDGET_CONFIG],
[RadioGroupWidget, RADIO_GROUP_WIDGET_CONFIG],
[ButtonWidget, BUTTON_WIDGET_CONFIG],
[ImageWidget, IMAGE_WIDGET_CONFIG],
[VideoWidget, VIDEO_WIDGET_CONFIG],
[TabsWidget, TABS_WIDGET_CONFIG],
[ModalWidget, MODAL_WIDGET_CONFIG],
[ChartWidget, CHART_WIDGET_CONFIG],
[MapWidget, MAP_WIDGET_CONFIG],
[RichTextEditorWidget, RICH_TEXT_EDITOR_WIDGET_CONFIG],
[DatePickerWidget2, DATE_PICKER_WIDGET_2_CONFIG],
[SwitchWidget, SWITCH_WIDGET_CONFIG],
[FormWidget, FORM_WIDGET_CONFIG],
[ListWidget, LIST_WIDGET_CONFIG],
[RateWidget, RATE_WIDGET_CONFIG],
[IframeWidget, IFRAME_WIDGET_CONFIG],
[TabsMigratorWidget, TABS_MIGRATOR_WIDGET_CONFIG],
[DividerWidget, DIVIDER_WIDGET_CONFIG],
[MenuButtonWidget, MENU_BUTTON_WIDGET_CONFIG],
[IconButtonWidget, ICON_BUTTON_WIDGET_CONFIG],
[CheckboxGroupWidget, CHECKBOX_GROUP_WIDGET_CONFIG],
[FilePickerWidgetV2, FILEPICKER_WIDGET_V2_CONFIG],
[StatboxWidget, STATBOX_WIDGET_CONFIG],
[AudioRecorderWidget, AUDIO_RECORDER_WIDGET_CONFIG],
[DocumentViewerWidget, DOCUMENT_VIEWER_WIDGET_CONFIG],
[ButtonGroupWidget, BUTTON_GROUP_CONFIG],
[MultiSelectTreeWidget, MULTI_SELECT_TREE_WIDGET_CONFIG],
[SingleSelectTreeWidget, SINGLE_SELECT_TREE_WIDGET_CONFIG],
[SwitchGroupWidget, SWITCH_GROUP_WIDGET_CONFIG],
[AudioWidget, AUDIO_WIDGET_CONFIG],
[ProgressBarWidget, PROGRESSBAR_WIDGET_CONFIG],
[CameraWidget, CAMERA_WIDGET_CONFIG],
[MapChartWidget, MAP_CHART_WIDGET_CONFIG],
[SelectWidget, SELECT_WIDGET_CONFIG],
[MultiSelectWidgetV2, MULTI_SELECT_WIDGET_V2_CONFIG],
[InputWidgetV2, INPUT_WIDGET_V2_CONFIG],
[PhoneInputWidget, PHONE_INPUT_WIDGET_V2_CONFIG],
[CurrencyInputWidget, CURRENCY_INPUT_WIDGET_V2_CONFIG],
[JSONFormWidget, JSON_FORM_WIDGET_CONFIG],
[TableWidgetV2, TABLE_WIDGET_CONFIG_V2],
[NumberSliderWidget, NUMBER_SLIDER_WIDGET_CONFIG],
[RangeSliderWidget, RANGE_SLIDER_WIDGET_CONFIG],
[CategorySliderWidget, CATEGORY_SLIDER_WIDGET_CONFIG],
[CodeScannerWidget, CODE_SCANNER_WIDGET_CONFIG],
//Deprecated Widgets
[InputWidget, INPUT_WIDGET_CONFIG],
[DropdownWidget, DROPDOWN_WIDGET_CONFIG],
[DatePickerWidget, DATE_PICKER_WIDGET_CONFIG],
[IconWidget, ICON_WIDGET_CONFIG],
[FilePickerWidget, FILEPICKER_WIDGET_CONFIG],
[MultiSelectWidget, MULTI_SELECT_WIDGET_CONFIG],
[FormButtonWidget, FORM_BUTTON_WIDGET_CONFIG],
[ProgressWidget, PROGRESS_WIDGET_CONFIG],
[CircularProgressWidget, CIRCULAR_PROGRESS_WIDGET_CONFIG],
/*
* If a newly added widget works well inside the list widget,
* please add widget type in the List widget's allowed widget
* list, to make the new widget be droppable inside List widget.
*/
];
export const registerWidgets = () => {
const start = performance.now();
for (const widget of ALL_WIDGETS_AND_CONFIG) {
registerWidget(widget[0], widget[1] as WidgetConfiguration);
}
log.debug("Widget registration took: ", performance.now() - start, "ms");
};