@gympass/yoga 7.49.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,229 @@
1
+ "use strict";
2
+
3
+ var _react = _interopRequireDefault(require("react"));
4
+
5
+ var _react2 = require("@testing-library/react");
6
+
7
+ var _moment = _interopRequireDefault(require("moment"));
8
+
9
+ var _ = require("../..");
10
+
11
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
12
+
13
+ describe('<Datepicker />', function () {
14
+ var testDate = new Date(2022, 7, 3);
15
+ describe('Snapshots', function () {
16
+ it('should match with single Datepicker', function () {
17
+ var _render = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
18
+ type: "single"
19
+ }))),
20
+ container = _render.container;
21
+
22
+ expect(container).toMatchSnapshot();
23
+ });
24
+ it('should match with range Datepicker', function () {
25
+ var _render2 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
26
+ type: "range"
27
+ }))),
28
+ container = _render2.container;
29
+
30
+ expect(container).toMatchSnapshot();
31
+ });
32
+ it('should match with default selected date single Datepicker', function () {
33
+ var _render3 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
34
+ type: "single",
35
+ startDate: testDate
36
+ }))),
37
+ container = _render3.container;
38
+
39
+ expect(container).toMatchSnapshot();
40
+ });
41
+ it('should match with default selected dates range Datepicker', function () {
42
+ var endDate = new Date();
43
+ endDate.setDate(testDate.getDate() + 15);
44
+
45
+ var _render4 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
46
+ type: "range",
47
+ startDate: testDate,
48
+ endDate: endDate
49
+ }))),
50
+ container = _render4.container;
51
+
52
+ expect(container).toMatchSnapshot();
53
+ });
54
+ it('should match with custom placeholder single Datepicker', function () {
55
+ var _render5 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
56
+ type: "single",
57
+ placeholder: "This is a custom placeholder :)"
58
+ }))),
59
+ container = _render5.container;
60
+
61
+ expect(container).toMatchSnapshot();
62
+ });
63
+ it('should match with disabled past dates Datepicker', function () {
64
+ var _render6 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
65
+ type: "single",
66
+ disablePastDates: true
67
+ }))),
68
+ container = _render6.container;
69
+
70
+ expect(container).toMatchSnapshot();
71
+ });
72
+ it('should match with disabled future dates Datepicker', function () {
73
+ var _render7 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
74
+ type: "single",
75
+ disableFutureDates: true
76
+ }))),
77
+ container = _render7.container;
78
+
79
+ expect(container).toMatchSnapshot();
80
+ });
81
+ it('should match with disabled Datepicker', function () {
82
+ var _render8 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
83
+ type: "single",
84
+ disabled: true
85
+ }))),
86
+ container = _render8.container;
87
+
88
+ expect(container).toMatchSnapshot();
89
+ });
90
+ it('should match with error Datepicker', function () {
91
+ var _render9 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
92
+ type: "single",
93
+ error: "This is an error"
94
+ }))),
95
+ container = _render9.container;
96
+
97
+ expect(container).toMatchSnapshot();
98
+ });
99
+ });
100
+ describe('Unit', function () {
101
+ var dateFormat = 'MMM D, YYYY';
102
+ it('should call onSelectSingle function on single Datepicker', function () {
103
+ var onSelectSingle = jest.fn();
104
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
105
+ type: "single",
106
+ onSelectSingle: onSelectSingle
107
+ })));
108
+ expect(onSelectSingle).toHaveBeenCalledTimes(1);
109
+
110
+ _react2.fireEvent.click(_react2.screen.getByRole('button'));
111
+
112
+ var day10 = _react2.screen.queryAllByText('10')[0];
113
+
114
+ _react2.fireEvent.click(day10);
115
+
116
+ expect(onSelectSingle).toHaveBeenCalledTimes(2);
117
+ });
118
+ it('should call onSelectRange function on range Datepicker', function () {
119
+ var onSelectRange = jest.fn();
120
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
121
+ type: "range",
122
+ onSelectRange: onSelectRange
123
+ })));
124
+ expect(onSelectRange).toHaveBeenCalledTimes(1);
125
+
126
+ _react2.fireEvent.click(_react2.screen.getByRole('button'));
127
+
128
+ var day10 = _react2.screen.queryAllByText('10')[0];
129
+
130
+ var day20 = _react2.screen.queryAllByText('20')[0];
131
+
132
+ _react2.fireEvent.click(day10);
133
+
134
+ expect(onSelectRange).toHaveBeenCalledTimes(2);
135
+
136
+ _react2.fireEvent.click(day20);
137
+
138
+ expect(onSelectRange).toHaveBeenCalledTimes(3);
139
+ });
140
+ it('should display default date on single Datepicker', function () {
141
+ var currentDate = new Date();
142
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
143
+ type: "single",
144
+ startDate: currentDate
145
+ })));
146
+ var formattedDate = (0, _moment["default"])(currentDate).format(dateFormat);
147
+ expect(_react2.screen.getByText(formattedDate)).toBeVisible();
148
+ });
149
+ it('should display default date range on range Datepicker', function () {
150
+ var currentDate = new Date();
151
+ var end = new Date();
152
+ end.setDate(currentDate.getDate() + 15);
153
+ var formattedStartDate = (0, _moment["default"])(currentDate).format(dateFormat);
154
+ var formattedEndDate = (0, _moment["default"])(end).format(dateFormat);
155
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
156
+ type: "range",
157
+ startDate: currentDate,
158
+ endDate: end
159
+ })));
160
+ expect(_react2.screen.getByText(formattedStartDate + " - " + formattedEndDate)).toBeVisible();
161
+ });
162
+ it('should display custom placeholder and "Select Date" if none is provided', function () {
163
+ var _render10 = (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
164
+ type: "single",
165
+ placeholder: "This is a custom placeholder :)"
166
+ }))),
167
+ rerender = _render10.rerender;
168
+
169
+ expect(_react2.screen.getByText('This is a custom placeholder :)')).toBeVisible();
170
+ rerender( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
171
+ type: "single"
172
+ })));
173
+ expect(_react2.screen.getByText('Select Date')).toBeVisible();
174
+ });
175
+ it('should disable past dates', function () {
176
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
177
+ type: "single",
178
+ disablePastDates: true
179
+ })));
180
+
181
+ _react2.fireEvent.click(_react2.screen.getByRole('button'));
182
+
183
+ var previousMonthArrow = _react2.screen.getByTestId('previous-month-arrow');
184
+
185
+ _react2.fireEvent.click(previousMonthArrow);
186
+
187
+ [].concat(Array(25)).forEach(function (_e, i) {
188
+ return expect(_react2.screen.getAllByText("" + (i + 1))[0].closest('div')).toHaveAttribute('disabled');
189
+ });
190
+ });
191
+ it('should disable future dates', function () {
192
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
193
+ type: "single",
194
+ startDate: testDate,
195
+ disableFutureDates: true
196
+ })));
197
+
198
+ _react2.fireEvent.click(_react2.screen.getByRole('button'));
199
+
200
+ var nextMonthArrow = _react2.screen.getByTestId('next-month-arrow');
201
+
202
+ _react2.fireEvent.click(nextMonthArrow);
203
+
204
+ [].concat(Array(25)).forEach(function (_e, i) {
205
+ return expect(_react2.screen.getAllByText("" + (i + 1))[0].closest('div')).toHaveAttribute('disabled');
206
+ });
207
+ });
208
+ it('should be disabled', function () {
209
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
210
+ type: "single",
211
+ startDate: testDate,
212
+ disabled: true
213
+ })));
214
+ var formattedDate = (0, _moment["default"])(testDate).format(dateFormat);
215
+
216
+ var datepickerInput = _react2.screen.getByText(formattedDate);
217
+
218
+ expect(datepickerInput).toHaveAttribute('disabled');
219
+ expect(datepickerInput.closest('div')).toHaveAttribute('disabled');
220
+ });
221
+ it('should display an error', function () {
222
+ (0, _react2.render)( /*#__PURE__*/_react["default"].createElement(_.ThemeProvider, null, /*#__PURE__*/_react["default"].createElement(_.Datepicker, {
223
+ type: "single",
224
+ error: "This is an error"
225
+ })));
226
+ expect(_react2.screen.getByText('This is an error')).toBeVisible();
227
+ });
228
+ });
229
+ });
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ exports.__esModule = true;
4
+ exports["default"] = void 0;
5
+
6
+ var _Datepicker = _interopRequireDefault(require("./Datepicker"));
7
+
8
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
9
+
10
+ var _default = _Datepicker["default"];
11
+ exports["default"] = _default;
@@ -25,6 +25,8 @@ var _CheckboxTheme = _interopRequireDefault(require("./../../Checkbox/Checkbox.t
25
25
 
26
26
  var _CheckboxSwitchTheme = _interopRequireDefault(require("./../../Checkbox/CheckboxSwitch.theme.js"));
27
27
 
28
+ var _DatepickerTheme = _interopRequireDefault(require("./../../Datepicker/Datepicker.theme.js"));
29
+
28
30
  var _DialogTheme = _interopRequireDefault(require("./../../Dialog/Dialog.theme.js"));
29
31
 
30
32
  var _DividerTheme = _interopRequireDefault(require("./../../Divider/Divider.theme.js"));
@@ -86,6 +88,7 @@ var componentThemes = {
86
88
  Card$CardWeb: _CardWebTheme["default"],
87
89
  Checkbox$Checkbox: _CheckboxTheme["default"],
88
90
  Checkbox$CheckboxSwitch: _CheckboxSwitchTheme["default"],
91
+ Datepicker$Datepicker: _DatepickerTheme["default"],
89
92
  Dialog$Dialog: _DialogTheme["default"],
90
93
  Divider$Divider: _DividerTheme["default"],
91
94
  Drawer$Drawer: _DrawerTheme["default"],
package/cjs/index.js CHANGED
@@ -131,6 +131,10 @@ var _Feedback = _interopRequireDefault(require("./Feedback"));
131
131
 
132
132
  exports.Feedback = _Feedback["default"];
133
133
 
134
+ var _Datepicker = _interopRequireDefault(require("./Datepicker"));
135
+
136
+ exports.Datepicker = _Datepicker["default"];
137
+
134
138
  var _Drawer = _interopRequireDefault(require("./Drawer"));
135
139
 
136
140
  exports.Drawer = _Drawer["default"];
@@ -0,0 +1,12 @@
1
+ var Datepicker = function Datepicker() {
2
+ return {
3
+ width: {
4
+ day: 32
5
+ },
6
+ height: {
7
+ day: 20
8
+ }
9
+ };
10
+ };
11
+
12
+ export default Datepicker;
@@ -0,0 +1,2 @@
1
+ import Datepicker from './web';
2
+ export default Datepicker;
@@ -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;