{"version":3,"file":"CustomMenuPage.mjs","names":["React","useMemo","PropTypes","MenuPage","makeStyles","Typography","useStyles","theme","root","position","top","right","bottom","left","overflowY","buildInnerMenuFromItems","items","menuTitle","idPrefix","showItemCount","itemCountAccessor","childrenAccessor","idMap","buildViews","list","parentKeyPath","parentView","map","item","idx","itemKey","id","ID","groupID","keyPath","menuStructureId","itemCount","cnt","undefined","e","__menuStructureId","__itemKey","parametersObj","FluentIcon","PageId","defaultDisplay","view","menuItemInstance","menuItemInstanceId","clusterId","menuItemId","name","parameters","JSON","stringify","isActive","roleIds","groupIds","tenantSsoId","parentMenuItemInstanceId","title","order","parentId","unsubscribed","menuItemInstanceStructures","children","Array","isArray","length","views","innerMenu","menuItemInstanceStructureViews","CustomMenuPage","t0","$","_c","t1","className","t2","mainContent","clientMainContent","t3","t4","t5","t6","allowMissingPageParam","t7","searchParamsTransformer","t8","t9","classes","t10","t11","t12","selectedNode","menuItemsList","t13","clientContent","selectedNode_1","menuItemsList_1","composedMainContent","propTypes","array","string","func","bool"],"sources":["../../src/menuPage/CustomMenuPage.jsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport PropTypes from 'prop-types';\nimport MenuPage from './MenuPage';\nimport { makeStyles, Typography } from '@material-ui/core';\n\nconst useStyles = makeStyles((theme) => ({\n  root: {\n    position: 'absolute',\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    overflowY: 'auto'\n  }\n}));\n\nfunction buildInnerMenuFromItems(\n  items = [],\n  menuTitle,\n  idPrefix = 'custom',\n  showItemCount = false,\n  itemCountAccessor = null,\n  childrenAccessor = null\n) {\n  const idMap = {};\n\n  const buildViews = (list, parentKeyPath, parentView) =>\n    (list || []).map((item, idx) => {\n      const itemKey = item.id ?? item.ID ?? item.groupID ?? idx;\n      // compose ids along the parent path so nested keys stay unique;\n      // the delimiter must not be '-' because idPrefix joining and consumer\n      // keys commonly contain hyphens (e.g. top-level 'a-b' vs nested a > b)\n      const keyPath = parentView\n        ? `${parentKeyPath}::${itemKey}`\n        : `${itemKey}`;\n      const menuStructureId = `${idPrefix}-${keyPath}`;\n\n      // compute optional count using accessor\n      let itemCount = null;\n      if (showItemCount && typeof itemCountAccessor === 'function') {\n        try {\n          const cnt = itemCountAccessor(item);\n          if (cnt !== undefined && cnt !== null) {\n            itemCount = cnt;\n          }\n        } catch (e) {}\n      }\n\n      idMap[menuStructureId] = item;\n      item.__menuStructureId = menuStructureId;\n      item.__itemKey = itemKey;\n\n      const parametersObj = {\n        FluentIcon: 'PageListIcon',\n        PageId: '',\n        defaultDisplay: 'expanded'\n      };\n      if (itemCount !== null) {\n        parametersObj.itemCount = itemCount;\n      }\n\n      const view = {\n        menuStructureId,\n        menuItemInstance: {\n          menuItemInstanceId: `${idPrefix}-item-${keyPath}`,\n          clusterId: null,\n          menuItemId: null,\n          name: item.name ?? '',\n          parameters: JSON.stringify(parametersObj),\n          isActive: true,\n          roleIds: [],\n          groupIds: [],\n          tenantSsoId: null,\n          parentMenuItemInstanceId: parentView\n            ? parentView.menuItemInstance.menuItemInstanceId\n            : null,\n          items: null\n        },\n        title: item.name ?? '',\n        order: idx,\n        parentId: parentView ? parentView.menuStructureId : null,\n        unsubscribed: false,\n        menuItemInstanceStructures: []\n      };\n\n      // opt-in nesting: only recurse when the client provided a childrenAccessor\n      if (typeof childrenAccessor === 'function') {\n        const children = childrenAccessor(item);\n        if (Array.isArray(children) && children.length > 0) {\n          view.menuItemInstanceStructures = buildViews(children, keyPath, view);\n        }\n      }\n\n      return view;\n    });\n\n  const views = buildViews(items, '', null);\n\n  const innerMenu = {\n    // set the inner menu name only when client provided a menuTitle; leave blank when not provided\n    name: menuTitle ? menuTitle : '',\n    menuItemInstanceStructureViews: views\n  };\n\n  return { innerMenu, idMap };\n}\n\nconst CustomMenuPage = ({\n  items = [],\n  className = '',\n  menuTitle,\n  mainContent: clientMainContent,\n  idPrefix = 'custom',\n  showItemCount = false,\n  itemCountAccessor = null,\n  childrenAccessor = null,\n  allowMissingPageParam = false,\n  searchParamsTransformer = null\n}) => {\n  const classes = useStyles();\n\n const { innerMenu, idMap } = useMemo(\n    () =>\n      buildInnerMenuFromItems(\n        items,\n        menuTitle,\n        idPrefix,\n        showItemCount,\n        itemCountAccessor,\n        childrenAccessor\n      ),\n    [\n      items,\n      menuTitle,\n      idPrefix,\n      showItemCount,\n      itemCountAccessor,\n      childrenAccessor\n    ]\n  );\n\n  // Expect client application to provide mainContent. If not provided, render an empty container.\n  const clientContent = clientMainContent\n    ? ({ selectedNode, menuItemsList }) =>\n        clientMainContent({\n          selectedNode,\n          menuItemsList,\n          idMap,\n          items,\n          classes,\n          className\n        })\n    : ({ selectedNode, menuItemsList }) => (\n        <div className={`${classes.root} ${className}`} />\n      );\n\n  const composedMainContent = ({ selectedNode, menuItemsList }) => (\n    <div className={`${classes.root} ${className}`}>\n      {clientContent({ selectedNode, menuItemsList })}\n    </div>\n  );\n\n  return (\n    <MenuPage\n      innerMenuOverride={innerMenu}\n      mainContent={composedMainContent}\n      menuTitle={menuTitle}\n      allowMissingPageParam={allowMissingPageParam}\n      searchParamsTransformer={searchParamsTransformer}\n    />\n  );\n};\n\nCustomMenuPage.propTypes = {\n  items: PropTypes.array,\n  className: PropTypes.string,\n  menuTitle: PropTypes.string,\n  mainContent: PropTypes.func,\n  idPrefix: PropTypes.string,\n  showItemCount: PropTypes.bool,\n  itemCountAccessor: PropTypes.func,\n  childrenAccessor: PropTypes.func,\n  allowMissingPageParam: PropTypes.bool,\n  searchParamsTransformer: PropTypes.func\n};\n\nexport default CustomMenuPage;\n"],"mappings":"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"}