{"version":3,"file":"useItems.mjs","sources":["../../../../../../../packages/components/menu/src/hooks/useItems.tsx"],"sourcesContent":["import type { Key } from '@antdv/types';\nimport type { VNode } from 'vue';\nimport type {\n  ItemType,\n  MenuDividerType as VcMenuDividerType,\n  MenuItemGroupType as VcMenuItemGroupType,\n  MenuItemType as VcMenuItemType,\n  SubMenuType as VcSubMenuType,\n} from '../interface';\nimport type { MenuProps } from '../props';\nimport type { StoreMenuInfo } from './useMenuContext';\nimport { ref, shallowRef, watch } from 'vue';\nimport MenuDivider from '../Divider';\nimport ItemGroup from '../ItemGroup';\nimport MenuItem from '../MenuItem';\nimport SubMenu from '../SubMenu';\n\nexport interface MenuItemType extends VcMenuItemType {\n  danger?: boolean\n  icon?: VNode | ((item: MenuItemType) => VNode)\n  title?: string\n}\n\nexport interface SubMenuType extends Omit<VcSubMenuType, 'children'> {\n  icon?: VNode | ((item: SubMenuType) => VNode)\n  children: ItemType[]\n}\n\nexport interface MenuItemGroupType extends Omit<VcMenuItemGroupType, 'children'> {\n  children?: MenuItemType[]\n  key?: Key\n}\n\nexport interface MenuDividerType extends VcMenuDividerType {\n  dashed?: boolean\n  key?: Key\n}\n\nfunction convertItemsToNodes(\n  list: ItemType[],\n  store: Map<string, StoreMenuInfo>,\n  parentMenuInfo?: {\n    childrenEventKeys: string[]\n    parentKeys: string[]\n  },\n) {\n  return (list || [])\n    .map((opt, index) => {\n      if (opt && typeof opt === 'object') {\n        const { label, children, key, type, ...restProps } = opt as any;\n        const mergedKey = key ?? `tmp-${index}`;\n        // 此处 eventKey === key, 移除 children 后可以移除 eventKey\n        const parentKeys = parentMenuInfo ? parentMenuInfo.parentKeys.slice() : [];\n        const childrenEventKeys = [];\n        // if\n        const menuInfo = {\n          eventKey: mergedKey,\n          key: mergedKey,\n          parentEventKeys: ref<string[]>(parentKeys),\n          parentKeys: ref<string[]>(parentKeys),\n          childrenEventKeys: ref<string[]>(childrenEventKeys),\n          isLeaf: false,\n        };\n\n        // MenuItemGroup & SubMenuItem\n        if (children || type === 'group') {\n          if (type === 'group') {\n            const childrenNodes = convertItemsToNodes(children, store, parentMenuInfo);\n            // Group\n            return (\n              <ItemGroup key={mergedKey} {...restProps} title={label} originItemValue={opt}>\n                {childrenNodes}\n              </ItemGroup>\n            );\n          }\n          store.set(mergedKey, menuInfo);\n          if (parentMenuInfo)\n            parentMenuInfo.childrenEventKeys.push(mergedKey);\n\n          // Sub Menu\n          const childrenNodes = convertItemsToNodes(children, store, {\n            childrenEventKeys,\n            parentKeys: [].concat(parentKeys, mergedKey),\n          });\n          return (\n            <SubMenu key={mergedKey} {...restProps} title={label} originItemValue={opt}>\n              {childrenNodes}\n            </SubMenu>\n          );\n        }\n\n        // MenuItem & Divider\n        if (type === 'divider')\n          return <MenuDivider key={mergedKey} {...restProps} />;\n\n        menuInfo.isLeaf = true;\n        store.set(mergedKey, menuInfo);\n        return (\n          <MenuItem key={mergedKey} {...restProps} originItemValue={opt}>\n            {label}\n          </MenuItem>\n        );\n      }\n\n      return null;\n    })\n    .filter(opt => opt);\n}\n\n// FIXME: Move logic here in v4\n/**\n * We simply convert `items` to VueNode for reuse origin component logic. But we need move all the\n * logic from component into this hooks when in v4\n */\nexport default function useItems(props: MenuProps) {\n  const itemsNodes = shallowRef([]);\n  const hasItmes = shallowRef(false);\n  const store = shallowRef(new Map<string, StoreMenuInfo>());\n  watch(\n    () => props.items,\n    () => {\n      const newStore = new Map<string, StoreMenuInfo>();\n      hasItmes.value = false;\n      if (props.items) {\n        hasItmes.value = true;\n        itemsNodes.value = convertItemsToNodes(props.items as ItemType[], newStore);\n      } else {\n        itemsNodes.value = undefined;\n      }\n      store.value = newStore;\n    },\n    { immediate: true, deep: true },\n  );\n  return { itemsNodes, store, hasItmes };\n}\n"],"names":["convertItemsToNodes","list","store","parentMenuInfo","map","opt","index","label","children","key","type","restProps","mergedKey","parentKeys","slice","childrenEventKeys","menuInfo","eventKey","parentEventKeys","ref","isLeaf","childrenNodes","_createVNode","ItemGroup","default","set","push","concat","SubMenu","MenuDivider","MenuItem","filter","useItems","props","itemsNodes","shallowRef","hasItmes","Map","watch","items","newStore","value","undefined","immediate","deep"],"mappings":"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"}