Skip to content

Commit 9567f33

Browse files
committed
feat(slider): update slider and range slider
1 parent 4af64eb commit 9567f33

File tree

13 files changed

+101
-241
lines changed

13 files changed

+101
-241
lines changed

packages/pluggableWidgets/range-slider-web/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66

77
## [Unreleased]
88

9+
### Breaking Changed
10+
11+
- We updated rc-slider library to @rc-component/slider. This is a major version upgrade of rc-slider that might break current custom styling.
12+
913
## [2.1.4] - 2024-08-28
1014

1115
### Changed

packages/pluggableWidgets/range-slider-web/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@
4444
},
4545
"dependencies": {
4646
"@mendix/widget-plugin-component-kit": "workspace:*",
47-
"classnames": "^2.5.1",
48-
"rc-slider": "^8.7.1",
49-
"rc-tooltip": "^3.7.3"
47+
"@rc-component/slider": "^1.0.1",
48+
"@rc-component/tooltip": "^1.3.3",
49+
"classnames": "^2.5.1"
5050
},
5151
"devDependencies": {
5252
"@mendix/automation-utils": "workspace:*",

packages/pluggableWidgets/range-slider-web/src/RangeSlider.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { ReactNode } from "react";
22
import { RangeSliderContainerProps } from "../typings/RangeSliderProps";
3-
import "rc-slider/assets/index.css";
4-
import "rc-tooltip/assets/bootstrap.css";
3+
import "@rc-component/slider/assets/index.css";
4+
import "@rc-component/tooltip/assets/bootstrap.css";
55
import "./ui/RangeSlider.scss";
66
import { Container } from "./components/Container";
77

packages/pluggableWidgets/range-slider-web/src/components/Container.tsx

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import { RangeSliderContainerProps } from "../../typings/RangeSliderProps";
33
import { useNumber } from "../utils/useNumber";
44
import { RangeSlider as RangeComponent } from "./RangeSlider";
55
import { useOnChangeDebounced } from "../utils/useOnChangeDebounced";
6-
import { createHandleGenerator } from "../utils/createHandleGenerator";
76
import { useMarks } from "../utils/useMarks";
87
import { getStyleProp, isVertical, maxProp, minProp, stepProp } from "../utils/prop-utils";
98
import { useScheduleUpdateOnce } from "@mendix/widget-plugin-hooks/useScheduleUpdateOnce";
9+
import { HandleTooltip } from "./TooltipHandler";
1010

1111
export function Container(props: RangeSliderContainerProps): ReactElement {
1212
const min = useNumber(minProp(props));
@@ -54,15 +54,8 @@ function InnerContainer(props: InnerContainerProps): ReactElement {
5454
heightUnit: props.heightUnit
5555
});
5656

57-
const handle = createHandleGenerator({
58-
tooltipLower: props.tooltipLower,
59-
tooltipUpper: props.tooltipUpper,
60-
showTooltip: props.showTooltip,
61-
tooltipTypeLower: props.tooltipTypeLower,
62-
tooltipTypeUpper: props.tooltipTypeUpper,
63-
tooltipAlwaysVisible: props.tooltipAlwaysVisible,
64-
sliderRef
65-
});
57+
const tooltipTypeCheck = [props.tooltipTypeLower, props.tooltipTypeUpper];
58+
const tooltipValue = [props.tooltipLower, props.tooltipUpper];
6659

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

@@ -78,7 +71,21 @@ function InnerContainer(props: InnerContainerProps): ReactElement {
7871
marks={marks}
7972
min={props.min}
8073
max={props.max}
81-
handle={handle}
74+
handleRender={(node, handleProps) => {
75+
const isCustomText = tooltipTypeCheck[handleProps.index] === "customText";
76+
const displayValue = isCustomText ? (tooltipValue[handleProps.index]?.value ?? "") : handleProps.value;
77+
return (
78+
<HandleTooltip
79+
value={displayValue}
80+
index={handleProps.index}
81+
visible={handleProps.dragging}
82+
sliderRef={sliderRef}
83+
{...props}
84+
>
85+
{node}
86+
</HandleTooltip>
87+
);
88+
}}
8289
ref={sliderRef}
8390
/>
8491
);

packages/pluggableWidgets/range-slider-web/src/components/RangeSlider.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
import { CSSProperties, forwardRef, ReactElement, RefObject } from "react";
2-
import { Range, RangeProps } from "rc-slider";
2+
import Slider, { SliderProps } from "@rc-component/slider";
33
import classNames from "classnames";
4-
5-
export interface RangeSliderProps extends RangeProps {
4+
export interface RangeSliderProps extends SliderProps {
65
classNameSlider?: string;
76
rootStyle?: CSSProperties;
87
}
@@ -23,7 +22,7 @@ export const RangeSlider = forwardRef(
2322
className
2423
)}
2524
>
26-
<Range className={classNameSlider} {...rcRangeProps} />
25+
<Slider range className={classNameSlider} {...rcRangeProps} />
2726
</div>
2827
)
2928
);
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import Tooltip from "@rc-component/tooltip";
2+
import { ReactElement, RefObject } from "react";
3+
4+
interface HandleTooltipProps {
5+
showTooltip: boolean;
6+
tooltipAlwaysVisible: boolean;
7+
sliderRef: RefObject<HTMLDivElement | null>;
8+
visible: boolean;
9+
value: string | number;
10+
index: number;
11+
children: ReactElement;
12+
}
13+
14+
export function HandleTooltip(props: HandleTooltipProps): ReactElement | null {
15+
const { showTooltip, tooltipAlwaysVisible, sliderRef, visible, value, index, children } = props;
16+
if (!showTooltip && !sliderRef.current) {
17+
return null;
18+
}
19+
return (
20+
<Tooltip
21+
getTooltipContainer={() => sliderRef.current!}
22+
prefixCls="rc-slider-tooltip"
23+
overlay={value}
24+
trigger={["hover", "click", "focus"]}
25+
visible={tooltipAlwaysVisible || visible}
26+
placement="top"
27+
mouseLeaveDelay={0}
28+
key={`${index}${value}`}
29+
>
30+
{children}
31+
</Tooltip>
32+
);
33+
}

packages/pluggableWidgets/range-slider-web/src/ui/RangeSlider.scss

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
@use "~rc-slider/assets/index.css";
2-
@use "~rc-tooltip/assets/bootstrap.css";
1+
@use "~@rc-component/slider/assets/index.css";
2+
@use "~@rc-component/tooltip/assets/bootstrap.css";
33

44
.widget-range-slider {
55
padding: 4px 8px;

packages/pluggableWidgets/range-slider-web/src/utils/createHandleGenerator.tsx

Lines changed: 0 additions & 64 deletions
This file was deleted.

packages/pluggableWidgets/range-slider-web/src/utils/marks.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
export interface Marks {
2-
[value: number]: string;
3-
}
1+
import { MarkObj } from "@rc-component/slider/lib/Marks";
2+
3+
export type Marks = Record<string | number, React.ReactNode | MarkObj>;
44

55
export interface CreateMarksParams {
66
numberOfMarks: number;

packages/pluggableWidgets/slider-web/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66

77
## [Unreleased]
88

9+
### Changed
10+
11+
- We increase the rc-slider library version dependencies to support react 19.
12+
913
## [2.1.4] - 2024-08-28
1014

1115
### Changed

0 commit comments

Comments
 (0)