intelicoreact 0.0.6 → 0.0.9

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 (117) hide show
  1. package/dist/Atomic/FormElements/CheckboxInput/CheckboxInput.js +6 -2
  2. package/dist/Atomic/FormElements/CheckboxInput/CheckboxInput.scss +91 -60
  3. package/dist/Atomic/FormElements/CheckboxInput/CheckboxInput.stories.js +2 -1
  4. package/dist/Atomic/FormElements/Dropdown/Dropdown.js +84 -28
  5. package/dist/Atomic/FormElements/Dropdown/Dropdown.scss +27 -3
  6. package/dist/Atomic/FormElements/Dropdown/Dropdown.stories.js +50 -7
  7. package/dist/Atomic/FormElements/Dropdown/components/DropdownLoader.js +20 -0
  8. package/dist/Atomic/FormElements/Dropdown/components/Loader.scss +57 -0
  9. package/dist/Atomic/FormElements/Input/Input.js +124 -50
  10. package/dist/Atomic/FormElements/Input/Input.stories.js +19 -15
  11. package/dist/Atomic/FormElements/InputCalendar/InputCalendar.js +33 -31
  12. package/dist/Atomic/FormElements/InputCalendar/InputCalendar.stories.js +29 -19
  13. package/dist/Atomic/FormElements/InputDateRange/{components/InputDateRange.js → InputDateRange.js} +54 -62
  14. package/dist/Atomic/FormElements/InputDateRange/{components/InputDateRange.scss → InputDateRange.scss} +254 -228
  15. package/dist/Atomic/FormElements/InputDateRange/InputDateRange.stories.js +15 -160
  16. package/dist/Atomic/FormElements/InputDateRange/components/Datepicker.js +72 -34
  17. package/dist/Atomic/FormElements/InputDateRange/components/OpenedPart.js +26 -11
  18. package/dist/Atomic/FormElements/InputDateRange/components/SelectItem.js +14 -6
  19. package/dist/Atomic/FormElements/InputDateRange/{index.js → dependencies.js} +19 -18
  20. package/dist/Atomic/FormElements/NumericInput/NumericInput.js +292 -0
  21. package/dist/Atomic/FormElements/NumericInput/NumericInput.scss +135 -0
  22. package/dist/Atomic/FormElements/NumericInput/NumericInput.stories.js +117 -0
  23. package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.js +10 -3
  24. package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.scss +4 -4
  25. package/dist/Atomic/FormElements/Table/Table.scss +1 -1
  26. package/dist/Atomic/FormElements/Textarea/Textarea.scss +1 -1
  27. package/dist/Atomic/MainMenu/MainMenu.scss +2 -2
  28. package/dist/Atomic/UI/Accordion/Accordion.scss +2 -2
  29. package/dist/Atomic/UI/Arrow/Arrow.js +6 -6
  30. package/dist/Atomic/UI/Arrow/Arrow.scss +0 -3
  31. package/dist/Atomic/UI/Calendar/Calendar.js +8 -5
  32. package/dist/Atomic/UI/Calendar/Calendar.scss +19 -3
  33. package/dist/Atomic/UI/Calendar/Calendar.stories.js +3 -2
  34. package/dist/Atomic/UI/Status/Status.scss +1 -1
  35. package/dist/Constants/index.constants.js +8 -0
  36. package/dist/Functions/inputExecutor.js +58 -0
  37. package/dist/Molecular/Datepicker/Datepicker.js +451 -0
  38. package/dist/Molecular/Datepicker/Datepicker.scss +8 -0
  39. package/dist/Molecular/Datepicker/Datepicker.stories.js +44 -0
  40. package/dist/{Atomic/FormElements/Calendar → Molecular/Datepicker/components}/Calendar.js +50 -39
  41. package/dist/scss/_vars.scss +3 -1
  42. package/dist/scss/main.scss +1 -1
  43. package/package.json +5 -4
  44. package/src/Atomic/FormElements/CheckboxInput/CheckboxInput.js +12 -2
  45. package/src/Atomic/FormElements/CheckboxInput/CheckboxInput.scss +91 -60
  46. package/src/Atomic/FormElements/CheckboxInput/CheckboxInput.stories.js +4 -3
  47. package/src/Atomic/FormElements/Dropdown/Dropdown.js +104 -39
  48. package/src/Atomic/FormElements/Dropdown/Dropdown.scss +27 -3
  49. package/src/Atomic/FormElements/Dropdown/Dropdown.stories.js +42 -15
  50. package/src/Atomic/FormElements/Dropdown/components/DropdownLoader.js +16 -0
  51. package/src/Atomic/FormElements/Dropdown/components/Loader.scss +57 -0
  52. package/src/Atomic/FormElements/Input/Input.js +108 -37
  53. package/src/Atomic/FormElements/Input/Input.stories.js +43 -22
  54. package/src/Atomic/FormElements/InputCalendar/InputCalendar.js +18 -17
  55. package/src/Atomic/FormElements/InputCalendar/InputCalendar.stories.js +17 -14
  56. package/src/Atomic/FormElements/InputDateRange/InputDateRange.js +219 -0
  57. package/src/Atomic/FormElements/InputDateRange/{components/InputDateRange.scss → InputDateRange.scss} +254 -228
  58. package/src/Atomic/FormElements/InputDateRange/InputDateRange.stories.js +38 -117
  59. package/src/Atomic/FormElements/InputDateRange/components/Datepicker.js +92 -53
  60. package/src/Atomic/FormElements/InputDateRange/components/OpenedPart.js +14 -5
  61. package/src/Atomic/FormElements/InputDateRange/components/SelectItem.js +5 -3
  62. package/src/Atomic/FormElements/InputDateRange/{index.js → dependencies.js} +16 -12
  63. package/src/Atomic/FormElements/NumericInput/NumericInput.js +263 -0
  64. package/src/Atomic/FormElements/NumericInput/NumericInput.scss +135 -0
  65. package/src/Atomic/FormElements/NumericInput/NumericInput.stories.js +78 -0
  66. package/src/Atomic/FormElements/RangeCalendar/RangeCalendar.js +6 -3
  67. package/src/Atomic/FormElements/RangeCalendar/RangeCalendar.scss +4 -4
  68. package/src/Atomic/FormElements/Table/Table.scss +1 -1
  69. package/src/Atomic/FormElements/Textarea/Textarea.scss +1 -1
  70. package/src/Atomic/MainMenu/MainMenu.scss +2 -2
  71. package/src/Atomic/UI/Accordion/Accordion.scss +2 -2
  72. package/src/Atomic/UI/Arrow/Arrow.js +4 -4
  73. package/src/Atomic/UI/Arrow/Arrow.scss +0 -3
  74. package/src/Atomic/UI/Calendar/Calendar.js +4 -4
  75. package/src/Atomic/UI/Calendar/Calendar.scss +19 -3
  76. package/src/Atomic/UI/Calendar/Calendar.stories.js +2 -1
  77. package/src/Atomic/UI/Status/Status.scss +1 -1
  78. package/src/Constants/index.constants.js +41 -0
  79. package/src/Functions/inputExecutor.js +53 -0
  80. package/src/Functions/utils.js +4 -1
  81. package/src/Molecular/Datepicker/Datepicker.js +346 -0
  82. package/src/Molecular/Datepicker/Datepicker.scss +8 -0
  83. package/src/Molecular/Datepicker/Datepicker.stories.js +27 -0
  84. package/src/Molecular/Datepicker/components/Calendar.js +118 -0
  85. package/src/scss/_vars.scss +3 -1
  86. package/src/scss/main.scss +1 -1
  87. package/dist/Atomic/FormElements/Calendar/Calendar.scss +0 -543
  88. package/dist/Atomic/FormElements/Calendar/Calendar.stories.js +0 -33
  89. package/dist/scss/anme/_anme-bootstrap-grid.scss +0 -748
  90. package/dist/scss/anme/_anme-elements.scss +0 -269
  91. package/dist/scss/anme/_anme-grid.scss +0 -111
  92. package/dist/scss/anme/_anme-justify.scss +0 -111
  93. package/dist/scss/anme/_anme-mixins-media.scss +0 -116
  94. package/dist/scss/anme/_anme-mixins.scss +0 -166
  95. package/dist/scss/anme/_anme-normalize.scss +0 -8
  96. package/dist/scss/anme/_anme-overall.scss +0 -34
  97. package/dist/scss/anme/_anme-padding-margins.scss +0 -419
  98. package/dist/scss/anme/_anme-table.scss +0 -81
  99. package/dist/scss/anme/_anme-theme.scss +0 -275
  100. package/dist/scss/anme/_anme-vars.scss +0 -91
  101. package/dist/scss/anme/_code-styling.scss +0 -23
  102. package/dist/scss/anme/styles.scss +0 -12
  103. package/src/Atomic/FormElements/InputDateRange/components/InputDateRange.js +0 -230
  104. package/src/scss/anme/_anme-bootstrap-grid.scss +0 -748
  105. package/src/scss/anme/_anme-elements.scss +0 -269
  106. package/src/scss/anme/_anme-grid.scss +0 -111
  107. package/src/scss/anme/_anme-justify.scss +0 -111
  108. package/src/scss/anme/_anme-mixins-media.scss +0 -116
  109. package/src/scss/anme/_anme-mixins.scss +0 -166
  110. package/src/scss/anme/_anme-normalize.scss +0 -8
  111. package/src/scss/anme/_anme-overall.scss +0 -34
  112. package/src/scss/anme/_anme-padding-margins.scss +0 -419
  113. package/src/scss/anme/_anme-table.scss +0 -81
  114. package/src/scss/anme/_anme-theme.scss +0 -275
  115. package/src/scss/anme/_anme-vars.scss +0 -91
  116. package/src/scss/anme/_code-styling.scss +0 -23
  117. package/src/scss/anme/styles.scss +0 -12
@@ -0,0 +1,219 @@
1
+ import React, { useState, useEffect, useRef } from 'react';
2
+ import cn from 'classnames';
3
+ import moment from 'moment-timezone';
4
+
5
+ import { useClickOutside, useToggle, getActualDateRange, INTERVALS, ALL_TIME_KEY, CUSTOM_INTERVAL_KEY_TEXT } from './dependencies';
6
+
7
+ import OpenedPart from './components/OpenedPart';
8
+ import Arrow from '../../UI/Arrow/Arrow';
9
+
10
+ import './InputDateRange.scss';
11
+
12
+ const InputDateRange = props => {
13
+ const {
14
+ txt,
15
+ id,
16
+ label,
17
+ className,
18
+ value,
19
+ onChange = () => {},
20
+ error,
21
+ disabled,
22
+ isHoverable,
23
+ isCompact = false,
24
+ hideArrows = false,
25
+ isOptionsRight,
26
+ isUseAbs,
27
+ minDate = null,
28
+ maxDate = null,
29
+ } = props;
30
+
31
+ const actualValues = getActualDateRange(value);
32
+ const { isToggled, toggle, toggleOn, toggleOff } = useToggle(false);
33
+ const [current, setCurrent] = useState(actualValues?.intervalKey);
34
+ const [isCompare, setIsCompare] = useState(actualValues?.compare);
35
+
36
+ const ref = !isUseAbs ? useClickOutside(toggleOff) : useRef(null);
37
+ const internalContainerRef = useRef(null);
38
+
39
+ const handleChange = input => {
40
+
41
+ const newValue = getActualDateRange(input);
42
+ const formatedValue = {
43
+ intervalKey: newValue.intervalKey,
44
+ start: newValue.start ? moment(newValue.start).format('YYYY-MM-DDTHH:mm') : newValue.start,
45
+ end: newValue.end ? moment(newValue.end).format('YYYY-MM-DDTHH:mm') : newValue.end,
46
+ ...(newValue.compare ? { compare: newValue.compare } : {}),
47
+ ...(newValue.startPrevDate ? { startPrevDate: moment(newValue.startPrevDate).format('YYYY-MM-DDTHH:mm') } : {}),
48
+ ...(newValue.endPrevDate ? { endPrevDate: moment(newValue.endPrevDate).format('YYYY-MM-DDTHH:mm') } : {})
49
+ };
50
+
51
+ onChange(formatedValue);
52
+ return formatedValue;
53
+ };
54
+
55
+ const Range = () => {
56
+ const SYMBOLS_QUANTITY_IF_TIME_ADDED = 13;
57
+ if (!actualValues.start && value.start) {
58
+ actualValues.start = value.start;
59
+ actualValues.end = value.end || '';
60
+ }
61
+ const { start, end } = actualValues;
62
+ if (!start || !end) return null;
63
+
64
+ const startTime = moment(start).format('HH:mm');
65
+ const endTime = moment(end).format('HH:mm');
66
+
67
+ const firstPart = `${moment(start).format('ll')} ${startTime !== '00:00' ? `(${startTime})` : ''}`;
68
+ const secondPart = `${(endTime !== '00:00' ? moment(end) : moment(end).subtract(1, 'days')).format('ll')} ${
69
+ endTime !== '00:00' ? `(${endTime})` : ''
70
+ }`;
71
+
72
+ const getClasses = base =>
73
+ cn('date-range-input__range-text', {
74
+ 'date-range-input__range-text_little': base.length > SYMBOLS_QUANTITY_IF_TIME_ADDED
75
+ });
76
+
77
+ return (
78
+ <>
79
+ <span className={getClasses(firstPart)}>
80
+ {firstPart}
81
+ {endTime === '00:00' && moment(end).isSame(moment(start).add(1, 'days'), 'day') ? '' : ` - `}
82
+ </span>
83
+ {endTime === '00:00' && moment(end).isSame(moment(start).add(1, 'days'), 'day') ? null : (
84
+ <span className={getClasses(secondPart)}>{secondPart}</span>
85
+ )}
86
+ </>
87
+ );
88
+ };
89
+
90
+ const slideInterval = (direction = 'forward') => {
91
+ const { start, end } = actualValues;
92
+ const intervalHoursCount = moment(end).diff(start, 'hours');
93
+ let newEnd;
94
+ let newStart;
95
+ const endHours = moment(end).hours();
96
+ const startHours = moment(start).hours();
97
+ if (direction === 'forward') {
98
+ newStart = moment(end)
99
+ .add(endHours === 0 ? 0 : 1, 'day')
100
+ .hours(startHours)
101
+ .toDate();
102
+ newEnd = moment(newStart).add(intervalHoursCount, 'hours');
103
+ } else {
104
+ newEnd = moment(start)
105
+ .subtract(endHours === 0 ? 0 : 1, 'day')
106
+ .hours(endHours)
107
+ .toDate();
108
+ newStart = moment(newEnd).subtract(intervalHoursCount, 'hours');
109
+ }
110
+ const startPrevDate = moment(newStart).subtract(intervalHoursCount, 'hours').subtract(1, 'seconds');
111
+ const endPrevDate = moment(newEnd).subtract(1, 'seconds');
112
+ handleChange({
113
+ ...value,
114
+ intervalKey: getActualDateRange({
115
+ start: newStart,
116
+ end: newEnd
117
+ })?.intervalKey,
118
+ start: newStart,
119
+ end: newEnd,
120
+ startPrevDate,
121
+ endPrevDate
122
+ });
123
+ };
124
+
125
+ const handleArrowClick = type => {
126
+ slideInterval(type === 'right' ? 'forward' : 'back');
127
+ toggleOff();
128
+ };
129
+
130
+ return (
131
+ <div
132
+ ref={internalContainerRef}
133
+ className={cn('date-range-input', className, {
134
+ 'date-range-input_compact': isCompact,
135
+ 'date-range-input_hide-arrows': hideArrows,
136
+ 'date-range-input_focused': isToggled,
137
+ 'date-range-input_error': error,
138
+ 'date-range-input_disabled': disabled
139
+ })}
140
+ >
141
+ <span className="date-range-input__label">{label}</span>
142
+ <div
143
+ className="date-range-input__wraper"
144
+ ref={ref}
145
+ onMouseEnter={isHoverable ? toggleOn : () => null}
146
+ onMouseLeave={isHoverable ? toggleOff : () => null}
147
+ >
148
+ <div
149
+ className={cn('date-range-input__absolut-wraper', {
150
+ 'date-range-input__absolut-wraper_right-position': isOptionsRight
151
+ })}
152
+ >
153
+ <div className={cn('date-range-input__static-part')}>
154
+ <button
155
+ id={id}
156
+ className={cn('date-range-input__toggle-button')}
157
+ disabled={disabled}
158
+ onClick={!disabled && !isHoverable ? toggle : undefined}
159
+ >
160
+ <div className="date-range-input__interval-key">
161
+ <span>
162
+ {(txt?.labels && txt.labels[actualValues?.intervalKey]) ??
163
+ (INTERVALS[actualValues?.intervalKey]?.label || CUSTOM_INTERVAL_KEY_TEXT)}
164
+ </span>
165
+ {current !== ALL_TIME_KEY && <span>:</span>}
166
+ </div>
167
+ {!isCompact && (
168
+ <div className={cn('date-range-input__range', {})}>
169
+ <Range />
170
+ </div>
171
+ )}
172
+ </button>
173
+ {!isCompact && !hideArrows && (
174
+ <div className={cn('date-range-input__arrows-block')}>
175
+ <Arrow
176
+ type="left"
177
+ className="date-range-input__arrow"
178
+ onClick={() => handleArrowClick('left')}
179
+ disabled={disabled || actualValues?.intervalKey === ALL_TIME_KEY}
180
+ />
181
+ <Arrow
182
+ type="right"
183
+ className="date-range-input__arrow"
184
+ onClick={() => handleArrowClick('right')}
185
+ disabled={
186
+ disabled ||
187
+ actualValues?.intervalKey === ALL_TIME_KEY ||
188
+ actualValues?.intervalKey === 'today' ||
189
+ moment(actualValues?.end)
190
+ .add(moment(actualValues?.end).diff(actualValues?.start, 'hours'), 'hours')
191
+ .isAfter(moment().add(1, 'day').startOf('day'))
192
+ }
193
+ />
194
+ </div>
195
+ )}
196
+ </div>
197
+ {isToggled && !isUseAbs && (
198
+ <OpenedPart
199
+ {...props}
200
+ ref={internalContainerRef}
201
+ actualValues={actualValues}
202
+ current={current}
203
+ setCurrent={setCurrent}
204
+ isCompare={isCompare}
205
+ setIsCompare={setIsCompare}
206
+ toggleOff={toggleOff}
207
+ onChange={handleChange}
208
+ minDate={minDate ? moment(minDate) : null}
209
+ maxDate={maxDate ? moment(maxDate) : null}
210
+ />
211
+ )}
212
+ </div>
213
+ </div>
214
+ {error && <span className="date-range-input__error-block">{error}</span>}
215
+ </div>
216
+ );
217
+ };
218
+
219
+ export default React.memo(InputDateRange);