UNPKG

12.2 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, '__esModule', { value: true });
4
5function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
6
7var slicedToArray = require('./slicedToArray-0711941d.js');
8require('./unsupportedIterableToArray-68db1d3b.js');
9var React = require('react');
10var React__default = _interopDefault(React);
11require('./_commonjsHelpers-72d386ba.js');
12var index = require('./index-b0606964.js');
13require('./defineProperty-0921a47c.js');
14require('./toConsumableArray-d8a4a2c3.js');
15var _styled = require('styled-components');
16var _styled__default = _interopDefault(_styled);
17require('./getPrototypeOf-2a661a20.js');
18require('./color.js');
19require('./components.js');
20require('./contains-component.js');
21require('./css.js');
22var dayjs_min = require('./dayjs.min-e07657bf.js');
23require('./date.js');
24require('./miscellaneous.js');
25require('./environment.js');
26require('./font.js');
27require('./math-f4029164.js');
28require('./characters.js');
29require('./format.js');
30require('./keycodes.js');
31require('./url.js');
32require('./web3.js');
33var constants = require('./constants.js');
34require('./breakpoints.js');
35require('./springs.js');
36require('./text-styles.js');
37require('./theme-dark.js');
38require('./theme-light.js');
39var Theme = require('./Theme.js');
40var _extends$1 = require('./extends-40571110.js');
41require('./objectWithoutProperties-35db8ab0.js');
42require('./index-ecc57c9f.js');
43require('./isObject-ec755c87.js');
44var Viewport = require('./Viewport-15101437.js');
45require('./Layout.js');
46require('./FocusVisible.js');
47require('./ButtonBase.js');
48require('./IconPropTypes-56de5759.js');
49require('./IconAddUser.js');
50require('./IconAlert.js');
51require('./IconAlignCenter.js');
52require('./IconAlignJustify.js');
53require('./IconAlignLeft.js');
54require('./IconAlignRight.js');
55require('./IconAragon.js');
56require('./IconArrowDown.js');
57require('./IconArrowLeft.js');
58require('./IconArrowRight.js');
59require('./IconArrowUp.js');
60require('./IconAtSign.js');
61require('./IconBlock.js');
62require('./IconBookmark.js');
63require('./IconCalendar.js');
64require('./IconCanvas.js');
65require('./IconCaution.js');
66require('./IconCenter.js');
67require('./IconChart.js');
68require('./IconChat.js');
69require('./IconCheck.js');
70require('./IconChip.js');
71require('./IconCircleCheck.js');
72require('./IconCircleMinus.js');
73require('./IconCirclePlus.js');
74require('./IconClock.js');
75require('./IconCloudDownload.js');
76require('./IconCloudUpload.js');
77require('./IconCoin.js');
78require('./IconConfiguration.js');
79require('./IconConnect.js');
80require('./IconConnection.js');
81require('./IconConsole.js');
82require('./IconCopy.js');
83require('./IconCross.js');
84require('./IconDashedSquare.js');
85require('./IconDown.js');
86require('./IconDownload.js');
87require('./IconEdit.js');
88require('./IconEllipsis.js');
89require('./IconEnter.js');
90require('./IconEthereum.js');
91require('./IconExternal.js');
92require('./IconFile.js');
93require('./IconFilter.js');
94require('./IconFlag.js');
95require('./IconFolder.js');
96require('./IconGraph2.js');
97require('./IconGraph.js');
98require('./IconGrid.js');
99require('./IconGroup.js');
100require('./IconHash.js');
101require('./IconHeart.js');
102require('./IconHide.js');
103require('./IconHome.js');
104require('./IconImage.js');
105require('./IconInfo.js');
106require('./IconLabel.js');
107require('./IconLayers.js');
108require('./IconLeft.js');
109require('./IconLink.js');
110require('./IconLocation.js');
111require('./IconLock.js');
112require('./IconMail.js');
113require('./IconMaximize.js');
114require('./IconMenu.js');
115require('./IconMinimize.js');
116require('./IconMinus.js');
117require('./IconMove.js');
118require('./IconNoPicture.js');
119require('./IconPicture.js');
120require('./IconPlus.js');
121require('./IconPower.js');
122require('./IconPrint.js');
123require('./IconProhibited.js');
124require('./IconQuestion.js');
125require('./IconRefresh.js');
126require('./IconRemoveUser.js');
127require('./IconRight.js');
128require('./IconRotateLeft.js');
129require('./IconRotateRight.js');
130require('./IconSearch.js');
131require('./IconSettings.js');
132require('./IconShare.js');
133require('./IconSquareMinus.js');
134require('./IconSquarePlus.js');
135require('./IconSquare.js');
136require('./IconStarFilled.js');
137require('./IconStar.js');
138require('./IconSwap.js');
139require('./IconTarget.js');
140require('./IconToken.js');
141require('./IconTrash.js');
142require('./IconUnlock.js');
143require('./IconUp.js');
144require('./IconUpload.js');
145require('./IconUser.js');
146require('./IconView.js');
147require('./IconVote.js');
148require('./IconWallet.js');
149require('./IconWarning.js');
150require('./IconWorld.js');
151require('./IconWrite.js');
152require('./IconZoomIn.js');
153require('./IconZoomOut.js');
154require('./objectWithoutPropertiesLoose-1af20ad0.js');
155require('react-dom');
156require('./web-d0294535.js');
157var Button = require('./Button.js');
158require('./getDisplayName-7ab6d318.js');
159require('./index-bc84a358.js');
160require('./index-0db71dc1.js');
161require('./RootPortal.js');
162require('./proptypes-5b34673d.js');
163var Popover = require('./Popover.js');
164require('./observe.js');
165require('./index-030bfca8.js');
166require('./providers.js');
167require('./MonthDay-f5f7ffa0.js');
168var DatePicker = require('./DatePicker.js');
169var consts = require('./consts.js');
170var Labels = require('./Labels.js');
171var utils = require('./utils.js');
172
173var _StyledPopover = _styled__default(Popover.default).withConfig({
174 displayName: "DateRangePicker___StyledPopover",
175 componentId: "s3s5m9-0"
176})(["min-width:", "px;border:0;filter:none;background:none;margin:2px 0 0 0;"], function (p) {
177 return p._css;
178});
179
180var _StyledDiv = _styled__default("div").withConfig({
181 displayName: "DateRangePicker___StyledDiv",
182 componentId: "s3s5m9-1"
183})(["padding:", "px ", "px ", "px;border:1px solid ", ";border-radius:", "px;background:", ";"], function (p) {
184 return p._css2;
185}, function (p) {
186 return p._css3;
187}, function (p) {
188 return p._css4;
189}, function (p) {
190 return p._css5;
191}, constants.RADIUS, function (p) {
192 return p._css6;
193});
194
195var _StyledDiv2 = _styled__default("div").withConfig({
196 displayName: "DateRangePicker___StyledDiv2",
197 componentId: "s3s5m9-2"
198})(["display:flex;flex-direction:row;align-items:baseline;"]);
199
200var _StyledDatePicker = _styled__default(DatePicker.default).withConfig({
201 displayName: "DateRangePicker___StyledDatePicker",
202 componentId: "s3s5m9-3"
203})(["margin-left:", "px;"], function (p) {
204 return p._css7;
205});
206
207var _StyledDiv3 = _styled__default("div").withConfig({
208 displayName: "DateRangePicker___StyledDiv3",
209 componentId: "s3s5m9-4"
210})(["display:flex;align-items:center;justify-content:space-between;margin-top:", "px;", ";"], function (p) {
211 return p._css8;
212}, function (p) {
213 return p._css9;
214});
215
216var _StyledButton = _styled__default(Button.default).withConfig({
217 displayName: "DateRangePicker___StyledButton",
218 componentId: "s3s5m9-5"
219})(["margin-left:", "px;"], function (p) {
220 return p._css10;
221});
222
223function DateRangePicker(_ref) {
224 var format = _ref.format,
225 endDateProp = _ref.endDate,
226 onChange = _ref.onChange,
227 startDateProp = _ref.startDate;
228 var theme = Theme.useTheme();
229 var labelsRef = React.useRef();
230
231 var _useState = React.useState(false),
232 _useState2 = slicedToArray._slicedToArray(_useState, 2),
233 showPicker = _useState2[0],
234 setShowPicker = _useState2[1];
235
236 var _useState3 = React.useState(startDateProp),
237 _useState4 = slicedToArray._slicedToArray(_useState3, 2),
238 startDate = _useState4[0],
239 setStartDate = _useState4[1];
240
241 var _useState5 = React.useState(endDateProp),
242 _useState6 = slicedToArray._slicedToArray(_useState5, 2),
243 endDate = _useState6[0],
244 setEndDate = _useState6[1]; // on closing the picked, reset state
245
246
247 React.useEffect(function () {
248 if (!showPicker) {
249 setStartDate(startDateProp);
250 setEndDate(endDateProp);
251 }
252 }, [endDateProp, startDateProp, showPicker]);
253 var handlePopoverClose = React.useCallback(function () {
254 return setShowPicker(false);
255 }, []);
256 var handleLabelsClick = React.useCallback(function () {
257 setShowPicker(function (show) {
258 return !show;
259 });
260 }, []);
261 var handleDateClick = React.useCallback(function (date) {
262 var result = utils.handleDateSelect({
263 date: date,
264 startDate: startDate,
265 endDate: endDate
266 });
267 result.startDate !== undefined && setStartDate(result.startDate);
268 result.endDate !== undefined && setEndDate(result.endDate);
269 }, [startDate, endDate]);
270 var handleApply = React.useCallback(function () {
271 setShowPicker(false);
272
273 if (startDate && endDate) {
274 onChange({
275 start: dayjs_min.dayjs(startDate).startOf('day').toDate(),
276 end: dayjs_min.dayjs(endDate).endOf('day').toDate()
277 });
278 }
279 }, [endDate, onChange, startDate]);
280 var handleClear = React.useCallback(function () {
281 setStartDate(null);
282 setEndDate(null);
283 setShowPicker(false);
284 onChange({
285 start: null,
286 end: null
287 });
288 }, [onChange]);
289 var labelProps = React.useMemo(function () {
290 var _startDate = showPicker ? startDate : startDateProp;
291
292 var _endDate = showPicker ? endDate : endDateProp;
293
294 return {
295 startText: _startDate ? dayjs_min.dayjs(_startDate).format(format) : consts.START_DATE,
296 endText: _endDate ? dayjs_min.dayjs(_endDate).format(format) : consts.END_DATE
297 };
298 }, [endDate, endDateProp, format, showPicker, startDate, startDateProp]);
299 var compactMode = Viewport.useViewport().below('medium');
300 var displayMonthBeforeOnLeft = React.useMemo(function () {
301 // If both dates are in the same month, use the right calendar
302 // for it, and display month before on the left calendar.
303 var propsDatesInSameMonth = startDateProp && endDateProp && dayjs_min.dayjs(startDateProp).isSame(dayjs_min.dayjs(endDateProp), 'month');
304 return !compactMode && (propsDatesInSameMonth || !startDateProp);
305 }, [compactMode, endDateProp, startDateProp]);
306 return /*#__PURE__*/React__default.createElement("div", null, /*#__PURE__*/React__default.createElement(Labels.default, _extends$1._extends({
307 ref: labelsRef,
308 enabled: showPicker,
309 hasSetDates: Boolean(startDateProp && endDateProp),
310 onClick: handleLabelsClick
311 }, labelProps)), /*#__PURE__*/React__default.createElement(_StyledPopover, {
312 closeOnOpenerFocus: true,
313 onClose: handlePopoverClose,
314 opener: labelsRef.current,
315 placement: "bottom-start",
316 visible: showPicker,
317 _css: 37.5 * constants.GU + 2
318 }, /*#__PURE__*/React__default.createElement(_StyledDiv, {
319 _css2: 2.5 * constants.GU,
320 _css3: 3 * constants.GU,
321 _css4: 3 * constants.GU,
322 _css5: theme.border,
323 _css6: theme.surface
324 }, /*#__PURE__*/React__default.createElement(_StyledDiv2, null, /*#__PURE__*/React__default.createElement(DatePicker.default, {
325 datesRangeEnd: endDate,
326 datesRangeStart: startDate,
327 initialDate: dayjs_min.dayjs(startDateProp || undefined).subtract(displayMonthBeforeOnLeft ? 1 : 0, 'month').toDate(),
328 onSelect: handleDateClick
329 }), !compactMode && /*#__PURE__*/React__default.createElement(_StyledDatePicker, {
330 datesRangeEnd: endDate,
331 datesRangeStart: startDate,
332 initialDate: dayjs_min.dayjs(endDateProp || undefined).toDate(),
333 onSelect: handleDateClick,
334 _css7: 1 * constants.GU
335 })), /*#__PURE__*/React__default.createElement(_StyledDiv3, {
336 _css8: constants.GU * 2.25,
337 _css9: compactMode ? '' : "\n max-width: 247px;\n margin-left: auto;\n "
338 }, /*#__PURE__*/React__default.createElement(Button.default, {
339 onClick: handleClear,
340 size: "small",
341 wide: true
342 }, "Reset"), /*#__PURE__*/React__default.createElement(_StyledButton, {
343 disabled: !startDate || !endDate,
344 mode: "strong",
345 onClick: handleApply,
346 size: "small",
347 wide: true,
348 _css10: 1.5 * constants.GU
349 }, "Apply")))));
350}
351
352DateRangePicker.propTypes = {
353 endDate: index.PropTypes.instanceOf(Date),
354 format: index.PropTypes.string,
355 onChange: index.PropTypes.func,
356 startDate: index.PropTypes.instanceOf(Date)
357};
358DateRangePicker.defaultProps = {
359 format: 'MM/DD/YYYY',
360 onChange: function onChange() {}
361};
362
363exports.default = DateRangePicker;
364//# sourceMappingURL=DateRangePicker.js.map