intelicoreact 0.0.93 → 0.0.96
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Atomic/FormElements/Dropdown/Dropdown.stories.js +1 -1
- package/dist/Atomic/FormElements/InputCalendar/InputCalendar.js +33 -9
- package/dist/Atomic/FormElements/InputCalendar/InputCalendar.scss +5 -0
- package/dist/Atomic/FormElements/InputCalendar/InputCalendar.stories.js +27 -6
- package/dist/Atomic/FormElements/InputDateRange/InputDateRange.js +20 -9
- package/dist/Atomic/FormElements/InputDateRange/InputDateRange.stories.js +7 -5
- package/dist/Atomic/FormElements/InputDateRange/components/Datepicker.js +29 -24
- package/dist/Atomic/FormElements/InputDateRange/components/OpenedPart.js +13 -7
- package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.js +427 -0
- package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.scss +120 -0
- package/dist/Atomic/FormElements/MobileCalendar/MobileCalendar.stories.js +56 -0
- package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.js +11 -8
- package/dist/Atomic/UI/Calendar/Calendar.js +16 -13
- package/dist/Functions/customEventListener.js +66 -0
- package/dist/Functions/useMouseUpOutside.js +23 -0
- package/package.json +1 -1
- package/src/Atomic/FormElements/Dropdown/Dropdown.stories.js +1 -1
- package/src/Atomic/FormElements/InputCalendar/InputCalendar.js +45 -6
- package/src/Atomic/FormElements/InputCalendar/InputCalendar.scss +5 -0
- package/src/Atomic/FormElements/InputCalendar/InputCalendar.stories.js +15 -6
- package/src/Atomic/FormElements/InputDateRange/InputDateRange.js +57 -22
- package/src/Atomic/FormElements/InputDateRange/InputDateRange.stories.js +10 -8
- package/src/Atomic/FormElements/InputDateRange/components/Datepicker.js +391 -392
- package/src/Atomic/FormElements/InputDateRange/components/OpenedPart.js +11 -3
- package/src/Atomic/FormElements/MobileCalendar/MobileCalendar.js +315 -0
- package/src/Atomic/FormElements/MobileCalendar/MobileCalendar.scss +120 -0
- package/src/Atomic/FormElements/MobileCalendar/MobileCalendar.stories.js +30 -0
- package/src/Atomic/FormElements/RangeCalendar/RangeCalendar.js +132 -126
- package/src/Atomic/UI/Calendar/Calendar.js +29 -12
- package/src/Functions/customEventListener.js +58 -0
- package/src/Functions/useMouseUpOutside.js +16 -0
|
@@ -32,17 +32,21 @@ function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj &&
|
|
|
32
32
|
function _default(props) {
|
|
33
33
|
var date = props.date,
|
|
34
34
|
setDate = props.setDate,
|
|
35
|
+
setIsOpened = props.setIsOpened,
|
|
35
36
|
_props$allowPrev = props.allowPrev,
|
|
36
37
|
allowPrev = _props$allowPrev === void 0 ? true : _props$allowPrev,
|
|
37
38
|
_props$allowNext = props.allowNext,
|
|
38
39
|
allowNext = _props$allowNext === void 0 ? true : _props$allowNext,
|
|
39
40
|
params = props.params,
|
|
40
41
|
className = props.className,
|
|
41
|
-
isDontLimitFuture = props.isDontLimitFuture,
|
|
42
42
|
isListTop = props.isListTop; // const { minDate = '01/01/1900', maxDate = moment().format('MM/DD/YYYY') } = params;
|
|
43
43
|
|
|
44
|
-
var
|
|
45
|
-
|
|
44
|
+
var format = params.format,
|
|
45
|
+
minDate = params.minDate,
|
|
46
|
+
maxDate = params.maxDate,
|
|
47
|
+
momentMinDate = params.momentMinDate,
|
|
48
|
+
momentMaxDate = params.momentMaxDate,
|
|
49
|
+
isDontLimitFuture = params.isDontLimitFuture;
|
|
46
50
|
|
|
47
51
|
var _useState = (0, _react.useState)({}),
|
|
48
52
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
@@ -66,17 +70,15 @@ function _default(props) {
|
|
|
66
70
|
|
|
67
71
|
var yearInputRef = (0, _react.useRef)(null);
|
|
68
72
|
var selectedDay = (0, _moment.default)(showDate);
|
|
69
|
-
var isError = 'Invalid date';
|
|
70
|
-
// () => (selectedDay.format('MMM') === isError ? isError : `${selectedDay.format('MMM')} ${moment(showDate).format('YYYY')}`),
|
|
71
|
-
// [date, showDate]
|
|
72
|
-
// );
|
|
73
|
-
|
|
73
|
+
var isError = 'Invalid date';
|
|
74
74
|
var showMonth = (0, _react.useMemo)(function () {
|
|
75
75
|
return (0, _moment.default)(showDate).format('MMM');
|
|
76
76
|
}, [date, showDate]);
|
|
77
77
|
var showYear = (0, _react.useMemo)(function () {
|
|
78
78
|
return (0, _moment.default)(showDate).format('YYYY');
|
|
79
79
|
}, [date, showDate]);
|
|
80
|
+
var isShovPrevArrow = allowPrev && !(minDate && (0, _moment.default)(showDate).startOf('month').isSameOrBefore(momentMinDate, 'months'));
|
|
81
|
+
var isShovNextArrow = allowNext && (isDontLimitFuture || !(0, _moment.default)(showDate).startOf('month').isSameOrAfter(maxDate ? momentMaxDate : (0, _moment.default)().add(1, 'day').startOf('day'), 'months'));
|
|
80
82
|
(0, _react.useEffect)(function () {
|
|
81
83
|
var result = {};
|
|
82
84
|
var day = selectedDay.startOf('month');
|
|
@@ -105,8 +107,8 @@ function _default(props) {
|
|
|
105
107
|
if (!day) return /*#__PURE__*/_react.default.createElement("div", {
|
|
106
108
|
className: "calendar__day"
|
|
107
109
|
});
|
|
108
|
-
var isFutureDay = day && maxDate ? (0, _moment.default)(day.date).isAfter((0, _moment.default)(
|
|
109
|
-
var isBeforeDay = day && (0, _moment.default)(day.date).isBefore(
|
|
110
|
+
var isFutureDay = day && !isDontLimitFuture && maxDate ? (0, _moment.default)(day.date).isAfter(momentMaxDate || (0, _moment.default)().add(1, 'days'), 'day') : (0, _moment.default)(day.date).isAfter((0, _moment.default)(), 'day');
|
|
111
|
+
var isBeforeDay = day && (0, _moment.default)(day.date).isBefore(momentMinDate || '', 'day');
|
|
110
112
|
var classNames = (0, _classnames.default)('calendar__day', {
|
|
111
113
|
'calendar__day--clickable': day
|
|
112
114
|
}, {
|
|
@@ -120,7 +122,8 @@ function _default(props) {
|
|
|
120
122
|
key: "".concat(week, "_").concat(dayOfWeek),
|
|
121
123
|
className: classNames,
|
|
122
124
|
onClick: day && (isDontLimitFuture || !isFutureDay) ? function () {
|
|
123
|
-
|
|
125
|
+
setDate((0, _moment.default)(day.date).format('L'));
|
|
126
|
+
setIsOpened(false);
|
|
124
127
|
} : null // onMouseOver={day && !isFutureDay ? () => onHover(day.date) : null}
|
|
125
128
|
// onMouseLeave={() => onHover(null)}
|
|
126
129
|
|
|
@@ -168,7 +171,7 @@ function _default(props) {
|
|
|
168
171
|
className: "calendar-header"
|
|
169
172
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
170
173
|
className: "calendar-header__prev"
|
|
171
|
-
},
|
|
174
|
+
}, isShovPrevArrow && /*#__PURE__*/_react.default.createElement("div", {
|
|
172
175
|
onClick: handlePrev
|
|
173
176
|
}, /*#__PURE__*/_react.default.createElement(_reactFeather.ChevronLeft, null))), /*#__PURE__*/_react.default.createElement("div", {
|
|
174
177
|
className: (0, _classnames.default)('calendar-header__title'),
|
|
@@ -198,7 +201,7 @@ function _default(props) {
|
|
|
198
201
|
}
|
|
199
202
|
}) : "".concat(showYear))), /*#__PURE__*/_react.default.createElement("div", {
|
|
200
203
|
className: "calendar-header__next"
|
|
201
|
-
},
|
|
204
|
+
}, isShovNextArrow && /*#__PURE__*/_react.default.createElement("div", {
|
|
202
205
|
onClick: handleNext
|
|
203
206
|
}, /*#__PURE__*/_react.default.createElement(_reactFeather.ChevronRight, null)))), /*#__PURE__*/_react.default.createElement("div", {
|
|
204
207
|
className: "calendar__week"
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
(function () {
|
|
4
|
+
Element.prototype._addEventListener = Element.prototype.addEventListener;
|
|
5
|
+
|
|
6
|
+
Element.prototype.addEventListener = function (a, b, c) {
|
|
7
|
+
if (c == undefined) c = false;
|
|
8
|
+
|
|
9
|
+
this._addEventListener(a, b, c);
|
|
10
|
+
|
|
11
|
+
if (!this.eventListenerList) this.eventListenerList = {};
|
|
12
|
+
if (!this.eventListenerList[a]) this.eventListenerList[a] = []; //this.removeEventListener(a,b,c); // TODO - handle duplicates..
|
|
13
|
+
|
|
14
|
+
this.eventListenerList[a].push({
|
|
15
|
+
listener: b,
|
|
16
|
+
useCapture: c
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
Element.prototype.getEventListeners = function (a) {
|
|
21
|
+
if (!this.eventListenerList) this.eventListenerList = {};
|
|
22
|
+
if (a == undefined) return this.eventListenerList;
|
|
23
|
+
return this.eventListenerList[a];
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
Element.prototype.clearEventListeners = function (a) {
|
|
27
|
+
if (!this.eventListenerList) this.eventListenerList = {};
|
|
28
|
+
|
|
29
|
+
if (a == undefined) {
|
|
30
|
+
for (var x in this.getEventListeners()) {
|
|
31
|
+
this.clearEventListeners(x);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
var el = this.getEventListeners(a);
|
|
38
|
+
if (el == undefined) return;
|
|
39
|
+
|
|
40
|
+
for (var i = el.length - 1; i >= 0; --i) {
|
|
41
|
+
var ev = el[i];
|
|
42
|
+
this.removeEventListener(a, ev.listener, ev.useCapture);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
Element.prototype._removeEventListener = Element.prototype.removeEventListener;
|
|
47
|
+
|
|
48
|
+
Element.prototype.removeEventListener = function (a, b, c) {
|
|
49
|
+
if (c == undefined) c = false;
|
|
50
|
+
|
|
51
|
+
this._removeEventListener(a, b, c);
|
|
52
|
+
|
|
53
|
+
if (!this.eventListenerList) this.eventListenerList = {};
|
|
54
|
+
if (!this.eventListenerList[a]) this.eventListenerList[a] = []; // Find the event in the list
|
|
55
|
+
|
|
56
|
+
for (var i = 0; i < this.eventListenerList[a].length; i++) {
|
|
57
|
+
if (this.eventListenerList[a][i].listener == b, this.eventListenerList[a][i].useCapture == c) {
|
|
58
|
+
// Hmm..
|
|
59
|
+
this.eventListenerList[a].splice(i, 1);
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (this.eventListenerList[a].length == 0) delete this.eventListenerList[a];
|
|
65
|
+
};
|
|
66
|
+
})();
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = useMouseUpOutside;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
function useMouseUpOutside(ref, setOut, open) {
|
|
11
|
+
function handleMouseUpOutside(event) {
|
|
12
|
+
if (ref.current && !ref.current.contains(event.target)) {
|
|
13
|
+
setOut(open);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
(0, _react.useEffect)(function () {
|
|
18
|
+
document.addEventListener('mouseup', handleMouseUpOutside);
|
|
19
|
+
return function () {
|
|
20
|
+
document.removeEventListener('mouseup', handleMouseUpOutside);
|
|
21
|
+
};
|
|
22
|
+
}, [ref]);
|
|
23
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import React, { useState, useRef } from 'react';
|
|
2
2
|
import moment from 'moment';
|
|
3
3
|
import InputMask from 'react-input-mask';
|
|
4
|
+
import cn from 'classnames';
|
|
5
|
+
|
|
4
6
|
import Calendar from '../../UI/Calendar/Calendar';
|
|
5
7
|
import { useClickOutside } from '../../../Functions/useClickOutside';
|
|
6
8
|
|
|
@@ -10,16 +12,29 @@ const InputCalendar = ({
|
|
|
10
12
|
value,
|
|
11
13
|
minDate,
|
|
12
14
|
maxDate,
|
|
15
|
+
format = 'MM/DD/YYYY',
|
|
16
|
+
isDontLimitFuture,
|
|
13
17
|
onChange,
|
|
14
18
|
className = '',
|
|
15
19
|
placeholder = 'mm/dd/yyyy',
|
|
16
20
|
mask = '99/99/9999',
|
|
17
|
-
isDontLimitFuture,
|
|
18
21
|
isListTop,
|
|
22
|
+
disabled,
|
|
19
23
|
}) => {
|
|
20
24
|
const [isOpened, setIsOpened] = useState(false);
|
|
21
25
|
const calendarRef = useRef(null);
|
|
22
26
|
|
|
27
|
+
const formatedMinDate = moment(minDate).format(format) !== 'Invalid date'
|
|
28
|
+
? moment(minDate).format(format)
|
|
29
|
+
: null;
|
|
30
|
+
|
|
31
|
+
const formatedMaxDate = moment(maxDate).format(format) !== 'Invalid date'
|
|
32
|
+
? moment(maxDate).format(format)
|
|
33
|
+
: null;
|
|
34
|
+
|
|
35
|
+
const momentMinDate = moment(formatedMinDate, format).startOf('day');
|
|
36
|
+
const momentMaxDate = moment(formatedMaxDate, format).startOf('day');
|
|
37
|
+
|
|
23
38
|
useClickOutside(calendarRef, () => setIsOpened(false));
|
|
24
39
|
|
|
25
40
|
const changeInputValue = (val) => {
|
|
@@ -38,24 +53,48 @@ const InputCalendar = ({
|
|
|
38
53
|
return moment(new Date()).format('L');
|
|
39
54
|
};
|
|
40
55
|
|
|
56
|
+
const handleBlur = (e) => {
|
|
57
|
+
const value = e.target.value;
|
|
58
|
+
if (moment(value).format(format) === 'Invalid date') onChange('');
|
|
59
|
+
else if (moment(value).startOf('day').isBefore(momentMinDate, 'days')) onChange(formatedMinDate);
|
|
60
|
+
else if (moment(value).endOf('day').isAfter(momentMaxDate, 'days')) onChange(formatedMaxDate);
|
|
61
|
+
else onChange(moment(value).format(format));
|
|
62
|
+
};
|
|
63
|
+
|
|
41
64
|
return (
|
|
42
|
-
<div
|
|
65
|
+
<div
|
|
66
|
+
className={cn('input__wrap calendar-container', className, {
|
|
67
|
+
'calendar-container_disabled': disabled,
|
|
68
|
+
})}
|
|
69
|
+
ref={calendarRef}
|
|
70
|
+
>
|
|
43
71
|
<InputMask
|
|
44
72
|
mask={mask}
|
|
45
73
|
placeholder={placeholder}
|
|
46
74
|
value={value}
|
|
47
75
|
onChange={(e) => changeInputValue(e.target.value)}
|
|
48
76
|
className="calendar-dropdown"
|
|
49
|
-
onFocus={() => setIsOpened(
|
|
77
|
+
onFocus={() => setIsOpened(true)}
|
|
78
|
+
onBlur={!isOpened ? handleBlur : () => {}}
|
|
79
|
+
onKeyUp={e => {
|
|
80
|
+
if (e.key === 'Enter') e.target.blur();
|
|
81
|
+
setIsOpened(false);
|
|
82
|
+
}}
|
|
50
83
|
/>
|
|
51
84
|
{isOpened ? (
|
|
52
85
|
<Calendar
|
|
53
|
-
className={isListTop ? '' : ''}
|
|
54
86
|
date={getCalendarValue(value)}
|
|
55
87
|
setDate={(newDate) => changeCalendarDay(newDate)}
|
|
56
|
-
params={{
|
|
57
|
-
|
|
88
|
+
params={{
|
|
89
|
+
format,
|
|
90
|
+
minDate: formatedMinDate,
|
|
91
|
+
maxDate: formatedMaxDate,
|
|
92
|
+
momentMinDate,
|
|
93
|
+
momentMaxDate,
|
|
94
|
+
isDontLimitFuture
|
|
95
|
+
}}
|
|
58
96
|
isListTop={isListTop}
|
|
97
|
+
setIsOpened={setIsOpened}
|
|
59
98
|
/>
|
|
60
99
|
) : null}
|
|
61
100
|
</div>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
1
|
+
import React, { useEffect, useState } from 'react';
|
|
2
2
|
import InputCalendar from './InputCalendar';
|
|
3
3
|
|
|
4
4
|
global.lng = 'en';
|
|
@@ -15,16 +15,25 @@ export default {
|
|
|
15
15
|
|
|
16
16
|
const Template = (args) => {
|
|
17
17
|
const [date, setDate] = useState('');
|
|
18
|
+
const [disabled, setDisabled] = useState(false);
|
|
18
19
|
|
|
19
|
-
return
|
|
20
|
+
return (
|
|
21
|
+
<>
|
|
22
|
+
<InputCalendar {...args} value={date} onChange={(val) => setDate(val)} disabled={disabled} />
|
|
23
|
+
<div style={{ display: 'flex', flexFlow: 'row nowrap', justifyContent: 'flex-end', marginTop: '10px' }}>
|
|
24
|
+
<button style={{ border: 'solid 1px black', padding: '10px', width: '80px' }} onClick={() => setDisabled(!disabled)}>
|
|
25
|
+
{disabled ? 'Enable' : 'Disable'}
|
|
26
|
+
</button>
|
|
27
|
+
</div>
|
|
28
|
+
</>
|
|
29
|
+
);
|
|
20
30
|
};
|
|
21
31
|
|
|
22
32
|
export const CalendarTemplate = Template.bind({});
|
|
23
33
|
|
|
24
34
|
CalendarTemplate.args = {
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
isDontLimitFuture: true,
|
|
35
|
+
minDate: '01/10/2022',
|
|
36
|
+
maxDate: '04/20/2022',
|
|
37
|
+
// isDontLimitFuture: true,
|
|
29
38
|
// isListTop: true,
|
|
30
39
|
};
|
|
@@ -9,7 +9,7 @@ import Arrow from '../../UI/Arrow/Arrow';
|
|
|
9
9
|
|
|
10
10
|
import './InputDateRange.scss';
|
|
11
11
|
|
|
12
|
-
const InputDateRange = props => {
|
|
12
|
+
const InputDateRange = (props) => {
|
|
13
13
|
const {
|
|
14
14
|
txt,
|
|
15
15
|
id,
|
|
@@ -26,8 +26,21 @@ const InputDateRange = props => {
|
|
|
26
26
|
isUseAbs,
|
|
27
27
|
minDate = null,
|
|
28
28
|
maxDate = null,
|
|
29
|
+
format = 'MM/DD/YYYY',
|
|
30
|
+
isDontLimitFuture,
|
|
29
31
|
} = props;
|
|
30
32
|
|
|
33
|
+
const formatedMinDate = moment(minDate).format(format) !== 'Invalid date'
|
|
34
|
+
? moment(minDate).format(format)
|
|
35
|
+
: null;
|
|
36
|
+
|
|
37
|
+
const formatedMaxDate = moment(maxDate).format(format) !== 'Invalid date'
|
|
38
|
+
? moment(maxDate).format(format)
|
|
39
|
+
: null;
|
|
40
|
+
|
|
41
|
+
const momentMinDate = moment(formatedMinDate, format).startOf('day');
|
|
42
|
+
const momentMaxDate = moment(formatedMaxDate, format).startOf('day');
|
|
43
|
+
|
|
31
44
|
const actualValues = getActualDateRange(value);
|
|
32
45
|
const { isToggled, toggle, toggleOn, toggleOff } = useToggle(false);
|
|
33
46
|
const [current, setCurrent] = useState(actualValues?.intervalKey);
|
|
@@ -36,16 +49,15 @@ const InputDateRange = props => {
|
|
|
36
49
|
const ref = !isUseAbs ? useClickOutside(toggleOff) : useRef(null);
|
|
37
50
|
const internalContainerRef = useRef(null);
|
|
38
51
|
|
|
39
|
-
const handleChange = input => {
|
|
40
|
-
|
|
52
|
+
const handleChange = (input) => {
|
|
41
53
|
const newValue = getActualDateRange(input);
|
|
42
54
|
const formatedValue = {
|
|
43
55
|
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,
|
|
56
|
+
start: newValue.start ? moment(newValue.start).format(format || 'YYYY-MM-DDTHH:mm') : newValue.start,
|
|
57
|
+
end: newValue.end ? moment(newValue.end).format(format || 'YYYY-MM-DDTHH:mm') : newValue.end,
|
|
46
58
|
...(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') } : {})
|
|
59
|
+
...(newValue.startPrevDate ? { startPrevDate: moment(newValue.startPrevDate).format(format || 'YYYY-MM-DDTHH:mm') } : {}),
|
|
60
|
+
...(newValue.endPrevDate ? { endPrevDate: moment(newValue.endPrevDate).format(format || 'YYYY-MM-DDTHH:mm') } : {}),
|
|
49
61
|
};
|
|
50
62
|
|
|
51
63
|
onChange(formatedValue);
|
|
@@ -69,9 +81,9 @@ const InputDateRange = props => {
|
|
|
69
81
|
endTime !== '00:00' ? `(${endTime})` : ''
|
|
70
82
|
}`;
|
|
71
83
|
|
|
72
|
-
const getClasses = base =>
|
|
84
|
+
const getClasses = (base) =>
|
|
73
85
|
cn('date-range-input__range-text', {
|
|
74
|
-
'date-range-input__range-text_little': base.length > SYMBOLS_QUANTITY_IF_TIME_ADDED
|
|
86
|
+
'date-range-input__range-text_little': base.length > SYMBOLS_QUANTITY_IF_TIME_ADDED,
|
|
75
87
|
});
|
|
76
88
|
|
|
77
89
|
return (
|
|
@@ -113,16 +125,16 @@ const InputDateRange = props => {
|
|
|
113
125
|
...value,
|
|
114
126
|
intervalKey: getActualDateRange({
|
|
115
127
|
start: newStart,
|
|
116
|
-
end: newEnd
|
|
128
|
+
end: newEnd,
|
|
117
129
|
})?.intervalKey,
|
|
118
130
|
start: newStart,
|
|
119
131
|
end: newEnd,
|
|
120
132
|
startPrevDate,
|
|
121
|
-
endPrevDate
|
|
133
|
+
endPrevDate,
|
|
122
134
|
});
|
|
123
135
|
};
|
|
124
136
|
|
|
125
|
-
const handleArrowClick = type => {
|
|
137
|
+
const handleArrowClick = (type) => {
|
|
126
138
|
slideInterval(type === 'right' ? 'forward' : 'back');
|
|
127
139
|
toggleOff();
|
|
128
140
|
};
|
|
@@ -135,7 +147,7 @@ const InputDateRange = props => {
|
|
|
135
147
|
'date-range-input_hide-arrows': hideArrows,
|
|
136
148
|
'date-range-input_focused': isToggled,
|
|
137
149
|
'date-range-input_error': error,
|
|
138
|
-
'date-range-input_disabled': disabled
|
|
150
|
+
'date-range-input_disabled': disabled,
|
|
139
151
|
})}
|
|
140
152
|
>
|
|
141
153
|
<span className="date-range-input__label">{label}</span>
|
|
@@ -147,7 +159,7 @@ const InputDateRange = props => {
|
|
|
147
159
|
>
|
|
148
160
|
<div
|
|
149
161
|
className={cn('date-range-input__absolut-wraper', {
|
|
150
|
-
'date-range-input__absolut-wraper_right-position': isOptionsRight
|
|
162
|
+
'date-range-input__absolut-wraper_right-position': isOptionsRight,
|
|
151
163
|
})}
|
|
152
164
|
>
|
|
153
165
|
<div className={cn('date-range-input__static-part')}>
|
|
@@ -160,7 +172,7 @@ const InputDateRange = props => {
|
|
|
160
172
|
<div className="date-range-input__interval-key">
|
|
161
173
|
<span>
|
|
162
174
|
{(txt?.labels && txt.labels[actualValues?.intervalKey]) ??
|
|
163
|
-
|
|
175
|
+
(INTERVALS[actualValues?.intervalKey]?.label || CUSTOM_INTERVAL_KEY_TEXT)}
|
|
164
176
|
</span>
|
|
165
177
|
{current !== ALL_TIME_KEY && <span>:</span>}
|
|
166
178
|
</div>
|
|
@@ -176,7 +188,15 @@ const InputDateRange = props => {
|
|
|
176
188
|
type="left"
|
|
177
189
|
className="date-range-input__arrow"
|
|
178
190
|
onClick={() => handleArrowClick('left')}
|
|
179
|
-
disabled={
|
|
191
|
+
disabled={
|
|
192
|
+
disabled ||
|
|
193
|
+
actualValues?.intervalKey === ALL_TIME_KEY ||
|
|
194
|
+
(formatedMinDate &&
|
|
195
|
+
moment(actualValues?.start)
|
|
196
|
+
.subtract(moment(actualValues?.end).diff(actualValues?.start, 'hours'), 'hours')
|
|
197
|
+
.isBefore(momentMinDate)
|
|
198
|
+
)
|
|
199
|
+
}
|
|
180
200
|
/>
|
|
181
201
|
<Arrow
|
|
182
202
|
type="right"
|
|
@@ -185,10 +205,21 @@ const InputDateRange = props => {
|
|
|
185
205
|
disabled={
|
|
186
206
|
disabled ||
|
|
187
207
|
actualValues?.intervalKey === ALL_TIME_KEY ||
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
208
|
+
(!isDontLimitFuture &&
|
|
209
|
+
(formatedMaxDate
|
|
210
|
+
? (
|
|
211
|
+
moment(actualValues?.end)
|
|
212
|
+
.endOf('day')
|
|
213
|
+
.subtract(moment(actualValues?.end).diff(actualValues?.start, 'hours'), 'hours')
|
|
214
|
+
.isAfter(momentMaxDate.startOf('day'))
|
|
215
|
+
)
|
|
216
|
+
: (
|
|
217
|
+
moment(actualValues?.end)
|
|
218
|
+
.add(moment(actualValues?.end).diff(actualValues?.start, 'hours'), 'hours')
|
|
219
|
+
.isAfter(moment().add(1, 'day').startOf('day'))
|
|
220
|
+
)
|
|
221
|
+
)
|
|
222
|
+
)
|
|
192
223
|
}
|
|
193
224
|
/>
|
|
194
225
|
</div>
|
|
@@ -205,8 +236,12 @@ const InputDateRange = props => {
|
|
|
205
236
|
setIsCompare={setIsCompare}
|
|
206
237
|
toggleOff={toggleOff}
|
|
207
238
|
onChange={handleChange}
|
|
208
|
-
minDate={
|
|
209
|
-
maxDate={
|
|
239
|
+
minDate={formatedMinDate}
|
|
240
|
+
maxDate={formatedMaxDate}
|
|
241
|
+
format={format}
|
|
242
|
+
momentMinDate={momentMinDate}
|
|
243
|
+
momentMaxDate={momentMaxDate}
|
|
244
|
+
isDontLimitFuture={isDontLimitFuture}
|
|
210
245
|
/>
|
|
211
246
|
)}
|
|
212
247
|
</div>
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import React, { /* useEffect, */ useState } from 'react';
|
|
2
|
+
import moment from 'moment-timezone';
|
|
3
|
+
|
|
2
4
|
import InputDateRange from './InputDateRange';
|
|
3
5
|
import Table from '../Table/Table';
|
|
4
6
|
|
|
@@ -14,15 +16,13 @@ export default {
|
|
|
14
16
|
// options: ['admin', 'user']
|
|
15
17
|
// }
|
|
16
18
|
// }
|
|
17
|
-
}
|
|
19
|
+
},
|
|
18
20
|
};
|
|
19
21
|
|
|
20
|
-
const Template = args => {
|
|
22
|
+
const Template = (args) => {
|
|
21
23
|
const { dateRange, ...restOfProps } = args;
|
|
22
24
|
const [value, setValue] = useState(dateRange);
|
|
23
|
-
// useEffect(() => console.log(value), [value]);
|
|
24
25
|
|
|
25
|
-
// return <InputDateRange {...restOfProps} value={value} onChange={setValue} />;
|
|
26
26
|
return (
|
|
27
27
|
<div>
|
|
28
28
|
<div className="mb20">
|
|
@@ -38,7 +38,7 @@ InputDateRangeTemplate.args = {
|
|
|
38
38
|
txt: {},
|
|
39
39
|
buttonsTypes: {
|
|
40
40
|
// apply: 'ellipse-apply',
|
|
41
|
-
cancel: 'bark-outline'
|
|
41
|
+
cancel: 'bark-outline',
|
|
42
42
|
},
|
|
43
43
|
label: 'Date Range',
|
|
44
44
|
dateRange: { intervalKey: 'today' },
|
|
@@ -47,8 +47,10 @@ InputDateRangeTemplate.args = {
|
|
|
47
47
|
error: false,
|
|
48
48
|
disabled: false,
|
|
49
49
|
isHoverable: false,
|
|
50
|
-
|
|
51
|
-
|
|
50
|
+
// format: 'DD/MM/YYYY',
|
|
51
|
+
minDate: '01/10/2022',
|
|
52
|
+
maxDate: '04/20/2022',
|
|
53
|
+
// isDontLimitFuture: true,
|
|
52
54
|
// short: true,
|
|
53
55
|
isCompact: false,
|
|
54
56
|
// isFocused: true,
|
|
@@ -56,7 +58,7 @@ InputDateRangeTemplate.args = {
|
|
|
56
58
|
isCompareHidden: true,
|
|
57
59
|
hideArrows: false,
|
|
58
60
|
isOptionsRight: false,
|
|
59
|
-
isShortWeekNames: false
|
|
61
|
+
isShortWeekNames: false,
|
|
60
62
|
// limitRange,
|
|
61
63
|
// isUseAbs,
|
|
62
64
|
// absTooltip
|