@bigbinary/neeto-molecules 1.0.1 → 1.0.3
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/README.md +1 -0
- package/dist/DateRangeFilter.cjs.js +29 -10
- package/dist/DateRangeFilter.js +29 -10
- package/dist/EmailPreview.cjs.js +1 -1
- package/dist/EmailPreview.js +1 -1
- package/dist/ErrorPage.cjs.js +56 -2
- package/dist/ErrorPage.js +58 -4
- package/dist/KeyboardShortcuts.cjs.js +87 -74
- package/dist/KeyboardShortcuts.js +88 -75
- package/dist/Schedule.cjs.js +6 -5
- package/dist/Schedule.js +8 -7
- package/dist/ShareViaEmail.cjs.js +35134 -0
- package/dist/ShareViaEmail.js +35106 -0
- package/package.json +7 -6
- package/src/translations/en.json +37 -1
- package/types/KeyboardShortcuts.d.ts +5 -3
- package/types/ShareViaEmail.d.ts +18 -0
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@ A package of reusable molecular components for neeto products.
|
|
|
19
19
|
- [NeetoWidget](./docs/components.md#neetowidget)
|
|
20
20
|
- [PublishBlock](./docs/components.md#publishblock)
|
|
21
21
|
- [Schedule](./docs/components.md#schedule)
|
|
22
|
+
- [ShareViaEmail](./docs/components.md#shareviaemail)
|
|
22
23
|
- [ShareViaLink](./docs/components.md#sharevialink)
|
|
23
24
|
- [Sidebar](./docs/components.md#sidebar)
|
|
24
25
|
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
var React = require('react');
|
|
4
4
|
var initializers = require('@bigbinary/neeto-commons-frontend/initializers');
|
|
5
5
|
var neetoui = require('@bigbinary/neetoui');
|
|
6
|
-
var reactI18next = require('react-i18next');
|
|
7
6
|
var dayjs = require('dayjs');
|
|
7
|
+
var ramda = require('ramda');
|
|
8
|
+
var reactI18next = require('react-i18next');
|
|
8
9
|
var i18next = require('i18next');
|
|
9
10
|
|
|
10
11
|
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
@@ -79,6 +80,10 @@ var defaultTimePeriodOptions = function defaultTimePeriodOptions() {
|
|
|
79
80
|
var thisQuarterEnd = dayjs__default["default"]().endOf("quarter");
|
|
80
81
|
var lastQuarterStart = dayjs__default["default"]().subtract(1, "quarter").startOf("quarter");
|
|
81
82
|
var lastQuarterEnd = dayjs__default["default"]().subtract(1, "quarter").endOf("quarter");
|
|
83
|
+
var startOfLastYear = dayjs__default["default"]().subtract(1, "year").startOf("year");
|
|
84
|
+
var endOfLastYear = dayjs__default["default"]().subtract(1, "year").endOf("year");
|
|
85
|
+
var startOfYear = dayjs__default["default"]().startOf("year");
|
|
86
|
+
var endOfYear = dayjs__default["default"]().endOf("year");
|
|
82
87
|
var startOf24Hours = dayjs__default["default"]().subtract(24, "hour");
|
|
83
88
|
var now = dayjs__default["default"]();
|
|
84
89
|
var startOfLast7Days = dayjs__default["default"]().subtract(7, "day");
|
|
@@ -141,6 +146,20 @@ var defaultTimePeriodOptions = function defaultTimePeriodOptions() {
|
|
|
141
146
|
endDate: lastMonthEnd,
|
|
142
147
|
rangeType: "month"
|
|
143
148
|
}
|
|
149
|
+
}, {
|
|
150
|
+
label: i18next.t("neetoMolecules.dateRangeFilter.timePeriodOptions.thisYear"),
|
|
151
|
+
value: {
|
|
152
|
+
startDate: startOfYear,
|
|
153
|
+
endDate: endOfYear,
|
|
154
|
+
rangeType: "year"
|
|
155
|
+
}
|
|
156
|
+
}, {
|
|
157
|
+
label: i18next.t("neetoMolecules.dateRangeFilter.timePeriodOptions.lastYear"),
|
|
158
|
+
value: {
|
|
159
|
+
startDate: startOfLastYear,
|
|
160
|
+
endDate: endOfLastYear,
|
|
161
|
+
rangeType: "year"
|
|
162
|
+
}
|
|
144
163
|
}, {
|
|
145
164
|
label: i18next.t("neetoMolecules.dateRangeFilter.timePeriodOptions.thisQuarter"),
|
|
146
165
|
value: {
|
|
@@ -162,7 +181,7 @@ var defaultTimePeriodOptions = function defaultTimePeriodOptions() {
|
|
|
162
181
|
};
|
|
163
182
|
|
|
164
183
|
var DateRangeFilter = function DateRangeFilter(_ref) {
|
|
165
|
-
var _globalProps$user;
|
|
184
|
+
var _timePeriod$value, _timePeriod$value2, _globalProps$user;
|
|
166
185
|
var timePeriodOptions = _ref.timePeriodOptions,
|
|
167
186
|
timePeriod = _ref.timePeriod,
|
|
168
187
|
setTimePeriod = _ref.setTimePeriod;
|
|
@@ -170,6 +189,8 @@ var DateRangeFilter = function DateRangeFilter(_ref) {
|
|
|
170
189
|
t = _useTranslation.t;
|
|
171
190
|
var customDurationLabel = t("neetoMolecules.dateRangeFilter.timePeriodOptions.customDuration");
|
|
172
191
|
var isCustom = timePeriod.label === customDurationLabel;
|
|
192
|
+
var startDate = (_timePeriod$value = timePeriod.value) === null || _timePeriod$value === void 0 ? void 0 : _timePeriod$value.startDate;
|
|
193
|
+
var endDate = (_timePeriod$value2 = timePeriod.value) === null || _timePeriod$value2 === void 0 ? void 0 : _timePeriod$value2.endDate;
|
|
173
194
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
174
195
|
className: "flex pr-2",
|
|
175
196
|
"data-testid": "date-range-filter"
|
|
@@ -177,10 +198,7 @@ var DateRangeFilter = function DateRangeFilter(_ref) {
|
|
|
177
198
|
className: "w-40"
|
|
178
199
|
}, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, {
|
|
179
200
|
required: true,
|
|
180
|
-
getOptionValue:
|
|
181
|
-
var label = _ref2.label;
|
|
182
|
-
return label;
|
|
183
|
-
},
|
|
201
|
+
getOptionValue: ramda.prop("label"),
|
|
184
202
|
options: timePeriodOptions || defaultTimePeriodOptions(),
|
|
185
203
|
value: timePeriod,
|
|
186
204
|
onChange: function onChange(option) {
|
|
@@ -193,12 +211,13 @@ var DateRangeFilter = function DateRangeFilter(_ref) {
|
|
|
193
211
|
autoFocus: true,
|
|
194
212
|
className: "ml-3 w-full",
|
|
195
213
|
dateFormat: initializers.globalProps === null || initializers.globalProps === void 0 ? void 0 : (_globalProps$user = initializers.globalProps.user) === null || _globalProps$user === void 0 ? void 0 : _globalProps$user.dateFormat,
|
|
214
|
+
defaultValue: [dayjs__default["default"](startDate), dayjs__default["default"](endDate)],
|
|
196
215
|
picker: "date",
|
|
197
216
|
type: "range",
|
|
198
|
-
onChange: function onChange(_,
|
|
199
|
-
var
|
|
200
|
-
startDate =
|
|
201
|
-
endDate =
|
|
217
|
+
onChange: function onChange(_, _ref2) {
|
|
218
|
+
var _ref3 = _slicedToArray(_ref2, 2),
|
|
219
|
+
startDate = _ref3[0],
|
|
220
|
+
endDate = _ref3[1];
|
|
202
221
|
setTimePeriod({
|
|
203
222
|
label: customDurationLabel,
|
|
204
223
|
value: {
|
package/dist/DateRangeFilter.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { globalProps } from '@bigbinary/neeto-commons-frontend/initializers';
|
|
3
3
|
import { Select, DatePicker } from '@bigbinary/neetoui';
|
|
4
|
-
import { useTranslation } from 'react-i18next';
|
|
5
4
|
import dayjs from 'dayjs';
|
|
5
|
+
import { prop } from 'ramda';
|
|
6
|
+
import { useTranslation } from 'react-i18next';
|
|
6
7
|
import { t } from 'i18next';
|
|
7
8
|
|
|
8
9
|
function _arrayWithHoles(arr) {
|
|
@@ -72,6 +73,10 @@ var defaultTimePeriodOptions = function defaultTimePeriodOptions() {
|
|
|
72
73
|
var thisQuarterEnd = dayjs().endOf("quarter");
|
|
73
74
|
var lastQuarterStart = dayjs().subtract(1, "quarter").startOf("quarter");
|
|
74
75
|
var lastQuarterEnd = dayjs().subtract(1, "quarter").endOf("quarter");
|
|
76
|
+
var startOfLastYear = dayjs().subtract(1, "year").startOf("year");
|
|
77
|
+
var endOfLastYear = dayjs().subtract(1, "year").endOf("year");
|
|
78
|
+
var startOfYear = dayjs().startOf("year");
|
|
79
|
+
var endOfYear = dayjs().endOf("year");
|
|
75
80
|
var startOf24Hours = dayjs().subtract(24, "hour");
|
|
76
81
|
var now = dayjs();
|
|
77
82
|
var startOfLast7Days = dayjs().subtract(7, "day");
|
|
@@ -134,6 +139,20 @@ var defaultTimePeriodOptions = function defaultTimePeriodOptions() {
|
|
|
134
139
|
endDate: lastMonthEnd,
|
|
135
140
|
rangeType: "month"
|
|
136
141
|
}
|
|
142
|
+
}, {
|
|
143
|
+
label: t("neetoMolecules.dateRangeFilter.timePeriodOptions.thisYear"),
|
|
144
|
+
value: {
|
|
145
|
+
startDate: startOfYear,
|
|
146
|
+
endDate: endOfYear,
|
|
147
|
+
rangeType: "year"
|
|
148
|
+
}
|
|
149
|
+
}, {
|
|
150
|
+
label: t("neetoMolecules.dateRangeFilter.timePeriodOptions.lastYear"),
|
|
151
|
+
value: {
|
|
152
|
+
startDate: startOfLastYear,
|
|
153
|
+
endDate: endOfLastYear,
|
|
154
|
+
rangeType: "year"
|
|
155
|
+
}
|
|
137
156
|
}, {
|
|
138
157
|
label: t("neetoMolecules.dateRangeFilter.timePeriodOptions.thisQuarter"),
|
|
139
158
|
value: {
|
|
@@ -155,7 +174,7 @@ var defaultTimePeriodOptions = function defaultTimePeriodOptions() {
|
|
|
155
174
|
};
|
|
156
175
|
|
|
157
176
|
var DateRangeFilter = function DateRangeFilter(_ref) {
|
|
158
|
-
var _globalProps$user;
|
|
177
|
+
var _timePeriod$value, _timePeriod$value2, _globalProps$user;
|
|
159
178
|
var timePeriodOptions = _ref.timePeriodOptions,
|
|
160
179
|
timePeriod = _ref.timePeriod,
|
|
161
180
|
setTimePeriod = _ref.setTimePeriod;
|
|
@@ -163,6 +182,8 @@ var DateRangeFilter = function DateRangeFilter(_ref) {
|
|
|
163
182
|
t = _useTranslation.t;
|
|
164
183
|
var customDurationLabel = t("neetoMolecules.dateRangeFilter.timePeriodOptions.customDuration");
|
|
165
184
|
var isCustom = timePeriod.label === customDurationLabel;
|
|
185
|
+
var startDate = (_timePeriod$value = timePeriod.value) === null || _timePeriod$value === void 0 ? void 0 : _timePeriod$value.startDate;
|
|
186
|
+
var endDate = (_timePeriod$value2 = timePeriod.value) === null || _timePeriod$value2 === void 0 ? void 0 : _timePeriod$value2.endDate;
|
|
166
187
|
return /*#__PURE__*/React.createElement("div", {
|
|
167
188
|
className: "flex pr-2",
|
|
168
189
|
"data-testid": "date-range-filter"
|
|
@@ -170,10 +191,7 @@ var DateRangeFilter = function DateRangeFilter(_ref) {
|
|
|
170
191
|
className: "w-40"
|
|
171
192
|
}, /*#__PURE__*/React.createElement(Select, {
|
|
172
193
|
required: true,
|
|
173
|
-
getOptionValue:
|
|
174
|
-
var label = _ref2.label;
|
|
175
|
-
return label;
|
|
176
|
-
},
|
|
194
|
+
getOptionValue: prop("label"),
|
|
177
195
|
options: timePeriodOptions || defaultTimePeriodOptions(),
|
|
178
196
|
value: timePeriod,
|
|
179
197
|
onChange: function onChange(option) {
|
|
@@ -186,12 +204,13 @@ var DateRangeFilter = function DateRangeFilter(_ref) {
|
|
|
186
204
|
autoFocus: true,
|
|
187
205
|
className: "ml-3 w-full",
|
|
188
206
|
dateFormat: globalProps === null || globalProps === void 0 ? void 0 : (_globalProps$user = globalProps.user) === null || _globalProps$user === void 0 ? void 0 : _globalProps$user.dateFormat,
|
|
207
|
+
defaultValue: [dayjs(startDate), dayjs(endDate)],
|
|
189
208
|
picker: "date",
|
|
190
209
|
type: "range",
|
|
191
|
-
onChange: function onChange(_,
|
|
192
|
-
var
|
|
193
|
-
startDate =
|
|
194
|
-
endDate =
|
|
210
|
+
onChange: function onChange(_, _ref2) {
|
|
211
|
+
var _ref3 = _slicedToArray(_ref2, 2),
|
|
212
|
+
startDate = _ref3[0],
|
|
213
|
+
endDate = _ref3[1];
|
|
195
214
|
setTimePeriod({
|
|
196
215
|
label: customDurationLabel,
|
|
197
216
|
value: {
|
package/dist/EmailPreview.cjs.js
CHANGED
|
@@ -32372,7 +32372,7 @@ var EmailPreview = function EmailPreview(_ref) {
|
|
|
32372
32372
|
className: "neeto-ui-text-gray-800",
|
|
32373
32373
|
lineHeight: "normal",
|
|
32374
32374
|
style: "body2"
|
|
32375
|
-
}, subject || /*#__PURE__*/y__default["default"].createElement("
|
|
32375
|
+
}, subject || /*#__PURE__*/y__default["default"].createElement("span", {
|
|
32376
32376
|
className: "neeto-ui-bg-gray-300 h-2 w-40 rounded-full"
|
|
32377
32377
|
})))), /*#__PURE__*/y__default["default"].createElement("div", {
|
|
32378
32378
|
className: "neeto-ui-text-gray-800 flex flex-1 flex-col justify-between space-y-6 p-6 pr-10 text-base leading-relaxed"
|
package/dist/EmailPreview.js
CHANGED
|
@@ -32346,7 +32346,7 @@ var EmailPreview = function EmailPreview(_ref) {
|
|
|
32346
32346
|
className: "neeto-ui-text-gray-800",
|
|
32347
32347
|
lineHeight: "normal",
|
|
32348
32348
|
style: "body2"
|
|
32349
|
-
}, subject || /*#__PURE__*/y__default.createElement("
|
|
32349
|
+
}, subject || /*#__PURE__*/y__default.createElement("span", {
|
|
32350
32350
|
className: "neeto-ui-bg-gray-300 h-2 w-40 rounded-full"
|
|
32351
32351
|
})))), /*#__PURE__*/y__default.createElement("div", {
|
|
32352
32352
|
className: "neeto-ui-text-gray-800 flex flex-1 flex-col justify-between space-y-6 p-6 pr-10 text-base leading-relaxed"
|
package/dist/ErrorPage.cjs.js
CHANGED
|
@@ -30,6 +30,45 @@ function _interopNamespace(e) {
|
|
|
30
30
|
var React__namespace = /*#__PURE__*/_interopNamespace(React);
|
|
31
31
|
var React__default = /*#__PURE__*/_interopDefaultLegacy(React);
|
|
32
32
|
|
|
33
|
+
function shallow(objA, objB) {
|
|
34
|
+
if (Object.is(objA, objB)) {
|
|
35
|
+
return true;
|
|
36
|
+
}
|
|
37
|
+
if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
if (objA instanceof Map && objB instanceof Map) {
|
|
41
|
+
if (objA.size !== objB.size)
|
|
42
|
+
return false;
|
|
43
|
+
for (const [key, value] of objA) {
|
|
44
|
+
if (!Object.is(value, objB.get(key))) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
if (objA instanceof Set && objB instanceof Set) {
|
|
51
|
+
if (objA.size !== objB.size)
|
|
52
|
+
return false;
|
|
53
|
+
for (const value of objA) {
|
|
54
|
+
if (!objB.has(value)) {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
const keysA = Object.keys(objA);
|
|
61
|
+
if (keysA.length !== Object.keys(objB).length) {
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
for (let i = 0; i < keysA.length; i++) {
|
|
65
|
+
if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return true;
|
|
70
|
+
}
|
|
71
|
+
|
|
33
72
|
var _path$2, _path2$2;
|
|
34
73
|
function _extends$2() { _extends$2 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$2.apply(this, arguments); }
|
|
35
74
|
var SvgInternalServerError = function SvgInternalServerError(props) {
|
|
@@ -103,14 +142,29 @@ var ErrorPage = function ErrorPage(_ref) {
|
|
|
103
142
|
var _ref$homeUrl = _ref.homeUrl,
|
|
104
143
|
homeUrl = _ref$homeUrl === void 0 ? "/" : _ref$homeUrl,
|
|
105
144
|
status = _ref.status;
|
|
106
|
-
var storeStatusCode = reactUtils.useErrorDisplayStore(ramda.prop("statusCode"));
|
|
107
|
-
status = status || storeStatusCode;
|
|
108
145
|
var _useTranslation = reactI18next.useTranslation(),
|
|
109
146
|
t = _useTranslation.t;
|
|
147
|
+
var _useErrorDisplayStore = reactUtils.useErrorDisplayStore(ramda.pick(["statusCode", "showErrorPage"]), shallow),
|
|
148
|
+
storeStatusCode = _useErrorDisplayStore.statusCode,
|
|
149
|
+
showErrorPage = _useErrorDisplayStore.showErrorPage;
|
|
150
|
+
status = status || storeStatusCode;
|
|
110
151
|
var _ref2 = ERRORS[status] || ERRORS[404],
|
|
111
152
|
Image = _ref2.Image,
|
|
112
153
|
errorKey = _ref2.errorKey,
|
|
113
154
|
titleKey = _ref2.titleKey;
|
|
155
|
+
React.useEffect(function () {
|
|
156
|
+
var onBackButtonPress = function onBackButtonPress() {
|
|
157
|
+
if (showErrorPage) {
|
|
158
|
+
reactUtils.useErrorDisplayStore.setState({
|
|
159
|
+
showErrorPage: false
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
window.addEventListener("popstate", onBackButtonPress);
|
|
164
|
+
return function () {
|
|
165
|
+
window.removeEventListener("popstate", onBackButtonPress);
|
|
166
|
+
};
|
|
167
|
+
}, []);
|
|
114
168
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
115
169
|
className: "flex min-h-screen w-full flex-col items-center justify-center",
|
|
116
170
|
"data-cy": "error-page-container"
|
package/dist/ErrorPage.js
CHANGED
|
@@ -1,11 +1,50 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import React__default from 'react';
|
|
2
|
+
import React__default, { useEffect } from 'react';
|
|
3
3
|
import { useErrorDisplayStore } from '@bigbinary/neeto-commons-frontend/react-utils';
|
|
4
4
|
import { Typography, Button } from '@bigbinary/neetoui';
|
|
5
|
-
import {
|
|
5
|
+
import { pick } from 'ramda';
|
|
6
6
|
import { Helmet } from 'react-helmet';
|
|
7
7
|
import { useTranslation, Trans } from 'react-i18next';
|
|
8
8
|
|
|
9
|
+
function shallow(objA, objB) {
|
|
10
|
+
if (Object.is(objA, objB)) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
|
|
14
|
+
return false;
|
|
15
|
+
}
|
|
16
|
+
if (objA instanceof Map && objB instanceof Map) {
|
|
17
|
+
if (objA.size !== objB.size)
|
|
18
|
+
return false;
|
|
19
|
+
for (const [key, value] of objA) {
|
|
20
|
+
if (!Object.is(value, objB.get(key))) {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
if (objA instanceof Set && objB instanceof Set) {
|
|
27
|
+
if (objA.size !== objB.size)
|
|
28
|
+
return false;
|
|
29
|
+
for (const value of objA) {
|
|
30
|
+
if (!objB.has(value)) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
const keysA = Object.keys(objA);
|
|
37
|
+
if (keysA.length !== Object.keys(objB).length) {
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
for (let i = 0; i < keysA.length; i++) {
|
|
41
|
+
if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
|
|
9
48
|
var _path$2, _path2$2;
|
|
10
49
|
function _extends$2() { _extends$2 = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends$2.apply(this, arguments); }
|
|
11
50
|
var SvgInternalServerError = function SvgInternalServerError(props) {
|
|
@@ -79,14 +118,29 @@ var ErrorPage = function ErrorPage(_ref) {
|
|
|
79
118
|
var _ref$homeUrl = _ref.homeUrl,
|
|
80
119
|
homeUrl = _ref$homeUrl === void 0 ? "/" : _ref$homeUrl,
|
|
81
120
|
status = _ref.status;
|
|
82
|
-
var storeStatusCode = useErrorDisplayStore(prop("statusCode"));
|
|
83
|
-
status = status || storeStatusCode;
|
|
84
121
|
var _useTranslation = useTranslation(),
|
|
85
122
|
t = _useTranslation.t;
|
|
123
|
+
var _useErrorDisplayStore = useErrorDisplayStore(pick(["statusCode", "showErrorPage"]), shallow),
|
|
124
|
+
storeStatusCode = _useErrorDisplayStore.statusCode,
|
|
125
|
+
showErrorPage = _useErrorDisplayStore.showErrorPage;
|
|
126
|
+
status = status || storeStatusCode;
|
|
86
127
|
var _ref2 = ERRORS[status] || ERRORS[404],
|
|
87
128
|
Image = _ref2.Image,
|
|
88
129
|
errorKey = _ref2.errorKey,
|
|
89
130
|
titleKey = _ref2.titleKey;
|
|
131
|
+
useEffect(function () {
|
|
132
|
+
var onBackButtonPress = function onBackButtonPress() {
|
|
133
|
+
if (showErrorPage) {
|
|
134
|
+
useErrorDisplayStore.setState({
|
|
135
|
+
showErrorPage: false
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
window.addEventListener("popstate", onBackButtonPress);
|
|
140
|
+
return function () {
|
|
141
|
+
window.removeEventListener("popstate", onBackButtonPress);
|
|
142
|
+
};
|
|
143
|
+
}, []);
|
|
90
144
|
return /*#__PURE__*/React__default.createElement("div", {
|
|
91
145
|
className: "flex min-h-screen w-full flex-col items-center justify-center",
|
|
92
146
|
"data-cy": "error-page-container"
|
|
@@ -750,30 +750,23 @@ var classnames$1 = {exports: {}};
|
|
|
750
750
|
|
|
751
751
|
var classnames = classnames$1.exports;
|
|
752
752
|
|
|
753
|
-
var
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
|
|
769
|
-
key: idx
|
|
770
|
-
}, /*#__PURE__*/React__default["default"].createElement(neetoui.Kbd, {
|
|
771
|
-
keyName: keyName
|
|
772
|
-
}), isSequentialHotkey && idx + 1 !== sequences.length && /*#__PURE__*/React__default["default"].createElement(neetoui.Kbd, {
|
|
773
|
-
keyName: "then"
|
|
774
|
-
}));
|
|
775
|
-
});
|
|
753
|
+
var KEY_SHORTFORM_MAP = {
|
|
754
|
+
command: "cmd",
|
|
755
|
+
escape: "esc",
|
|
756
|
+
control: "ctrl",
|
|
757
|
+
option: "opt"
|
|
758
|
+
};
|
|
759
|
+
var MAC_TO_WINDOWS_KEYS_MAP = {
|
|
760
|
+
option: "alt",
|
|
761
|
+
command: "ctrl",
|
|
762
|
+
"return": "enter",
|
|
763
|
+
"delete": "backspace"
|
|
764
|
+
};
|
|
765
|
+
var OS = {
|
|
766
|
+
mac: "OS X",
|
|
767
|
+
windows: "Windows"
|
|
776
768
|
};
|
|
769
|
+
var FULL_SHORTCUTS_LINK_PROP_NAME = "fullShortcutsLink";
|
|
777
770
|
|
|
778
771
|
function _typeof(obj) {
|
|
779
772
|
"@babel/helpers - typeof";
|
|
@@ -2062,46 +2055,34 @@ var platform$1 = {exports: {}};
|
|
|
2062
2055
|
|
|
2063
2056
|
var platform = platform$1.exports;
|
|
2064
2057
|
|
|
2065
|
-
var
|
|
2066
|
-
|
|
2067
|
-
escape: "esc",
|
|
2068
|
-
control: "ctrl",
|
|
2069
|
-
option: "opt"
|
|
2070
|
-
};
|
|
2071
|
-
var MAC_TO_WINDOWS_KEYS_MAP = {
|
|
2072
|
-
option: "alt",
|
|
2073
|
-
command: "ctrl",
|
|
2074
|
-
"return": "enter",
|
|
2075
|
-
"delete": "backspace"
|
|
2076
|
-
};
|
|
2077
|
-
var OS = {
|
|
2078
|
-
mac: "OS X",
|
|
2079
|
-
windows: "Windows"
|
|
2080
|
-
};
|
|
2081
|
-
|
|
2082
|
-
var shortenHotKey = function shortenHotKey(hotkey) {
|
|
2083
|
-
var result = hotkey;
|
|
2084
|
-
Object.entries(KEY_SHORTFORM_MAP).forEach(function (_ref) {
|
|
2058
|
+
var convertHotKeyToWindows = function convertHotKeyToWindows(hotkey) {
|
|
2059
|
+
ramda.toPairs(MAC_TO_WINDOWS_KEYS_MAP).forEach(function (_ref) {
|
|
2085
2060
|
var _ref2 = _slicedToArray(_ref, 2),
|
|
2086
|
-
|
|
2087
|
-
|
|
2088
|
-
|
|
2061
|
+
macKey = _ref2[0],
|
|
2062
|
+
windowsKey = _ref2[1];
|
|
2063
|
+
hotkey = hotkey.replaceAll(macKey, windowsKey);
|
|
2089
2064
|
});
|
|
2090
|
-
return
|
|
2065
|
+
return hotkey;
|
|
2066
|
+
};
|
|
2067
|
+
var replaceDeleteKeyWithBackspace = function replaceDeleteKeyWithBackspace(hotkey) {
|
|
2068
|
+
return hotkey.replaceAll("delete", "backspace");
|
|
2091
2069
|
};
|
|
2092
2070
|
var convertHotkeyToUsersPlatform = function convertHotkeyToUsersPlatform(hotkey) {
|
|
2093
2071
|
var _platformInfo$os, _platformInfo$os$fami;
|
|
2094
2072
|
var platformInfo = platform.parse(navigator.userAgent);
|
|
2095
2073
|
var isOSX = (_platformInfo$os = platformInfo.os) === null || _platformInfo$os === void 0 ? void 0 : (_platformInfo$os$fami = _platformInfo$os.family) === null || _platformInfo$os$fami === void 0 ? void 0 : _platformInfo$os$fami.includes(OS.mac);
|
|
2096
|
-
if (isOSX) return hotkey;
|
|
2097
|
-
|
|
2098
|
-
|
|
2074
|
+
if (isOSX) return replaceDeleteKeyWithBackspace(hotkey);
|
|
2075
|
+
return convertHotKeyToWindows(hotkey);
|
|
2076
|
+
};
|
|
2077
|
+
var shortenHotKey = function shortenHotKey(hotkey) {
|
|
2078
|
+
var result = hotkey;
|
|
2079
|
+
Object.entries(KEY_SHORTFORM_MAP).forEach(function (_ref3) {
|
|
2099
2080
|
var _ref4 = _slicedToArray(_ref3, 2),
|
|
2100
|
-
|
|
2101
|
-
|
|
2102
|
-
|
|
2081
|
+
longform = _ref4[0],
|
|
2082
|
+
shortform = _ref4[1];
|
|
2083
|
+
result = result.replaceAll(longform, shortform);
|
|
2103
2084
|
});
|
|
2104
|
-
return
|
|
2085
|
+
return result;
|
|
2105
2086
|
};
|
|
2106
2087
|
var getGlobalShortcuts = function getGlobalShortcuts() {
|
|
2107
2088
|
return _defineProperty({}, i18next__default["default"].t("neetoMolecules.keyboardShortcuts.global.categoryName"), {
|
|
@@ -2116,35 +2097,71 @@ var getGlobalShortcuts = function getGlobalShortcuts() {
|
|
|
2116
2097
|
});
|
|
2117
2098
|
};
|
|
2118
2099
|
|
|
2100
|
+
var HotKey = function HotKey(_ref) {
|
|
2101
|
+
var description = _ref.description,
|
|
2102
|
+
sequence = _ref.sequence;
|
|
2103
|
+
var hotkey = shortenHotKey(convertHotkeyToUsersPlatform(sequence));
|
|
2104
|
+
var isSequentialHotkey = hotkey.includes(" ");
|
|
2105
|
+
var isSimultaneousHotkey = hotkey.includes("+");
|
|
2106
|
+
var isSingleKeyHotkey = !isSequentialHotkey && !isSimultaneousHotkey;
|
|
2107
|
+
var sequences = [];
|
|
2108
|
+
if (isSingleKeyHotkey) {
|
|
2109
|
+
sequences = [hotkey];
|
|
2110
|
+
} else if (isSequentialHotkey) {
|
|
2111
|
+
sequences = hotkey.split(" ");
|
|
2112
|
+
} else if (isSimultaneousHotkey) {
|
|
2113
|
+
sequences = hotkey.split("+");
|
|
2114
|
+
}
|
|
2115
|
+
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
2116
|
+
className: "my-3 px-4"
|
|
2117
|
+
}, /*#__PURE__*/React__default["default"].createElement("div", {
|
|
2118
|
+
className: "flex items-center justify-between gap-3",
|
|
2119
|
+
"data-testid": "hotkey-item"
|
|
2120
|
+
}, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
|
|
2121
|
+
className: "neeto-ui-text-gray-800",
|
|
2122
|
+
lineHeight: "normal",
|
|
2123
|
+
style: "body2"
|
|
2124
|
+
}, description), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
2125
|
+
className: "flex items-center gap-1"
|
|
2126
|
+
}, sequences.map(function (keyName, idx) {
|
|
2127
|
+
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
|
|
2128
|
+
key: idx
|
|
2129
|
+
}, /*#__PURE__*/React__default["default"].createElement(neetoui.Kbd, {
|
|
2130
|
+
keyName: keyName
|
|
2131
|
+
}), isSequentialHotkey && idx + 1 !== sequences.length && /*#__PURE__*/React__default["default"].createElement(neetoui.Kbd, {
|
|
2132
|
+
keyName: "then"
|
|
2133
|
+
}));
|
|
2134
|
+
}))));
|
|
2135
|
+
};
|
|
2136
|
+
|
|
2119
2137
|
var HotKeyList = function HotKeyList(_ref) {
|
|
2120
2138
|
var hotkeys = _ref.hotkeys;
|
|
2139
|
+
var _useTranslation = reactI18next.useTranslation(),
|
|
2140
|
+
t = _useTranslation.t;
|
|
2121
2141
|
return Object.keys(hotkeys).map(function (categoryName) {
|
|
2142
|
+
var categoryValues = hotkeys[categoryName];
|
|
2143
|
+
var fullShortcutsLink = categoryValues[FULL_SHORTCUTS_LINK_PROP_NAME];
|
|
2122
2144
|
return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
|
|
2123
2145
|
key: categoryName
|
|
2124
2146
|
}, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
|
|
2125
2147
|
className: "neeto-ui-text-gray-800 mt-4 px-4 text-xs font-bold",
|
|
2126
2148
|
lineHeight: "normal",
|
|
2127
2149
|
style: "body2"
|
|
2128
|
-
}, categoryName), Object.entries(
|
|
2150
|
+
}, categoryName), Object.entries(categoryValues).map(function (_ref2) {
|
|
2129
2151
|
var _ref3 = _slicedToArray(_ref2, 2),
|
|
2130
2152
|
_ref3$ = _ref3[1],
|
|
2131
2153
|
sequence = _ref3$.sequence,
|
|
2132
2154
|
description = _ref3$.description;
|
|
2133
|
-
return /*#__PURE__*/React__default["default"].createElement(
|
|
2134
|
-
|
|
2135
|
-
key: sequence
|
|
2136
|
-
|
|
2137
|
-
|
|
2138
|
-
|
|
2139
|
-
|
|
2140
|
-
|
|
2141
|
-
|
|
2142
|
-
|
|
2143
|
-
}, description), /*#__PURE__*/React__default["default"].createElement("div", {
|
|
2144
|
-
className: "flex items-center gap-1"
|
|
2145
|
-
}, /*#__PURE__*/React__default["default"].createElement(DisplayHotKey, {
|
|
2146
|
-
hotkey: shortenHotKey(convertHotkeyToUsersPlatform(sequence))
|
|
2147
|
-
}))));
|
|
2155
|
+
return sequence && /*#__PURE__*/React__default["default"].createElement(HotKey, {
|
|
2156
|
+
description: description,
|
|
2157
|
+
key: sequence,
|
|
2158
|
+
sequence: sequence
|
|
2159
|
+
});
|
|
2160
|
+
}), fullShortcutsLink && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
|
|
2161
|
+
className: "pl-4 mb-3",
|
|
2162
|
+
href: fullShortcutsLink,
|
|
2163
|
+
style: "link",
|
|
2164
|
+
label: t("neetoMolecules.keyboardShortcuts.viewFullListOfShortcuts")
|
|
2148
2165
|
}));
|
|
2149
2166
|
});
|
|
2150
2167
|
};
|
|
@@ -2170,13 +2187,9 @@ var KeyboardShortcutsPane = function KeyboardShortcutsPane(_ref) {
|
|
|
2170
2187
|
return setIsOpen(function (prevIsOpen) {
|
|
2171
2188
|
return !prevIsOpen;
|
|
2172
2189
|
});
|
|
2173
|
-
}, {
|
|
2174
|
-
mode: "global"
|
|
2175
2190
|
});
|
|
2176
2191
|
reactUtils.useHotKeys(shortcuts.close.sequence, function () {
|
|
2177
2192
|
return setIsOpen(false);
|
|
2178
|
-
}, {
|
|
2179
|
-
mode: "global"
|
|
2180
2193
|
});
|
|
2181
2194
|
return /*#__PURE__*/React__default["default"].createElement("div", {
|
|
2182
2195
|
className: classnames("neeto-commons-keyboard-shortcuts-pane neeto-ui-border-gray-300 transition-width ml-auto min-h-screen border-l bg-white duration-300 ease-in-out overflow-y-scroll", {
|