diff --git a/redisinsight/ui/src/components/range-filter/RangeFilter.tsx b/redisinsight/ui/src/components/range-filter/RangeFilter.tsx
index 2d988f1072..173d06b279 100644
--- a/redisinsight/ui/src/components/range-filter/RangeFilter.tsx
+++ b/redisinsight/ui/src/components/range-filter/RangeFilter.tsx
@@ -14,6 +14,8 @@ export interface Props {
end: number
handleChangeStart: (value: number, shouldSentEventTelemetry: boolean) => void
handleChangeEnd: (value: number, shouldSentEventTelemetry: boolean) => void
+ handleUpdateRangeMax: (value: number) => void
+ handleUpdateRangeMin: (value: number) => void
handleResetFilter: () => void
}
@@ -26,7 +28,17 @@ function usePrevious(value: any) {
}
const RangeFilter = (props: Props) => {
- const { max, min, start, end, handleChangeStart, handleChangeEnd, handleResetFilter } = props
+ const {
+ max,
+ min,
+ start,
+ end,
+ handleChangeStart,
+ handleChangeEnd,
+ handleUpdateRangeMax,
+ handleUpdateRangeMin,
+ handleResetFilter
+ } = props
const [startVal, setStartVal] = useState(start)
const [endVal, setEndVal] = useState(end)
@@ -44,9 +56,10 @@ const RangeFilter = (props: Props) => {
const onChangeStart = useCallback(
({ target: { value } }) => {
- setStartVal(value)
+ const newValue = Math.min(+value, endVal - 1)
+ setStartVal(newValue)
},
- []
+ [endVal]
)
const onMouseUpStart = useCallback(
@@ -65,9 +78,10 @@ const RangeFilter = (props: Props) => {
const onChangeEnd = useCallback(
({ target: { value } }) => {
- setEndVal(value)
+ const newValue = Math.max(+value, startVal + 1)
+ setEndVal(newValue)
},
- []
+ [startVal]
)
useEffect(() => {
@@ -103,10 +117,10 @@ const RangeFilter = (props: Props) => {
useEffect(() => {
if (max && prevValue && prevValue.max !== max && end === prevValue.max) {
- handleChangeEnd(max, false)
+ handleUpdateRangeMax(max)
}
if (min && prevValue && prevValue.min !== min && start === prevValue.min) {
- handleChangeStart(min, false)
+ handleUpdateRangeMin(min)
}
}, [prevValue])
diff --git a/redisinsight/ui/src/components/range-filter/styles.module.scss b/redisinsight/ui/src/components/range-filter/styles.module.scss
index b8adf18293..197f029ca8 100644
--- a/redisinsight/ui/src/components/range-filter/styles.module.scss
+++ b/redisinsight/ui/src/components/range-filter/styles.module.scss
@@ -37,10 +37,16 @@
z-index: 1;
}
-.sliderRange {
- height: 5px;
+.rangeWrapper .sliderRange {
+ height: 1px;
background-color: var(--euiColorPrimary);
z-index: 2;
+ transform: translateY(2px);
+}
+
+.rangeWrapper:hover .sliderRange {
+ height: 5px;
+ transform: translateY(0px);
}
.sliderLeftValue,
@@ -56,6 +62,14 @@
margin-top: -30px;
}
+.rangeWrapper:hover .sliderLeftValue {
+ margin-top: -28px;
+}
+
+.rangeWrapper:hover .sliderRightValue {
+ margin-top: 22px;
+}
+
.sliderLeftValue.leftPosition {
transform: translateX(-100%);
}
@@ -96,14 +110,21 @@
}
.thumb::-moz-range-thumb {
- width: 2px;
+ width: 24px;
height: 12px;
- background-color: var(--euiColorPrimary);
border: none;
+ border-radius: 0;
cursor: ew-resize;
margin-top: 4px;
pointer-events: all;
position: relative;
+ background: transparent;
+ border-bottom: 1px solid var(--euiColorPrimary);
+ border-left: 1px solid var(--euiColorPrimary);
+}
+
+.rangeWrapper:hover .thumb::-moz-range-thumb {
+ border-bottom: 5px solid var(--euiColorPrimary);
}
.thumbZindex3::-moz-range-thumb {
@@ -111,24 +132,40 @@
}
.thumbZindex4::-moz-range-thumb {
- transform: translateY(8px);
+ transform: translateY(8px) rotate(180deg);
}
input[type='range']::-webkit-slider-thumb {
- width: 2px;
+ width: 24px;
height: 12px;
- background-color: var(--euiColorPrimary);
border: none;
+ border-radius: 0;
cursor: ew-resize;
margin-top: 4px;
pointer-events: all;
position: relative;
+ background: transparent;
+ border-bottom: 1px solid var(--euiColorPrimary);
+ border-left: 1px solid var(--euiColorPrimary);
+}
+
+.rangeWrapper:hover input[type='range']::-webkit-slider-thumb{
+ border-bottom: 5px solid var(--euiColorPrimary);
+ margin-top: 2px;
}
input[type='range']:first-child::-webkit-slider-thumb {
- transform: translateY(-4px);
+ transform: translateY(-5px);
}
input[type='range']:last-of-type::-webkit-slider-thumb {
- transform: translateY(8px);
+ transform: translateY(6px) rotate(180deg);
}
+
+.rangeWrapper:hover input[type='range']:first-child::-webkit-slider-thumb {
+ transform: translateY(-2px);
+}
+
+.rangeWrapper:hover input[type='range']:last-of-type::-webkit-slider-thumb {
+ transform: translateY(5px) rotate(180deg);
+}
\ No newline at end of file
diff --git a/redisinsight/ui/src/pages/browser/components/stream-details/StreamDetails/StreamDetails.tsx b/redisinsight/ui/src/pages/browser/components/stream-details/StreamDetails/StreamDetails.tsx
index 1a46cb8472..5171aa482b 100644
--- a/redisinsight/ui/src/pages/browser/components/stream-details/StreamDetails/StreamDetails.tsx
+++ b/redisinsight/ui/src/pages/browser/components/stream-details/StreamDetails/StreamDetails.tsx
@@ -173,6 +173,20 @@ const StreamDetails = (props: Props) => {
[lastEntryTimeStamp, firstEntryTimeStamp]
)
+ const handleUpdateRangeMin = useCallback(
+ (min: number) => {
+ dispatch(updateStart(min.toString()))
+ },
+ []
+ )
+
+ const handleUpdateRangeMax = useCallback(
+ (max: number) => {
+ dispatch(updateEnd(max.toString()))
+ },
+ []
+ )
+
useEffect(() => {
if (isNull(firstEntry)) {
dispatch(updateStart(''))
@@ -193,6 +207,14 @@ const StreamDetails = (props: Props) => {
return (
<>
+ {loading && (
+
+ )}
{shouldFilterRender ? (
{
handleChangeStart={handleChangeStartFilter}
handleChangeEnd={handleChangeEndFilter}
handleResetFilter={handleResetFilter}
+ handleUpdateRangeMax={handleUpdateRangeMax}
+ handleUpdateRangeMin={handleUpdateRangeMin}
/>
)
: (
@@ -218,14 +242,6 @@ const StreamDetails = (props: Props) => {
)}
data-test-id="stream-entries-container"
>
- {loading && (
-
- )}
{/*
*/}