intelicoreact 0.0.62 → 0.0.66
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/Input/Input.js +15 -4
- package/dist/Atomic/FormElements/Input/Input.stories.js +7 -1
- package/dist/Atomic/FormElements/InputDateRange/InputDateRange.js +53 -43
- package/dist/Atomic/FormElements/InputDateRange/InputDateRange.stories.js +161 -4
- package/dist/Atomic/FormElements/InputDateRange/components/Datepicker.js +6 -3
- package/dist/Atomic/FormElements/InputDateRange/components/OpenedPart.js +5 -3
- package/dist/Atomic/FormElements/InputDateRange/components/SelectItem.js +0 -2
- package/dist/Atomic/FormElements/InputDateRange/dependencies.js +8 -0
- package/dist/Atomic/FormElements/RangeCalendar/RangeCalendar.js +7 -2
- package/package.json +2 -2
- package/src/Atomic/FormElements/Input/Input.js +4 -0
- package/src/Atomic/FormElements/Input/Input.stories.js +7 -1
- package/src/Atomic/FormElements/InputDateRange/InputDateRange.js +220 -213
- package/src/Atomic/FormElements/InputDateRange/InputDateRange.stories.js +102 -11
- package/src/Atomic/FormElements/InputDateRange/components/Datepicker.js +4 -1
- package/src/Atomic/FormElements/InputDateRange/components/OpenedPart.js +4 -2
- package/src/Atomic/FormElements/InputDateRange/components/SelectItem.js +0 -2
- package/src/Atomic/FormElements/InputDateRange/dependencies.js +8 -0
- package/src/Atomic/FormElements/RangeCalendar/RangeCalendar.js +5 -2
|
@@ -9,10 +9,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
9
9
|
});
|
|
10
10
|
exports.default = void 0;
|
|
11
11
|
|
|
12
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
13
|
-
|
|
14
12
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
15
13
|
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
+
|
|
16
16
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
17
17
|
|
|
18
18
|
var _react = _interopRequireWildcard(require("react"));
|
|
@@ -29,6 +29,10 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
29
29
|
|
|
30
30
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
31
31
|
|
|
32
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
33
|
+
|
|
34
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
35
|
+
|
|
32
36
|
var Input = function Input(_ref) {
|
|
33
37
|
var onChange = _ref.onChange,
|
|
34
38
|
disabled = _ref.disabled,
|
|
@@ -48,6 +52,8 @@ var Input = function Input(_ref) {
|
|
|
48
52
|
onFocus = _ref.onFocus,
|
|
49
53
|
onKeyUp = _ref.onKeyUp,
|
|
50
54
|
mask = _ref.mask,
|
|
55
|
+
maskChar = _ref.maskChar,
|
|
56
|
+
formatChars = _ref.formatChars,
|
|
51
57
|
error = _ref.error,
|
|
52
58
|
icon = _ref.icon,
|
|
53
59
|
symbolsLimit = _ref.symbolsLimit;
|
|
@@ -99,7 +105,8 @@ var Input = function Input(_ref) {
|
|
|
99
105
|
(0, _react.useEffect)(function () {
|
|
100
106
|
if (isEditing) inputRef.current.focus();
|
|
101
107
|
}, [isEditing, isFocused]);
|
|
102
|
-
|
|
108
|
+
|
|
109
|
+
var uniProps = _objectSpread(_objectSpread({
|
|
103
110
|
className: "input ".concat(className),
|
|
104
111
|
placeholder: placeholder,
|
|
105
112
|
value: value || '',
|
|
@@ -110,7 +117,11 @@ var Input = function Input(_ref) {
|
|
|
110
117
|
onKeyUp: handle.keyUp,
|
|
111
118
|
min: min,
|
|
112
119
|
max: max
|
|
113
|
-
}
|
|
120
|
+
}, maskChar ? {
|
|
121
|
+
maskChar: maskChar
|
|
122
|
+
} : {}), formatChars ? {
|
|
123
|
+
formatChars: formatChars
|
|
124
|
+
} : {});
|
|
114
125
|
|
|
115
126
|
function renderInput() {
|
|
116
127
|
if (mask) {
|
|
@@ -111,7 +111,13 @@ InputTemplate.args = {
|
|
|
111
111
|
min: '0',
|
|
112
112
|
max: '5',
|
|
113
113
|
placeholder: 'Placeholder',
|
|
114
|
-
mask: '',
|
|
114
|
+
// mask: 'nnnnn0129',
|
|
115
|
+
// maskChar: '_',
|
|
116
|
+
// formatChars: {
|
|
117
|
+
// 'n': '[0-9]',
|
|
118
|
+
// 's': '[A-Za-z]',
|
|
119
|
+
// '*': '[A-Za-z0-9]'
|
|
120
|
+
// },
|
|
115
121
|
icon: /*#__PURE__*/_react.default.createElement(_reactFeather.User, null),
|
|
116
122
|
symbolsLimit: 225
|
|
117
123
|
};
|
|
@@ -62,6 +62,7 @@ var InputDateRange = function InputDateRange(props) {
|
|
|
62
62
|
hideArrows = _props$hideArrows === void 0 ? false : _props$hideArrows,
|
|
63
63
|
isOptionsRight = props.isOptionsRight,
|
|
64
64
|
limitRange = props.limitRange,
|
|
65
|
+
isShortWeekNames = props.isShortWeekNames,
|
|
65
66
|
isUseAbs = props.isUseAbs,
|
|
66
67
|
absTooltip = props.absTooltip;
|
|
67
68
|
var actualValues = (0, _dependencies.getActualDateRange)(value);
|
|
@@ -86,6 +87,25 @@ var InputDateRange = function InputDateRange(props) {
|
|
|
86
87
|
var internalContainerRef = (0, _react.useRef)(null);
|
|
87
88
|
var isEndDateNearFuture = (0, _momentTimezone.default)(actualValues === null || actualValues === void 0 ? void 0 : actualValues.end).isSameOrAfter((0, _momentTimezone.default)());
|
|
88
89
|
|
|
90
|
+
var handleChange = function handleChange(input) {
|
|
91
|
+
var newValue = (0, _dependencies.getActualDateRange)(input);
|
|
92
|
+
|
|
93
|
+
var formatedValue = _objectSpread(_objectSpread(_objectSpread({
|
|
94
|
+
intervalKey: newValue.intervalKey,
|
|
95
|
+
start: newValue.start ? (0, _momentTimezone.default)(newValue.start).format('YYYY-MM-DDTHH:mm') : newValue.start,
|
|
96
|
+
end: newValue.end ? (0, _momentTimezone.default)(newValue.end).format('YYYY-MM-DDTHH:mm') : newValue.end
|
|
97
|
+
}, newValue.compare ? {
|
|
98
|
+
compare: newValue.compare
|
|
99
|
+
} : {}), newValue.startPrevDate ? {
|
|
100
|
+
startPrevDate: (0, _momentTimezone.default)(newValue.startPrevDate).format('YYYY-MM-DDTHH:mm')
|
|
101
|
+
} : {}), newValue.endPrevDate ? {
|
|
102
|
+
endPrevDate: (0, _momentTimezone.default)(newValue.endPrevDate).format('YYYY-MM-DDTHH:mm')
|
|
103
|
+
} : {});
|
|
104
|
+
|
|
105
|
+
onChange(formatedValue);
|
|
106
|
+
return formatedValue;
|
|
107
|
+
};
|
|
108
|
+
|
|
89
109
|
var Range = function Range() {
|
|
90
110
|
var SYMBOLS_QUANTITY_IF_TIME_ADDED = 13;
|
|
91
111
|
var start = actualValues.start,
|
|
@@ -116,8 +136,7 @@ var InputDateRange = function InputDateRange(props) {
|
|
|
116
136
|
var start = actualValues.start,
|
|
117
137
|
end = actualValues.end;
|
|
118
138
|
var intervalHoursCount = (0, _momentTimezone.default)(end).diff(start, 'hours');
|
|
119
|
-
var newEnd;
|
|
120
|
-
var newStart;
|
|
139
|
+
var newEnd, newStart;
|
|
121
140
|
var endHours = (0, _momentTimezone.default)(end).hours();
|
|
122
141
|
var startHours = (0, _momentTimezone.default)(start).hours();
|
|
123
142
|
|
|
@@ -131,7 +150,7 @@ var InputDateRange = function InputDateRange(props) {
|
|
|
131
150
|
|
|
132
151
|
var startPrevDate = (0, _momentTimezone.default)(newStart).subtract(intervalHoursCount, 'hours').subtract(1, 'seconds');
|
|
133
152
|
var endPrevDate = (0, _momentTimezone.default)(newEnd).subtract(1, 'seconds');
|
|
134
|
-
|
|
153
|
+
handleChange(_objectSpread(_objectSpread({}, value), {}, {
|
|
135
154
|
intervalKey: (_getActualDateRange = (0, _dependencies.getActualDateRange)({
|
|
136
155
|
start: newStart,
|
|
137
156
|
end: newEnd
|
|
@@ -146,36 +165,34 @@ var InputDateRange = function InputDateRange(props) {
|
|
|
146
165
|
var handleArrowClick = function handleArrowClick(type) {
|
|
147
166
|
slideInterval(type === 'right' ? 'forward' : 'back');
|
|
148
167
|
toggleOff();
|
|
149
|
-
};
|
|
168
|
+
}; // const absData = useMemo(
|
|
169
|
+
// () => ({
|
|
170
|
+
// body: OpenedPart,
|
|
171
|
+
// props: {
|
|
172
|
+
// ...props,
|
|
173
|
+
// key: `${actualValues.start}-${actualValues.end}-${actualValues.intervalKey}-${current}-${isCompare}`,
|
|
174
|
+
// actualValues,
|
|
175
|
+
// current,
|
|
176
|
+
// setCurrent,
|
|
177
|
+
// isCompare,
|
|
178
|
+
// setIsCompare,
|
|
179
|
+
// toggleOff,
|
|
180
|
+
// onChange,
|
|
181
|
+
// },
|
|
182
|
+
// clickOutsideCallback: () => toggleOff(),
|
|
183
|
+
// top: internalContainerRef.current?.getBoundingClientRect()?.bottom || 0,
|
|
184
|
+
// left: internalContainerRef.current?.getBoundingClientRect()?.left || 0,
|
|
185
|
+
// }),
|
|
186
|
+
// [isToggled, value, actualValues, current, isCompare],
|
|
187
|
+
// );
|
|
188
|
+
// useEffect(() => {
|
|
189
|
+
// if (current && isUseAbs && absTooltip) onChange(current, 'absTooltip/props/current');
|
|
190
|
+
// }, [current]);
|
|
191
|
+
// useEffect(() => {
|
|
192
|
+
// if (isUseAbs) onChange(isToggled ? absData : null, 'absTooltip');
|
|
193
|
+
// }, [isToggled]);
|
|
194
|
+
|
|
150
195
|
|
|
151
|
-
var absData = (0, _react.useMemo)(function () {
|
|
152
|
-
var _internalContainerRef, _internalContainerRef2, _internalContainerRef3, _internalContainerRef4;
|
|
153
|
-
|
|
154
|
-
return {
|
|
155
|
-
body: _OpenedPart.default,
|
|
156
|
-
props: _objectSpread(_objectSpread({}, props), {}, {
|
|
157
|
-
key: "".concat(actualValues.start, "-").concat(actualValues.end, "-").concat(actualValues.intervalKey, "-").concat(current, "-").concat(isCompare),
|
|
158
|
-
actualValues: actualValues,
|
|
159
|
-
current: current,
|
|
160
|
-
setCurrent: setCurrent,
|
|
161
|
-
isCompare: isCompare,
|
|
162
|
-
setIsCompare: setIsCompare,
|
|
163
|
-
toggleOff: toggleOff,
|
|
164
|
-
onChange: onChange
|
|
165
|
-
}),
|
|
166
|
-
clickOutsideCallback: function clickOutsideCallback() {
|
|
167
|
-
return toggleOff();
|
|
168
|
-
},
|
|
169
|
-
top: ((_internalContainerRef = internalContainerRef.current) === null || _internalContainerRef === void 0 ? void 0 : (_internalContainerRef2 = _internalContainerRef.getBoundingClientRect()) === null || _internalContainerRef2 === void 0 ? void 0 : _internalContainerRef2.bottom) || 0,
|
|
170
|
-
left: ((_internalContainerRef3 = internalContainerRef.current) === null || _internalContainerRef3 === void 0 ? void 0 : (_internalContainerRef4 = _internalContainerRef3.getBoundingClientRect()) === null || _internalContainerRef4 === void 0 ? void 0 : _internalContainerRef4.left) || 0
|
|
171
|
-
};
|
|
172
|
-
}, [isToggled, value, actualValues, current, isCompare]);
|
|
173
|
-
(0, _react.useEffect)(function () {
|
|
174
|
-
if (current && isUseAbs && absTooltip) onChange(current, 'absTooltip/props/current');
|
|
175
|
-
}, [current]);
|
|
176
|
-
(0, _react.useEffect)(function () {
|
|
177
|
-
if (isUseAbs) onChange(isToggled ? absData : null, 'absTooltip');
|
|
178
|
-
}, [isToggled]);
|
|
179
196
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
180
197
|
ref: internalContainerRef,
|
|
181
198
|
className: (0, _classnames.default)('date-range-input', className, {
|
|
@@ -200,14 +217,7 @@ var InputDateRange = function InputDateRange(props) {
|
|
|
200
217
|
className: (0, _classnames.default)('date-range-input__static-part')
|
|
201
218
|
}, /*#__PURE__*/_react.default.createElement("button", {
|
|
202
219
|
id: id,
|
|
203
|
-
className: (0, _classnames.default)('date-range-input__toggle-button')
|
|
204
|
-
// 'date-range-input__toggle-button',
|
|
205
|
-
// { 'form-select__input--disabled': disabled },
|
|
206
|
-
// { 'form-select__input--opened': isToggled },
|
|
207
|
-
// { 'form-select__input--focused': isToggled },
|
|
208
|
-
// className,
|
|
209
|
-
// )}
|
|
210
|
-
,
|
|
220
|
+
className: (0, _classnames.default)('date-range-input__toggle-button'),
|
|
211
221
|
disabled: disabled,
|
|
212
222
|
onClick: !disabled && !isHoverable ? toggle : undefined
|
|
213
223
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -220,14 +230,14 @@ var InputDateRange = function InputDateRange(props) {
|
|
|
220
230
|
type: "left",
|
|
221
231
|
className: "date-range-input__arrow",
|
|
222
232
|
onClick: function onClick() {
|
|
223
|
-
return handleArrowClick(
|
|
233
|
+
return handleArrowClick("left");
|
|
224
234
|
},
|
|
225
235
|
disabled: disabled || (actualValues === null || actualValues === void 0 ? void 0 : actualValues.intervalKey) === _dependencies.ALL_TIME_KEY
|
|
226
236
|
}), /*#__PURE__*/_react.default.createElement(_Arrow.default, {
|
|
227
237
|
type: "right",
|
|
228
238
|
className: "date-range-input__arrow",
|
|
229
239
|
onClick: function onClick() {
|
|
230
|
-
return handleArrowClick(
|
|
240
|
+
return handleArrowClick("right");
|
|
231
241
|
},
|
|
232
242
|
disabled: disabled || (actualValues === null || actualValues === void 0 ? void 0 : actualValues.intervalKey) === _dependencies.ALL_TIME_KEY || (actualValues === null || actualValues === void 0 ? void 0 : actualValues.intervalKey) === 'today' || (0, _momentTimezone.default)(actualValues === null || actualValues === void 0 ? void 0 : actualValues.end).add((0, _momentTimezone.default)(actualValues === null || actualValues === void 0 ? void 0 : actualValues.end).diff(actualValues === null || actualValues === void 0 ? void 0 : actualValues.start, 'hours'), 'hours').isAfter((0, _momentTimezone.default)().add(1, 'day').startOf('day'))
|
|
233
243
|
}))), isToggled && !isUseAbs && /*#__PURE__*/_react.default.createElement(_OpenedPart.default, (0, _extends2.default)({}, props, {
|
|
@@ -238,7 +248,7 @@ var InputDateRange = function InputDateRange(props) {
|
|
|
238
248
|
isCompare: isCompare,
|
|
239
249
|
setIsCompare: setIsCompare,
|
|
240
250
|
toggleOff: toggleOff,
|
|
241
|
-
onChange:
|
|
251
|
+
onChange: handleChange
|
|
242
252
|
})))), error && /*#__PURE__*/_react.default.createElement("span", {
|
|
243
253
|
className: "date-range-input__error-block"
|
|
244
254
|
}, error));
|
|
@@ -11,6 +11,8 @@ exports.InputDateRangeTemplate = exports.default = void 0;
|
|
|
11
11
|
|
|
12
12
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
13
13
|
|
|
14
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
15
|
+
|
|
14
16
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
17
|
|
|
16
18
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
@@ -19,12 +21,18 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
19
21
|
|
|
20
22
|
var _InputDateRange = _interopRequireDefault(require("./InputDateRange"));
|
|
21
23
|
|
|
24
|
+
var _Table = _interopRequireDefault(require("../Table/Table"));
|
|
25
|
+
|
|
22
26
|
var _excluded = ["dateRange"];
|
|
23
27
|
|
|
24
28
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
25
29
|
|
|
26
30
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
27
31
|
|
|
32
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
33
|
+
|
|
34
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
35
|
+
|
|
28
36
|
global.lng = 'en';
|
|
29
37
|
var _default = {
|
|
30
38
|
title: 'Form Elements/InputDateRange',
|
|
@@ -38,23 +46,171 @@ var _default = {
|
|
|
38
46
|
}
|
|
39
47
|
};
|
|
40
48
|
exports.default = _default;
|
|
49
|
+
var tableData = {
|
|
50
|
+
header: [{
|
|
51
|
+
id: 1,
|
|
52
|
+
label: 'state'
|
|
53
|
+
}, {
|
|
54
|
+
id: 2,
|
|
55
|
+
label: 'Tags'
|
|
56
|
+
}, {
|
|
57
|
+
id: 3,
|
|
58
|
+
label: 'status'
|
|
59
|
+
}, {
|
|
60
|
+
id: 4,
|
|
61
|
+
label: 'loanAmountApproved'
|
|
62
|
+
}, {
|
|
63
|
+
id: 5,
|
|
64
|
+
label: 'loanAmountRejected'
|
|
65
|
+
}, {
|
|
66
|
+
id: 6,
|
|
67
|
+
label: 'approveRate'
|
|
68
|
+
}, {
|
|
69
|
+
id: 7,
|
|
70
|
+
label: 'actions',
|
|
71
|
+
type: 'actions'
|
|
72
|
+
}],
|
|
73
|
+
rows: [{
|
|
74
|
+
id: 1,
|
|
75
|
+
link: {
|
|
76
|
+
label: 'CA',
|
|
77
|
+
link: '#s'
|
|
78
|
+
},
|
|
79
|
+
tags: [{
|
|
80
|
+
label: 'Label 1'
|
|
81
|
+
}],
|
|
82
|
+
status: {
|
|
83
|
+
value: '90',
|
|
84
|
+
status: 'active'
|
|
85
|
+
},
|
|
86
|
+
loanAmountApproved: {
|
|
87
|
+
value: '$70,000'
|
|
88
|
+
},
|
|
89
|
+
loanAmountRejected: {
|
|
90
|
+
value: '$30,000'
|
|
91
|
+
},
|
|
92
|
+
approveRate: {
|
|
93
|
+
value: '70%'
|
|
94
|
+
}
|
|
95
|
+
}, {
|
|
96
|
+
id: 2,
|
|
97
|
+
link: {
|
|
98
|
+
label: 'NY',
|
|
99
|
+
link: '#s'
|
|
100
|
+
},
|
|
101
|
+
advancedTags: [{
|
|
102
|
+
labelLeft: 'home',
|
|
103
|
+
labelRight: 'hoods',
|
|
104
|
+
active: 3,
|
|
105
|
+
pause: 1,
|
|
106
|
+
merchants: 5
|
|
107
|
+
}, {
|
|
108
|
+
labelRight: 'jewelry',
|
|
109
|
+
active: 3,
|
|
110
|
+
pause: 1,
|
|
111
|
+
merchants: 5
|
|
112
|
+
}, {
|
|
113
|
+
labelLeft: 'home',
|
|
114
|
+
labelRight: 'improvement',
|
|
115
|
+
active: 0,
|
|
116
|
+
pause: 0,
|
|
117
|
+
warnLeft: true,
|
|
118
|
+
warnLeftMsg: 'landerNotIncluded',
|
|
119
|
+
warnRightMsg: 'noMerchants'
|
|
120
|
+
}, {
|
|
121
|
+
labelLeft: 'home',
|
|
122
|
+
labelRight: 'hoods',
|
|
123
|
+
active: 3,
|
|
124
|
+
pause: 1,
|
|
125
|
+
merchants: 5
|
|
126
|
+
}, {
|
|
127
|
+
labelRight: 'jewelry',
|
|
128
|
+
active: 3,
|
|
129
|
+
pause: 1,
|
|
130
|
+
merchants: 5
|
|
131
|
+
}],
|
|
132
|
+
status: {
|
|
133
|
+
label: 'Active',
|
|
134
|
+
className: 'color--green-haze'
|
|
135
|
+
},
|
|
136
|
+
loanAmountApproved: {
|
|
137
|
+
value: '$3,000'
|
|
138
|
+
},
|
|
139
|
+
loanAmountRejected: {
|
|
140
|
+
value: '$7,000'
|
|
141
|
+
},
|
|
142
|
+
approveRate: {
|
|
143
|
+
value: '30%'
|
|
144
|
+
}
|
|
145
|
+
}, {
|
|
146
|
+
id: 3,
|
|
147
|
+
link: {
|
|
148
|
+
label: 'NH',
|
|
149
|
+
link: '#s'
|
|
150
|
+
},
|
|
151
|
+
tags: [{
|
|
152
|
+
label: 'Label 1'
|
|
153
|
+
}, {
|
|
154
|
+
label: 'Label 2'
|
|
155
|
+
}, {
|
|
156
|
+
label: 'Label 3'
|
|
157
|
+
}],
|
|
158
|
+
status: {
|
|
159
|
+
status: 'error'
|
|
160
|
+
},
|
|
161
|
+
loanAmountApproved: {
|
|
162
|
+
value: '$70,000'
|
|
163
|
+
},
|
|
164
|
+
loanAmountRejected: {
|
|
165
|
+
value: '$30,000'
|
|
166
|
+
},
|
|
167
|
+
approveRate: {
|
|
168
|
+
value: '70%'
|
|
169
|
+
}
|
|
170
|
+
}]
|
|
171
|
+
};
|
|
41
172
|
|
|
42
173
|
var Template = function Template(args) {
|
|
174
|
+
var _state$rows;
|
|
175
|
+
|
|
43
176
|
var dateRange = args.dateRange,
|
|
44
177
|
restOfProps = (0, _objectWithoutProperties2.default)(args, _excluded);
|
|
45
178
|
|
|
46
179
|
var _useState = (0, _react.useState)(dateRange),
|
|
47
180
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
48
181
|
value = _useState2[0],
|
|
49
|
-
setValue = _useState2[1];
|
|
50
|
-
|
|
182
|
+
setValue = _useState2[1];
|
|
183
|
+
|
|
184
|
+
var _useState3 = (0, _react.useState)(tableData),
|
|
185
|
+
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
|
|
186
|
+
state = _useState4[0],
|
|
187
|
+
setState = _useState4[1];
|
|
188
|
+
|
|
189
|
+
var rowsWithActions = state === null || state === void 0 ? void 0 : (_state$rows = state.rows) === null || _state$rows === void 0 ? void 0 : _state$rows.map(function (row) {
|
|
190
|
+
return _objectSpread(_objectSpread({}, row), {}, {
|
|
191
|
+
actions: row.isDeleted ? [{
|
|
192
|
+
type: 'undo'
|
|
193
|
+
}] : [{
|
|
194
|
+
type: 'download'
|
|
195
|
+
}, {
|
|
196
|
+
type: 'edit'
|
|
197
|
+
}, {
|
|
198
|
+
type: 'delete'
|
|
199
|
+
}]
|
|
200
|
+
});
|
|
201
|
+
}); // useEffect(() => console.log(value), [value]);
|
|
202
|
+
// return <InputDateRange {...restOfProps} value={value} onChange={setValue} />;
|
|
51
203
|
|
|
52
204
|
return /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement("div", {
|
|
53
205
|
className: "mb20"
|
|
54
206
|
}, /*#__PURE__*/_react.default.createElement(_InputDateRange.default, (0, _extends2.default)({}, restOfProps, {
|
|
55
207
|
value: value,
|
|
56
208
|
onChange: setValue
|
|
57
|
-
})))
|
|
209
|
+
}))), /*#__PURE__*/_react.default.createElement("div", null, /*#__PURE__*/_react.default.createElement(_Table.default, {
|
|
210
|
+
header: state.header,
|
|
211
|
+
rows: rowsWithActions,
|
|
212
|
+
onChange: setState
|
|
213
|
+
})));
|
|
58
214
|
};
|
|
59
215
|
|
|
60
216
|
var InputDateRangeTemplate = Template.bind({});
|
|
@@ -80,7 +236,8 @@ InputDateRangeTemplate.args = {
|
|
|
80
236
|
isIntervalsHidden: false,
|
|
81
237
|
isCompareHidden: true,
|
|
82
238
|
hideArrows: false,
|
|
83
|
-
isOptionsRight: false
|
|
239
|
+
isOptionsRight: false,
|
|
240
|
+
isShortWeekNames: false // limitRange,
|
|
84
241
|
// isUseAbs,
|
|
85
242
|
// absTooltip
|
|
86
243
|
|
|
@@ -66,7 +66,8 @@ var Datepicker = function Datepicker(props) {
|
|
|
66
66
|
isCompareHidden = props.isCompareHidden,
|
|
67
67
|
limitRange = props.limitRange,
|
|
68
68
|
handleItemClick = props.handleItemClick,
|
|
69
|
-
setActiveInterval = props.setActiveInterval
|
|
69
|
+
setActiveInterval = props.setActiveInterval,
|
|
70
|
+
isShortWeekNames = props.isShortWeekNames;
|
|
70
71
|
var _values$start = values.start,
|
|
71
72
|
start = _values$start === void 0 ? null : _values$start,
|
|
72
73
|
_values$end = values.end,
|
|
@@ -461,7 +462,8 @@ var Datepicker = function Datepicker(props) {
|
|
|
461
462
|
endPrevDate: endPrevDate,
|
|
462
463
|
onClick: handleClick,
|
|
463
464
|
onHover: handleHover,
|
|
464
|
-
limitRange: limitRange
|
|
465
|
+
limitRange: limitRange,
|
|
466
|
+
isShortWeekNames: isShortWeekNames
|
|
465
467
|
}), /*#__PURE__*/_react.default.createElement(_RangeCalendar.default, {
|
|
466
468
|
className: "date-picker__calendar",
|
|
467
469
|
date: date2,
|
|
@@ -472,7 +474,8 @@ var Datepicker = function Datepicker(props) {
|
|
|
472
474
|
startPrevDate: startPrevDate,
|
|
473
475
|
endPrevDate: endPrevDate,
|
|
474
476
|
onClick: handleClick,
|
|
475
|
-
onHover: handleHover
|
|
477
|
+
onHover: handleHover,
|
|
478
|
+
isShortWeekNames: isShortWeekNames
|
|
476
479
|
}))), /*#__PURE__*/_react.default.createElement("div", {
|
|
477
480
|
className: (0, _classnames.default)('date-picker__footer', {
|
|
478
481
|
'date-picker__footer_once-element': isCompareHidden
|
|
@@ -55,7 +55,8 @@ var OpenedPart = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
55
55
|
setCurrent = props.setCurrent,
|
|
56
56
|
isCompare = props.isCompare,
|
|
57
57
|
setIsCompare = props.setIsCompare,
|
|
58
|
-
toggleOff = props.toggleOff
|
|
58
|
+
toggleOff = props.toggleOff,
|
|
59
|
+
isShortWeekNames = props.isShortWeekNames;
|
|
59
60
|
|
|
60
61
|
var items = isCompact ? (0, _toConsumableArray2.default)(Object.keys(_dependencies.INTERVALS)) : [].concat((0, _toConsumableArray2.default)(Object.keys(_dependencies.INTERVALS)), [_dependencies.CUSTOM_INTERVAL_KEY]);
|
|
61
62
|
|
|
@@ -118,7 +119,7 @@ var OpenedPart = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
118
119
|
return /*#__PURE__*/_react.default.createElement(_SelectItem.default, {
|
|
119
120
|
key: index,
|
|
120
121
|
item: item,
|
|
121
|
-
label: (txt === null || txt === void 0 ? void 0 : txt.labels) && (txt === null || txt === void 0 ? void 0 : txt.labels[item]) || ((_intervals$item = _dependencies.INTERVALS[item]) === null || _intervals$item === void 0 ? void 0 : _intervals$item.label) || item,
|
|
122
|
+
label: (txt === null || txt === void 0 ? void 0 : txt.labels) && (txt === null || txt === void 0 ? void 0 : txt.labels[item]) || ((_intervals$item = _dependencies.INTERVALS[item]) === null || _intervals$item === void 0 ? void 0 : _intervals$item.label) || (item === _dependencies.CUSTOM_INTERVAL_KEY ? _dependencies.CUSTOM_INTERVAL_KEY_TEXT : item),
|
|
122
123
|
isActive: activeInterval === item,
|
|
123
124
|
onItemClick: function onItemClick() {
|
|
124
125
|
return handleItemClick(item.value || item);
|
|
@@ -146,7 +147,8 @@ var OpenedPart = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
|
146
147
|
onCancel: toggleOff,
|
|
147
148
|
isCompareHidden: isCompareHidden,
|
|
148
149
|
limitRange: limitRange,
|
|
149
|
-
setActiveInterval: setActiveInterval
|
|
150
|
+
setActiveInterval: setActiveInterval,
|
|
151
|
+
isShortWeekNames: isShortWeekNames
|
|
150
152
|
})));
|
|
151
153
|
});
|
|
152
154
|
|
|
@@ -11,8 +11,6 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
11
11
|
|
|
12
12
|
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
13
|
|
|
14
|
-
var _check = _interopRequireDefault(require("../../../../../../assets/icons/check.svg"));
|
|
15
|
-
|
|
16
14
|
var SelectItem = function SelectItem(_ref) {
|
|
17
15
|
var item = _ref.item,
|
|
18
16
|
label = _ref.label,
|
|
@@ -221,6 +221,14 @@ var getActualDateRange = function getActualDateRange(inputDateRange) {
|
|
|
221
221
|
return null;
|
|
222
222
|
}();
|
|
223
223
|
|
|
224
|
+
if (actualIntervalKey === ALL_TIME_KEY) return {
|
|
225
|
+
intervalKey: ALL_TIME_KEY,
|
|
226
|
+
start: null,
|
|
227
|
+
end: null,
|
|
228
|
+
compare: inputDateRange.compare,
|
|
229
|
+
startPrevDate: null,
|
|
230
|
+
endPrevDate: null
|
|
231
|
+
};
|
|
224
232
|
var actualValues = {
|
|
225
233
|
// intervalKey: inputDateRange.intervalKey || customIntervalKey,
|
|
226
234
|
intervalKey: actualIntervalKey || CUSTOM_INTERVAL_KEY,
|
|
@@ -43,7 +43,8 @@ var RangeCalendar = function RangeCalendar(props) {
|
|
|
43
43
|
onHover = _props$onHover === void 0 ? function () {} : _props$onHover,
|
|
44
44
|
startPrevDate = props.startPrevDate,
|
|
45
45
|
endPrevDate = props.endPrevDate,
|
|
46
|
-
limitRange = props.limitRange
|
|
46
|
+
limitRange = props.limitRange,
|
|
47
|
+
isShortWeekNames = props.isShortWeekNames;
|
|
47
48
|
|
|
48
49
|
var _useState = (0, _react.useState)({}),
|
|
49
50
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
@@ -125,6 +126,10 @@ var RangeCalendar = function RangeCalendar(props) {
|
|
|
125
126
|
setDate((0, _momentTimezone.default)(date).add(1, 'month').toDate());
|
|
126
127
|
};
|
|
127
128
|
|
|
129
|
+
var getFormatedWeekName = function getFormatedWeekName(input) {
|
|
130
|
+
return isShortWeekNames ? input.charAt(0) : input;
|
|
131
|
+
};
|
|
132
|
+
|
|
128
133
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
129
134
|
className: (0, _classnames.default)('range-calendar', className)
|
|
130
135
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
@@ -147,7 +152,7 @@ var RangeCalendar = function RangeCalendar(props) {
|
|
|
147
152
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
148
153
|
key: "day-of-week_".concat(dayOfWeek),
|
|
149
154
|
className: "range-calendar__day range-calendar__day--title"
|
|
150
|
-
}, (0, _momentTimezone.default)().weekday(dayOfWeek).format('dd')
|
|
155
|
+
}, getFormatedWeekName((0, _momentTimezone.default)().weekday(dayOfWeek).format('dd')));
|
|
151
156
|
})), Object.keys(days).map(function (week, index) {
|
|
152
157
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
153
158
|
key: "week_".concat(index),
|
package/package.json
CHANGED
|
@@ -21,6 +21,8 @@ const Input = ({
|
|
|
21
21
|
onFocus,
|
|
22
22
|
onKeyUp,
|
|
23
23
|
mask,
|
|
24
|
+
maskChar,
|
|
25
|
+
formatChars,
|
|
24
26
|
error,
|
|
25
27
|
icon,
|
|
26
28
|
symbolsLimit,
|
|
@@ -72,6 +74,8 @@ const Input = ({
|
|
|
72
74
|
onKeyUp: handle.keyUp,
|
|
73
75
|
min,
|
|
74
76
|
max,
|
|
77
|
+
...(maskChar ? { maskChar } : {}),
|
|
78
|
+
...(formatChars ? { formatChars } : {}),
|
|
75
79
|
};
|
|
76
80
|
|
|
77
81
|
function renderInput() {
|
|
@@ -67,7 +67,13 @@ InputTemplate.args = {
|
|
|
67
67
|
min: '0',
|
|
68
68
|
max: '5',
|
|
69
69
|
placeholder: 'Placeholder',
|
|
70
|
-
mask: '',
|
|
70
|
+
// mask: 'nnnnn0129',
|
|
71
|
+
// maskChar: '_',
|
|
72
|
+
// formatChars: {
|
|
73
|
+
// 'n': '[0-9]',
|
|
74
|
+
// 's': '[A-Za-z]',
|
|
75
|
+
// '*': '[A-Za-z0-9]'
|
|
76
|
+
// },
|
|
71
77
|
icon: <User />,
|
|
72
78
|
symbolsLimit: 225
|
|
73
79
|
};
|
|
@@ -7,228 +7,235 @@ import { useClickOutside, useToggle, getActualDateRange, INTERVALS, ALL_TIME_KEY
|
|
|
7
7
|
import OpenedPart from './components/OpenedPart';
|
|
8
8
|
import Arrow from '../../UI/Arrow/Arrow';
|
|
9
9
|
|
|
10
|
-
import './InputDateRange.scss'
|
|
10
|
+
import './InputDateRange.scss'
|
|
11
11
|
|
|
12
12
|
const InputDateRange = props => {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
13
|
+
const {
|
|
14
|
+
txt,
|
|
15
|
+
id,
|
|
16
|
+
label,
|
|
17
|
+
className,
|
|
18
|
+
buttonsTypes,
|
|
19
|
+
value,
|
|
20
|
+
onChange = () => {},
|
|
21
|
+
error,
|
|
22
|
+
disabled,
|
|
23
|
+
isHoverable,
|
|
24
|
+
short,
|
|
25
|
+
isCompact = false,
|
|
26
|
+
// isFocused = false,
|
|
27
|
+
isIntervalsHidden = false,
|
|
28
|
+
isCompareHidden = false,
|
|
29
|
+
hideArrows = false,
|
|
30
|
+
isOptionsRight,
|
|
31
|
+
limitRange,
|
|
32
|
+
isShortWeekNames,
|
|
33
|
+
isUseAbs,
|
|
34
|
+
absTooltip,
|
|
35
|
+
} = props;
|
|
36
|
+
|
|
37
|
+
const actualValues = getActualDateRange(value);
|
|
38
|
+
const { isToggled, toggle, toggleOn, toggleOff } = useToggle(false);
|
|
39
|
+
const [current, setCurrent] = useState(actualValues?.intervalKey);
|
|
40
|
+
const [isCompare, setIsCompare] = useState(actualValues?.compare);
|
|
41
|
+
|
|
42
|
+
const ref = !isUseAbs ? useClickOutside(toggleOff) : useRef(null);
|
|
43
|
+
const internalContainerRef = useRef(null);
|
|
44
|
+
const isEndDateNearFuture = moment(actualValues?.end).isSameOrAfter(moment());
|
|
45
|
+
|
|
46
|
+
const handleChange = input => {
|
|
47
|
+
const newValue = getActualDateRange(input);
|
|
48
|
+
const formatedValue = {
|
|
49
|
+
intervalKey: newValue.intervalKey,
|
|
50
|
+
start: newValue.start ? moment(newValue.start).format('YYYY-MM-DDTHH:mm') : newValue.start,
|
|
51
|
+
end: newValue.end ? moment(newValue.end).format('YYYY-MM-DDTHH:mm') : newValue.end,
|
|
52
|
+
...(newValue.compare ? {compare: newValue.compare} : {}),
|
|
53
|
+
...(newValue.startPrevDate ? {startPrevDate: moment(newValue.startPrevDate).format('YYYY-MM-DDTHH:mm')} : {}),
|
|
54
|
+
...(newValue.endPrevDate ? {endPrevDate: moment(newValue.endPrevDate).format('YYYY-MM-DDTHH:mm')} : {}),
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
onChange(formatedValue);
|
|
58
|
+
return formatedValue;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const Range = () => {
|
|
62
|
+
const SYMBOLS_QUANTITY_IF_TIME_ADDED = 13;
|
|
63
|
+
const { start, end } = actualValues;
|
|
64
|
+
if (!start || !end) return null;
|
|
65
|
+
|
|
66
|
+
const startTime = moment(start).format('HH:mm');
|
|
67
|
+
const endTime = moment(end).format('HH:mm');
|
|
68
|
+
|
|
69
|
+
const firstPart = `${moment(start).format('ll')} ${startTime !== '00:00' ? `(${startTime})` : ''}`;
|
|
70
|
+
const secondPart = `${(endTime !== '00:00' ? moment(end) : moment(end).subtract(1, 'days')).format('ll')} ${
|
|
71
|
+
endTime !== '00:00' ? `(${endTime})` : ''
|
|
72
|
+
}`;
|
|
73
|
+
|
|
74
|
+
const getClasses = base => cn('date-range-input__range-text', {
|
|
75
|
+
'date-range-input__range-text_little': base.length > SYMBOLS_QUANTITY_IF_TIME_ADDED
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
return (
|
|
79
|
+
<>
|
|
80
|
+
<span className={getClasses(firstPart)}>
|
|
81
|
+
{firstPart}
|
|
82
|
+
{endTime === '00:00' && moment(end).isSame(moment(start).add(1, 'days'), 'day') ? '' : ` - `}
|
|
83
|
+
</span>
|
|
84
|
+
{endTime === '00:00' && moment(end).isSame(moment(start).add(1, 'days'), 'day')
|
|
85
|
+
? null
|
|
86
|
+
:<span className={getClasses(secondPart)}>{secondPart}</span>
|
|
62
87
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
{firstPart}
|
|
67
|
-
{endTime === '00:00' && moment(end).isSame(moment(start).add(1, 'days'), 'day') ? '' : ` - `}
|
|
68
|
-
</span>
|
|
69
|
-
{endTime === '00:00' && moment(end).isSame(moment(start).add(1, 'days'), 'day') ? null : (
|
|
70
|
-
<span className={getClasses(secondPart)}>{secondPart}</span>
|
|
71
|
-
)}
|
|
72
|
-
</>
|
|
73
|
-
);
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
const slideInterval = (direction = 'forward') => {
|
|
77
|
-
const { start, end } = actualValues;
|
|
78
|
-
const intervalHoursCount = moment(end).diff(start, 'hours');
|
|
79
|
-
let newEnd;
|
|
80
|
-
let newStart;
|
|
81
|
-
const endHours = moment(end).hours();
|
|
82
|
-
const startHours = moment(start).hours();
|
|
83
|
-
if (direction === 'forward') {
|
|
84
|
-
newStart = moment(end)
|
|
85
|
-
.add(endHours === 0 ? 0 : 1, 'day')
|
|
86
|
-
.hours(startHours)
|
|
87
|
-
.toDate();
|
|
88
|
-
newEnd = moment(newStart).add(intervalHoursCount, 'hours');
|
|
89
|
-
} else {
|
|
90
|
-
newEnd = moment(start)
|
|
91
|
-
.subtract(endHours === 0 ? 0 : 1, 'day')
|
|
92
|
-
.hours(endHours)
|
|
93
|
-
.toDate();
|
|
94
|
-
newStart = moment(newEnd).subtract(intervalHoursCount, 'hours');
|
|
88
|
+
}
|
|
89
|
+
</>
|
|
90
|
+
)
|
|
95
91
|
}
|
|
96
|
-
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
92
|
+
|
|
93
|
+
const slideInterval = (direction = 'forward') => {
|
|
94
|
+
const { start, end } = actualValues;
|
|
95
|
+
const intervalHoursCount = moment(end).diff(start, 'hours');
|
|
96
|
+
let newEnd, newStart;
|
|
97
|
+
const endHours = moment(end).hours();
|
|
98
|
+
const startHours = moment(start).hours();
|
|
99
|
+
if (direction === 'forward') {
|
|
100
|
+
newStart = moment(end)
|
|
101
|
+
.add(endHours === 0 ? 0 : 1, 'day')
|
|
102
|
+
.hours(startHours)
|
|
103
|
+
.toDate();
|
|
104
|
+
newEnd = moment(newStart).add(intervalHoursCount, 'hours');
|
|
105
|
+
} else {
|
|
106
|
+
newEnd = moment(start)
|
|
107
|
+
.subtract(endHours === 0 ? 0 : 1, 'day')
|
|
108
|
+
.hours(endHours)
|
|
109
|
+
.toDate();
|
|
110
|
+
newStart = moment(newEnd).subtract(intervalHoursCount, 'hours');
|
|
111
|
+
}
|
|
112
|
+
const startPrevDate = moment(newStart).subtract(intervalHoursCount, 'hours').subtract(1, 'seconds');
|
|
113
|
+
const endPrevDate = moment(newEnd).subtract(1, 'seconds');
|
|
114
|
+
handleChange({
|
|
115
|
+
...value,
|
|
116
|
+
intervalKey: getActualDateRange({
|
|
117
|
+
start: newStart,
|
|
118
|
+
end: newEnd,
|
|
119
|
+
})?.intervalKey,
|
|
120
|
+
start: newStart,
|
|
121
|
+
end: newEnd,
|
|
122
|
+
startPrevDate,
|
|
123
|
+
endPrevDate,
|
|
124
|
+
});
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
const handleArrowClick = type => {
|
|
128
|
+
slideInterval(type === 'right' ? 'forward' : 'back');
|
|
129
|
+
toggleOff();
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
// const absData = useMemo(
|
|
133
|
+
// () => ({
|
|
134
|
+
// body: OpenedPart,
|
|
135
|
+
// props: {
|
|
136
|
+
// ...props,
|
|
137
|
+
// key: `${actualValues.start}-${actualValues.end}-${actualValues.intervalKey}-${current}-${isCompare}`,
|
|
138
|
+
// actualValues,
|
|
139
|
+
// current,
|
|
140
|
+
// setCurrent,
|
|
141
|
+
// isCompare,
|
|
142
|
+
// setIsCompare,
|
|
143
|
+
// toggleOff,
|
|
144
|
+
// onChange,
|
|
145
|
+
// },
|
|
146
|
+
// clickOutsideCallback: () => toggleOff(),
|
|
147
|
+
// top: internalContainerRef.current?.getBoundingClientRect()?.bottom || 0,
|
|
148
|
+
// left: internalContainerRef.current?.getBoundingClientRect()?.left || 0,
|
|
149
|
+
// }),
|
|
150
|
+
// [isToggled, value, actualValues, current, isCompare],
|
|
151
|
+
// );
|
|
152
|
+
|
|
153
|
+
// useEffect(() => {
|
|
154
|
+
// if (current && isUseAbs && absTooltip) onChange(current, 'absTooltip/props/current');
|
|
155
|
+
// }, [current]);
|
|
156
|
+
|
|
157
|
+
// useEffect(() => {
|
|
158
|
+
// if (isUseAbs) onChange(isToggled ? absData : null, 'absTooltip');
|
|
159
|
+
// }, [isToggled]);
|
|
160
|
+
|
|
161
|
+
return (
|
|
158
162
|
<div
|
|
159
|
-
|
|
160
|
-
'date-range-
|
|
161
|
-
|
|
163
|
+
ref={internalContainerRef}
|
|
164
|
+
className={cn('date-range-input', className, {
|
|
165
|
+
'date-range-input_compact': isCompact,
|
|
166
|
+
'date-range-input_hide-arrows': hideArrows,
|
|
167
|
+
'date-range-input_focused': isToggled,
|
|
168
|
+
'date-range-input_error': error,
|
|
169
|
+
'date-range-input_disabled': disabled,
|
|
170
|
+
})}
|
|
162
171
|
>
|
|
163
|
-
|
|
164
|
-
<
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
// { 'form-select__input--disabled': disabled },
|
|
170
|
-
// { 'form-select__input--opened': isToggled },
|
|
171
|
-
// { 'form-select__input--focused': isToggled },
|
|
172
|
-
// className,
|
|
173
|
-
// )}
|
|
174
|
-
disabled={disabled}
|
|
175
|
-
onClick={!disabled && !isHoverable ? toggle : undefined}
|
|
172
|
+
<span className="date-range-input__label" >{label}</span>
|
|
173
|
+
<div
|
|
174
|
+
className="date-range-input__wraper"
|
|
175
|
+
ref={ref}
|
|
176
|
+
onMouseEnter={isHoverable && toggleOn}
|
|
177
|
+
onMouseLeave={isHoverable && toggleOff}
|
|
176
178
|
>
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
(
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
179
|
+
<div className={cn('date-range-input__absolut-wraper', {
|
|
180
|
+
'date-range-input__absolut-wraper_right-position': isOptionsRight,
|
|
181
|
+
})}>
|
|
182
|
+
<div className={cn('date-range-input__static-part')}>
|
|
183
|
+
<button
|
|
184
|
+
id={id}
|
|
185
|
+
className={cn('date-range-input__toggle-button')}
|
|
186
|
+
disabled={disabled}
|
|
187
|
+
onClick={!disabled && !isHoverable ? toggle : undefined}
|
|
188
|
+
>
|
|
189
|
+
<div className="date-range-input__interval-key">
|
|
190
|
+
<span>
|
|
191
|
+
{(txt?.labels && txt.labels[actualValues?.intervalKey]) ?? (INTERVALS[actualValues?.intervalKey]?.label || CUSTOM_INTERVAL_KEY_TEXT)}
|
|
192
|
+
</span>
|
|
193
|
+
{current !== ALL_TIME_KEY && <span>:</span>}
|
|
194
|
+
</div>
|
|
195
|
+
{!isCompact && <div className={cn('date-range-input__range', {})}><Range /></div>}
|
|
196
|
+
</button>
|
|
197
|
+
{!isCompact && !hideArrows && (
|
|
198
|
+
<div className={cn('date-range-input__arrows-block')}>
|
|
199
|
+
<Arrow
|
|
200
|
+
type="left"
|
|
201
|
+
className="date-range-input__arrow"
|
|
202
|
+
onClick={() => handleArrowClick("left")}
|
|
203
|
+
disabled={disabled || actualValues?.intervalKey === ALL_TIME_KEY}
|
|
204
|
+
/>
|
|
205
|
+
<Arrow
|
|
206
|
+
type="right"
|
|
207
|
+
className="date-range-input__arrow"
|
|
208
|
+
onClick={() => handleArrowClick("right")}
|
|
209
|
+
disabled={
|
|
210
|
+
disabled ||
|
|
211
|
+
actualValues?.intervalKey === ALL_TIME_KEY ||
|
|
212
|
+
actualValues?.intervalKey === 'today' ||
|
|
213
|
+
moment(actualValues?.end)
|
|
214
|
+
.add(moment(actualValues?.end).diff(actualValues?.start, 'hours'), 'hours')
|
|
215
|
+
.isAfter(moment().add(1, 'day').startOf('day'))
|
|
216
|
+
}
|
|
217
|
+
/>
|
|
218
|
+
</div>
|
|
219
|
+
)}
|
|
220
|
+
</div>
|
|
221
|
+
{isToggled && !isUseAbs && (
|
|
222
|
+
<OpenedPart
|
|
223
|
+
{...props}
|
|
224
|
+
ref={internalContainerRef}
|
|
225
|
+
actualValues={actualValues}
|
|
226
|
+
current={current}
|
|
227
|
+
setCurrent={setCurrent}
|
|
228
|
+
isCompare={isCompare}
|
|
229
|
+
setIsCompare={setIsCompare}
|
|
230
|
+
toggleOff={toggleOff}
|
|
231
|
+
onChange={handleChange}
|
|
232
|
+
/>
|
|
233
|
+
)}
|
|
187
234
|
</div>
|
|
188
|
-
|
|
189
|
-
</
|
|
190
|
-
{!isCompact && !hideArrows && (
|
|
191
|
-
<div className={cn('date-range-input__arrows-block')}>
|
|
192
|
-
<Arrow
|
|
193
|
-
type="left"
|
|
194
|
-
className="date-range-input__arrow"
|
|
195
|
-
onClick={() => handleArrowClick('left')}
|
|
196
|
-
disabled={disabled || actualValues?.intervalKey === ALL_TIME_KEY}
|
|
197
|
-
/>
|
|
198
|
-
<Arrow
|
|
199
|
-
type="right"
|
|
200
|
-
className="date-range-input__arrow"
|
|
201
|
-
onClick={() => handleArrowClick('right')}
|
|
202
|
-
disabled={
|
|
203
|
-
disabled ||
|
|
204
|
-
actualValues?.intervalKey === ALL_TIME_KEY ||
|
|
205
|
-
actualValues?.intervalKey === 'today' ||
|
|
206
|
-
moment(actualValues?.end)
|
|
207
|
-
.add(moment(actualValues?.end).diff(actualValues?.start, 'hours'), 'hours')
|
|
208
|
-
.isAfter(moment().add(1, 'day').startOf('day'))
|
|
209
|
-
}
|
|
210
|
-
/>
|
|
211
|
-
</div>
|
|
212
|
-
)}
|
|
213
|
-
</div>
|
|
214
|
-
{isToggled && !isUseAbs && (
|
|
215
|
-
<OpenedPart
|
|
216
|
-
{...props}
|
|
217
|
-
ref={internalContainerRef}
|
|
218
|
-
actualValues={actualValues}
|
|
219
|
-
current={current}
|
|
220
|
-
setCurrent={setCurrent}
|
|
221
|
-
isCompare={isCompare}
|
|
222
|
-
setIsCompare={setIsCompare}
|
|
223
|
-
toggleOff={toggleOff}
|
|
224
|
-
onChange={onChange}
|
|
225
|
-
/>
|
|
226
|
-
)}
|
|
235
|
+
</div>
|
|
236
|
+
{error && <span className="date-range-input__error-block">{error}</span>}
|
|
227
237
|
</div>
|
|
228
|
-
|
|
229
|
-
{error && <span className="date-range-input__error-block">{error}</span>}
|
|
230
|
-
</div>
|
|
231
|
-
);
|
|
238
|
+
);
|
|
232
239
|
};
|
|
233
240
|
|
|
234
241
|
export default React.memo(InputDateRange);
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import React, { useState } from 'react';
|
|
1
|
+
import React, { /*useEffect,*/ useState } from 'react';
|
|
2
2
|
import InputDateRange from './InputDateRange';
|
|
3
|
+
import Table from '../Table/Table';
|
|
3
4
|
|
|
4
5
|
global.lng = 'en';
|
|
5
6
|
|
|
@@ -16,18 +17,107 @@ export default {
|
|
|
16
17
|
}
|
|
17
18
|
};
|
|
18
19
|
|
|
20
|
+
const tableData = {
|
|
21
|
+
header: [
|
|
22
|
+
{ id: 1, label: 'state' },
|
|
23
|
+
{ id: 2, label: 'Tags' },
|
|
24
|
+
{ id: 3, label: 'status' },
|
|
25
|
+
{ id: 4, label: 'loanAmountApproved' },
|
|
26
|
+
{ id: 5, label: 'loanAmountRejected' },
|
|
27
|
+
{ id: 6, label: 'approveRate' },
|
|
28
|
+
{ id: 7, label: 'actions', type: 'actions' }
|
|
29
|
+
],
|
|
30
|
+
rows: [
|
|
31
|
+
{
|
|
32
|
+
id: 1,
|
|
33
|
+
link: { label: 'CA', link: '#s' },
|
|
34
|
+
tags: [{ label: 'Label 1' }],
|
|
35
|
+
status: { value: '90', status: 'active' },
|
|
36
|
+
loanAmountApproved: { value: '$70,000' },
|
|
37
|
+
loanAmountRejected: { value: '$30,000' },
|
|
38
|
+
approveRate: { value: '70%' }
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: 2,
|
|
42
|
+
link: { label: 'NY', link: '#s' },
|
|
43
|
+
advancedTags: [
|
|
44
|
+
{
|
|
45
|
+
labelLeft: 'home',
|
|
46
|
+
labelRight: 'hoods',
|
|
47
|
+
active: 3,
|
|
48
|
+
pause: 1,
|
|
49
|
+
merchants: 5
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
labelRight: 'jewelry',
|
|
53
|
+
active: 3,
|
|
54
|
+
pause: 1,
|
|
55
|
+
merchants: 5
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
labelLeft: 'home',
|
|
59
|
+
labelRight: 'improvement',
|
|
60
|
+
active: 0,
|
|
61
|
+
pause: 0,
|
|
62
|
+
warnLeft: true,
|
|
63
|
+
warnLeftMsg: 'landerNotIncluded',
|
|
64
|
+
warnRightMsg: 'noMerchants'
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
labelLeft: 'home',
|
|
68
|
+
labelRight: 'hoods',
|
|
69
|
+
active: 3,
|
|
70
|
+
pause: 1,
|
|
71
|
+
merchants: 5
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
labelRight: 'jewelry',
|
|
75
|
+
active: 3,
|
|
76
|
+
pause: 1,
|
|
77
|
+
merchants: 5
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
status: { label: 'Active', className: 'color--green-haze' },
|
|
81
|
+
loanAmountApproved: { value: '$3,000' },
|
|
82
|
+
loanAmountRejected: { value: '$7,000' },
|
|
83
|
+
approveRate: { value: '30%' }
|
|
84
|
+
},
|
|
85
|
+
{
|
|
86
|
+
id: 3,
|
|
87
|
+
link: { label: 'NH', link: '#s' },
|
|
88
|
+
tags: [{ label: 'Label 1' }, { label: 'Label 2' }, { label: 'Label 3' }],
|
|
89
|
+
status: { status: 'error' },
|
|
90
|
+
loanAmountApproved: { value: '$70,000' },
|
|
91
|
+
loanAmountRejected: { value: '$30,000' },
|
|
92
|
+
approveRate: { value: '70%' }
|
|
93
|
+
}
|
|
94
|
+
]
|
|
95
|
+
};
|
|
96
|
+
|
|
19
97
|
const Template = args => {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
98
|
+
const { dateRange, ...restOfProps } = args;
|
|
99
|
+
const [value, setValue] = useState(dateRange);
|
|
100
|
+
|
|
101
|
+
const [state, setState] = useState(tableData);
|
|
102
|
+
|
|
103
|
+
const rowsWithActions = state?.rows?.map(row => ({
|
|
104
|
+
...row,
|
|
105
|
+
actions: row.isDeleted ? [{ type: 'undo' }] : [{ type: 'download' }, { type: 'edit' }, { type: 'delete' }]
|
|
106
|
+
}));
|
|
107
|
+
|
|
108
|
+
// useEffect(() => console.log(value), [value]);
|
|
109
|
+
|
|
110
|
+
// return <InputDateRange {...restOfProps} value={value} onChange={setValue} />;
|
|
111
|
+
return (
|
|
112
|
+
<div>
|
|
113
|
+
<div className="mb20">
|
|
114
|
+
<InputDateRange {...restOfProps} value={value} onChange={setValue} />
|
|
115
|
+
</div>
|
|
116
|
+
<div>
|
|
117
|
+
<Table header={state.header} rows={rowsWithActions} onChange={setState} />
|
|
118
|
+
</div>
|
|
28
119
|
</div>
|
|
29
|
-
|
|
30
|
-
);
|
|
120
|
+
);
|
|
31
121
|
};
|
|
32
122
|
|
|
33
123
|
export const InputDateRangeTemplate = Template.bind({});
|
|
@@ -52,6 +142,7 @@ InputDateRangeTemplate.args = {
|
|
|
52
142
|
isCompareHidden: true,
|
|
53
143
|
hideArrows: false,
|
|
54
144
|
isOptionsRight: false,
|
|
145
|
+
isShortWeekNames: false
|
|
55
146
|
// limitRange,
|
|
56
147
|
// isUseAbs,
|
|
57
148
|
// absTooltip
|
|
@@ -40,7 +40,8 @@ const Datepicker = props => {
|
|
|
40
40
|
isCompareHidden,
|
|
41
41
|
limitRange,
|
|
42
42
|
handleItemClick,
|
|
43
|
-
setActiveInterval
|
|
43
|
+
setActiveInterval,
|
|
44
|
+
isShortWeekNames
|
|
44
45
|
} = props;
|
|
45
46
|
const { start = null, end = null, compare = false } = values;
|
|
46
47
|
const startDateInputRef = useRef(null);
|
|
@@ -362,6 +363,7 @@ const Datepicker = props => {
|
|
|
362
363
|
onClick={handleClick}
|
|
363
364
|
onHover={handleHover}
|
|
364
365
|
limitRange={limitRange}
|
|
366
|
+
isShortWeekNames={isShortWeekNames}
|
|
365
367
|
/>
|
|
366
368
|
<Calendar
|
|
367
369
|
className="date-picker__calendar"
|
|
@@ -374,6 +376,7 @@ const Datepicker = props => {
|
|
|
374
376
|
endPrevDate={endPrevDate}
|
|
375
377
|
onClick={handleClick}
|
|
376
378
|
onHover={handleHover}
|
|
379
|
+
isShortWeekNames={isShortWeekNames}
|
|
377
380
|
/>
|
|
378
381
|
</div>
|
|
379
382
|
</div>
|
|
@@ -2,7 +2,7 @@ import React, {useEffect, useState} from 'react';
|
|
|
2
2
|
import moment from 'moment-timezone';
|
|
3
3
|
import cn from 'classnames';
|
|
4
4
|
|
|
5
|
-
import {INTERVALS as intervals, CUSTOM_INTERVAL_KEY as customKey } from '../dependencies';
|
|
5
|
+
import {INTERVALS as intervals, CUSTOM_INTERVAL_KEY as customKey, CUSTOM_INTERVAL_KEY_TEXT } from '../dependencies';
|
|
6
6
|
|
|
7
7
|
import SelectItem from './SelectItem';
|
|
8
8
|
import Datepicker from './Datepicker';
|
|
@@ -25,6 +25,7 @@ const OpenedPart = React.forwardRef((props, ref) => {
|
|
|
25
25
|
isCompare,
|
|
26
26
|
setIsCompare,
|
|
27
27
|
toggleOff,
|
|
28
|
+
isShortWeekNames
|
|
28
29
|
} = props;
|
|
29
30
|
|
|
30
31
|
const items = isCompact ? [...Object.keys(intervals)] : [...Object.keys(intervals), customKey];
|
|
@@ -76,7 +77,7 @@ const OpenedPart = React.forwardRef((props, ref) => {
|
|
|
76
77
|
<SelectItem
|
|
77
78
|
key={index}
|
|
78
79
|
item={item}
|
|
79
|
-
label={(txt?.labels && txt?.labels[item]) || intervals[item]?.label || item}
|
|
80
|
+
label={(txt?.labels && txt?.labels[item]) || intervals[item]?.label || (item === customKey ? CUSTOM_INTERVAL_KEY_TEXT : item )}
|
|
80
81
|
isActive={activeInterval === item}
|
|
81
82
|
onItemClick={() => handleItemClick(item.value || item)}
|
|
82
83
|
disabled={item === customKey}
|
|
@@ -103,6 +104,7 @@ const OpenedPart = React.forwardRef((props, ref) => {
|
|
|
103
104
|
isCompareHidden={isCompareHidden}
|
|
104
105
|
limitRange={limitRange}
|
|
105
106
|
setActiveInterval={setActiveInterval}
|
|
107
|
+
isShortWeekNames={isShortWeekNames}
|
|
106
108
|
/>
|
|
107
109
|
)}
|
|
108
110
|
</div>
|
|
@@ -130,6 +130,14 @@ export const getActualDateRange = inputDateRange => {
|
|
|
130
130
|
}
|
|
131
131
|
return null;
|
|
132
132
|
})();
|
|
133
|
+
if (actualIntervalKey === ALL_TIME_KEY) return {
|
|
134
|
+
intervalKey: ALL_TIME_KEY,
|
|
135
|
+
start: null,
|
|
136
|
+
end: null,
|
|
137
|
+
compare: inputDateRange.compare,
|
|
138
|
+
startPrevDate: null,
|
|
139
|
+
endPrevDate:null
|
|
140
|
+
};
|
|
133
141
|
const actualValues = {
|
|
134
142
|
// intervalKey: inputDateRange.intervalKey || customIntervalKey,
|
|
135
143
|
intervalKey: actualIntervalKey || CUSTOM_INTERVAL_KEY,
|
|
@@ -19,7 +19,8 @@ const RangeCalendar = props => {
|
|
|
19
19
|
onHover = () => {},
|
|
20
20
|
startPrevDate,
|
|
21
21
|
endPrevDate,
|
|
22
|
-
limitRange
|
|
22
|
+
limitRange,
|
|
23
|
+
isShortWeekNames
|
|
23
24
|
} = props;
|
|
24
25
|
|
|
25
26
|
const [days, setDays] = useState({});
|
|
@@ -100,6 +101,8 @@ const RangeCalendar = props => {
|
|
|
100
101
|
setDate(moment(date).add(1, 'month').toDate());
|
|
101
102
|
};
|
|
102
103
|
|
|
104
|
+
const getFormatedWeekName = input => isShortWeekNames ? input.charAt(0) : input;
|
|
105
|
+
|
|
103
106
|
return (
|
|
104
107
|
<div className={cn('range-calendar', className)}>
|
|
105
108
|
<div className="range-calendar-header">
|
|
@@ -126,7 +129,7 @@ const RangeCalendar = props => {
|
|
|
126
129
|
{[...Array(7).keys()].map(dayOfWeek => {
|
|
127
130
|
return (
|
|
128
131
|
<div key={`day-of-week_${dayOfWeek}`} className="range-calendar__day range-calendar__day--title">
|
|
129
|
-
{moment().weekday(dayOfWeek).format('dd')
|
|
132
|
+
{getFormatedWeekName(moment().weekday(dayOfWeek).format('dd'))}
|
|
130
133
|
</div>
|
|
131
134
|
);
|
|
132
135
|
})}
|