@pingux/astro 2.163.1-alpha.0 → 2.163.1-alpha.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.
@@ -39,7 +39,7 @@ var _ListBox = _interopRequireDefault(require("../ListBox"));
39
39
  var _PopoverContainer = _interopRequireDefault(require("../PopoverContainer"));
40
40
  var _ScrollBox = _interopRequireDefault(require("../ScrollBox"));
41
41
  var _react2 = require("@emotion/react");
42
- var _excluded = ["hasAutoFocus", "hasAddOption", "hasCustomValue", "hasNoEmptySelection", "selectedKey", "onSelectionChange", "defaultItems", "items", "loadingState", "onLoadMore", "inputValue", "isReadOnly", "menuTrigger", "isNotFlippable", "direction", "scrollBoxProps", "controlProps", "defaultFilter", "status", "helperText"],
42
+ var _excluded = ["hasAutoFocus", "hasAddOption", "hasCustomValue", "hasNoEmptySelection", "selectedKey", "onSelectionChange", "defaultItems", "items", "loadingState", "onLoadMore", "inputValue", "isReadOnly", "menuTrigger", "isNotFlippable", "direction", "scrollBoxProps", "controlProps", "defaultFilter", "status", "helperText", "renderEmptyState", "allowsEmptyCollection"],
43
43
  _excluded2 = ["shouldFocusOnHover", "shouldSelectOnPressUp", "UNSTABLE_itemBehavior"];
44
44
  function _interopRequireWildcard(e, t) { if ("function" == typeof _WeakMap) var r = new _WeakMap(), n = new _WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = _Object$defineProperty) && _Object$getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
45
45
  function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
@@ -66,6 +66,8 @@ var ComboBoxField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
66
66
  defaultFilter = props.defaultFilter,
67
67
  status = props.status,
68
68
  helperText = props.helperText,
69
+ renderEmptyState = props.renderEmptyState,
70
+ allowsEmptyCollection = props.allowsEmptyCollection,
69
71
  others = (0, _objectWithoutProperties2["default"])(props, _excluded);
70
72
  var _getAriaAttributeProp = (0, _ariaAttributes.getAriaAttributeProps)(others),
71
73
  nonAriaProps = _getAriaAttributeProp.nonAriaProps;
@@ -81,7 +83,8 @@ var ComboBoxField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
81
83
  menuTrigger: menuTrigger,
82
84
  shouldFlip: !isNotFlippable,
83
85
  direction: direction,
84
- label: 'default'
86
+ label: 'default',
87
+ allowsEmptyCollection: allowsEmptyCollection
85
88
  }, nonAriaProps);
86
89
  var popoverRef = (0, _react.useRef)();
87
90
  var buttonRef = (0, _react.useRef)();
@@ -207,7 +210,8 @@ var ComboBoxField = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
207
210
  isLoading: loadingState === _loadingStates["default"].LOADING_MORE,
208
211
  onLoadMore: onLoadMore,
209
212
  isFocusedOnHover: shouldFocusOnHover,
210
- isSelectedOnPressUp: shouldSelectOnPressUp
213
+ isSelectedOnPressUp: shouldSelectOnPressUp,
214
+ renderEmptyState: renderEmptyState
211
215
  }, otherListBoxProps))), (0, _react2.jsx)(_reactAria.DismissButton, {
212
216
  onDismiss: state.close
213
217
  })));
@@ -165,6 +165,18 @@ var ListBox = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
165
165
  };
166
166
  }, [isLoading, onLoadPrev, items]);
167
167
  (0, _useLoadPrev["default"])(memoedLoadMoreProps, listBoxRef);
168
+ var EmptyState = function EmptyState() {
169
+ var emptyState = renderEmptyState ? renderEmptyState() : null;
170
+ if (emptyState == null) {
171
+ return null;
172
+ }
173
+ return (0, _react2.jsx)(_Box["default"], {
174
+ as: "li",
175
+ isRow: true,
176
+ role: "option",
177
+ variant: "listBox.option"
178
+ }, emptyState);
179
+ };
168
180
  return (0, _react2.jsx)(_ListBoxContext.ListBoxContext.Provider, {
169
181
  value: state
170
182
  }, (0, _react2.jsx)(_Box["default"], {
@@ -206,6 +218,9 @@ var ListBox = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
206
218
  "aria-label": "Loading more..."
207
219
  });
208
220
  }
221
+ if (type === collectionTypes.PLACEHOLDER) {
222
+ return (0, _react2.jsx)(EmptyState, null);
223
+ }
209
224
  return null;
210
225
  })));
211
226
  });
@@ -163,4 +163,17 @@ test('should have is-focused class when hover', /*#__PURE__*/(0, _asyncToGenerat
163
163
  return _context.stop();
164
164
  }
165
165
  }, _callee);
166
- })));
166
+ })));
167
+ test('should render empty state when no items', function () {
168
+ getComponent({
169
+ items: [],
170
+ renderEmptyState: function renderEmptyState() {
171
+ return (0, _react3.jsx)("div", {
172
+ "data-testid": "empty-state"
173
+ }, "No items");
174
+ }
175
+ });
176
+ var emptyState = _react2.screen.getByTestId('empty-state');
177
+ expect(emptyState).toBeInTheDocument();
178
+ expect(emptyState).toHaveTextContent('No items');
179
+ });
@@ -5,7 +5,7 @@ var _Object$keys = require("@babel/runtime-corejs3/core-js-stable/object/keys");
5
5
  var _Object$getOwnPropertySymbols = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-symbols");
6
6
  var _filterInstanceProperty2 = require("@babel/runtime-corejs3/core-js-stable/instance/filter");
7
7
  var _Object$getOwnPropertyDescriptor = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptor");
8
- var _forEachInstanceProperty = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
8
+ var _forEachInstanceProperty2 = require("@babel/runtime-corejs3/core-js-stable/instance/for-each");
9
9
  var _Object$getOwnPropertyDescriptors = require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-descriptors");
10
10
  var _Object$defineProperties = require("@babel/runtime-corejs3/core-js-stable/object/define-properties");
11
11
  var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
@@ -16,58 +16,42 @@ _Object$defineProperty(exports, "__esModule", {
16
16
  });
17
17
  exports["default"] = void 0;
18
18
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
19
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
19
20
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
20
21
  var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/objectWithoutProperties"));
21
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/defineProperty"));
22
22
  var _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
23
23
  var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
24
+ var _sort = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/sort"));
24
25
  var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
25
26
  var _entries = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/entries"));
27
+ var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
26
28
  var _filter = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/filter"));
27
- var _indexOf = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/index-of"));
28
- var _parseFloat2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/parse-float"));
29
- var _sort = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/sort"));
29
+ var _map2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/map"));
30
+ var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
30
31
  var _react = _interopRequireWildcard(require("react"));
31
32
  var _propTypes = _interopRequireDefault(require("prop-types"));
32
33
  var _index = require("../../index");
33
34
  var _pendoID = require("../../utils/devUtils/constants/pendoID");
35
+ var _helper = require("./helper");
34
36
  var _timezones = _interopRequireWildcard(require("./timezones"));
35
37
  var _react2 = require("@emotion/react");
36
38
  var _excluded = ["additionalTimeZones", "emptySearchText", "locales", "localeOptions"];
37
39
  function _interopRequireWildcard(e, t) { if ("function" == typeof _WeakMap) var r = new _WeakMap(), n = new _WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = _Object$defineProperty) && _Object$getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
38
40
  function ownKeys(e, r) { var t = _Object$keys(e); if (_Object$getOwnPropertySymbols) { var o = _Object$getOwnPropertySymbols(e); r && (o = _filterInstanceProperty2(o).call(o, function (r) { return _Object$getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
39
- function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context8, _context9; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty(_context8 = ownKeys(Object(t), !0)).call(_context8, function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty(_context9 = ownKeys(Object(t))).call(_context9, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
41
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var _context8, _context9; var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? _forEachInstanceProperty2(_context8 = ownKeys(Object(t), !0)).call(_context8, function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : _Object$getOwnPropertyDescriptors ? _Object$defineProperties(e, _Object$getOwnPropertyDescriptors(t)) : _forEachInstanceProperty2(_context9 = ownKeys(Object(t))).call(_context9, function (r) { _Object$defineProperty(e, r, _Object$getOwnPropertyDescriptor(t, r)); }); } return e; }
40
42
  var createSearchTags = function createSearchTags(_ref) {
41
- var _context, _context2, _context3, _context4;
43
+ var _context, _context2, _context3;
42
44
  var gmt = _ref.gmt,
43
- gmtLabel = _ref.gmtLabel,
44
45
  timeZone = _ref.timeZone;
46
+ var normalizedTz = timeZone.replace(/_/g, ' ');
45
47
  var additionalTags = '';
46
- var americaTimeZone = (0, _includes["default"])(timeZone).call(timeZone, 'America') && timeZone.substring(8);
47
- if ((0, _includes["default"])(_timezones.usCities).call(_timezones.usCities, americaTimeZone)) {
48
- additionalTags = "US ".concat(americaTimeZone);
48
+ if ((0, _includes["default"])(timeZone).call(timeZone, 'America')) {
49
+ var city = timeZone.split('/')[1];
50
+ if ((0, _includes["default"])(_timezones.usCities).call(_timezones.usCities, city)) {
51
+ additionalTags = "US ".concat(city);
52
+ }
49
53
  }
50
- return (0, _concat["default"])(_context = (0, _concat["default"])(_context2 = (0, _concat["default"])(_context3 = (0, _concat["default"])(_context4 = "".concat(gmt, " ")).call(_context4, gmtLabel, " ")).call(_context3, timeZone, " ")).call(_context2, timeZone === null || timeZone === void 0 ? void 0 : timeZone.replace(/_/g, ' '), " ")).call(_context, additionalTags);
51
- };
52
- var getLocaleTime = function getLocaleTime(_ref2) {
53
- var timeZone = _ref2.timeZone,
54
- locales = _ref2.locales,
55
- localeOptions = _ref2.localeOptions;
56
- var date = new Date();
57
- return date.toLocaleTimeString(locales, _objectSpread({
58
- timeZone: timeZone
59
- }, localeOptions));
60
- };
61
- var getTimezoneOffset = function getTimezoneOffset(timeZone) {
62
- var now = new Date();
63
- var tzString = now.toLocaleString('en-US', {
64
- timeZone: timeZone
65
- });
66
- var localString = now.toLocaleString('en-US');
67
- var diff = (Date.parse(localString) - Date.parse(tzString)) / 3600000;
68
- var offset = -(diff + now.getTimezoneOffset() / 60);
69
- var formattedString = "".concat(offset, ":00");
70
- return offset > 0 ? "+".concat(formattedString) : formattedString;
54
+ return (0, _concat["default"])(_context = (0, _concat["default"])(_context2 = (0, _concat["default"])(_context3 = "".concat(gmt, " ")).call(_context3, timeZone, " ")).call(_context2, normalizedTz, " ")).call(_context, additionalTags).toUpperCase();
71
55
  };
72
56
  var TimeZonePicker = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
73
57
  var additionalTimeZones = props.additionalTimeZones,
@@ -79,127 +63,120 @@ var TimeZonePicker = /*#__PURE__*/(0, _react.forwardRef)(function (props, ref) {
79
63
  _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
80
64
  search = _useState2[0],
81
65
  setSearch = _useState2[1];
82
- var _useState3 = (0, _react.useState)(true),
66
+ var _useState3 = (0, _react.useState)(''),
83
67
  _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
84
- timeUpdate = _useState4[0],
85
- setTimeUpdate = _useState4[1];
86
- var _useState5 = (0, _react.useState)([]),
87
- _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
88
- timeZones = _useState6[0],
89
- setTimeZones = _useState6[1];
90
- var extendedTimeZonesList = additionalTimeZones ? _objectSpread(_objectSpread({}, _timezones["default"]), additionalTimeZones) : _timezones["default"];
68
+ selectedKey = _useState4[0],
69
+ setSelectedKey = _useState4[1];
91
70
  var timeZonePickerRef = (0, _react.useRef)();
92
71
  /* istanbul ignore next */
93
72
  (0, _react.useImperativeHandle)(ref, function () {
94
73
  return timeZonePickerRef.current;
95
74
  });
96
- (0, _react.useEffect)(function () {
97
- if (timeUpdate) {
98
- var createTimeZoneTimes = function createTimeZoneTimes() {
99
- var _context5;
100
- return (0, _map["default"])(_context5 = (0, _entries["default"])(extendedTimeZonesList)).call(_context5, function (item) {
101
- var _item$;
102
- var gmt = "GMT".concat(getTimezoneOffset(item[1]));
103
- var gmtLabel = item[0].substring(12);
104
- var timeZone = (_item$ = item[1]) === null || _item$ === void 0 ? void 0 : _item$.replace(/_/g, ' ');
105
- var time = getLocaleTime({
106
- timeZone: item[1],
107
- locales: locales,
108
- localeOptions: localeOptions
109
- });
110
- var searchTags = createSearchTags({
111
- gmt: gmt,
112
- gmtLabel: gmtLabel,
113
- timeZone: timeZone
114
- });
115
- return {
116
- gmt: gmt,
117
- timeZone: timeZone,
118
- time: time,
119
- searchTags: searchTags
120
- };
121
- });
75
+ var allTimeZones = (0, _react.useMemo)(function () {
76
+ var _context4, _context5;
77
+ var sourceList = additionalTimeZones ? _objectSpread(_objectSpread({}, _timezones["default"]), additionalTimeZones) : _timezones["default"];
78
+ return (0, _sort["default"])(_context4 = (0, _map["default"])(_context5 = (0, _entries["default"])(sourceList)).call(_context5, function (_ref2) {
79
+ var _context6;
80
+ var _ref3 = (0, _slicedToArray2["default"])(_ref2, 2),
81
+ label = _ref3[0],
82
+ tzValue = _ref3[1];
83
+ var _getGmtAndOffset = (0, _helper.getGmtAndOffset)(tzValue),
84
+ gmt = _getGmtAndOffset.gmt,
85
+ numericOffset = _getGmtAndOffset.numericOffset;
86
+ var displayTz = tzValue.replace(/_/g, ' ');
87
+ return {
88
+ key: (0, _concat["default"])(_context6 = "".concat(displayTz, " ")).call(_context6, gmt),
89
+ id: tzValue,
90
+ label: label,
91
+ timeZone: displayTz,
92
+ gmt: gmt,
93
+ numericOffset: numericOffset,
94
+ searchTags: createSearchTags({
95
+ gmt: gmt,
96
+ timeZone: tzValue
97
+ })
122
98
  };
123
- setTimeZones(createTimeZoneTimes());
124
- setTimeUpdate(false);
99
+ })).call(_context4, function (a, b) {
100
+ return a.numericOffset - b.numericOffset;
101
+ });
102
+ }, [additionalTimeZones]);
103
+ var filteredItems = (0, _react.useMemo)(function () {
104
+ var selectedItem = (0, _find["default"])(allTimeZones).call(allTimeZones, function (tz) {
105
+ return tz.key === selectedKey;
106
+ });
107
+ var isExactMatch = selectedItem && selectedItem.key === search;
108
+ if (!search || isExactMatch) {
109
+ return allTimeZones;
125
110
  }
126
- }, [extendedTimeZonesList, locales, localeOptions, timeUpdate]);
127
- var filterTimezones = (0, _react.useCallback)(function (timeZonesList) {
128
- return (0, _filter["default"])(timeZonesList).call(timeZonesList, function (_ref3) {
129
- var _context6;
130
- var searchTags = _ref3.searchTags;
131
- return (0, _indexOf["default"])(_context6 = searchTags.toUpperCase()).call(_context6, search.toUpperCase()) > -1;
111
+ var upperSearch = search.toUpperCase();
112
+ return (0, _filter["default"])(allTimeZones).call(allTimeZones, function (tz) {
113
+ var _context7;
114
+ return (0, _includes["default"])(_context7 = tz.searchTags).call(_context7, upperSearch);
132
115
  });
133
- }, [search]);
134
- var filteredTimezones = (0, _react.useMemo)(function () {
135
- return filterTimezones(timeZones);
136
- }, [filterTimezones, timeZones]);
137
- var sortByGMT = function sortByGMT(a, b) {
138
- var aNum = (0, _parseFloat2["default"])(a.gmt.split('GMT')[1].split(':')[0]);
139
- var bNum = (0, _parseFloat2["default"])(b.gmt.split('GMT')[1].split(')')[0]);
140
- return aNum - bNum;
141
- };
142
- var checkIsSelectedItem = function checkIsSelectedItem() {
143
- return (0, _filter["default"])(timeZones).call(timeZones, function (tz) {
144
- return tz.timeZone === search;
145
- }).length > 0;
146
- };
147
- var renderTimeZones = function renderTimeZones(timeZonesToRender) {
148
- var _context7;
149
- return (0, _map["default"])(_context7 = (0, _sort["default"])(timeZonesToRender).call(timeZonesToRender, sortByGMT)).call(_context7, function (_ref4) {
150
- var gmt = _ref4.gmt,
151
- time = _ref4.time,
152
- timeZone = _ref4.timeZone;
153
- return (0, _react2.jsx)(_index.Item, {
154
- key: timeZone,
155
- "data-id": timeZone,
156
- textValue: timeZone
157
- }, (0, _react2.jsx)(_index.Box, {
158
- flexDirection: "row",
159
- justifyContent: "space-between",
160
- width: "100%"
161
- }, (0, _react2.jsx)(_index.Box, {
162
- flexDirection: "row"
163
- }, (0, _react2.jsx)(_index.Text, {
164
- variant: "variants.timeZone.item.title"
165
- }, timeZone), (0, _react2.jsx)(_index.Text, {
166
- variant: "variants.timeZone.item.subTitle"
167
- }, gmt)), (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.Text, {
168
- variant: "variants.timeZone.item.time"
169
- }, time))));
116
+ }, [search, selectedKey, allTimeZones]);
117
+ var timeData = (0, _react.useMemo)(function () {
118
+ var now = new Date();
119
+ var map = new _map2["default"]();
120
+ (0, _forEach["default"])(allTimeZones).call(allTimeZones, function (tz) {
121
+ map.set(tz.id, now.toLocaleTimeString(locales, _objectSpread({
122
+ timeZone: tz.id
123
+ }, localeOptions)));
170
124
  });
125
+ return map;
126
+ }, [allTimeZones, locales, localeOptions]);
127
+ var onInputChange = function onInputChange(value) {
128
+ setSearch(value);
129
+ if (value === '') {
130
+ setSelectedKey(null);
131
+ }
171
132
  };
172
- var items = (0, _react.useMemo)(function () {
173
- if (filteredTimezones.length === 0) {
174
- return (0, _react2.jsx)(_index.Item, {
175
- key: emptySearchText
176
- }, emptySearchText);
133
+ var onSelectionChange = function onSelectionChange(key) {
134
+ if (!key) return;
135
+ var selectedItem = (0, _find["default"])(allTimeZones).call(allTimeZones, function (item) {
136
+ return item.key === key;
137
+ });
138
+ if (selectedItem) {
139
+ setSearch(selectedItem.key);
140
+ setSelectedKey(key);
177
141
  }
178
- return renderTimeZones(checkIsSelectedItem() ? timeZones : filteredTimezones);
179
- }, [emptySearchText, filteredTimezones, search, timeZones]);
180
- var comboBoxFieldProps = (0, _react.useMemo)(function () {
181
- return _objectSpread({
182
- containerProps: {
183
- sx: {
184
- width: 400,
185
- fontSize: 'md'
186
- }
187
- },
188
- onInputChange: setSearch,
189
- items: filteredTimezones,
190
- ref: timeZonePickerRef,
191
- onOpenChange: function onOpenChange(isOpen) {
192
- return setTimeUpdate(isOpen);
193
- },
194
- disabledKeys: [{
195
- emptySearchText: emptySearchText
196
- }]
197
- }, otherProps);
198
- }, [emptySearchText, filteredTimezones, otherProps]);
199
- return (0, _react2.jsx)(_index.ComboBoxField, (0, _extends2["default"])({}, (0, _pendoID.getPendoID)('TimeZonePicker'), comboBoxFieldProps, {
142
+ };
143
+ return (0, _react2.jsx)(_index.ComboBoxField, (0, _extends2["default"])({}, (0, _pendoID.getPendoID)('TimeZonePicker'), otherProps, {
144
+ ref: timeZonePickerRef,
145
+ items: filteredItems,
146
+ inputValue: search,
147
+ selectedKey: selectedKey,
148
+ onInputChange: onInputChange,
149
+ onSelectionChange: onSelectionChange,
150
+ menuTrigger: "input",
200
151
  disabledKeys: [emptySearchText],
201
- menuTrigger: "input"
202
- }), items);
152
+ containerProps: {
153
+ sx: {
154
+ width: 400,
155
+ fontSize: 'md'
156
+ }
157
+ },
158
+ allowsEmptyCollection: true,
159
+ renderEmptyState: function renderEmptyState() {
160
+ return (0, _react2.jsx)("span", null, emptySearchText);
161
+ }
162
+ }), function (item) {
163
+ return (0, _react2.jsx)(_index.Item, {
164
+ key: "".concat(item.key),
165
+ textValue: "".concat(item.key)
166
+ }, (0, _react2.jsx)(_index.Box, {
167
+ flexDirection: "row",
168
+ justifyContent: "space-between",
169
+ width: "100%"
170
+ }, (0, _react2.jsx)(_index.Box, {
171
+ flexDirection: "row"
172
+ }, (0, _react2.jsx)(_index.Text, {
173
+ variant: "variants.timeZone.item.title"
174
+ }, item.timeZone), (0, _react2.jsx)(_index.Text, {
175
+ variant: "variants.timeZone.item.subTitle"
176
+ }, item.gmt)), (0, _react2.jsx)(_index.Box, null, (0, _react2.jsx)(_index.Text, {
177
+ variant: "variants.timeZone.item.time"
178
+ }, timeData.get(item.id)))));
179
+ });
203
180
  });
204
181
  TimeZonePicker.propTypes = {
205
182
  /**
@@ -14,11 +14,12 @@ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime-corejs3/
14
14
  var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
15
15
  var _react = _interopRequireDefault(require("react"));
16
16
  var _userEvent = _interopRequireDefault(require("@testing-library/user-event"));
17
+ var _constants = _interopRequireDefault(require("constants"));
17
18
  var _index = require("../../index");
18
19
  var _testWrapper = require("../../utils/testUtils/testWrapper");
19
20
  var _universalComponentTest = require("../../utils/testUtils/universalComponentTest");
20
21
  var _react2 = require("@emotion/react");
21
- function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = "function" == typeof _Symbol ? _Symbol : {}, i = o.iterator || "@@iterator", a = o.asyncIterator || "@@asyncIterator", u = o.toStringTag || "@@toStringTag"; function c(t, r, e, n) { return _Object$defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, ""); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = _Object$create(i.prototype); return c(a, "_invoke", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error("Generator is already running"); if (4 === o) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = 3; var h = s(r, e, n); if ("normal" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } "throw" === h.type && (o = 4, n.method = "throw", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: "normal", arg: t.call(r, e) }; } catch (t) { return { type: "throw", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = _Object$getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(l); function g(t) { var _context4; _forEachInstanceProperty(_context4 = ["next", "throw", "return"]).call(_context4, function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if ("throw" !== c.type) { var h = c.arg, f = h.value; return f && "object" == _typeof(f) && n.call(f, "__await") ? r.resolve(f.__await).then(function (t) { e("next", t, a, u); }, function (t) { e("throw", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e("throw", t, a, u); }); } u(c.arg); } var o; c(this, "_invoke", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, "throw" === n && r.i["return"] && (e.method = "return", e.arg = t, d(r, e), "throw" === e.method) || "return" !== n && (e.method = "throw", e.arg = new TypeError("The iterator does not provide a '" + n + "' method")), f; var i = s(o, r.i, e.arg); if ("throw" === i.type) return e.method = "throw", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, "return" !== e.method && (e.method = "next", e.arg = t), e.delegate = null, f) : a : (e.method = "throw", e.arg = new TypeError("iterator result is not an object"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = "normal", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], _forEachInstanceProperty(t).call(t, w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if ("function" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, "constructor", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, "GeneratorFunction"), r.isGeneratorFunction = function (t) { var r = "function" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || "GeneratorFunction" === (r.displayName || r.name)); }, r.mark = function (t) { return _Object$setPrototypeOf ? _Object$setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, "GeneratorFunction")), t.prototype = _Object$create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = _Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, "Generator"), c(v, i, function () { return this; }), c(v, "toString", function () { return "[object Generator]"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { var _context5; if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, _forEachInstanceProperty(_context5 = this.tryEntries).call(_context5, m), !r) for (var e in this) "t" === e.charAt(0) && n.call(this, e) && !isNaN(+_sliceInstanceProperty(e).call(e, 1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = "throw", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n("end"), !1; if (!c && !h) throw Error("try statement without catch or finally"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = "next", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && ("break" === t || "continue" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = "next", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, "catch": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if ("throw" === n.type) { var o = n.arg; m(e); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, "next" === this.method && (this.arg = t), f; } }, r; }
22
+ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return r; }; var t, r = {}, e = Object.prototype, n = e.hasOwnProperty, o = "function" == typeof _Symbol ? _Symbol : {}, i = o.iterator || "@@iterator", a = o.asyncIterator || "@@asyncIterator", u = o.toStringTag || "@@toStringTag"; function c(t, r, e, n) { return _Object$defineProperty(t, r, { value: e, enumerable: !n, configurable: !n, writable: !n }); } try { c({}, ""); } catch (t) { c = function c(t, r, e) { return t[r] = e; }; } function h(r, e, n, o) { var i = e && e.prototype instanceof Generator ? e : Generator, a = _Object$create(i.prototype); return c(a, "_invoke", function (r, e, n) { var o = 1; return function (i, a) { if (3 === o) throw Error("Generator is already running"); if (4 === o) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var u = n.delegate; if (u) { var c = d(u, n); if (c) { if (c === f) continue; return c; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (1 === o) throw o = 4, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = 3; var h = s(r, e, n); if ("normal" === h.type) { if (o = n.done ? 4 : 2, h.arg === f) continue; return { value: h.arg, done: n.done }; } "throw" === h.type && (o = 4, n.method = "throw", n.arg = h.arg); } }; }(r, n, new Context(o || [])), !0), a; } function s(t, r, e) { try { return { type: "normal", arg: t.call(r, e) }; } catch (t) { return { type: "throw", arg: t }; } } r.wrap = h; var f = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var l = {}; c(l, i, function () { return this; }); var p = _Object$getPrototypeOf, y = p && p(p(x([]))); y && y !== e && n.call(y, i) && (l = y); var v = GeneratorFunctionPrototype.prototype = Generator.prototype = _Object$create(l); function g(t) { var _context5; _forEachInstanceProperty(_context5 = ["next", "throw", "return"]).call(_context5, function (r) { c(t, r, function (t) { return this._invoke(r, t); }); }); } function AsyncIterator(t, r) { function e(o, i, a, u) { var c = s(t[o], t, i); if ("throw" !== c.type) { var h = c.arg, f = h.value; return f && "object" == _typeof(f) && n.call(f, "__await") ? r.resolve(f.__await).then(function (t) { e("next", t, a, u); }, function (t) { e("throw", t, a, u); }) : r.resolve(f).then(function (t) { h.value = t, a(h); }, function (t) { return e("throw", t, a, u); }); } u(c.arg); } var o; c(this, "_invoke", function (t, n) { function i() { return new r(function (r, o) { e(t, n, r, o); }); } return o = o ? o.then(i, i) : i(); }, !0); } function d(r, e) { var n = e.method, o = r.i[n]; if (o === t) return e.delegate = null, "throw" === n && r.i["return"] && (e.method = "return", e.arg = t, d(r, e), "throw" === e.method) || "return" !== n && (e.method = "throw", e.arg = new TypeError("The iterator does not provide a '" + n + "' method")), f; var i = s(o, r.i, e.arg); if ("throw" === i.type) return e.method = "throw", e.arg = i.arg, e.delegate = null, f; var a = i.arg; return a ? a.done ? (e[r.r] = a.value, e.next = r.n, "return" !== e.method && (e.method = "next", e.arg = t), e.delegate = null, f) : a : (e.method = "throw", e.arg = new TypeError("iterator result is not an object"), e.delegate = null, f); } function w(t) { this.tryEntries.push(t); } function m(r) { var e = r[4] || {}; e.type = "normal", e.arg = t, r[4] = e; } function Context(t) { this.tryEntries = [[-1]], _forEachInstanceProperty(t).call(t, w, this), this.reset(!0); } function x(r) { if (null != r) { var e = r[i]; if (e) return e.call(r); if ("function" == typeof r.next) return r; if (!isNaN(r.length)) { var o = -1, a = function e() { for (; ++o < r.length;) if (n.call(r, o)) return e.value = r[o], e.done = !1, e; return e.value = t, e.done = !0, e; }; return a.next = a; } } throw new TypeError(_typeof(r) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, c(v, "constructor", GeneratorFunctionPrototype), c(GeneratorFunctionPrototype, "constructor", GeneratorFunction), GeneratorFunction.displayName = c(GeneratorFunctionPrototype, u, "GeneratorFunction"), r.isGeneratorFunction = function (t) { var r = "function" == typeof t && t.constructor; return !!r && (r === GeneratorFunction || "GeneratorFunction" === (r.displayName || r.name)); }, r.mark = function (t) { return _Object$setPrototypeOf ? _Object$setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, c(t, u, "GeneratorFunction")), t.prototype = _Object$create(v), t; }, r.awrap = function (t) { return { __await: t }; }, g(AsyncIterator.prototype), c(AsyncIterator.prototype, a, function () { return this; }), r.AsyncIterator = AsyncIterator, r.async = function (t, e, n, o, i) { void 0 === i && (i = _Promise); var a = new AsyncIterator(h(t, e, n, o), i); return r.isGeneratorFunction(e) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, g(v), c(v, u, "Generator"), c(v, i, function () { return this; }), c(v, "toString", function () { return "[object Generator]"; }), r.keys = function (t) { var r = Object(t), e = []; for (var n in r) e.unshift(n); return function t() { for (; e.length;) if ((n = e.pop()) in r) return t.value = n, t.done = !1, t; return t.done = !0, t; }; }, r.values = x, Context.prototype = { constructor: Context, reset: function reset(r) { var _context6; if (this.prev = this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, _forEachInstanceProperty(_context6 = this.tryEntries).call(_context6, m), !r) for (var e in this) "t" === e.charAt(0) && n.call(this, e) && !isNaN(+_sliceInstanceProperty(e).call(e, 1)) && (this[e] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0][4]; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(r) { if (this.done) throw r; var e = this; function n(t) { a.type = "throw", a.arg = r, e.next = t; } for (var o = e.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i[4], u = this.prev, c = i[1], h = i[2]; if (-1 === i[0]) return n("end"), !1; if (!c && !h) throw Error("try statement without catch or finally"); if (null != i[0] && i[0] <= u) { if (u < c) return this.method = "next", this.arg = t, n(c), !0; if (u < h) return n(h), !1; } } }, abrupt: function abrupt(t, r) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var n = this.tryEntries[e]; if (n[0] > -1 && n[0] <= this.prev && this.prev < n[2]) { var o = n; break; } } o && ("break" === t || "continue" === t) && o[0] <= r && r <= o[2] && (o = null); var i = o ? o[4] : {}; return i.type = t, i.arg = r, o ? (this.method = "next", this.next = o[2], f) : this.complete(i); }, complete: function complete(t, r) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && r && (this.next = r), f; }, finish: function finish(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[2] === t) return this.complete(e[4], e[3]), m(e), f; } }, "catch": function _catch(t) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var e = this.tryEntries[r]; if (e[0] === t) { var n = e[4]; if ("throw" === n.type) { var o = n.arg; m(e); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(r, e, n) { return this.delegate = { i: x(r), r: e, n: n }, "next" === this.method && (this.arg = t), f; } }, r; }
22
23
  var testTimeZoneJuba = 'Africa/Juba';
23
24
  var testTimeZoneApia = 'Pacific/Apia';
24
25
  var defaultProps = {
@@ -128,4 +129,30 @@ test('shows custom empty search state text when no items are found', /*#__PURE__
128
129
  renderComponent: function renderComponent(props) {
129
130
  return (0, _react2.jsx)(_index.TimeZonePicker, (0, _extends2["default"])({}, defaultProps, props));
130
131
  }
131
- });
132
+ });
133
+ test('selecting a timezone updates the input value', /*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regeneratorRuntime().mark(function _callee4() {
134
+ var input, option;
135
+ return _regeneratorRuntime().wrap(function _callee4$(_context4) {
136
+ while (1) switch (_context4.prev = _context4.next) {
137
+ case 0:
138
+ getComponent();
139
+ input = _testWrapper.screen.queryByRole('combobox');
140
+ _context4.next = 4;
141
+ return _userEvent["default"].type(input, 'America/New York');
142
+ case 4:
143
+ expect(input).toHaveValue('America/New York');
144
+ expect(_testWrapper.screen.queryByRole('listbox')).toBeInTheDocument();
145
+ option = _testWrapper.screen.getByRole('option', {
146
+ key: 'America/New York GMT-05:00'
147
+ });
148
+ expect(option).toBeInTheDocument();
149
+ _context4.next = 10;
150
+ return _userEvent["default"].click(option);
151
+ case 10:
152
+ expect(input).toHaveValue('America/New York GMT-05:00');
153
+ case 11:
154
+ case "end":
155
+ return _context4.stop();
156
+ }
157
+ }, _callee4);
158
+ })));
@@ -0,0 +1,6 @@
1
+ export declare const getOffSetString: (timeZone: any) => string;
2
+ export declare const getNumericOffset: (offsetString: any) => number;
3
+ export declare const getGmtAndOffset: (timeZone: any) => {
4
+ gmt: string;
5
+ numericOffset: number;
6
+ };
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+
3
+ var _Object$defineProperty = require("@babel/runtime-corejs3/core-js-stable/object/define-property");
4
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
5
+ _Object$defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.getOffSetString = exports.getNumericOffset = exports.getGmtAndOffset = void 0;
9
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/slicedToArray"));
10
+ var _find = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/find"));
11
+ var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/parse-int"));
12
+ var getOffSetString = exports.getOffSetString = function getOffSetString(timeZone) {
13
+ var _parts$find;
14
+ // Use Intl.DateTimeFormat to get the GMT offset string
15
+ var parts = new Intl.DateTimeFormat('en-US', {
16
+ timeZone: timeZone,
17
+ timeZoneName: 'longOffset'
18
+ }).formatToParts(new Date());
19
+
20
+ // Extract the GMT offset part
21
+ var offsetString = ((_parts$find = (0, _find["default"])(parts).call(parts, function (p) {
22
+ return p.type === 'timeZoneName';
23
+ })) === null || _parts$find === void 0 ? void 0 : _parts$find.value) || 'GMT+00:00';
24
+ if (offsetString !== 'GMT') {
25
+ return offsetString;
26
+ }
27
+ return 'GMT+00:00';
28
+ };
29
+ var getNumericOffset = exports.getNumericOffset = function getNumericOffset(offsetString) {
30
+ // Convert GMT offset string to numeric offset in hours
31
+ var match = offsetString.match(/([+-])(\d+):(\d+)/);
32
+ if (match) {
33
+ var _match = (0, _slicedToArray2["default"])(match, 4),
34
+ _ = _match[0],
35
+ sign = _match[1],
36
+ hours = _match[2],
37
+ minutes = _match[3];
38
+ // Calculate the numeric offset in hours
39
+ return ((0, _parseInt2["default"])(hours, 10) + (0, _parseInt2["default"])(minutes, 10) / 60) * (sign === '+' ? 1 : -1);
40
+ }
41
+ return 0;
42
+ };
43
+ var getGmtAndOffset = exports.getGmtAndOffset = function getGmtAndOffset(timeZone) {
44
+ try {
45
+ var offsetString = getOffSetString(timeZone);
46
+ var numericOffset = getNumericOffset(offsetString);
47
+
48
+ // Return both the GMT string and numeric offset
49
+ return {
50
+ gmt: offsetString,
51
+ numericOffset: numericOffset
52
+ };
53
+ } catch (e) {
54
+ return {
55
+ gmt: 'GMT+00:00',
56
+ numericOffset: 0
57
+ };
58
+ }
59
+ };
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
4
+ var _typeof2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/typeof"));
5
+ var _helper = require("./helper");
6
+ describe('TimeZonePicker helpers', function () {
7
+ describe('getOffSetString', function () {
8
+ test('returns GMT offset string for America/New_York', function () {
9
+ var result = (0, _helper.getOffSetString)('America/New_York');
10
+ expect(result).toMatch(/GMT[+-]\d{2}:\d{2}/);
11
+ });
12
+ test('returns GMT offset string for Europe/London', function () {
13
+ var result = (0, _helper.getOffSetString)('Europe/London');
14
+ expect(result).toMatch(/GMT[+-]\d{2}:\d{2}/);
15
+ });
16
+ test('returns GMT offset string for Asia/Tokyo', function () {
17
+ var result = (0, _helper.getOffSetString)('Asia/Tokyo');
18
+ expect(result).toMatch(/GMT[+-]\d{2}:\d{2}/);
19
+ });
20
+ test('returns GMT+00:00 for UTC', function () {
21
+ var result = (0, _helper.getOffSetString)('UTC');
22
+ expect(result).toBe('GMT+00:00');
23
+ });
24
+ });
25
+ describe('getNumericOffset', function () {
26
+ test('parses positive offset correctly', function () {
27
+ var result = (0, _helper.getNumericOffset)('GMT+05:30');
28
+ expect(result).toBe(5.5);
29
+ });
30
+ test('parses negative offset correctly', function () {
31
+ var result = (0, _helper.getNumericOffset)('GMT-08:00');
32
+ expect(result).toBe(-8);
33
+ });
34
+ test('parses zero offset correctly', function () {
35
+ var result = (0, _helper.getNumericOffset)('GMT+00:00');
36
+ expect(result).toBe(0);
37
+ });
38
+ test('handles offset with minutes correctly', function () {
39
+ var result = (0, _helper.getNumericOffset)('GMT+03:30');
40
+ expect(result).toBe(3.5);
41
+ });
42
+ test('returns 0 for invalid offset string', function () {
43
+ var result = (0, _helper.getNumericOffset)('invalid');
44
+ expect(result).toBe(0);
45
+ });
46
+ test('returns 0 for GMT without offset', function () {
47
+ var result = (0, _helper.getNumericOffset)('GMT');
48
+ expect(result).toBe(0);
49
+ });
50
+ });
51
+ describe('getGmtAndOffset', function () {
52
+ test('returns GMT string and numeric offset for valid timezone', function () {
53
+ var result = (0, _helper.getGmtAndOffset)('America/New_York');
54
+ expect(result).toHaveProperty('gmt');
55
+ expect(result).toHaveProperty('numericOffset');
56
+ expect(result.gmt).toMatch(/GMT[+-]\d{2}:\d{2}/);
57
+ expect((0, _typeof2["default"])(result.numericOffset)).toBe('number');
58
+ });
59
+ test('returns GMT+00:00 and 0 for invalid timezone', function () {
60
+ var result = (0, _helper.getGmtAndOffset)('Invalid/Timezone');
61
+ expect(result).toEqual({
62
+ gmt: 'GMT+00:00',
63
+ numericOffset: 0
64
+ });
65
+ });
66
+ test('returns correct values for UTC', function () {
67
+ var result = (0, _helper.getGmtAndOffset)('UTC');
68
+ expect(result).toEqual({
69
+ gmt: 'GMT+00:00',
70
+ numericOffset: 0
71
+ });
72
+ });
73
+ test('returns correct values for Asia/Kolkata', function () {
74
+ var result = (0, _helper.getGmtAndOffset)('Asia/Kolkata');
75
+ expect(result.gmt).toMatch(/GMT\+05:30/);
76
+ expect(result.numericOffset).toBe(5.5);
77
+ });
78
+ });
79
+ });