@natoora-libs/drawer-menu 0.1.20-dev-ticket-system-v1 → 0.1.21
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 +1 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -9
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -257,7 +257,6 @@ var featureNames = {
|
|
|
257
257
|
SUPPLIERS: "suppliers",
|
|
258
258
|
SUPPLIER_PRICES: "supplier_prices",
|
|
259
259
|
TASK_MANAGEMENT: "task_management",
|
|
260
|
-
TICKET_SYSTEM: "ticket_system",
|
|
261
260
|
USER_MANAGEMENT: "users"
|
|
262
261
|
};
|
|
263
262
|
function featuresAreEnabled({
|
|
@@ -519,14 +518,6 @@ var drawerAppGroup = [
|
|
|
519
518
|
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconOrders, {}),
|
|
520
519
|
url: "/task-management"
|
|
521
520
|
},
|
|
522
|
-
{
|
|
523
|
-
name: "Ticket System",
|
|
524
|
-
routeName: "ticketSystem",
|
|
525
|
-
featureNames: [featureNames.TICKET_SYSTEM],
|
|
526
|
-
pinned: "ticketSystem",
|
|
527
|
-
icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_components.icons.SvgIconOrders, {}),
|
|
528
|
-
url: "/ticket-system"
|
|
529
|
-
},
|
|
530
521
|
{
|
|
531
522
|
name: "Accounts",
|
|
532
523
|
routeName: "accounts",
|
|
@@ -875,6 +866,7 @@ var uiFeatureNames = {
|
|
|
875
866
|
CUSTOMER_STANDING_ORDERS_TAB: "customers_standing_orders_tab",
|
|
876
867
|
CUSTOMER_SUBSTITUTIONS_TAB: "customers_substitutions_tab",
|
|
877
868
|
CUSTOMER_PREFERENCES_TAB: "customers_preferences_tab",
|
|
869
|
+
PRODUCT_BUNDLE_TAB: "product_bundle_tab",
|
|
878
870
|
PRODUCT_PREFERENCES_SECTION: "product_preferences_section"
|
|
879
871
|
};
|
|
880
872
|
var uiFeaturesAreEnabled = (enabledUIFeatures, feature) => enabledUIFeatures?.includes(feature);
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/components/LeftDrawer/LeftDrawer.tsx","../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 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 lightPalette from './colors/lightPalette';\n\nexport const isDarkModeEnabled = false;\nconst palette = 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 { ReactElement, useCallback, useMemo } from 'react';\nimport { useNavigate } from 'react-router';\n\nimport { icons } from '@natoora-libs/core/components';\n\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: 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: '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 },\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: '/products',\n },\n {\n name: 'Suppliers',\n routeName: 'suppliers',\n featureNames: [featureNames.SUPPLIERS],\n pinned: 'suppliers',\n icon: <icons.SvgIconSupplier />,\n url: '/react/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: 'Production Management',\n routeName: 'productionManagement',\n featureNames: [featureNames.PRODUCTION_MANAGEMENT],\n pinned: 'production_management',\n icon: <icons.SvgIconSupplier />,\n url: '/production-management',\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: '/service-delivery',\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: 'Task Management',\n routeName: 'taskManagement',\n featureNames: [featureNames.ACCOUNTS],\n pinned: 'taskManagement',\n icon: <icons.SvgIconOrders />,\n url: '/task-management',\n },\n {\n name: 'Ticket System',\n routeName: 'ticketSystem',\n featureNames: [featureNames.TICKET_SYSTEM],\n pinned: 'ticketSystem',\n icon: <icons.SvgIconOrders />,\n url: '/ticket-system',\n },\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 === '/react/suppliers' ||\n url === '/admin' ||\n url === '/reports';\n\n if (isAngularRoute || isMicroFrontendRoute) {\n return window.location.assign(url);\n }\n\n const isMicroFrontendHost = [\n '/react/purchase-orders',\n '/react/release-notes',\n '/react/suppliers',\n ].some((route) => window.location.pathname.includes(route));\n if (isMicroFrontendHost) {\n return 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 PRODUCTION_MANAGEMENT: 'production_management',\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 TASK_MANAGEMENT: 'task_management',\n TICKET_SYSTEM: 'ticket_system',\n USER_MANAGEMENT: 'users',\n} as const;\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';\n\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/components/LeftDrawer/LeftDrawer.tsx","../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 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 lightPalette from './colors/lightPalette';\n\nexport const isDarkModeEnabled = false;\nconst palette = 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 { ReactElement, useCallback, useMemo } from 'react';\nimport { useNavigate } from 'react-router';\n\nimport { icons } from '@natoora-libs/core/components';\n\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: 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: '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 },\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: '/products',\n },\n {\n name: 'Suppliers',\n routeName: 'suppliers',\n featureNames: [featureNames.SUPPLIERS],\n pinned: 'suppliers',\n icon: <icons.SvgIconSupplier />,\n url: '/react/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: 'Production Management',\n routeName: 'productionManagement',\n featureNames: [featureNames.PRODUCTION_MANAGEMENT],\n pinned: 'production_management',\n icon: <icons.SvgIconSupplier />,\n url: '/production-management',\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: '/service-delivery',\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: 'Task Management',\n routeName: 'taskManagement',\n featureNames: [featureNames.ACCOUNTS],\n pinned: 'taskManagement',\n icon: <icons.SvgIconOrders />,\n url: '/task-management',\n },\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 === '/react/suppliers' ||\n url === '/admin' ||\n url === '/reports';\n\n if (isAngularRoute || isMicroFrontendRoute) {\n return window.location.assign(url);\n }\n\n const isMicroFrontendHost = [\n '/react/purchase-orders',\n '/react/release-notes',\n '/react/suppliers',\n ].some((route) => window.location.pathname.includes(route));\n if (isMicroFrontendHost) {\n return 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 PRODUCTION_MANAGEMENT: 'production_management',\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 TASK_MANAGEMENT: 'task_management',\n USER_MANAGEMENT: 'users',\n} as const;\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';\n\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_BUNDLE_TAB: 'product_bundle_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"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -80,7 +80,6 @@ declare const featureNames: {
|
|
|
80
80
|
readonly SUPPLIERS: "suppliers";
|
|
81
81
|
readonly SUPPLIER_PRICES: "supplier_prices";
|
|
82
82
|
readonly TASK_MANAGEMENT: "task_management";
|
|
83
|
-
readonly TICKET_SYSTEM: "ticket_system";
|
|
84
83
|
readonly USER_MANAGEMENT: "users";
|
|
85
84
|
};
|
|
86
85
|
declare function featuresAreEnabled({ enabledFeatures, featureNames, requireAll, }: {
|
|
@@ -105,6 +104,7 @@ declare const uiFeatureNames: {
|
|
|
105
104
|
CUSTOMER_STANDING_ORDERS_TAB: string;
|
|
106
105
|
CUSTOMER_SUBSTITUTIONS_TAB: string;
|
|
107
106
|
CUSTOMER_PREFERENCES_TAB: string;
|
|
107
|
+
PRODUCT_BUNDLE_TAB: string;
|
|
108
108
|
PRODUCT_PREFERENCES_SECTION: string;
|
|
109
109
|
};
|
|
110
110
|
declare const uiFeaturesAreEnabled: (enabledUIFeatures: string[] | undefined, feature: string) => boolean | undefined;
|
package/dist/index.d.ts
CHANGED
|
@@ -80,7 +80,6 @@ declare const featureNames: {
|
|
|
80
80
|
readonly SUPPLIERS: "suppliers";
|
|
81
81
|
readonly SUPPLIER_PRICES: "supplier_prices";
|
|
82
82
|
readonly TASK_MANAGEMENT: "task_management";
|
|
83
|
-
readonly TICKET_SYSTEM: "ticket_system";
|
|
84
83
|
readonly USER_MANAGEMENT: "users";
|
|
85
84
|
};
|
|
86
85
|
declare function featuresAreEnabled({ enabledFeatures, featureNames, requireAll, }: {
|
|
@@ -105,6 +104,7 @@ declare const uiFeatureNames: {
|
|
|
105
104
|
CUSTOMER_STANDING_ORDERS_TAB: string;
|
|
106
105
|
CUSTOMER_SUBSTITUTIONS_TAB: string;
|
|
107
106
|
CUSTOMER_PREFERENCES_TAB: string;
|
|
107
|
+
PRODUCT_BUNDLE_TAB: string;
|
|
108
108
|
PRODUCT_PREFERENCES_SECTION: string;
|
|
109
109
|
};
|
|
110
110
|
declare const uiFeaturesAreEnabled: (enabledUIFeatures: string[] | undefined, feature: string) => boolean | undefined;
|
package/dist/index.js
CHANGED
|
@@ -232,7 +232,6 @@ var featureNames = {
|
|
|
232
232
|
SUPPLIERS: "suppliers",
|
|
233
233
|
SUPPLIER_PRICES: "supplier_prices",
|
|
234
234
|
TASK_MANAGEMENT: "task_management",
|
|
235
|
-
TICKET_SYSTEM: "ticket_system",
|
|
236
235
|
USER_MANAGEMENT: "users"
|
|
237
236
|
};
|
|
238
237
|
function featuresAreEnabled({
|
|
@@ -494,14 +493,6 @@ var drawerAppGroup = [
|
|
|
494
493
|
icon: /* @__PURE__ */ jsx(icons.SvgIconOrders, {}),
|
|
495
494
|
url: "/task-management"
|
|
496
495
|
},
|
|
497
|
-
{
|
|
498
|
-
name: "Ticket System",
|
|
499
|
-
routeName: "ticketSystem",
|
|
500
|
-
featureNames: [featureNames.TICKET_SYSTEM],
|
|
501
|
-
pinned: "ticketSystem",
|
|
502
|
-
icon: /* @__PURE__ */ jsx(icons.SvgIconOrders, {}),
|
|
503
|
-
url: "/ticket-system"
|
|
504
|
-
},
|
|
505
496
|
{
|
|
506
497
|
name: "Accounts",
|
|
507
498
|
routeName: "accounts",
|
|
@@ -850,6 +841,7 @@ var uiFeatureNames = {
|
|
|
850
841
|
CUSTOMER_STANDING_ORDERS_TAB: "customers_standing_orders_tab",
|
|
851
842
|
CUSTOMER_SUBSTITUTIONS_TAB: "customers_substitutions_tab",
|
|
852
843
|
CUSTOMER_PREFERENCES_TAB: "customers_preferences_tab",
|
|
844
|
+
PRODUCT_BUNDLE_TAB: "product_bundle_tab",
|
|
853
845
|
PRODUCT_PREFERENCES_SECTION: "product_preferences_section"
|
|
854
846
|
};
|
|
855
847
|
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/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 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 lightPalette from './colors/lightPalette';\n\nexport const isDarkModeEnabled = false;\nconst palette = 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 { ReactElement, useCallback, useMemo } from 'react';\nimport { useNavigate } from 'react-router';\n\nimport { icons } from '@natoora-libs/core/components';\n\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: 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: '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 },\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: '/products',\n },\n {\n name: 'Suppliers',\n routeName: 'suppliers',\n featureNames: [featureNames.SUPPLIERS],\n pinned: 'suppliers',\n icon: <icons.SvgIconSupplier />,\n url: '/react/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: 'Production Management',\n routeName: 'productionManagement',\n featureNames: [featureNames.PRODUCTION_MANAGEMENT],\n pinned: 'production_management',\n icon: <icons.SvgIconSupplier />,\n url: '/production-management',\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: '/service-delivery',\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: 'Task Management',\n routeName: 'taskManagement',\n featureNames: [featureNames.ACCOUNTS],\n pinned: 'taskManagement',\n icon: <icons.SvgIconOrders />,\n url: '/task-management',\n },\n {\n name: 'Ticket System',\n routeName: 'ticketSystem',\n featureNames: [featureNames.TICKET_SYSTEM],\n pinned: 'ticketSystem',\n icon: <icons.SvgIconOrders />,\n url: '/ticket-system',\n },\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 === '/react/suppliers' ||\n url === '/admin' ||\n url === '/reports';\n\n if (isAngularRoute || isMicroFrontendRoute) {\n return window.location.assign(url);\n }\n\n const isMicroFrontendHost = [\n '/react/purchase-orders',\n '/react/release-notes',\n '/react/suppliers',\n ].some((route) => window.location.pathname.includes(route));\n if (isMicroFrontendHost) {\n return 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 PRODUCTION_MANAGEMENT: 'production_management',\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 TASK_MANAGEMENT: 'task_management',\n TICKET_SYSTEM: 'ticket_system',\n USER_MANAGEMENT: 'users',\n} as const;\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';\n\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"]}
|
|
1
|
+
{"version":3,"sources":["../src/components/LeftDrawer/LeftDrawer.tsx","../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 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 lightPalette from './colors/lightPalette';\n\nexport const isDarkModeEnabled = false;\nconst palette = 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 { ReactElement, useCallback, useMemo } from 'react';\nimport { useNavigate } from 'react-router';\n\nimport { icons } from '@natoora-libs/core/components';\n\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: 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: '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 },\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: '/products',\n },\n {\n name: 'Suppliers',\n routeName: 'suppliers',\n featureNames: [featureNames.SUPPLIERS],\n pinned: 'suppliers',\n icon: <icons.SvgIconSupplier />,\n url: '/react/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: 'Production Management',\n routeName: 'productionManagement',\n featureNames: [featureNames.PRODUCTION_MANAGEMENT],\n pinned: 'production_management',\n icon: <icons.SvgIconSupplier />,\n url: '/production-management',\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: '/service-delivery',\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: 'Task Management',\n routeName: 'taskManagement',\n featureNames: [featureNames.ACCOUNTS],\n pinned: 'taskManagement',\n icon: <icons.SvgIconOrders />,\n url: '/task-management',\n },\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 === '/react/suppliers' ||\n url === '/admin' ||\n url === '/reports';\n\n if (isAngularRoute || isMicroFrontendRoute) {\n return window.location.assign(url);\n }\n\n const isMicroFrontendHost = [\n '/react/purchase-orders',\n '/react/release-notes',\n '/react/suppliers',\n ].some((route) => window.location.pathname.includes(route));\n if (isMicroFrontendHost) {\n return 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 PRODUCTION_MANAGEMENT: 'production_management',\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 TASK_MANAGEMENT: 'task_management',\n USER_MANAGEMENT: 'users',\n} as const;\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';\n\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_BUNDLE_TAB: 'product_bundle_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"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@natoora-libs/drawer-menu",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.21",
|
|
4
4
|
"private": false,
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -77,4 +77,4 @@
|
|
|
77
77
|
"react-query": "^3.19.6",
|
|
78
78
|
"react-router": "^7.12.0"
|
|
79
79
|
}
|
|
80
|
-
}
|
|
80
|
+
}
|