@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.
- package/lib/cjs/components/ComboBoxField/ComboBoxField.js +7 -3
- package/lib/cjs/components/ListBox/ListBox.js +15 -0
- package/lib/cjs/components/ListBox/ListBox.test.js +14 -1
- package/lib/cjs/components/TimeZonePicker/TimeZonePicker.js +117 -140
- package/lib/cjs/components/TimeZonePicker/TimeZonePicker.test.js +29 -2
- package/lib/cjs/components/TimeZonePicker/helper.d.ts +6 -0
- package/lib/cjs/components/TimeZonePicker/helper.js +59 -0
- package/lib/cjs/components/TimeZonePicker/helper.test.js +79 -0
- package/lib/cjs/types/listBox.d.ts +1 -1
- package/lib/components/ComboBoxField/ComboBoxField.js +7 -3
- package/lib/components/ListBox/ListBox.js +15 -0
- package/lib/components/ListBox/ListBox.test.js +14 -1
- package/lib/components/TimeZonePicker/TimeZonePicker.js +122 -146
- package/lib/components/TimeZonePicker/TimeZonePicker.test.js +29 -2
- package/lib/components/TimeZonePicker/helper.js +51 -0
- package/lib/components/TimeZonePicker/helper.test.js +76 -0
- package/lib/tsconfig.lib.tsbuildinfo +1 -1
- package/package.json +20 -22
|
@@ -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
|
|
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
|
|
28
|
-
var
|
|
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 ?
|
|
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
|
|
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
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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 =
|
|
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)(
|
|
66
|
+
var _useState3 = (0, _react.useState)(''),
|
|
83
67
|
_useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
|
|
84
|
-
|
|
85
|
-
|
|
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.
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
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
|
-
|
|
124
|
-
|
|
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
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
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
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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
|
|
173
|
-
if (
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
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
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
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
|
-
|
|
202
|
-
|
|
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
|
|
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,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
|
+
});
|