@bigbinary/neeto-commons-frontend 2.0.47 → 2.0.49

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,11 +1,11 @@
1
1
  declare namespace Cypress {
2
2
  interface Chainable {
3
- clearAndType(selector: any, text: any): Void;
4
- clearAndTypeFast(selector: any, text: any): Void;
5
- clearByClickAndTypeFast(selector: any, text: any): Void;
6
- typeFast(selector: any, text: any): Void;
7
- typeAndEnter(selector: any, text: any): Void;
8
- verifyToastMessage(message: any): Void;
3
+ clearAndType(selector: string, text: string): Void;
4
+ clearAndTypeFast(selector: string, text: string): Void;
5
+ clearByClickAndTypeFast(selector: string, text: string): Void;
6
+ typeFast(selector: string, text: string): Void;
7
+ typeAndEnter(selector: string, text: string): Void;
8
+ verifyToastMessage(message: string): Void;
9
9
  continueOnAlert(
10
10
  alias:
11
11
  | string
@@ -53,5 +53,18 @@ declare namespace Cypress {
53
53
  globalState(key: string): Void;
54
54
  ifExist(selector: string, callback: Function): Void;
55
55
  ifNotExist(selector: string, callback: Function): Void;
56
+ dragAndDrop(props: {
57
+ subject: string;
58
+ target: string;
59
+ dragIndex: number;
60
+ dropIndex: number
61
+ });
62
+ verifyPlaceholder(textInputSelector: string, value: string): Void;
63
+ enableOrDisableSwitch(switchButton: string, value: string): Void;
64
+ interceptNonVersionedApi(props: {
65
+ url: string;
66
+ alias: string;
67
+ times?: number; // maximum number of times to match
68
+ }): Cypress.Chainable<Cypress.InterceptionOptions>;
56
69
  }
57
70
  }
@@ -172,7 +172,29 @@ var commonSelectors = {
172
172
  toastCloseButton: ".neeto-ui-toastr__close-button",
173
173
  windowAlert: "#alert-box",
174
174
  body: "body",
175
- toastIcon: ".Toastify__toast-icon"
175
+ toastIcon: ".Toastify__toast-icon",
176
+ paneModalCrossIcon: ".neeto-ui-pane__close",
177
+ inputField: dataCy("input-field"),
178
+ alertConfirmationText: dataCy("alert-confirmation-text"),
179
+ alertCancelButton: dataCy("alert-cancel-button"),
180
+ alertModalCrossIcon: ".neeto-ui-modal__close",
181
+ saveChangesButton: dataCy("save-changes-button"),
182
+ cancelButton: dataCy("cancel-button"),
183
+ inputFieldError: dataCy("nui-input-error"),
184
+ selectDropDownError: dataCy("nui-select-error"),
185
+ subTitleHeading: function subTitleHeading(index) {
186
+ return dataCy("menubar-subtitle-heading", ":eq(".concat(index, ")"));
187
+ },
188
+ noDataTitle: dataCy("no-data-title"),
189
+ noDataDescription: dataCy("no-data-description"),
190
+ backDrop: "[data-testid='backdrop']",
191
+ menuBarHeading: dataCy("menubar-heading"),
192
+ tabItem: function tabItem(index) {
193
+ return dataCy("tab-item", ":eq(".concat(index, ")"));
194
+ },
195
+ dropdownWrapper: function dropdownWrapper(index) {
196
+ return dataCy("nui-select-container-wrapper", ":eq(".concat(index, ")"));
197
+ }
176
198
  };
177
199
  var tableSelectors = {
178
200
  nthColumn: function nthColumn(n) {
@@ -181,7 +203,10 @@ var tableSelectors = {
181
203
  tableBody: ".ant-table-body",
182
204
  tableHeader: ".ant-table-thead th",
183
205
  tableRow: ".ant-table-tbody tr",
184
- spinner: ".ant-spin"
206
+ spinner: ".ant-spin",
207
+ nthHeading: function nthHeading(n) {
208
+ return "tr > th:nth-child(".concat(n, ")");
209
+ }
185
210
  };
186
211
  var profileSelectors = {
187
212
  tab: dataCy("profile-section"),
@@ -203,7 +228,15 @@ var commonTexts = {
203
228
  "new": "New",
204
229
  takeAction: "Take action",
205
230
  unblock: "Unblock",
206
- toastIcon: "👍"
231
+ toastIcon: "👍",
232
+ emailRequiredError: "Email is required.",
233
+ emailTakenMessage: "Email is already taken",
234
+ nameTakenMessage: "Name has already been taken",
235
+ all: "All",
236
+ proceed: "Proceed",
237
+ settings: "Settings",
238
+ unsavedChangesAlertTitle: "You have unsaved changes!",
239
+ unsavedChangesAlertMessage: "Are you sure you want to continue? All of your unsaved changes will be lost."
207
240
  };
208
241
 
209
242
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -277,7 +310,9 @@ var initCustomCommands = function initCustomCommands() {
277
310
  Cypress.Commands.add("apiRequest", function (options) {
278
311
  return cy.get("@requestHeaders").then(function (requestHeaders) {
279
312
  return requestHeaders ? cy.request(_objectSpread(_objectSpread({}, options), {}, {
280
- headers: requestHeaders
313
+ headers: _objectSpread(_objectSpread({}, requestHeaders), {}, {
314
+ "accept-encoding": "gzip"
315
+ })
281
316
  })) : cy.log("No request headers found");
282
317
  });
283
318
  });
@@ -333,6 +368,72 @@ var initCustomCommands = function initCustomCommands() {
333
368
  if (!$body.find(selector).length) callback();
334
369
  });
335
370
  });
371
+ Cypress.Commands.add("dragAndDrop", function (_ref2) {
372
+ var subject = _ref2.subject,
373
+ target = _ref2.target,
374
+ _ref2$dragIndex = _ref2.dragIndex,
375
+ dragIndex = _ref2$dragIndex === void 0 ? 0 : _ref2$dragIndex,
376
+ _ref2$dropIndex = _ref2.dropIndex,
377
+ dropIndex = _ref2$dropIndex === void 0 ? 0 : _ref2$dropIndex;
378
+ cy.get(subject).should("be.visible", {
379
+ timeout: 20000
380
+ });
381
+ Cypress.log({
382
+ name: "DRAGNDROP",
383
+ message: "Dragging element ".concat(subject, " to ").concat(target),
384
+ consoleProps: function consoleProps() {
385
+ return {
386
+ subject: subject,
387
+ target: target
388
+ };
389
+ }
390
+ });
391
+ cy.get(target).eq(dropIndex).then(function ($target) {
392
+ var coordsDrop = $target[0].getBoundingClientRect();
393
+ cy.get(subject).eq(dragIndex).then(function (subject) {
394
+ var coordsDrag = subject[0].getBoundingClientRect();
395
+ cy.wrap(subject).trigger("mousedown", {
396
+ button: 0,
397
+ // BUTTON_INDEX
398
+ clientX: coordsDrag.x,
399
+ clientY: coordsDrag.y,
400
+ force: true
401
+ }).trigger("mousemove", {
402
+ button: 0,
403
+ // BUTTON_INDEX
404
+ clientX: coordsDrag.x + 10,
405
+ // SLOPPY_CLICK_THRESHOLD
406
+ clientY: coordsDrag.y,
407
+ force: true
408
+ });
409
+ cy.get("body").trigger("mousemove", {
410
+ button: 0,
411
+ // BUTTON_INDEX
412
+ clientX: coordsDrop.x,
413
+ clientY: coordsDrop.y,
414
+ force: true
415
+ }).trigger("mouseup");
416
+ });
417
+ });
418
+ });
419
+ Cypress.Commands.add("verifyPlaceholder", function (textInputSelector, value) {
420
+ cy.get(textInputSelector).should("have.attr", "placeholder").and("eq", value);
421
+ });
422
+ Cypress.Commands.add("enableOrDisableSwitch", function (switchButton, value) {
423
+ cy.get(switchButton).invoke("click");
424
+ cy.get(switchButton).should("have.prop", "value").and("eq", value);
425
+ });
426
+ Cypress.Commands.add("interceptNonVersionedApi", function (_ref3) {
427
+ var _ref3$url = _ref3.url,
428
+ url = _ref3$url === void 0 ? "*" : _ref3$url,
429
+ alias = _ref3.alias,
430
+ _ref3$times = _ref3.times,
431
+ times = _ref3$times === void 0 ? 1 : _ref3$times;
432
+ cy.intercept({
433
+ url: url,
434
+ times: times
435
+ }).as(alias);
436
+ });
336
437
  };
337
438
 
338
439
  var loginSelectors = {
@@ -15,6 +15,22 @@ type CommonSelectors = {
15
15
  toastCloseButton: string;
16
16
  windowAlert: string;
17
17
  body: string;
18
+ paneModalCrossIcon: string;
19
+ inputField: string;
20
+ alertConfirmationText: string;
21
+ alertCancelButton: string;
22
+ alertModalCrossIcon: string;
23
+ saveChangesButton: string;
24
+ cancelButton: string;
25
+ inputFieldError: string;
26
+ selectDropDownError: string;
27
+ subTitleHeading: (index: string) => string;
28
+ noDataTitle: string;
29
+ noDataDescription: string;
30
+ backDrop: string;
31
+ menuBarHeading: string;
32
+ tabItem: (index: string) => string;
33
+ dropdownWrapper: (index: string) => string;
18
34
  };
19
35
 
20
36
  type MemberSelectors = {
@@ -82,6 +98,15 @@ type CommonTexts = {
82
98
  new: string;
83
99
  takeAction: string;
84
100
  unblock: string;
101
+ emailRequiredError: string;
102
+ emailTakenMessage: string;
103
+ nameTakenMessage: string;
104
+ all: string;
105
+ proceed: string;
106
+ settings: string;
107
+ unsavedChangesAlertTitle: string;
108
+ unsavedChangesAlertMessage: string;
109
+ unsavedChangesAlertTitle: string;
85
110
  };
86
111
 
87
112
  type MemberText = {
package/cypress-utils.js CHANGED
@@ -164,7 +164,29 @@ var commonSelectors = {
164
164
  toastCloseButton: ".neeto-ui-toastr__close-button",
165
165
  windowAlert: "#alert-box",
166
166
  body: "body",
167
- toastIcon: ".Toastify__toast-icon"
167
+ toastIcon: ".Toastify__toast-icon",
168
+ paneModalCrossIcon: ".neeto-ui-pane__close",
169
+ inputField: dataCy("input-field"),
170
+ alertConfirmationText: dataCy("alert-confirmation-text"),
171
+ alertCancelButton: dataCy("alert-cancel-button"),
172
+ alertModalCrossIcon: ".neeto-ui-modal__close",
173
+ saveChangesButton: dataCy("save-changes-button"),
174
+ cancelButton: dataCy("cancel-button"),
175
+ inputFieldError: dataCy("nui-input-error"),
176
+ selectDropDownError: dataCy("nui-select-error"),
177
+ subTitleHeading: function subTitleHeading(index) {
178
+ return dataCy("menubar-subtitle-heading", ":eq(".concat(index, ")"));
179
+ },
180
+ noDataTitle: dataCy("no-data-title"),
181
+ noDataDescription: dataCy("no-data-description"),
182
+ backDrop: "[data-testid='backdrop']",
183
+ menuBarHeading: dataCy("menubar-heading"),
184
+ tabItem: function tabItem(index) {
185
+ return dataCy("tab-item", ":eq(".concat(index, ")"));
186
+ },
187
+ dropdownWrapper: function dropdownWrapper(index) {
188
+ return dataCy("nui-select-container-wrapper", ":eq(".concat(index, ")"));
189
+ }
168
190
  };
169
191
  var tableSelectors = {
170
192
  nthColumn: function nthColumn(n) {
@@ -173,7 +195,10 @@ var tableSelectors = {
173
195
  tableBody: ".ant-table-body",
174
196
  tableHeader: ".ant-table-thead th",
175
197
  tableRow: ".ant-table-tbody tr",
176
- spinner: ".ant-spin"
198
+ spinner: ".ant-spin",
199
+ nthHeading: function nthHeading(n) {
200
+ return "tr > th:nth-child(".concat(n, ")");
201
+ }
177
202
  };
178
203
  var profileSelectors = {
179
204
  tab: dataCy("profile-section"),
@@ -195,7 +220,15 @@ var commonTexts = {
195
220
  "new": "New",
196
221
  takeAction: "Take action",
197
222
  unblock: "Unblock",
198
- toastIcon: "👍"
223
+ toastIcon: "👍",
224
+ emailRequiredError: "Email is required.",
225
+ emailTakenMessage: "Email is already taken",
226
+ nameTakenMessage: "Name has already been taken",
227
+ all: "All",
228
+ proceed: "Proceed",
229
+ settings: "Settings",
230
+ unsavedChangesAlertTitle: "You have unsaved changes!",
231
+ unsavedChangesAlertMessage: "Are you sure you want to continue? All of your unsaved changes will be lost."
199
232
  };
200
233
 
201
234
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
@@ -269,7 +302,9 @@ var initCustomCommands = function initCustomCommands() {
269
302
  Cypress.Commands.add("apiRequest", function (options) {
270
303
  return cy.get("@requestHeaders").then(function (requestHeaders) {
271
304
  return requestHeaders ? cy.request(_objectSpread(_objectSpread({}, options), {}, {
272
- headers: requestHeaders
305
+ headers: _objectSpread(_objectSpread({}, requestHeaders), {}, {
306
+ "accept-encoding": "gzip"
307
+ })
273
308
  })) : cy.log("No request headers found");
274
309
  });
275
310
  });
@@ -325,6 +360,72 @@ var initCustomCommands = function initCustomCommands() {
325
360
  if (!$body.find(selector).length) callback();
326
361
  });
327
362
  });
363
+ Cypress.Commands.add("dragAndDrop", function (_ref2) {
364
+ var subject = _ref2.subject,
365
+ target = _ref2.target,
366
+ _ref2$dragIndex = _ref2.dragIndex,
367
+ dragIndex = _ref2$dragIndex === void 0 ? 0 : _ref2$dragIndex,
368
+ _ref2$dropIndex = _ref2.dropIndex,
369
+ dropIndex = _ref2$dropIndex === void 0 ? 0 : _ref2$dropIndex;
370
+ cy.get(subject).should("be.visible", {
371
+ timeout: 20000
372
+ });
373
+ Cypress.log({
374
+ name: "DRAGNDROP",
375
+ message: "Dragging element ".concat(subject, " to ").concat(target),
376
+ consoleProps: function consoleProps() {
377
+ return {
378
+ subject: subject,
379
+ target: target
380
+ };
381
+ }
382
+ });
383
+ cy.get(target).eq(dropIndex).then(function ($target) {
384
+ var coordsDrop = $target[0].getBoundingClientRect();
385
+ cy.get(subject).eq(dragIndex).then(function (subject) {
386
+ var coordsDrag = subject[0].getBoundingClientRect();
387
+ cy.wrap(subject).trigger("mousedown", {
388
+ button: 0,
389
+ // BUTTON_INDEX
390
+ clientX: coordsDrag.x,
391
+ clientY: coordsDrag.y,
392
+ force: true
393
+ }).trigger("mousemove", {
394
+ button: 0,
395
+ // BUTTON_INDEX
396
+ clientX: coordsDrag.x + 10,
397
+ // SLOPPY_CLICK_THRESHOLD
398
+ clientY: coordsDrag.y,
399
+ force: true
400
+ });
401
+ cy.get("body").trigger("mousemove", {
402
+ button: 0,
403
+ // BUTTON_INDEX
404
+ clientX: coordsDrop.x,
405
+ clientY: coordsDrop.y,
406
+ force: true
407
+ }).trigger("mouseup");
408
+ });
409
+ });
410
+ });
411
+ Cypress.Commands.add("verifyPlaceholder", function (textInputSelector, value) {
412
+ cy.get(textInputSelector).should("have.attr", "placeholder").and("eq", value);
413
+ });
414
+ Cypress.Commands.add("enableOrDisableSwitch", function (switchButton, value) {
415
+ cy.get(switchButton).invoke("click");
416
+ cy.get(switchButton).should("have.prop", "value").and("eq", value);
417
+ });
418
+ Cypress.Commands.add("interceptNonVersionedApi", function (_ref3) {
419
+ var _ref3$url = _ref3.url,
420
+ url = _ref3$url === void 0 ? "*" : _ref3$url,
421
+ alias = _ref3.alias,
422
+ _ref3$times = _ref3.times,
423
+ times = _ref3$times === void 0 ? 1 : _ref3$times;
424
+ cy.intercept({
425
+ url: url,
426
+ times: times
427
+ }).as(alias);
428
+ });
328
429
  };
329
430
 
330
431
  var loginSelectors = {
@@ -516,6 +516,8 @@ var neetoCommons = {
516
516
  last24Hours: "Last 24 hours",
517
517
  thisMonth: "This month",
518
518
  lastMonth: "Last month",
519
+ thisYear: "This year",
520
+ lastYear: "Last year",
519
521
  thisQuarter: "This quarter",
520
522
  lastQuarter: "Last quarter",
521
523
  thisWeek: "This week",
@@ -579,6 +581,7 @@ var neetoCommons = {
579
581
  },
580
582
  keyboardShortcuts: {
581
583
  title: "Keyboard shortcuts",
584
+ viewFullListOfShortcuts: "View full list of shortcuts",
582
585
  global: {
583
586
  categoryName: "GLOBAL",
584
587
  openKeyboardShortcutsPane: "Open the keyboard shortcuts pane",
package/initializers.js CHANGED
@@ -506,6 +506,8 @@ var neetoCommons = {
506
506
  last24Hours: "Last 24 hours",
507
507
  thisMonth: "This month",
508
508
  lastMonth: "Last month",
509
+ thisYear: "This year",
510
+ lastYear: "Last year",
509
511
  thisQuarter: "This quarter",
510
512
  lastQuarter: "Last quarter",
511
513
  thisWeek: "This week",
@@ -569,6 +571,7 @@ var neetoCommons = {
569
571
  },
570
572
  keyboardShortcuts: {
571
573
  title: "Keyboard shortcuts",
574
+ viewFullListOfShortcuts: "View full list of shortcuts",
572
575
  global: {
573
576
  categoryName: "GLOBAL",
574
577
  openKeyboardShortcutsPane: "Open the keyboard shortcuts pane",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bigbinary/neeto-commons-frontend",
3
- "version": "2.0.47",
3
+ "version": "2.0.49",
4
4
  "description": "A package encapsulating common code across neeto projects including initializers, utility functions, common components and hooks and so on.",
5
5
  "repository": "git@github.com:bigbinary/neeto-commons-frontend.git",
6
6
  "author": "Amaljith K <amaljith.k@bigbinary.com>",
@@ -4354,6 +4354,10 @@ var defaultTimePeriodOptions = function defaultTimePeriodOptions() {
4354
4354
  var thisQuarterEnd = dayjs__default["default"]().endOf("quarter");
4355
4355
  var lastQuarterStart = dayjs__default["default"]().subtract(1, "quarter").startOf("quarter");
4356
4356
  var lastQuarterEnd = dayjs__default["default"]().subtract(1, "quarter").endOf("quarter");
4357
+ var startOfLastYear = dayjs__default["default"]().subtract(1, "year").startOf("year");
4358
+ var endOfLastYear = dayjs__default["default"]().subtract(1, "year").endOf("year");
4359
+ var startOfYear = dayjs__default["default"]().startOf("year");
4360
+ var endOfYear = dayjs__default["default"]().endOf("year");
4357
4361
  var startOf24Hours = dayjs__default["default"]().subtract(24, "hour");
4358
4362
  var now = dayjs__default["default"]();
4359
4363
  var startOfLast7Days = dayjs__default["default"]().subtract(7, "day");
@@ -4416,6 +4420,20 @@ var defaultTimePeriodOptions = function defaultTimePeriodOptions() {
4416
4420
  endDate: lastMonthEnd,
4417
4421
  rangeType: "month"
4418
4422
  }
4423
+ }, {
4424
+ label: i18next.t("neetoCommons.dateRangeFilter.timePeriodOptions.thisYear"),
4425
+ value: {
4426
+ startDate: startOfYear,
4427
+ endDate: endOfYear,
4428
+ rangeType: "year"
4429
+ }
4430
+ }, {
4431
+ label: i18next.t("neetoCommons.dateRangeFilter.timePeriodOptions.lastYear"),
4432
+ value: {
4433
+ startDate: startOfLastYear,
4434
+ endDate: endOfLastYear,
4435
+ rangeType: "year"
4436
+ }
4419
4437
  }, {
4420
4438
  label: i18next.t("neetoCommons.dateRangeFilter.timePeriodOptions.thisQuarter"),
4421
4439
  value: {
@@ -4437,7 +4455,7 @@ var defaultTimePeriodOptions = function defaultTimePeriodOptions() {
4437
4455
  };
4438
4456
 
4439
4457
  var DateRangeFilter = function DateRangeFilter(_ref) {
4440
- var _globalProps$user;
4458
+ var _timePeriod$value, _timePeriod$value2, _globalProps$user;
4441
4459
  var timePeriodOptions = _ref.timePeriodOptions,
4442
4460
  timePeriod = _ref.timePeriod,
4443
4461
  setTimePeriod = _ref.setTimePeriod;
@@ -4445,6 +4463,8 @@ var DateRangeFilter = function DateRangeFilter(_ref) {
4445
4463
  t = _useTranslation.t;
4446
4464
  var customDurationLabel = t("neetoCommons.dateRangeFilter.timePeriodOptions.customDuration");
4447
4465
  var isCustom = timePeriod.label === customDurationLabel;
4466
+ var startDate = (_timePeriod$value = timePeriod.value) === null || _timePeriod$value === void 0 ? void 0 : _timePeriod$value.startDate;
4467
+ var endDate = (_timePeriod$value2 = timePeriod.value) === null || _timePeriod$value2 === void 0 ? void 0 : _timePeriod$value2.endDate;
4448
4468
  return /*#__PURE__*/React__default["default"].createElement("div", {
4449
4469
  className: "flex pr-2",
4450
4470
  "data-testid": "date-range-filter"
@@ -4452,10 +4472,7 @@ var DateRangeFilter = function DateRangeFilter(_ref) {
4452
4472
  className: "w-40"
4453
4473
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Select, {
4454
4474
  required: true,
4455
- getOptionValue: function getOptionValue(_ref2) {
4456
- var label = _ref2.label;
4457
- return label;
4458
- },
4475
+ getOptionValue: ramda.prop("label"),
4459
4476
  options: timePeriodOptions || defaultTimePeriodOptions(),
4460
4477
  value: timePeriod,
4461
4478
  onChange: function onChange(option) {
@@ -4468,12 +4485,13 @@ var DateRangeFilter = function DateRangeFilter(_ref) {
4468
4485
  autoFocus: true,
4469
4486
  className: "ml-3 w-full",
4470
4487
  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,
4488
+ defaultValue: [dayjs__default["default"](startDate), dayjs__default["default"](endDate)],
4471
4489
  picker: "date",
4472
4490
  type: "range",
4473
- onChange: function onChange(_, _ref3) {
4474
- var _ref4 = _slicedToArray(_ref3, 2),
4475
- startDate = _ref4[0],
4476
- endDate = _ref4[1];
4491
+ onChange: function onChange(_, _ref2) {
4492
+ var _ref3 = _slicedToArray(_ref2, 2),
4493
+ startDate = _ref3[0],
4494
+ endDate = _ref3[1];
4477
4495
  setTimePeriod({
4478
4496
  label: customDurationLabel,
4479
4497
  value: {
@@ -40449,37 +40467,13 @@ var IpRestriction = function IpRestriction() {
40449
40467
  }, /*#__PURE__*/React__default["default"].createElement(CurrentIp, null), /*#__PURE__*/React__default["default"].createElement(AllowedIpRanges, null)));
40450
40468
  };
40451
40469
 
40452
- var DisplayHotKey = function DisplayHotKey(_ref) {
40453
- var hotkey = _ref.hotkey;
40454
- var isSequentialHotkey = hotkey.includes(" ");
40455
- var isSimultaneousHotkey = hotkey.includes("+");
40456
- var isSingleKeyHotkey = !isSequentialHotkey && !isSimultaneousHotkey;
40457
- var sequences = [];
40458
- if (isSingleKeyHotkey) return /*#__PURE__*/React__default["default"].createElement(neetoui.Kbd, {
40459
- keyName: hotkey
40460
- });
40461
- if (isSequentialHotkey) {
40462
- sequences = hotkey.split(" ");
40463
- } else if (isSimultaneousHotkey) {
40464
- sequences = hotkey.split("+");
40465
- }
40466
- return sequences.map(function (keyName, idx) {
40467
- return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
40468
- key: idx
40469
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Kbd, {
40470
- keyName: keyName
40471
- }), isSequentialHotkey && idx + 1 !== sequences.length && /*#__PURE__*/React__default["default"].createElement(neetoui.Kbd, {
40472
- keyName: "then"
40473
- }));
40474
- });
40475
- };
40476
-
40477
40470
  var KEY_SHORTFORM_MAP = {
40478
40471
  command: "cmd",
40479
40472
  escape: "esc",
40480
40473
  control: "ctrl",
40481
40474
  option: "opt"
40482
40475
  };
40476
+ var FULL_SHORTCUTS_LINK_PROP_NAME = "fullShortcutsLink";
40483
40477
 
40484
40478
  var shortenHotKey = function shortenHotKey(hotkey) {
40485
40479
  var result = hotkey;
@@ -40504,35 +40498,71 @@ var getGlobalShortcuts = function getGlobalShortcuts() {
40504
40498
  });
40505
40499
  };
40506
40500
 
40501
+ var HotKey = function HotKey(_ref) {
40502
+ var description = _ref.description,
40503
+ sequence = _ref.sequence;
40504
+ var hotkey = shortenHotKey(convertHotkeyToUsersPlatform(sequence));
40505
+ var isSequentialHotkey = hotkey.includes(" ");
40506
+ var isSimultaneousHotkey = hotkey.includes("+");
40507
+ var isSingleKeyHotkey = !isSequentialHotkey && !isSimultaneousHotkey;
40508
+ var sequences = [];
40509
+ if (isSingleKeyHotkey) {
40510
+ sequences = [hotkey];
40511
+ } else if (isSequentialHotkey) {
40512
+ sequences = hotkey.split(" ");
40513
+ } else if (isSimultaneousHotkey) {
40514
+ sequences = hotkey.split("+");
40515
+ }
40516
+ return /*#__PURE__*/React__default["default"].createElement("div", {
40517
+ className: "my-3 px-4"
40518
+ }, /*#__PURE__*/React__default["default"].createElement("div", {
40519
+ className: "flex items-center justify-between gap-3",
40520
+ "data-testid": "hotkey-item"
40521
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
40522
+ className: "neeto-ui-text-gray-800",
40523
+ lineHeight: "normal",
40524
+ style: "body2"
40525
+ }, description), /*#__PURE__*/React__default["default"].createElement("div", {
40526
+ className: "flex items-center gap-1"
40527
+ }, sequences.map(function (keyName, idx) {
40528
+ return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
40529
+ key: idx
40530
+ }, /*#__PURE__*/React__default["default"].createElement(neetoui.Kbd, {
40531
+ keyName: keyName
40532
+ }), isSequentialHotkey && idx + 1 !== sequences.length && /*#__PURE__*/React__default["default"].createElement(neetoui.Kbd, {
40533
+ keyName: "then"
40534
+ }));
40535
+ }))));
40536
+ };
40537
+
40507
40538
  var HotKeyList = function HotKeyList(_ref) {
40508
40539
  var hotkeys = _ref.hotkeys;
40540
+ var _useTranslation = reactI18next.useTranslation(),
40541
+ t = _useTranslation.t;
40509
40542
  return Object.keys(hotkeys).map(function (categoryName) {
40543
+ var categoryValues = hotkeys[categoryName];
40544
+ var fullShortcutsLink = categoryValues[FULL_SHORTCUTS_LINK_PROP_NAME];
40510
40545
  return /*#__PURE__*/React__default["default"].createElement(React__default["default"].Fragment, {
40511
40546
  key: categoryName
40512
40547
  }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
40513
40548
  className: "neeto-ui-text-gray-800 mt-4 px-4 text-xs font-bold",
40514
40549
  lineHeight: "normal",
40515
40550
  style: "body2"
40516
- }, categoryName), Object.entries(hotkeys[categoryName]).map(function (_ref2) {
40551
+ }, categoryName), Object.entries(categoryValues).map(function (_ref2) {
40517
40552
  var _ref3 = _slicedToArray(_ref2, 2),
40518
40553
  _ref3$ = _ref3[1],
40519
40554
  sequence = _ref3$.sequence,
40520
40555
  description = _ref3$.description;
40521
- return /*#__PURE__*/React__default["default"].createElement("div", {
40522
- className: "my-3 px-4",
40523
- key: sequence
40524
- }, /*#__PURE__*/React__default["default"].createElement("div", {
40525
- className: "flex items-center justify-between gap-3",
40526
- "data-testid": "hotkey-item"
40527
- }, /*#__PURE__*/React__default["default"].createElement(neetoui.Typography, {
40528
- className: "neeto-ui-text-gray-800",
40529
- lineHeight: "normal",
40530
- style: "body2"
40531
- }, description), /*#__PURE__*/React__default["default"].createElement("div", {
40532
- className: "flex items-center gap-1"
40533
- }, /*#__PURE__*/React__default["default"].createElement(DisplayHotKey, {
40534
- hotkey: shortenHotKey(convertHotkeyToUsersPlatform(sequence))
40535
- }))));
40556
+ return sequence && /*#__PURE__*/React__default["default"].createElement(HotKey, {
40557
+ description: description,
40558
+ key: sequence,
40559
+ sequence: sequence
40560
+ });
40561
+ }), fullShortcutsLink && /*#__PURE__*/React__default["default"].createElement(neetoui.Button, {
40562
+ className: "pl-4 mb-3",
40563
+ href: fullShortcutsLink,
40564
+ label: t("neetoCommons.keyboardShortcuts.viewFullListOfShortcuts"),
40565
+ style: "link"
40536
40566
  }));
40537
40567
  });
40538
40568
  };
package/react-utils.d.ts CHANGED
@@ -18,6 +18,7 @@ import { DateTimeType, timeFormat } from "./utils";
18
18
  import { History } from "history";
19
19
  import { StoreApi, UseBoundStore } from "zustand";
20
20
  import { Dayjs } from "dayjs";
21
+ import { TFunction } from "i18next";
21
22
 
22
23
  export const HoneybadgerErrorBoundary: React.FC<{
23
24
  ErrorComponent?: React.ReactNode | React.ComponentType<any>;
@@ -264,13 +265,14 @@ export function isMetaKeyPressed(
264
265
 
265
266
  interface Shortcut {
266
267
  sequence: string;
267
- description: string;
268
+ description: TFunction;
268
269
  }
269
270
  interface Category {
270
- [index: string]: Shortcut;
271
+ [index: string]: Shortcut | string;
272
+ fullShortcutsLink?: string;
271
273
  }
272
274
  interface ProductShortcuts {
273
- [index: any]: Category;
275
+ [index: string | TFunction]: Category;
274
276
  }
275
277
  export const KeyboardShortcutsPane: React.FC<{
276
278
  productShortcuts?: ProductShortcuts;
package/react-utils.js CHANGED
@@ -4316,6 +4316,10 @@ var defaultTimePeriodOptions = function defaultTimePeriodOptions() {
4316
4316
  var thisQuarterEnd = dayjs().endOf("quarter");
4317
4317
  var lastQuarterStart = dayjs().subtract(1, "quarter").startOf("quarter");
4318
4318
  var lastQuarterEnd = dayjs().subtract(1, "quarter").endOf("quarter");
4319
+ var startOfLastYear = dayjs().subtract(1, "year").startOf("year");
4320
+ var endOfLastYear = dayjs().subtract(1, "year").endOf("year");
4321
+ var startOfYear = dayjs().startOf("year");
4322
+ var endOfYear = dayjs().endOf("year");
4319
4323
  var startOf24Hours = dayjs().subtract(24, "hour");
4320
4324
  var now = dayjs();
4321
4325
  var startOfLast7Days = dayjs().subtract(7, "day");
@@ -4378,6 +4382,20 @@ var defaultTimePeriodOptions = function defaultTimePeriodOptions() {
4378
4382
  endDate: lastMonthEnd,
4379
4383
  rangeType: "month"
4380
4384
  }
4385
+ }, {
4386
+ label: t$1("neetoCommons.dateRangeFilter.timePeriodOptions.thisYear"),
4387
+ value: {
4388
+ startDate: startOfYear,
4389
+ endDate: endOfYear,
4390
+ rangeType: "year"
4391
+ }
4392
+ }, {
4393
+ label: t$1("neetoCommons.dateRangeFilter.timePeriodOptions.lastYear"),
4394
+ value: {
4395
+ startDate: startOfLastYear,
4396
+ endDate: endOfLastYear,
4397
+ rangeType: "year"
4398
+ }
4381
4399
  }, {
4382
4400
  label: t$1("neetoCommons.dateRangeFilter.timePeriodOptions.thisQuarter"),
4383
4401
  value: {
@@ -4399,7 +4417,7 @@ var defaultTimePeriodOptions = function defaultTimePeriodOptions() {
4399
4417
  };
4400
4418
 
4401
4419
  var DateRangeFilter = function DateRangeFilter(_ref) {
4402
- var _globalProps$user;
4420
+ var _timePeriod$value, _timePeriod$value2, _globalProps$user;
4403
4421
  var timePeriodOptions = _ref.timePeriodOptions,
4404
4422
  timePeriod = _ref.timePeriod,
4405
4423
  setTimePeriod = _ref.setTimePeriod;
@@ -4407,6 +4425,8 @@ var DateRangeFilter = function DateRangeFilter(_ref) {
4407
4425
  t = _useTranslation.t;
4408
4426
  var customDurationLabel = t("neetoCommons.dateRangeFilter.timePeriodOptions.customDuration");
4409
4427
  var isCustom = timePeriod.label === customDurationLabel;
4428
+ var startDate = (_timePeriod$value = timePeriod.value) === null || _timePeriod$value === void 0 ? void 0 : _timePeriod$value.startDate;
4429
+ var endDate = (_timePeriod$value2 = timePeriod.value) === null || _timePeriod$value2 === void 0 ? void 0 : _timePeriod$value2.endDate;
4410
4430
  return /*#__PURE__*/React__default.createElement("div", {
4411
4431
  className: "flex pr-2",
4412
4432
  "data-testid": "date-range-filter"
@@ -4414,10 +4434,7 @@ var DateRangeFilter = function DateRangeFilter(_ref) {
4414
4434
  className: "w-40"
4415
4435
  }, /*#__PURE__*/React__default.createElement(Select, {
4416
4436
  required: true,
4417
- getOptionValue: function getOptionValue(_ref2) {
4418
- var label = _ref2.label;
4419
- return label;
4420
- },
4437
+ getOptionValue: prop$1("label"),
4421
4438
  options: timePeriodOptions || defaultTimePeriodOptions(),
4422
4439
  value: timePeriod,
4423
4440
  onChange: function onChange(option) {
@@ -4430,12 +4447,13 @@ var DateRangeFilter = function DateRangeFilter(_ref) {
4430
4447
  autoFocus: true,
4431
4448
  className: "ml-3 w-full",
4432
4449
  dateFormat: globalProps$1 === null || globalProps$1 === void 0 ? void 0 : (_globalProps$user = globalProps$1.user) === null || _globalProps$user === void 0 ? void 0 : _globalProps$user.dateFormat,
4450
+ defaultValue: [dayjs(startDate), dayjs(endDate)],
4433
4451
  picker: "date",
4434
4452
  type: "range",
4435
- onChange: function onChange(_, _ref3) {
4436
- var _ref4 = _slicedToArray(_ref3, 2),
4437
- startDate = _ref4[0],
4438
- endDate = _ref4[1];
4453
+ onChange: function onChange(_, _ref2) {
4454
+ var _ref3 = _slicedToArray(_ref2, 2),
4455
+ startDate = _ref3[0],
4456
+ endDate = _ref3[1];
4439
4457
  setTimePeriod({
4440
4458
  label: customDurationLabel,
4441
4459
  value: {
@@ -40411,37 +40429,13 @@ var IpRestriction = function IpRestriction() {
40411
40429
  }, /*#__PURE__*/React__default.createElement(CurrentIp, null), /*#__PURE__*/React__default.createElement(AllowedIpRanges, null)));
40412
40430
  };
40413
40431
 
40414
- var DisplayHotKey = function DisplayHotKey(_ref) {
40415
- var hotkey = _ref.hotkey;
40416
- var isSequentialHotkey = hotkey.includes(" ");
40417
- var isSimultaneousHotkey = hotkey.includes("+");
40418
- var isSingleKeyHotkey = !isSequentialHotkey && !isSimultaneousHotkey;
40419
- var sequences = [];
40420
- if (isSingleKeyHotkey) return /*#__PURE__*/React__default.createElement(Kbd, {
40421
- keyName: hotkey
40422
- });
40423
- if (isSequentialHotkey) {
40424
- sequences = hotkey.split(" ");
40425
- } else if (isSimultaneousHotkey) {
40426
- sequences = hotkey.split("+");
40427
- }
40428
- return sequences.map(function (keyName, idx) {
40429
- return /*#__PURE__*/React__default.createElement(React__default.Fragment, {
40430
- key: idx
40431
- }, /*#__PURE__*/React__default.createElement(Kbd, {
40432
- keyName: keyName
40433
- }), isSequentialHotkey && idx + 1 !== sequences.length && /*#__PURE__*/React__default.createElement(Kbd, {
40434
- keyName: "then"
40435
- }));
40436
- });
40437
- };
40438
-
40439
40432
  var KEY_SHORTFORM_MAP = {
40440
40433
  command: "cmd",
40441
40434
  escape: "esc",
40442
40435
  control: "ctrl",
40443
40436
  option: "opt"
40444
40437
  };
40438
+ var FULL_SHORTCUTS_LINK_PROP_NAME = "fullShortcutsLink";
40445
40439
 
40446
40440
  var shortenHotKey = function shortenHotKey(hotkey) {
40447
40441
  var result = hotkey;
@@ -40466,35 +40460,71 @@ var getGlobalShortcuts = function getGlobalShortcuts() {
40466
40460
  });
40467
40461
  };
40468
40462
 
40463
+ var HotKey = function HotKey(_ref) {
40464
+ var description = _ref.description,
40465
+ sequence = _ref.sequence;
40466
+ var hotkey = shortenHotKey(convertHotkeyToUsersPlatform(sequence));
40467
+ var isSequentialHotkey = hotkey.includes(" ");
40468
+ var isSimultaneousHotkey = hotkey.includes("+");
40469
+ var isSingleKeyHotkey = !isSequentialHotkey && !isSimultaneousHotkey;
40470
+ var sequences = [];
40471
+ if (isSingleKeyHotkey) {
40472
+ sequences = [hotkey];
40473
+ } else if (isSequentialHotkey) {
40474
+ sequences = hotkey.split(" ");
40475
+ } else if (isSimultaneousHotkey) {
40476
+ sequences = hotkey.split("+");
40477
+ }
40478
+ return /*#__PURE__*/React__default.createElement("div", {
40479
+ className: "my-3 px-4"
40480
+ }, /*#__PURE__*/React__default.createElement("div", {
40481
+ className: "flex items-center justify-between gap-3",
40482
+ "data-testid": "hotkey-item"
40483
+ }, /*#__PURE__*/React__default.createElement(Typography, {
40484
+ className: "neeto-ui-text-gray-800",
40485
+ lineHeight: "normal",
40486
+ style: "body2"
40487
+ }, description), /*#__PURE__*/React__default.createElement("div", {
40488
+ className: "flex items-center gap-1"
40489
+ }, sequences.map(function (keyName, idx) {
40490
+ return /*#__PURE__*/React__default.createElement(React__default.Fragment, {
40491
+ key: idx
40492
+ }, /*#__PURE__*/React__default.createElement(Kbd, {
40493
+ keyName: keyName
40494
+ }), isSequentialHotkey && idx + 1 !== sequences.length && /*#__PURE__*/React__default.createElement(Kbd, {
40495
+ keyName: "then"
40496
+ }));
40497
+ }))));
40498
+ };
40499
+
40469
40500
  var HotKeyList = function HotKeyList(_ref) {
40470
40501
  var hotkeys = _ref.hotkeys;
40502
+ var _useTranslation = useTranslation(),
40503
+ t = _useTranslation.t;
40471
40504
  return Object.keys(hotkeys).map(function (categoryName) {
40505
+ var categoryValues = hotkeys[categoryName];
40506
+ var fullShortcutsLink = categoryValues[FULL_SHORTCUTS_LINK_PROP_NAME];
40472
40507
  return /*#__PURE__*/React__default.createElement(React__default.Fragment, {
40473
40508
  key: categoryName
40474
40509
  }, /*#__PURE__*/React__default.createElement(Typography, {
40475
40510
  className: "neeto-ui-text-gray-800 mt-4 px-4 text-xs font-bold",
40476
40511
  lineHeight: "normal",
40477
40512
  style: "body2"
40478
- }, categoryName), Object.entries(hotkeys[categoryName]).map(function (_ref2) {
40513
+ }, categoryName), Object.entries(categoryValues).map(function (_ref2) {
40479
40514
  var _ref3 = _slicedToArray(_ref2, 2),
40480
40515
  _ref3$ = _ref3[1],
40481
40516
  sequence = _ref3$.sequence,
40482
40517
  description = _ref3$.description;
40483
- return /*#__PURE__*/React__default.createElement("div", {
40484
- className: "my-3 px-4",
40485
- key: sequence
40486
- }, /*#__PURE__*/React__default.createElement("div", {
40487
- className: "flex items-center justify-between gap-3",
40488
- "data-testid": "hotkey-item"
40489
- }, /*#__PURE__*/React__default.createElement(Typography, {
40490
- className: "neeto-ui-text-gray-800",
40491
- lineHeight: "normal",
40492
- style: "body2"
40493
- }, description), /*#__PURE__*/React__default.createElement("div", {
40494
- className: "flex items-center gap-1"
40495
- }, /*#__PURE__*/React__default.createElement(DisplayHotKey, {
40496
- hotkey: shortenHotKey(convertHotkeyToUsersPlatform(sequence))
40497
- }))));
40518
+ return sequence && /*#__PURE__*/React__default.createElement(HotKey, {
40519
+ description: description,
40520
+ key: sequence,
40521
+ sequence: sequence
40522
+ });
40523
+ }), fullShortcutsLink && /*#__PURE__*/React__default.createElement(Button, {
40524
+ className: "pl-4 mb-3",
40525
+ href: fullShortcutsLink,
40526
+ label: t("neetoCommons.keyboardShortcuts.viewFullListOfShortcuts"),
40527
+ style: "link"
40498
40528
  }));
40499
40529
  });
40500
40530
  };