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 15:56:50 +00:00
|
|
|
import * as React from "react";
|
|
|
|
|
|
|
|
|
|
import BaseWidget, { WidgetProps, WidgetState } from "widgets/BaseWidget";
|
|
|
|
|
import { TAILWIND_COLORS } from "constants/ThemeConstants";
|
|
|
|
|
import { EventType } from "constants/AppsmithActionConstants/ActionConstants";
|
|
|
|
|
import SliderComponent, { SliderComponentProps } from "../component/Slider";
|
|
|
|
|
import contentConfig from "./propertyConfig/contentConfig";
|
|
|
|
|
import styleConfig from "./propertyConfig/styleConfig";
|
|
|
|
|
|
|
|
|
|
export interface NumberSliderWidgetProps
|
|
|
|
|
extends WidgetProps,
|
|
|
|
|
SliderComponentProps {
|
|
|
|
|
/** Color from theme.colors */
|
|
|
|
|
accentColor?: string;
|
|
|
|
|
|
|
|
|
|
/** defaultValue for the slider */
|
|
|
|
|
defaultValue?: number;
|
|
|
|
|
|
|
|
|
|
/** isDirty meta property */
|
|
|
|
|
isDirty: boolean;
|
|
|
|
|
|
|
|
|
|
/** value meta property */
|
|
|
|
|
value: number;
|
|
|
|
|
|
|
|
|
|
/** onChangeEnd action selector */
|
|
|
|
|
onChange: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
class NumberSliderWidget extends BaseWidget<
|
|
|
|
|
NumberSliderWidgetProps,
|
|
|
|
|
WidgetState
|
|
|
|
|
> {
|
|
|
|
|
static getPropertyPaneContentConfig() {
|
|
|
|
|
return contentConfig;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static getPropertyPaneStyleConfig() {
|
|
|
|
|
return styleConfig;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
componentDidUpdate(prevProps: NumberSliderWidgetProps) {
|
|
|
|
|
/**
|
|
|
|
|
* If you change the defaultValue from the propertyPane
|
|
|
|
|
* or say an input widget you are basically resetting the widget
|
|
|
|
|
* therefore we reset the isDirty.
|
|
|
|
|
*/
|
|
|
|
|
if (
|
|
|
|
|
this.props.defaultValue !== prevProps.defaultValue &&
|
|
|
|
|
this.props.isDirty
|
|
|
|
|
) {
|
|
|
|
|
this.props.updateWidgetMetaProperty("isDirty", false);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-23 09:48:23 +00:00
|
|
|
static getDefaultPropertiesMap(): Record<string, string> {
|
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 15:56:50 +00:00
|
|
|
return {
|
|
|
|
|
value: "defaultValue",
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static getMetaPropertiesMap(): Record<string, unknown> {
|
|
|
|
|
return {
|
|
|
|
|
value: 0,
|
|
|
|
|
isDirty: false,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
onChangeEnd = (value: number) => {
|
|
|
|
|
if (this.props.value !== value) {
|
|
|
|
|
this.props.updateWidgetMetaProperty("value", value, {
|
|
|
|
|
triggerPropertyName: "onChange",
|
|
|
|
|
dynamicString: this.props.onChange,
|
|
|
|
|
event: {
|
|
|
|
|
type: EventType.ON_OPTION_CHANGE,
|
|
|
|
|
},
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Set isDirty to true when we change slider value
|
|
|
|
|
if (!this.props.isDirty) {
|
|
|
|
|
this.props.updateWidgetMetaProperty("isDirty", true);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
getSliderTooltip = (sliderValue: number) => {
|
|
|
|
|
/**
|
|
|
|
|
* Check if the step is in decimal if yes fix
|
|
|
|
|
* the slider tooltip to only one place decimal
|
|
|
|
|
*/
|
|
|
|
|
return this.props.step % 1 !== 0
|
|
|
|
|
? sliderValue.toFixed(1).toString()
|
|
|
|
|
: sliderValue.toString();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
getPageView() {
|
|
|
|
|
return (
|
|
|
|
|
<SliderComponent
|
|
|
|
|
color={this.props.accentColor || TAILWIND_COLORS.green["600"]}
|
|
|
|
|
disabled={this.props.isDisabled}
|
|
|
|
|
labelAlignment={this.props.labelAlignment}
|
|
|
|
|
labelPosition={this.props.labelPosition}
|
|
|
|
|
labelStyle={this.props.labelStyle}
|
|
|
|
|
labelText={this.props.labelText}
|
|
|
|
|
labelTextColor={this.props.labelTextColor}
|
|
|
|
|
labelTextSize={this.props.labelTextSize}
|
|
|
|
|
labelWidth={this.getLabelWidth()}
|
|
|
|
|
loading={this.props.isLoading}
|
|
|
|
|
// If showMarks is off don't show marks at all
|
|
|
|
|
marks={this.props.showMarksLabel ? this.props.marks : []}
|
|
|
|
|
max={this.props.max}
|
|
|
|
|
min={this.props.min}
|
|
|
|
|
name={this.props.widgetName}
|
|
|
|
|
onChangeEnd={this.onChangeEnd}
|
|
|
|
|
showMarksLabel={this.props.showMarksLabel}
|
|
|
|
|
sliderSize={this.props.sliderSize}
|
|
|
|
|
sliderTooltip={this.getSliderTooltip}
|
|
|
|
|
sliderValue={this.props.value}
|
|
|
|
|
step={this.props.step}
|
|
|
|
|
tooltipAlwaysOn={this.props.tooltipAlwaysOn || false}
|
|
|
|
|
/>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static getWidgetType() {
|
|
|
|
|
return "NUMBER_SLIDER_WIDGET";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default NumberSliderWidget;
|