{"version":3,"file":"useDropdownOptions.mjs","sources":["../../../../components/dropdown/hooks/useDropdownOptions.ts"],"sourcesContent":["import { computed, ComputedRef, VNode, getCurrentInstance, Slots, Component } from 'vue';\nimport { isArray, isString, camelCase } from 'lodash-es';\n\nimport { useChildComponentSlots } from '@tdesign/shared-hooks';\nimport type { DropdownOption, TdDropdownProps } from '../type';\n\nexport const getOptionsFromChildren = (menuNode: VNode | VNode[]): DropdownOption[] => {\n  if (!menuNode) return [];\n  // 处理内部嵌套场景\n  if (isArray(menuNode) && (menuNode[0]?.type as Component)?.name === 'TDropdownMenu') {\n    // TODO: RawSlots\n    // @ts-ignore\n    const groupChildren = menuNode[0]?.children?.default?.();\n    if (isArray(groupChildren)) {\n      return getOptionsFromChildren(groupChildren);\n    }\n  }\n\n  if (isArray(menuNode)) {\n    menuNode = menuNode.reduce((acc, item) => {\n      acc = acc.concat(isArray(item.children) ? item.children : item);\n      return acc;\n    }, []);\n    return menuNode\n      .map((item) => {\n        const slotContent = (item.children as any)?.content?.();\n        const slotPrefixIcon = (item.children as any)?.prefixIcon?.() || (item.children as any)?.['prefix-icon']?.();\n        const groupChildren = (item.children as any)?.default?.();\n\n        // 当前节点的渲染内容\n        const contentCtx = groupChildren?.filter?.(\n          (v: VNode) => !['TDropdownMenu', 'TDropdownItem'].includes((v.type as { name: string })?.name),\n        );\n        // 嵌套菜单的节点\n        const childrenCtx = groupChildren?.filter?.(\n          (v: VNode) =>\n            !isString(v.children) && ['TDropdownMenu', 'TDropdownItem'].includes((v.type as { name: string })?.name),\n        );\n\n        // 将item.props的属性名都转成驼峰，再进行传递\n        const itemProps = Object.keys(item.props || {}).reduce((props: typeof item.props, propName) => {\n          // 处理 TDropdownItem 的 boolean attribute\n          if (\n            item.props[propName] === '' &&\n            (item.type as Component)?.name === 'TDropdownItem' &&\n            ['active', 'divider', 'disabled'].includes(propName)\n          ) {\n            props[camelCase(propName)] = true;\n          } else {\n            props[camelCase(propName)] = item.props[propName];\n          }\n          return props;\n        }, {});\n\n        return {\n          content: slotContent || contentCtx || groupChildren,\n          ...itemProps,\n          ...(slotPrefixIcon ? { prefixIcon: () => slotPrefixIcon } : {}),\n          children: childrenCtx?.length > 0 ? getOptionsFromChildren(childrenCtx) : null,\n        };\n      })\n      .filter((v) => !!v.content);\n  }\n\n  // 处理v-if的场景\n  if (isArray(menuNode) && isArray(menuNode[0]?.children)) return getOptionsFromChildren(menuNode[0]?.children);\n\n  return [];\n};\n\nexport default function useDropdownOptions(props: TdDropdownProps): ComputedRef<DropdownOption[]> {\n  const getChildComponentSlots = useChildComponentSlots();\n  const instance = getCurrentInstance();\n  const menuSlot =\n    (getChildComponentSlots('DropdownMenu')?.[0]?.children as Slots)?.default?.() || instance.slots?.dropdown?.();\n\n  const dropdownOptions = computed(() => {\n    if (props.options && props.options.length > 0) return props.options;\n\n    return getOptionsFromChildren(menuSlot);\n  });\n  return dropdownOptions;\n}\n"],"names":["getOptionsFromChildren","menuNode","_menuNode$","_menuNode$3","_menuNode$4","isArray","type","name","_menuNode$2","_menuNode$2$default","groupChildren","children","call","reduce","acc","item","concat","map","_item$children","_item$children$conten","_item$children2","_item$children2$prefi","_item$children3","_item$children3$prefi","_item$children4","_item$children4$defau","_groupChildren$filter","_groupChildren$filter2","slotContent","content","slotPrefixIcon","prefixIcon","contentCtx","filter","v","_v$type","includes","childrenCtx","_v$type2","isString","itemProps","Object","keys","props","propName","_item$type","camelCase","_objectSpread","length","useDropdownOptions","_getChildComponentSlo","_getChildComponentSlo2","_instance$slots","_instance$slots$dropd","getChildComponentSlots","useChildComponentSlots","instance","getCurrentInstance","menuSlot","slots","dropdown","dropdownOptions","computed","options"],"mappings":"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"}