intelicoreact 0.0.95 → 0.0.98

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 (166) hide show
  1. package/dist/Atomic/FormElements/Input/Input.js +3 -1
  2. package/dist/Atomic/FormElements/Input/Input.stories.js +5 -1
  3. package/dist/Atomic/FormElements/InputDateRange/InputDateRange.js +4 -4
  4. package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.js +179 -70
  5. package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.scss +23 -23
  6. package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.stories.js +87 -12
  7. package/dist/Atomic/FormElements/Spinner/Spinner.js +21 -0
  8. package/{src/Atomic/FormElements/Dropdown/components/DropdownLoader.scss → dist/Atomic/FormElements/Spinner/Spinner.scss} +8 -5
  9. package/dist/Atomic/FormElements/Spinner/Spinner.stories.js +34 -0
  10. package/dist/Functions/inputExecutor.js +7 -1
  11. package/{src → dist}/Functions/useMouseUpOutside.js +13 -4
  12. package/dist/Functions/useToggle.js +40 -0
  13. package/dist/Functions/utils.js +66 -0
  14. package/dist/Molecular/Datepicker/Datepicker.js +451 -0
  15. package/{src → dist}/Molecular/Datepicker/Datepicker.scss +0 -0
  16. package/dist/Molecular/Datepicker/Datepicker.stories.js +44 -0
  17. package/dist/Molecular/Datepicker/components/Calendar.js +156 -0
  18. package/dist/Molecular/FormElements/FormElement.js +40 -0
  19. package/{src → dist}/Molecular/FormElements/FormElement.scss +0 -0
  20. package/dist/Molecular/FormElements/FormElement.stories.js +73 -0
  21. package/dist/index.js +15 -0
  22. package/{src → dist}/scss/_fonts.scss +0 -0
  23. package/{src → dist}/scss/_vars.scss +0 -0
  24. package/{src → dist}/scss/main.scss +0 -0
  25. package/package.json +3 -2
  26. package/.babelrc +0 -12
  27. package/.eslintignore +0 -10
  28. package/.eslintrc.json +0 -93
  29. package/src/Atomic/FormElements/CheckboxInput/CheckboxInput.js +0 -28
  30. package/src/Atomic/FormElements/CheckboxInput/CheckboxInput.scss +0 -107
  31. package/src/Atomic/FormElements/CheckboxInput/CheckboxInput.stories.js +0 -26
  32. package/src/Atomic/FormElements/DateTime/DateTime.js +0 -18
  33. package/src/Atomic/FormElements/DateTime/DateTime.scss +0 -12
  34. package/src/Atomic/FormElements/DateTime/DateTime.stories.js +0 -17
  35. package/src/Atomic/FormElements/DoubleString/DoubleString.js +0 -13
  36. package/src/Atomic/FormElements/DoubleString/DoubleString.scss +0 -20
  37. package/src/Atomic/FormElements/DoubleString/DoubleString.stories.js +0 -18
  38. package/src/Atomic/FormElements/Dropdown/Dropdown.js +0 -178
  39. package/src/Atomic/FormElements/Dropdown/Dropdown.scss +0 -192
  40. package/src/Atomic/FormElements/Dropdown/Dropdown.stories.js +0 -87
  41. package/src/Atomic/FormElements/Dropdown/components/DropdownLoader.js +0 -17
  42. package/src/Atomic/FormElements/Header/Header.js +0 -67
  43. package/src/Atomic/FormElements/Header/Header.scss +0 -93
  44. package/src/Atomic/FormElements/Header/Header.stories.js +0 -30
  45. package/src/Atomic/FormElements/Input/Input.js +0 -186
  46. package/src/Atomic/FormElements/Input/Input.scss +0 -136
  47. package/src/Atomic/FormElements/Input/Input.stories.js +0 -94
  48. package/src/Atomic/FormElements/InputCalendar/InputCalendar.js +0 -104
  49. package/src/Atomic/FormElements/InputCalendar/InputCalendar.scss +0 -23
  50. package/src/Atomic/FormElements/InputCalendar/InputCalendar.stories.js +0 -39
  51. package/src/Atomic/FormElements/InputDateRange/InputDateRange.js +0 -254
  52. package/src/Atomic/FormElements/InputDateRange/InputDateRange.scss +0 -624
  53. package/src/Atomic/FormElements/InputDateRange/InputDateRange.stories.js +0 -65
  54. package/src/Atomic/FormElements/InputDateRange/components/Datepicker.js +0 -432
  55. package/src/Atomic/FormElements/InputDateRange/components/OpenedPart.js +0 -126
  56. package/src/Atomic/FormElements/InputDateRange/components/SelectItem.js +0 -24
  57. package/src/Atomic/FormElements/InputDateRange/dependencies.js +0 -161
  58. package/src/Atomic/FormElements/InputsRow/InputsRow.js +0 -112
  59. package/src/Atomic/FormElements/InputsRow/InputsRow.scss +0 -45
  60. package/src/Atomic/FormElements/InputsRow/InputsRow.stories.js +0 -34
  61. package/src/Atomic/FormElements/Label/Label.js +0 -13
  62. package/src/Atomic/FormElements/Label/Label.scss +0 -20
  63. package/src/Atomic/FormElements/Label/Label.stories.js +0 -23
  64. package/src/Atomic/FormElements/MobileCalendar/MobileCalendar.js +0 -315
  65. package/src/Atomic/FormElements/MobileCalendar/MobileCalendar.scss +0 -120
  66. package/src/Atomic/FormElements/MobileCalendar/MobileCalendar.stories.js +0 -30
  67. package/src/Atomic/FormElements/Modal/Modal.js +0 -69
  68. package/src/Atomic/FormElements/Modal/Modal.scss +0 -230
  69. package/src/Atomic/FormElements/Modal/Modal.stories.js +0 -116
  70. package/src/Atomic/FormElements/MultiSelect/MultiSelect.js +0 -39
  71. package/src/Atomic/FormElements/MultiSelect/MultiSelect.scss +0 -16
  72. package/src/Atomic/FormElements/MultiSelect/MultiSelect.stories.js +0 -28
  73. package/src/Atomic/FormElements/NavLine/NavLine.js +0 -67
  74. package/src/Atomic/FormElements/NavLine/NavLine.scss +0 -108
  75. package/src/Atomic/FormElements/NavLine/NavLine.stories.js +0 -108
  76. package/src/Atomic/FormElements/NumericInput/NumericInput.js +0 -263
  77. package/src/Atomic/FormElements/NumericInput/NumericInput.scss +0 -135
  78. package/src/Atomic/FormElements/NumericInput/NumericInput.stories.js +0 -78
  79. package/src/Atomic/FormElements/RadioInput/RadioInput.js +0 -28
  80. package/src/Atomic/FormElements/RadioInput/RadioInput.scss +0 -63
  81. package/src/Atomic/FormElements/RadioInput/RadioInput.stories.js +0 -23
  82. package/src/Atomic/FormElements/RangeCalendar/RangeCalendar.js +0 -152
  83. package/src/Atomic/FormElements/RangeCalendar/RangeCalendar.scss +0 -101
  84. package/src/Atomic/FormElements/RangeCalendar/RangeCalendar.stories.js +0 -54
  85. package/src/Atomic/FormElements/RangeInputs/RangeInputs.js +0 -41
  86. package/src/Atomic/FormElements/RangeInputs/RangeInputs.scss +0 -20
  87. package/src/Atomic/FormElements/RangeInputs/RangeInputs.stories.js +0 -23
  88. package/src/Atomic/FormElements/Switcher/Switcher.js +0 -24
  89. package/src/Atomic/FormElements/Switcher/Switcher.scss +0 -56
  90. package/src/Atomic/FormElements/Switcher/Switcher.stories.js +0 -22
  91. package/src/Atomic/FormElements/Table/Partials/TdCell.js +0 -47
  92. package/src/Atomic/FormElements/Table/Partials/TdHeader.js +0 -33
  93. package/src/Atomic/FormElements/Table/Partials/TdRow.js +0 -84
  94. package/src/Atomic/FormElements/Table/Partials/TdTitle.js +0 -38
  95. package/src/Atomic/FormElements/Table/Table.js +0 -50
  96. package/src/Atomic/FormElements/Table/Table.scss +0 -78
  97. package/src/Atomic/FormElements/Table/Table.stories.js +0 -102
  98. package/src/Atomic/FormElements/Table/TdTypes/TdActions.js +0 -59
  99. package/src/Atomic/FormElements/Table/TdTypes/TdPriority.js +0 -20
  100. package/src/Atomic/FormElements/Table/TdTypes/TdRange.js +0 -15
  101. package/src/Atomic/FormElements/Table/TdTypes/TdTypes.scss +0 -35
  102. package/src/Atomic/FormElements/Table/TdTypes/TdWeight.js +0 -43
  103. package/src/Atomic/FormElements/Tag/Tag.js +0 -24
  104. package/src/Atomic/FormElements/Tag/Tag.scss +0 -38
  105. package/src/Atomic/FormElements/Tag/Tag.stories.js +0 -30
  106. package/src/Atomic/FormElements/TagsDropdown/TagsDropdown.js +0 -108
  107. package/src/Atomic/FormElements/TagsDropdown/TagsDropdown.scss +0 -131
  108. package/src/Atomic/FormElements/TagsDropdown/TagsDropdown.stories.js +0 -44
  109. package/src/Atomic/FormElements/TextSwitcher/TextSwitcher.js +0 -18
  110. package/src/Atomic/FormElements/TextSwitcher/TextSwitcher.scss +0 -50
  111. package/src/Atomic/FormElements/TextSwitcher/TextSwitcher.stories.js +0 -21
  112. package/src/Atomic/FormElements/Textarea/Textarea.js +0 -19
  113. package/src/Atomic/FormElements/Textarea/Textarea.scss +0 -35
  114. package/src/Atomic/FormElements/Textarea/Textarea.stories.js +0 -24
  115. package/src/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.js +0 -66
  116. package/src/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.scss +0 -10
  117. package/src/Atomic/FormElements/TieredCheckboxes/TieredCheckboxes.stories.js +0 -57
  118. package/src/Atomic/FormElements/TimeRange/TimeRange.js +0 -55
  119. package/src/Atomic/FormElements/TimeRange/TimeRange.scss +0 -17
  120. package/src/Atomic/FormElements/TimeRange/TimeRange.stories.js +0 -21
  121. package/src/Atomic/MainMenu/MainMenu.js +0 -112
  122. package/src/Atomic/MainMenu/MainMenu.scss +0 -176
  123. package/src/Atomic/MainMenu/MainMenu.stories.js +0 -91
  124. package/src/Atomic/UI/Accordion/Accordion.js +0 -45
  125. package/src/Atomic/UI/Accordion/Accordion.scss +0 -73
  126. package/src/Atomic/UI/Accordion/Accordion.stories.js +0 -78
  127. package/src/Atomic/UI/Accordion/AccordionItem.js +0 -92
  128. package/src/Atomic/UI/AdvancedTag/AdvTag.js +0 -81
  129. package/src/Atomic/UI/AdvancedTag/AdvancedTags.js +0 -32
  130. package/src/Atomic/UI/AdvancedTag/AdvancedTags.scss +0 -72
  131. package/src/Atomic/UI/AdvancedTag/AdvancedTags.stories.js +0 -49
  132. package/src/Atomic/UI/Alert/Alert.js +0 -23
  133. package/src/Atomic/UI/Alert/Alert.scss +0 -65
  134. package/src/Atomic/UI/Alert/Alert.stories.js +0 -34
  135. package/src/Atomic/UI/Arrow/Arrow.js +0 -41
  136. package/src/Atomic/UI/Arrow/Arrow.scss +0 -19
  137. package/src/Atomic/UI/Arrow/Arrow.stories.js +0 -32
  138. package/src/Atomic/UI/Button/Button.js +0 -17
  139. package/src/Atomic/UI/Button/Button.scss +0 -108
  140. package/src/Atomic/UI/Button/Button.stories.js +0 -49
  141. package/src/Atomic/UI/Calendar/Calendar.js +0 -190
  142. package/src/Atomic/UI/Calendar/Calendar.scss +0 -607
  143. package/src/Atomic/UI/Calendar/Calendar.stories.js +0 -26
  144. package/src/Atomic/UI/Header/partials/default_ava.png +0 -0
  145. package/src/Atomic/UI/Hint/Hint.js +0 -34
  146. package/src/Atomic/UI/Hint/Hint.scss +0 -92
  147. package/src/Atomic/UI/Hint/Hint.stories.js +0 -34
  148. package/src/Atomic/UI/Price/Price.js +0 -20
  149. package/src/Atomic/UI/Price/Price.stories.js +0 -30
  150. package/src/Atomic/UI/Status/Status.js +0 -38
  151. package/src/Atomic/UI/Status/Status.scss +0 -69
  152. package/src/Atomic/UI/Status/Status.stories.js +0 -47
  153. package/src/Constants/index.constants.js +0 -41
  154. package/src/Functions/customEventListener.js +0 -58
  155. package/src/Functions/inputExecutor.js +0 -53
  156. package/src/Functions/schemas.js +0 -31
  157. package/src/Functions/useClickOutside.js +0 -15
  158. package/src/Functions/useToggle.js +0 -17
  159. package/src/Functions/utils.js +0 -51
  160. package/src/Molecular/Datepicker/Datepicker.js +0 -346
  161. package/src/Molecular/Datepicker/Datepicker.stories.js +0 -27
  162. package/src/Molecular/Datepicker/components/Calendar.js +0 -118
  163. package/src/Molecular/FormElements/FormElement.js +0 -18
  164. package/src/Molecular/FormElements/FormElement.stories.js +0 -59
  165. package/src/index.js +0 -3
  166. package/webpack.config.js +0 -61
@@ -1,432 +0,0 @@
1
- // eslint-disable-next-line no-unused-vars
2
- import React, { useEffect, useMemo, useRef, useState } from 'react';
3
- import moment from 'moment-timezone';
4
- import cn from 'classnames';
5
-
6
- import { getActualDateRange } from '../dependencies';
7
-
8
- import SelectInput from '../../Dropdown/Dropdown';
9
- import TextInput from '../../Input/Input';
10
- import Btn from '../../../UI/Button/Button';
11
- // import Switcher from '../../Switcher/Switcher';
12
- import Calendar from '../../RangeCalendar/RangeCalendar';
13
-
14
- const padTime = (time) => {
15
- return `${time.toString().padStart(2, '0')}:00`;
16
- };
17
-
18
- const handleDateInputOnChange = (value) => {
19
- const replace = (val) => val.replace(/[^0-9\/]/g, '');
20
-
21
- const input = replace(value);
22
- const lastSymbol = input ? input.slice(-1) : '';
23
- const previousValue = input ? input.slice(0, input.length - 1) : '';
24
-
25
- if (value.length > 10 || lastSymbol === '/') return previousValue;
26
- return previousValue.length === 2 || previousValue.length === 5 ? previousValue + '/' + lastSymbol : input;
27
- };
28
-
29
- const Datepicker = (props) => {
30
- const {
31
- txt,
32
- className,
33
- buttonsTypes = {},
34
- values = {},
35
- onChange,
36
- onChangeCompare,
37
- onCancel,
38
- getSelectedMode,
39
- onChangeInterval,
40
- isCompareHidden,
41
- limitRange,
42
- handleItemClick,
43
- setActiveInterval,
44
- isShortWeekNames,
45
- minDate,
46
- maxDate,
47
- momentMinDate,
48
- momentMaxDate,
49
- isDontLimitFuture,
50
- format,
51
- } = props;
52
- const { start = null, end = null, compare = false } = values;
53
- const startDateInputRef = useRef(null);
54
- const endDateInputRef = useRef(null);
55
-
56
- const [startDate, setStartDate] = useState(start);
57
- const [endDate, setEndDate] = useState(end);
58
- const dateInterval = getSelectedMode({ start: startDate, end: endDate });
59
-
60
- const [startDateInput, setStartDateInput] = useState(start);
61
- const [endDateInput, setEndDateInput] = useState(end);
62
- const [startHour, setStartHour] = useState(start ? moment(start).hour() : 0);
63
- const [endHour, setEndHour] = useState(end ? moment(end).hour() : 0);
64
- // eslint-disable-next-line no-unused-vars
65
- const [isCompare, setIsCompare] = useState(compare);
66
- const [date1, setDate1] = useState(start ? moment(start).toDate() : moment().subtract(1, 'month').toDate());
67
- const [date2, setDate2] = useState(end ? moment(end).toDate() : moment().toDate());
68
- const [isStartFocused, setIsStartFocused] = useState(false);
69
- const [isEndFocused, setIsEndFocused] = useState(false);
70
- const [hoverStatus, setHoverStatus] = useState(null);
71
-
72
- const isNearby = useMemo(() => moment(date2).subtract(1, 'month').isSame(moment(date1), 'month'), [date1, date2]);
73
-
74
- const isPreviousPeriodShowed = useMemo(() => isCompare && !isCompareHidden && startDate && endDate, [startDate, endDate, isCompare]);
75
-
76
- const setInterval = () => {
77
- setActiveInterval(getActualDateRange({ start: startDate, end: endDate }).intervalKey);
78
- };
79
-
80
- const prevEndHour = useRef(endHour);
81
-
82
- const getStartHourItems = () =>
83
- [...Array(24).keys()].map((hour) => ({
84
- label: padTime(hour),
85
- value: hour,
86
- disabled: moment(startDate).isSame(endDate, 'day') && endHour <= hour,
87
- }));
88
- const getEndHourItems = () =>
89
- [...Array(24).keys()].map((hour) => ({
90
- label: padTime(hour + 1),
91
- value: hour === 23 ? 0 : hour + 1,
92
- disabled:
93
- (moment(startDate).isSame(endDate, 'day') || (moment(startDate).isSame(moment(endDate).subtract(1, 'days'), 'day') && endHour === 0)) &&
94
- hour < startHour,
95
- }));
96
-
97
- const startPrevDate = useMemo(() => {
98
- if (isPreviousPeriodShowed) {
99
- const intervalHoursCount = moment(endDate).diff(startDate, 'hours');
100
- return moment(startDate).subtract(intervalHoursCount, 'hours').toDate();
101
- } else return null;
102
- }, [startDate, endDate, isCompare]);
103
-
104
- const endPrevDate = useMemo(() => {
105
- if (isPreviousPeriodShowed) {
106
- return startDate;
107
- } else return null;
108
- }, [startDate, endDate, isCompare]);
109
-
110
- const title = useMemo(() => {
111
- if (isCompare && !isCompareHidden && startDate && endDate) {
112
- return `${moment(startPrevDate).format('ll')} (${moment(startPrevDate).format('HH:mm')}) - ${moment(endPrevDate).format('ll')} (${moment(
113
- endPrevDate
114
- ).format('HH:mm')})`;
115
- } else return '';
116
- }, [startDate, endDate, isCompare]);
117
-
118
- const subtractDay = (date) => (endHour === 0 ? moment(date).subtract(1, 'days') : date);
119
- const addDay = (date) => (endHour === 0 ? moment(date).add(1, 'days') : date);
120
-
121
- useEffect(() => {
122
- if (moment(startDate).isSameOrAfter(endDate)) {
123
- setStartDate(moment(endDate).subtract(1, 'd').toDate());
124
- setDate1(moment(endDate).subtract(1, 'd'));
125
- }
126
- }, [startDate]);
127
-
128
- useEffect(() => {
129
- if (moment(endDate).isSameOrBefore(startDate)) {
130
- setEndDate(moment(startDate).add(1, 'd').toDate());
131
- setDate2(moment(startDate).add(1, 'd'));
132
- }
133
- }, [endDate]);
134
-
135
- useEffect(() => {
136
- setStartDateInput(startDate);
137
- setEndDateInput(endDate);
138
- if (moment(startDate).isBefore(moment(endDate), 'month')) {
139
- setDate1(moment(startDate));
140
- setDate2(moment(endDate));
141
- }
142
- setInterval();
143
- }, [startDate, endDate]);
144
-
145
- useEffect(() => {
146
- if (moment(date1).isSameOrAfter(moment(date2), 'month')) {
147
- setDate1(moment(date2).subtract(1, 'month'));
148
- }
149
- }, [date1, date2]);
150
-
151
- useEffect(() => {
152
- onChangeInterval(dateInterval);
153
- }, [dateInterval]);
154
-
155
- const handleClick = (date) => {
156
- prevEndHour.current = 0;
157
- if (!startDate || (startDate && endDate && !(moment(startDate).add(1, 'd').isSame(endDate, 'day') && endHour === 0))) {
158
- setStartDate(moment(date).startOf('day').toDate());
159
- setEndDate(moment(date).add(1, 'd').startOf('day').toDate());
160
- setStartHour(0);
161
- setEndHour(0);
162
- } else if (moment(date).isBefore(moment(startDate), 'day')) {
163
- setEndDate(moment(startDate).add(1, 'd').startOf('day').toDate());
164
- setStartDate(moment(date).set('hour', parseInt(startHour, 10)).toDate());
165
- } else if (moment(date).isAfter(moment(startDate), 'day')) {
166
- setEndDate(moment(date).add(1, 'd').startOf('day').toDate());
167
- }
168
- setHoverStatus(null);
169
- };
170
-
171
- let timerId;
172
-
173
- const handleHover = (date) => {
174
- if (!date) {
175
- timerId = setTimeout(() => {
176
- setHoverStatus(null);
177
- }, 400);
178
- return;
179
- }
180
- if (timerId) clearTimeout(timerId);
181
- if (moment(startDate).add(1, 'd').isSame(endDate, 'day') && endHour === 0) {
182
- if (moment(date).isAfter(moment(startDate), 'day')) setHoverStatus('end');
183
- else if (moment(date).isBefore(moment(startDate), 'day')) setHoverStatus('start');
184
- else setHoverStatus(null);
185
- } else {
186
- setHoverStatus('start');
187
- }
188
- };
189
-
190
- const handleChangeStartHour = (val) => {
191
- setStartHour(+val);
192
- setStartDate(
193
- moment(startDate || moment())
194
- .set('hour', +val)
195
- .toDate()
196
- );
197
- };
198
-
199
- const handleChangeEndHour = (val) => {
200
- const newHour = +val;
201
- setEndHour(newHour);
202
- let newEndDate = moment();
203
-
204
- if (endDate) {
205
- if (prevEndHour.current === 0 && newHour !== 0) {
206
- newEndDate = moment(endDate).subtract(1, 'days');
207
- } else if (prevEndHour.current !== 0 && newHour === 0) {
208
- newEndDate = moment(endDate).add(1, 'days');
209
- }
210
- }
211
-
212
- prevEndHour.current = newHour;
213
- setEndDate(moment(newEndDate).set('hour', newHour).toDate());
214
- };
215
-
216
- const renderButtons = () => (
217
- <>
218
- <Btn className="date-picker__button" onClick={() => onCancel()} variant={buttonsTypes?.cancel}>
219
- {txt?.buttons?.cancel || 'cancel'}
220
- </Btn>
221
- <Btn
222
- className="date-picker__button"
223
- variant={buttonsTypes?.apply}
224
- disabled={!startDate || !endDate}
225
- onClick={() =>
226
- onChange({
227
- start: startDate,
228
- end: endDate,
229
- startPrevDate,
230
- endPrevDate,
231
- compare: isCompare,
232
- })
233
- }
234
- >
235
- {txt?.buttons?.apply || 'apply'}
236
- </Btn>
237
- </>
238
- );
239
-
240
- const renderPreviousPeriod = () => (
241
- <>
242
- {txt.labels.previousPeriod}: <span className="date-picker__previous-period-interval">{title}</span>
243
- </>
244
- );
245
-
246
- const doBlur = (type, e) => {
247
- const executor = type === 'start' ? setIsStartFocused : setIsEndFocused;
248
- e.target.blur();
249
- executor(false);
250
- };
251
-
252
- const handleStartDateFocus = (e) => {
253
- setIsStartFocused(true);
254
- setStartDateInput(moment(startDate).format('L'));
255
- setTimeout(() => e.target.select(), 0);
256
- };
257
-
258
- const handleStartDateBlur = (e) => {
259
- let newDate;
260
-
261
- if (!moment(startDateInput).isValid()) {
262
- newDate = moment(startDate);
263
- } else {
264
- if (minDate && moment(startDateInput).isBefore(minDate)) newDate = momentMinDate;
265
- else if (!isDontLimitFuture) {
266
- const edge = maxDate ? momentMaxDate : moment().add(1, 'day').startOf('day');
267
- if (moment(startDateInput).isAfter(edge)) newDate = edge;
268
- else newDate = moment(startDateInput);
269
- } else newDate = moment(startDateInput);
270
- }
271
-
272
- setStartDateInput(newDate.format(format));
273
- setStartDate(newDate.set('hour', parseInt(startHour, 10)).toDate());
274
-
275
- doBlur('start', e);
276
- setDate1(moment(newDate).isSameOrAfter(moment(date2), 'month') ? moment(date2).subtract(1, 'month') : moment(newDate));
277
- };
278
-
279
- const handleEndDateFocus = (e) => {
280
- setIsEndFocused(true);
281
- setEndDateInput(moment(subtractDay(endDateInput)).format('L'));
282
- setTimeout(() => e.target.select(), 0);
283
- };
284
-
285
- const handleEndDateBlur = (e) => {
286
- let newDate;
287
-
288
- if (!moment(endDateInput).isValid()) {
289
- newDate = moment(endDate);
290
- } else {
291
- if (minDate && moment(endDateInput).isBefore(minDate)) newDate = momentMinDate;
292
- else if (!isDontLimitFuture) {
293
- const edge = maxDate ? momentMaxDate : moment().endOf('day');
294
- if (moment(endDateInput).isAfter(edge)) newDate = maxDate ? edge : edge.startOf('day');
295
- else newDate = moment(startDateInput);
296
- } else newDate = moment(startDateInput);
297
- }
298
-
299
- setEndDate(addDay(newDate.set('hour', parseInt(endHour, 10)).toDate()));
300
- setEndDateInput(newDate.format(format));
301
-
302
- doBlur('end', e);
303
- setDate2(newDate);
304
- };
305
-
306
- const handleKeyPressed = (code, e, type) => {
307
- if (code === 13) (type === 'start' ? handleStartDateBlur : handleEndDateBlur)(e);
308
- if (code === 27) doBlur(type, e);
309
- };
310
-
311
- const startDateValue = startDate ? moment(startDate).format('ll') : '';
312
- const endDateValue = endDate ? moment(endDate).subtract(1, 'm').format('ll') : '';
313
-
314
- return (
315
- <div className={cn('date-picker', className)}>
316
- <div className="date-picker__header">
317
- <div className="date-picker__inputs-block">
318
- <TextInput
319
- dataTest="datepicker_start-date-input"
320
- className={cn({ 'date-picker__date-input_active': hoverStatus === 'start' })}
321
- value={isStartFocused ? startDateInput : startDateValue}
322
- onChange={(value) => setStartDateInput(handleDateInputOnChange(value))}
323
- onFocus={handleStartDateFocus}
324
- disabled={!startDate}
325
- onBlur={handleStartDateBlur}
326
- onKeyUp={(code, e) => handleKeyPressed(code, e, 'start')}
327
- //ref={startDateInputRef}
328
- // mask={moment(startDate).format('L').replace(/[0-9]/g, '9')}
329
- />
330
- <SelectInput
331
- dataTest="datepicker_start-hour-select-input"
332
- className={cn('date-picker__hour-select-input')}
333
- onChange={(value) => handleChangeStartHour(value)}
334
- value={startHour}
335
- options={getStartHourItems()}
336
- disabled={!startDate}
337
- short
338
- />
339
- <div className="date-picker__inputs-separator date-picker__header--gray">—</div>
340
- <TextInput
341
- dataTest="datepicker_end-date-input"
342
- className={cn({ 'date-picker__date-input_active': hoverStatus === 'end' })}
343
- value={isEndFocused ? endDateInput : endDateValue}
344
- disabled={!endDate}
345
- onChange={(value) => setEndDateInput(handleDateInputOnChange(value))}
346
- onFocus={handleEndDateFocus}
347
- onBlur={handleEndDateBlur}
348
- onKeyUp={(code, e) => handleKeyPressed(code, e, 'end')}
349
- //ref={endDateInputRef}
350
- />
351
- <SelectInput
352
- dataTest="datepicker_end-hour-select-input"
353
- className={cn('date-picker__hour-select-input')}
354
- onChange={(value) => handleChangeEndHour(value)}
355
- value={endHour}
356
- options={getEndHourItems()}
357
- disabled={!endDate}
358
- short
359
- />
360
- </div>
361
- {isCompare && !isCompareHidden && startDate && endDate && <div className="date-picker__previous-period">{renderPreviousPeriod()}</div>}
362
- </div>
363
-
364
- <div className="date-picker__calendars">
365
- <div className="date-picker__calendars-wrapper">
366
- <Calendar
367
- className="date-picker__calendar"
368
- date={date1}
369
- setDate={setDate1}
370
- allowNext={!isNearby}
371
- startDate={startDate}
372
- endDate={endDate}
373
- startPrevDate={startPrevDate}
374
- endPrevDate={endPrevDate}
375
- onClick={handleClick}
376
- onHover={handleHover}
377
- limitRange={limitRange}
378
- isShortWeekNames={isShortWeekNames}
379
- minDate={minDate}
380
- maxDate={maxDate}
381
- momentMinDate={momentMinDate}
382
- momentMaxDate={momentMaxDate}
383
- />
384
- <Calendar
385
- className="date-picker__calendar"
386
- date={date2}
387
- setDate={setDate2}
388
- allowPrev={!isNearby}
389
- startDate={startDate}
390
- endDate={endDate}
391
- startPrevDate={startPrevDate}
392
- endPrevDate={endPrevDate}
393
- onClick={handleClick}
394
- onHover={handleHover}
395
- isShortWeekNames={isShortWeekNames}
396
- minDate={minDate}
397
- maxDate={maxDate}
398
- momentMinDate={momentMinDate}
399
- momentMaxDate={momentMaxDate}
400
- isDontLimitFuture={isDontLimitFuture}
401
- />
402
- </div>
403
- </div>
404
- <div
405
- className={cn('date-picker__footer', {
406
- 'date-picker__footer_once-element': isCompareHidden,
407
- })}
408
- >
409
- {/* {!isCompareHidden ? (
410
- <div className="date-picker__compare-block">
411
- <div className="mr5">
412
- <Switcher
413
- dataTest="datepicker_compare"
414
- label={txt.labels.compare}
415
- isSwitchOn={isCompare}
416
- onChange={() => {
417
- onChangeCompare(!isCompare);
418
- setIsCompare(state => !state);
419
- }}
420
- />
421
- </div>
422
- </div>
423
- ) : (
424
- <div />
425
- )} */}
426
- <div className="date-picker__buttons-block">{renderButtons()}</div>
427
- </div>
428
- </div>
429
- );
430
- };
431
-
432
- export default Datepicker;
@@ -1,126 +0,0 @@
1
- import React, {useEffect, useState} from 'react';
2
- import moment from 'moment-timezone';
3
- import cn from 'classnames';
4
-
5
- import {INTERVALS as intervals, CUSTOM_INTERVAL_KEY as customKey, CUSTOM_INTERVAL_KEY_TEXT } from '../dependencies';
6
-
7
- import SelectItem from './SelectItem';
8
- import Datepicker from './Datepicker';
9
-
10
- const OpenedPart = React.forwardRef((props, ref) => {
11
- const {
12
- txt,
13
- buttonsTypes,
14
- actualValues,
15
- onChange = () => {},
16
- isHoverable,
17
- short,
18
- isCompact = false,
19
- isIntervalsHidden = false,
20
- isCompareHidden = false,
21
- limitRange,
22
- isOptionsRight,
23
- current,
24
- setCurrent,
25
- isCompare,
26
- setIsCompare,
27
- toggleOff,
28
- isShortWeekNames,
29
- minDate,
30
- maxDate,
31
- format,
32
- momentMinDate,
33
- momentMaxDate,
34
- isDontLimitFuture,
35
- } = props;
36
-
37
- const items = isCompact ? [...Object.keys(intervals)] : [...Object.keys(intervals), customKey];
38
-
39
- const [activeInterval, setActiveInterval] = useState(actualValues.intervalKey);
40
-
41
- const handleItemClick = item => {
42
- if (item !== customKey) {
43
- onChange({
44
- intervalKey: item,
45
- compare: isCompare,
46
- });
47
- setTimeout(() => toggleOff(), 0);
48
- }
49
- setCurrent(item);
50
- };
51
-
52
- const getSelectedMode = newValues => {
53
- const { start, end } = newValues;
54
- if (moment(start).get('hour') !== 0 || moment(end).get('hour') !== 0) {
55
- return customKey;
56
- }
57
- for (const [key, interval] of Object.entries(intervals)) {
58
- if (moment(start).isSame(interval.start()) && moment(end).isSame(interval.end())) {
59
- return key;
60
- }
61
- }
62
- return customKey;
63
- };
64
-
65
- return (
66
- <div
67
- className={cn('date-range-input__opened-part', 'opened-part')}
68
- // style={styles}
69
- >
70
- <div className={cn('opened-part__wrapper', {
71
- 'opened-part__wrapper_right-position-once-element': isOptionsRight && (isCompact || isIntervalsHidden),
72
- })}>
73
- {!isIntervalsHidden && (
74
- <div
75
- className={cn(
76
- 'opened-part__intervals-list',
77
- // 'form-select-options',
78
- // { 'form-select-options--short': short },
79
- // { 'form-select-options--hoverable': isHoverable },
80
- )}
81
- >
82
- {items.map((item, index) => (
83
- <SelectItem
84
- key={index}
85
- item={item}
86
- label={(txt?.labels && txt?.labels[item]) || intervals[item]?.label || (item === customKey ? CUSTOM_INTERVAL_KEY_TEXT : item )}
87
- isActive={activeInterval === item}
88
- onItemClick={() => handleItemClick(item.value || item)}
89
- disabled={item === customKey || (minDate && intervals[item]?.start?.()?.isBefore?.(momentMinDate))}
90
- />
91
- ))}
92
- </div>
93
- )}
94
- {!isCompact && (
95
- <Datepicker
96
- className={cn('opened-part__date-picker')}
97
- buttonsTypes={buttonsTypes}
98
- values={actualValues}
99
- onChange={data => {
100
- onChange({
101
- intervalKey: current,
102
- ...data,
103
- });
104
- toggleOff();
105
- }}
106
- getSelectedMode={getSelectedMode}
107
- onChangeInterval={val => setCurrent(val)}
108
- onChangeCompare={data => setIsCompare(data)}
109
- onCancel={toggleOff}
110
- isCompareHidden={isCompareHidden}
111
- limitRange={limitRange}
112
- setActiveInterval={setActiveInterval}
113
- isShortWeekNames={isShortWeekNames}
114
- minDate={minDate}
115
- maxDate={maxDate}
116
- format={format}
117
- momentMinDate={momentMinDate}
118
- momentMaxDate={momentMaxDate}
119
- isDontLimitFuture={isDontLimitFuture}
120
- />
121
- )}
122
- </div>
123
- </div>
124
- );
125
- });
126
- export default OpenedPart;
@@ -1,24 +0,0 @@
1
- import React from 'react';
2
- import cn from 'classnames';
3
-
4
- const SelectItem = ({ item, label, isActive, onItemClick, onMouseEnter, disabled }) => (
5
- <div
6
- className={cn(
7
- 'opened-part__intervals-item', {
8
- 'opened-part__intervals-item_active': isActive,
9
- 'opened-part__intervals-item_disabled': disabled,
10
- }
11
- )}
12
- onClick={onItemClick}
13
- onMouseEnter={onMouseEnter}
14
- data-item={item}
15
- >
16
- {isActive && (
17
- <svg className={cn('opened-part__intervals-item-icon-active')} width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
18
- <path d="M13.3333 4L5.99999 11.3333L2.66666 8" stroke="black" strokeWidth="1.33333" strokeLinecap="round" strokeLinejoin="round"/>
19
- </svg>
20
- )}
21
- {label}
22
- </div>
23
- );
24
- export default SelectItem;