intelicoreact 0.0.94 → 0.0.97

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