baseui 11.0.1 → 11.0.2

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.
@@ -27,10 +27,6 @@ import type { OptionT } from '../select/index.js';
27
27
  // flowlint-next-line unclear-type:off
28
28
  type LocaleT = any; // see https://github.com/date-fns/date-fns/blob/master/src/locale/index.js.flow
29
29
 
30
- export type DateValueT<T> = ?T | Array<?T>;
31
-
32
- type onChangeT<T> = ({ date: DateValueT<T> }) => mixed;
33
-
34
30
  export type DensityT = $Keys<typeof DENSITY>;
35
31
 
36
32
  export type DatepickerOverridesT = {
@@ -92,13 +88,13 @@ export type DayPropsT<T = Date> = {
92
88
  month: ?number,
93
89
  onBlur: ({ event: Event, date: T }) => mixed,
94
90
  onFocus: ({ event: Event, date: T }) => mixed,
95
- onSelect: ({ date: DateValueT<T> }) => mixed,
91
+ onSelect: ({ date: T | Array<?T> }) => mixed,
96
92
  onClick: ({ event: Event, date: T }) => mixed,
97
93
  onMouseOver: ({ event: Event, date: T }) => mixed,
98
94
  onMouseLeave: ({ event: Event, date: T }) => mixed,
99
95
  overrides?: DatepickerOverridesT,
100
96
  peekNextMonth: boolean,
101
- value: DateValueT<T>,
97
+ value: ?T | $ReadOnlyArray<?T>,
102
98
  };
103
99
 
104
100
  export type DayStateT = {
@@ -127,15 +123,16 @@ export type WeekPropsT<T = Date> = {
127
123
  onDayFocus: ({ date: T, event: Event }) => mixed,
128
124
  onDayMouseOver: ({ date: T, event: Event }) => mixed,
129
125
  onDayMouseLeave: ({ date: T, event: Event }) => mixed,
130
- onChange?: onChangeT<T>,
126
+ onChange?: ({ +date: ?T | Array<?T> }) => mixed,
131
127
  overrides?: DatepickerOverridesT,
132
128
  peekNextMonth: boolean,
133
- value: DateValueT<T>,
129
+ value: ?T | $ReadOnlyArray<?T>,
134
130
  hasLockedBehavior: boolean,
135
131
  selectedInput?: InputRoleT,
136
132
  };
137
133
 
138
- export type MonthPropsT<T = Date> = WeekPropsT<T> & {
134
+ export type MonthPropsT<T = Date> = {
135
+ ...WeekPropsT<T>,
139
136
  fixedHeight?: boolean,
140
137
  };
141
138
 
@@ -193,7 +190,7 @@ export type CalendarPropsT<T = Date> = {
193
190
  /** Event handler that is called when the current rendered month's year is changed. */
194
191
  onYearChange?: ({ date: T }) => mixed,
195
192
  /** Event handler that is called when a new date is selected. */
196
- onChange?: onChangeT<T>,
193
+ onChange?: ({ +date: ?T | Array<?T> }) => mixed,
197
194
  /** Event handler that is called when a selection is made using the quick select menu. */
198
195
  onQuickSelectChange?: (option?: QuickSelectOption<T>) => mixed,
199
196
  /** Sets the orientation of the calendar when multiple months are displayed */
@@ -208,7 +205,7 @@ export type CalendarPropsT<T = Date> = {
208
205
  /** Defines if tabbing inside the calendar is circled within it. */
209
206
  trapTabbing?: boolean,
210
207
  /** Currently selected date. */
211
- value?: DateValueT<T>,
208
+ value?: ?T | $ReadOnlyArray<?T>,
212
209
  fixedHeight?: boolean,
213
210
  /** Determines whether user clicked startDate or endDate input to trigger calendar open */
214
211
  selectedInput?: InputRoleT,
@@ -225,7 +222,8 @@ export type QuickSelectOption<T> = {
225
222
  endDate?: T,
226
223
  };
227
224
 
228
- export type DatepickerPropsT<T = Date> = CalendarPropsT<T> & {
225
+ export type DatepickerPropsT<T = Date> = {
226
+ ...CalendarPropsT<T>,
229
227
  'aria-label'?: string,
230
228
  'aria-labelledby'?: string,
231
229
  'aria-describedby'?: ?string,
@@ -238,14 +236,18 @@ export type DatepickerPropsT<T = Date> = CalendarPropsT<T> & {
238
236
  required?: boolean,
239
237
  clearable?: boolean,
240
238
  displayValueAtRangeIndex?: number,
241
- formatDisplayValue?: (date: DateValueT<T>, formatString: string) => string,
239
+ formatDisplayValue?: (date: ?T | $ReadOnlyArray<?T>, formatString: string) => string,
242
240
  formatString: string,
243
241
  /** Where to mount the popover */
244
242
  mountNode?: HTMLElement,
243
+ /** When single picker, fn is always called. When range picker, fn is called when start and end date are selected. */
244
+ onChange?: ({ +date: ?T | Array<T> }) => mixed,
245
245
  /** Called when calendar is closed */
246
246
  onClose?: () => mixed,
247
247
  /** Called when calendar is opened */
248
248
  onOpen?: () => mixed,
249
+ /** When single picker, fn is always called. When range picker, fn is called when either start or end date changes. */
250
+ onRangeChange?: ({ +date: ?T | Array<?T> }) => mixed,
249
251
  mask?: string | null,
250
252
  /** Determines whether startDate and endDate should be updated independently of eachother */
251
253
  rangedCalendarBehavior?: RangedCalendarBehaviorT,
@@ -253,6 +255,7 @@ export type DatepickerPropsT<T = Date> = CalendarPropsT<T> & {
253
255
  separateRangeInputs?: boolean,
254
256
  startDateLabel?: string,
255
257
  endDateLabel?: string,
258
+ value?: ?T | $ReadOnlyArray<?T>,
256
259
  };
257
260
 
258
261
  export type SharedStylePropsT = {
@@ -289,7 +292,7 @@ export type StateChangeTypeT = ?$Values<typeof STATE_CHANGE_TYPE>;
289
292
 
290
293
  export type ContainerStateT<T = Date> = {
291
294
  /** Selected `Date`. If `range` is set, `value` is an array of 2 values. */
292
- value?: DateValueT<T>,
295
+ value?: ?T | $ReadOnlyArray<?T>,
293
296
  };
294
297
 
295
298
  export type NavigationContainerStateT<T = Date> = {
@@ -310,46 +313,21 @@ export type StateReducerT<T = Date> = (
310
313
  currentState: ContainerStateT<T>
311
314
  ) => ContainerStateT<T>;
312
315
 
313
- export type NavigationContainerStateReducerT<T = Date> = (
314
- stateType: StateChangeTypeT,
315
- nextState: NavigationContainerStateT<T>,
316
- currentState: NavigationContainerStateT<T>
317
- ) => NavigationContainerStateT<T>;
318
-
319
316
  export type StatefulContainerPropsT<PropsT, T = Date> = {
320
317
  children: (PropsT) => React.Node,
321
318
  /** Initial state of an uncontrolled datepicker component. */
322
319
  initialState: ContainerStateT<T>,
323
320
  /** A state change handler. */
324
321
  stateReducer: StateReducerT<T>,
325
- /** Event handler that is called when a date/time is selected. */
326
- onChange?: onChangeT<T>,
322
+ /** When single picker, fn is called when date/time is selected. When range picker, fn is called when both start and end are selected. */
323
+ onChange?: ({ +date: ?T | Array<T> }) => mixed,
324
+ /** When single picker, fn is called when date/time is selected. When range picker, fn is called when either start or end date changes. */
325
+ onRangeChange?: ({ +date: ?T | Array<?T> }) => mixed,
327
326
  adapter?: DateIOAdapter<T>,
328
327
  /** Should the date value be stored as an array or single value. */
329
328
  range?: boolean,
330
329
  };
331
330
 
332
- // This type is seemingly not used anywhere
333
- export type NavigationContainerPropsT<T = Date> = {
334
- children: (CalendarPropsT<T>) => React.Node,
335
- range?: boolean,
336
- highlightedDate?: ?Date,
337
- /** Day's `mouseover` event handler. */
338
- onDayMouseOver: (params: { date: Date, event: Event }) => mixed,
339
- /** Day's `mouseleave` event handler. */
340
- onDayMouseLeave: (params: { date: Date, event: Event }) => mixed,
341
- /** Event handler that is called when a new date is selected. */
342
- onChange: onChangeT<T>,
343
- /** Event handler that is called when the current rendered month is changed. */
344
- onMonthChange?: ({ date: T }) => mixed,
345
- /** Event handler that is called when the current rendered year is changed. */
346
- onYearChange?: ({ date: T }) => mixed,
347
- /** Selected `Date`. If `range` is set, `value` is an array of 2 values. */
348
- value?: DateValueT<T>,
349
- stateReducer: NavigationContainerStateReducerT<T>,
350
- trapTabbing: boolean,
351
- };
352
-
353
331
  export type StatefulDatepickerPropsT<PropsT, T = Date> = $Diff<
354
332
  StatefulContainerPropsT<PropsT, T>,
355
333
  {
@@ -252,11 +252,11 @@ export default class Calendar extends React.Component {
252
252
  const {
253
253
  onChange = params => {}
254
254
  } = this.props;
255
- let updatedDate = data.date; // We'll need to update the date in time values of internal state
256
-
257
- const newTimeState = [...this.state.time]; // Apply the currently selected time values (saved in state) to the updated date
255
+ let updatedDate = data.date; // Apply the currently selected time values (saved in state) to the updated date
258
256
 
259
257
  if (Array.isArray(data.date)) {
258
+ // We'll need to update the date in time values of internal state
259
+ const newTimeState = [...this.state.time];
260
260
  const start = data.date[0] ? this.dateHelpers.applyDateToTime(newTimeState[0], data.date[0]) : null;
261
261
  const end = data.date[1] ? this.dateHelpers.applyDateToTime(newTimeState[1], data.date[1]) : null;
262
262
  newTimeState[0] = start;
@@ -266,16 +266,21 @@ export default class Calendar extends React.Component {
266
266
  newTimeState[1] = end;
267
267
  } else {
268
268
  updatedDate = [start];
269
- }
269
+ } // Update the date in time values of internal state
270
+
271
+
272
+ this.setState({
273
+ time: newTimeState
274
+ });
270
275
  } else if (!Array.isArray(this.props.value) && data.date) {
271
- newTimeState[0] = this.dateHelpers.applyDateToTime(newTimeState[0], data.date);
272
- updatedDate = newTimeState[0];
273
- } // Update the date in time values of internal state
276
+ const newTimeState = this.dateHelpers.applyDateToTime(this.state.time[0], data.date);
277
+ updatedDate = newTimeState; // Update the date in time values of internal state
274
278
 
279
+ this.setState({
280
+ time: [newTimeState]
281
+ });
282
+ }
275
283
 
276
- this.setState({
277
- time: newTimeState
278
- });
279
284
  onChange({
280
285
  date: updatedDate
281
286
  });
@@ -45,7 +45,39 @@ export default class Datepicker extends React.Component {
45
45
 
46
46
  _defineProperty(this, "dateHelpers", void 0);
47
47
 
48
- _defineProperty(this, "onChange", data => {
48
+ _defineProperty(this, "handleChange", date => {
49
+ const onChange = this.props.onChange;
50
+ const onRangeChange = this.props.onRangeChange;
51
+
52
+ if (Array.isArray(date)) {
53
+ if (onChange && date.every(Boolean)) {
54
+ // flowlint-next-line unclear-type:off
55
+ onChange({
56
+ date: date
57
+ });
58
+ }
59
+
60
+ if (onRangeChange) {
61
+ onRangeChange({
62
+ date: [...date]
63
+ });
64
+ }
65
+ } else {
66
+ if (onChange) {
67
+ onChange({
68
+ date
69
+ });
70
+ }
71
+
72
+ if (onRangeChange) {
73
+ onRangeChange({
74
+ date
75
+ });
76
+ }
77
+ }
78
+ });
79
+
80
+ _defineProperty(this, "onCalendarSelect", data => {
49
81
  let isOpen = false;
50
82
  let isPseudoFocused = false;
51
83
  let calendarFocused = false;
@@ -114,9 +146,7 @@ export default class Datepicker extends React.Component {
114
146
  }),
115
147
  inputValue: this.formatDisplayValue(nextDate)
116
148
  });
117
- this.props.onChange && this.props.onChange({
118
- date: nextDate
119
- });
149
+ this.handleChange(nextDate);
120
150
  });
121
151
 
122
152
  _defineProperty(this, "formatDisplayValue", date => {
@@ -218,16 +248,10 @@ export default class Datepicker extends React.Component {
218
248
  const formatString = this.normalizeDashes(this.props.formatString);
219
249
 
220
250
  if (typeof mask === 'string' && inputValue === mask.replace(/9/g, ' ') || inputValue.length === 0) {
221
- if (this.props.onChange) {
222
- if (this.props.range) {
223
- this.props.onChange({
224
- date: []
225
- });
226
- } else {
227
- this.props.onChange({
228
- date: null
229
- });
230
- }
251
+ if (this.props.range) {
252
+ this.handleChange([]);
253
+ } else {
254
+ this.handleChange(null);
231
255
  }
232
256
  }
233
257
 
@@ -253,18 +277,12 @@ export default class Datepicker extends React.Component {
253
277
  endDate = parseDateString(right);
254
278
  }
255
279
 
256
- const onChange = this.props.onChange;
280
+ const datesValid = this.dateHelpers.isValid(startDate) && this.dateHelpers.isValid(endDate); // added equal case so that times within the same day can be expressed
257
281
 
258
- if (onChange) {
259
- const datesValid = this.dateHelpers.isValid(startDate) && this.dateHelpers.isValid(endDate); // added equal case so that times within the same day can be expressed
260
-
261
- const rangeValid = this.dateHelpers.isAfter(endDate, startDate) || this.dateHelpers.isEqual(startDate, endDate);
282
+ const rangeValid = this.dateHelpers.isAfter(endDate, startDate) || this.dateHelpers.isEqual(startDate, endDate);
262
283
 
263
- if (datesValid && rangeValid) {
264
- onChange({
265
- date: [startDate, endDate]
266
- });
267
- }
284
+ if (datesValid && rangeValid) {
285
+ this.handleChange([startDate, endDate]);
268
286
  }
269
287
  } else {
270
288
  const dateString = this.normalizeDashes(inputValue);
@@ -280,12 +298,11 @@ export default class Datepicker extends React.Component {
280
298
 
281
299
  const {
282
300
  displayValueAtRangeIndex,
283
- onChange,
284
301
  range,
285
302
  value
286
303
  } = this.props;
287
304
 
288
- if (date && this.dateHelpers.isValid(date) && onChange) {
305
+ if (date && this.dateHelpers.isValid(date)) {
289
306
  if (range && Array.isArray(value) && typeof displayValueAtRangeIndex === 'number') {
290
307
  let [left, right] = value;
291
308
 
@@ -293,22 +310,16 @@ export default class Datepicker extends React.Component {
293
310
  left = date;
294
311
 
295
312
  if (!right) {
296
- onChange({
297
- date: [left]
298
- });
313
+ this.handleChange([left]);
299
314
  } else {
300
315
  if (this.dateHelpers.isAfter(right, left) || this.dateHelpers.isEqual(left, right)) {
301
- onChange({
302
- date: [left, right]
303
- });
316
+ this.handleChange([left, right]);
304
317
  } else {
305
318
  // Is resetting back to previous value appropriate? Invalid range is not
306
319
  // communicated to the user, but if it was not reset the text value would
307
320
  // show one value and date value another. This seems a bit better but clearly
308
321
  // has a downside.
309
- onChange({
310
- date: [...value]
311
- });
322
+ this.handleChange([...value]);
312
323
  }
313
324
  }
314
325
  } else if (displayValueAtRangeIndex === 1) {
@@ -316,26 +327,18 @@ export default class Datepicker extends React.Component {
316
327
 
317
328
  if (!left) {
318
329
  // If start value is not defined, set start/end to the same day.
319
- onChange({
320
- date: [right, right]
321
- });
330
+ this.handleChange([right, right]);
322
331
  } else {
323
332
  if (this.dateHelpers.isAfter(right, left) || this.dateHelpers.isEqual(left, right)) {
324
- onChange({
325
- date: [left, right]
326
- });
333
+ this.handleChange([left, right]);
327
334
  } else {
328
335
  // See comment above about resetting dates on invalid range
329
- onChange({
330
- date: [...value]
331
- });
336
+ this.handleChange([...value]);
332
337
  }
333
338
  }
334
339
  }
335
340
  } else {
336
- onChange({
337
- date
338
- });
341
+ this.handleChange(date);
339
342
  }
340
343
  }
341
344
  }
@@ -427,9 +430,6 @@ export default class Datepicker extends React.Component {
427
430
  const placeholder = this.props.placeholder || this.props.placeholder === '' ? this.props.placeholder : this.props.range && !this.props.separateRangeInputs ? `YYYY/MM/DD ${INPUT_DELIMITER} YYYY/MM/DD` : 'YYYY/MM/DD';
428
431
  const [startDate = '', endDate = ''] = (this.state.inputValue || '').split(` ${INPUT_DELIMITER} `);
429
432
  const value = inputRole === INPUT_ROLE.startDate ? startDate : inputRole === INPUT_ROLE.endDate ? endDate : this.state.inputValue;
430
-
431
- const onChange = event => this.handleInputChange(event, inputRole);
432
-
433
433
  return /*#__PURE__*/React.createElement(InputComponent, _extends({
434
434
  "aria-disabled": this.props.disabled,
435
435
  "aria-label": this.props['aria-label'] || (this.props.range ? locale.datepicker.ariaLabelRange : locale.datepicker.ariaLabel),
@@ -444,7 +444,7 @@ export default class Datepicker extends React.Component {
444
444
  onFocus: () => this.open(inputRole),
445
445
  onBlur: this.handleInputBlur,
446
446
  onKeyDown: this.handleKeyDown,
447
- onChange: onChange,
447
+ onChange: event => this.handleInputChange(event, inputRole),
448
448
  placeholder: placeholder,
449
449
  mask: this.getMask(),
450
450
  required: this.props.required,
@@ -477,7 +477,7 @@ export default class Datepicker extends React.Component {
477
477
  trapTabbing: true,
478
478
  value: this.props.value
479
479
  }, this.props, {
480
- onChange: this.onChange,
480
+ onChange: this.onCalendarSelect,
481
481
  selectedInput: this.state.selectedInput,
482
482
  hasLockedBehavior: this.hasLockedBehavior()
483
483
  }))
@@ -1,3 +1,5 @@
1
+ function _extends() { _extends = Object.assign || 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); }
2
+
1
3
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
4
 
3
5
  /*
@@ -12,7 +14,10 @@ import Calendar from './calendar.js';
12
14
 
13
15
  class StatefulComponent extends React.Component {
14
16
  render() {
15
- return /*#__PURE__*/React.createElement(StatefulContainer, this.props, extendedProps => /*#__PURE__*/React.createElement(Calendar, extendedProps));
17
+ return /*#__PURE__*/React.createElement(StatefulContainer, this.props, extendedProps => /*#__PURE__*/React.createElement(Calendar, _extends({}, extendedProps, {
18
+ // flowlint-next-line unclear-type:off
19
+ onChange: extendedProps.onChange
20
+ })));
16
21
  }
17
22
 
18
23
  }
@@ -20,9 +20,29 @@ class StatefulContainer extends React.Component {
20
20
  this.internalSetState(STATE_CHANGE_TYPE.change, {
21
21
  value: date
22
22
  });
23
+ const onChange = this.props.onChange;
23
24
 
24
- if (typeof this.props.onChange === 'function') {
25
- this.props.onChange(data);
25
+ if (onChange) {
26
+ if (Array.isArray(date)) {
27
+ if (date.every(Boolean)) {
28
+ // flowlint-next-line unclear-type:off
29
+ onChange({
30
+ date: date
31
+ });
32
+ }
33
+ } else {
34
+ onChange({
35
+ date
36
+ });
37
+ }
38
+ }
39
+
40
+ const onRangeChange = this.props.onRangeChange;
41
+
42
+ if (onRangeChange) {
43
+ onRangeChange({
44
+ date
45
+ });
26
46
  }
27
47
  });
28
48
 
@@ -1,3 +1,5 @@
1
+ function _extends() { _extends = Object.assign || 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); }
2
+
1
3
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
4
 
3
5
  /*
@@ -12,7 +14,10 @@ import Datepicker from './datepicker.js';
12
14
 
13
15
  class StatefulComponent extends React.Component {
14
16
  render() {
15
- return /*#__PURE__*/React.createElement(StatefulContainer, this.props, extendedProps => /*#__PURE__*/React.createElement(Datepicker, extendedProps));
17
+ return /*#__PURE__*/React.createElement(StatefulContainer, this.props, extendedProps => /*#__PURE__*/React.createElement(Datepicker, _extends({}, extendedProps, {
18
+ // flowlint-next-line unclear-type:off
19
+ onChange: extendedProps.onChange
20
+ })));
16
21
  }
17
22
 
18
23
  }
@@ -87,7 +87,7 @@ export default function SnackbarProvider({
87
87
  setTimeout(() => {
88
88
  setAnimating(false);
89
89
  display(duration);
90
- }, 1000);
90
+ }, 0);
91
91
  }
92
92
 
93
93
  function exit() {
@@ -315,12 +315,12 @@ var Calendar = /*#__PURE__*/function (_React$Component) {
315
315
  _defineProperty(_assertThisInitialized(_this), "handleDateChange", function (data) {
316
316
  var _this$props$onChange = _this.props.onChange,
317
317
  onChange = _this$props$onChange === void 0 ? function (params) {} : _this$props$onChange;
318
- var updatedDate = data.date; // We'll need to update the date in time values of internal state
319
-
320
- var newTimeState = _toConsumableArray(_this.state.time); // Apply the currently selected time values (saved in state) to the updated date
321
-
318
+ var updatedDate = data.date; // Apply the currently selected time values (saved in state) to the updated date
322
319
 
323
320
  if (Array.isArray(data.date)) {
321
+ // We'll need to update the date in time values of internal state
322
+ var newTimeState = _toConsumableArray(_this.state.time);
323
+
324
324
  var start = data.date[0] ? _this.dateHelpers.applyDateToTime(newTimeState[0], data.date[0]) : null;
325
325
  var end = data.date[1] ? _this.dateHelpers.applyDateToTime(newTimeState[1], data.date[1]) : null;
326
326
  newTimeState[0] = start;
@@ -330,16 +330,21 @@ var Calendar = /*#__PURE__*/function (_React$Component) {
330
330
  newTimeState[1] = end;
331
331
  } else {
332
332
  updatedDate = [start];
333
- }
333
+ } // Update the date in time values of internal state
334
+
335
+
336
+ _this.setState({
337
+ time: newTimeState
338
+ });
334
339
  } else if (!Array.isArray(_this.props.value) && data.date) {
335
- newTimeState[0] = _this.dateHelpers.applyDateToTime(newTimeState[0], data.date);
336
- updatedDate = newTimeState[0];
337
- } // Update the date in time values of internal state
340
+ var _newTimeState = _this.dateHelpers.applyDateToTime(_this.state.time[0], data.date);
338
341
 
342
+ updatedDate = _newTimeState; // Update the date in time values of internal state
339
343
 
340
- _this.setState({
341
- time: newTimeState
342
- });
344
+ _this.setState({
345
+ time: [_newTimeState]
346
+ });
347
+ }
343
348
 
344
349
  onChange({
345
350
  date: updatedDate