@entur-partner/common 8.0.1 → 8.0.5

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,9 +1,9 @@
1
1
  import React, { Children, useState, useEffect, useRef, Component } from 'react';
2
2
  import cx from 'classnames';
3
3
  import { Link as Link$1, Heading6, Paragraph } from '@entur/typography';
4
- import { NorwayIcon, UKIcon, UserIcon, LogOutIcon, DownArrowIcon, ChannelsIcon } from '@entur/icons';
4
+ import { UserIcon, DownArrowIcon, NorwayIcon, UKIcon, ChannelsIcon, LogOutIcon } from '@entur/icons';
5
5
  import { SecondaryButton, Button, PrimaryButton, ButtonGroup } from '@entur/button';
6
- import { Link as Link$2, useNavigate, useInRouterContext, useBlocker } from 'react-router-dom';
6
+ import { useNavigate, Link as Link$2, useInRouterContext, useBlocker } from 'react-router-dom';
7
7
  import { SearchableDropdown } from '@entur/dropdown';
8
8
  import { SegmentedControl, SegmentedChoice } from '@entur/form';
9
9
  import { assertIsDefined, localeDate, localeDateTime, isDate, isDateString, isString, hasAllPermissions, hasOneOfPermissions, splitUrlPath } from '@entur-partner/util';
@@ -300,97 +300,51 @@ var Content = function Content(_ref) {
300
300
  }, children);
301
301
  };
302
302
 
303
+ function useOutsideClick(ref, buttonRef, handler) {
304
+ React.useEffect(function () {
305
+ var listener = function listener(event) {
306
+ if (elementContainsEventTarget(ref.current, event) || elementContainsEventTarget(buttonRef.current, event)) {
307
+ return;
308
+ }
309
+ handler();
310
+ };
311
+ document.addEventListener('mousedown', listener);
312
+ document.addEventListener('touchstart', listener);
313
+ return function () {
314
+ document.removeEventListener('mousedown', listener);
315
+ document.removeEventListener('touchstart', listener);
316
+ };
317
+ }, [ref, buttonRef, handler]);
318
+ }
319
+ function elementContainsEventTarget(element, event) {
320
+ if (!element) {
321
+ return false;
322
+ }
323
+ if (element.contains(event.target)) {
324
+ return true;
325
+ }
326
+ // For elements inside a Shadow DOM we need to check the composedPath
327
+ if (event.composed && event.composedPath) {
328
+ var contains = event.composedPath().find(function (target) {
329
+ if (target === window) {
330
+ return false;
331
+ }
332
+ return element.contains(target);
333
+ });
334
+ return !!contains;
335
+ }
336
+ return false;
337
+ }
338
+
303
339
  var _excluded$b = ["className", "children", "userName", "open", "onOpenChange", "environment"];
304
- var UserMenu = function UserMenu(_ref) {
340
+ var CustomOverflowMenu = function CustomOverflowMenu(_ref) {
305
341
  var className = _ref.className,
306
- messages = _ref.messages,
307
- onLogout = _ref.onLogout,
308
- onLanguageChange = _ref.onLanguageChange,
342
+ children = _ref.children,
309
343
  userName = _ref.userName,
310
- language = _ref.language,
344
+ open = _ref.open,
345
+ onOpenChange = _ref.onOpenChange,
311
346
  environment = _ref.environment,
312
- showVersionItem = _ref.showVersionItem,
313
- showMyProfileItem = _ref.showMyProfileItem,
314
- onNavigateToMyProfile = _ref.onNavigateToMyProfile;
315
- var triggerClassList = cx(['eps-user-menu__trigger-button', className]);
316
- var _useState = useState(false),
317
- open = _useState[0],
318
- setOpen = _useState[1];
319
- return React.createElement("div", {
320
- id: "eps-user-menu"
321
- }, React.createElement(CustomOverflowMenu, {
322
- open: open,
323
- onOpenChange: setOpen,
324
- className: triggerClassList,
325
- userName: userName,
326
- environment: environment
327
- }, React.createElement("div", {
328
- id: "eps-overflow-menu"
329
- }, language === 'en' ? React.createElement(CustomOverflowMenuItem, {
330
- onClick: function onClick() {
331
- onLanguageChange('nb');
332
- setOpen(false);
333
- },
334
- className: "eps-overflow-menu__item"
335
- }, React.createElement("span", {
336
- "aria-hidden": true,
337
- className: "eps-overflow-menu__icon-margin"
338
- }, React.createElement(NorwayIcon, {
339
- size: "1rem",
340
- inline: true
341
- })), messages.switchLanguage) : React.createElement(CustomOverflowMenuItem, {
342
- onClick: function onClick() {
343
- onLanguageChange('en');
344
- setOpen(false);
345
- },
346
- className: "eps-overflow-menu__item"
347
- }, React.createElement("span", {
348
- "aria-hidden": true,
349
- className: "eps-overflow-menu__icon-margin"
350
- }, React.createElement(UKIcon, {
351
- size: "1rem",
352
- inline: true
353
- })), messages.switchLanguage), showVersionItem && messages.appVersion && React.createElement(VersionCustomOverflowMenuItems, {
354
- title: messages.appVersion,
355
- setOpen: setOpen
356
- }), showMyProfileItem && messages.myProfile && React.createElement(Link$2, {
357
- to: "/permission-admin/my-profile",
358
- style: {
359
- textDecoration: 'none'
360
- }
361
- }, React.createElement(CustomOverflowMenuItem, {
362
- onClick: function onClick() {
363
- setOpen(false);
364
- onNavigateToMyProfile();
365
- },
366
- className: "eps-overflow-menu__item"
367
- }, React.createElement("span", {
368
- "aria-hidden": true
369
- }, React.createElement(UserIcon, {
370
- size: "1rem",
371
- inline: true
372
- })), messages.myProfile)), React.createElement(CustomOverflowMenuItem, {
373
- onClick: function onClick() {
374
- onLogout();
375
- setOpen(false);
376
- },
377
- "data-testid": "user-menu-logout",
378
- className: "eps-overflow-menu__item"
379
- }, React.createElement("span", {
380
- "aria-hidden": true
381
- }, React.createElement(LogOutIcon, {
382
- size: "1rem",
383
- inline: true
384
- })), messages.logout))));
385
- };
386
- var CustomOverflowMenu = function CustomOverflowMenu(_ref2) {
387
- var className = _ref2.className,
388
- children = _ref2.children,
389
- userName = _ref2.userName,
390
- open = _ref2.open,
391
- onOpenChange = _ref2.onOpenChange,
392
- environment = _ref2.environment,
393
- rest = _objectWithoutPropertiesLoose(_ref2, _excluded$b);
347
+ rest = _objectWithoutPropertiesLoose(_ref, _excluded$b);
394
348
  var overflowItemsClasses = cx('eps-overflow-menu__group', {
395
349
  'eps-overflow-menu__group--open': open
396
350
  });
@@ -431,15 +385,52 @@ var CustomOverflowMenu = function CustomOverflowMenu(_ref2) {
431
385
  ref: overflowContentRef
432
386
  }, children));
433
387
  };
388
+
434
389
  var CustomOverflowMenuItem = function CustomOverflowMenuItem(props) {
435
390
  return React.createElement("button", _extends({
436
391
  className: cx(props.className, 'eps-overflow-menu__item'),
437
392
  role: "menuitem"
438
393
  }, props));
439
394
  };
440
- var VersionCustomOverflowMenuItems = function VersionCustomOverflowMenuItems(_ref3) {
441
- var title = _ref3.title,
442
- setOpen = _ref3.setOpen;
395
+
396
+ var LanguageSwitchMenuItem = function LanguageSwitchMenuItem(_ref) {
397
+ var language = _ref.language,
398
+ onLanguageChange = _ref.onLanguageChange,
399
+ setOpen = _ref.setOpen,
400
+ name = _ref.name;
401
+ var useB47LanguageKey = useFeatureToggle('USE_BCP-47_LANGUAGE_KEY');
402
+ var norwegianLanguageKey = useB47LanguageKey ? 'nb-NO' : 'nb';
403
+ var englishLanguageKey = useB47LanguageKey ? 'en-GB' : 'en';
404
+ return React.createElement(React.Fragment, null, language === englishLanguageKey ? React.createElement(CustomOverflowMenuItem, {
405
+ onClick: function onClick() {
406
+ onLanguageChange(norwegianLanguageKey);
407
+ setOpen(false);
408
+ },
409
+ className: "eps-overflow-menu__item"
410
+ }, React.createElement("span", {
411
+ "aria-hidden": true,
412
+ className: "eps-overflow-menu__icon-margin"
413
+ }, React.createElement(NorwayIcon, {
414
+ size: "1rem",
415
+ inline: true
416
+ })), name) : React.createElement(CustomOverflowMenuItem, {
417
+ onClick: function onClick() {
418
+ onLanguageChange(englishLanguageKey);
419
+ setOpen(false);
420
+ },
421
+ className: "eps-overflow-menu__item"
422
+ }, React.createElement("span", {
423
+ "aria-hidden": true,
424
+ className: "eps-overflow-menu__icon-margin"
425
+ }, React.createElement(UKIcon, {
426
+ size: "1rem",
427
+ inline: true
428
+ })), name));
429
+ };
430
+
431
+ var VersionMenuItem = function VersionMenuItem(_ref) {
432
+ var title = _ref.title,
433
+ setOpen = _ref.setOpen;
443
434
  var navigate = useNavigate(); // Hide useNavigate from standalone micro-frontends because it is not under RouterProvider
444
435
  return React.createElement(CustomOverflowMenuItem, {
445
436
  onClick: function onClick() {
@@ -455,41 +446,92 @@ var VersionCustomOverflowMenuItems = function VersionCustomOverflowMenuItems(_re
455
446
  inline: true
456
447
  })), title);
457
448
  };
458
- function elementContainsEventTarget(element, event) {
459
- if (!element) {
460
- return false;
461
- }
462
- if (element.contains(event.target)) {
463
- return true;
464
- }
465
- // For elements inside a Shadow DOM we need to check the composedPath
466
- if (event.composed && event.composedPath) {
467
- var contains = event.composedPath().find(function (target) {
468
- if (target === window) {
469
- return false;
470
- }
471
- return element.contains(target);
472
- });
473
- return contains ? true : false;
474
- }
475
- return false;
476
- }
477
- function useOutsideClick(ref, buttonRef, handler) {
478
- React.useEffect(function () {
479
- var listener = function listener(event) {
480
- if (elementContainsEventTarget(ref.current, event) || elementContainsEventTarget(buttonRef.current, event)) {
481
- return;
482
- }
483
- handler();
484
- };
485
- document.addEventListener('mousedown', listener);
486
- document.addEventListener('touchstart', listener);
487
- return function () {
488
- document.removeEventListener('mousedown', listener);
489
- document.removeEventListener('touchstart', listener);
490
- };
491
- }, [ref, buttonRef, handler]);
492
- }
449
+
450
+ var UserMenuItem = function UserMenuItem(_ref) {
451
+ var name = _ref.name,
452
+ setOpen = _ref.setOpen,
453
+ onNavigateToMyProfile = _ref.onNavigateToMyProfile;
454
+ return React.createElement(Link$2, {
455
+ to: "/permission-admin/my-profile",
456
+ style: {
457
+ textDecoration: 'none'
458
+ }
459
+ }, React.createElement(CustomOverflowMenuItem, {
460
+ onClick: function onClick() {
461
+ setOpen(false);
462
+ onNavigateToMyProfile();
463
+ },
464
+ className: "eps-overflow-menu__item"
465
+ }, React.createElement("span", {
466
+ "aria-hidden": true
467
+ }, React.createElement(UserIcon, {
468
+ size: "1rem",
469
+ inline: true
470
+ })), name));
471
+ };
472
+
473
+ var LogOutMenuItem = function LogOutMenuItem(_ref) {
474
+ var name = _ref.name,
475
+ setOpen = _ref.setOpen,
476
+ onLogout = _ref.onLogout;
477
+ return React.createElement(CustomOverflowMenuItem, {
478
+ onClick: function onClick() {
479
+ onLogout();
480
+ setOpen(false);
481
+ },
482
+ "data-testid": "user-menu-logout",
483
+ className: "eps-overflow-menu__item"
484
+ }, React.createElement("span", {
485
+ "aria-hidden": true
486
+ }, React.createElement(LogOutIcon, {
487
+ size: "1rem",
488
+ inline: true
489
+ })), name);
490
+ };
491
+
492
+ var UserMenu = function UserMenu(_ref) {
493
+ var className = _ref.className,
494
+ messages = _ref.messages,
495
+ onLogout = _ref.onLogout,
496
+ onLanguageChange = _ref.onLanguageChange,
497
+ userName = _ref.userName,
498
+ language = _ref.language,
499
+ environment = _ref.environment,
500
+ showVersionItem = _ref.showVersionItem,
501
+ showMyProfileItem = _ref.showMyProfileItem,
502
+ onNavigateToMyProfile = _ref.onNavigateToMyProfile;
503
+ var triggerClassList = cx(['eps-user-menu__trigger-button', className]);
504
+ var _useState = useState(false),
505
+ open = _useState[0],
506
+ setOpen = _useState[1];
507
+ return React.createElement("div", {
508
+ id: "eps-user-menu"
509
+ }, React.createElement(CustomOverflowMenu, {
510
+ open: open,
511
+ onOpenChange: setOpen,
512
+ className: triggerClassList,
513
+ userName: userName,
514
+ environment: environment
515
+ }, React.createElement("div", {
516
+ id: "eps-overflow-menu"
517
+ }, React.createElement(LanguageSwitchMenuItem, {
518
+ name: messages.switchLanguage,
519
+ language: language,
520
+ onLanguageChange: onLanguageChange,
521
+ setOpen: setOpen
522
+ }), showVersionItem && messages.appVersion && React.createElement(VersionMenuItem, {
523
+ title: messages.appVersion,
524
+ setOpen: setOpen
525
+ }), showMyProfileItem && messages.myProfile && React.createElement(UserMenuItem, {
526
+ name: messages.myProfile,
527
+ setOpen: setOpen,
528
+ onNavigateToMyProfile: onNavigateToMyProfile
529
+ }), React.createElement(LogOutMenuItem, {
530
+ name: messages.logout,
531
+ setOpen: setOpen,
532
+ onLogout: onLogout
533
+ }))));
534
+ };
493
535
 
494
536
  var _excluded$a = ["label", "organisations", "onChange", "selectedOrganisationId"];
495
537
  var OrganisationDropDown = function OrganisationDropDown(_ref) {