@snack-uikit/fields 0.18.2-preview-734de100.0 → 0.18.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,15 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 0.18.2 (2024-04-22)
7
+
8
+ ### Only dependencies have been changed
9
+ * [@snack-uikit/list@0.11.0](https://github.com/cloud-ru-tech/snack-uikit/blob/master/packages/list/CHANGELOG.md)
10
+
11
+
12
+
13
+
14
+
6
15
  ## 0.18.1 (2024-04-18)
7
16
 
8
17
 
@@ -11,7 +11,7 @@ var __rest = (this && this.__rest) || function (s, e) {
11
11
  };
12
12
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
13
  import mergeRefs from 'merge-refs';
14
- import { forwardRef, useEffect, useMemo, useRef, useState } from 'react';
14
+ import { forwardRef, useEffect, useRef, useState } from 'react';
15
15
  import { InputPrivate, SIZE } from '@snack-uikit/input-private';
16
16
  import { Slider } from '@snack-uikit/slider';
17
17
  import { extractSupportProps } from '@snack-uikit/utils';
@@ -32,7 +32,6 @@ const getDefaultValue = (range, min, max, value) => {
32
32
  };
33
33
  export const FieldSlider = forwardRef((_a, ref) => {
34
34
  var { id, name, min, max, step, marks, showScaleBar = true, value: valueProp, range = false, disabled = false, readonly = false, onChange: onChangeProp, onFocus, onBlur, className, label, labelTooltip, labelTooltipPlacement, required, hint, showHintIcon, size = SIZE.S, postfixIcon, textInputFormatter } = _a, rest = __rest(_a, ["id", "name", "min", "max", "step", "marks", "showScaleBar", "value", "range", "disabled", "readonly", "onChange", "onFocus", "onBlur", "className", "label", "labelTooltip", "labelTooltipPlacement", "required", "hint", "showHintIcon", "size", "postfixIcon", "textInputFormatter"]);
35
- const hasMarksEqualToValues = useMemo(() => Object.entries(marks).every(([key, value]) => key === value), [marks]);
36
35
  const [value = getDefaultValue(range, min, max, valueProp), onChange] = useValueControl({
37
36
  value: valueProp,
38
37
  defaultValue: getDefaultValue(range, min, max, valueProp),
@@ -41,79 +40,46 @@ export const FieldSlider = forwardRef((_a, ref) => {
41
40
  const [textFieldInputValue, setTextFieldInputValue] = useState(getTextFieldValue(value, textInputFormatter));
42
41
  const localRef = useRef(null);
43
42
  const onTextFieldChange = (textFieldValue) => {
44
- const numValue = parseInt(textFieldValue);
45
- if (textFieldValue && Number.isNaN(numValue)) {
43
+ const numValue = Number(textFieldValue);
44
+ if (Number.isNaN(numValue)) {
46
45
  return;
47
46
  }
48
47
  setTextFieldInputValue(textFieldValue);
49
48
  };
50
- const handleNonEqualMarksSliderChange = (textFieldNumValue) => {
51
- const handleChange = (key) => {
52
- setTextFieldInputValue(String(marks[key]));
53
- onChange(Number(key));
54
- };
55
- const allowedValues = Object.entries(marks).map(([key, value]) => ({ key, value: parseInt(String(value)) }));
56
- const suitableEntry = allowedValues.find(entry => entry.value === textFieldNumValue);
57
- if (suitableEntry) {
58
- handleChange(suitableEntry.key);
59
- return;
60
- }
61
- const actualMin = parseInt(String(marks[min]));
62
- const actualMax = parseInt(String(marks[max]));
63
- if (textFieldNumValue < actualMin) {
64
- handleChange(min);
65
- return;
66
- }
67
- if (textFieldNumValue > actualMax) {
68
- handleChange(max);
49
+ const handleTextValueChange = () => {
50
+ const textFieldNumValue = Number(textFieldInputValue);
51
+ if (Number.isNaN(textFieldNumValue)) {
69
52
  return;
70
53
  }
71
- const { mark } = getClosestMark(textFieldNumValue, allowedValues, mark => mark.value);
72
- handleChange(mark.key);
73
- };
74
- const handleEqualMarksSliderChange = (textFieldNumValue) => {
75
- const handleChange = (value) => {
76
- setTextFieldInputValue(String(value));
77
- onChange(value);
78
- };
79
54
  if (textFieldNumValue < min) {
80
- handleChange(min);
55
+ setTextFieldInputValue(String(min));
56
+ onChange(min);
81
57
  return;
82
58
  }
83
59
  if (textFieldNumValue > max) {
84
- handleChange(max);
60
+ setTextFieldInputValue(String(max));
61
+ onChange(max);
85
62
  return;
86
63
  }
87
64
  if (step === null) {
88
65
  const allowedValues = Object.keys(marks).map(Number);
89
66
  if (allowedValues.includes(textFieldNumValue)) {
90
- setTextFieldInputValue(String(textFieldNumValue));
91
- handleChange(textFieldNumValue);
67
+ onChange(textFieldNumValue);
92
68
  return;
93
69
  }
94
- const { mark } = getClosestMark(textFieldNumValue, allowedValues, mark => mark);
95
- handleChange(mark);
70
+ const { mark } = getClosestMark(textFieldNumValue, allowedValues);
71
+ setTextFieldInputValue(String(mark));
72
+ onChange(mark);
96
73
  return;
97
74
  }
98
75
  const allowedValues = generateAllowedValues(min, max, step);
99
76
  if (allowedValues.includes(textFieldNumValue)) {
100
- handleChange(textFieldNumValue);
77
+ onChange(textFieldNumValue);
101
78
  return;
102
79
  }
103
- const { mark } = getClosestMark(textFieldNumValue, allowedValues, mark => mark);
104
- handleChange(mark);
105
- };
106
- const handleTextValueChange = () => {
107
- const textFieldNumValue = parseInt(textFieldInputValue);
108
- if (Number.isNaN(textFieldNumValue)) {
109
- return;
110
- }
111
- if (hasMarksEqualToValues) {
112
- handleEqualMarksSliderChange(textFieldNumValue);
113
- }
114
- else {
115
- handleNonEqualMarksSliderChange(textFieldNumValue);
116
- }
80
+ const { mark } = getClosestMark(textFieldNumValue, allowedValues);
81
+ setTextFieldInputValue(String(mark));
82
+ onChange(mark);
117
83
  };
118
84
  const onTextFieldBlur = (e) => {
119
85
  onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);
@@ -1,4 +1,4 @@
1
- export declare const getClosestMark: <T>(value: number, marks: T[], getMarkValue: (value: T) => number) => {
1
+ export declare const getClosestMark: (value: number, marks: number[]) => {
2
2
  lowestDiff: number;
3
- mark: T;
3
+ mark: number;
4
4
  };
@@ -1,6 +1,6 @@
1
1
  const getDiff = (value, mark) => Math.abs(mark - value);
2
- export const getClosestMark = (value, marks, getMarkValue) => marks.reduce((accResult, mark) => {
3
- const diff = getDiff(value, getMarkValue(mark));
2
+ export const getClosestMark = (value, marks) => marks.reduce((accResult, mark) => {
3
+ const diff = getDiff(value, mark);
4
4
  if (diff < accResult.lowestDiff) {
5
5
  return {
6
6
  lowestDiff: diff,
@@ -9,6 +9,6 @@ export const getClosestMark = (value, marks, getMarkValue) => marks.reduce((accR
9
9
  }
10
10
  return accResult;
11
11
  }, {
12
- lowestDiff: getDiff(value, getMarkValue(marks[0])),
12
+ lowestDiff: getDiff(value, marks[0]),
13
13
  mark: marks[0],
14
14
  });
package/package.json CHANGED
@@ -4,7 +4,7 @@
4
4
  "access": "public"
5
5
  },
6
6
  "title": "Fields",
7
- "version": "0.18.2-preview-734de100.0",
7
+ "version": "0.18.2",
8
8
  "sideEffects": [
9
9
  "*.css",
10
10
  "*.woff",
@@ -37,9 +37,9 @@
37
37
  "@snack-uikit/droplist": "0.13.14",
38
38
  "@snack-uikit/icons": "0.20.1",
39
39
  "@snack-uikit/input-private": "3.1.1",
40
- "@snack-uikit/list": "0.10.1-preview-734de100.0",
40
+ "@snack-uikit/list": "0.11.0",
41
41
  "@snack-uikit/scroll": "0.5.2",
42
- "@snack-uikit/slider": "0.1.8-preview-734de100.0",
42
+ "@snack-uikit/slider": "0.1.7",
43
43
  "@snack-uikit/tag": "0.8.2",
44
44
  "@snack-uikit/tooltip": "0.13.1",
45
45
  "@snack-uikit/truncate-string": "0.4.12",
@@ -56,5 +56,5 @@
56
56
  "peerDependencies": {
57
57
  "@snack-uikit/locale": "*"
58
58
  },
59
- "gitHead": "98a3d3899805696c6552050bef3b4b13391672e0"
59
+ "gitHead": "082743508cd64cdc90ed11d2ea51280b5cab19de"
60
60
  }
@@ -1,5 +1,5 @@
1
1
  import mergeRefs from 'merge-refs';
2
- import { FocusEvent, forwardRef, KeyboardEvent, ReactElement, useEffect, useMemo, useRef, useState } from 'react';
2
+ import { FocusEvent, forwardRef, KeyboardEvent, ReactElement, useEffect, useRef, useState } from 'react';
3
3
 
4
4
  import { InputPrivate, InputPrivateProps, SIZE } from '@snack-uikit/input-private';
5
5
  import { Slider, SliderProps as SliderComponentProps } from '@snack-uikit/slider';
@@ -81,8 +81,6 @@ export const FieldSlider = forwardRef<HTMLInputElement, FieldSliderProps>(
81
81
  },
82
82
  ref,
83
83
  ) => {
84
- const hasMarksEqualToValues = useMemo(() => Object.entries(marks).every(([key, value]) => key === value), [marks]);
85
-
86
84
  const [value = getDefaultValue(range, min, max, valueProp), onChange] = useValueControl<number | number[]>({
87
85
  value: valueProp,
88
86
  defaultValue: getDefaultValue(range, min, max, valueProp),
@@ -95,97 +93,54 @@ export const FieldSlider = forwardRef<HTMLInputElement, FieldSliderProps>(
95
93
  const localRef = useRef<HTMLInputElement>(null);
96
94
 
97
95
  const onTextFieldChange = (textFieldValue: string) => {
98
- const numValue = parseInt(textFieldValue);
99
-
100
- if (textFieldValue && Number.isNaN(numValue)) {
96
+ const numValue = Number(textFieldValue);
97
+ if (Number.isNaN(numValue)) {
101
98
  return;
102
99
  }
103
100
 
104
101
  setTextFieldInputValue(textFieldValue);
105
102
  };
106
103
 
107
- const handleNonEqualMarksSliderChange = (textFieldNumValue: number) => {
108
- const handleChange = (key: string | number) => {
109
- setTextFieldInputValue(String(marks[key]));
110
- onChange(Number(key));
111
- };
112
-
113
- const allowedValues = Object.entries(marks).map(([key, value]) => ({ key, value: parseInt(String(value)) }));
114
- const suitableEntry = allowedValues.find(entry => entry.value === textFieldNumValue);
115
-
116
- if (suitableEntry) {
117
- handleChange(suitableEntry.key);
118
- return;
119
- }
120
-
121
- const actualMin = parseInt(String(marks[min]));
122
- const actualMax = parseInt(String(marks[max]));
123
-
124
- if (textFieldNumValue < actualMin) {
125
- handleChange(min);
126
- return;
127
- }
128
-
129
- if (textFieldNumValue > actualMax) {
130
- handleChange(max);
104
+ const handleTextValueChange = () => {
105
+ const textFieldNumValue = Number(textFieldInputValue);
106
+ if (Number.isNaN(textFieldNumValue)) {
131
107
  return;
132
108
  }
133
109
 
134
- const { mark } = getClosestMark(textFieldNumValue, allowedValues, mark => mark.value);
135
- handleChange(mark.key);
136
- };
137
-
138
- const handleEqualMarksSliderChange = (textFieldNumValue: number) => {
139
- const handleChange = (value: number) => {
140
- setTextFieldInputValue(String(value));
141
- onChange(value);
142
- };
143
-
144
110
  if (textFieldNumValue < min) {
145
- handleChange(min);
111
+ setTextFieldInputValue(String(min));
112
+ onChange(min);
146
113
  return;
147
114
  }
148
115
 
149
116
  if (textFieldNumValue > max) {
150
- handleChange(max);
117
+ setTextFieldInputValue(String(max));
118
+ onChange(max);
151
119
  return;
152
120
  }
153
121
 
154
122
  if (step === null) {
155
123
  const allowedValues = Object.keys(marks).map(Number);
156
124
  if (allowedValues.includes(textFieldNumValue)) {
157
- setTextFieldInputValue(String(textFieldNumValue));
158
- handleChange(textFieldNumValue);
125
+ onChange(textFieldNumValue);
159
126
  return;
160
127
  }
161
128
 
162
- const { mark } = getClosestMark(textFieldNumValue, allowedValues, mark => mark);
163
- handleChange(mark);
129
+ const { mark } = getClosestMark(textFieldNumValue, allowedValues);
130
+ setTextFieldInputValue(String(mark));
131
+ onChange(mark);
164
132
  return;
165
133
  }
166
134
 
167
135
  const allowedValues = generateAllowedValues(min, max, step);
168
136
  if (allowedValues.includes(textFieldNumValue)) {
169
- handleChange(textFieldNumValue);
170
- return;
171
- }
172
-
173
- const { mark } = getClosestMark(textFieldNumValue, allowedValues, mark => mark);
174
- handleChange(mark);
175
- };
176
-
177
- const handleTextValueChange = () => {
178
- const textFieldNumValue = parseInt(textFieldInputValue);
179
-
180
- if (Number.isNaN(textFieldNumValue)) {
137
+ onChange(textFieldNumValue);
181
138
  return;
182
139
  }
183
140
 
184
- if (hasMarksEqualToValues) {
185
- handleEqualMarksSliderChange(textFieldNumValue);
186
- } else {
187
- handleNonEqualMarksSliderChange(textFieldNumValue);
188
- }
141
+ const { mark } = getClosestMark(textFieldNumValue, allowedValues);
142
+ setTextFieldInputValue(String(mark));
143
+ onChange(mark);
189
144
  };
190
145
 
191
146
  const onTextFieldBlur = (e: FocusEvent<HTMLInputElement, Element>) => {
@@ -1,13 +1,9 @@
1
1
  const getDiff = (value: number, mark: number): number => Math.abs(mark - value);
2
2
 
3
- export const getClosestMark = <T>(
4
- value: number,
5
- marks: T[],
6
- getMarkValue: (value: T) => number,
7
- ): { lowestDiff: number; mark: T } =>
3
+ export const getClosestMark = (value: number, marks: number[]): { lowestDiff: number; mark: number } =>
8
4
  marks.reduce(
9
5
  (accResult, mark) => {
10
- const diff = getDiff(value, getMarkValue(mark));
6
+ const diff = getDiff(value, mark);
11
7
  if (diff < accResult.lowestDiff) {
12
8
  return {
13
9
  lowestDiff: diff,
@@ -18,7 +14,7 @@ export const getClosestMark = <T>(
18
14
  return accResult;
19
15
  },
20
16
  {
21
- lowestDiff: getDiff(value, getMarkValue(marks[0])),
17
+ lowestDiff: getDiff(value, marks[0]),
22
18
  mark: marks[0],
23
19
  },
24
20
  );