@gympass/yoga 7.48.0 → 7.50.0

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.
@@ -0,0 +1,334 @@
1
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5;
2
+
3
+ function _taggedTemplateLiteralLoose(strings, raw) { if (!raw) { raw = strings.slice(0); } strings.raw = raw; return strings; }
4
+
5
+ import React, { useEffect, useState } from 'react';
6
+ import styled from 'styled-components';
7
+ import { Icon, Text, Box } from '@gympass/yoga';
8
+ import { ChevronLeft, ChevronRight } from '@gympass/yoga-icons';
9
+ import { oneOf, func, instanceOf, bool } from 'prop-types';
10
+ import _ from 'lodash';
11
+ var CalendarWrapper = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref) {
12
+ var spacing = _ref.theme.yoga.spacing;
13
+ return "\n padding: " + spacing.xsmall + "px " + spacing.xsmall + "px " + spacing.small + "px " + spacing.xsmall + "px;\n ";
14
+ });
15
+ var DaysWrapper = styled.div(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref2) {
16
+ var spacing = _ref2.theme.yoga.spacing;
17
+ return "\n display: flex;\n justify-content: space-between;\n margin: " + spacing.xxsmall + "px " + spacing.zero + "px " + spacing.xsmall + "px " + spacing.zero + "px;\n ";
18
+ });
19
+ var Day = styled(Text.SectionTitle)(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref3) {
20
+ var colors = _ref3.theme.yoga.colors;
21
+ return "\n width: 40px;\n color: " + colors.medium + ";\n text-align: center;\n ";
22
+ });
23
+
24
+ var getDayFieldColor = function getDayFieldColor(selected, disabled, colors, aux) {
25
+ if (selected && !disabled) {
26
+ return colors.white;
27
+ }
28
+
29
+ if (disabled) {
30
+ return colors.text.disabled;
31
+ }
32
+
33
+ var currentDate = new Date();
34
+ var val = aux.val,
35
+ year = aux.year,
36
+ month = aux.month;
37
+
38
+ if ( // if current date
39
+ new Date(Date.UTC(year, month, val)).getTime() === new Date(Date.UTC(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate())).getTime()) {
40
+ return colors.primary;
41
+ }
42
+
43
+ return colors.stamina;
44
+ };
45
+
46
+ var toUTCDate = function toUTCDate(date) {
47
+ return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate())).getTime();
48
+ };
49
+
50
+ var getDayFieldRadius = function getDayFieldRadius(aux, radii) {
51
+ var _Date;
52
+
53
+ var val = aux.val,
54
+ startDate = aux.startDate,
55
+ endDate = aux.endDate,
56
+ year = aux.year,
57
+ month = aux.month;
58
+ var currentDate = (_Date = new Date(Date.UTC(year, month, val))) == null ? void 0 : _Date.getTime();
59
+
60
+ if (currentDate === toUTCDate(startDate) && endDate) {
61
+ return radii.circle + "px " + radii.sharp + "px " + radii.sharp + "px " + radii.circle + "px";
62
+ }
63
+
64
+ if (currentDate === toUTCDate(endDate) && startDate) {
65
+ return radii.sharp + "px " + radii.circle + "px " + radii.circle + "px " + radii.sharp + "px";
66
+ }
67
+
68
+ return radii.sharp + "px";
69
+ };
70
+
71
+ var DayField = styled.div(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref4) {
72
+ var selected = _ref4.selected,
73
+ inRange = _ref4.inRange,
74
+ disabled = _ref4.disabled,
75
+ aux = _ref4.aux,
76
+ _ref4$theme$yoga = _ref4.theme.yoga,
77
+ colors = _ref4$theme$yoga.colors,
78
+ radii = _ref4$theme$yoga.radii,
79
+ spacing = _ref4$theme$yoga.spacing,
80
+ datepicker = _ref4$theme$yoga.components.datepicker;
81
+ return "\n p {\n color: " + getDayFieldColor(selected, disabled, colors, aux) + ";\n z-index: 1;\n }\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n padding: " + spacing.zero + "px 21.3px;\n display: flex;\n align-items: center;\n justify-content: center;\n background: " + (inRange ? colors.clear : colors.white) + ";\n position: relative;\n cursor: pointer;\n " + (selected && inRange ? "border-radius: " + getDayFieldRadius(aux, radii) : "") + "\n " + (selected && !disabled ? "&:before {\n content: '';\n position: absolute;\n background: " + colors.vibin + ";\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n border-radius: " + radii.circle + "px;\n }" : "") + "\n " + (!disabled ? "&:hover {\n &:before {\n content: '';\n position: absolute;\n border: 1px solid " + colors.secondary + ";\n width: " + datepicker.width.day + "px;\n height: " + datepicker.width.day + "px;\n border-radius: " + radii.circle + "px;\n }\n }" : "") + "\n";
82
+ });
83
+ var Row = styled.div(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref5) {
84
+ var _ref5$theme$yoga = _ref5.theme.yoga,
85
+ radii = _ref5$theme$yoga.radii,
86
+ spacing = _ref5$theme$yoga.spacing;
87
+ return "\n display: flex;\n div:first-child {\n border-radius: " + radii.regular + "px 0 0 " + radii.regular + "px;\n }\n div:last-child {\n border-radius: 0 " + radii.regular + "px " + radii.regular + "px 0;\n }\n padding: " + spacing.xxxsmall + "px 0px;\n";
88
+ });
89
+
90
+ function Calendar(_ref6) {
91
+ var type = _ref6.type,
92
+ startDate = _ref6.startDate,
93
+ endDate = _ref6.endDate,
94
+ onSelectSingle = _ref6.onSelectSingle,
95
+ onSelectRange = _ref6.onSelectRange,
96
+ disablePastDates = _ref6.disablePastDates,
97
+ disableFutureDates = _ref6.disableFutureDates;
98
+
99
+ var _useState = useState(new Date().getUTCMonth()),
100
+ month = _useState[0],
101
+ setMonth = _useState[1];
102
+
103
+ var _useState2 = useState(new Date().getUTCFullYear()),
104
+ year = _useState2[0],
105
+ setYear = _useState2[1];
106
+
107
+ useEffect(function () {
108
+ if (startDate) {
109
+ setMonth(startDate.getUTCMonth());
110
+ setYear(startDate.getUTCFullYear());
111
+ }
112
+ }, [startDate]);
113
+
114
+ var getDayOfWeek = function getDayOfWeek(day) {
115
+ return new Date(Date.UTC(year, month, day)).getUTCDay();
116
+ };
117
+
118
+ var getDaysInMonth = function getDaysInMonth() {
119
+ return new Date(Date.UTC(year, month + 1, 0)).getUTCDate();
120
+ };
121
+
122
+ var getDaysInMonthBefore = function getDaysInMonthBefore() {
123
+ return new Date(Date.UTC(year, month, 0)).getUTCDate();
124
+ };
125
+
126
+ var toUTCDateDay = function toUTCDateDay(day) {
127
+ return new Date(Date.UTC(year, month, day)).getTime();
128
+ };
129
+
130
+ var isEqual = function isEqual(day) {
131
+ return startDate && toUTCDate(startDate) === toUTCDateDay(day) || endDate && toUTCDate(endDate) === toUTCDateDay(day);
132
+ };
133
+
134
+ var inRange = function inRange(day) {
135
+ return startDate && toUTCDate(startDate) <= toUTCDateDay(day) && endDate && toUTCDate(endDate) >= toUTCDateDay(day);
136
+ };
137
+
138
+ var isDisabled = function isDisabled(day) {
139
+ var local = new Date(Date.UTC(year, month, day));
140
+ var now = new Date();
141
+ var nowUTC = Date.UTC(now.getFullYear(), now.getMonth(), now.getDate());
142
+ var pastDatesDisabled = disablePastDates && local.getTime() < nowUTC;
143
+ var futureDateDisabled = disableFutureDates && local.getTime() > nowUTC;
144
+ return pastDatesDisabled || futureDateDisabled;
145
+ };
146
+
147
+ var _onClick = function onClick(day) {
148
+ var selectedDate = new Date(Date.UTC(year, month, day));
149
+ if (isDisabled(day) || startDate && selectedDate.getTime() === toUTCDate(startDate)) return;
150
+
151
+ if (type === 'single') {
152
+ onSelectSingle(selectedDate);
153
+ } else if (type === 'range') {
154
+ onSelectRange(selectedDate);
155
+ }
156
+ };
157
+
158
+ var getFirstWeek = function getFirstWeek() {
159
+ var day = getDayOfWeek(1);
160
+
161
+ var week = _.range(1, 7 - day + 1);
162
+
163
+ var lastDayBefore = getDaysInMonthBefore();
164
+ var daysBefore = [];
165
+
166
+ for (var i = lastDayBefore - (day - 1); i <= lastDayBefore; i += 1) {
167
+ daysBefore.push(i);
168
+ }
169
+
170
+ week = _.concat(daysBefore, week);
171
+ return week.map(function (val) {
172
+ return /*#__PURE__*/React.createElement(DayField, {
173
+ key: val,
174
+ disabled: val > 7 || isDisabled(val),
175
+ selected: isEqual(val),
176
+ onClick: function onClick() {
177
+ return val <= 7 && _onClick(val);
178
+ },
179
+ inRange: type === 'range' && val <= 7 && inRange(val),
180
+ aux: {
181
+ val: val,
182
+ startDate: startDate,
183
+ endDate: endDate,
184
+ year: year,
185
+ month: month
186
+ }
187
+ }, /*#__PURE__*/React.createElement(Text.Small, null, val));
188
+ });
189
+ };
190
+
191
+ var getMiddleWeeks = function getMiddleWeeks() {
192
+ var day = getDayOfWeek(1);
193
+ var firstDay = 7 - day + 1;
194
+ var weeks = [];
195
+
196
+ while (firstDay + 7 <= getDaysInMonth()) {
197
+ weeks.push(_.range(firstDay, firstDay + 7));
198
+ firstDay += 7;
199
+ }
200
+
201
+ return weeks.map(function (week, i) {
202
+ var days = week.map(function (val) {
203
+ return /*#__PURE__*/React.createElement(DayField, {
204
+ selected: isEqual(val),
205
+ onClick: function onClick() {
206
+ return _onClick(val);
207
+ },
208
+ inRange: type === 'range' && inRange(val),
209
+ key: val,
210
+ disabled: isDisabled(val),
211
+ aux: {
212
+ val: val,
213
+ startDate: startDate,
214
+ endDate: endDate,
215
+ year: year,
216
+ month: month
217
+ }
218
+ }, /*#__PURE__*/React.createElement(Text.Small, null, val));
219
+ });
220
+ /* eslint-disable-next-line react/no-array-index-key */
221
+
222
+ return /*#__PURE__*/React.createElement(Row, {
223
+ key: i
224
+ }, days);
225
+ });
226
+ };
227
+
228
+ var getLastWeek = function getLastWeek() {
229
+ var lastDay = getDaysInMonth();
230
+ var day = getDayOfWeek(lastDay);
231
+
232
+ var week = _.range(lastDay - day, lastDay + 1);
233
+
234
+ week = _.concat(week, _.range(1, 7 - day));
235
+ return week.map(function (val) {
236
+ return /*#__PURE__*/React.createElement(DayField, {
237
+ key: val,
238
+ disabled: val < 7 || isDisabled(val),
239
+ selected: isEqual(val),
240
+ onClick: function onClick() {
241
+ return val > 7 && _onClick(val);
242
+ },
243
+ inRange: type === 'range' && val > 7 && inRange(val),
244
+ aux: {
245
+ val: val,
246
+ startDate: startDate,
247
+ endDate: endDate,
248
+ year: year,
249
+ month: month
250
+ }
251
+ }, /*#__PURE__*/React.createElement(Text.Small, null, val));
252
+ });
253
+ };
254
+
255
+ var getDays = function getDays() {
256
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Row, null, getFirstWeek()), getMiddleWeeks(), /*#__PURE__*/React.createElement(Row, null, getLastWeek()));
257
+ };
258
+
259
+ var prior = function prior() {
260
+ var local = month - 1;
261
+
262
+ if (local < 0) {
263
+ local = 11;
264
+ setYear(year - 1);
265
+ }
266
+
267
+ setMonth(local);
268
+ };
269
+
270
+ var next = function next() {
271
+ var local = month + 1;
272
+
273
+ if (local > 11) {
274
+ local = 0;
275
+ setYear(year + 1);
276
+ }
277
+
278
+ setMonth(local);
279
+ };
280
+
281
+ return /*#__PURE__*/React.createElement(CalendarWrapper, null, /*#__PURE__*/React.createElement(Box, {
282
+ display: "flex",
283
+ justifyContent: "space-between",
284
+ m: "xxsmall",
285
+ mb: "zero",
286
+ pb: "small"
287
+ }, /*#__PURE__*/React.createElement(Icon, {
288
+ style: {
289
+ cursor: 'pointer'
290
+ },
291
+ as: ChevronLeft,
292
+ width: "large",
293
+ height: "large",
294
+ onClick: prior,
295
+ fill: "primary",
296
+ "data-testid": "previous-month-arrow"
297
+ }), /*#__PURE__*/React.createElement(Text, {
298
+ style: {
299
+ alignSelf: 'center'
300
+ }
301
+ }, new Intl.DateTimeFormat('en-US', {
302
+ month: 'long',
303
+ year: 'numeric'
304
+ }).format(new Date(year, month, 1, 0, 0, 0))), /*#__PURE__*/React.createElement(Icon, {
305
+ style: {
306
+ cursor: 'pointer'
307
+ },
308
+ as: ChevronRight,
309
+ width: "large",
310
+ height: "large",
311
+ onClick: next,
312
+ fill: "primary",
313
+ "data-testid": "next-month-arrow"
314
+ })), /*#__PURE__*/React.createElement(DaysWrapper, null, /*#__PURE__*/React.createElement(Day, null, "S"), /*#__PURE__*/React.createElement(Day, null, "M"), /*#__PURE__*/React.createElement(Day, null, "T"), /*#__PURE__*/React.createElement(Day, null, "W"), /*#__PURE__*/React.createElement(Day, null, "T"), /*#__PURE__*/React.createElement(Day, null, "F"), /*#__PURE__*/React.createElement(Day, null, "S")), /*#__PURE__*/React.createElement(Box, null, getDays()));
315
+ }
316
+
317
+ Calendar.propTypes = {
318
+ type: oneOf(['single', 'range']).isRequired,
319
+ startDate: instanceOf(Date),
320
+ endDate: instanceOf(Date),
321
+ onSelectSingle: func,
322
+ onSelectRange: func,
323
+ disablePastDates: bool,
324
+ disableFutureDates: bool
325
+ };
326
+ Calendar.defaultProps = {
327
+ startDate: undefined,
328
+ endDate: undefined,
329
+ onSelectSingle: null,
330
+ onSelectRange: null,
331
+ disablePastDates: false,
332
+ disableFutureDates: false
333
+ };
334
+ export default Calendar;
@@ -0,0 +1,246 @@
1
+ var _excluded = ["_disabled", "inputFilled"];
2
+
3
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9;
4
+
5
+ function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
6
+
7
+ function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
8
+
9
+ function _taggedTemplateLiteralLoose(strings, raw) { if (!raw) { raw = strings.slice(0); } strings.raw = raw; return strings; }
10
+
11
+ /* eslint-disable react/jsx-props-no-spreading */
12
+ import React, { useEffect, useRef, useState, useCallback } from 'react';
13
+ import { Booking, BookingFilled } from '@gympass/yoga-icons';
14
+ import { Text } from '@gympass/yoga';
15
+ import styled, { css } from 'styled-components';
16
+ import { bool, oneOf, func, instanceOf, string } from 'prop-types';
17
+ import moment from 'moment';
18
+ import { theme } from '../../Theme';
19
+ import Calendar from './Calendar';
20
+ var Wrapper = styled.div(_templateObject || (_templateObject = _taggedTemplateLiteralLoose(["\n position: relative;\n display: inline-block;\n vertical-align: top;\n width: ", ";\n"])), function (props) {
21
+ return props.fullWidth ? '100%' : css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteralLoose(["\n ", "px\n "])), theme.components.input.width);
22
+ });
23
+
24
+ var getSelectorBorderColor = function getSelectorBorderColor(open, error, disabled, colors, input) {
25
+ if (error) {
26
+ return colors.feedback.attention[1];
27
+ }
28
+
29
+ if (disabled) {
30
+ return colors.elements.backgroundAndDisabled;
31
+ }
32
+
33
+ if (open) {
34
+ return colors.deep;
35
+ }
36
+
37
+ return input.border.color["default"];
38
+ };
39
+
40
+ var Selector = styled.div(_templateObject3 || (_templateObject3 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref) {
41
+ var open = _ref.open,
42
+ error = _ref.error,
43
+ disabled = _ref.disabled,
44
+ _ref$theme$yoga = _ref.theme.yoga,
45
+ components = _ref$theme$yoga.components,
46
+ colors = _ref$theme$yoga.colors,
47
+ spacing = _ref$theme$yoga.spacing;
48
+ return "\n position: relative;\n display: flex;\n justify-content: flex-start;\n align-items: center;\n box-sizing: border-box;\n height: " + components.input.height + "px;\n width: 100%;\n padding: " + spacing.small + "px;\n background-color: " + colors.white + ";\n border-radius: " + components.input.border.radius + "px;\n border-width: " + components.input.border.width + "px;\n border-style: solid;\n border-color: " + getSelectorBorderColor(open, error, disabled, colors, components.input) + "\n color: " + components.input.font.color.focus + ";\n ";
49
+ });
50
+ var Input = styled(Text.Small)(_templateObject4 || (_templateObject4 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref2) {
51
+ var disabled = _ref2.disabled,
52
+ colors = _ref2.theme.yoga.colors;
53
+ return "\n width: 100%;\n padding: 0;\n border: none;\n cursor: pointer;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n color: " + (!disabled ? colors.text.primary : colors.text.disabled) + "\n ";
54
+ });
55
+ var InputPlaceholder = styled(Text.Small)(_templateObject5 || (_templateObject5 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref3) {
56
+ var disabled = _ref3.disabled,
57
+ colors = _ref3.theme.yoga.colors;
58
+ return "\n color: " + (!disabled ? colors.text.secondary : colors.text.disabled) + "\n ";
59
+ });
60
+ var TButton = styled.button(_templateObject6 || (_templateObject6 = _taggedTemplateLiteralLoose(["\n display: flex;\n align-content: center;\n align-items: center;\n justify-content: flex-end;\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n border: none;\n outline: none;\n background-color: transparent;\n cursor: pointer;\n"])));
61
+ var Panel = styled.div(_templateObject7 || (_templateObject7 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref4) {
62
+ var _ref4$theme$yoga = _ref4.theme.yoga,
63
+ components = _ref4$theme$yoga.components,
64
+ colors = _ref4$theme$yoga.colors,
65
+ radii = _ref4$theme$yoga.radii,
66
+ borders = _ref4$theme$yoga.borders,
67
+ spacing = _ref4$theme$yoga.spacing;
68
+ return "\n position: absolute;\n background-color: " + colors.white + ";\n border: " + borders.small + "px solid " + colors.elements.lineAndBorders + ";\n z-index: 1;\n width: " + components.input.width + "px;\n left: 0;\n border-radius: " + radii.regular + "px;\n margin-top: " + spacing.xxsmall + "px;\n ";
69
+ });
70
+ var CalendarIcon = styled(function (_ref5) {
71
+ var _disabled = _ref5._disabled,
72
+ inputFilled = _ref5.inputFilled,
73
+ props = _objectWithoutPropertiesLoose(_ref5, _excluded);
74
+
75
+ return !inputFilled ? /*#__PURE__*/React.createElement(Booking, _extends({
76
+ width: 20,
77
+ height: 20
78
+ }, props)) : /*#__PURE__*/React.createElement(BookingFilled, _extends({
79
+ width: 20,
80
+ height: 20
81
+ }, props));
82
+ })(_templateObject8 || (_templateObject8 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref6) {
83
+ var disabled = _ref6.disabled,
84
+ _ref6$theme$yoga = _ref6.theme.yoga,
85
+ colors = _ref6$theme$yoga.colors,
86
+ spacing = _ref6$theme$yoga.spacing;
87
+ return "\n fill: " + (disabled ? colors.text.disabled : colors.text.primary) + ";\n margin-right: " + spacing.xxsmall + "px;\n ";
88
+ });
89
+ var ErrorWrapper = styled(Text.Small)(_templateObject9 || (_templateObject9 = _taggedTemplateLiteralLoose(["\n ", "\n"])), function (_ref7) {
90
+ var _ref7$theme$yoga = _ref7.theme.yoga,
91
+ colors = _ref7$theme$yoga.colors,
92
+ components = _ref7$theme$yoga.components;
93
+ return "\n margin-top: " + components.input.helper.margin.top + "px;\n font-size: " + components.input.helper.font.size + "px;\n color: " + colors.feedback.attention[1] + ";\n position: absolute;\n ";
94
+ });
95
+ export var toUTC = function toUTC(date) {
96
+ return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
97
+ };
98
+
99
+ function Datepicker(_ref8) {
100
+ var fullWidth = _ref8.fullWidth,
101
+ type = _ref8.type,
102
+ placeholder = _ref8.placeholder,
103
+ startDate = _ref8.startDate,
104
+ endDate = _ref8.endDate,
105
+ onSelectSingle = _ref8.onSelectSingle,
106
+ disabled = _ref8.disabled,
107
+ onSelectRange = _ref8.onSelectRange,
108
+ disablePastDates = _ref8.disablePastDates,
109
+ disableFutureDates = _ref8.disableFutureDates,
110
+ error = _ref8.error,
111
+ onOpen = _ref8.onOpen;
112
+
113
+ var _useState = useState(),
114
+ open = _useState[0],
115
+ setOpen = _useState[1];
116
+
117
+ var _useState2 = useState(startDate),
118
+ startD = _useState2[0],
119
+ setStartDate = _useState2[1];
120
+
121
+ var _useState3 = useState(endDate),
122
+ endD = _useState3[0],
123
+ setEndDate = _useState3[1];
124
+
125
+ var ref = useRef(null);
126
+
127
+ var _useState4 = useState(false),
128
+ inputFilled = _useState4[0],
129
+ setInputFilled = _useState4[1];
130
+
131
+ var triggerOnOpen = useCallback(function () {
132
+ if (onOpen) onOpen(open === 'true');
133
+ }, [open]);
134
+
135
+ var onBlur = function onBlur() {
136
+ setOpen(false.toString());
137
+ triggerOnOpen();
138
+ };
139
+
140
+ useEffect(function () {
141
+ if (type === 'single' && onSelectSingle) {
142
+ onSelectSingle(startD);
143
+ setOpen(false.toString());
144
+ } else if (type === 'range' && onSelectRange) {
145
+ onSelectRange(startD, endD);
146
+ }
147
+
148
+ setInputFilled(!!startD);
149
+ }, [startD, endD]);
150
+
151
+ var onDateSingleSelect = function onDateSingleSelect(startLocal) {
152
+ setStartDate(startLocal);
153
+ };
154
+
155
+ useEffect(function () {
156
+ if (open === 'true') ref.current.focus();
157
+ }, [open]);
158
+
159
+ var onDateRangeSelect = function onDateRangeSelect(selectedDate) {
160
+ if (!endD) {
161
+ if (!startD) {
162
+ setStartDate(selectedDate);
163
+ } else if (selectedDate < startD) {
164
+ setStartDate(selectedDate);
165
+ setEndDate(undefined);
166
+ } else setEndDate(selectedDate);
167
+ } else {
168
+ setStartDate(selectedDate);
169
+ setEndDate(undefined);
170
+ }
171
+ };
172
+
173
+ var renderInput = function renderInput() {
174
+ if (!startD && !endD) {
175
+ return /*#__PURE__*/React.createElement(InputPlaceholder, {
176
+ disabled: disabled
177
+ }, placeholder != null ? placeholder : "Select Date");
178
+ }
179
+
180
+ var dateFormat = 'MMM D, YYYY';
181
+ return startD && /*#__PURE__*/React.createElement(Input, {
182
+ disabled: disabled
183
+ }, moment(startD).format(dateFormat), endD && " - " + moment(endD).format(dateFormat));
184
+ };
185
+
186
+ return /*#__PURE__*/React.createElement(Wrapper, {
187
+ fullWidth: fullWidth,
188
+ tabIndex: "0"
189
+ }, /*#__PURE__*/React.createElement(Selector, {
190
+ open: open === 'true',
191
+ disabled: disabled,
192
+ error: error
193
+ }, renderInput(), /*#__PURE__*/React.createElement(TButton, {
194
+ onClick: function onClick() {
195
+ if (!disabled) {
196
+ setOpen((open !== 'true').toString());
197
+ }
198
+
199
+ triggerOnOpen();
200
+ }
201
+ }, /*#__PURE__*/React.createElement(CalendarIcon, {
202
+ disabled: disabled,
203
+ inputFilled: inputFilled
204
+ }))), error && /*#__PURE__*/React.createElement(ErrorWrapper, null, error), open === 'true' && /*#__PURE__*/React.createElement(Panel, {
205
+ tabIndex: -1,
206
+ ref: ref,
207
+ onBlur: onBlur
208
+ }, /*#__PURE__*/React.createElement(Calendar, {
209
+ type: type,
210
+ startDate: startD,
211
+ endDate: endD,
212
+ onSelectSingle: onDateSingleSelect,
213
+ onSelectRange: onDateRangeSelect,
214
+ disablePastDates: disablePastDates,
215
+ disableFutureDates: disableFutureDates
216
+ })));
217
+ }
218
+
219
+ Datepicker.propTypes = {
220
+ fullWidth: bool,
221
+ type: oneOf(['single', 'range']).isRequired,
222
+ placeholder: string,
223
+ startDate: instanceOf(Date),
224
+ endDate: instanceOf(Date),
225
+ disabled: bool,
226
+ onSelectSingle: func,
227
+ onSelectRange: func,
228
+ disablePastDates: bool,
229
+ disableFutureDates: bool,
230
+ error: string,
231
+ onOpen: func
232
+ };
233
+ Datepicker.defaultProps = {
234
+ fullWidth: false,
235
+ placeholder: undefined,
236
+ startDate: undefined,
237
+ endDate: undefined,
238
+ disabled: false,
239
+ onSelectSingle: undefined,
240
+ onSelectRange: undefined,
241
+ disablePastDates: false,
242
+ disableFutureDates: false,
243
+ error: undefined,
244
+ onOpen: undefined
245
+ };
246
+ export default Datepicker;