@decisiv/ui-components 2.0.1-alpha.82 → 2.0.1-alpha.83

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Select/index.tsx"],"names":[],"mappings":"AAGA,OAAc,EAEZ,sBAAsB,EAMvB,MAAM,OAAO,CAAC;AAmBf,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AA2OjD,QAAA,MAAM,aAAa,EAAE,sBAAsB,CACzC,SAAS,EACT,WAAW,CACS,CAAC;AAgCvB,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Select/index.tsx"],"names":[],"mappings":"AAGA,OAAc,EAEZ,sBAAsB,EAMvB,MAAM,OAAO,CAAC;AAoBf,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAyPjD,QAAA,MAAM,aAAa,EAAE,sBAAsB,CACzC,SAAS,EACT,WAAW,CACS,CAAC;AAgCvB,eAAe,aAAa,CAAC"}
@@ -27,6 +27,8 @@ var _useClickOutside = _interopRequireDefault(require("../../utils/useClickOutsi
27
27
 
28
28
  var _useUniqueId = _interopRequireDefault(require("../../utils/useUniqueId"));
29
29
 
30
+ var _useUpdateEffect = _interopRequireDefault(require("../../utils/useUpdateEffect"));
31
+
30
32
  var _DropdownList = _interopRequireDefault(require("../DropdownList"));
31
33
 
32
34
  var _Button = require("../Button");
@@ -77,7 +79,9 @@ function Select(props, ref) {
77
79
  name = props.name,
78
80
  onChange = props.onChange,
79
81
  onClick = props.onClick,
82
+ onHide = props.onHide,
80
83
  onKeyDown = props.onKeyDown,
84
+ onShow = props.onShow,
81
85
  options = props.options,
82
86
  renderOptionLabel = props.renderOptionLabel,
83
87
  propValue = props.value,
@@ -203,6 +207,19 @@ function Select(props, ref) {
203
207
  }, [isPopoverVisible]);
204
208
  (0, _useClickOutside.default)([listRef], handleClickOutsideList);
205
209
  var inputContainerRefs = (0, _compact.default)([inputContainerRef, popoverTargetRef]);
210
+ /**
211
+ * Triggers onShow/onHide callbacks representing wether the Popover is open or not.
212
+ */
213
+
214
+ (0, _useUpdateEffect.default)(function () {
215
+ if (isPopoverVisible) {
216
+ onShow && onShow();
217
+ }
218
+
219
+ if (!isPopoverVisible) {
220
+ onHide && onHide();
221
+ }
222
+ }, [isPopoverVisible, onHide, onShow]);
206
223
  return _react.default.createElement(_react.default.Fragment, null, _react.default.createElement(_InputField.default, _extends({}, props, {
207
224
  "aria-live": "assertive",
208
225
  cursor: "default",
@@ -111,16 +111,53 @@ describe('Select', function () {
111
111
  expect(getByText(defaultProps.label)).toBeTruthy();
112
112
  expect((0, _react2.queryByText)(baseElement, opt0.label)).toBeTruthy();
113
113
  });
114
+ it('triggers onShow callback', function () {
115
+ var onShow = jest.fn();
116
+
117
+ var _render2 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
118
+ onShow: onShow
119
+ }))),
120
+ queryByText = _render2.queryByText;
121
+
122
+ expect(onShow).not.toHaveBeenCalled();
123
+ var label = queryByText(defaultProps.label);
124
+
125
+ _react2.fireEvent.click(label);
126
+
127
+ expect(onShow).toHaveBeenCalled();
128
+ });
129
+ it('triggers onHide callback', function () {
130
+ var onHide = jest.fn();
131
+
132
+ var _render3 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
133
+ onHide: onHide
134
+ }))),
135
+ queryByText = _render3.queryByText;
136
+
137
+ expect(onHide).not.toHaveBeenCalled();
138
+ var label = queryByText(defaultProps.label);
139
+
140
+ _react2.fireEvent.click(label);
141
+
142
+ _react2.fireEvent.keyDown(label, {
143
+ key: 'Escape',
144
+ code: 'Escape',
145
+ keyCode: 27,
146
+ charCode: 27
147
+ });
148
+
149
+ expect(onHide).toHaveBeenCalled();
150
+ });
114
151
  });
115
152
  describe('clicking an option', function () {
116
153
  it('calls the onchange handler with the new value', function () {
117
154
  var onChange = jest.fn();
118
155
 
119
- var _render2 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
156
+ var _render4 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
120
157
  onChange: onChange
121
158
  }))),
122
- baseElement = _render2.baseElement,
123
- getByText = _render2.getByText;
159
+ baseElement = _render4.baseElement,
160
+ getByText = _render4.getByText;
124
161
 
125
162
  _react2.fireEvent.click(getByText(defaultProps.label));
126
163
 
@@ -129,9 +166,9 @@ describe('Select', function () {
129
166
  expect(onChange).toHaveBeenCalledWith(cat0Opt0.id);
130
167
  });
131
168
  it('automatically updates the option label inside the input field', function () {
132
- var _render3 = render(_react.default.createElement(_.default, defaultProps)),
133
- baseElement = _render3.baseElement,
134
- getByText = _render3.getByText;
169
+ var _render5 = render(_react.default.createElement(_.default, defaultProps)),
170
+ baseElement = _render5.baseElement,
171
+ getByText = _render5.getByText;
135
172
 
136
173
  _react2.fireEvent.click(getByText(defaultProps.label));
137
174
 
@@ -143,10 +180,10 @@ describe('Select', function () {
143
180
  });
144
181
  describe('with a default value', function () {
145
182
  it('displays the option label matching the defaultValue inside the input field', function () {
146
- var _render4 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
183
+ var _render6 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
147
184
  defaultValue: cat0Opt0.id
148
185
  }))),
149
- getByText = _render4.getByText;
186
+ getByText = _render6.getByText;
150
187
 
151
188
  expect(getByText(cat0Opt0.label)).toBeTruthy();
152
189
  });
@@ -154,12 +191,12 @@ describe('Select', function () {
154
191
  it('calls the onchange handler with the new value', function () {
155
192
  var onChange = jest.fn();
156
193
 
157
- var _render5 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
194
+ var _render7 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
158
195
  onChange: onChange,
159
196
  defaultValue: opt1.id
160
197
  }))),
161
- baseElement = _render5.baseElement,
162
- getByText = _render5.getByText;
198
+ baseElement = _render7.baseElement,
199
+ getByText = _render7.getByText;
163
200
 
164
201
  _react2.fireEvent.click(getByText(defaultProps.label));
165
202
 
@@ -168,11 +205,11 @@ describe('Select', function () {
168
205
  expect(onChange).toHaveBeenCalledWith(cat0Opt0.id);
169
206
  });
170
207
  it('automatically updates the option label inside the input field', function () {
171
- var _render6 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
208
+ var _render8 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
172
209
  defaultValue: opt1.id
173
210
  }))),
174
- baseElement = _render6.baseElement,
175
- getByText = _render6.getByText;
211
+ baseElement = _render8.baseElement,
212
+ getByText = _render8.getByText;
176
213
 
177
214
  _react2.fireEvent.click(getByText(defaultProps.label));
178
215
 
@@ -185,32 +222,32 @@ describe('Select', function () {
185
222
  });
186
223
  describe('when label hidden', function () {
187
224
  it('does not display the label element', function () {
188
- var _render7 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
225
+ var _render9 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
189
226
  defaultvalue: opt1.id,
190
227
  hideLabel: true
191
228
  }))),
192
- getByText = _render7.getByText;
229
+ getByText = _render9.getByText;
193
230
 
194
231
  expect(getByText(defaultProps.label, {
195
232
  selector: 'span'
196
233
  })).not.toBeVisible();
197
234
  });
198
235
  it('does display the input related to the label', function () {
199
- var _render8 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
236
+ var _render10 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
200
237
  defaultValue: opt1.id,
201
238
  hideLabel: true
202
239
  }))),
203
- getByLabelText = _render8.getByLabelText;
240
+ getByLabelText = _render10.getByLabelText;
204
241
 
205
242
  expect(getByLabelText(defaultProps.label)).toBeVisible();
206
243
  });
207
244
  });
208
245
  describe('when component is controlled', function () {
209
246
  it('displays the option label matching the value inside the input field', function () {
210
- var _render9 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
247
+ var _render11 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
211
248
  value: cat0Opt0.id
212
249
  }))),
213
- getByText = _render9.getByText;
250
+ getByText = _render11.getByText;
214
251
 
215
252
  expect(getByText(cat0Opt0.label)).toBeTruthy();
216
253
  });
@@ -218,12 +255,12 @@ describe('Select', function () {
218
255
  it('calls the onchange handler with the new value', function () {
219
256
  var onChange = jest.fn();
220
257
 
221
- var _render10 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
258
+ var _render12 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
222
259
  onChange: onChange,
223
260
  value: opt1.id
224
261
  }))),
225
- baseElement = _render10.baseElement,
226
- getByText = _render10.getByText;
262
+ baseElement = _render12.baseElement,
263
+ getByText = _render12.getByText;
227
264
 
228
265
  _react2.fireEvent.click(getByText(defaultProps.label));
229
266
 
@@ -232,12 +269,12 @@ describe('Select', function () {
232
269
  expect(onChange).toHaveBeenCalledWith(cat0Opt0.id);
233
270
  });
234
271
  it('does NOT automatically update the option label inside the input field', function () {
235
- var _render11 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
272
+ var _render13 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
236
273
  value: opt1.id
237
274
  }))),
238
- baseElement = _render11.baseElement,
239
- getByText = _render11.getByText,
240
- queryByText = _render11.queryByText;
275
+ baseElement = _render13.baseElement,
276
+ getByText = _render13.getByText,
277
+ queryByText = _render13.queryByText;
241
278
 
242
279
  _react2.fireEvent.click(getByText(defaultProps.label));
243
280
 
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/components/Select/schema.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,MAAM,KAAsC,CAAC;AAwDnD,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/components/Select/schema.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,MAAM,KAAsC,CAAC;AA8DnD,eAAe,MAAM,CAAC"}
@@ -30,6 +30,8 @@ schema.propTypes = _objectSpread({}, (0, _omit.default)(_InputField.schema.makeP
30
30
  right: _reactDesc.PropTypes.arrayOf(_reactDesc.PropTypes.object)
31
31
  })]).description('A collection of objects, each containing a subset of props valid for a Button component. Check the notes on the OptionsList.'),
32
32
  onChange: _reactDesc.PropTypes.func.description(''),
33
+ onHide: _reactDesc.PropTypes.func.description('A callback which is triggered when the popover is closed'),
34
+ onShow: _reactDesc.PropTypes.func.description('A callback which is triggered when the popover is opened'),
33
35
  options: _reactDesc.PropTypes.arrayOf(_reactDesc.PropTypes.shape({
34
36
  decoration: _reactDesc.PropTypes.shape({
35
37
  type: _reactDesc.PropTypes.oneOf(['Avatar', 'Badge'])
@@ -15,6 +15,8 @@ export declare type SelectProps = BaseSelectProps & {
15
15
  defaultValue?: string;
16
16
  name: string;
17
17
  onChange?: (value: string) => void;
18
+ onHide?: () => void;
19
+ onShow?: () => void;
18
20
  options: Items;
19
21
  value?: string;
20
22
  zIndex?: PopoverProps['zIndex'];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Select/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,OAAO,CAAC;AAEf,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,oBAAY,SAAS,GAAG,iBAAiB,CAAC;AAE1C,UAAU,eACR,SAAQ,oBAAoB,CAAC,SAAS,CAAC,EACrC,IAAI,CACF,mBAAmB,EACnB,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,oBAAoB,GAAG,OAAO,CACvE,EACD,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,mBAAmB,CAAC;IACzD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,SAAS,CAAC,EAAE,oBAAoB,CAAC;CAClC;AAED,oBAAY,WAAW,GAAG,eAAe,GAAG;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,WAAW,WACf,SAAQ,oBAAoB,CAAC,SAAS,CAAC,EACrC,IAAI,CACF,mBAAmB,EACnB,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,GAAG,OAAO,CACxE;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;CACzC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/Select/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EAClB,MAAM,OAAO,CAAC;AAEf,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AACxC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,oBAAY,SAAS,GAAG,iBAAiB,CAAC;AAE1C,UAAU,eACR,SAAQ,oBAAoB,CAAC,SAAS,CAAC,EACrC,IAAI,CACF,mBAAmB,EACnB,UAAU,GAAG,WAAW,GAAG,UAAU,GAAG,oBAAoB,GAAG,OAAO,CACvE,EACD,IAAI,CAAC,gBAAgB,EAAE,SAAS,GAAG,mBAAmB,CAAC;IACzD,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,SAAS,CAAC,EAAE,oBAAoB,CAAC;CAClC;AAED,oBAAY,WAAW,GAAG,eAAe,GAAG;IAC1C,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,KAAK,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;CACjC,CAAC;AAEF,MAAM,WAAW,WACf,SAAQ,oBAAoB,CAAC,SAAS,CAAC,EACrC,IAAI,CACF,mBAAmB,EACnB,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,GAAG,OAAO,CACxE;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;CACzC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SelectDate/index.tsx"],"names":[],"mappings":"AAIA,OAAc,EAEZ,sBAAsB,EAMvB,MAAM,OAAO,CAAC;AAqBf,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAQ,MAAM,SAAS,CAAC;AAIjE,OAAO,EACL,SAAS,EACT,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAmPxC,QAAA,MAAM,iBAAiB,EAAE,sBAAsB,CAC7C,cAAc,EACd,gBAAgB,CACQ,CAAC;AAK3B,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SelectDate/index.tsx"],"names":[],"mappings":"AAIA,OAAc,EAEZ,sBAAsB,EAMvB,MAAM,OAAO,CAAC;AAsBf,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAQ,MAAM,SAAS,CAAC;AAIjE,OAAO,EACL,SAAS,EACT,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AAiQxC,QAAA,MAAM,iBAAiB,EAAE,sBAAsB,CAC7C,cAAc,EACd,gBAAgB,CACQ,CAAC;AAK3B,eAAe,iBAAiB,CAAC"}
@@ -41,6 +41,8 @@ var _useTranslations = _interopRequireDefault(require("../../utils/useTranslatio
41
41
 
42
42
  var _useUniqueId = _interopRequireDefault(require("../../utils/useUniqueId"));
43
43
 
44
+ var _useUpdateEffect = _interopRequireDefault(require("../../utils/useUpdateEffect"));
45
+
44
46
  var _Calendar = _interopRequireWildcard(require("../../atoms/Calendar"));
45
47
 
46
48
  var _InputField = _interopRequireDefault(require("../../atoms/InputField"));
@@ -90,6 +92,8 @@ function SelectDate(props, ref) {
90
92
  onChange = props.onChange,
91
93
  onClick = props.onClick,
92
94
  onKeyDown = props.onKeyDown,
95
+ onShow = props.onShow,
96
+ onHide = props.onHide,
93
97
  propValue = props.value,
94
98
  disabledDateRules = props.disabledDateRules,
95
99
  zIndex = props.zIndex;
@@ -214,6 +218,19 @@ function SelectDate(props, ref) {
214
218
  }, [isPopoverVisible]);
215
219
  (0, _useClickOutside.default)([popoverContentRef], handleClickOutsidePopover);
216
220
  var inputContainerRefs = (0, _compact.default)([inputContainerRef, popoverTargetRef]);
221
+ /**
222
+ * Triggers onShow/onHide callbacks representing wether the Popover is open or not.
223
+ */
224
+
225
+ (0, _useUpdateEffect.default)(function () {
226
+ if (isPopoverVisible) {
227
+ onShow && onShow();
228
+ }
229
+
230
+ if (!isPopoverVisible) {
231
+ onHide && onHide();
232
+ }
233
+ }, [isPopoverVisible, onShow, onHide]);
217
234
  return _react.default.createElement(_InputField.default, _extends({}, (0, _omit.default)(props, ['onChange']), {
218
235
  "aria-live": "assertive",
219
236
  cursor: "default",
@@ -153,12 +153,49 @@ describe('SelectDate', function () {
153
153
  expect(expandedIconPathD).toEqual(iconPathD);
154
154
  expect((0, _react2.queryByText)(baseElement, /today/i)).toBeInTheDocument();
155
155
  });
156
+ it('triggers onShow callback', function () {
157
+ var onShow = jest.fn();
158
+
159
+ var _render7 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
160
+ onShow: onShow
161
+ }))),
162
+ queryByText = _render7.queryByText;
163
+
164
+ expect(onShow).not.toHaveBeenCalled();
165
+ var label = queryByText(defaultProps.label);
166
+
167
+ _react2.fireEvent.click(label);
168
+
169
+ expect(onShow).toHaveBeenCalled();
170
+ });
171
+ it('triggers onHide callback', function () {
172
+ var onHide = jest.fn();
173
+
174
+ var _render8 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
175
+ onHide: onHide
176
+ }))),
177
+ queryByText = _render8.queryByText;
178
+
179
+ expect(onHide).not.toHaveBeenCalled();
180
+ var label = queryByText(defaultProps.label);
181
+
182
+ _react2.fireEvent.click(label);
183
+
184
+ _react2.fireEvent.keyDown(label, {
185
+ key: 'Escape',
186
+ code: 'Escape',
187
+ keyCode: 27,
188
+ charCode: 27
189
+ });
190
+
191
+ expect(onHide).toHaveBeenCalled();
192
+ });
156
193
  });
157
194
  describe('when clicking the InputField value button', function () {
158
195
  it('opens a popover with the calendar', function () {
159
- var _render7 = render(_react.default.createElement(_.default, defaultProps)),
160
- baseElement = _render7.baseElement,
161
- queryByLabelText = _render7.queryByLabelText;
196
+ var _render9 = render(_react.default.createElement(_.default, defaultProps)),
197
+ baseElement = _render9.baseElement,
198
+ queryByLabelText = _render9.queryByLabelText;
162
199
 
163
200
  expect((0, _react2.queryByText)(baseElement, /today/i)).not.toBeInTheDocument();
164
201
  var valueButton = queryByLabelText(defaultProps.label);
@@ -170,9 +207,9 @@ describe('SelectDate', function () {
170
207
  });
171
208
  describe('when the calendar popover is open', function () {
172
209
  it('renders the calendar', function () {
173
- var _render8 = render(_react.default.createElement(_.default, defaultProps)),
174
- baseElement = _render8.baseElement,
175
- queryByText = _render8.queryByText;
210
+ var _render10 = render(_react.default.createElement(_.default, defaultProps)),
211
+ baseElement = _render10.baseElement,
212
+ queryByText = _render10.queryByText;
176
213
 
177
214
  var today = new Date();
178
215
  var lastDateInMonth = new Date(today.getFullYear(), today.getMonth() + 1, 0);
@@ -216,9 +253,9 @@ describe('SelectDate', function () {
216
253
  }
217
254
  });
218
255
  it('renders a clear button inside the popover', function () {
219
- var _render9 = render(_react.default.createElement(_.default, defaultProps)),
220
- baseElement = _render9.baseElement,
221
- queryByLabelText = _render9.queryByLabelText;
256
+ var _render11 = render(_react.default.createElement(_.default, defaultProps)),
257
+ baseElement = _render11.baseElement,
258
+ queryByLabelText = _render11.queryByLabelText;
222
259
 
223
260
  _react2.fireEvent.click(queryByLabelText(defaultProps.label));
224
261
 
@@ -226,9 +263,9 @@ describe('SelectDate', function () {
226
263
  });
227
264
  describe('when navigating with the calendar controls', function () {
228
265
  it('does NOT close the popover after each click', function () {
229
- var _render10 = render(_react.default.createElement(_.default, defaultProps)),
230
- baseElement = _render10.baseElement,
231
- queryByText = _render10.queryByText; // open the calendar popover
266
+ var _render12 = render(_react.default.createElement(_.default, defaultProps)),
267
+ baseElement = _render12.baseElement,
268
+ queryByText = _render12.queryByText; // open the calendar popover
232
269
 
233
270
 
234
271
  _react2.fireEvent.click(queryByText(defaultProps.label)); // the "today" button is a part of the calendar controls
@@ -255,11 +292,11 @@ describe('SelectDate', function () {
255
292
  it('closes the popover after click', function () {
256
293
  var today = new Date();
257
294
 
258
- var _render11 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
295
+ var _render13 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
259
296
  defaultValue: today
260
297
  }))),
261
- baseElement = _render11.baseElement,
262
- queryByLabelText = _render11.queryByLabelText;
298
+ baseElement = _render13.baseElement,
299
+ queryByLabelText = _render13.queryByLabelText;
263
300
 
264
301
  _react2.fireEvent.click(queryByLabelText(defaultProps.label));
265
302
 
@@ -273,12 +310,12 @@ describe('SelectDate', function () {
273
310
  var onChange = jest.fn();
274
311
  var today = new Date();
275
312
 
276
- var _render12 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
313
+ var _render14 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
277
314
  defaultValue: today,
278
315
  onChange: onChange
279
316
  }))),
280
- baseElement = _render12.baseElement,
281
- queryByLabelText = _render12.queryByLabelText;
317
+ baseElement = _render14.baseElement,
318
+ queryByLabelText = _render14.queryByLabelText;
282
319
 
283
320
  _react2.fireEvent.click(queryByLabelText(defaultProps.label));
284
321
 
@@ -294,9 +331,9 @@ describe('SelectDate', function () {
294
331
  it('renders the date in the correct format', function () {
295
332
  var today = new Date();
296
333
 
297
- var _render13 = render(_react.default.createElement(_.default, defaultProps)),
298
- baseElement = _render13.baseElement,
299
- queryByLabelText = _render13.queryByLabelText;
334
+ var _render15 = render(_react.default.createElement(_.default, defaultProps)),
335
+ baseElement = _render15.baseElement,
336
+ queryByLabelText = _render15.queryByLabelText;
300
337
 
301
338
  _react2.fireEvent.click(queryByLabelText(defaultProps.label));
302
339
 
@@ -311,9 +348,9 @@ describe('SelectDate', function () {
311
348
  it('closes the calendar popover', function () {
312
349
  var today = new Date();
313
350
 
314
- var _render14 = render(_react.default.createElement(_.default, defaultProps)),
315
- baseElement = _render14.baseElement,
316
- queryByLabelText = _render14.queryByLabelText;
351
+ var _render16 = render(_react.default.createElement(_.default, defaultProps)),
352
+ baseElement = _render16.baseElement,
353
+ queryByLabelText = _render16.queryByLabelText;
317
354
 
318
355
  _react2.fireEvent.click(queryByLabelText(defaultProps.label));
319
356
 
@@ -329,11 +366,11 @@ describe('SelectDate', function () {
329
366
  var onChange = jest.fn();
330
367
  var today = new Date();
331
368
 
332
- var _render15 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
369
+ var _render17 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
333
370
  onChange: onChange
334
371
  }))),
335
- baseElement = _render15.baseElement,
336
- queryByLabelText = _render15.queryByLabelText;
372
+ baseElement = _render17.baseElement,
373
+ queryByLabelText = _render17.queryByLabelText;
337
374
 
338
375
  _react2.fireEvent.click(queryByLabelText(defaultProps.label));
339
376
 
@@ -355,10 +392,10 @@ describe('SelectDate', function () {
355
392
  var iconPathD = iconContainer.querySelector('svg path').getAttribute('d');
356
393
  var value = new Date();
357
394
 
358
- var _render16 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
395
+ var _render18 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
359
396
  value: value
360
397
  }))),
361
- container = _render16.container;
398
+ container = _render18.container;
362
399
 
363
400
  var clearButtonIconPathD = container.querySelectorAll('svg path')[0].getAttribute('d');
364
401
  expect(clearButtonIconPathD).toEqual(iconPathD);
@@ -366,10 +403,10 @@ describe('SelectDate', function () {
366
403
  it('renders the date in the correct format', function () {
367
404
  var value = new Date();
368
405
 
369
- var _render17 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
406
+ var _render19 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
370
407
  value: value
371
408
  }))),
372
- queryByLabelText = _render17.queryByLabelText;
409
+ queryByLabelText = _render19.queryByLabelText;
373
410
 
374
411
  expect(queryByLabelText(defaultProps.label)).toHaveTextContent(formatDate(value));
375
412
  });
@@ -377,13 +414,13 @@ describe('SelectDate', function () {
377
414
  var onChange = jest.fn();
378
415
  var value = new Date();
379
416
 
380
- var _render18 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
417
+ var _render20 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
381
418
  onChange: onChange,
382
419
  value: value
383
420
  }))),
384
- baseElement = _render18.baseElement,
385
- rerender = _render18.rerender,
386
- queryByLabelText = _render18.queryByLabelText;
421
+ baseElement = _render20.baseElement,
422
+ rerender = _render20.rerender,
423
+ queryByLabelText = _render20.queryByLabelText;
387
424
 
388
425
  _react2.fireEvent.click(queryByLabelText(defaultProps.label));
389
426
 
@@ -407,12 +444,12 @@ describe('SelectDate', function () {
407
444
  var onChange = jest.fn();
408
445
  var value = new Date();
409
446
 
410
- var _render19 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
447
+ var _render21 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
411
448
  onChange: onChange,
412
449
  value: value
413
450
  }))),
414
- baseElement = _render19.baseElement,
415
- queryByLabelText = _render19.queryByLabelText;
451
+ baseElement = _render21.baseElement,
452
+ queryByLabelText = _render21.queryByLabelText;
416
453
 
417
454
  _react2.fireEvent.click(queryByLabelText(defaultProps.label));
418
455
 
@@ -427,10 +464,10 @@ describe('SelectDate', function () {
427
464
  it('initializes with the default value', function () {
428
465
  var value = new Date();
429
466
 
430
- var _render20 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
467
+ var _render22 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
431
468
  defaultValue: value
432
469
  }))),
433
- queryByLabelText = _render20.queryByLabelText;
470
+ queryByLabelText = _render22.queryByLabelText;
434
471
 
435
472
  expect(queryByLabelText(defaultProps.label)).toHaveTextContent(formatDate(value));
436
473
  });
@@ -438,12 +475,12 @@ describe('SelectDate', function () {
438
475
  var onChange = jest.fn();
439
476
  var value = new Date();
440
477
 
441
- var _render21 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
478
+ var _render23 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
442
479
  onChange: onChange,
443
480
  defaultValue: value
444
481
  }))),
445
- baseElement = _render21.baseElement,
446
- queryByLabelText = _render21.queryByLabelText;
482
+ baseElement = _render23.baseElement,
483
+ queryByLabelText = _render23.queryByLabelText;
447
484
 
448
485
  _react2.fireEvent.click(queryByLabelText(defaultProps.label));
449
486
 
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/components/SelectDate/schema.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,MAAM,KAAsC,CAAC;AA8BnD,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/components/SelectDate/schema.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,MAAM,KAAsC,CAAC;AAoCnD,eAAe,MAAM,CAAC"}
@@ -26,6 +26,8 @@ schema.propTypes = _objectSpread({}, (0, _omit.default)(_InputField.schema.makeP
26
26
  clearButtonLabel: _reactDesc.PropTypes.string.description("A hidden label value for the clear button. The select component's label is available within the string for clarity.").defaultValue('Clear {label} value'),
27
27
  defaultValue: _reactDesc.PropTypes.instanceOf(Date).description('The date should be selected by default.'),
28
28
  onChange: _reactDesc.PropTypes.func.description('Called with either the selected date or `undefined`'),
29
+ onHide: _reactDesc.PropTypes.func.description('A callback which is triggered when the popover is closed'),
30
+ onShow: _reactDesc.PropTypes.func.description('A callback which is triggered when the popover is opened'),
29
31
  value: _reactDesc.PropTypes.instanceOf(Date).description('The Date that is selected. If provided, controlling the SelectDate must be handled externally. Overrides `defaultValue`.'),
30
32
  disabledDateRules: _reactDesc.PropTypes.arrayOf(_reactDesc.PropTypes.array).description('An array of rules to disable dates. Every rule is an array itself containing the type of rule as first element followed by needed params to apply the rule'),
31
33
  zIndex: _reactDesc.PropTypes.number.description('Sets the z-index style property of the options list')
@@ -17,6 +17,8 @@ export interface BaseSelectDateProps extends Omit<ButtonHTMLAttributes<TSelectDa
17
17
  onClick?: MouseEventHandler;
18
18
  onFocus?: FocusEventHandler;
19
19
  onKeyDown?: KeyboardEventHandler;
20
+ onShow?: () => void;
21
+ onHide?: () => void;
20
22
  disabledDateRules?: TDisabledDateRule[];
21
23
  zIndex?: PopoverProps['zIndex'];
22
24
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/SelectDate/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,GAAG,EACJ,MAAM,OAAO,CAAC;AAEf,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,oBAAY,cAAc,GAAG,iBAAiB,CAAC;AAE/C,MAAM,WAAW,sBACf,SAAQ,oBAAoB,CAAC,cAAc,CAAC,EAC1C,IAAI,CACF,mBAAmB,EACnB,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,GAAG,OAAO,CACxE;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,mBACf,SAAQ,IAAI,CACR,oBAAoB,CAAC,cAAc,CAAC,EACpC,cAAc,GAAG,UAAU,GAAG,OAAO,CACtC,EACD,IAAI,CACF,mBAAmB,EACjB,UAAU,GACV,cAAc,GACd,WAAW,GACX,UAAU,GACV,oBAAoB,GACpB,OAAO,CACV;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACxC,MAAM,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,oBAAY,gBAAgB,GAAG,mBAAmB,GAAG;IACnD,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;CAClC,CAAC;AAEF,oBAAY,IAAI,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/SelectDate/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,GAAG,EACJ,MAAM,OAAO,CAAC;AAEf,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAE/D,oBAAY,cAAc,GAAG,iBAAiB,CAAC;AAE/C,MAAM,WAAW,sBACf,SAAQ,oBAAoB,CAAC,cAAc,CAAC,EAC1C,IAAI,CACF,mBAAmB,EACnB,UAAU,GAAG,IAAI,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,GAAG,KAAK,GAAG,OAAO,CACxE;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,MAAM,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACtC,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;IAChC,OAAO,EAAE,mBAAmB,CAAC,SAAS,CAAC,CAAC;CACzC;AAED,MAAM,WAAW,mBACf,SAAQ,IAAI,CACR,oBAAoB,CAAC,cAAc,CAAC,EACpC,cAAc,GAAG,UAAU,GAAG,OAAO,CACtC,EACD,IAAI,CACF,mBAAmB,EACjB,UAAU,GACV,cAAc,GACd,WAAW,GACX,UAAU,GACV,oBAAoB,GACpB,OAAO,CACV;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAC;IAC3B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,SAAS,CAAC,EAAE,oBAAoB,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,iBAAiB,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACxC,MAAM,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,oBAAY,gBAAgB,GAAG,mBAAmB,GAAG;IACnD,YAAY,CAAC,EAAE,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,IAAI,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;CAClC,CAAC;AAEF,oBAAY,IAAI,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SelectDateRange/index.tsx"],"names":[],"mappings":"AAGA,OAAc,EAEZ,sBAAsB,EAMvB,MAAM,OAAO,CAAC;AAwBf,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAQ,MAAM,SAAS,CAAC;AAI3E,OAAO,EACL,SAAS,EACT,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AA4SxC,QAAA,MAAM,sBAAsB,EAAE,sBAAsB,CAClD,mBAAmB,EACnB,qBAAqB,CACQ,CAAC;AAKhC,eAAe,sBAAsB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/SelectDateRange/index.tsx"],"names":[],"mappings":"AAGA,OAAc,EAEZ,sBAAsB,EAMvB,MAAM,OAAO,CAAC;AAyBf,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAQ,MAAM,SAAS,CAAC;AAI3E,OAAO,EACL,SAAS,EACT,oBAAoB,GACrB,MAAM,gCAAgC,CAAC;AA0TxC,QAAA,MAAM,sBAAsB,EAAE,sBAAsB,CAClD,mBAAmB,EACnB,qBAAqB,CACQ,CAAC;AAKhC,eAAe,sBAAsB,CAAC"}
@@ -45,6 +45,8 @@ var _useTranslations = _interopRequireDefault(require("../../utils/useTranslatio
45
45
 
46
46
  var _useUniqueId = _interopRequireDefault(require("../../utils/useUniqueId"));
47
47
 
48
+ var _useUpdateEffect = _interopRequireDefault(require("../../utils/useUpdateEffect"));
49
+
48
50
  var _Calendar = _interopRequireWildcard(require("../../atoms/Calendar"));
49
51
 
50
52
  var _InputField = _interopRequireDefault(require("../../atoms/InputField"));
@@ -104,6 +106,8 @@ function SelectDateRange(props, ref) {
104
106
  onRangeChange = props.onRangeChange,
105
107
  onClick = props.onClick,
106
108
  onKeyDown = props.onKeyDown,
109
+ onShow = props.onShow,
110
+ onHide = props.onHide,
107
111
  propValue = props.values,
108
112
  propRange = props.range,
109
113
  disabledDateRules = props.disabledDateRules,
@@ -247,6 +251,19 @@ function SelectDateRange(props, ref) {
247
251
  }, [closePopover]);
248
252
  (0, _useClickOutside.default)([popoverContentRef], handleClickOutsidePopover);
249
253
  var inputContainerRefs = (0, _compact.default)([inputContainerRef, popoverTargetRef]);
254
+ /**
255
+ * Triggers onShow/onHide callbacks representing wether the Popover is open or not.
256
+ */
257
+
258
+ (0, _useUpdateEffect.default)(function () {
259
+ if (isPopoverVisible) {
260
+ onShow && onShow();
261
+ }
262
+
263
+ if (!isPopoverVisible) {
264
+ onHide && onHide();
265
+ }
266
+ }, [isPopoverVisible, onShow, onHide]);
250
267
  return _react.default.createElement(_InputField.default, _extends({}, (0, _omit.default)(props, ['onChange']), {
251
268
  "aria-live": "assertive",
252
269
  cursor: "default",
@@ -166,12 +166,49 @@ describe('SelectDateRange', function () {
166
166
  expect(expandedIconPathD).toEqual(iconPathD);
167
167
  expect((0, _react2.queryByText)(baseElement, /today/i)).toBeInTheDocument();
168
168
  });
169
+ it('triggers onShow callback', function () {
170
+ var onShow = jest.fn();
171
+
172
+ var _render7 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
173
+ onShow: onShow
174
+ }))),
175
+ queryByText = _render7.queryByText;
176
+
177
+ expect(onShow).not.toHaveBeenCalled();
178
+ var label = queryByText(defaultProps.label);
179
+
180
+ _react2.fireEvent.click(label);
181
+
182
+ expect(onShow).toHaveBeenCalled();
183
+ });
184
+ it('triggers onHide callback', function () {
185
+ var onHide = jest.fn();
186
+
187
+ var _render8 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
188
+ onHide: onHide
189
+ }))),
190
+ queryByText = _render8.queryByText;
191
+
192
+ expect(onHide).not.toHaveBeenCalled();
193
+ var label = queryByText(defaultProps.label);
194
+
195
+ _react2.fireEvent.click(label);
196
+
197
+ _react2.fireEvent.keyDown(label, {
198
+ key: 'Escape',
199
+ code: 'Escape',
200
+ keyCode: 27,
201
+ charCode: 27
202
+ });
203
+
204
+ expect(onHide).toHaveBeenCalled();
205
+ });
169
206
  });
170
207
  describe('when clicking the InputField value button', function () {
171
208
  it('opens a popover with the calendar', function () {
172
- var _render7 = render(_react.default.createElement(_.default, defaultProps)),
173
- baseElement = _render7.baseElement,
174
- getByLabelText = _render7.getByLabelText;
209
+ var _render9 = render(_react.default.createElement(_.default, defaultProps)),
210
+ baseElement = _render9.baseElement,
211
+ getByLabelText = _render9.getByLabelText;
175
212
 
176
213
  expect((0, _react2.queryByText)(baseElement, /today/i)).not.toBeInTheDocument();
177
214
  var valueButton = getByLabelText(defaultProps.label);
@@ -183,9 +220,9 @@ describe('SelectDateRange', function () {
183
220
  });
184
221
  describe('when the calendar popover is open', function () {
185
222
  it('renders the calendar', function () {
186
- var _render8 = render(_react.default.createElement(_.default, defaultProps)),
187
- baseElement = _render8.baseElement,
188
- getByText = _render8.getByText;
223
+ var _render10 = render(_react.default.createElement(_.default, defaultProps)),
224
+ baseElement = _render10.baseElement,
225
+ getByText = _render10.getByText;
189
226
 
190
227
  var today = new Date();
191
228
  var lastDateInMonth = new Date(today.getFullYear(), today.getMonth() + 1, 0);
@@ -229,9 +266,9 @@ describe('SelectDateRange', function () {
229
266
  }
230
267
  });
231
268
  it('renders apply, cancel and clear buttons inside the popover', function () {
232
- var _render9 = render(_react.default.createElement(_.default, defaultProps)),
233
- baseElement = _render9.baseElement,
234
- getByLabelText = _render9.getByLabelText;
269
+ var _render11 = render(_react.default.createElement(_.default, defaultProps)),
270
+ baseElement = _render11.baseElement,
271
+ getByLabelText = _render11.getByLabelText;
235
272
 
236
273
  _react2.fireEvent.click(getByLabelText(defaultProps.label));
237
274
 
@@ -240,10 +277,10 @@ describe('SelectDateRange', function () {
240
277
  expect((0, _react2.queryByText)(baseElement, /clear/i)).toBeInTheDocument();
241
278
  });
242
279
  it('enables apply button only when selection is complete', function () {
243
- var _render10 = render(_react.default.createElement(_.default, defaultProps)),
244
- baseElement = _render10.baseElement,
245
- getByLabelText = _render10.getByLabelText,
246
- getByText = _render10.getByText;
280
+ var _render12 = render(_react.default.createElement(_.default, defaultProps)),
281
+ baseElement = _render12.baseElement,
282
+ getByLabelText = _render12.getByLabelText,
283
+ getByText = _render12.getByText;
247
284
 
248
285
  _react2.fireEvent.click(getByLabelText(defaultProps.label));
249
286
 
@@ -264,9 +301,9 @@ describe('SelectDateRange', function () {
264
301
  });
265
302
  describe('when navigating with the calendar controls', function () {
266
303
  it('does NOT close the popover after each click', function () {
267
- var _render11 = render(_react.default.createElement(_.default, defaultProps)),
268
- baseElement = _render11.baseElement,
269
- getByText = _render11.getByText; // open the calendar popover
304
+ var _render13 = render(_react.default.createElement(_.default, defaultProps)),
305
+ baseElement = _render13.baseElement,
306
+ getByText = _render13.getByText; // open the calendar popover
270
307
 
271
308
 
272
309
  _react2.fireEvent.click(getByText(defaultProps.label)); // the "today" button is a part of the calendar controls
@@ -291,11 +328,11 @@ describe('SelectDateRange', function () {
291
328
  });
292
329
  describe('when clearing the value with the clear button inside the popover', function () {
293
330
  it('does not closes the popover after click', function () {
294
- var _render12 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
331
+ var _render14 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
295
332
  defaultValue: []
296
333
  }))),
297
- baseElement = _render12.baseElement,
298
- getByLabelText = _render12.getByLabelText;
334
+ baseElement = _render14.baseElement,
335
+ getByLabelText = _render14.getByLabelText;
299
336
 
300
337
  _react2.fireEvent.click(getByLabelText(defaultProps.label));
301
338
 
@@ -308,13 +345,13 @@ describe('SelectDateRange', function () {
308
345
  it('calls the onChange prop with `undefined`', function () {
309
346
  var onChange = jest.fn();
310
347
 
311
- var _render13 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
348
+ var _render15 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
312
349
  defaultValue: [],
313
350
  onChange: onChange
314
351
  }))),
315
- baseElement = _render13.baseElement,
316
- getByLabelText = _render13.getByLabelText,
317
- queryByLabelText = _render13.queryByLabelText;
352
+ baseElement = _render15.baseElement,
353
+ getByLabelText = _render15.getByLabelText,
354
+ queryByLabelText = _render15.queryByLabelText;
318
355
 
319
356
  _react2.fireEvent.click(getByLabelText(defaultProps.label));
320
357
 
@@ -335,10 +372,10 @@ describe('SelectDateRange', function () {
335
372
  _createDateRange2 = _slicedToArray(_createDateRange, 2),
336
373
  endDate = _createDateRange2[1];
337
374
 
338
- var _render14 = render(_react.default.createElement(_.default, defaultProps)),
339
- baseElement = _render14.baseElement,
340
- getByLabelText = _render14.getByLabelText,
341
- queryByLabelText = _render14.queryByLabelText;
375
+ var _render16 = render(_react.default.createElement(_.default, defaultProps)),
376
+ baseElement = _render16.baseElement,
377
+ getByLabelText = _render16.getByLabelText,
378
+ queryByLabelText = _render16.queryByLabelText;
342
379
 
343
380
  _react2.fireEvent.click(getByLabelText(defaultProps.label));
344
381
 
@@ -355,9 +392,9 @@ describe('SelectDateRange', function () {
355
392
  it('does not close the calendar popover', function () {
356
393
  var today = new Date();
357
394
 
358
- var _render15 = render(_react.default.createElement(_.default, defaultProps)),
359
- baseElement = _render15.baseElement,
360
- getByLabelText = _render15.getByLabelText;
395
+ var _render17 = render(_react.default.createElement(_.default, defaultProps)),
396
+ baseElement = _render17.baseElement,
397
+ getByLabelText = _render17.getByLabelText;
361
398
 
362
399
  _react2.fireEvent.click(getByLabelText(defaultProps.label));
363
400
 
@@ -378,11 +415,11 @@ describe('SelectDateRange', function () {
378
415
  _createDateRange4 = _slicedToArray(_createDateRange3, 2),
379
416
  endDate = _createDateRange4[1];
380
417
 
381
- var _render16 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
418
+ var _render18 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
382
419
  onRangeChange: onRangeChange
383
420
  }))),
384
- baseElement = _render16.baseElement,
385
- getByLabelText = _render16.getByLabelText;
421
+ baseElement = _render18.baseElement,
422
+ getByLabelText = _render18.getByLabelText;
386
423
 
387
424
  _react2.fireEvent.click(getByLabelText(defaultProps.label));
388
425
 
@@ -411,10 +448,10 @@ describe('SelectDateRange', function () {
411
448
  var endDate = new Date();
412
449
  endDate.setDate(startDate.getDate() + 2);
413
450
 
414
- var _render17 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
451
+ var _render19 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
415
452
  values: [startDate, endDate]
416
453
  }))),
417
- container = _render17.container;
454
+ container = _render19.container;
418
455
 
419
456
  var clearButtonIconPathD = container.querySelectorAll('svg path')[0].getAttribute('d');
420
457
  expect(clearButtonIconPathD).toEqual(iconPathD);
@@ -422,10 +459,10 @@ describe('SelectDateRange', function () {
422
459
  it('renders the date in the correct format', function () {
423
460
  var value = createDateRange(new Date(), -2);
424
461
 
425
- var _render18 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
462
+ var _render20 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
426
463
  values: value
427
464
  }))),
428
- getByLabelText = _render18.getByLabelText;
465
+ getByLabelText = _render20.getByLabelText;
429
466
 
430
467
  expect(getByLabelText(defaultProps.label)).toHaveTextContent(formatDateRange(value));
431
468
  });
@@ -433,14 +470,14 @@ describe('SelectDateRange', function () {
433
470
  var onChange = jest.fn();
434
471
  var value = createDateRange(new Date(2020, 1, 15), 2);
435
472
 
436
- var _render19 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
473
+ var _render21 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
437
474
  onChange: onChange,
438
475
  values: value
439
476
  }))),
440
- baseElement = _render19.baseElement,
441
- rerender = _render19.rerender,
442
- getByLabelText = _render19.getByLabelText,
443
- queryByText = _render19.queryByText;
477
+ baseElement = _render21.baseElement,
478
+ rerender = _render21.rerender,
479
+ getByLabelText = _render21.getByLabelText,
480
+ queryByText = _render21.queryByText;
444
481
 
445
482
  _react2.fireEvent.click(getByLabelText(defaultProps.label));
446
483
 
@@ -475,12 +512,12 @@ describe('SelectDateRange', function () {
475
512
  var onChange = jest.fn();
476
513
  var value = createDateRange(new Date(2020, 1, 15), 2);
477
514
 
478
- var _render20 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
515
+ var _render22 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
479
516
  onChange: onChange,
480
517
  values: value
481
518
  }))),
482
- baseElement = _render20.baseElement,
483
- getByLabelText = _render20.getByLabelText;
519
+ baseElement = _render22.baseElement,
520
+ getByLabelText = _render22.getByLabelText;
484
521
 
485
522
  _react2.fireEvent.click(getByLabelText(defaultProps.label));
486
523
 
@@ -495,10 +532,10 @@ describe('SelectDateRange', function () {
495
532
  it('initializes with the default value', function () {
496
533
  var value = createDateRange(new Date(2020, 1, 15));
497
534
 
498
- var _render21 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
535
+ var _render23 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
499
536
  defaultValue: value
500
537
  }))),
501
- getByLabelText = _render21.getByLabelText;
538
+ getByLabelText = _render23.getByLabelText;
502
539
 
503
540
  expect(getByLabelText(defaultProps.label)).toHaveTextContent(formatDateRange(value));
504
541
  });
@@ -506,12 +543,12 @@ describe('SelectDateRange', function () {
506
543
  var onRangeChange = jest.fn();
507
544
  var value = createDateRange(new Date(2020, 1, 15));
508
545
 
509
- var _render22 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
546
+ var _render24 = render(_react.default.createElement(_.default, _extends({}, defaultProps, {
510
547
  onRangeChange: onRangeChange,
511
548
  defaultValue: value
512
549
  }))),
513
- baseElement = _render22.baseElement,
514
- getByLabelText = _render22.getByLabelText;
550
+ baseElement = _render24.baseElement,
551
+ getByLabelText = _render24.getByLabelText;
515
552
 
516
553
  var _value2 = _slicedToArray(value, 2),
517
554
  endDate = _value2[1];
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/components/SelectDateRange/schema.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,MAAM,KAAsC,CAAC;AAqCnD,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/components/SelectDateRange/schema.ts"],"names":[],"mappings":"AAOA,QAAA,MAAM,MAAM,KAAsC,CAAC;AA2CnD,eAAe,MAAM,CAAC"}
@@ -26,6 +26,8 @@ schema.propTypes = _objectSpread({}, (0, _omit.default)(_InputField.schema.makeP
26
26
  clearButtonLabel: _reactDesc.PropTypes.string.description("A hidden label value for the clear button. The select component's label is available within the string for clarity.").defaultValue('Clear {label} value'),
27
27
  defaultValues: _reactDesc.PropTypes.arrayOf(_reactDesc.PropTypes.instanceOf(Date)).description('An array of two `Date` values indicating the start and the end of the range that should be selected by default.'),
28
28
  onChange: _reactDesc.PropTypes.func.description('Called with an array of two `Date` values indicating the start and the end of the selected range when the `apply` button is clicked or with `undefined` when the value is cleared'),
29
+ onHide: _reactDesc.PropTypes.func.description('A callback which is triggered when the popover is closed'),
30
+ onShow: _reactDesc.PropTypes.func.description('A callback which is triggered when the popover is opened'),
29
31
  values: _reactDesc.PropTypes.arrayOf(_reactDesc.PropTypes.instanceOf(Date)).description('An array of two `Date` values indicating the start and the end of the range. If provided, controlling the SelectDateRange must be handled externally. Overrides `defaultValues`.'),
30
32
  onRangeChange: _reactDesc.PropTypes.func.description("Called when dates are being selected and the calendar is open. It's called with an array that contains one or two values depending of selected dates or undefined when it is cleared. Used along with `range` when controlling the selection of dates"),
31
33
  range: _reactDesc.PropTypes.arrayOf(_reactDesc.PropTypes.instanceOf(Date)).description('An array of two `Date` values indicating the start and the end of the range being selected when the calendar is open. Used when controlling the selection of dates'),
@@ -0,0 +1,2 @@
1
+ export default function useFirstMountState(): boolean;
2
+ //# sourceMappingURL=useFirstMount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFirstMount.d.ts","sourceRoot":"","sources":["../../src/utils/useFirstMount.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,OAAO,UAAU,kBAAkB,IAAI,OAAO,CAUpD"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = useFirstMountState;
7
+
8
+ var _react = require("react");
9
+
10
+ function useFirstMountState() {
11
+ var isFirst = (0, _react.useRef)(true);
12
+
13
+ if (isFirst.current) {
14
+ isFirst.current = false;
15
+ return true;
16
+ }
17
+
18
+ return isFirst.current;
19
+ }
@@ -0,0 +1,4 @@
1
+ import { useEffect } from 'react';
2
+ declare const useUpdateEffect: typeof useEffect;
3
+ export default useUpdateEffect;
4
+ //# sourceMappingURL=useUpdateEffect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUpdateEffect.d.ts","sourceRoot":"","sources":["../../src/utils/useUpdateEffect.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAkC,MAAM,OAAO,CAAC;AAGlE,QAAA,MAAM,eAAe,EAAE,OAAO,SAY7B,CAAC;AAEF,eAAe,eAAe,CAAC"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+
8
+ var _react = require("react");
9
+
10
+ var _useFirstMount = _interopRequireDefault(require("./useFirstMount"));
11
+
12
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
+
14
+ /* eslint-disable react-hooks/exhaustive-deps */
15
+ var useUpdateEffect = function useUpdateEffect(effect) {
16
+ var deps = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
17
+ var isFirstMount = (0, _useFirstMount.default)();
18
+ (0, _react.useEffect)(function () {
19
+ if (!isFirstMount) {
20
+ return effect();
21
+ }
22
+
23
+ return undefined;
24
+ }, deps);
25
+ };
26
+
27
+ var _default = useUpdateEffect;
28
+ exports.default = _default;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@decisiv/ui-components",
3
- "version": "2.0.1-alpha.82+d0fecf5",
3
+ "version": "2.0.1-alpha.83+dc80e63",
4
4
  "description": "Decisiv's design system React components",
5
5
  "author": "Decisiv UI Development Team",
6
6
  "license": "MIT",
@@ -71,5 +71,5 @@
71
71
  "access": "public"
72
72
  },
73
73
  "private": false,
74
- "gitHead": "d0fecf5032f3f632a8263f83bd3bb345fc9e93b2"
74
+ "gitHead": "dc80e6330cf0aed87fa6eceec8383e4ea8cf962d"
75
75
  }