intelicoreact 1.8.10 → 1.8.12

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.
Files changed (259) hide show
  1. package/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.js +1 -0
  2. package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN_old.js +1 -0
  3. package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.js +1 -0
  4. package/dist/Atomic/FormElements/MultiSelect/MultiSelect.js +1 -0
  5. package/dist/Atomic/FormElements/NumericInput/NumericInput.js +1 -0
  6. package/dist/Atomic/FormElements/RadioGroup/RadioGroup.js +1 -0
  7. package/dist/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.js +1 -0
  8. package/dist/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.js +1 -0
  9. package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.js +1 -0
  10. package/dist/Atomic/FormElements/RangeInputs/RangeInputs.js +1 -1
  11. package/dist/Atomic/FormElements/RangeList/RangeList.js +1 -0
  12. package/dist/Atomic/FormElements/RangeList/partial/RangeListRow.js +1 -0
  13. package/dist/Atomic/FormElements/RangeSlider/RangeSlider.js +1 -0
  14. package/dist/Atomic/FormElements/RangeSlider2/RangeSlider2.js +1 -0
  15. package/dist/Atomic/FormElements/SwitchableRow/SwitchableRow.js +1 -0
  16. package/dist/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.js +1 -0
  17. package/dist/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.js +1 -0
  18. package/dist/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.js +1 -0
  19. package/dist/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.js +1 -0
  20. package/dist/Atomic/FormElements/TagListToDropdown/TagListToDropdown.js +1 -0
  21. package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.interface.ts +3 -3
  22. package/dist/Atomic/FormElements/TagsDropdown/TagsDropdown.js +1 -1
  23. package/dist/Atomic/FormElements/Text/Text.js +1 -0
  24. package/dist/Atomic/FormElements/Textarea/Textarea.js +1 -0
  25. package/dist/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js +1 -0
  26. package/dist/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.js +1 -0
  27. package/dist/Atomic/FormElements/VariantsListRadio/VariantsListRadio.js +1 -0
  28. package/dist/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.js +1 -0
  29. package/dist/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.js +1 -0
  30. package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.js +1 -0
  31. package/dist/Atomic/Layout/Header/Header.js +1 -0
  32. package/dist/Atomic/Layout/MainMenu/MainMenu.js +1 -0
  33. package/dist/Atomic/UI/AccordionTable/AccordionTable.js +1 -0
  34. package/dist/Atomic/UI/AccordionText/AccordionText.js +1 -0
  35. package/dist/Atomic/UI/Arrow/Arrow.js +1 -0
  36. package/dist/Atomic/UI/Box/Box.js +1 -0
  37. package/dist/Atomic/UI/Chart/Chart.js +1 -0
  38. package/dist/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.js +1 -0
  39. package/dist/Atomic/UI/Chart/partial/optionsConstructor.js +1 -0
  40. package/dist/Atomic/UI/CircleProgressBar/CircleProgressBar.js +1 -0
  41. package/dist/Atomic/UI/DateTime/DateTime.js +1 -0
  42. package/dist/Atomic/UI/DebugContainer/DebugContainer.js +1 -0
  43. package/dist/Atomic/UI/DebugContainer/useDebugContainer.js +1 -0
  44. package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.js +1 -0
  45. package/dist/Atomic/UI/MonoAccordion/MonoAccordion._test.js +1 -0
  46. package/dist/Atomic/UI/MonoAccordion/MonoAccordion.js +1 -0
  47. package/dist/Atomic/UI/PieChart/PieChart.js +1 -0
  48. package/dist/Atomic/UI/Table/Partials/TdCell.js +1 -0
  49. package/dist/Atomic/UI/Table/Partials/TdHeader.js +1 -0
  50. package/dist/Atomic/UI/Table/Partials/TdRow.js +1 -0
  51. package/dist/Atomic/UI/Table/Partials/TdTitle.js +1 -0
  52. package/dist/Atomic/UI/Table/Table.js +1 -0
  53. package/dist/Atomic/UI/Table/TdTypes/TdActions.js +1 -0
  54. package/dist/Atomic/UI/Table/TdTypes/TdPriority.js +1 -0
  55. package/dist/Atomic/UI/Table/TdTypes/TdRange.js +1 -0
  56. package/dist/Atomic/UI/Table/TdTypes/TdWeight.js +1 -0
  57. package/dist/Atomic/UI/Tag/Tag.interface.ts +1 -1
  58. package/dist/Atomic/UI/Tag/Tag.js +1 -1
  59. package/dist/Atomic/UI/TagList/TagList.js +1 -0
  60. package/dist/Atomic/UI/WizardStepper/constructor.js +1 -0
  61. package/dist/Classes/RESTAPI/partials/CredentialsProcessing.js +1 -0
  62. package/dist/Functions/customEventListener.js +1 -0
  63. package/dist/Functions/operations.js +1 -0
  64. package/dist/Functions/useFormTools/functions/RenderFields.js +1 -0
  65. package/dist/Functions/useFormTools/index.js +1 -0
  66. package/dist/Functions/usePasswordChecker.js +1 -0
  67. package/dist/Functions/utils.js +1 -0
  68. package/dist/Molecular/CustomIcons/components/AffiliateNetworks.js +1 -0
  69. package/dist/Molecular/CustomIcons/components/AlertCircle.js +1 -0
  70. package/dist/Molecular/CustomIcons/components/AppStore.js +1 -0
  71. package/dist/Molecular/CustomIcons/components/Arrow.js +1 -0
  72. package/dist/Molecular/CustomIcons/components/ArrowDown.js +1 -0
  73. package/dist/Molecular/CustomIcons/components/ArrowLeft.js +1 -0
  74. package/dist/Molecular/CustomIcons/components/ArrowRight.js +1 -0
  75. package/dist/Molecular/CustomIcons/components/ArrowUp.js +1 -0
  76. package/dist/Molecular/CustomIcons/components/Bell.js +1 -0
  77. package/dist/Molecular/CustomIcons/components/Button.js +1 -0
  78. package/dist/Molecular/CustomIcons/components/Campaigns.js +1 -0
  79. package/dist/Molecular/CustomIcons/components/Check.js +1 -0
  80. package/dist/Molecular/CustomIcons/components/Check2.js +1 -0
  81. package/dist/Molecular/CustomIcons/components/ChevronDown.js +1 -0
  82. package/dist/Molecular/CustomIcons/components/ChevronDownDisabled.js +1 -0
  83. package/dist/Molecular/CustomIcons/components/ChevronLeft.js +1 -0
  84. package/dist/Molecular/CustomIcons/components/ChevronRight.js +1 -0
  85. package/dist/Molecular/CustomIcons/components/ChevronUp.js +1 -0
  86. package/dist/Molecular/CustomIcons/components/ChevronUpDown.js +1 -0
  87. package/dist/Molecular/CustomIcons/components/Close.js +1 -0
  88. package/dist/Molecular/CustomIcons/components/ColumnsOrder.js +1 -0
  89. package/dist/Molecular/CustomIcons/components/Delete.js +1 -0
  90. package/dist/Molecular/CustomIcons/components/Edit.js +1 -0
  91. package/dist/Molecular/CustomIcons/components/Email.js +1 -0
  92. package/dist/Molecular/CustomIcons/components/FinturfLogo.js +1 -0
  93. package/dist/Molecular/CustomIcons/components/FinturfLogo2.js +1 -0
  94. package/dist/Molecular/CustomIcons/components/Flows.js +1 -0
  95. package/dist/Molecular/CustomIcons/components/Gift.js +1 -0
  96. package/dist/Molecular/CustomIcons/components/GoogleAuth.js +1 -0
  97. package/dist/Molecular/CustomIcons/components/GooglePlay.js +1 -0
  98. package/dist/Molecular/CustomIcons/components/HelpCircle.js +1 -0
  99. package/dist/Molecular/CustomIcons/components/HelpCircle2.js +1 -0
  100. package/dist/Molecular/CustomIcons/components/HelpCircleFilled.js +1 -0
  101. package/dist/Molecular/CustomIcons/components/Home.js +1 -0
  102. package/dist/Molecular/CustomIcons/components/Home2.js +1 -0
  103. package/dist/Molecular/CustomIcons/components/Key.js +1 -0
  104. package/dist/Molecular/CustomIcons/components/Landers.js +1 -0
  105. package/dist/Molecular/CustomIcons/components/Lock.js +1 -0
  106. package/dist/Molecular/CustomIcons/components/Mail.js +1 -0
  107. package/dist/Molecular/CustomIcons/components/Mastercard.js +1 -0
  108. package/dist/Molecular/CustomIcons/components/Minus.js +1 -0
  109. package/dist/Molecular/CustomIcons/components/Offers.js +1 -0
  110. package/dist/Molecular/CustomIcons/components/Pause.js +1 -0
  111. package/dist/Molecular/CustomIcons/components/PayPal.js +1 -0
  112. package/dist/Molecular/CustomIcons/components/PayPalLightLarge.js +1 -0
  113. package/dist/Molecular/CustomIcons/components/Phone.js +1 -0
  114. package/dist/Molecular/CustomIcons/components/Play.js +1 -0
  115. package/dist/Molecular/CustomIcons/components/Plus.js +1 -0
  116. package/dist/Molecular/CustomIcons/components/Profile.js +1 -0
  117. package/dist/Molecular/CustomIcons/components/QRCode.js +1 -0
  118. package/dist/Molecular/CustomIcons/components/Rectangle.js +1 -0
  119. package/dist/Molecular/CustomIcons/components/Revert.js +1 -0
  120. package/dist/Molecular/CustomIcons/components/Star.js +1 -0
  121. package/dist/Molecular/CustomIcons/components/Star2.js +1 -0
  122. package/dist/Molecular/CustomIcons/components/TrafficSources.js +1 -0
  123. package/dist/Molecular/CustomIcons/components/Trash.js +1 -0
  124. package/dist/Molecular/CustomIcons/components/TrashRed.js +1 -0
  125. package/dist/Molecular/CustomIcons/components/Triggers.js +1 -0
  126. package/dist/Molecular/CustomIcons/components/User.js +1 -0
  127. package/dist/Molecular/CustomIcons/components/Visa.js +1 -0
  128. package/dist/Molecular/CustomIcons/components/X.js +1 -0
  129. package/dist/Molecular/FormElement/FormElement.js +1 -0
  130. package/dist/Molecular/FormWithDependOn/FormWithDependOn.js +1 -0
  131. package/dist/Molecular/InputAddress/InputAddress.js +1 -0
  132. package/dist/Molecular/InputPassword/InputPassword.js +1 -0
  133. package/package.json +6 -13
  134. package/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.jsx +0 -18
  135. package/dist/Atomic/FormElements/FormattedRawSSN/FormattedRawSSN_old.jsx +0 -121
  136. package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.jsx +0 -507
  137. package/dist/Atomic/FormElements/MultiSelect/MultiSelect.jsx +0 -46
  138. package/dist/Atomic/FormElements/NumericInput/NumericInput.jsx +0 -337
  139. package/dist/Atomic/FormElements/RadioGroup/RadioGroup.jsx +0 -66
  140. package/dist/Atomic/FormElements/RadioGroupWithInput/RadioGroupWithInput.jsx +0 -78
  141. package/dist/Atomic/FormElements/RadioRowSwitcher/RadioRowSwitcher.jsx +0 -54
  142. package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.jsx +0 -183
  143. package/dist/Atomic/FormElements/RangeList/RangeList.jsx +0 -181
  144. package/dist/Atomic/FormElements/RangeList/partial/RangeListRow.jsx +0 -41
  145. package/dist/Atomic/FormElements/RangeSlider/RangeSlider.jsx +0 -449
  146. package/dist/Atomic/FormElements/RangeSlider2/RangeSlider2.jsx +0 -865
  147. package/dist/Atomic/FormElements/SwitchableRow/SwitchableRow.jsx +0 -37
  148. package/dist/Atomic/FormElements/SwitcherCheckbox/SwitcherCheckbox.jsx +0 -48
  149. package/dist/Atomic/FormElements/SwitcherRangeList/SwitcherRangeList.jsx +0 -62
  150. package/dist/Atomic/FormElements/SwitcherTagsDropdown/SwitcherTagsDropdown.jsx +0 -175
  151. package/dist/Atomic/FormElements/SwitcherTextarea/SwitcherTextarea.jsx +0 -65
  152. package/dist/Atomic/FormElements/TagListToDropdown/TagListToDropdown.jsx +0 -118
  153. package/dist/Atomic/FormElements/Text/Text.jsx +0 -126
  154. package/dist/Atomic/FormElements/Textarea/Textarea.jsx +0 -61
  155. package/dist/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.jsx +0 -181
  156. package/dist/Atomic/FormElements/TieredCheckboxes/partial/AccordionWithCheckbox.jsx +0 -60
  157. package/dist/Atomic/FormElements/VariantsListRadio/VariantsListRadio.jsx +0 -83
  158. package/dist/Atomic/FormElements/VariantsListRadio/partials/VariantsListRadioItem.jsx +0 -80
  159. package/dist/Atomic/FormElements/WidgetPseudoTable/WidgetPseudoTable.jsx +0 -103
  160. package/dist/Atomic/FormElements/WidgetWithSwitchableRows/WidgetWithSwitchableRows.jsx +0 -115
  161. package/dist/Atomic/Layout/Header/Header.jsx +0 -86
  162. package/dist/Atomic/UI/AccordionTable/AccordionTable.jsx +0 -250
  163. package/dist/Atomic/UI/AccordionText/AccordionText.jsx +0 -68
  164. package/dist/Atomic/UI/Arrow/Arrow.jsx +0 -134
  165. package/dist/Atomic/UI/Box/Box.jsx +0 -53
  166. package/dist/Atomic/UI/Chart/Chart.jsx +0 -178
  167. package/dist/Atomic/UI/Chart/partial/ChartTypeSwitcherIcon/ChartTypeSwitcherIcon.jsx +0 -78
  168. package/dist/Atomic/UI/Chart/partial/optionsConstructor.jsx +0 -334
  169. package/dist/Atomic/UI/CircleProgressBar/CircleProgressBar.jsx +0 -111
  170. package/dist/Atomic/UI/DateTime/DateTime.jsx +0 -57
  171. package/dist/Atomic/UI/DebugContainer/DebugContainer.jsx +0 -44
  172. package/dist/Atomic/UI/DebugContainer/useDebugContainer.jsx +0 -15
  173. package/dist/Atomic/UI/ExampleChartIntegration/ExampleChartIntegration.jsx +0 -223
  174. package/dist/Atomic/UI/MonoAccordion/MonoAccordion._test.jsx +0 -75
  175. package/dist/Atomic/UI/MonoAccordion/MonoAccordion.jsx +0 -86
  176. package/dist/Atomic/UI/PieChart/PieChart.jsx +0 -41
  177. package/dist/Atomic/UI/Table/Partials/TdCell.jsx +0 -87
  178. package/dist/Atomic/UI/Table/Partials/TdHeader.jsx +0 -36
  179. package/dist/Atomic/UI/Table/Partials/TdRow.jsx +0 -103
  180. package/dist/Atomic/UI/Table/Partials/TdTitle.jsx +0 -55
  181. package/dist/Atomic/UI/Table/Table.jsx +0 -63
  182. package/dist/Atomic/UI/Table/TdTypes/TdActions.jsx +0 -80
  183. package/dist/Atomic/UI/Table/TdTypes/TdPriority.jsx +0 -26
  184. package/dist/Atomic/UI/Table/TdTypes/TdRange.jsx +0 -13
  185. package/dist/Atomic/UI/Table/TdTypes/TdWeight.jsx +0 -56
  186. package/dist/Atomic/UI/TagList/TagList.jsx +0 -256
  187. package/dist/Atomic/UI/WizardStepper/constructor.jsx +0 -86
  188. package/dist/Classes/RESTAPI/partials/CredentialsProcessing.jsx +0 -254
  189. package/dist/Functions/customEventListener.jsx +0 -96
  190. package/dist/Functions/operations.jsx +0 -138
  191. package/dist/Functions/useFormTools/functions/RenderFields.jsx +0 -108
  192. package/dist/Functions/useFormTools/index.jsx +0 -777
  193. package/dist/Functions/usePasswordChecker.jsx +0 -128
  194. package/dist/Functions/utils.jsx +0 -492
  195. package/dist/Molecular/CustomIcons/components/AffiliateNetworks.jsx +0 -22
  196. package/dist/Molecular/CustomIcons/components/AlertCircle.jsx +0 -24
  197. package/dist/Molecular/CustomIcons/components/AppStore.jsx +0 -30
  198. package/dist/Molecular/CustomIcons/components/Arrow.jsx +0 -33
  199. package/dist/Molecular/CustomIcons/components/ArrowDown.jsx +0 -18
  200. package/dist/Molecular/CustomIcons/components/ArrowLeft.jsx +0 -23
  201. package/dist/Molecular/CustomIcons/components/ArrowRight.jsx +0 -23
  202. package/dist/Molecular/CustomIcons/components/ArrowUp.jsx +0 -18
  203. package/dist/Molecular/CustomIcons/components/Bell.jsx +0 -16
  204. package/dist/Molecular/CustomIcons/components/Button.jsx +0 -13
  205. package/dist/Molecular/CustomIcons/components/Campaigns.jsx +0 -17
  206. package/dist/Molecular/CustomIcons/components/Check.jsx +0 -15
  207. package/dist/Molecular/CustomIcons/components/Check2.jsx +0 -13
  208. package/dist/Molecular/CustomIcons/components/ChevronDown.jsx +0 -13
  209. package/dist/Molecular/CustomIcons/components/ChevronDownDisabled.jsx +0 -12
  210. package/dist/Molecular/CustomIcons/components/ChevronLeft.jsx +0 -12
  211. package/dist/Molecular/CustomIcons/components/ChevronRight.jsx +0 -12
  212. package/dist/Molecular/CustomIcons/components/ChevronUp.jsx +0 -12
  213. package/dist/Molecular/CustomIcons/components/ChevronUpDown.jsx +0 -28
  214. package/dist/Molecular/CustomIcons/components/Close.jsx +0 -15
  215. package/dist/Molecular/CustomIcons/components/ColumnsOrder.jsx +0 -18
  216. package/dist/Molecular/CustomIcons/components/Delete.jsx +0 -17
  217. package/dist/Molecular/CustomIcons/components/Edit.jsx +0 -16
  218. package/dist/Molecular/CustomIcons/components/Email.jsx +0 -32
  219. package/dist/Molecular/CustomIcons/components/FinturfLogo.jsx +0 -19
  220. package/dist/Molecular/CustomIcons/components/FinturfLogo2.jsx +0 -36
  221. package/dist/Molecular/CustomIcons/components/Flows.jsx +0 -16
  222. package/dist/Molecular/CustomIcons/components/Gift.jsx +0 -26
  223. package/dist/Molecular/CustomIcons/components/GoogleAuth.jsx +0 -30
  224. package/dist/Molecular/CustomIcons/components/GooglePlay.jsx +0 -30
  225. package/dist/Molecular/CustomIcons/components/HelpCircle.jsx +0 -20
  226. package/dist/Molecular/CustomIcons/components/HelpCircle2.jsx +0 -21
  227. package/dist/Molecular/CustomIcons/components/HelpCircleFilled.jsx +0 -20
  228. package/dist/Molecular/CustomIcons/components/Home.jsx +0 -17
  229. package/dist/Molecular/CustomIcons/components/Home2.jsx +0 -23
  230. package/dist/Molecular/CustomIcons/components/Key.jsx +0 -24
  231. package/dist/Molecular/CustomIcons/components/Landers.jsx +0 -21
  232. package/dist/Molecular/CustomIcons/components/Lock.jsx +0 -16
  233. package/dist/Molecular/CustomIcons/components/Mail.jsx +0 -27
  234. package/dist/Molecular/CustomIcons/components/Mastercard.jsx +0 -74
  235. package/dist/Molecular/CustomIcons/components/Minus.jsx +0 -26
  236. package/dist/Molecular/CustomIcons/components/Offers.jsx +0 -17
  237. package/dist/Molecular/CustomIcons/components/Pause.jsx +0 -29
  238. package/dist/Molecular/CustomIcons/components/PayPal.jsx +0 -42
  239. package/dist/Molecular/CustomIcons/components/PayPalLightLarge.jsx +0 -29
  240. package/dist/Molecular/CustomIcons/components/Phone.jsx +0 -31
  241. package/dist/Molecular/CustomIcons/components/Play.jsx +0 -26
  242. package/dist/Molecular/CustomIcons/components/Plus.jsx +0 -26
  243. package/dist/Molecular/CustomIcons/components/Profile.jsx +0 -17
  244. package/dist/Molecular/CustomIcons/components/QRCode.jsx +0 -30
  245. package/dist/Molecular/CustomIcons/components/Rectangle.jsx +0 -13
  246. package/dist/Molecular/CustomIcons/components/Revert.jsx +0 -14
  247. package/dist/Molecular/CustomIcons/components/Star.jsx +0 -15
  248. package/dist/Molecular/CustomIcons/components/Star2.jsx +0 -17
  249. package/dist/Molecular/CustomIcons/components/TrafficSources.jsx +0 -15
  250. package/dist/Molecular/CustomIcons/components/Trash.jsx +0 -16
  251. package/dist/Molecular/CustomIcons/components/TrashRed.jsx +0 -16
  252. package/dist/Molecular/CustomIcons/components/Triggers.jsx +0 -16
  253. package/dist/Molecular/CustomIcons/components/User.jsx +0 -26
  254. package/dist/Molecular/CustomIcons/components/Visa.jsx +0 -32
  255. package/dist/Molecular/CustomIcons/components/X.jsx +0 -13
  256. package/dist/Molecular/FormElement/FormElement.jsx +0 -52
  257. package/dist/Molecular/FormWithDependOn/FormWithDependOn.jsx +0 -161
  258. package/dist/Molecular/InputAddress/InputAddress.jsx +0 -641
  259. package/dist/Molecular/InputPassword/InputPassword.jsx +0 -50
@@ -1,865 +0,0 @@
1
- import cn from 'classnames';
2
-
3
- import {
4
- useEffect,
5
- useLayoutEffect,
6
- useMemo,
7
- useRef,
8
- useState,
9
- } from 'react';
10
- import { ChevronLeft, ChevronRight, Plus, X } from 'react-feather';
11
-
12
- import useIsMobile from '../../../Functions/useIsMobile/useIsMobile';
13
- import { compare } from '../../../Functions/utils';
14
-
15
- import './RangeSlider2.scss';
16
-
17
- const COMPONENT_CLASS = 'range-slider2';
18
- const { LEFT_COLLISSION, RIGHT_COLLISION, BOTH_COLLISION, NO_COLLISION }
19
- = Object.freeze({
20
- NO_COLLISION: 0,
21
- LEFT_COLLISSION: -1,
22
- RIGHT_COLLISION: 1,
23
- BOTH_COLLISION: 2,
24
- });
25
- const { ASSIGN_TO_LEFT, ASSIGN_TO_RIGHT } = Object.freeze({
26
- ASSIGN_TO_LEFT: -1,
27
- ASSIGN_TO_RIGHT: 1,
28
- });
29
-
30
- const POINT_VALUE_TYPES = Object.freeze({
31
- FROM: 'from',
32
- TO: 'to',
33
- BOTH: 'both',
34
- });
35
-
36
- export default function RangeSlider2({
37
- min = 300,
38
- max = 850,
39
- minRange = 50,
40
- dividersRange = 50,
41
- pointValueType = POINT_VALUE_TYPES.FROM,
42
- precision = 0,
43
- step = 5,
44
- className,
45
- value = [],
46
- onChange = () => {},
47
- transformDataOnConcat = (d1, d2) => {
48
- return [];
49
- },
50
- }) {
51
- const { isMobile } = useIsMobile();
52
- const [protectedValue, setProtectedValue] = useState([]);
53
-
54
- const trackRef = useRef(null);
55
- const addTriggerRef = useRef(null);
56
-
57
- const [trackWidth, setTrackWidth] = useState(0);
58
- const [trackPosition, setTrackPosition] = useState(0);
59
-
60
- const [mouseTrackPosition, setMouseTrackPosition] = useState(0);
61
-
62
- const prepareValue = (value) => {
63
- return Number.parseInt(Number.parseFloat(value) * 10 ** precision, 10) / 10 ** precision;
64
- };
65
-
66
- const [ranges, setRanges] = useState(value);
67
- const addRange = ({ from, to, label, value, data = [], id = null }) =>
68
- setRanges((ranges) => {
69
- if (!id) {
70
- id = (ranges?.length + 1) * -1;
71
- }
72
-
73
- return [
74
- ...ranges,
75
- {
76
- id,
77
- from,
78
- to,
79
- label,
80
- data,
81
- value: Number.isInteger(value) ? value : 0,
82
- },
83
- ].sort((a, b) => a.from - b.from);
84
- });
85
- const updateRange = ({ from, to, label, value, data, id }) =>
86
- setRanges((ranges) => {
87
- const newRanges = [...ranges];
88
- const range = newRanges?.find(({ id: rangeId }) => rangeId === id);
89
-
90
- if (range) {
91
- range.from = from ?? range?.from;
92
- range.to = to ?? range?.to;
93
- range.label = label ?? range?.label;
94
- range.value
95
- = value !== undefined
96
- ? Number.isInteger(value)
97
- ? value
98
- : 0
99
- : range?.value;
100
- range.data = data !== undefined ? data : range?.data;
101
- }
102
-
103
- return newRanges;
104
- });
105
- const updateRangesByTrigger = (trigger) => {
106
- const newValue = triggers?.find(({ id }) => id === trigger?.id)?.value;
107
- const oldValue = trigger?.value;
108
-
109
- const leftRange = ranges?.find(range => range?.to === oldValue);
110
- const rightRange = ranges?.find(range => range?.from === oldValue + 1);
111
-
112
- if (leftRange && rightRange) {
113
- updateRange({ from: leftRange?.from, to: newValue, id: leftRange?.id });
114
- updateRange({
115
- from: newValue + 1,
116
- to: rightRange?.to,
117
- id: rightRange?.id,
118
- });
119
- }
120
- };
121
- const splitRange = (score) => {
122
- const range = ranges?.find(
123
- ({ from, to }) => from + minRange <= score + 1 && score <= to - minRange,
124
- );
125
- if (!range) return;
126
-
127
- const { value = 0, label, data } = addTriggerFixedRange || {};
128
- addRange({
129
- value: assignValueToRange === ASSIGN_TO_RIGHT ? value : 0,
130
- data: assignValueToRange === ASSIGN_TO_RIGHT ? data : null,
131
- label,
132
- from: score + 1,
133
- to: range?.to,
134
- id: null,
135
- });
136
- updateRange({
137
- ...range,
138
- value: assignValueToRange === ASSIGN_TO_LEFT ? value : 0,
139
- data: assignValueToRange === ASSIGN_TO_LEFT ? data : null,
140
- label,
141
- to: score,
142
- });
143
-
144
- if (isAddTriggerFixed) unfixAddTrigger();
145
- };
146
- const concatRanges = (score) => {
147
- const [left, right] = ranges?.filter(
148
- ({ from, to }) => from === score + 1 || score === to,
149
- );
150
- const { data, value } = transformDataOnConcat(left, right);
151
-
152
- updateRange({ from: left?.from, to: right?.to, id: left?.id, data, value });
153
- removeRange(right?.id);
154
- };
155
- const removeRange = id =>
156
- setRanges(ranges => ranges?.filter(range => range?.id !== id));
157
- const clearRanges = () => setRanges([]);
158
-
159
- const [triggers, setTriggers] = useState([]);
160
- const addTrigger = (
161
- value,
162
- { isFixed = false, isHidden = false } = {},
163
- { withRange = true } = {},
164
- index = triggers.length,
165
- ) =>
166
- setTriggers((state) => {
167
- if (withRange) splitRange(value);
168
-
169
- const newState = [...state];
170
- const id = state?.length
171
- ? Math.max(...state?.map(({ id }) => id)) + 1
172
- : 0;
173
-
174
- newState.splice(index, 0, { id, value, isFixed, isHidden });
175
- return newState.sort((a, b) => (a.value < b.value ? -1 : 1));
176
- });
177
- const updateTrigger = (index, value) =>
178
- setTriggers((state) => {
179
- const newState = [...state];
180
- newState[index] = { ...newState[index], value };
181
- return newState;
182
- });
183
- const removeTrigger = index =>
184
- setTriggers((state) => {
185
- concatRanges(state[index]?.value);
186
-
187
- const newState = [...state];
188
- newState.splice(index, 1);
189
- return newState;
190
- });
191
- const clearTriggers = () => setTriggers([]);
192
- const getTriggerByScore = (score) => {
193
- return triggers?.find(({ value: triggerScore }) => triggerScore === score);
194
- };
195
-
196
- const [movingController, setMovingController] = useState(null);
197
-
198
- const [movingTrigger, setMovingTrigger] = useState(null);
199
- const [movingTriggerIndex, setMovingTriggerIndex] = useState(null);
200
- const [movingTriggerData, setMovingTriggerData] = useState(null);
201
- const [isTriggerMoved, setIsTriggerMoved] = useState(false);
202
- const [isMouseOverTrigger, setIsMouseOverTrigger] = useState(false);
203
- const setMouseOverTrigger = () => setIsMouseOverTrigger(true);
204
- const setMouseLeaveTrigger = () => setIsMouseOverTrigger(false);
205
- const [isMouseOverTrack, setIsMouseOverTrack] = useState(false);
206
- const setMouseOverTrack = () => setIsMouseOverTrack(true);
207
- const setMouseLeaveTrack = () => setIsMouseOverTrack(false);
208
-
209
- const isTriggerMoving = triggerIndex => triggerIndex === movingTriggerIndex;
210
-
211
- const [addTriggerFixedScore, setAddTriggerFixedScore] = useState(null);
212
- const [addTriggerFixedRange, setAddTriggerFixedRange] = useState(null);
213
- const [isAddTriggerFixed, setIsAddTriggerFixed] = useState(false);
214
- const [assignValueToRange, setAssignValueToRange] = useState(ASSIGN_TO_LEFT);
215
- const fixAddTrigger = (score, inRange) => {
216
- setAddTriggerFixedScore(score);
217
- setAddTriggerFixedRange(inRange);
218
- setIsAddTriggerFixed(true);
219
- };
220
- const unfixAddTrigger = (e) => {
221
- e?.stopPropagation();
222
- e?.preventDefault();
223
-
224
- setAddTriggerFixedScore(null);
225
- setAddTriggerFixedRange(null);
226
- setIsAddTriggerFixed(false);
227
- setAssignValueToRange(ASSIGN_TO_LEFT);
228
- };
229
-
230
- const [pointsPerPx, setPointsPerPx] = useState(0);
231
- const countPointsPerPx = (width) => {
232
- return (max - min) / width;
233
- };
234
-
235
- // GETTERS //
236
- const getTrackXByScore = (score) => {
237
- return (score - min) / pointsPerPx;
238
- };
239
- const getScoreByX = (x) => {
240
- let points = (x - trackPosition) * pointsPerPx + min;
241
- points -= points % step;
242
-
243
- if (points < min) points = min;
244
- if (points > max) points = max;
245
-
246
- return points - 1;
247
- };
248
-
249
- const getTriggerCollisionDirection = (index, points) => {
250
- if (index <= 0) return points;
251
-
252
- const [triggerBefore, triggerAfter] = [
253
- triggers?.[index - 1]?.value + minRange - 1,
254
- triggers?.[index + 1]?.value - minRange - 1,
255
- ];
256
-
257
- if (triggerBefore === triggerAfter) return BOTH_COLLISION;
258
- else if (points === triggerBefore) return LEFT_COLLISSION;
259
- else if (points === triggerAfter) return RIGHT_COLLISION;
260
- else return NO_COLLISION;
261
- };
262
- const getTriggerScore = (index, points) => {
263
- if (index <= 0) return points;
264
-
265
- const [triggerBefore, triggerAfter] = [
266
- triggers?.[index - 1]?.value + minRange - 1,
267
- triggers?.[index + 1]?.value - minRange - 1,
268
- ];
269
-
270
- if (points < triggerBefore) return triggerBefore;
271
- else if (points > triggerAfter) return triggerAfter;
272
- else return points;
273
- };
274
-
275
- const getAddTriggerCollisionDirection = (x) => {
276
- const triggerScore = getAddTriggerScore(x);
277
- const inRange = getInRange(triggerScore);
278
-
279
- if (!inRange) return 0;
280
-
281
- const { from, to } = inRange;
282
- const triggerBefore = from + minRange - 1;
283
- const triggerAfter = to - minRange - 1;
284
-
285
- if (triggerBefore === triggerAfter) return BOTH_COLLISION;
286
- else if (triggerScore <= triggerBefore) return LEFT_COLLISSION;
287
- else if (triggerScore >= triggerAfter) return RIGHT_COLLISION;
288
- else return NO_COLLISION;
289
- };
290
- const getAddTriggerPosition = () => {
291
- return isAddTriggerFixed
292
- ? getTrackXByScore(addTriggerFixedScore)
293
- : mouseTrackPosition;
294
- };
295
- const getAddTriggerScore = (x) => {
296
- const score = getScoreByX(x);
297
-
298
- let result = getRangesList()?.reduce((result, { from, to }) => {
299
- if (to - from + 1 <= 2 * minRange && from <= score && score <= to) {
300
- return null;
301
- }
302
-
303
- if (from <= score && score <= from + minRange) {
304
- return from + minRange - 1;
305
- }
306
- else if (to - minRange <= score && score <= to) {
307
- return to - minRange - 1;
308
- }
309
- else {
310
- return result;
311
- }
312
- }, score);
313
-
314
- if (!result) {
315
- const closestRange = getRangesList()
316
- ?.filter(({ from, to }) => to - from + 1 >= 2 * minRange)
317
- ?.reduce((result, range) => {
318
- const distance = Math.abs((range.to + range.from) / 2 - score);
319
- if (!result || distance < result?.distance) {
320
- return {
321
- ...range,
322
- distance,
323
- };
324
- }
325
-
326
- return result;
327
- }, null);
328
-
329
- if (closestRange) {
330
- if (closestRange?.to < score) result = closestRange?.to - minRange - 1;
331
- if (score < closestRange?.from)
332
- result = closestRange?.from + minRange - 1;
333
- }
334
- }
335
-
336
- return result;
337
- };
338
-
339
- const getRangesList = () => {
340
- return triggers
341
- .map(({ value }) => value)
342
- .sort()
343
- .reduce((result, score, i, scores) => {
344
- if (i !== 0) {
345
- result.push({
346
- from: scores[i - 1],
347
- to: score,
348
- });
349
- }
350
- return result;
351
- }, []);
352
- };
353
- const getInRange = (score) => {
354
- return ranges?.find(({ from, to }) => from <= score && score <= to);
355
- };
356
- const getPointValue = (score) => {
357
- switch (pointValueType) {
358
- case POINT_VALUE_TYPES.FROM:
359
- return `${score + 1}`;
360
- case POINT_VALUE_TYPES.TO:
361
- return `${score}`;
362
- case POINT_VALUE_TYPES.BOTH:
363
- default:
364
- return `${score} | ${score + 1}`;
365
- }
366
- };
367
-
368
- // EVENTS //
369
- const onRangeChange = (index, value, validate = true) => {
370
- if (validate) value = prepareValue(value);
371
-
372
- if (isNaN(value)) value = 0;
373
- updateTrigger(index, value);
374
- };
375
- const onTriggerMouseDown = (e, index) => {
376
- setMovingTrigger(e.target);
377
- setMovingTriggerIndex(index);
378
- setMovingTriggerData({ ...triggers[index] });
379
- };
380
- const onTriggerMove = (e) => {
381
- if (e?.cancelable) e?.preventDefault();
382
- e?.stopPropagation();
383
-
384
- if (!movingTriggerIndex || !movingTrigger) {
385
- return false;
386
- }
387
-
388
- if (!isTriggerMoved) setIsTriggerMoved(true);
389
-
390
- const { clientX: x } = e?.touches?.[0] ?? e;
391
- const { width: triggerWidth }
392
- = movingTrigger?.getBoundingClientRect() || {};
393
-
394
- if (x < trackPosition || x > trackPosition + trackWidth + triggerWidth)
395
- return false;
396
-
397
- const triggerPoints = getTriggerScore(movingTriggerIndex, getScoreByX(x));
398
-
399
- onRangeChange(movingTriggerIndex, triggerPoints);
400
- };
401
- const resetMovingTrigger = () => {
402
- setTimeout(() => {
403
- setMovingTrigger(null);
404
- setMovingTriggerIndex(null);
405
- }, 1);
406
- };
407
-
408
- // USE EFFECT'S //
409
- // MouseUp Event Controller
410
- useEffect(() => {
411
- if (isMobile) {
412
- document.addEventListener('touchend', resetMovingTrigger);
413
- }
414
- else {
415
- document.addEventListener('mouseup', resetMovingTrigger);
416
- }
417
-
418
- return () => {
419
- if (isMobile) {
420
- document.removeEventListener('touchend', resetMovingTrigger);
421
- }
422
- else {
423
- document.removeEventListener('mouseup', resetMovingTrigger);
424
- }
425
- };
426
- }, []);
427
- // MouseMove Event Controller
428
- useEffect(() => {
429
- if (!movingTrigger && isTriggerMoved) {
430
- movingController?.abort();
431
- setIsTriggerMoved(false);
432
- setMovingController(null);
433
- }
434
- else if (movingTrigger && !isTriggerMoved) {
435
- setMovingController(new AbortController());
436
- }
437
-
438
- const body = document.getElementsByTagName('body')[0];
439
- body.classList?.[movingTrigger ? 'add' : 'remove']('moving-cursor');
440
- }, [movingTrigger]);
441
-
442
- useEffect(() => {
443
- if (movingController) {
444
- if (isMobile) {
445
- document.addEventListener('touchmove', onTriggerMove, {
446
- signal: movingController?.signal,
447
- });
448
- }
449
- else {
450
- document.addEventListener('mousemove', onTriggerMove, {
451
- signal: movingController?.signal,
452
- });
453
- }
454
- }
455
-
456
- return () => {
457
- if (isMobile) {
458
- document.removeEventListener('touchmove', onTriggerMove, {
459
- signal: movingController?.signal,
460
- passive: false,
461
- });
462
- }
463
- else {
464
- document.removeEventListener('mousemove', onTriggerMove, {
465
- signal: movingController?.signal,
466
- });
467
- }
468
- };
469
- }, [movingController]);
470
- useLayoutEffect(() => {
471
- const { width, x } = trackRef?.current?.getBoundingClientRect() || {};
472
-
473
- setPointsPerPx(countPointsPerPx(width));
474
- setTrackWidth(width);
475
- setTrackPosition(x);
476
- }, [trackRef]);
477
- useEffect(() => {
478
- onChange(ranges, triggers);
479
- }, [ranges]);
480
- useEffect(() => {
481
- clearRanges();
482
- clearTriggers();
483
-
484
- if (protectedValue?.length === 0) {
485
- addRange({ from: min, to: max });
486
- addTrigger(min, { isFixed: true, isHidden: true });
487
- addTrigger(max, { isFixed: true, isHidden: true });
488
- }
489
- else {
490
- protectedValue
491
- ?.reduce((result, range) => {
492
- addRange({ ...range });
493
-
494
- if (!result.find(score => score === range?.from))
495
- result.splice(result?.length - 1, 0, range?.from);
496
- if (!result.find(score => score === range?.to))
497
- result.splice(result?.length - 1, 0, range?.to);
498
- return result;
499
- }, [])
500
- ?.sort((a, b) => (a < b ? -1 : 1))
501
- ?.filter((item, i, arr) => i === 0 || item - 1 !== arr[i - 1])
502
- ?.map((score, i, triggers) => {
503
- if (i === 0 || score - 1 !== triggers[i - 1]) {
504
- const isExtremum = score === min || score === max;
505
-
506
- addTrigger(
507
- score,
508
- { isFixed: isExtremum, isHidden: isExtremum },
509
- { withRange: false },
510
- );
511
- }
512
- });
513
- }
514
- }, [protectedValue]);
515
- useEffect(() => {
516
- if (!compare(value, protectedValue)) {
517
- setProtectedValue(value);
518
- }
519
- }, [value]);
520
- useEffect(() => {
521
- if (!movingTriggerIndex && movingTriggerData) {
522
- updateRangesByTrigger({ ...movingTriggerData });
523
- setMovingTriggerData(null);
524
- }
525
- }, [movingTriggerIndex]);
526
-
527
- // RENDER //
528
- const renderCollision = ({
529
- isCollisionVisible,
530
- isLeftCollision,
531
- isRightCollision,
532
- isBothCollision,
533
- className,
534
- }) => {
535
- const pieces = Number.parseInt((max - min) / minRange, 10);
536
- const { width: trackWidth }
537
- = trackRef?.current?.getBoundingClientRect() ?? {};
538
- const collisionWidth = trackWidth / pieces - 4;
539
-
540
- const width = isCollisionVisible
541
- ? isBothCollision
542
- ? collisionWidth * 2
543
- : isLeftCollision || isRightCollision
544
- ? collisionWidth
545
- : 0
546
- : 0;
547
-
548
- return (
549
- <div
550
- className={cn('collision', className, {
551
- 'collision--visible': isCollisionVisible,
552
- 'collision--left': isLeftCollision && !isBothCollision,
553
- 'collision--right': isRightCollision && !isBothCollision,
554
- 'collision--both': isBothCollision,
555
- })}
556
- style={{ width }}
557
- />
558
- );
559
- };
560
- const renderAddTrackTriggerSettings = () => {
561
- const { label, value } = addTriggerFixedRange || {};
562
- return (
563
- <div
564
- className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings`}
565
- >
566
- <div
567
- className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body`}
568
- >
569
- <div
570
- className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body--assign-left`}
571
- onClick={(e) => {
572
- e.stopPropagation();
573
- setAssignValueToRange(ASSIGN_TO_LEFT);
574
- }}
575
- attr-is-active={`${assignValueToRange === ASSIGN_TO_LEFT}`}
576
- >
577
- <ChevronLeft />
578
- </div>
579
- <div
580
- className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body--lenders-count`}
581
- >
582
- {label}
583
- {value}
584
- </div>
585
- <div
586
- className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-body--assign-right`}
587
- onClick={(e) => {
588
- e.stopPropagation();
589
- setAssignValueToRange(ASSIGN_TO_RIGHT);
590
- }}
591
- attr-is-active={`${assignValueToRange === ASSIGN_TO_RIGHT}`}
592
- >
593
- <ChevronRight />
594
- </div>
595
- </div>
596
- <div
597
- className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-actions`}
598
- >
599
- <div
600
- className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-actions--cancel`}
601
- onClick={e => unfixAddTrigger(e)}
602
- >
603
- Cancel
604
- </div>
605
- <div
606
- className={`${COMPONENT_CLASS}__track__range-triggers--add-trigger__settings-actions--apply`}
607
- onClick={(e) => {
608
- e.stopPropagation();
609
- addTrigger(addTriggerFixedScore);
610
- }}
611
- >
612
- Apply
613
- </div>
614
- </div>
615
- </div>
616
- );
617
- };
618
- const renderAddTrackTrigger = () => {
619
- const isNoTriggers = !triggers?.filter(({ isHidden }) => !isHidden).length;
620
-
621
- const x = getAddTriggerPosition();
622
- const score = isAddTriggerFixed
623
- ? addTriggerFixedScore
624
- : isNoTriggers && !isMouseOverTrack
625
- ? (min + max) / 2 - 1
626
- : getAddTriggerScore(x);
627
-
628
- const triggerCollision = !isAddTriggerFixed
629
- ? getAddTriggerCollisionDirection(x)
630
- : NO_COLLISION;
631
- const isLeftCollision = triggerCollision === LEFT_COLLISSION;
632
- const isRightCollision = triggerCollision === RIGHT_COLLISION;
633
- const isBothCollision = triggerCollision === BOTH_COLLISION;
634
- const isCollisionVisible
635
- = (isLeftCollision || isRightCollision || isBothCollision)
636
- && !(isNoTriggers && !isMouseOverTrack);
637
- const left = getTrackXByScore(score);
638
- const inRange = getInRange(score);
639
-
640
- const isTriggerWithScoreExists = getTriggerByScore(score);
641
-
642
- if (isTriggerWithScoreExists || movingTrigger || isMouseOverTrigger)
643
- return null;
644
-
645
- return (
646
- <div
647
- className={cn(
648
- `${COMPONENT_CLASS}__track__range-triggers--add-trigger`,
649
- {
650
- [`${COMPONENT_CLASS}__track__range-triggers--add-trigger--fixed`]:
651
- isAddTriggerFixed,
652
- [`${COMPONENT_CLASS}__track__range-triggers--add-trigger--force-visible`]:
653
- isNoTriggers,
654
- [`${COMPONENT_CLASS}__track__range-triggers--add-trigger--moved-smoothly`]:
655
- isNoTriggers && !isMouseOverTrack,
656
- },
657
- )}
658
- style={{ left: `${left}px` }}
659
- onClick={() =>
660
- inRange?.value ? fixAddTrigger(score, inRange) : addTrigger(score)}
661
- >
662
- <div
663
- ref={addTriggerRef}
664
- className={cn(
665
- `${COMPONENT_CLASS}__track__range-triggers--add-trigger__point`,
666
- {
667
- [`${COMPONENT_CLASS}__track__range-triggers--add-trigger__point--shake`]:
668
- isCollisionVisible,
669
- },
670
- )}
671
- data-point-value={getPointValue(score)}
672
- >
673
- <Plus />
674
- </div>
675
- {isAddTriggerFixed && renderAddTrackTriggerSettings()}
676
- {renderCollision({
677
- isCollisionVisible,
678
- isLeftCollision,
679
- isRightCollision,
680
- isBothCollision,
681
- })}
682
- </div>
683
- );
684
- };
685
- const renderTrackTrigger = (
686
- { value: triggerScore, isFixed, isHidden },
687
- triggerIndex,
688
- ) => {
689
- const triggerCollision = getTriggerCollisionDirection(
690
- triggerIndex,
691
- triggerScore,
692
- );
693
- const isLeftCollision = triggerCollision === LEFT_COLLISSION;
694
- const isRightCollision = triggerCollision === RIGHT_COLLISION;
695
- const isBothCollision = triggerCollision === BOTH_COLLISION;
696
- const isCurrentTriggerMoving = isTriggerMoving(triggerIndex);
697
- const isCollisionVisible
698
- = isCurrentTriggerMoving
699
- && isTriggerMoved
700
- && (isLeftCollision || isRightCollision || isBothCollision);
701
- return (
702
- <div
703
- key={`${COMPONENT_CLASS}__track__range-triggers--trigger-${triggerIndex}`}
704
- style={{
705
- left: getTrackXByScore(triggerScore).toString().concat('px'),
706
- }}
707
- className={cn(`${COMPONENT_CLASS}__track__range-triggers--trigger`, {
708
- [`${COMPONENT_CLASS}__track__range-triggers--trigger__moving`]:
709
- isCurrentTriggerMoving,
710
- [`${COMPONENT_CLASS}__track__range-triggers--trigger__fixed`]:
711
- isFixed,
712
- [`${COMPONENT_CLASS}__track__range-triggers--trigger__hidden`]:
713
- isHidden,
714
- })}
715
- {...(isMobile
716
- ? {}
717
- : {
718
- onMouseOver: setMouseOverTrigger,
719
- onMouseLeave: setMouseLeaveTrigger,
720
- })}
721
- >
722
- <div
723
- className={cn(
724
- `${COMPONENT_CLASS}__track__range-triggers--trigger__point`,
725
- {
726
- [`${COMPONENT_CLASS}__track__range-triggers--trigger__point--shake`]:
727
- isCollisionVisible,
728
- },
729
- )}
730
- data-point-value={getPointValue(triggerScore)}
731
- {...(isMobile
732
- ? {
733
- onTouchStart: e => onTriggerMouseDown(e, triggerIndex),
734
- onTouchEnd: resetMovingTrigger,
735
- }
736
- : {
737
- onMouseDown: e => onTriggerMouseDown(e, triggerIndex),
738
- onMouseUp: resetMovingTrigger,
739
- })}
740
- />
741
- <div
742
- className={cn(
743
- `${COMPONENT_CLASS}__track__range-triggers--trigger__actions`,
744
- {
745
- [`${COMPONENT_CLASS}__track__range-triggers--trigger__actions--hidden`]:
746
- isCurrentTriggerMoving,
747
- },
748
- )}
749
- >
750
- <div
751
- className={`${COMPONENT_CLASS}__track__range-triggers--trigger__actions--remove`}
752
- onClick={() => removeTrigger(triggerIndex)}
753
- >
754
- <X />
755
- </div>
756
- </div>
757
- {renderCollision({
758
- isCollisionVisible,
759
- isLeftCollision,
760
- isRightCollision,
761
- isBothCollision,
762
- className: `${COMPONENT_CLASS}__track__range-triggers--trigger__collision`,
763
- })}
764
- </div>
765
- );
766
- };
767
- const renderTrackTriggers = () => {
768
- return (
769
- <div className={`${COMPONENT_CLASS}__track__range-triggers`}>
770
- {triggers?.map(renderTrackTrigger)}
771
- </div>
772
- );
773
- };
774
- const renderRangeValue = ({ from, to, label, value }, rangeIndex) => {
775
- if (!value) return null;
776
-
777
- const left = getTrackXByScore((to + from) / 2);
778
-
779
- return (
780
- <div
781
- className={cn(`${COMPONENT_CLASS}__track__ranges-value--item`)}
782
- style={{ left: `${left}px` }}
783
- key={`${COMPONENT_CLASS}__track__ranges-value--item-${rangeIndex}`}
784
- >
785
- <div
786
- className={cn(`${COMPONENT_CLASS}__track__ranges-value--item__label`)}
787
- >
788
- {label}
789
- </div>
790
- <div
791
- className={cn(`${COMPONENT_CLASS}__track__ranges-value--item__value`)}
792
- >
793
- {value}
794
- </div>
795
- </div>
796
- );
797
- };
798
- const renderRangesValue = () => {
799
- return (
800
- <div className={cn(`${COMPONENT_CLASS}__track__ranges-value`)}>
801
- {ranges?.map(renderRangeValue)}
802
- </div>
803
- );
804
- };
805
- const renderTrackDividers = useMemo(() => {
806
- const renderTrackDivider = (key = 0) => (
807
- <div
808
- key={key}
809
- className={`${COMPONENT_CLASS}__track__line__dividers--item`}
810
- />
811
- );
812
-
813
- const dividersCount = Number.parseInt((max - min) / dividersRange, 10);
814
- const dividers = [];
815
-
816
- for (let i = 0; i < dividersCount; ++i)
817
- dividers.push(renderTrackDivider(i));
818
-
819
- return (
820
- <div className={`${COMPONENT_CLASS}__track__line__dividers`}>
821
- {dividers}
822
- </div>
823
- );
824
- }, [trackRef, minRange, min, max]);
825
- const renderTrackLine = () => {
826
- return (
827
- <div className={`${COMPONENT_CLASS}__track__line`}>
828
- <div className={`${COMPONENT_CLASS}__track__line__extremum--min`}>
829
- {min}
830
- </div>
831
- {renderTrackDividers}
832
- <div className={`${COMPONENT_CLASS}__track__line__extremum--max`}>
833
- {max}
834
- </div>
835
- </div>
836
- );
837
- };
838
- const renderTrack = () => {
839
- return (
840
- <div
841
- className={cn(`${COMPONENT_CLASS}__track`, className)}
842
- ref={trackRef}
843
- >
844
- {renderTrackLine()}
845
- {renderAddTrackTrigger()}
846
- {renderTrackTriggers()}
847
- {renderRangesValue()}
848
- </div>
849
- );
850
- };
851
- const render = () => {
852
- return (
853
- <div
854
- className={COMPONENT_CLASS}
855
- onMouseOver={setMouseOverTrack}
856
- onMouseLeave={setMouseLeaveTrack}
857
- onMouseMove={e => setMouseTrackPosition(e?.clientX)}
858
- >
859
- {renderTrack()}
860
- </div>
861
- );
862
- };
863
-
864
- return render();
865
- }