Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/pluggableWidgets/range-slider-web/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),

## [Unreleased]

### Breaking changes

- We updated rc-slider library to @rc-component/slider. This is a major version upgrade of rc-slider that might break current custom styling.

## [2.1.4] - 2024-08-28

### Changed
Expand Down
6 changes: 3 additions & 3 deletions packages/pluggableWidgets/range-slider-web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,9 @@
},
"dependencies": {
"@mendix/widget-plugin-component-kit": "workspace:*",
"classnames": "^2.5.1",
"rc-slider": "^8.7.1",
"rc-tooltip": "^3.7.3"
"@rc-component/slider": "^1.0.1",
"@rc-component/tooltip": "^1.3.3",
"classnames": "^2.5.1"
},
"devDependencies": {
"@mendix/automation-utils": "workspace:*",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ReactNode } from "react";
import { RangeSliderContainerProps } from "../typings/RangeSliderProps";
import "rc-slider/assets/index.css";
import "rc-tooltip/assets/bootstrap.css";
import "@rc-component/slider/assets/index.css";
import "@rc-component/tooltip/assets/bootstrap.css";
import "./ui/RangeSlider.scss";
import { Container } from "./components/Container";

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,10 @@ import { RangeSliderContainerProps } from "../../typings/RangeSliderProps";
import { useNumber } from "../utils/useNumber";
import { RangeSlider as RangeComponent } from "./RangeSlider";
import { useOnChangeDebounced } from "../utils/useOnChangeDebounced";
import { createHandleGenerator } from "../utils/createHandleGenerator";
import { useMarks } from "../utils/useMarks";
import { getStyleProp, isVertical, maxProp, minProp, stepProp } from "../utils/prop-utils";
import { useScheduleUpdateOnce } from "@mendix/widget-plugin-hooks/useScheduleUpdateOnce";
import { HandleTooltip } from "./TooltipHandler";

export function Container(props: RangeSliderContainerProps): ReactElement {
const min = useNumber(minProp(props));
Expand Down Expand Up @@ -54,15 +54,8 @@ function InnerContainer(props: InnerContainerProps): ReactElement {
heightUnit: props.heightUnit
});

const handle = createHandleGenerator({
tooltipLower: props.tooltipLower,
tooltipUpper: props.tooltipUpper,
showTooltip: props.showTooltip,
tooltipTypeLower: props.tooltipTypeLower,
tooltipTypeUpper: props.tooltipTypeUpper,
tooltipAlwaysVisible: props.tooltipAlwaysVisible,
sliderRef
});
const tooltipTypeCheck = [props.tooltipTypeLower, props.tooltipTypeUpper];
const tooltipValue = [props.tooltipLower, props.tooltipUpper];

useScheduleUpdateOnce(() => lowerBoundAttribute.status === "available");

Expand All @@ -78,7 +71,21 @@ function InnerContainer(props: InnerContainerProps): ReactElement {
marks={marks}
min={props.min}
max={props.max}
handle={handle}
handleRender={(node, handleProps) => {
const isCustomText = tooltipTypeCheck[handleProps.index] === "customText";
const displayValue = isCustomText ? (tooltipValue[handleProps.index]?.value ?? "") : handleProps.value;
return (
<HandleTooltip
value={displayValue}
index={handleProps.index}
visible={handleProps.dragging}
sliderRef={sliderRef}
{...props}
>
{node}
</HandleTooltip>
);
}}
ref={sliderRef}
/>
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
import { CSSProperties, forwardRef, ReactElement, RefObject } from "react";
import { Range, RangeProps } from "rc-slider";
import Slider, { SliderProps } from "@rc-component/slider";
import classNames from "classnames";

export interface RangeSliderProps extends RangeProps {
export interface RangeSliderProps extends SliderProps {
classNameSlider?: string;
rootStyle?: CSSProperties;
}
Expand All @@ -23,7 +22,7 @@ export const RangeSlider = forwardRef(
className
)}
>
<Range className={classNameSlider} {...rcRangeProps} />
<Slider range className={classNameSlider} {...rcRangeProps} />
</div>
)
);
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import Tooltip from "@rc-component/tooltip";
import { ReactElement, RefObject } from "react";

interface HandleTooltipProps {
showTooltip: boolean;
tooltipAlwaysVisible: boolean;
sliderRef: RefObject<HTMLDivElement | null>;
visible: boolean;
value: string | number;
index: number;
children: ReactElement;
}

export function HandleTooltip(props: HandleTooltipProps): ReactElement | null {
const { showTooltip, tooltipAlwaysVisible, sliderRef, visible, value, index, children } = props;
if (!showTooltip && !sliderRef.current) {
return null;
}
return (
<Tooltip
getTooltipContainer={() => sliderRef.current!}
prefixCls="rc-slider-tooltip"
overlay={value}
trigger={["hover", "click", "focus"]}
visible={tooltipAlwaysVisible || visible}
placement="top"
mouseLeaveDelay={0}
key={`${index}${value}`}
>
{children}
</Tooltip>
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ exports[`RangeSlider renders horizontal RangeSlider correctly 1`] = `
class="widget-range-slider"
>
<div
class="rc-slider"
class="rc-slider rc-slider-horizontal"
>
<div
class="rc-slider-rail"
Expand All @@ -20,6 +20,7 @@ exports[`RangeSlider renders horizontal RangeSlider correctly 1`] = `
/>
<div
aria-disabled="false"
aria-orientation="horizontal"
aria-valuemax="100"
aria-valuemin="-100"
aria-valuenow="-20"
Expand All @@ -30,6 +31,7 @@ exports[`RangeSlider renders horizontal RangeSlider correctly 1`] = `
/>
<div
aria-disabled="false"
aria-orientation="horizontal"
aria-valuemax="100"
aria-valuemin="-100"
aria-valuenow="30"
Expand All @@ -38,9 +40,6 @@ exports[`RangeSlider renders horizontal RangeSlider correctly 1`] = `
style="left: 65%; transform: translateX(-50%);"
tabindex="0"
/>
<div
class="rc-slider-mark"
/>
</div>
</div>
</DocumentFragment>
Expand All @@ -52,7 +51,7 @@ exports[`RangeSlider renders markers correctly 1`] = `
class="widget-range-slider"
>
<div
class="rc-slider rc-slider-with-marks"
class="rc-slider rc-slider-horizontal rc-slider-with-marks"
>
<div
class="rc-slider-rail"
Expand All @@ -66,27 +65,28 @@ exports[`RangeSlider renders markers correctly 1`] = `
>
<span
class="rc-slider-dot"
style="left: 0%;"
style="left: 0%; transform: translateX(-50%);"
/>
<span
class="rc-slider-dot"
style="left: 25%;"
style="left: 25%; transform: translateX(-50%);"
/>
<span
class="rc-slider-dot rc-slider-dot-active"
style="left: 50%;"
style="left: 50%; transform: translateX(-50%);"
/>
<span
class="rc-slider-dot"
style="left: 75%;"
style="left: 75%; transform: translateX(-50%);"
/>
<span
class="rc-slider-dot"
style="left: 100%;"
style="left: 100%; transform: translateX(-50%);"
/>
</div>
<div
aria-disabled="false"
aria-orientation="horizontal"
aria-valuemax="100"
aria-valuemin="-100"
aria-valuenow="-20"
Expand All @@ -97,6 +97,7 @@ exports[`RangeSlider renders markers correctly 1`] = `
/>
<div
aria-disabled="false"
aria-orientation="horizontal"
aria-valuemax="100"
aria-valuemin="-100"
aria-valuenow="30"
Expand All @@ -110,31 +111,31 @@ exports[`RangeSlider renders markers correctly 1`] = `
>
<span
class="rc-slider-mark-text"
style="transform: translateX(-50%); left: 0%;"
style="left: 0%; transform: translateX(-50%);"
>
-100
</span>
<span
class="rc-slider-mark-text"
style="transform: translateX(-50%); left: 25%;"
style="left: 25%; transform: translateX(-50%);"
>
-50
</span>
<span
class="rc-slider-mark-text rc-slider-mark-text-active"
style="transform: translateX(-50%); left: 50%;"
style="left: 50%; transform: translateX(-50%);"
>
0
</span>
<span
class="rc-slider-mark-text"
style="transform: translateX(-50%); left: 75%;"
style="left: 75%; transform: translateX(-50%);"
>
50
</span>
<span
class="rc-slider-mark-text"
style="transform: translateX(-50%); left: 100%;"
style="left: 100%; transform: translateX(-50%);"
>
100
</span>
Expand Down Expand Up @@ -164,27 +165,26 @@ exports[`RangeSlider renders vertical RangeSlider correctly 1`] = `
/>
<div
aria-disabled="false"
aria-orientation="vertical"
aria-valuemax="100"
aria-valuemin="-100"
aria-valuenow="-20"
class="rc-slider-handle rc-slider-handle-1"
role="slider"
style="bottom: 40%; transform: translateY(+50%);"
style="bottom: 40%; transform: translateY(50%);"
tabindex="0"
/>
<div
aria-disabled="false"
aria-orientation="vertical"
aria-valuemax="100"
aria-valuemin="-100"
aria-valuenow="30"
class="rc-slider-handle rc-slider-handle-2"
role="slider"
style="bottom: 65%; transform: translateY(+50%);"
style="bottom: 65%; transform: translateY(50%);"
tabindex="0"
/>
<div
class="rc-slider-mark"
/>
</div>
</div>
</DocumentFragment>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
@use "~rc-slider/assets/index.css";
@use "~rc-tooltip/assets/bootstrap.css";
@use "~@rc-component/slider/assets/index.css";
@use "~@rc-component/tooltip/assets/bootstrap.css";

.widget-range-slider {
padding: 4px 8px;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
import { RangeSliderPreviewProps } from "../../typings/RangeSliderProps";

interface GetPreviewValuesParams extends Omit<RangeSliderPreviewProps, "class"> {}

interface PreviewValues {
min: number;
max: number;
value: [number, number];
step: number;
}

export function getPreviewValues(params: GetPreviewValuesParams): PreviewValues {
export function getPreviewValues(params: Omit<RangeSliderPreviewProps, "class">): PreviewValues {
const min = params.minValueType === "static" ? (params.staticMinimumValue ?? 0) : 0;
const max = params.maxValueType === "static" ? (params.staticMaximumValue ?? 100) : 100;
const step = params.stepSizeType === "static" ? (params.stepValue ?? 1) : 1;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
export interface Marks {
[value: number]: string;
}
import { MarkObj } from "@rc-component/slider/lib/Marks";
import { ReactNode } from "react";

export type Marks = Record<string | number, ReactNode | MarkObj>;

export interface CreateMarksParams {
numberOfMarks: number;
Expand Down
Loading
Loading