@natoora-libs/drawer-menu 0.0.13 → 0.0.15

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/dist/index.cjs CHANGED
@@ -367,8 +367,7 @@ var drawerAppGroup = [
367
367
  featureNames: [featureNames.NOTIFICATIONS],
368
368
  pinned: "notifications",
369
369
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconNotification, {}),
370
- url: "/#/notifications",
371
- shouldReload: true
370
+ url: "/#/notifications"
372
371
  },
373
372
  {
374
373
  name: "Promo Codes",
@@ -435,8 +434,7 @@ var drawerAppGroup = [
435
434
  featureNames: [featureNames.ORDERS],
436
435
  pinned: "orders",
437
436
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconOrders, {}),
438
- url: "/#/orders",
439
- shouldReload: true
437
+ url: "/#/orders"
440
438
  },
441
439
  {
442
440
  name: "Price Lists",
@@ -444,8 +442,7 @@ var drawerAppGroup = [
444
442
  featureNames: [featureNames.PRICE_LIST],
445
443
  pinned: "price_list",
446
444
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconPriceList, {}),
447
- url: "/#/price-list",
448
- shouldReload: true
445
+ url: "/#/price-list"
449
446
  },
450
447
  {
451
448
  name: "Special Prices",
@@ -453,8 +450,7 @@ var drawerAppGroup = [
453
450
  featureNames: [featureNames.SPECIAL_PRICES],
454
451
  pinned: "special_prices",
455
452
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconSpecialPrice, {}),
456
- url: "/#/pricing/special-prices",
457
- shouldReload: true
453
+ url: "/#/pricing/special-prices"
458
454
  }
459
455
  ]
460
456
  },
@@ -467,8 +463,7 @@ var drawerAppGroup = [
467
463
  featureNames: [featureNames.PURCHASE_ORDERS],
468
464
  pinned: "purchase_orders",
469
465
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconBuying, {}),
470
- url: "/react/purchase-orders",
471
- shouldReload: true
466
+ url: "/react/purchase-orders"
472
467
  },
473
468
  {
474
469
  name: "Products",
@@ -476,8 +471,7 @@ var drawerAppGroup = [
476
471
  featureNames: [featureNames.PRODUCTS],
477
472
  pinned: "products",
478
473
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconProducts, {}),
479
- url: "/#/product-base-list",
480
- shouldReload: true
474
+ url: "/#/product-base-list"
481
475
  },
482
476
  {
483
477
  name: "Suppliers",
@@ -493,8 +487,7 @@ var drawerAppGroup = [
493
487
  featureNames: [featureNames.SUPPLIER_PRICES],
494
488
  pinned: "supplier_prices",
495
489
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconSupplierPrices, {}),
496
- url: "/#/supplier-prices",
497
- shouldReload: true
490
+ url: "/#/supplier-prices"
498
491
  },
499
492
  {
500
493
  name: "Product Bulk Update",
@@ -515,8 +508,7 @@ var drawerAppGroup = [
515
508
  featureNames: [featureNames.RETAIL],
516
509
  pinned: "retail",
517
510
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconRetail, {}),
518
- url: "/#/retail/product-availability",
519
- shouldReload: true
511
+ url: "/#/retail/product-availability"
520
512
  },
521
513
  {
522
514
  name: "Goods In",
@@ -557,8 +549,7 @@ var drawerAppGroup = [
557
549
  featureNames: [featureNames.KANBAN],
558
550
  pinned: "kanban_cards",
559
551
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconVkc, {}),
560
- url: "/#/kanbancards",
561
- shouldReload: true
552
+ url: "/#/kanbancards"
562
553
  },
563
554
  {
564
555
  name: "Picking Stations",
@@ -566,8 +557,7 @@ var drawerAppGroup = [
566
557
  featureNames: [featureNames.PICKING_STATIONS],
567
558
  pinned: "picking_stations",
568
559
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconScales, {}),
569
- url: "/#/pickingstation",
570
- shouldReload: true
560
+ url: "/#/pickingstation"
571
561
  },
572
562
  {
573
563
  name: "Quality Control",
@@ -575,8 +565,7 @@ var drawerAppGroup = [
575
565
  featureNames: [featureNames.QUALITY_CONTROL],
576
566
  pinned: "quality_control",
577
567
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconQc, {}),
578
- url: "/#/quality-control",
579
- shouldReload: true
568
+ url: "/#/quality-control"
580
569
  },
581
570
  {
582
571
  name: "Service Delivery",
@@ -584,8 +573,7 @@ var drawerAppGroup = [
584
573
  featureNames: [featureNames.SERVICE_DELIVERY],
585
574
  pinned: "service_delivery",
586
575
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconRuns, {}),
587
- url: "/#/transport",
588
- shouldReload: true
576
+ url: "/#/transport"
589
577
  },
590
578
  {
591
579
  name: "Ops Metrics",
@@ -606,8 +594,7 @@ var drawerAppGroup = [
606
594
  featureNames: [featureNames.ACCOUNTS],
607
595
  pinned: "accounts",
608
596
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconAccounts, {}),
609
- url: "/#/accounts",
610
- shouldReload: true
597
+ url: "/#/accounts"
611
598
  },
612
599
  {
613
600
  name: "Reports",
@@ -615,8 +602,7 @@ var drawerAppGroup = [
615
602
  featureNames: [featureNames.REPORTS],
616
603
  pinned: "reports",
617
604
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconReports, {}),
618
- url: "/reports",
619
- shouldReload: true
605
+ url: "/reports"
620
606
  }
621
607
  ]
622
608
  },
@@ -629,8 +615,7 @@ var drawerAppGroup = [
629
615
  featureNames: [featureNames.ADMIN],
630
616
  pinned: "admin",
631
617
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconSetting, {}),
632
- url: "/admin",
633
- shouldReload: true
618
+ url: "/admin"
634
619
  },
635
620
  {
636
621
  name: "User Management",
@@ -660,29 +645,29 @@ var drawerAppGroup = [
660
645
  pinned: null,
661
646
  // icon: <icons.SvgIconReleaseNote />,
662
647
  icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconLogin, {}),
663
- url: "/react/release-notes",
664
- shouldReload: true
648
+ url: "/react/release-notes"
665
649
  }
666
650
  ]
667
651
  }
668
652
  ];
669
- var useGetDrawerAppList = ({
670
- enabledFeatures,
671
- reloadOnNavigate
672
- }) => {
653
+ var useGetDrawerAppList = (enabledFeatures) => {
673
654
  const navigate = (0, import_react_router.useNavigate)();
674
- const navigateTo = (0, import_react.useCallback)(
675
- (url) => {
676
- const isAngularRoute = url.startsWith("/#");
677
- const isMicroFrontendRoute = url === "/react/release-notes" || url === "/react/purchase-orders" || url === "/admin" || url === "/reports";
678
- if (isAngularRoute || isMicroFrontendRoute || reloadOnNavigate) {
679
- window.location.assign(url);
680
- return;
681
- }
682
- return navigate(url);
683
- },
684
- [reloadOnNavigate]
685
- );
655
+ const navigateTo = (0, import_react.useCallback)((url) => {
656
+ const isAngularRoute = url.startsWith("/#");
657
+ const isMicroFrontendRoute = url === "/react/release-notes" || url === "/react/purchase-orders" || url === "/admin" || url === "/reports";
658
+ if (isAngularRoute || isMicroFrontendRoute) {
659
+ window.location.assign(url);
660
+ return;
661
+ }
662
+ const isMicroFrontendHost = [
663
+ "/react/purchase-orders",
664
+ "/react/release-notes"
665
+ ].some((route) => window.location.pathname.includes(route));
666
+ if (isMicroFrontendHost) {
667
+ window.location.assign("/react" + url);
668
+ }
669
+ return navigate(url);
670
+ }, []);
686
671
  const drawerAppList = (0, import_react.useMemo)(() => {
687
672
  if (!enabledFeatures?.length) {
688
673
  return [];
@@ -776,10 +761,7 @@ var LeftDrawer = ({
776
761
  onTogglePinnedApp
777
762
  }) => {
778
763
  const [openCollapse, setOpenCollapse] = (0, import_react2.useState)({});
779
- const { userSettingsUrl, drawerAppList, navigateTo } = useGetDrawerAppList({
780
- enabledFeatures,
781
- reloadOnNavigate
782
- });
764
+ const { userSettingsUrl, drawerAppList, navigateTo } = useGetDrawerAppList(enabledFeatures);
783
765
  const { classes } = useStyles();
784
766
  return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
785
767
  import_material.SwipeableDrawer,
@@ -916,13 +898,9 @@ var import_material2 = require("@mui/material");
916
898
  var import_jsx_runtime3 = require("react/jsx-runtime");
917
899
  var PinnedItems = ({
918
900
  enabledFeatures,
919
- pinnedApps,
920
- reloadOnNavigate
901
+ pinnedApps
921
902
  }) => {
922
- const { drawerAppList, navigateTo } = useGetDrawerAppList({
923
- enabledFeatures,
924
- reloadOnNavigate
925
- });
903
+ const { drawerAppList, navigateTo } = useGetDrawerAppList(enabledFeatures);
926
904
  const items = drawerAppList.flatMap((app) => app.apps).filter((app) => app.pinned && pinnedApps[app.pinned]);
927
905
  return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material2.Box, { display: "flex", flexDirection: "row", gap: 1.5, children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_material2.Tooltip, { title: item.name, children: /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
928
906
  import_material2.IconButton,
@@ -949,8 +927,15 @@ var uiFeatureNames = {
949
927
  CUSTOMER_ESTIMATED_BASKET_SETTING: "customers_estimated_basket_setting",
950
928
  ORDER_ISSUE_REPORTING: "customers_order_issue_report_setting",
951
929
  CUSTOMER_PAYMENTS_SECTION: "customers_payments_section",
952
- CUSTOMER_PREFERENCES_TAB: "customers_preferences_tab",
930
+ CUSTOMER_DASHBOARD_TAB: "customers_dashboard_tab",
931
+ CUSTOMER_DETAILS_TAB: "customers_details_tab",
932
+ CUSTOMER_TRANSPORT_TAB: "customers_transport_tab",
933
+ CUSTOMER_FINANCE_TAB: "customers_finance_tab",
934
+ CUSTOMER_ACTIVITY_TAB: "customers_activity_tab",
935
+ CUSTOMER_APP_TAB: "customers_app_tab",
936
+ CUSTOMER_STANDING_ORDERS_TAB: "customers_standing_orders_tab",
953
937
  CUSTOMER_SUBSTITUTIONS_TAB: "customers_substitutions_tab",
938
+ CUSTOMER_PREFERENCES_TAB: "customers_preferences_tab",
954
939
  PRODUCT_PREFERENCES_SECTION: "product_preferences_section"
955
940
  };
956
941
  var uiFeaturesAreEnabled = (enabledUIFeatures, feature) => enabledUIFeatures?.includes(feature);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/components/LeftDrawer/LeftDrawer.tsx","../src/resources/styles/colors/darkPalette.ts","../src/resources/styles/colors/lightPalette.ts","../src/resources/styles/colors.ts","../src/config/drawerAppList.tsx","../src/config/features.ts","../src/components/PinnedItems/PinnedItems.tsx","../src/config/uiFeatures.ts"],"sourcesContent":["export { LeftDrawer } from './components/LeftDrawer/LeftDrawer';\nexport { PinnedItems } from './components/PinnedItems/PinnedItems';\nexport { useGetDrawerAppList } from './config/drawerAppList';\nexport { featureNames, featuresAreEnabled } from './config/features';\nexport { uiFeatureNames, uiFeaturesAreEnabled } from './config/uiFeatures';\n","import { Fragment, useState } from 'react';\n\nimport {\n PushPinOutlined,\n FiberManualRecord,\n ExpandLess,\n} from '@mui/icons-material';\nimport {\n AppBar,\n Collapse,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n ListSubheader,\n SwipeableDrawer,\n Toolbar,\n ListItemButton,\n Box,\n} from '@mui/material';\nimport Icon from '@mui/material/Icon';\nimport { RoundButton, UserBust } from '@natoora-libs/core/components';\nimport { makeStyles } from 'tss-react/mui';\n\nimport { colors } from '@/resources/styles/colors';\n\nimport { useGetDrawerAppList } from '../../config/drawerAppList';\n\nconst useStyles = makeStyles()((theme) => ({\n subheader: {\n textTransform: 'uppercase',\n fontSize: theme.spacing(1.5),\n },\n topBar: {\n backgroundColor: theme.palette.secondary.dark,\n width: theme.spacing(40),\n padding: theme.spacing(2),\n display: 'flex',\n alignItems: 'end',\n justifyContent: 'space-between',\n },\n drawer: {\n alignContent: 'space-between',\n flexDirection: 'column',\n minWidth: theme.spacing(80),\n },\n iconMenu: {\n height: '40px',\n width: '40px',\n opacity: 1,\n fill: colors.neutral700,\n },\n pinIcon: {\n height: '16px',\n width: '16px',\n fill: colors.neutral700,\n opacity: 0.5,\n '&:hover': {\n opacity: 1,\n cursor: 'pointer',\n },\n },\n expandIcon: {\n height: '22px',\n width: '22px',\n fill: colors.neutral700,\n },\n nested: {\n paddingLeft: theme.spacing(6),\n border: colors.neutral200,\n },\n appName: {\n '& .MuiTypography-body2': {\n fontWeight: 700,\n },\n },\n}));\n\ninterface LeftDrawerProps {\n open: boolean;\n enabledFeatures: string[];\n pinnedApps: Record<string, boolean>;\n user: {\n profile_picture: string;\n first_name: string;\n last_name: string;\n username: string;\n };\n reloadOnNavigate?: boolean;\n handleOpen: () => void;\n handleClose: () => void;\n onLogout: () => void;\n onTogglePinnedApp: (name: string, new_value: boolean) => void;\n}\n\nexport const LeftDrawer = ({\n enabledFeatures,\n pinnedApps,\n open,\n user,\n reloadOnNavigate,\n handleClose,\n handleOpen,\n onLogout,\n onTogglePinnedApp,\n}: LeftDrawerProps) => {\n const [openCollapse, setOpenCollapse] = useState({});\n const { userSettingsUrl, drawerAppList, navigateTo } = useGetDrawerAppList({\n enabledFeatures,\n reloadOnNavigate,\n });\n\n const { classes } = useStyles();\n\n return (\n <SwipeableDrawer\n className={classes.drawer}\n id=\"primary-menu\"\n onClose={handleClose}\n onOpen={handleOpen}\n open={open}\n >\n <AppBar position=\"static\">\n <Toolbar className={classes.topBar}>\n <UserBust\n user={user}\n avatarProps={{ height: 50, width: 50 }}\n typographyProps={{\n name: { variant: 'subtitle1', component: 'div' },\n username: { variant: 'caption', component: 'div' },\n }}\n />\n <RoundButton\n icon=\"edit\"\n isContrast\n onClick={() => navigateTo(userSettingsUrl)}\n size=\"small\"\n tooltip=\"User Settings\"\n />\n </Toolbar>\n </AppBar>\n\n <List>\n {drawerAppList.map((group) => (\n <Fragment key={group.groupName}>\n <ListSubheader disableSticky className={classes.subheader}>\n {group.groupName}\n </ListSubheader>\n\n {group.apps.map((app) => (\n <Fragment key={`${group.groupName}_${app.name}`}>\n <ListItem\n key={app.name}\n title={app.url}\n onClick={() => {\n if (app.routeName === 'logout') {\n return onLogout();\n }\n\n return navigateTo(app.url);\n }}\n >\n <ListItemIcon>\n <Icon className={classes.iconMenu}>{app.icon}</Icon>\n </ListItemIcon>\n <ListItemText\n className={classes.appName}\n primary={app.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n\n <Box\n display=\"flex\"\n gap={2}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {!!app.children?.length && (\n <ExpandLess\n className={classes.expandIcon}\n style={{\n rotate: openCollapse[app.routeName]\n ? '0deg'\n : '180deg',\n }}\n data-testid=\"svg-close-collapse\"\n onClick={(event) => {\n event.stopPropagation();\n setOpenCollapse({\n ...openCollapse,\n [app.routeName]: !openCollapse[app.routeName],\n });\n }}\n />\n )}\n\n {app.pinned && (\n <PushPinOutlined\n className={classes.pinIcon}\n style={{ opacity: pinnedApps[app.pinned] ? 1 : 0.3 }}\n onClick={(event) => {\n if (!app.pinned) {\n return;\n }\n\n event.stopPropagation();\n onTogglePinnedApp(\n app.pinned,\n !pinnedApps[app.pinned],\n );\n }}\n />\n )}\n </Box>\n </ListItem>\n\n {!!app.children?.length && (\n <Collapse in={openCollapse[app.routeName]}>\n <List>\n {app.children.map((child) => (\n <ListItemButton\n key={child.name}\n className={classes.nested}\n onClick={() => navigateTo(child.url)}\n title={child.url}\n >\n <ListItemIcon>\n <FiberManualRecord style={{ height: 12 }} />\n </ListItemIcon>\n <ListItemText\n primary={child.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n </ListItemButton>\n ))}\n </List>\n </Collapse>\n )}\n </Fragment>\n ))}\n </Fragment>\n ))}\n </List>\n </SwipeableDrawer>\n );\n};\n","import { ThemePalette } from './interface';\n\n/**\n * Define the dark palette using the same ThemePalette interface.\n * Any missing or extra keys compared to lightPalette will trigger a TypeScript error.\n */\nconst darkPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#1C1B1A',\n neutral100: '#1F1F1F',\n neutral150: '#262626',\n neutral200: '#2E2E2E',\n neutral250: '#383838',\n neutral300: '#424242',\n neutral400: '#4C4C4C',\n neutral500: '#666666',\n neutral600: '#808080',\n neutral700: '#A3A3A3',\n neutral750: '#B3B3B3',\n neutral800: '#CCCCCC',\n neutral900: '#F5F5F5',\n\n // Input and contrast\n contrast: '#FFFFFF',\n constrastOpacity50: 'rgba(255,255,255,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#B0B0B0',\n default: '#444444',\n muiPrimary: '#E9FB62',\n muiPrimaryBlack: '#FFFFFF',\n lightMuiPrimaryColorBackground: '#e9fb6214',\n lightBlueBackground: '#e9fb6214',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1890d5',\n muiSecondary: '#DE5B99',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#66BB6A',\n muiSuccessAlternate: '#81C784',\n\n // Transparency variants\n blackOpacity10: 'inherit',\n blackOpacity20: 'inherit',\n blackOpacity30: 'inherit',\n blackOpacity50: 'inherit',\n blackOpacity80: 'inherit',\n primaryOpacity10: 'rgba(233, 251, 98, 0.10)',\n primaryOpacity20: 'rgba(233, 251, 98, 0.20)',\n primaryOpacity30: 'rgba(233, 251, 98, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, .3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(255, 255, 255, 0.08)',\n // Active Button\n buttonActiveText: '#E9FB62',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#EF5350',\n};\n\nexport default darkPalette;\n","import { ThemePalette } from './interface';\n\n/**\n * Define the light palette using the ThemePalette interface.\n */\nconst lightPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#F0EBE6',\n neutral100: '#FAFAFA',\n neutral150: '#F4F4F4',\n neutral200: '#F1F1F1',\n neutral250: '#ECECEC',\n neutral300: '#E0E0E0',\n neutral400: '#C8C8C8',\n neutral500: '#BDBDBD',\n neutral600: '#999999',\n neutral700: '#878787',\n neutral750: '#6c6c6c',\n neutral800: '#555555',\n neutral900: '#4D4D4D',\n\n // Input and contrast\n contrast: '#000000',\n constrastOpacity50: 'rgba(0,0,0,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#606060',\n default: '#E0E0E0',\n muiPrimary: '#0781CE',\n muiPrimaryBlack: '#000000',\n lightMuiPrimaryColorBackground: '#eff4fb',\n lightBlueBackground: '#eff4fb',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1565c0',\n muiSecondary: '#A42966',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#4caf50',\n muiSuccessAlternate: '#357a38',\n\n // Transparency variants\n blackOpacity10: 'rgba(0,0,0,0.1)',\n blackOpacity20: 'rgba(0,0,0,0.2)',\n blackOpacity30: 'rgba(0,0,0,0.3)',\n blackOpacity50: 'rgba(0,0,0,0.5)',\n blackOpacity80: 'rgba(0,0,0,0.8)',\n primaryOpacity10: 'rgba(7, 129, 206, 0.10)',\n primaryOpacity20: 'rgba(7, 129, 206, 0.20)',\n primaryOpacity30: 'rgba(7, 129, 206, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, 0.3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(0, 0, 0, 0.04)',\n // Active Button\n buttonActiveText: '#0781CE',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#D32F2F',\n};\n\nexport default lightPalette;\n","import darkPalette from './colors/darkPalette';\nimport lightPalette from './colors/lightPalette';\n\nconst stylesheet = localStorage.getItem('@stylesheet');\nexport const isDarkModeEnabled = stylesheet === 'styles/style-dark.css';\nconst palette = isDarkModeEnabled ? darkPalette : lightPalette;\n\ninterface Colors {\n // General colors\n white: string;\n black: string;\n\n // Neutral\n neutral50: string;\n neutral100: string;\n neutral150: string;\n neutral200: string;\n neutral250: string;\n neutral300: string;\n neutral400: string;\n neutral500: string;\n neutral600: string;\n neutral700: string;\n neutral750: string;\n neutral800: string;\n neutral900: string;\n\n // Input and contrast\n contrast: string;\n constrastOpacity50: string;\n\n // Icon and Material UI colors\n iconSearch: string;\n default: string;\n muiPrimary: string;\n muiPrimaryBlack: string;\n lightMuiPrimaryColorBackground: string;\n lightBlueBackground: string;\n muiPrimaryAlternate: string;\n muiPrimaryHover: string;\n muiSecondary: string;\n muiSecondaryAlternate: string;\n muiSuccess: string;\n muiSuccessAlternate: string;\n\n // Transparency\n blackOpacity10: string;\n blackOpacity20: string;\n blackOpacity30: string;\n blackOpacity50: string;\n blackOpacity80: string;\n primaryOpacity10: string;\n primaryOpacity20: string;\n primaryOpacity30: string;\n secondaryAlternateOpacity30: string;\n blueOpacity08: string;\n whiteOpacity10: string;\n whiteOpacity20: string;\n whiteOpacity40: string;\n\n // Table rows and top bar\n topBar: string;\n // Error Button\n error: string;\n\n roundButton: {\n default: {\n border: string;\n color: string;\n disabled: {\n color: string;\n };\n hover: {\n background: string;\n };\n };\n filled: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n active: {\n color: string;\n hover: {\n background: string;\n };\n };\n contrast: {\n border: string;\n color: string;\n hover: {\n background: string;\n };\n };\n tableButton: {\n color: string;\n };\n focused: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n error: string;\n };\n\n movementCard: {\n default: {\n background: string;\n };\n disabled: {\n background: string;\n };\n pill: {\n color: string;\n background: string;\n };\n };\n\n rowProductCard: {\n locationSubtitle: string;\n };\n}\n\nexport const colors: Colors = {\n white: palette.white,\n black: palette.black,\n\n neutral50: palette.neutral50,\n neutral100: palette.neutral100,\n neutral150: palette.neutral150,\n neutral200: palette.neutral200,\n neutral250: palette.neutral250,\n neutral300: palette.neutral300,\n neutral400: palette.neutral400,\n neutral500: palette.neutral500,\n neutral600: palette.neutral600,\n neutral700: palette.neutral700,\n neutral750: palette.neutral750,\n neutral800: palette.neutral800,\n neutral900: palette.neutral900,\n\n // Input and contrast\n contrast: palette.contrast,\n constrastOpacity50: palette.constrastOpacity50,\n\n iconSearch: palette.iconSearch,\n default: palette.default,\n muiPrimary: palette.muiPrimary,\n muiPrimaryBlack: palette.muiPrimaryBlack,\n lightMuiPrimaryColorBackground: palette.lightMuiPrimaryColorBackground,\n lightBlueBackground: palette.lightBlueBackground,\n muiPrimaryAlternate: palette.muiPrimaryAlternate,\n muiPrimaryHover: palette.muiPrimaryHover,\n muiSecondary: palette.muiSecondary,\n muiSecondaryAlternate: palette.muiSecondaryAlternate,\n muiSuccess: palette.muiSuccess,\n muiSuccessAlternate: palette.muiSuccessAlternate,\n\n // Transparency\n blackOpacity10: palette.blackOpacity10,\n blackOpacity20: palette.blackOpacity20,\n blackOpacity30: palette.blackOpacity30,\n blackOpacity50: palette.blackOpacity50,\n blackOpacity80: palette.blackOpacity80,\n primaryOpacity10: palette.primaryOpacity10,\n primaryOpacity20: palette.primaryOpacity20,\n primaryOpacity30: palette.primaryOpacity30,\n secondaryAlternateOpacity30: palette.secondaryAlternateOpacity30,\n blueOpacity08: palette.blueOpacity08,\n whiteOpacity10: palette.whiteOpacity10,\n whiteOpacity20: palette.whiteOpacity20,\n whiteOpacity40: palette.whiteOpacity40,\n\n topBar: palette.topBar,\n error: palette.error,\n\n roundButton: {\n default: {\n border: palette.neutral600,\n color: palette.contrast,\n disabled: {\n color: palette.blackOpacity20,\n },\n hover: {\n background: palette.buttonHoverBackground,\n },\n },\n filled: {\n background: palette.neutral100,\n color: palette.blackOpacity80,\n hover: {\n background: palette.neutral250,\n },\n },\n active: {\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity20,\n },\n },\n contrast: {\n border: palette.buttonContrastBorder,\n color: palette.buttonContrastText,\n hover: {\n background: palette.whiteOpacity10,\n },\n },\n tableButton: {\n color: palette.neutral800,\n },\n focused: {\n background: palette.primaryOpacity20,\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity30,\n },\n },\n error: palette.error,\n },\n\n movementCard: {\n default: {\n background: palette.neutral100,\n },\n disabled: {\n background: palette.neutral250,\n },\n pill: {\n color: palette.neutral200,\n background: palette.neutral600,\n },\n },\n\n rowProductCard: {\n locationSubtitle: palette.neutral800,\n },\n};\n","import { useCallback, useMemo } from 'react';\nimport { useNavigate } from 'react-router';\n\nimport { icons } from '@natoora-libs/core/components';\nimport { featureNames, featuresAreEnabled } from '@/config/features';\n\ninterface DrawerAppChild {\n name: string;\n routeName: string;\n pinned: string;\n url: string;\n featureName?: string;\n shouldReload?: boolean;\n}\n\ninterface DrawerApp {\n name: string;\n routeName: string;\n featureNames: string[];\n pinned: string | null;\n icon: React.ReactElement;\n url: string;\n shouldReload?: boolean;\n children?: DrawerAppChild[];\n}\n\ninterface DrawerAppGroup {\n groupName: string;\n apps: DrawerApp[];\n}\n\nconst drawerAppGroup: DrawerAppGroup[] = [\n {\n groupName: 'Home',\n apps: [\n {\n name: 'Home',\n routeName: 'home',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconHome />,\n url: '/home',\n },\n ],\n },\n {\n groupName: 'App',\n apps: [\n {\n name: 'Notifications',\n routeName: 'appNotifications',\n featureNames: [featureNames.NOTIFICATIONS],\n pinned: 'notifications',\n icon: <icons.SvgIconNotification />,\n url: '/#/notifications',\n shouldReload: true,\n },\n {\n name: 'Promo Codes',\n routeName: 'promo_codes',\n featureNames: [featureNames.PROMO_CODES],\n pinned: 'promo_codes',\n icon: <icons.SvgIconPromoCode />,\n url: '/promo_codes',\n },\n {\n name: 'Search Categories',\n routeName: 'search-categories',\n featureNames: [featureNames.SEARCH_CATEGORIES],\n pinned: 'search_categories',\n icon: <icons.SvgIconSearchCategories />,\n url: '/search-categories',\n },\n {\n name: 'Content Management',\n routeName: 'content-management',\n featureNames: [featureNames.CONTENT_MANAGEMENT],\n pinned: 'content_management',\n icon: <icons.SvgIconContentManagement />,\n url: '/content-management',\n },\n ],\n },\n {\n groupName: 'Customer Service',\n apps: [\n {\n name: 'Aircall',\n routeName: 'recordedcalls',\n featureNames: [featureNames.AIRCALL],\n pinned: 'aircall',\n icon: <icons.SvgIconPhone />,\n url: '/air-call',\n },\n {\n name: 'Customers',\n routeName: 'customers',\n featureNames: [featureNames.CUSTOMERS],\n pinned: 'customers',\n icon: <icons.SvgIconAccount />,\n url: '/customers',\n children: [\n {\n name: 'Sites',\n routeName: 'customer-sites',\n pinned: 'customer-sites',\n url: '/customers/sites',\n },\n {\n name: 'Groups',\n routeName: 'customer-groups',\n pinned: 'customer-groups',\n url: '/customers/groups',\n },\n ],\n },\n {\n name: 'Orders',\n routeName: 'orders',\n featureNames: [featureNames.ORDERS],\n pinned: 'orders',\n icon: <icons.SvgIconOrders />,\n url: '/#/orders',\n shouldReload: true,\n },\n {\n name: 'Price Lists',\n routeName: 'price_list',\n featureNames: [featureNames.PRICE_LIST],\n pinned: 'price_list',\n icon: <icons.SvgIconPriceList />,\n url: '/#/price-list',\n shouldReload: true,\n },\n {\n name: 'Special Prices',\n routeName: 'special_prices',\n featureNames: [featureNames.SPECIAL_PRICES],\n pinned: 'special_prices',\n icon: <icons.SvgIconSpecialPrice />,\n url: '/#/pricing/special-prices',\n shouldReload: true,\n },\n ],\n },\n {\n groupName: 'Buying',\n apps: [\n {\n name: 'Purchase Orders',\n routeName: 'purchaseOrders',\n featureNames: [featureNames.PURCHASE_ORDERS],\n pinned: 'purchase_orders',\n icon: <icons.SvgIconBuying />,\n url: '/react/purchase-orders',\n shouldReload: true,\n },\n {\n name: 'Products',\n routeName: 'products',\n featureNames: [featureNames.PRODUCTS],\n pinned: 'products',\n icon: <icons.SvgIconProducts />,\n url: '/#/product-base-list',\n shouldReload: true,\n },\n {\n name: 'Suppliers',\n routeName: 'suppliers',\n featureNames: [featureNames.SUPPLIERS],\n pinned: 'suppliers',\n icon: <icons.SvgIconSupplier />,\n url: '/suppliers',\n },\n {\n name: 'Supplier Prices',\n routeName: 'supplier_prices',\n featureNames: [featureNames.SUPPLIER_PRICES],\n pinned: 'supplier_prices',\n icon: <icons.SvgIconSupplierPrices />,\n url: '/#/supplier-prices',\n shouldReload: true,\n },\n {\n name: 'Product Bulk Update',\n routeName: 'bulk-update',\n featureNames: [featureNames.BULK_UPDATE],\n pinned: 'product_bulk_update',\n icon: <icons.SvgIconImport />,\n url: '/bulk_update',\n },\n ],\n },\n {\n groupName: 'Operations',\n apps: [\n {\n name: 'Retail',\n routeName: 'retail',\n featureNames: [featureNames.RETAIL],\n pinned: 'retail',\n icon: <icons.SvgIconRetail />,\n url: '/#/retail/product-availability',\n shouldReload: true,\n },\n {\n name: 'Goods In',\n routeName: 'goodsin-list',\n featureNames: [featureNames.GOODS_IN],\n pinned: 'goods_in',\n icon: <icons.SvgIconGoodsin />,\n url: '/goodsin-list',\n },\n {\n name: 'Returns',\n routeName: 'goods-in-list',\n featureNames: [featureNames.RETURNS],\n pinned: 'returns',\n icon: <icons.SvgIconGoodsin />,\n url: '/returns',\n },\n {\n name: 'Stock and Locations',\n routeName: 'locations',\n featureNames: [featureNames.STOCK, featureNames.LOCATIONS],\n pinned: 'stock',\n icon: <icons.SvgIconLocation />,\n url: '/locations',\n children: [\n {\n name: 'Movements',\n routeName: 'movements',\n pinned: 'movements',\n url: '/movements',\n featureName: featureNames.STOCK_MOVEMENTS,\n },\n ],\n },\n {\n name: 'Kanban Cards',\n routeName: 'kanban',\n featureNames: [featureNames.KANBAN],\n pinned: 'kanban_cards',\n icon: <icons.SvgIconVkc />,\n url: '/#/kanbancards',\n shouldReload: true,\n },\n {\n name: 'Picking Stations',\n routeName: 'picking',\n featureNames: [featureNames.PICKING_STATIONS],\n pinned: 'picking_stations',\n icon: <icons.SvgIconScales />,\n url: '/#/pickingstation',\n shouldReload: true,\n },\n {\n name: 'Quality Control',\n routeName: 'qualityControl',\n featureNames: [featureNames.QUALITY_CONTROL],\n pinned: 'quality_control',\n icon: <icons.SvgIconQc />,\n url: '/#/quality-control',\n shouldReload: true,\n },\n {\n name: 'Service Delivery',\n routeName: 'runs',\n featureNames: [featureNames.SERVICE_DELIVERY],\n pinned: 'service_delivery',\n icon: <icons.SvgIconRuns />,\n url: '/#/transport',\n shouldReload: true,\n },\n {\n name: 'Ops Metrics',\n routeName: 'ops-metrics',\n featureNames: [featureNames.OPS_METRICS],\n pinned: 'ops_metrics',\n icon: <icons.SvgIconOpsMetrics />,\n url: '/ops-metrics',\n },\n ],\n },\n {\n groupName: 'Tools',\n apps: [\n {\n name: 'Accounts',\n routeName: 'accounts',\n featureNames: [featureNames.ACCOUNTS],\n pinned: 'accounts',\n icon: <icons.SvgIconAccounts />,\n url: '/#/accounts',\n shouldReload: true,\n },\n {\n name: 'Reports',\n routeName: 'reports',\n featureNames: [featureNames.REPORTS],\n pinned: 'reports',\n icon: <icons.SvgIconReports />,\n url: '/reports',\n shouldReload: true,\n },\n ],\n },\n {\n groupName: 'Settings',\n apps: [\n {\n name: 'Admin',\n routeName: 'admin',\n featureNames: [featureNames.ADMIN],\n pinned: 'admin',\n icon: <icons.SvgIconSetting />,\n url: '/admin',\n shouldReload: true,\n },\n {\n name: 'User Management',\n routeName: 'user-management',\n featureNames: [featureNames.USER_MANAGEMENT],\n pinned: 'users',\n icon: <icons.SvgIconUserManagement />,\n url: '/user-management',\n },\n {\n name: 'Logout',\n routeName: 'logout',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconLogin />,\n url: '/logout',\n },\n ],\n },\n {\n groupName: 'Release Notes',\n apps: [\n {\n name: 'Release Notes',\n routeName: 'release-notes',\n featureNames: [],\n pinned: null,\n // icon: <icons.SvgIconReleaseNote />,\n icon: <icons.SvgIconLogin />,\n url: '/react/release-notes',\n shouldReload: true,\n },\n ],\n },\n];\n\nexport const useGetDrawerAppList = ({\n enabledFeatures,\n reloadOnNavigate,\n}: {\n enabledFeatures: string[];\n reloadOnNavigate?: boolean;\n}) => {\n const navigate = useNavigate();\n\n const navigateTo = useCallback(\n (url: string) => {\n const isAngularRoute = url.startsWith('/#');\n const isMicroFrontendRoute =\n url === '/react/release-notes' ||\n url === '/react/purchase-orders' ||\n url === '/admin' ||\n url === '/reports';\n\n if (isAngularRoute || isMicroFrontendRoute || reloadOnNavigate) {\n window.location.assign(url);\n\n return;\n }\n\n return navigate(url);\n },\n [reloadOnNavigate],\n );\n\n const drawerAppList = useMemo(() => {\n if (!enabledFeatures?.length) {\n return [];\n }\n\n return drawerAppGroup\n .map((group) => {\n const enabledApps = group.apps\n .filter(\n (app) =>\n app.routeName === 'home' ||\n app.routeName === 'release-notes' ||\n app.routeName === 'logout' ||\n featuresAreEnabled({\n enabledFeatures,\n featureNames: app.featureNames,\n requireAll: false,\n }),\n )\n .map((app) => {\n const filteredChildren = app.children?.filter((child) => {\n if (child.featureName) {\n return enabledFeatures.includes(child.featureName);\n }\n\n return true;\n });\n\n return { ...app, children: filteredChildren };\n });\n\n return { ...group, apps: enabledApps };\n })\n .filter((group) => group.apps.length > 0);\n }, [enabledFeatures]);\n\n return {\n userSettingsUrl: '/#/user-settings',\n drawerAppList,\n navigateTo,\n };\n};\n","export const featureNames = {\n ACCOUNTS: 'accounts',\n ADMIN: 'admin',\n AIRCALL: 'aircall',\n BULK_UPDATE: 'product_bulk_update',\n CONTENT_MANAGEMENT: 'content_management',\n CUSTOMERS: 'customers',\n GOODS_IN: 'goods_in',\n KANBAN: 'kanban_cards',\n LOCATIONS: 'locations',\n NOTIFICATIONS: 'notifications',\n OPS_METRICS: 'ops_metrics',\n ORDERS: 'orders',\n PICKING_STATIONS: 'picking_stations',\n PRICE_LIST: 'price_list',\n PRODUCTS: 'products',\n PROMO_CODES: 'promo_codes',\n PURCHASE_ORDERS: 'purchase_orders',\n QUALITY_CONTROL: 'quality_control',\n REPORTS: 'reports',\n RETAIL: 'retail',\n RETURNS: 'returns',\n SEARCH_CATEGORIES: 'search_categories',\n SERVICE_DELIVERY: 'service_delivery',\n SPECIAL_PRICES: 'special_prices',\n STOCK: 'stock',\n STOCK_MOVEMENTS: 'stock_movements',\n SUPPLIERS: 'suppliers',\n SUPPLIER_PRICES: 'supplier_prices',\n USER_MANAGEMENT: 'users',\n};\n\nexport function featuresAreEnabled({\n enabledFeatures,\n featureNames,\n requireAll = true,\n}: {\n enabledFeatures: string[];\n featureNames: string[];\n requireAll?: boolean;\n}) {\n const storedPermissions = localStorage.getItem('permissions') || '';\n let enabled = false;\n\n if (requireAll) {\n enabled = featureNames.every(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n } else {\n enabled = featureNames.some(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n }\n\n return enabled;\n}\n","import { Box, Icon, IconButton, Tooltip } from '@mui/material';\nimport { useGetDrawerAppList } from '@/config/drawerAppList';\n\ntype PinnedItemsProps = {\n enabledFeatures: string[];\n pinnedApps: Record<string, boolean>;\n reloadOnNavigate?: boolean;\n};\n\nexport const PinnedItems = ({\n enabledFeatures,\n pinnedApps,\n reloadOnNavigate,\n}: PinnedItemsProps) => {\n const { drawerAppList, navigateTo } = useGetDrawerAppList({\n enabledFeatures,\n reloadOnNavigate,\n });\n const items = drawerAppList\n .flatMap((app) => app.apps)\n .filter((app) => app.pinned && pinnedApps[app.pinned]);\n\n return (\n <Box display=\"flex\" flexDirection=\"row\" gap={1.5}>\n {items.map((item) => (\n <Tooltip title={item.name} key={item.name}>\n <IconButton\n style={{ backgroundColor: 'gray', padding: 4 }}\n onClick={() => navigateTo(item.url)}\n >\n <Icon\n key={item.name}\n style={{ width: 32, height: 32, fill: 'white' }}\n >\n {item.icon}\n </Icon>\n </IconButton>\n </Tooltip>\n ))}\n </Box>\n );\n};\n","export const uiFeatureNames = {\n PURCHASE_ORDERS_REGIONS: 'purchases_regions',\n SUPPLIER_PORTAL_TAB: 'suppliers_portal_users_tab',\n SUPPLIER_PRICING_SECTION: 'suppliers_pricing_section',\n CUSTOMER_ESTIMATED_BASKET_SETTING: 'customers_estimated_basket_setting',\n ORDER_ISSUE_REPORTING: 'customers_order_issue_report_setting',\n CUSTOMER_PAYMENTS_SECTION: 'customers_payments_section',\n CUSTOMER_PREFERENCES_TAB: 'customers_preferences_tab',\n CUSTOMER_SUBSTITUTIONS_TAB: 'customers_substitutions_tab',\n PRODUCT_PREFERENCES_SECTION: 'product_preferences_section',\n};\n\nexport const uiFeaturesAreEnabled = (\n enabledUIFeatures: string[] | undefined,\n feature: string,\n) => enabledUIFeatures?.includes(feature);\n"],"mappings":"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","names":["import_react","import_components","featureNames","import_jsx_runtime","Icon","import_material","import_jsx_runtime"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/components/LeftDrawer/LeftDrawer.tsx","../src/resources/styles/colors/darkPalette.ts","../src/resources/styles/colors/lightPalette.ts","../src/resources/styles/colors.ts","../src/config/drawerAppList.tsx","../src/config/features.ts","../src/components/PinnedItems/PinnedItems.tsx","../src/config/uiFeatures.ts"],"sourcesContent":["export { LeftDrawer } from './components/LeftDrawer/LeftDrawer';\nexport { PinnedItems } from './components/PinnedItems/PinnedItems';\nexport { useGetDrawerAppList } from './config/drawerAppList';\nexport { featureNames, featuresAreEnabled } from './config/features';\nexport { uiFeatureNames, uiFeaturesAreEnabled } from './config/uiFeatures';\n","import { Fragment, useState } from 'react';\n\nimport {\n PushPinOutlined,\n FiberManualRecord,\n ExpandLess,\n} from '@mui/icons-material';\nimport {\n AppBar,\n Collapse,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n ListSubheader,\n SwipeableDrawer,\n Toolbar,\n ListItemButton,\n Box,\n} from '@mui/material';\nimport Icon from '@mui/material/Icon';\nimport { RoundButton, UserBust } from '@natoora-libs/core/components';\nimport { makeStyles } from 'tss-react/mui';\n\nimport { colors } from '@/resources/styles/colors';\n\nimport { useGetDrawerAppList } from '../../config/drawerAppList';\n\nconst useStyles = makeStyles()((theme) => ({\n subheader: {\n textTransform: 'uppercase',\n fontSize: theme.spacing(1.5),\n },\n topBar: {\n backgroundColor: theme.palette.secondary.dark,\n width: theme.spacing(40),\n padding: theme.spacing(2),\n display: 'flex',\n alignItems: 'end',\n justifyContent: 'space-between',\n },\n drawer: {\n alignContent: 'space-between',\n flexDirection: 'column',\n minWidth: theme.spacing(80),\n },\n iconMenu: {\n height: '40px',\n width: '40px',\n opacity: 1,\n fill: colors.neutral700,\n },\n pinIcon: {\n height: '16px',\n width: '16px',\n fill: colors.neutral700,\n opacity: 0.5,\n '&:hover': {\n opacity: 1,\n cursor: 'pointer',\n },\n },\n expandIcon: {\n height: '22px',\n width: '22px',\n fill: colors.neutral700,\n },\n nested: {\n paddingLeft: theme.spacing(6),\n border: colors.neutral200,\n },\n appName: {\n '& .MuiTypography-body2': {\n fontWeight: 700,\n },\n },\n}));\n\ninterface LeftDrawerProps {\n open: boolean;\n enabledFeatures: string[];\n pinnedApps: Record<string, boolean>;\n user: {\n profile_picture: string;\n first_name: string;\n last_name: string;\n username: string;\n };\n reloadOnNavigate?: boolean;\n handleOpen: () => void;\n handleClose: () => void;\n onLogout: () => void;\n onTogglePinnedApp: (name: string, new_value: boolean) => void;\n}\n\nexport const LeftDrawer = ({\n enabledFeatures,\n pinnedApps,\n open,\n user,\n reloadOnNavigate,\n handleClose,\n handleOpen,\n onLogout,\n onTogglePinnedApp,\n}: LeftDrawerProps) => {\n const [openCollapse, setOpenCollapse] = useState({});\n const { userSettingsUrl, drawerAppList, navigateTo } =\n useGetDrawerAppList(enabledFeatures);\n\n const { classes } = useStyles();\n\n return (\n <SwipeableDrawer\n className={classes.drawer}\n id=\"primary-menu\"\n onClose={handleClose}\n onOpen={handleOpen}\n open={open}\n >\n <AppBar position=\"static\">\n <Toolbar className={classes.topBar}>\n <UserBust\n user={user}\n avatarProps={{ height: 50, width: 50 }}\n typographyProps={{\n name: { variant: 'subtitle1', component: 'div' },\n username: { variant: 'caption', component: 'div' },\n }}\n />\n <RoundButton\n icon=\"edit\"\n isContrast\n onClick={() => navigateTo(userSettingsUrl)}\n size=\"small\"\n tooltip=\"User Settings\"\n />\n </Toolbar>\n </AppBar>\n\n <List>\n {drawerAppList.map((group) => (\n <Fragment key={group.groupName}>\n <ListSubheader disableSticky className={classes.subheader}>\n {group.groupName}\n </ListSubheader>\n\n {group.apps.map((app) => (\n <Fragment key={`${group.groupName}_${app.name}`}>\n <ListItem\n key={app.name}\n title={app.url}\n onClick={() => {\n if (app.routeName === 'logout') {\n return onLogout();\n }\n\n return navigateTo(app.url);\n }}\n >\n <ListItemIcon>\n <Icon className={classes.iconMenu}>{app.icon}</Icon>\n </ListItemIcon>\n <ListItemText\n className={classes.appName}\n primary={app.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n\n <Box\n display=\"flex\"\n gap={2}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {!!app.children?.length && (\n <ExpandLess\n className={classes.expandIcon}\n style={{\n rotate: openCollapse[app.routeName]\n ? '0deg'\n : '180deg',\n }}\n data-testid=\"svg-close-collapse\"\n onClick={(event) => {\n event.stopPropagation();\n setOpenCollapse({\n ...openCollapse,\n [app.routeName]: !openCollapse[app.routeName],\n });\n }}\n />\n )}\n\n {app.pinned && (\n <PushPinOutlined\n className={classes.pinIcon}\n style={{ opacity: pinnedApps[app.pinned] ? 1 : 0.3 }}\n onClick={(event) => {\n if (!app.pinned) {\n return;\n }\n\n event.stopPropagation();\n onTogglePinnedApp(\n app.pinned,\n !pinnedApps[app.pinned],\n );\n }}\n />\n )}\n </Box>\n </ListItem>\n\n {!!app.children?.length && (\n <Collapse in={openCollapse[app.routeName]}>\n <List>\n {app.children.map((child) => (\n <ListItemButton\n key={child.name}\n className={classes.nested}\n onClick={() => navigateTo(child.url)}\n title={child.url}\n >\n <ListItemIcon>\n <FiberManualRecord style={{ height: 12 }} />\n </ListItemIcon>\n <ListItemText\n primary={child.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n </ListItemButton>\n ))}\n </List>\n </Collapse>\n )}\n </Fragment>\n ))}\n </Fragment>\n ))}\n </List>\n </SwipeableDrawer>\n );\n};\n","import { ThemePalette } from './interface';\n\n/**\n * Define the dark palette using the same ThemePalette interface.\n * Any missing or extra keys compared to lightPalette will trigger a TypeScript error.\n */\nconst darkPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#1C1B1A',\n neutral100: '#1F1F1F',\n neutral150: '#262626',\n neutral200: '#2E2E2E',\n neutral250: '#383838',\n neutral300: '#424242',\n neutral400: '#4C4C4C',\n neutral500: '#666666',\n neutral600: '#808080',\n neutral700: '#A3A3A3',\n neutral750: '#B3B3B3',\n neutral800: '#CCCCCC',\n neutral900: '#F5F5F5',\n\n // Input and contrast\n contrast: '#FFFFFF',\n constrastOpacity50: 'rgba(255,255,255,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#B0B0B0',\n default: '#444444',\n muiPrimary: '#E9FB62',\n muiPrimaryBlack: '#FFFFFF',\n lightMuiPrimaryColorBackground: '#e9fb6214',\n lightBlueBackground: '#e9fb6214',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1890d5',\n muiSecondary: '#DE5B99',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#66BB6A',\n muiSuccessAlternate: '#81C784',\n\n // Transparency variants\n blackOpacity10: 'inherit',\n blackOpacity20: 'inherit',\n blackOpacity30: 'inherit',\n blackOpacity50: 'inherit',\n blackOpacity80: 'inherit',\n primaryOpacity10: 'rgba(233, 251, 98, 0.10)',\n primaryOpacity20: 'rgba(233, 251, 98, 0.20)',\n primaryOpacity30: 'rgba(233, 251, 98, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, .3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(255, 255, 255, 0.08)',\n // Active Button\n buttonActiveText: '#E9FB62',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#EF5350',\n};\n\nexport default darkPalette;\n","import { ThemePalette } from './interface';\n\n/**\n * Define the light palette using the ThemePalette interface.\n */\nconst lightPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#F0EBE6',\n neutral100: '#FAFAFA',\n neutral150: '#F4F4F4',\n neutral200: '#F1F1F1',\n neutral250: '#ECECEC',\n neutral300: '#E0E0E0',\n neutral400: '#C8C8C8',\n neutral500: '#BDBDBD',\n neutral600: '#999999',\n neutral700: '#878787',\n neutral750: '#6c6c6c',\n neutral800: '#555555',\n neutral900: '#4D4D4D',\n\n // Input and contrast\n contrast: '#000000',\n constrastOpacity50: 'rgba(0,0,0,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#606060',\n default: '#E0E0E0',\n muiPrimary: '#0781CE',\n muiPrimaryBlack: '#000000',\n lightMuiPrimaryColorBackground: '#eff4fb',\n lightBlueBackground: '#eff4fb',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1565c0',\n muiSecondary: '#A42966',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#4caf50',\n muiSuccessAlternate: '#357a38',\n\n // Transparency variants\n blackOpacity10: 'rgba(0,0,0,0.1)',\n blackOpacity20: 'rgba(0,0,0,0.2)',\n blackOpacity30: 'rgba(0,0,0,0.3)',\n blackOpacity50: 'rgba(0,0,0,0.5)',\n blackOpacity80: 'rgba(0,0,0,0.8)',\n primaryOpacity10: 'rgba(7, 129, 206, 0.10)',\n primaryOpacity20: 'rgba(7, 129, 206, 0.20)',\n primaryOpacity30: 'rgba(7, 129, 206, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, 0.3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(0, 0, 0, 0.04)',\n // Active Button\n buttonActiveText: '#0781CE',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#D32F2F',\n};\n\nexport default lightPalette;\n","import darkPalette from './colors/darkPalette';\nimport lightPalette from './colors/lightPalette';\n\nconst stylesheet = localStorage.getItem('@stylesheet');\nexport const isDarkModeEnabled = stylesheet === 'styles/style-dark.css';\nconst palette = isDarkModeEnabled ? darkPalette : lightPalette;\n\ninterface Colors {\n // General colors\n white: string;\n black: string;\n\n // Neutral\n neutral50: string;\n neutral100: string;\n neutral150: string;\n neutral200: string;\n neutral250: string;\n neutral300: string;\n neutral400: string;\n neutral500: string;\n neutral600: string;\n neutral700: string;\n neutral750: string;\n neutral800: string;\n neutral900: string;\n\n // Input and contrast\n contrast: string;\n constrastOpacity50: string;\n\n // Icon and Material UI colors\n iconSearch: string;\n default: string;\n muiPrimary: string;\n muiPrimaryBlack: string;\n lightMuiPrimaryColorBackground: string;\n lightBlueBackground: string;\n muiPrimaryAlternate: string;\n muiPrimaryHover: string;\n muiSecondary: string;\n muiSecondaryAlternate: string;\n muiSuccess: string;\n muiSuccessAlternate: string;\n\n // Transparency\n blackOpacity10: string;\n blackOpacity20: string;\n blackOpacity30: string;\n blackOpacity50: string;\n blackOpacity80: string;\n primaryOpacity10: string;\n primaryOpacity20: string;\n primaryOpacity30: string;\n secondaryAlternateOpacity30: string;\n blueOpacity08: string;\n whiteOpacity10: string;\n whiteOpacity20: string;\n whiteOpacity40: string;\n\n // Table rows and top bar\n topBar: string;\n // Error Button\n error: string;\n\n roundButton: {\n default: {\n border: string;\n color: string;\n disabled: {\n color: string;\n };\n hover: {\n background: string;\n };\n };\n filled: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n active: {\n color: string;\n hover: {\n background: string;\n };\n };\n contrast: {\n border: string;\n color: string;\n hover: {\n background: string;\n };\n };\n tableButton: {\n color: string;\n };\n focused: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n error: string;\n };\n\n movementCard: {\n default: {\n background: string;\n };\n disabled: {\n background: string;\n };\n pill: {\n color: string;\n background: string;\n };\n };\n\n rowProductCard: {\n locationSubtitle: string;\n };\n}\n\nexport const colors: Colors = {\n white: palette.white,\n black: palette.black,\n\n neutral50: palette.neutral50,\n neutral100: palette.neutral100,\n neutral150: palette.neutral150,\n neutral200: palette.neutral200,\n neutral250: palette.neutral250,\n neutral300: palette.neutral300,\n neutral400: palette.neutral400,\n neutral500: palette.neutral500,\n neutral600: palette.neutral600,\n neutral700: palette.neutral700,\n neutral750: palette.neutral750,\n neutral800: palette.neutral800,\n neutral900: palette.neutral900,\n\n // Input and contrast\n contrast: palette.contrast,\n constrastOpacity50: palette.constrastOpacity50,\n\n iconSearch: palette.iconSearch,\n default: palette.default,\n muiPrimary: palette.muiPrimary,\n muiPrimaryBlack: palette.muiPrimaryBlack,\n lightMuiPrimaryColorBackground: palette.lightMuiPrimaryColorBackground,\n lightBlueBackground: palette.lightBlueBackground,\n muiPrimaryAlternate: palette.muiPrimaryAlternate,\n muiPrimaryHover: palette.muiPrimaryHover,\n muiSecondary: palette.muiSecondary,\n muiSecondaryAlternate: palette.muiSecondaryAlternate,\n muiSuccess: palette.muiSuccess,\n muiSuccessAlternate: palette.muiSuccessAlternate,\n\n // Transparency\n blackOpacity10: palette.blackOpacity10,\n blackOpacity20: palette.blackOpacity20,\n blackOpacity30: palette.blackOpacity30,\n blackOpacity50: palette.blackOpacity50,\n blackOpacity80: palette.blackOpacity80,\n primaryOpacity10: palette.primaryOpacity10,\n primaryOpacity20: palette.primaryOpacity20,\n primaryOpacity30: palette.primaryOpacity30,\n secondaryAlternateOpacity30: palette.secondaryAlternateOpacity30,\n blueOpacity08: palette.blueOpacity08,\n whiteOpacity10: palette.whiteOpacity10,\n whiteOpacity20: palette.whiteOpacity20,\n whiteOpacity40: palette.whiteOpacity40,\n\n topBar: palette.topBar,\n error: palette.error,\n\n roundButton: {\n default: {\n border: palette.neutral600,\n color: palette.contrast,\n disabled: {\n color: palette.blackOpacity20,\n },\n hover: {\n background: palette.buttonHoverBackground,\n },\n },\n filled: {\n background: palette.neutral100,\n color: palette.blackOpacity80,\n hover: {\n background: palette.neutral250,\n },\n },\n active: {\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity20,\n },\n },\n contrast: {\n border: palette.buttonContrastBorder,\n color: palette.buttonContrastText,\n hover: {\n background: palette.whiteOpacity10,\n },\n },\n tableButton: {\n color: palette.neutral800,\n },\n focused: {\n background: palette.primaryOpacity20,\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity30,\n },\n },\n error: palette.error,\n },\n\n movementCard: {\n default: {\n background: palette.neutral100,\n },\n disabled: {\n background: palette.neutral250,\n },\n pill: {\n color: palette.neutral200,\n background: palette.neutral600,\n },\n },\n\n rowProductCard: {\n locationSubtitle: palette.neutral800,\n },\n};\n","import { useCallback, useMemo } from 'react';\nimport { useNavigate } from 'react-router';\n\nimport { icons } from '@natoora-libs/core/components';\nimport { featureNames, featuresAreEnabled } from '@/config/features';\n\ninterface DrawerAppChild {\n name: string;\n routeName: string;\n pinned: string;\n url: string;\n featureName?: string;\n}\n\ninterface DrawerApp {\n name: string;\n routeName: string;\n featureNames: string[];\n pinned: string | null;\n icon: React.ReactElement;\n url: string;\n children?: DrawerAppChild[];\n}\n\ninterface DrawerAppGroup {\n groupName: string;\n apps: DrawerApp[];\n}\n\nconst drawerAppGroup: DrawerAppGroup[] = [\n {\n groupName: 'Home',\n apps: [\n {\n name: 'Home',\n routeName: 'home',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconHome />,\n url: '/home',\n },\n ],\n },\n {\n groupName: 'App',\n apps: [\n {\n name: 'Notifications',\n routeName: 'appNotifications',\n featureNames: [featureNames.NOTIFICATIONS],\n pinned: 'notifications',\n icon: <icons.SvgIconNotification />,\n url: '/#/notifications',\n },\n {\n name: 'Promo Codes',\n routeName: 'promo_codes',\n featureNames: [featureNames.PROMO_CODES],\n pinned: 'promo_codes',\n icon: <icons.SvgIconPromoCode />,\n url: '/promo_codes',\n },\n {\n name: 'Search Categories',\n routeName: 'search-categories',\n featureNames: [featureNames.SEARCH_CATEGORIES],\n pinned: 'search_categories',\n icon: <icons.SvgIconSearchCategories />,\n url: '/search-categories',\n },\n {\n name: 'Content Management',\n routeName: 'content-management',\n featureNames: [featureNames.CONTENT_MANAGEMENT],\n pinned: 'content_management',\n icon: <icons.SvgIconContentManagement />,\n url: '/content-management',\n },\n ],\n },\n {\n groupName: 'Customer Service',\n apps: [\n {\n name: 'Aircall',\n routeName: 'recordedcalls',\n featureNames: [featureNames.AIRCALL],\n pinned: 'aircall',\n icon: <icons.SvgIconPhone />,\n url: '/air-call',\n },\n {\n name: 'Customers',\n routeName: 'customers',\n featureNames: [featureNames.CUSTOMERS],\n pinned: 'customers',\n icon: <icons.SvgIconAccount />,\n url: '/customers',\n children: [\n {\n name: 'Sites',\n routeName: 'customer-sites',\n pinned: 'customer-sites',\n url: '/customers/sites',\n },\n {\n name: 'Groups',\n routeName: 'customer-groups',\n pinned: 'customer-groups',\n url: '/customers/groups',\n },\n ],\n },\n {\n name: 'Orders',\n routeName: 'orders',\n featureNames: [featureNames.ORDERS],\n pinned: 'orders',\n icon: <icons.SvgIconOrders />,\n url: '/#/orders',\n },\n {\n name: 'Price Lists',\n routeName: 'price_list',\n featureNames: [featureNames.PRICE_LIST],\n pinned: 'price_list',\n icon: <icons.SvgIconPriceList />,\n url: '/#/price-list',\n },\n {\n name: 'Special Prices',\n routeName: 'special_prices',\n featureNames: [featureNames.SPECIAL_PRICES],\n pinned: 'special_prices',\n icon: <icons.SvgIconSpecialPrice />,\n url: '/#/pricing/special-prices',\n },\n ],\n },\n {\n groupName: 'Buying',\n apps: [\n {\n name: 'Purchase Orders',\n routeName: 'purchaseOrders',\n featureNames: [featureNames.PURCHASE_ORDERS],\n pinned: 'purchase_orders',\n icon: <icons.SvgIconBuying />,\n url: '/react/purchase-orders',\n },\n {\n name: 'Products',\n routeName: 'products',\n featureNames: [featureNames.PRODUCTS],\n pinned: 'products',\n icon: <icons.SvgIconProducts />,\n url: '/#/product-base-list',\n },\n {\n name: 'Suppliers',\n routeName: 'suppliers',\n featureNames: [featureNames.SUPPLIERS],\n pinned: 'suppliers',\n icon: <icons.SvgIconSupplier />,\n url: '/suppliers',\n },\n {\n name: 'Supplier Prices',\n routeName: 'supplier_prices',\n featureNames: [featureNames.SUPPLIER_PRICES],\n pinned: 'supplier_prices',\n icon: <icons.SvgIconSupplierPrices />,\n url: '/#/supplier-prices',\n },\n {\n name: 'Product Bulk Update',\n routeName: 'bulk-update',\n featureNames: [featureNames.BULK_UPDATE],\n pinned: 'product_bulk_update',\n icon: <icons.SvgIconImport />,\n url: '/bulk_update',\n },\n ],\n },\n {\n groupName: 'Operations',\n apps: [\n {\n name: 'Retail',\n routeName: 'retail',\n featureNames: [featureNames.RETAIL],\n pinned: 'retail',\n icon: <icons.SvgIconRetail />,\n url: '/#/retail/product-availability',\n },\n {\n name: 'Goods In',\n routeName: 'goodsin-list',\n featureNames: [featureNames.GOODS_IN],\n pinned: 'goods_in',\n icon: <icons.SvgIconGoodsin />,\n url: '/goodsin-list',\n },\n {\n name: 'Returns',\n routeName: 'goods-in-list',\n featureNames: [featureNames.RETURNS],\n pinned: 'returns',\n icon: <icons.SvgIconGoodsin />,\n url: '/returns',\n },\n {\n name: 'Stock and Locations',\n routeName: 'locations',\n featureNames: [featureNames.STOCK, featureNames.LOCATIONS],\n pinned: 'stock',\n icon: <icons.SvgIconLocation />,\n url: '/locations',\n children: [\n {\n name: 'Movements',\n routeName: 'movements',\n pinned: 'movements',\n url: '/movements',\n featureName: featureNames.STOCK_MOVEMENTS,\n },\n ],\n },\n {\n name: 'Kanban Cards',\n routeName: 'kanban',\n featureNames: [featureNames.KANBAN],\n pinned: 'kanban_cards',\n icon: <icons.SvgIconVkc />,\n url: '/#/kanbancards',\n },\n {\n name: 'Picking Stations',\n routeName: 'picking',\n featureNames: [featureNames.PICKING_STATIONS],\n pinned: 'picking_stations',\n icon: <icons.SvgIconScales />,\n url: '/#/pickingstation',\n },\n {\n name: 'Quality Control',\n routeName: 'qualityControl',\n featureNames: [featureNames.QUALITY_CONTROL],\n pinned: 'quality_control',\n icon: <icons.SvgIconQc />,\n url: '/#/quality-control',\n },\n {\n name: 'Service Delivery',\n routeName: 'runs',\n featureNames: [featureNames.SERVICE_DELIVERY],\n pinned: 'service_delivery',\n icon: <icons.SvgIconRuns />,\n url: '/#/transport',\n },\n {\n name: 'Ops Metrics',\n routeName: 'ops-metrics',\n featureNames: [featureNames.OPS_METRICS],\n pinned: 'ops_metrics',\n icon: <icons.SvgIconOpsMetrics />,\n url: '/ops-metrics',\n },\n ],\n },\n {\n groupName: 'Tools',\n apps: [\n {\n name: 'Accounts',\n routeName: 'accounts',\n featureNames: [featureNames.ACCOUNTS],\n pinned: 'accounts',\n icon: <icons.SvgIconAccounts />,\n url: '/#/accounts',\n },\n {\n name: 'Reports',\n routeName: 'reports',\n featureNames: [featureNames.REPORTS],\n pinned: 'reports',\n icon: <icons.SvgIconReports />,\n url: '/reports',\n },\n ],\n },\n {\n groupName: 'Settings',\n apps: [\n {\n name: 'Admin',\n routeName: 'admin',\n featureNames: [featureNames.ADMIN],\n pinned: 'admin',\n icon: <icons.SvgIconSetting />,\n url: '/admin',\n },\n {\n name: 'User Management',\n routeName: 'user-management',\n featureNames: [featureNames.USER_MANAGEMENT],\n pinned: 'users',\n icon: <icons.SvgIconUserManagement />,\n url: '/user-management',\n },\n {\n name: 'Logout',\n routeName: 'logout',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconLogin />,\n url: '/logout',\n },\n ],\n },\n {\n groupName: 'Release Notes',\n apps: [\n {\n name: 'Release Notes',\n routeName: 'release-notes',\n featureNames: [],\n pinned: null,\n // icon: <icons.SvgIconReleaseNote />,\n icon: <icons.SvgIconLogin />,\n url: '/react/release-notes',\n },\n ],\n },\n];\n\nexport const useGetDrawerAppList = (enabledFeatures: string[]) => {\n const navigate = useNavigate();\n\n const navigateTo = useCallback((url: string) => {\n const isAngularRoute = url.startsWith('/#');\n const isMicroFrontendRoute =\n url === '/react/release-notes' ||\n url === '/react/purchase-orders' ||\n url === '/admin' ||\n url === '/reports';\n\n if (isAngularRoute || isMicroFrontendRoute) {\n window.location.assign(url);\n\n return;\n }\n\n const isMicroFrontendHost = [\n '/react/purchase-orders',\n '/react/release-notes',\n ].some((route) => window.location.pathname.includes(route));\n if (isMicroFrontendHost) {\n window.location.assign('/react' + url);\n }\n\n return navigate(url);\n }, []);\n\n const drawerAppList = useMemo(() => {\n if (!enabledFeatures?.length) {\n return [];\n }\n\n return drawerAppGroup\n .map((group) => {\n const enabledApps = group.apps\n .filter(\n (app) =>\n app.routeName === 'home' ||\n app.routeName === 'release-notes' ||\n app.routeName === 'logout' ||\n featuresAreEnabled({\n enabledFeatures,\n featureNames: app.featureNames,\n requireAll: false,\n }),\n )\n .map((app) => {\n const filteredChildren = app.children?.filter((child) => {\n if (child.featureName) {\n return enabledFeatures.includes(child.featureName);\n }\n\n return true;\n });\n\n return { ...app, children: filteredChildren };\n });\n\n return { ...group, apps: enabledApps };\n })\n .filter((group) => group.apps.length > 0);\n }, [enabledFeatures]);\n\n return {\n userSettingsUrl: '/#/user-settings',\n drawerAppList,\n navigateTo,\n };\n};\n","export const featureNames = {\n ACCOUNTS: 'accounts',\n ADMIN: 'admin',\n AIRCALL: 'aircall',\n BULK_UPDATE: 'product_bulk_update',\n CONTENT_MANAGEMENT: 'content_management',\n CUSTOMERS: 'customers',\n GOODS_IN: 'goods_in',\n KANBAN: 'kanban_cards',\n LOCATIONS: 'locations',\n NOTIFICATIONS: 'notifications',\n OPS_METRICS: 'ops_metrics',\n ORDERS: 'orders',\n PICKING_STATIONS: 'picking_stations',\n PRICE_LIST: 'price_list',\n PRODUCTS: 'products',\n PROMO_CODES: 'promo_codes',\n PURCHASE_ORDERS: 'purchase_orders',\n QUALITY_CONTROL: 'quality_control',\n REPORTS: 'reports',\n RETAIL: 'retail',\n RETURNS: 'returns',\n SEARCH_CATEGORIES: 'search_categories',\n SERVICE_DELIVERY: 'service_delivery',\n SPECIAL_PRICES: 'special_prices',\n STOCK: 'stock',\n STOCK_MOVEMENTS: 'stock_movements',\n SUPPLIERS: 'suppliers',\n SUPPLIER_PRICES: 'supplier_prices',\n USER_MANAGEMENT: 'users',\n};\n\nexport function featuresAreEnabled({\n enabledFeatures,\n featureNames,\n requireAll = true,\n}: {\n enabledFeatures: string[];\n featureNames: string[];\n requireAll?: boolean;\n}) {\n const storedPermissions = localStorage.getItem('permissions') || '';\n let enabled = false;\n\n if (requireAll) {\n enabled = featureNames.every(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n } else {\n enabled = featureNames.some(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n }\n\n return enabled;\n}\n","import { Box, Icon, IconButton, Tooltip } from '@mui/material';\nimport { useGetDrawerAppList } from '@/config/drawerAppList';\n\ntype PinnedItemsProps = {\n enabledFeatures: string[];\n pinnedApps: Record<string, boolean>;\n};\n\nexport const PinnedItems = ({\n enabledFeatures,\n pinnedApps,\n}: PinnedItemsProps) => {\n const { drawerAppList, navigateTo } = useGetDrawerAppList(enabledFeatures);\n const items = drawerAppList\n .flatMap((app) => app.apps)\n .filter((app) => app.pinned && pinnedApps[app.pinned]);\n\n return (\n <Box display=\"flex\" flexDirection=\"row\" gap={1.5}>\n {items.map((item) => (\n <Tooltip title={item.name} key={item.name}>\n <IconButton\n style={{ backgroundColor: 'gray', padding: 4 }}\n onClick={() => navigateTo(item.url)}\n >\n <Icon\n key={item.name}\n style={{ width: 32, height: 32, fill: 'white' }}\n >\n {item.icon}\n </Icon>\n </IconButton>\n </Tooltip>\n ))}\n </Box>\n );\n};\n","export const uiFeatureNames = {\n PURCHASE_ORDERS_REGIONS: 'purchases_regions',\n SUPPLIER_PORTAL_TAB: 'suppliers_portal_users_tab',\n SUPPLIER_PRICING_SECTION: 'suppliers_pricing_section',\n CUSTOMER_ESTIMATED_BASKET_SETTING: 'customers_estimated_basket_setting',\n ORDER_ISSUE_REPORTING: 'customers_order_issue_report_setting',\n CUSTOMER_PAYMENTS_SECTION: 'customers_payments_section',\n\n CUSTOMER_DASHBOARD_TAB: 'customers_dashboard_tab',\n CUSTOMER_DETAILS_TAB: 'customers_details_tab',\n CUSTOMER_TRANSPORT_TAB: 'customers_transport_tab',\n CUSTOMER_FINANCE_TAB: 'customers_finance_tab',\n CUSTOMER_ACTIVITY_TAB: 'customers_activity_tab',\n CUSTOMER_APP_TAB: 'customers_app_tab',\n CUSTOMER_STANDING_ORDERS_TAB: 'customers_standing_orders_tab',\n CUSTOMER_SUBSTITUTIONS_TAB: 'customers_substitutions_tab',\n CUSTOMER_PREFERENCES_TAB: 'customers_preferences_tab',\n\n PRODUCT_PREFERENCES_SECTION: 'product_preferences_section',\n};\n\nexport const uiFeaturesAreEnabled = (\n enabledUIFeatures: string[] | undefined,\n feature: string,\n) => enabledUIFeatures?.includes(feature);\n"],"mappings":"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","names":["import_react","import_components","featureNames","import_jsx_runtime","Icon","import_material","import_jsx_runtime"]}
package/dist/index.d.cts CHANGED
@@ -21,9 +21,8 @@ declare const LeftDrawer: ({ enabledFeatures, pinnedApps, open, user, reloadOnNa
21
21
  type PinnedItemsProps = {
22
22
  enabledFeatures: string[];
23
23
  pinnedApps: Record<string, boolean>;
24
- reloadOnNavigate?: boolean;
25
24
  };
26
- declare const PinnedItems: ({ enabledFeatures, pinnedApps, reloadOnNavigate, }: PinnedItemsProps) => react_jsx_runtime.JSX.Element;
25
+ declare const PinnedItems: ({ enabledFeatures, pinnedApps, }: PinnedItemsProps) => react_jsx_runtime.JSX.Element;
27
26
 
28
27
  interface DrawerAppChild {
29
28
  name: string;
@@ -31,12 +30,8 @@ interface DrawerAppChild {
31
30
  pinned: string;
32
31
  url: string;
33
32
  featureName?: string;
34
- shouldReload?: boolean;
35
33
  }
36
- declare const useGetDrawerAppList: ({ enabledFeatures, reloadOnNavigate, }: {
37
- enabledFeatures: string[];
38
- reloadOnNavigate?: boolean;
39
- }) => {
34
+ declare const useGetDrawerAppList: (enabledFeatures: string[]) => {
40
35
  userSettingsUrl: string;
41
36
  drawerAppList: {
42
37
  apps: {
@@ -47,7 +42,6 @@ declare const useGetDrawerAppList: ({ enabledFeatures, reloadOnNavigate, }: {
47
42
  pinned: string | null;
48
43
  icon: React.ReactElement;
49
44
  url: string;
50
- shouldReload?: boolean;
51
45
  }[];
52
46
  groupName: string;
53
47
  }[];
@@ -98,8 +92,15 @@ declare const uiFeatureNames: {
98
92
  CUSTOMER_ESTIMATED_BASKET_SETTING: string;
99
93
  ORDER_ISSUE_REPORTING: string;
100
94
  CUSTOMER_PAYMENTS_SECTION: string;
101
- CUSTOMER_PREFERENCES_TAB: string;
95
+ CUSTOMER_DASHBOARD_TAB: string;
96
+ CUSTOMER_DETAILS_TAB: string;
97
+ CUSTOMER_TRANSPORT_TAB: string;
98
+ CUSTOMER_FINANCE_TAB: string;
99
+ CUSTOMER_ACTIVITY_TAB: string;
100
+ CUSTOMER_APP_TAB: string;
101
+ CUSTOMER_STANDING_ORDERS_TAB: string;
102
102
  CUSTOMER_SUBSTITUTIONS_TAB: string;
103
+ CUSTOMER_PREFERENCES_TAB: string;
103
104
  PRODUCT_PREFERENCES_SECTION: string;
104
105
  };
105
106
  declare const uiFeaturesAreEnabled: (enabledUIFeatures: string[] | undefined, feature: string) => boolean | undefined;
package/dist/index.d.ts CHANGED
@@ -21,9 +21,8 @@ declare const LeftDrawer: ({ enabledFeatures, pinnedApps, open, user, reloadOnNa
21
21
  type PinnedItemsProps = {
22
22
  enabledFeatures: string[];
23
23
  pinnedApps: Record<string, boolean>;
24
- reloadOnNavigate?: boolean;
25
24
  };
26
- declare const PinnedItems: ({ enabledFeatures, pinnedApps, reloadOnNavigate, }: PinnedItemsProps) => react_jsx_runtime.JSX.Element;
25
+ declare const PinnedItems: ({ enabledFeatures, pinnedApps, }: PinnedItemsProps) => react_jsx_runtime.JSX.Element;
27
26
 
28
27
  interface DrawerAppChild {
29
28
  name: string;
@@ -31,12 +30,8 @@ interface DrawerAppChild {
31
30
  pinned: string;
32
31
  url: string;
33
32
  featureName?: string;
34
- shouldReload?: boolean;
35
33
  }
36
- declare const useGetDrawerAppList: ({ enabledFeatures, reloadOnNavigate, }: {
37
- enabledFeatures: string[];
38
- reloadOnNavigate?: boolean;
39
- }) => {
34
+ declare const useGetDrawerAppList: (enabledFeatures: string[]) => {
40
35
  userSettingsUrl: string;
41
36
  drawerAppList: {
42
37
  apps: {
@@ -47,7 +42,6 @@ declare const useGetDrawerAppList: ({ enabledFeatures, reloadOnNavigate, }: {
47
42
  pinned: string | null;
48
43
  icon: React.ReactElement;
49
44
  url: string;
50
- shouldReload?: boolean;
51
45
  }[];
52
46
  groupName: string;
53
47
  }[];
@@ -98,8 +92,15 @@ declare const uiFeatureNames: {
98
92
  CUSTOMER_ESTIMATED_BASKET_SETTING: string;
99
93
  ORDER_ISSUE_REPORTING: string;
100
94
  CUSTOMER_PAYMENTS_SECTION: string;
101
- CUSTOMER_PREFERENCES_TAB: string;
95
+ CUSTOMER_DASHBOARD_TAB: string;
96
+ CUSTOMER_DETAILS_TAB: string;
97
+ CUSTOMER_TRANSPORT_TAB: string;
98
+ CUSTOMER_FINANCE_TAB: string;
99
+ CUSTOMER_ACTIVITY_TAB: string;
100
+ CUSTOMER_APP_TAB: string;
101
+ CUSTOMER_STANDING_ORDERS_TAB: string;
102
102
  CUSTOMER_SUBSTITUTIONS_TAB: string;
103
+ CUSTOMER_PREFERENCES_TAB: string;
103
104
  PRODUCT_PREFERENCES_SECTION: string;
104
105
  };
105
106
  declare const uiFeaturesAreEnabled: (enabledUIFeatures: string[] | undefined, feature: string) => boolean | undefined;
package/dist/index.js CHANGED
@@ -342,8 +342,7 @@ var drawerAppGroup = [
342
342
  featureNames: [featureNames.NOTIFICATIONS],
343
343
  pinned: "notifications",
344
344
  icon: /* @__PURE__ */ jsx(icons.SvgIconNotification, {}),
345
- url: "/#/notifications",
346
- shouldReload: true
345
+ url: "/#/notifications"
347
346
  },
348
347
  {
349
348
  name: "Promo Codes",
@@ -410,8 +409,7 @@ var drawerAppGroup = [
410
409
  featureNames: [featureNames.ORDERS],
411
410
  pinned: "orders",
412
411
  icon: /* @__PURE__ */ jsx(icons.SvgIconOrders, {}),
413
- url: "/#/orders",
414
- shouldReload: true
412
+ url: "/#/orders"
415
413
  },
416
414
  {
417
415
  name: "Price Lists",
@@ -419,8 +417,7 @@ var drawerAppGroup = [
419
417
  featureNames: [featureNames.PRICE_LIST],
420
418
  pinned: "price_list",
421
419
  icon: /* @__PURE__ */ jsx(icons.SvgIconPriceList, {}),
422
- url: "/#/price-list",
423
- shouldReload: true
420
+ url: "/#/price-list"
424
421
  },
425
422
  {
426
423
  name: "Special Prices",
@@ -428,8 +425,7 @@ var drawerAppGroup = [
428
425
  featureNames: [featureNames.SPECIAL_PRICES],
429
426
  pinned: "special_prices",
430
427
  icon: /* @__PURE__ */ jsx(icons.SvgIconSpecialPrice, {}),
431
- url: "/#/pricing/special-prices",
432
- shouldReload: true
428
+ url: "/#/pricing/special-prices"
433
429
  }
434
430
  ]
435
431
  },
@@ -442,8 +438,7 @@ var drawerAppGroup = [
442
438
  featureNames: [featureNames.PURCHASE_ORDERS],
443
439
  pinned: "purchase_orders",
444
440
  icon: /* @__PURE__ */ jsx(icons.SvgIconBuying, {}),
445
- url: "/react/purchase-orders",
446
- shouldReload: true
441
+ url: "/react/purchase-orders"
447
442
  },
448
443
  {
449
444
  name: "Products",
@@ -451,8 +446,7 @@ var drawerAppGroup = [
451
446
  featureNames: [featureNames.PRODUCTS],
452
447
  pinned: "products",
453
448
  icon: /* @__PURE__ */ jsx(icons.SvgIconProducts, {}),
454
- url: "/#/product-base-list",
455
- shouldReload: true
449
+ url: "/#/product-base-list"
456
450
  },
457
451
  {
458
452
  name: "Suppliers",
@@ -468,8 +462,7 @@ var drawerAppGroup = [
468
462
  featureNames: [featureNames.SUPPLIER_PRICES],
469
463
  pinned: "supplier_prices",
470
464
  icon: /* @__PURE__ */ jsx(icons.SvgIconSupplierPrices, {}),
471
- url: "/#/supplier-prices",
472
- shouldReload: true
465
+ url: "/#/supplier-prices"
473
466
  },
474
467
  {
475
468
  name: "Product Bulk Update",
@@ -490,8 +483,7 @@ var drawerAppGroup = [
490
483
  featureNames: [featureNames.RETAIL],
491
484
  pinned: "retail",
492
485
  icon: /* @__PURE__ */ jsx(icons.SvgIconRetail, {}),
493
- url: "/#/retail/product-availability",
494
- shouldReload: true
486
+ url: "/#/retail/product-availability"
495
487
  },
496
488
  {
497
489
  name: "Goods In",
@@ -532,8 +524,7 @@ var drawerAppGroup = [
532
524
  featureNames: [featureNames.KANBAN],
533
525
  pinned: "kanban_cards",
534
526
  icon: /* @__PURE__ */ jsx(icons.SvgIconVkc, {}),
535
- url: "/#/kanbancards",
536
- shouldReload: true
527
+ url: "/#/kanbancards"
537
528
  },
538
529
  {
539
530
  name: "Picking Stations",
@@ -541,8 +532,7 @@ var drawerAppGroup = [
541
532
  featureNames: [featureNames.PICKING_STATIONS],
542
533
  pinned: "picking_stations",
543
534
  icon: /* @__PURE__ */ jsx(icons.SvgIconScales, {}),
544
- url: "/#/pickingstation",
545
- shouldReload: true
535
+ url: "/#/pickingstation"
546
536
  },
547
537
  {
548
538
  name: "Quality Control",
@@ -550,8 +540,7 @@ var drawerAppGroup = [
550
540
  featureNames: [featureNames.QUALITY_CONTROL],
551
541
  pinned: "quality_control",
552
542
  icon: /* @__PURE__ */ jsx(icons.SvgIconQc, {}),
553
- url: "/#/quality-control",
554
- shouldReload: true
543
+ url: "/#/quality-control"
555
544
  },
556
545
  {
557
546
  name: "Service Delivery",
@@ -559,8 +548,7 @@ var drawerAppGroup = [
559
548
  featureNames: [featureNames.SERVICE_DELIVERY],
560
549
  pinned: "service_delivery",
561
550
  icon: /* @__PURE__ */ jsx(icons.SvgIconRuns, {}),
562
- url: "/#/transport",
563
- shouldReload: true
551
+ url: "/#/transport"
564
552
  },
565
553
  {
566
554
  name: "Ops Metrics",
@@ -581,8 +569,7 @@ var drawerAppGroup = [
581
569
  featureNames: [featureNames.ACCOUNTS],
582
570
  pinned: "accounts",
583
571
  icon: /* @__PURE__ */ jsx(icons.SvgIconAccounts, {}),
584
- url: "/#/accounts",
585
- shouldReload: true
572
+ url: "/#/accounts"
586
573
  },
587
574
  {
588
575
  name: "Reports",
@@ -590,8 +577,7 @@ var drawerAppGroup = [
590
577
  featureNames: [featureNames.REPORTS],
591
578
  pinned: "reports",
592
579
  icon: /* @__PURE__ */ jsx(icons.SvgIconReports, {}),
593
- url: "/reports",
594
- shouldReload: true
580
+ url: "/reports"
595
581
  }
596
582
  ]
597
583
  },
@@ -604,8 +590,7 @@ var drawerAppGroup = [
604
590
  featureNames: [featureNames.ADMIN],
605
591
  pinned: "admin",
606
592
  icon: /* @__PURE__ */ jsx(icons.SvgIconSetting, {}),
607
- url: "/admin",
608
- shouldReload: true
593
+ url: "/admin"
609
594
  },
610
595
  {
611
596
  name: "User Management",
@@ -635,29 +620,29 @@ var drawerAppGroup = [
635
620
  pinned: null,
636
621
  // icon: <icons.SvgIconReleaseNote />,
637
622
  icon: /* @__PURE__ */ jsx(icons.SvgIconLogin, {}),
638
- url: "/react/release-notes",
639
- shouldReload: true
623
+ url: "/react/release-notes"
640
624
  }
641
625
  ]
642
626
  }
643
627
  ];
644
- var useGetDrawerAppList = ({
645
- enabledFeatures,
646
- reloadOnNavigate
647
- }) => {
628
+ var useGetDrawerAppList = (enabledFeatures) => {
648
629
  const navigate = useNavigate();
649
- const navigateTo = useCallback(
650
- (url) => {
651
- const isAngularRoute = url.startsWith("/#");
652
- const isMicroFrontendRoute = url === "/react/release-notes" || url === "/react/purchase-orders" || url === "/admin" || url === "/reports";
653
- if (isAngularRoute || isMicroFrontendRoute || reloadOnNavigate) {
654
- window.location.assign(url);
655
- return;
656
- }
657
- return navigate(url);
658
- },
659
- [reloadOnNavigate]
660
- );
630
+ const navigateTo = useCallback((url) => {
631
+ const isAngularRoute = url.startsWith("/#");
632
+ const isMicroFrontendRoute = url === "/react/release-notes" || url === "/react/purchase-orders" || url === "/admin" || url === "/reports";
633
+ if (isAngularRoute || isMicroFrontendRoute) {
634
+ window.location.assign(url);
635
+ return;
636
+ }
637
+ const isMicroFrontendHost = [
638
+ "/react/purchase-orders",
639
+ "/react/release-notes"
640
+ ].some((route) => window.location.pathname.includes(route));
641
+ if (isMicroFrontendHost) {
642
+ window.location.assign("/react" + url);
643
+ }
644
+ return navigate(url);
645
+ }, []);
661
646
  const drawerAppList = useMemo(() => {
662
647
  if (!enabledFeatures?.length) {
663
648
  return [];
@@ -751,10 +736,7 @@ var LeftDrawer = ({
751
736
  onTogglePinnedApp
752
737
  }) => {
753
738
  const [openCollapse, setOpenCollapse] = useState({});
754
- const { userSettingsUrl, drawerAppList, navigateTo } = useGetDrawerAppList({
755
- enabledFeatures,
756
- reloadOnNavigate
757
- });
739
+ const { userSettingsUrl, drawerAppList, navigateTo } = useGetDrawerAppList(enabledFeatures);
758
740
  const { classes } = useStyles();
759
741
  return /* @__PURE__ */ jsxs(
760
742
  SwipeableDrawer,
@@ -891,13 +873,9 @@ import { Box as Box2, Icon as Icon2, IconButton, Tooltip } from "@mui/material";
891
873
  import { jsx as jsx3 } from "react/jsx-runtime";
892
874
  var PinnedItems = ({
893
875
  enabledFeatures,
894
- pinnedApps,
895
- reloadOnNavigate
876
+ pinnedApps
896
877
  }) => {
897
- const { drawerAppList, navigateTo } = useGetDrawerAppList({
898
- enabledFeatures,
899
- reloadOnNavigate
900
- });
878
+ const { drawerAppList, navigateTo } = useGetDrawerAppList(enabledFeatures);
901
879
  const items = drawerAppList.flatMap((app) => app.apps).filter((app) => app.pinned && pinnedApps[app.pinned]);
902
880
  return /* @__PURE__ */ jsx3(Box2, { display: "flex", flexDirection: "row", gap: 1.5, children: items.map((item) => /* @__PURE__ */ jsx3(Tooltip, { title: item.name, children: /* @__PURE__ */ jsx3(
903
881
  IconButton,
@@ -924,8 +902,15 @@ var uiFeatureNames = {
924
902
  CUSTOMER_ESTIMATED_BASKET_SETTING: "customers_estimated_basket_setting",
925
903
  ORDER_ISSUE_REPORTING: "customers_order_issue_report_setting",
926
904
  CUSTOMER_PAYMENTS_SECTION: "customers_payments_section",
927
- CUSTOMER_PREFERENCES_TAB: "customers_preferences_tab",
905
+ CUSTOMER_DASHBOARD_TAB: "customers_dashboard_tab",
906
+ CUSTOMER_DETAILS_TAB: "customers_details_tab",
907
+ CUSTOMER_TRANSPORT_TAB: "customers_transport_tab",
908
+ CUSTOMER_FINANCE_TAB: "customers_finance_tab",
909
+ CUSTOMER_ACTIVITY_TAB: "customers_activity_tab",
910
+ CUSTOMER_APP_TAB: "customers_app_tab",
911
+ CUSTOMER_STANDING_ORDERS_TAB: "customers_standing_orders_tab",
928
912
  CUSTOMER_SUBSTITUTIONS_TAB: "customers_substitutions_tab",
913
+ CUSTOMER_PREFERENCES_TAB: "customers_preferences_tab",
929
914
  PRODUCT_PREFERENCES_SECTION: "product_preferences_section"
930
915
  };
931
916
  var uiFeaturesAreEnabled = (enabledUIFeatures, feature) => enabledUIFeatures?.includes(feature);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/LeftDrawer/LeftDrawer.tsx","../src/resources/styles/colors/darkPalette.ts","../src/resources/styles/colors/lightPalette.ts","../src/resources/styles/colors.ts","../src/config/drawerAppList.tsx","../src/config/features.ts","../src/components/PinnedItems/PinnedItems.tsx","../src/config/uiFeatures.ts"],"sourcesContent":["import { Fragment, useState } from 'react';\n\nimport {\n PushPinOutlined,\n FiberManualRecord,\n ExpandLess,\n} from '@mui/icons-material';\nimport {\n AppBar,\n Collapse,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n ListSubheader,\n SwipeableDrawer,\n Toolbar,\n ListItemButton,\n Box,\n} from '@mui/material';\nimport Icon from '@mui/material/Icon';\nimport { RoundButton, UserBust } from '@natoora-libs/core/components';\nimport { makeStyles } from 'tss-react/mui';\n\nimport { colors } from '@/resources/styles/colors';\n\nimport { useGetDrawerAppList } from '../../config/drawerAppList';\n\nconst useStyles = makeStyles()((theme) => ({\n subheader: {\n textTransform: 'uppercase',\n fontSize: theme.spacing(1.5),\n },\n topBar: {\n backgroundColor: theme.palette.secondary.dark,\n width: theme.spacing(40),\n padding: theme.spacing(2),\n display: 'flex',\n alignItems: 'end',\n justifyContent: 'space-between',\n },\n drawer: {\n alignContent: 'space-between',\n flexDirection: 'column',\n minWidth: theme.spacing(80),\n },\n iconMenu: {\n height: '40px',\n width: '40px',\n opacity: 1,\n fill: colors.neutral700,\n },\n pinIcon: {\n height: '16px',\n width: '16px',\n fill: colors.neutral700,\n opacity: 0.5,\n '&:hover': {\n opacity: 1,\n cursor: 'pointer',\n },\n },\n expandIcon: {\n height: '22px',\n width: '22px',\n fill: colors.neutral700,\n },\n nested: {\n paddingLeft: theme.spacing(6),\n border: colors.neutral200,\n },\n appName: {\n '& .MuiTypography-body2': {\n fontWeight: 700,\n },\n },\n}));\n\ninterface LeftDrawerProps {\n open: boolean;\n enabledFeatures: string[];\n pinnedApps: Record<string, boolean>;\n user: {\n profile_picture: string;\n first_name: string;\n last_name: string;\n username: string;\n };\n reloadOnNavigate?: boolean;\n handleOpen: () => void;\n handleClose: () => void;\n onLogout: () => void;\n onTogglePinnedApp: (name: string, new_value: boolean) => void;\n}\n\nexport const LeftDrawer = ({\n enabledFeatures,\n pinnedApps,\n open,\n user,\n reloadOnNavigate,\n handleClose,\n handleOpen,\n onLogout,\n onTogglePinnedApp,\n}: LeftDrawerProps) => {\n const [openCollapse, setOpenCollapse] = useState({});\n const { userSettingsUrl, drawerAppList, navigateTo } = useGetDrawerAppList({\n enabledFeatures,\n reloadOnNavigate,\n });\n\n const { classes } = useStyles();\n\n return (\n <SwipeableDrawer\n className={classes.drawer}\n id=\"primary-menu\"\n onClose={handleClose}\n onOpen={handleOpen}\n open={open}\n >\n <AppBar position=\"static\">\n <Toolbar className={classes.topBar}>\n <UserBust\n user={user}\n avatarProps={{ height: 50, width: 50 }}\n typographyProps={{\n name: { variant: 'subtitle1', component: 'div' },\n username: { variant: 'caption', component: 'div' },\n }}\n />\n <RoundButton\n icon=\"edit\"\n isContrast\n onClick={() => navigateTo(userSettingsUrl)}\n size=\"small\"\n tooltip=\"User Settings\"\n />\n </Toolbar>\n </AppBar>\n\n <List>\n {drawerAppList.map((group) => (\n <Fragment key={group.groupName}>\n <ListSubheader disableSticky className={classes.subheader}>\n {group.groupName}\n </ListSubheader>\n\n {group.apps.map((app) => (\n <Fragment key={`${group.groupName}_${app.name}`}>\n <ListItem\n key={app.name}\n title={app.url}\n onClick={() => {\n if (app.routeName === 'logout') {\n return onLogout();\n }\n\n return navigateTo(app.url);\n }}\n >\n <ListItemIcon>\n <Icon className={classes.iconMenu}>{app.icon}</Icon>\n </ListItemIcon>\n <ListItemText\n className={classes.appName}\n primary={app.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n\n <Box\n display=\"flex\"\n gap={2}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {!!app.children?.length && (\n <ExpandLess\n className={classes.expandIcon}\n style={{\n rotate: openCollapse[app.routeName]\n ? '0deg'\n : '180deg',\n }}\n data-testid=\"svg-close-collapse\"\n onClick={(event) => {\n event.stopPropagation();\n setOpenCollapse({\n ...openCollapse,\n [app.routeName]: !openCollapse[app.routeName],\n });\n }}\n />\n )}\n\n {app.pinned && (\n <PushPinOutlined\n className={classes.pinIcon}\n style={{ opacity: pinnedApps[app.pinned] ? 1 : 0.3 }}\n onClick={(event) => {\n if (!app.pinned) {\n return;\n }\n\n event.stopPropagation();\n onTogglePinnedApp(\n app.pinned,\n !pinnedApps[app.pinned],\n );\n }}\n />\n )}\n </Box>\n </ListItem>\n\n {!!app.children?.length && (\n <Collapse in={openCollapse[app.routeName]}>\n <List>\n {app.children.map((child) => (\n <ListItemButton\n key={child.name}\n className={classes.nested}\n onClick={() => navigateTo(child.url)}\n title={child.url}\n >\n <ListItemIcon>\n <FiberManualRecord style={{ height: 12 }} />\n </ListItemIcon>\n <ListItemText\n primary={child.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n </ListItemButton>\n ))}\n </List>\n </Collapse>\n )}\n </Fragment>\n ))}\n </Fragment>\n ))}\n </List>\n </SwipeableDrawer>\n );\n};\n","import { ThemePalette } from './interface';\n\n/**\n * Define the dark palette using the same ThemePalette interface.\n * Any missing or extra keys compared to lightPalette will trigger a TypeScript error.\n */\nconst darkPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#1C1B1A',\n neutral100: '#1F1F1F',\n neutral150: '#262626',\n neutral200: '#2E2E2E',\n neutral250: '#383838',\n neutral300: '#424242',\n neutral400: '#4C4C4C',\n neutral500: '#666666',\n neutral600: '#808080',\n neutral700: '#A3A3A3',\n neutral750: '#B3B3B3',\n neutral800: '#CCCCCC',\n neutral900: '#F5F5F5',\n\n // Input and contrast\n contrast: '#FFFFFF',\n constrastOpacity50: 'rgba(255,255,255,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#B0B0B0',\n default: '#444444',\n muiPrimary: '#E9FB62',\n muiPrimaryBlack: '#FFFFFF',\n lightMuiPrimaryColorBackground: '#e9fb6214',\n lightBlueBackground: '#e9fb6214',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1890d5',\n muiSecondary: '#DE5B99',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#66BB6A',\n muiSuccessAlternate: '#81C784',\n\n // Transparency variants\n blackOpacity10: 'inherit',\n blackOpacity20: 'inherit',\n blackOpacity30: 'inherit',\n blackOpacity50: 'inherit',\n blackOpacity80: 'inherit',\n primaryOpacity10: 'rgba(233, 251, 98, 0.10)',\n primaryOpacity20: 'rgba(233, 251, 98, 0.20)',\n primaryOpacity30: 'rgba(233, 251, 98, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, .3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(255, 255, 255, 0.08)',\n // Active Button\n buttonActiveText: '#E9FB62',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#EF5350',\n};\n\nexport default darkPalette;\n","import { ThemePalette } from './interface';\n\n/**\n * Define the light palette using the ThemePalette interface.\n */\nconst lightPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#F0EBE6',\n neutral100: '#FAFAFA',\n neutral150: '#F4F4F4',\n neutral200: '#F1F1F1',\n neutral250: '#ECECEC',\n neutral300: '#E0E0E0',\n neutral400: '#C8C8C8',\n neutral500: '#BDBDBD',\n neutral600: '#999999',\n neutral700: '#878787',\n neutral750: '#6c6c6c',\n neutral800: '#555555',\n neutral900: '#4D4D4D',\n\n // Input and contrast\n contrast: '#000000',\n constrastOpacity50: 'rgba(0,0,0,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#606060',\n default: '#E0E0E0',\n muiPrimary: '#0781CE',\n muiPrimaryBlack: '#000000',\n lightMuiPrimaryColorBackground: '#eff4fb',\n lightBlueBackground: '#eff4fb',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1565c0',\n muiSecondary: '#A42966',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#4caf50',\n muiSuccessAlternate: '#357a38',\n\n // Transparency variants\n blackOpacity10: 'rgba(0,0,0,0.1)',\n blackOpacity20: 'rgba(0,0,0,0.2)',\n blackOpacity30: 'rgba(0,0,0,0.3)',\n blackOpacity50: 'rgba(0,0,0,0.5)',\n blackOpacity80: 'rgba(0,0,0,0.8)',\n primaryOpacity10: 'rgba(7, 129, 206, 0.10)',\n primaryOpacity20: 'rgba(7, 129, 206, 0.20)',\n primaryOpacity30: 'rgba(7, 129, 206, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, 0.3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(0, 0, 0, 0.04)',\n // Active Button\n buttonActiveText: '#0781CE',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#D32F2F',\n};\n\nexport default lightPalette;\n","import darkPalette from './colors/darkPalette';\nimport lightPalette from './colors/lightPalette';\n\nconst stylesheet = localStorage.getItem('@stylesheet');\nexport const isDarkModeEnabled = stylesheet === 'styles/style-dark.css';\nconst palette = isDarkModeEnabled ? darkPalette : lightPalette;\n\ninterface Colors {\n // General colors\n white: string;\n black: string;\n\n // Neutral\n neutral50: string;\n neutral100: string;\n neutral150: string;\n neutral200: string;\n neutral250: string;\n neutral300: string;\n neutral400: string;\n neutral500: string;\n neutral600: string;\n neutral700: string;\n neutral750: string;\n neutral800: string;\n neutral900: string;\n\n // Input and contrast\n contrast: string;\n constrastOpacity50: string;\n\n // Icon and Material UI colors\n iconSearch: string;\n default: string;\n muiPrimary: string;\n muiPrimaryBlack: string;\n lightMuiPrimaryColorBackground: string;\n lightBlueBackground: string;\n muiPrimaryAlternate: string;\n muiPrimaryHover: string;\n muiSecondary: string;\n muiSecondaryAlternate: string;\n muiSuccess: string;\n muiSuccessAlternate: string;\n\n // Transparency\n blackOpacity10: string;\n blackOpacity20: string;\n blackOpacity30: string;\n blackOpacity50: string;\n blackOpacity80: string;\n primaryOpacity10: string;\n primaryOpacity20: string;\n primaryOpacity30: string;\n secondaryAlternateOpacity30: string;\n blueOpacity08: string;\n whiteOpacity10: string;\n whiteOpacity20: string;\n whiteOpacity40: string;\n\n // Table rows and top bar\n topBar: string;\n // Error Button\n error: string;\n\n roundButton: {\n default: {\n border: string;\n color: string;\n disabled: {\n color: string;\n };\n hover: {\n background: string;\n };\n };\n filled: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n active: {\n color: string;\n hover: {\n background: string;\n };\n };\n contrast: {\n border: string;\n color: string;\n hover: {\n background: string;\n };\n };\n tableButton: {\n color: string;\n };\n focused: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n error: string;\n };\n\n movementCard: {\n default: {\n background: string;\n };\n disabled: {\n background: string;\n };\n pill: {\n color: string;\n background: string;\n };\n };\n\n rowProductCard: {\n locationSubtitle: string;\n };\n}\n\nexport const colors: Colors = {\n white: palette.white,\n black: palette.black,\n\n neutral50: palette.neutral50,\n neutral100: palette.neutral100,\n neutral150: palette.neutral150,\n neutral200: palette.neutral200,\n neutral250: palette.neutral250,\n neutral300: palette.neutral300,\n neutral400: palette.neutral400,\n neutral500: palette.neutral500,\n neutral600: palette.neutral600,\n neutral700: palette.neutral700,\n neutral750: palette.neutral750,\n neutral800: palette.neutral800,\n neutral900: palette.neutral900,\n\n // Input and contrast\n contrast: palette.contrast,\n constrastOpacity50: palette.constrastOpacity50,\n\n iconSearch: palette.iconSearch,\n default: palette.default,\n muiPrimary: palette.muiPrimary,\n muiPrimaryBlack: palette.muiPrimaryBlack,\n lightMuiPrimaryColorBackground: palette.lightMuiPrimaryColorBackground,\n lightBlueBackground: palette.lightBlueBackground,\n muiPrimaryAlternate: palette.muiPrimaryAlternate,\n muiPrimaryHover: palette.muiPrimaryHover,\n muiSecondary: palette.muiSecondary,\n muiSecondaryAlternate: palette.muiSecondaryAlternate,\n muiSuccess: palette.muiSuccess,\n muiSuccessAlternate: palette.muiSuccessAlternate,\n\n // Transparency\n blackOpacity10: palette.blackOpacity10,\n blackOpacity20: palette.blackOpacity20,\n blackOpacity30: palette.blackOpacity30,\n blackOpacity50: palette.blackOpacity50,\n blackOpacity80: palette.blackOpacity80,\n primaryOpacity10: palette.primaryOpacity10,\n primaryOpacity20: palette.primaryOpacity20,\n primaryOpacity30: palette.primaryOpacity30,\n secondaryAlternateOpacity30: palette.secondaryAlternateOpacity30,\n blueOpacity08: palette.blueOpacity08,\n whiteOpacity10: palette.whiteOpacity10,\n whiteOpacity20: palette.whiteOpacity20,\n whiteOpacity40: palette.whiteOpacity40,\n\n topBar: palette.topBar,\n error: palette.error,\n\n roundButton: {\n default: {\n border: palette.neutral600,\n color: palette.contrast,\n disabled: {\n color: palette.blackOpacity20,\n },\n hover: {\n background: palette.buttonHoverBackground,\n },\n },\n filled: {\n background: palette.neutral100,\n color: palette.blackOpacity80,\n hover: {\n background: palette.neutral250,\n },\n },\n active: {\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity20,\n },\n },\n contrast: {\n border: palette.buttonContrastBorder,\n color: palette.buttonContrastText,\n hover: {\n background: palette.whiteOpacity10,\n },\n },\n tableButton: {\n color: palette.neutral800,\n },\n focused: {\n background: palette.primaryOpacity20,\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity30,\n },\n },\n error: palette.error,\n },\n\n movementCard: {\n default: {\n background: palette.neutral100,\n },\n disabled: {\n background: palette.neutral250,\n },\n pill: {\n color: palette.neutral200,\n background: palette.neutral600,\n },\n },\n\n rowProductCard: {\n locationSubtitle: palette.neutral800,\n },\n};\n","import { useCallback, useMemo } from 'react';\nimport { useNavigate } from 'react-router';\n\nimport { icons } from '@natoora-libs/core/components';\nimport { featureNames, featuresAreEnabled } from '@/config/features';\n\ninterface DrawerAppChild {\n name: string;\n routeName: string;\n pinned: string;\n url: string;\n featureName?: string;\n shouldReload?: boolean;\n}\n\ninterface DrawerApp {\n name: string;\n routeName: string;\n featureNames: string[];\n pinned: string | null;\n icon: React.ReactElement;\n url: string;\n shouldReload?: boolean;\n children?: DrawerAppChild[];\n}\n\ninterface DrawerAppGroup {\n groupName: string;\n apps: DrawerApp[];\n}\n\nconst drawerAppGroup: DrawerAppGroup[] = [\n {\n groupName: 'Home',\n apps: [\n {\n name: 'Home',\n routeName: 'home',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconHome />,\n url: '/home',\n },\n ],\n },\n {\n groupName: 'App',\n apps: [\n {\n name: 'Notifications',\n routeName: 'appNotifications',\n featureNames: [featureNames.NOTIFICATIONS],\n pinned: 'notifications',\n icon: <icons.SvgIconNotification />,\n url: '/#/notifications',\n shouldReload: true,\n },\n {\n name: 'Promo Codes',\n routeName: 'promo_codes',\n featureNames: [featureNames.PROMO_CODES],\n pinned: 'promo_codes',\n icon: <icons.SvgIconPromoCode />,\n url: '/promo_codes',\n },\n {\n name: 'Search Categories',\n routeName: 'search-categories',\n featureNames: [featureNames.SEARCH_CATEGORIES],\n pinned: 'search_categories',\n icon: <icons.SvgIconSearchCategories />,\n url: '/search-categories',\n },\n {\n name: 'Content Management',\n routeName: 'content-management',\n featureNames: [featureNames.CONTENT_MANAGEMENT],\n pinned: 'content_management',\n icon: <icons.SvgIconContentManagement />,\n url: '/content-management',\n },\n ],\n },\n {\n groupName: 'Customer Service',\n apps: [\n {\n name: 'Aircall',\n routeName: 'recordedcalls',\n featureNames: [featureNames.AIRCALL],\n pinned: 'aircall',\n icon: <icons.SvgIconPhone />,\n url: '/air-call',\n },\n {\n name: 'Customers',\n routeName: 'customers',\n featureNames: [featureNames.CUSTOMERS],\n pinned: 'customers',\n icon: <icons.SvgIconAccount />,\n url: '/customers',\n children: [\n {\n name: 'Sites',\n routeName: 'customer-sites',\n pinned: 'customer-sites',\n url: '/customers/sites',\n },\n {\n name: 'Groups',\n routeName: 'customer-groups',\n pinned: 'customer-groups',\n url: '/customers/groups',\n },\n ],\n },\n {\n name: 'Orders',\n routeName: 'orders',\n featureNames: [featureNames.ORDERS],\n pinned: 'orders',\n icon: <icons.SvgIconOrders />,\n url: '/#/orders',\n shouldReload: true,\n },\n {\n name: 'Price Lists',\n routeName: 'price_list',\n featureNames: [featureNames.PRICE_LIST],\n pinned: 'price_list',\n icon: <icons.SvgIconPriceList />,\n url: '/#/price-list',\n shouldReload: true,\n },\n {\n name: 'Special Prices',\n routeName: 'special_prices',\n featureNames: [featureNames.SPECIAL_PRICES],\n pinned: 'special_prices',\n icon: <icons.SvgIconSpecialPrice />,\n url: '/#/pricing/special-prices',\n shouldReload: true,\n },\n ],\n },\n {\n groupName: 'Buying',\n apps: [\n {\n name: 'Purchase Orders',\n routeName: 'purchaseOrders',\n featureNames: [featureNames.PURCHASE_ORDERS],\n pinned: 'purchase_orders',\n icon: <icons.SvgIconBuying />,\n url: '/react/purchase-orders',\n shouldReload: true,\n },\n {\n name: 'Products',\n routeName: 'products',\n featureNames: [featureNames.PRODUCTS],\n pinned: 'products',\n icon: <icons.SvgIconProducts />,\n url: '/#/product-base-list',\n shouldReload: true,\n },\n {\n name: 'Suppliers',\n routeName: 'suppliers',\n featureNames: [featureNames.SUPPLIERS],\n pinned: 'suppliers',\n icon: <icons.SvgIconSupplier />,\n url: '/suppliers',\n },\n {\n name: 'Supplier Prices',\n routeName: 'supplier_prices',\n featureNames: [featureNames.SUPPLIER_PRICES],\n pinned: 'supplier_prices',\n icon: <icons.SvgIconSupplierPrices />,\n url: '/#/supplier-prices',\n shouldReload: true,\n },\n {\n name: 'Product Bulk Update',\n routeName: 'bulk-update',\n featureNames: [featureNames.BULK_UPDATE],\n pinned: 'product_bulk_update',\n icon: <icons.SvgIconImport />,\n url: '/bulk_update',\n },\n ],\n },\n {\n groupName: 'Operations',\n apps: [\n {\n name: 'Retail',\n routeName: 'retail',\n featureNames: [featureNames.RETAIL],\n pinned: 'retail',\n icon: <icons.SvgIconRetail />,\n url: '/#/retail/product-availability',\n shouldReload: true,\n },\n {\n name: 'Goods In',\n routeName: 'goodsin-list',\n featureNames: [featureNames.GOODS_IN],\n pinned: 'goods_in',\n icon: <icons.SvgIconGoodsin />,\n url: '/goodsin-list',\n },\n {\n name: 'Returns',\n routeName: 'goods-in-list',\n featureNames: [featureNames.RETURNS],\n pinned: 'returns',\n icon: <icons.SvgIconGoodsin />,\n url: '/returns',\n },\n {\n name: 'Stock and Locations',\n routeName: 'locations',\n featureNames: [featureNames.STOCK, featureNames.LOCATIONS],\n pinned: 'stock',\n icon: <icons.SvgIconLocation />,\n url: '/locations',\n children: [\n {\n name: 'Movements',\n routeName: 'movements',\n pinned: 'movements',\n url: '/movements',\n featureName: featureNames.STOCK_MOVEMENTS,\n },\n ],\n },\n {\n name: 'Kanban Cards',\n routeName: 'kanban',\n featureNames: [featureNames.KANBAN],\n pinned: 'kanban_cards',\n icon: <icons.SvgIconVkc />,\n url: '/#/kanbancards',\n shouldReload: true,\n },\n {\n name: 'Picking Stations',\n routeName: 'picking',\n featureNames: [featureNames.PICKING_STATIONS],\n pinned: 'picking_stations',\n icon: <icons.SvgIconScales />,\n url: '/#/pickingstation',\n shouldReload: true,\n },\n {\n name: 'Quality Control',\n routeName: 'qualityControl',\n featureNames: [featureNames.QUALITY_CONTROL],\n pinned: 'quality_control',\n icon: <icons.SvgIconQc />,\n url: '/#/quality-control',\n shouldReload: true,\n },\n {\n name: 'Service Delivery',\n routeName: 'runs',\n featureNames: [featureNames.SERVICE_DELIVERY],\n pinned: 'service_delivery',\n icon: <icons.SvgIconRuns />,\n url: '/#/transport',\n shouldReload: true,\n },\n {\n name: 'Ops Metrics',\n routeName: 'ops-metrics',\n featureNames: [featureNames.OPS_METRICS],\n pinned: 'ops_metrics',\n icon: <icons.SvgIconOpsMetrics />,\n url: '/ops-metrics',\n },\n ],\n },\n {\n groupName: 'Tools',\n apps: [\n {\n name: 'Accounts',\n routeName: 'accounts',\n featureNames: [featureNames.ACCOUNTS],\n pinned: 'accounts',\n icon: <icons.SvgIconAccounts />,\n url: '/#/accounts',\n shouldReload: true,\n },\n {\n name: 'Reports',\n routeName: 'reports',\n featureNames: [featureNames.REPORTS],\n pinned: 'reports',\n icon: <icons.SvgIconReports />,\n url: '/reports',\n shouldReload: true,\n },\n ],\n },\n {\n groupName: 'Settings',\n apps: [\n {\n name: 'Admin',\n routeName: 'admin',\n featureNames: [featureNames.ADMIN],\n pinned: 'admin',\n icon: <icons.SvgIconSetting />,\n url: '/admin',\n shouldReload: true,\n },\n {\n name: 'User Management',\n routeName: 'user-management',\n featureNames: [featureNames.USER_MANAGEMENT],\n pinned: 'users',\n icon: <icons.SvgIconUserManagement />,\n url: '/user-management',\n },\n {\n name: 'Logout',\n routeName: 'logout',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconLogin />,\n url: '/logout',\n },\n ],\n },\n {\n groupName: 'Release Notes',\n apps: [\n {\n name: 'Release Notes',\n routeName: 'release-notes',\n featureNames: [],\n pinned: null,\n // icon: <icons.SvgIconReleaseNote />,\n icon: <icons.SvgIconLogin />,\n url: '/react/release-notes',\n shouldReload: true,\n },\n ],\n },\n];\n\nexport const useGetDrawerAppList = ({\n enabledFeatures,\n reloadOnNavigate,\n}: {\n enabledFeatures: string[];\n reloadOnNavigate?: boolean;\n}) => {\n const navigate = useNavigate();\n\n const navigateTo = useCallback(\n (url: string) => {\n const isAngularRoute = url.startsWith('/#');\n const isMicroFrontendRoute =\n url === '/react/release-notes' ||\n url === '/react/purchase-orders' ||\n url === '/admin' ||\n url === '/reports';\n\n if (isAngularRoute || isMicroFrontendRoute || reloadOnNavigate) {\n window.location.assign(url);\n\n return;\n }\n\n return navigate(url);\n },\n [reloadOnNavigate],\n );\n\n const drawerAppList = useMemo(() => {\n if (!enabledFeatures?.length) {\n return [];\n }\n\n return drawerAppGroup\n .map((group) => {\n const enabledApps = group.apps\n .filter(\n (app) =>\n app.routeName === 'home' ||\n app.routeName === 'release-notes' ||\n app.routeName === 'logout' ||\n featuresAreEnabled({\n enabledFeatures,\n featureNames: app.featureNames,\n requireAll: false,\n }),\n )\n .map((app) => {\n const filteredChildren = app.children?.filter((child) => {\n if (child.featureName) {\n return enabledFeatures.includes(child.featureName);\n }\n\n return true;\n });\n\n return { ...app, children: filteredChildren };\n });\n\n return { ...group, apps: enabledApps };\n })\n .filter((group) => group.apps.length > 0);\n }, [enabledFeatures]);\n\n return {\n userSettingsUrl: '/#/user-settings',\n drawerAppList,\n navigateTo,\n };\n};\n","export const featureNames = {\n ACCOUNTS: 'accounts',\n ADMIN: 'admin',\n AIRCALL: 'aircall',\n BULK_UPDATE: 'product_bulk_update',\n CONTENT_MANAGEMENT: 'content_management',\n CUSTOMERS: 'customers',\n GOODS_IN: 'goods_in',\n KANBAN: 'kanban_cards',\n LOCATIONS: 'locations',\n NOTIFICATIONS: 'notifications',\n OPS_METRICS: 'ops_metrics',\n ORDERS: 'orders',\n PICKING_STATIONS: 'picking_stations',\n PRICE_LIST: 'price_list',\n PRODUCTS: 'products',\n PROMO_CODES: 'promo_codes',\n PURCHASE_ORDERS: 'purchase_orders',\n QUALITY_CONTROL: 'quality_control',\n REPORTS: 'reports',\n RETAIL: 'retail',\n RETURNS: 'returns',\n SEARCH_CATEGORIES: 'search_categories',\n SERVICE_DELIVERY: 'service_delivery',\n SPECIAL_PRICES: 'special_prices',\n STOCK: 'stock',\n STOCK_MOVEMENTS: 'stock_movements',\n SUPPLIERS: 'suppliers',\n SUPPLIER_PRICES: 'supplier_prices',\n USER_MANAGEMENT: 'users',\n};\n\nexport function featuresAreEnabled({\n enabledFeatures,\n featureNames,\n requireAll = true,\n}: {\n enabledFeatures: string[];\n featureNames: string[];\n requireAll?: boolean;\n}) {\n const storedPermissions = localStorage.getItem('permissions') || '';\n let enabled = false;\n\n if (requireAll) {\n enabled = featureNames.every(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n } else {\n enabled = featureNames.some(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n }\n\n return enabled;\n}\n","import { Box, Icon, IconButton, Tooltip } from '@mui/material';\nimport { useGetDrawerAppList } from '@/config/drawerAppList';\n\ntype PinnedItemsProps = {\n enabledFeatures: string[];\n pinnedApps: Record<string, boolean>;\n reloadOnNavigate?: boolean;\n};\n\nexport const PinnedItems = ({\n enabledFeatures,\n pinnedApps,\n reloadOnNavigate,\n}: PinnedItemsProps) => {\n const { drawerAppList, navigateTo } = useGetDrawerAppList({\n enabledFeatures,\n reloadOnNavigate,\n });\n const items = drawerAppList\n .flatMap((app) => app.apps)\n .filter((app) => app.pinned && pinnedApps[app.pinned]);\n\n return (\n <Box display=\"flex\" flexDirection=\"row\" gap={1.5}>\n {items.map((item) => (\n <Tooltip title={item.name} key={item.name}>\n <IconButton\n style={{ backgroundColor: 'gray', padding: 4 }}\n onClick={() => navigateTo(item.url)}\n >\n <Icon\n key={item.name}\n style={{ width: 32, height: 32, fill: 'white' }}\n >\n {item.icon}\n </Icon>\n </IconButton>\n </Tooltip>\n ))}\n </Box>\n );\n};\n","export const uiFeatureNames = {\n PURCHASE_ORDERS_REGIONS: 'purchases_regions',\n SUPPLIER_PORTAL_TAB: 'suppliers_portal_users_tab',\n SUPPLIER_PRICING_SECTION: 'suppliers_pricing_section',\n CUSTOMER_ESTIMATED_BASKET_SETTING: 'customers_estimated_basket_setting',\n ORDER_ISSUE_REPORTING: 'customers_order_issue_report_setting',\n CUSTOMER_PAYMENTS_SECTION: 'customers_payments_section',\n CUSTOMER_PREFERENCES_TAB: 'customers_preferences_tab',\n CUSTOMER_SUBSTITUTIONS_TAB: 'customers_substitutions_tab',\n PRODUCT_PREFERENCES_SECTION: 'product_preferences_section',\n};\n\nexport const uiFeaturesAreEnabled = (\n enabledUIFeatures: string[] | undefined,\n feature: string,\n) => enabledUIFeatures?.includes(feature);\n"],"mappings":"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","names":["featureNames","jsx","Box","Icon","jsx","Box","Icon"]}
1
+ {"version":3,"sources":["../src/components/LeftDrawer/LeftDrawer.tsx","../src/resources/styles/colors/darkPalette.ts","../src/resources/styles/colors/lightPalette.ts","../src/resources/styles/colors.ts","../src/config/drawerAppList.tsx","../src/config/features.ts","../src/components/PinnedItems/PinnedItems.tsx","../src/config/uiFeatures.ts"],"sourcesContent":["import { Fragment, useState } from 'react';\n\nimport {\n PushPinOutlined,\n FiberManualRecord,\n ExpandLess,\n} from '@mui/icons-material';\nimport {\n AppBar,\n Collapse,\n List,\n ListItem,\n ListItemIcon,\n ListItemText,\n ListSubheader,\n SwipeableDrawer,\n Toolbar,\n ListItemButton,\n Box,\n} from '@mui/material';\nimport Icon from '@mui/material/Icon';\nimport { RoundButton, UserBust } from '@natoora-libs/core/components';\nimport { makeStyles } from 'tss-react/mui';\n\nimport { colors } from '@/resources/styles/colors';\n\nimport { useGetDrawerAppList } from '../../config/drawerAppList';\n\nconst useStyles = makeStyles()((theme) => ({\n subheader: {\n textTransform: 'uppercase',\n fontSize: theme.spacing(1.5),\n },\n topBar: {\n backgroundColor: theme.palette.secondary.dark,\n width: theme.spacing(40),\n padding: theme.spacing(2),\n display: 'flex',\n alignItems: 'end',\n justifyContent: 'space-between',\n },\n drawer: {\n alignContent: 'space-between',\n flexDirection: 'column',\n minWidth: theme.spacing(80),\n },\n iconMenu: {\n height: '40px',\n width: '40px',\n opacity: 1,\n fill: colors.neutral700,\n },\n pinIcon: {\n height: '16px',\n width: '16px',\n fill: colors.neutral700,\n opacity: 0.5,\n '&:hover': {\n opacity: 1,\n cursor: 'pointer',\n },\n },\n expandIcon: {\n height: '22px',\n width: '22px',\n fill: colors.neutral700,\n },\n nested: {\n paddingLeft: theme.spacing(6),\n border: colors.neutral200,\n },\n appName: {\n '& .MuiTypography-body2': {\n fontWeight: 700,\n },\n },\n}));\n\ninterface LeftDrawerProps {\n open: boolean;\n enabledFeatures: string[];\n pinnedApps: Record<string, boolean>;\n user: {\n profile_picture: string;\n first_name: string;\n last_name: string;\n username: string;\n };\n reloadOnNavigate?: boolean;\n handleOpen: () => void;\n handleClose: () => void;\n onLogout: () => void;\n onTogglePinnedApp: (name: string, new_value: boolean) => void;\n}\n\nexport const LeftDrawer = ({\n enabledFeatures,\n pinnedApps,\n open,\n user,\n reloadOnNavigate,\n handleClose,\n handleOpen,\n onLogout,\n onTogglePinnedApp,\n}: LeftDrawerProps) => {\n const [openCollapse, setOpenCollapse] = useState({});\n const { userSettingsUrl, drawerAppList, navigateTo } =\n useGetDrawerAppList(enabledFeatures);\n\n const { classes } = useStyles();\n\n return (\n <SwipeableDrawer\n className={classes.drawer}\n id=\"primary-menu\"\n onClose={handleClose}\n onOpen={handleOpen}\n open={open}\n >\n <AppBar position=\"static\">\n <Toolbar className={classes.topBar}>\n <UserBust\n user={user}\n avatarProps={{ height: 50, width: 50 }}\n typographyProps={{\n name: { variant: 'subtitle1', component: 'div' },\n username: { variant: 'caption', component: 'div' },\n }}\n />\n <RoundButton\n icon=\"edit\"\n isContrast\n onClick={() => navigateTo(userSettingsUrl)}\n size=\"small\"\n tooltip=\"User Settings\"\n />\n </Toolbar>\n </AppBar>\n\n <List>\n {drawerAppList.map((group) => (\n <Fragment key={group.groupName}>\n <ListSubheader disableSticky className={classes.subheader}>\n {group.groupName}\n </ListSubheader>\n\n {group.apps.map((app) => (\n <Fragment key={`${group.groupName}_${app.name}`}>\n <ListItem\n key={app.name}\n title={app.url}\n onClick={() => {\n if (app.routeName === 'logout') {\n return onLogout();\n }\n\n return navigateTo(app.url);\n }}\n >\n <ListItemIcon>\n <Icon className={classes.iconMenu}>{app.icon}</Icon>\n </ListItemIcon>\n <ListItemText\n className={classes.appName}\n primary={app.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n\n <Box\n display=\"flex\"\n gap={2}\n alignItems=\"center\"\n justifyContent=\"center\"\n >\n {!!app.children?.length && (\n <ExpandLess\n className={classes.expandIcon}\n style={{\n rotate: openCollapse[app.routeName]\n ? '0deg'\n : '180deg',\n }}\n data-testid=\"svg-close-collapse\"\n onClick={(event) => {\n event.stopPropagation();\n setOpenCollapse({\n ...openCollapse,\n [app.routeName]: !openCollapse[app.routeName],\n });\n }}\n />\n )}\n\n {app.pinned && (\n <PushPinOutlined\n className={classes.pinIcon}\n style={{ opacity: pinnedApps[app.pinned] ? 1 : 0.3 }}\n onClick={(event) => {\n if (!app.pinned) {\n return;\n }\n\n event.stopPropagation();\n onTogglePinnedApp(\n app.pinned,\n !pinnedApps[app.pinned],\n );\n }}\n />\n )}\n </Box>\n </ListItem>\n\n {!!app.children?.length && (\n <Collapse in={openCollapse[app.routeName]}>\n <List>\n {app.children.map((child) => (\n <ListItemButton\n key={child.name}\n className={classes.nested}\n onClick={() => navigateTo(child.url)}\n title={child.url}\n >\n <ListItemIcon>\n <FiberManualRecord style={{ height: 12 }} />\n </ListItemIcon>\n <ListItemText\n primary={child.name}\n slotProps={{ primary: { variant: 'body2' } }}\n />\n </ListItemButton>\n ))}\n </List>\n </Collapse>\n )}\n </Fragment>\n ))}\n </Fragment>\n ))}\n </List>\n </SwipeableDrawer>\n );\n};\n","import { ThemePalette } from './interface';\n\n/**\n * Define the dark palette using the same ThemePalette interface.\n * Any missing or extra keys compared to lightPalette will trigger a TypeScript error.\n */\nconst darkPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#1C1B1A',\n neutral100: '#1F1F1F',\n neutral150: '#262626',\n neutral200: '#2E2E2E',\n neutral250: '#383838',\n neutral300: '#424242',\n neutral400: '#4C4C4C',\n neutral500: '#666666',\n neutral600: '#808080',\n neutral700: '#A3A3A3',\n neutral750: '#B3B3B3',\n neutral800: '#CCCCCC',\n neutral900: '#F5F5F5',\n\n // Input and contrast\n contrast: '#FFFFFF',\n constrastOpacity50: 'rgba(255,255,255,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#B0B0B0',\n default: '#444444',\n muiPrimary: '#E9FB62',\n muiPrimaryBlack: '#FFFFFF',\n lightMuiPrimaryColorBackground: '#e9fb6214',\n lightBlueBackground: '#e9fb6214',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1890d5',\n muiSecondary: '#DE5B99',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#66BB6A',\n muiSuccessAlternate: '#81C784',\n\n // Transparency variants\n blackOpacity10: 'inherit',\n blackOpacity20: 'inherit',\n blackOpacity30: 'inherit',\n blackOpacity50: 'inherit',\n blackOpacity80: 'inherit',\n primaryOpacity10: 'rgba(233, 251, 98, 0.10)',\n primaryOpacity20: 'rgba(233, 251, 98, 0.20)',\n primaryOpacity30: 'rgba(233, 251, 98, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, .3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(255, 255, 255, 0.08)',\n // Active Button\n buttonActiveText: '#E9FB62',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#EF5350',\n};\n\nexport default darkPalette;\n","import { ThemePalette } from './interface';\n\n/**\n * Define the light palette using the ThemePalette interface.\n */\nconst lightPalette: ThemePalette = {\n // General colors\n white: '#FFFFFF',\n black: '#000000',\n\n // Neutral\n neutral50: '#F0EBE6',\n neutral100: '#FAFAFA',\n neutral150: '#F4F4F4',\n neutral200: '#F1F1F1',\n neutral250: '#ECECEC',\n neutral300: '#E0E0E0',\n neutral400: '#C8C8C8',\n neutral500: '#BDBDBD',\n neutral600: '#999999',\n neutral700: '#878787',\n neutral750: '#6c6c6c',\n neutral800: '#555555',\n neutral900: '#4D4D4D',\n\n // Input and contrast\n contrast: '#000000',\n constrastOpacity50: 'rgba(0,0,0,0.5)',\n\n // Icon and Material UI colors\n iconSearch: '#606060',\n default: '#E0E0E0',\n muiPrimary: '#0781CE',\n muiPrimaryBlack: '#000000',\n lightMuiPrimaryColorBackground: '#eff4fb',\n lightBlueBackground: '#eff4fb',\n muiPrimaryAlternate: '#07BAF1',\n muiPrimaryHover: '#1565c0',\n muiSecondary: '#A42966',\n muiSecondaryAlternate: '#EC613C',\n muiSuccess: '#4caf50',\n muiSuccessAlternate: '#357a38',\n\n // Transparency variants\n blackOpacity10: 'rgba(0,0,0,0.1)',\n blackOpacity20: 'rgba(0,0,0,0.2)',\n blackOpacity30: 'rgba(0,0,0,0.3)',\n blackOpacity50: 'rgba(0,0,0,0.5)',\n blackOpacity80: 'rgba(0,0,0,0.8)',\n primaryOpacity10: 'rgba(7, 129, 206, 0.10)',\n primaryOpacity20: 'rgba(7, 129, 206, 0.20)',\n primaryOpacity30: 'rgba(7, 129, 206, 0.30)',\n secondaryAlternateOpacity30: 'rgba(236, 97, 60, 0.3)',\n blueOpacity08: 'rgba(25, 118, 210, 0.08)',\n whiteOpacity10: 'rgba(255,255,255,0.1)',\n whiteOpacity20: 'rgba(255,255,255,0.2)',\n whiteOpacity40: 'rgba(255,255,255,0.4)',\n\n // Table rows and top bar\n topBar: '#2e3133',\n\n // Button colors\n // Round Button (default)\n buttonHoverBackground: 'rgba(0, 0, 0, 0.04)',\n // Active Button\n buttonActiveText: '#0781CE',\n // Contrast Button\n buttonContrastBorder: '#CECECE',\n buttonContrastText: '#CECECE',\n\n // Error Button\n error: '#D32F2F',\n};\n\nexport default lightPalette;\n","import darkPalette from './colors/darkPalette';\nimport lightPalette from './colors/lightPalette';\n\nconst stylesheet = localStorage.getItem('@stylesheet');\nexport const isDarkModeEnabled = stylesheet === 'styles/style-dark.css';\nconst palette = isDarkModeEnabled ? darkPalette : lightPalette;\n\ninterface Colors {\n // General colors\n white: string;\n black: string;\n\n // Neutral\n neutral50: string;\n neutral100: string;\n neutral150: string;\n neutral200: string;\n neutral250: string;\n neutral300: string;\n neutral400: string;\n neutral500: string;\n neutral600: string;\n neutral700: string;\n neutral750: string;\n neutral800: string;\n neutral900: string;\n\n // Input and contrast\n contrast: string;\n constrastOpacity50: string;\n\n // Icon and Material UI colors\n iconSearch: string;\n default: string;\n muiPrimary: string;\n muiPrimaryBlack: string;\n lightMuiPrimaryColorBackground: string;\n lightBlueBackground: string;\n muiPrimaryAlternate: string;\n muiPrimaryHover: string;\n muiSecondary: string;\n muiSecondaryAlternate: string;\n muiSuccess: string;\n muiSuccessAlternate: string;\n\n // Transparency\n blackOpacity10: string;\n blackOpacity20: string;\n blackOpacity30: string;\n blackOpacity50: string;\n blackOpacity80: string;\n primaryOpacity10: string;\n primaryOpacity20: string;\n primaryOpacity30: string;\n secondaryAlternateOpacity30: string;\n blueOpacity08: string;\n whiteOpacity10: string;\n whiteOpacity20: string;\n whiteOpacity40: string;\n\n // Table rows and top bar\n topBar: string;\n // Error Button\n error: string;\n\n roundButton: {\n default: {\n border: string;\n color: string;\n disabled: {\n color: string;\n };\n hover: {\n background: string;\n };\n };\n filled: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n active: {\n color: string;\n hover: {\n background: string;\n };\n };\n contrast: {\n border: string;\n color: string;\n hover: {\n background: string;\n };\n };\n tableButton: {\n color: string;\n };\n focused: {\n background: string;\n color: string;\n hover: {\n background: string;\n };\n };\n error: string;\n };\n\n movementCard: {\n default: {\n background: string;\n };\n disabled: {\n background: string;\n };\n pill: {\n color: string;\n background: string;\n };\n };\n\n rowProductCard: {\n locationSubtitle: string;\n };\n}\n\nexport const colors: Colors = {\n white: palette.white,\n black: palette.black,\n\n neutral50: palette.neutral50,\n neutral100: palette.neutral100,\n neutral150: palette.neutral150,\n neutral200: palette.neutral200,\n neutral250: palette.neutral250,\n neutral300: palette.neutral300,\n neutral400: palette.neutral400,\n neutral500: palette.neutral500,\n neutral600: palette.neutral600,\n neutral700: palette.neutral700,\n neutral750: palette.neutral750,\n neutral800: palette.neutral800,\n neutral900: palette.neutral900,\n\n // Input and contrast\n contrast: palette.contrast,\n constrastOpacity50: palette.constrastOpacity50,\n\n iconSearch: palette.iconSearch,\n default: palette.default,\n muiPrimary: palette.muiPrimary,\n muiPrimaryBlack: palette.muiPrimaryBlack,\n lightMuiPrimaryColorBackground: palette.lightMuiPrimaryColorBackground,\n lightBlueBackground: palette.lightBlueBackground,\n muiPrimaryAlternate: palette.muiPrimaryAlternate,\n muiPrimaryHover: palette.muiPrimaryHover,\n muiSecondary: palette.muiSecondary,\n muiSecondaryAlternate: palette.muiSecondaryAlternate,\n muiSuccess: palette.muiSuccess,\n muiSuccessAlternate: palette.muiSuccessAlternate,\n\n // Transparency\n blackOpacity10: palette.blackOpacity10,\n blackOpacity20: palette.blackOpacity20,\n blackOpacity30: palette.blackOpacity30,\n blackOpacity50: palette.blackOpacity50,\n blackOpacity80: palette.blackOpacity80,\n primaryOpacity10: palette.primaryOpacity10,\n primaryOpacity20: palette.primaryOpacity20,\n primaryOpacity30: palette.primaryOpacity30,\n secondaryAlternateOpacity30: palette.secondaryAlternateOpacity30,\n blueOpacity08: palette.blueOpacity08,\n whiteOpacity10: palette.whiteOpacity10,\n whiteOpacity20: palette.whiteOpacity20,\n whiteOpacity40: palette.whiteOpacity40,\n\n topBar: palette.topBar,\n error: palette.error,\n\n roundButton: {\n default: {\n border: palette.neutral600,\n color: palette.contrast,\n disabled: {\n color: palette.blackOpacity20,\n },\n hover: {\n background: palette.buttonHoverBackground,\n },\n },\n filled: {\n background: palette.neutral100,\n color: palette.blackOpacity80,\n hover: {\n background: palette.neutral250,\n },\n },\n active: {\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity20,\n },\n },\n contrast: {\n border: palette.buttonContrastBorder,\n color: palette.buttonContrastText,\n hover: {\n background: palette.whiteOpacity10,\n },\n },\n tableButton: {\n color: palette.neutral800,\n },\n focused: {\n background: palette.primaryOpacity20,\n color: palette.buttonActiveText,\n hover: {\n background: palette.primaryOpacity30,\n },\n },\n error: palette.error,\n },\n\n movementCard: {\n default: {\n background: palette.neutral100,\n },\n disabled: {\n background: palette.neutral250,\n },\n pill: {\n color: palette.neutral200,\n background: palette.neutral600,\n },\n },\n\n rowProductCard: {\n locationSubtitle: palette.neutral800,\n },\n};\n","import { useCallback, useMemo } from 'react';\nimport { useNavigate } from 'react-router';\n\nimport { icons } from '@natoora-libs/core/components';\nimport { featureNames, featuresAreEnabled } from '@/config/features';\n\ninterface DrawerAppChild {\n name: string;\n routeName: string;\n pinned: string;\n url: string;\n featureName?: string;\n}\n\ninterface DrawerApp {\n name: string;\n routeName: string;\n featureNames: string[];\n pinned: string | null;\n icon: React.ReactElement;\n url: string;\n children?: DrawerAppChild[];\n}\n\ninterface DrawerAppGroup {\n groupName: string;\n apps: DrawerApp[];\n}\n\nconst drawerAppGroup: DrawerAppGroup[] = [\n {\n groupName: 'Home',\n apps: [\n {\n name: 'Home',\n routeName: 'home',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconHome />,\n url: '/home',\n },\n ],\n },\n {\n groupName: 'App',\n apps: [\n {\n name: 'Notifications',\n routeName: 'appNotifications',\n featureNames: [featureNames.NOTIFICATIONS],\n pinned: 'notifications',\n icon: <icons.SvgIconNotification />,\n url: '/#/notifications',\n },\n {\n name: 'Promo Codes',\n routeName: 'promo_codes',\n featureNames: [featureNames.PROMO_CODES],\n pinned: 'promo_codes',\n icon: <icons.SvgIconPromoCode />,\n url: '/promo_codes',\n },\n {\n name: 'Search Categories',\n routeName: 'search-categories',\n featureNames: [featureNames.SEARCH_CATEGORIES],\n pinned: 'search_categories',\n icon: <icons.SvgIconSearchCategories />,\n url: '/search-categories',\n },\n {\n name: 'Content Management',\n routeName: 'content-management',\n featureNames: [featureNames.CONTENT_MANAGEMENT],\n pinned: 'content_management',\n icon: <icons.SvgIconContentManagement />,\n url: '/content-management',\n },\n ],\n },\n {\n groupName: 'Customer Service',\n apps: [\n {\n name: 'Aircall',\n routeName: 'recordedcalls',\n featureNames: [featureNames.AIRCALL],\n pinned: 'aircall',\n icon: <icons.SvgIconPhone />,\n url: '/air-call',\n },\n {\n name: 'Customers',\n routeName: 'customers',\n featureNames: [featureNames.CUSTOMERS],\n pinned: 'customers',\n icon: <icons.SvgIconAccount />,\n url: '/customers',\n children: [\n {\n name: 'Sites',\n routeName: 'customer-sites',\n pinned: 'customer-sites',\n url: '/customers/sites',\n },\n {\n name: 'Groups',\n routeName: 'customer-groups',\n pinned: 'customer-groups',\n url: '/customers/groups',\n },\n ],\n },\n {\n name: 'Orders',\n routeName: 'orders',\n featureNames: [featureNames.ORDERS],\n pinned: 'orders',\n icon: <icons.SvgIconOrders />,\n url: '/#/orders',\n },\n {\n name: 'Price Lists',\n routeName: 'price_list',\n featureNames: [featureNames.PRICE_LIST],\n pinned: 'price_list',\n icon: <icons.SvgIconPriceList />,\n url: '/#/price-list',\n },\n {\n name: 'Special Prices',\n routeName: 'special_prices',\n featureNames: [featureNames.SPECIAL_PRICES],\n pinned: 'special_prices',\n icon: <icons.SvgIconSpecialPrice />,\n url: '/#/pricing/special-prices',\n },\n ],\n },\n {\n groupName: 'Buying',\n apps: [\n {\n name: 'Purchase Orders',\n routeName: 'purchaseOrders',\n featureNames: [featureNames.PURCHASE_ORDERS],\n pinned: 'purchase_orders',\n icon: <icons.SvgIconBuying />,\n url: '/react/purchase-orders',\n },\n {\n name: 'Products',\n routeName: 'products',\n featureNames: [featureNames.PRODUCTS],\n pinned: 'products',\n icon: <icons.SvgIconProducts />,\n url: '/#/product-base-list',\n },\n {\n name: 'Suppliers',\n routeName: 'suppliers',\n featureNames: [featureNames.SUPPLIERS],\n pinned: 'suppliers',\n icon: <icons.SvgIconSupplier />,\n url: '/suppliers',\n },\n {\n name: 'Supplier Prices',\n routeName: 'supplier_prices',\n featureNames: [featureNames.SUPPLIER_PRICES],\n pinned: 'supplier_prices',\n icon: <icons.SvgIconSupplierPrices />,\n url: '/#/supplier-prices',\n },\n {\n name: 'Product Bulk Update',\n routeName: 'bulk-update',\n featureNames: [featureNames.BULK_UPDATE],\n pinned: 'product_bulk_update',\n icon: <icons.SvgIconImport />,\n url: '/bulk_update',\n },\n ],\n },\n {\n groupName: 'Operations',\n apps: [\n {\n name: 'Retail',\n routeName: 'retail',\n featureNames: [featureNames.RETAIL],\n pinned: 'retail',\n icon: <icons.SvgIconRetail />,\n url: '/#/retail/product-availability',\n },\n {\n name: 'Goods In',\n routeName: 'goodsin-list',\n featureNames: [featureNames.GOODS_IN],\n pinned: 'goods_in',\n icon: <icons.SvgIconGoodsin />,\n url: '/goodsin-list',\n },\n {\n name: 'Returns',\n routeName: 'goods-in-list',\n featureNames: [featureNames.RETURNS],\n pinned: 'returns',\n icon: <icons.SvgIconGoodsin />,\n url: '/returns',\n },\n {\n name: 'Stock and Locations',\n routeName: 'locations',\n featureNames: [featureNames.STOCK, featureNames.LOCATIONS],\n pinned: 'stock',\n icon: <icons.SvgIconLocation />,\n url: '/locations',\n children: [\n {\n name: 'Movements',\n routeName: 'movements',\n pinned: 'movements',\n url: '/movements',\n featureName: featureNames.STOCK_MOVEMENTS,\n },\n ],\n },\n {\n name: 'Kanban Cards',\n routeName: 'kanban',\n featureNames: [featureNames.KANBAN],\n pinned: 'kanban_cards',\n icon: <icons.SvgIconVkc />,\n url: '/#/kanbancards',\n },\n {\n name: 'Picking Stations',\n routeName: 'picking',\n featureNames: [featureNames.PICKING_STATIONS],\n pinned: 'picking_stations',\n icon: <icons.SvgIconScales />,\n url: '/#/pickingstation',\n },\n {\n name: 'Quality Control',\n routeName: 'qualityControl',\n featureNames: [featureNames.QUALITY_CONTROL],\n pinned: 'quality_control',\n icon: <icons.SvgIconQc />,\n url: '/#/quality-control',\n },\n {\n name: 'Service Delivery',\n routeName: 'runs',\n featureNames: [featureNames.SERVICE_DELIVERY],\n pinned: 'service_delivery',\n icon: <icons.SvgIconRuns />,\n url: '/#/transport',\n },\n {\n name: 'Ops Metrics',\n routeName: 'ops-metrics',\n featureNames: [featureNames.OPS_METRICS],\n pinned: 'ops_metrics',\n icon: <icons.SvgIconOpsMetrics />,\n url: '/ops-metrics',\n },\n ],\n },\n {\n groupName: 'Tools',\n apps: [\n {\n name: 'Accounts',\n routeName: 'accounts',\n featureNames: [featureNames.ACCOUNTS],\n pinned: 'accounts',\n icon: <icons.SvgIconAccounts />,\n url: '/#/accounts',\n },\n {\n name: 'Reports',\n routeName: 'reports',\n featureNames: [featureNames.REPORTS],\n pinned: 'reports',\n icon: <icons.SvgIconReports />,\n url: '/reports',\n },\n ],\n },\n {\n groupName: 'Settings',\n apps: [\n {\n name: 'Admin',\n routeName: 'admin',\n featureNames: [featureNames.ADMIN],\n pinned: 'admin',\n icon: <icons.SvgIconSetting />,\n url: '/admin',\n },\n {\n name: 'User Management',\n routeName: 'user-management',\n featureNames: [featureNames.USER_MANAGEMENT],\n pinned: 'users',\n icon: <icons.SvgIconUserManagement />,\n url: '/user-management',\n },\n {\n name: 'Logout',\n routeName: 'logout',\n featureNames: [],\n pinned: null,\n icon: <icons.SvgIconLogin />,\n url: '/logout',\n },\n ],\n },\n {\n groupName: 'Release Notes',\n apps: [\n {\n name: 'Release Notes',\n routeName: 'release-notes',\n featureNames: [],\n pinned: null,\n // icon: <icons.SvgIconReleaseNote />,\n icon: <icons.SvgIconLogin />,\n url: '/react/release-notes',\n },\n ],\n },\n];\n\nexport const useGetDrawerAppList = (enabledFeatures: string[]) => {\n const navigate = useNavigate();\n\n const navigateTo = useCallback((url: string) => {\n const isAngularRoute = url.startsWith('/#');\n const isMicroFrontendRoute =\n url === '/react/release-notes' ||\n url === '/react/purchase-orders' ||\n url === '/admin' ||\n url === '/reports';\n\n if (isAngularRoute || isMicroFrontendRoute) {\n window.location.assign(url);\n\n return;\n }\n\n const isMicroFrontendHost = [\n '/react/purchase-orders',\n '/react/release-notes',\n ].some((route) => window.location.pathname.includes(route));\n if (isMicroFrontendHost) {\n window.location.assign('/react' + url);\n }\n\n return navigate(url);\n }, []);\n\n const drawerAppList = useMemo(() => {\n if (!enabledFeatures?.length) {\n return [];\n }\n\n return drawerAppGroup\n .map((group) => {\n const enabledApps = group.apps\n .filter(\n (app) =>\n app.routeName === 'home' ||\n app.routeName === 'release-notes' ||\n app.routeName === 'logout' ||\n featuresAreEnabled({\n enabledFeatures,\n featureNames: app.featureNames,\n requireAll: false,\n }),\n )\n .map((app) => {\n const filteredChildren = app.children?.filter((child) => {\n if (child.featureName) {\n return enabledFeatures.includes(child.featureName);\n }\n\n return true;\n });\n\n return { ...app, children: filteredChildren };\n });\n\n return { ...group, apps: enabledApps };\n })\n .filter((group) => group.apps.length > 0);\n }, [enabledFeatures]);\n\n return {\n userSettingsUrl: '/#/user-settings',\n drawerAppList,\n navigateTo,\n };\n};\n","export const featureNames = {\n ACCOUNTS: 'accounts',\n ADMIN: 'admin',\n AIRCALL: 'aircall',\n BULK_UPDATE: 'product_bulk_update',\n CONTENT_MANAGEMENT: 'content_management',\n CUSTOMERS: 'customers',\n GOODS_IN: 'goods_in',\n KANBAN: 'kanban_cards',\n LOCATIONS: 'locations',\n NOTIFICATIONS: 'notifications',\n OPS_METRICS: 'ops_metrics',\n ORDERS: 'orders',\n PICKING_STATIONS: 'picking_stations',\n PRICE_LIST: 'price_list',\n PRODUCTS: 'products',\n PROMO_CODES: 'promo_codes',\n PURCHASE_ORDERS: 'purchase_orders',\n QUALITY_CONTROL: 'quality_control',\n REPORTS: 'reports',\n RETAIL: 'retail',\n RETURNS: 'returns',\n SEARCH_CATEGORIES: 'search_categories',\n SERVICE_DELIVERY: 'service_delivery',\n SPECIAL_PRICES: 'special_prices',\n STOCK: 'stock',\n STOCK_MOVEMENTS: 'stock_movements',\n SUPPLIERS: 'suppliers',\n SUPPLIER_PRICES: 'supplier_prices',\n USER_MANAGEMENT: 'users',\n};\n\nexport function featuresAreEnabled({\n enabledFeatures,\n featureNames,\n requireAll = true,\n}: {\n enabledFeatures: string[];\n featureNames: string[];\n requireAll?: boolean;\n}) {\n const storedPermissions = localStorage.getItem('permissions') || '';\n let enabled = false;\n\n if (requireAll) {\n enabled = featureNames.every(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n } else {\n enabled = featureNames.some(\n (feature) =>\n enabledFeatures.includes(feature) &&\n storedPermissions.includes(`${feature}_read`),\n );\n }\n\n return enabled;\n}\n","import { Box, Icon, IconButton, Tooltip } from '@mui/material';\nimport { useGetDrawerAppList } from '@/config/drawerAppList';\n\ntype PinnedItemsProps = {\n enabledFeatures: string[];\n pinnedApps: Record<string, boolean>;\n};\n\nexport const PinnedItems = ({\n enabledFeatures,\n pinnedApps,\n}: PinnedItemsProps) => {\n const { drawerAppList, navigateTo } = useGetDrawerAppList(enabledFeatures);\n const items = drawerAppList\n .flatMap((app) => app.apps)\n .filter((app) => app.pinned && pinnedApps[app.pinned]);\n\n return (\n <Box display=\"flex\" flexDirection=\"row\" gap={1.5}>\n {items.map((item) => (\n <Tooltip title={item.name} key={item.name}>\n <IconButton\n style={{ backgroundColor: 'gray', padding: 4 }}\n onClick={() => navigateTo(item.url)}\n >\n <Icon\n key={item.name}\n style={{ width: 32, height: 32, fill: 'white' }}\n >\n {item.icon}\n </Icon>\n </IconButton>\n </Tooltip>\n ))}\n </Box>\n );\n};\n","export const uiFeatureNames = {\n PURCHASE_ORDERS_REGIONS: 'purchases_regions',\n SUPPLIER_PORTAL_TAB: 'suppliers_portal_users_tab',\n SUPPLIER_PRICING_SECTION: 'suppliers_pricing_section',\n CUSTOMER_ESTIMATED_BASKET_SETTING: 'customers_estimated_basket_setting',\n ORDER_ISSUE_REPORTING: 'customers_order_issue_report_setting',\n CUSTOMER_PAYMENTS_SECTION: 'customers_payments_section',\n\n CUSTOMER_DASHBOARD_TAB: 'customers_dashboard_tab',\n CUSTOMER_DETAILS_TAB: 'customers_details_tab',\n CUSTOMER_TRANSPORT_TAB: 'customers_transport_tab',\n CUSTOMER_FINANCE_TAB: 'customers_finance_tab',\n CUSTOMER_ACTIVITY_TAB: 'customers_activity_tab',\n CUSTOMER_APP_TAB: 'customers_app_tab',\n CUSTOMER_STANDING_ORDERS_TAB: 'customers_standing_orders_tab',\n CUSTOMER_SUBSTITUTIONS_TAB: 'customers_substitutions_tab',\n CUSTOMER_PREFERENCES_TAB: 'customers_preferences_tab',\n\n PRODUCT_PREFERENCES_SECTION: 'product_preferences_section',\n};\n\nexport const uiFeaturesAreEnabled = (\n enabledUIFeatures: string[] | undefined,\n feature: string,\n) => enabledUIFeatures?.includes(feature);\n"],"mappings":"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","names":["featureNames","jsx","Box","Icon","jsx","Box","Icon"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@natoora-libs/drawer-menu",
3
- "version": "0.0.13",
3
+ "version": "0.0.15",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -26,8 +26,8 @@
26
26
  "test:coverage": "jest --coverage"
27
27
  },
28
28
  "dependencies": {
29
- "tss-react": "^4.9.15",
30
- "@natoora-libs/core": "0.1.8"
29
+ "@natoora-libs/core": "0.1.8",
30
+ "tss-react": "^4.9.15"
31
31
  },
32
32
  "devDependencies": {
33
33
  "@emotion/react": "^11.14.0",
@@ -92,4 +92,4 @@
92
92
  "react-query": "^3.19.6",
93
93
  "react-router": "^7.6.3"
94
94
  }
95
- }
95
+ }