UNPKG

tdesign-vue-next

Version:
1 lines 5.74 kB
{"version":3,"file":"useEllipsis.mjs","sources":["../../../../components/breadcrumb/hooks/useEllipsis.ts"],"sourcesContent":["import { computed, ComputedRef, toRefs } from 'vue';\nimport type { TdBreadcrumbItemProps, TdBreadcrumbProps } from '../type';\nimport log from '@tdesign/common-js/log/index';\nimport type { TNode } from '../../common';\n\nfunction valueIsZeroOrUndefined(val: number | string) {\n return val === 0 || val === undefined;\n}\n\nexport const useEllipsis = (\n props: TdBreadcrumbProps,\n getBreadcrumbItems: ComputedRef<TdBreadcrumbItemProps[]>,\n ellipsisContent: string | TNode,\n) => {\n const { maxItems, itemsBeforeCollapse, itemsAfterCollapse } = toRefs(props);\n\n // 是否需要显示省略号\n const shouldShowEllipsis = computed(() => {\n const items = getBreadcrumbItems.value;\n const currentMaxItems = maxItems.value ?? 0;\n const totalItems = items.length;\n const itemsCollapseSum = itemsBeforeCollapse.value + itemsAfterCollapse.value;\n\n // 配置有误的情况,不显示省略并告警\n if (\n currentMaxItems > 0 &&\n (valueIsZeroOrUndefined(itemsBeforeCollapse.value) || valueIsZeroOrUndefined(itemsAfterCollapse.value))\n ) {\n log.error('Breadcrumb', '需要设置 itemsBeforeCollapse 和 itemsAfterCollapse 属性来控制省略号前后的显示项数。');\n return false;\n }\n\n // 不需要显示省略号的情况:\n // 1. 最大显示数量 <= 0\n // 2. 项目总数 <= 最大显示数量\n // 3. 省略号前后显示数量(itemsBeforeCollapse、itemsAfterCollapse)之和 >= 项目总数\n if (currentMaxItems <= 0 || totalItems <= currentMaxItems || itemsCollapseSum >= totalItems) {\n return false;\n }\n\n return true;\n });\n\n // 显示的项目合集,包含省略号\n const getDisplayItems = computed(() => {\n const items = getBreadcrumbItems.value;\n const showEllipsis = shouldShowEllipsis.value;\n\n if (!showEllipsis) {\n return items;\n }\n\n const totalItems = items.length;\n const beforeItems = items.slice(0, itemsBeforeCollapse.value);\n const afterItems = items.slice(totalItems - itemsAfterCollapse.value, totalItems);\n\n return [\n ...beforeItems,\n {\n content: ellipsisContent,\n disabled: true,\n isEllipsisItem: true,\n },\n ...afterItems,\n ];\n });\n\n // 被省略的项目\n const getEllipsisItems = computed(() => {\n const items = getBreadcrumbItems.value;\n if (!shouldShowEllipsis.value) {\n return [];\n }\n const sliceItems = items.slice(itemsBeforeCollapse.value, items.length - itemsAfterCollapse.value);\n return sliceItems.map((item, index) => ({\n ...item,\n isLast: index === sliceItems.length - 1,\n }));\n });\n\n return {\n getDisplayItems,\n getEllipsisItems,\n };\n};\n"],"names":["valueIsZeroOrUndefined","val","useEllipsis","props","getBreadcrumbItems","ellipsisContent","_toRefs","toRefs","maxItems","itemsBeforeCollapse","itemsAfterCollapse","shouldShowEllipsis","computed","_maxItems$value","items","value","currentMaxItems","totalItems","length","itemsCollapseSum","log","error","getDisplayItems","showEllipsis","beforeItems","slice","afterItems","concat","_toConsumableArray","content","disabled","isEllipsisItem","getEllipsisItems","sliceItems","map","item","index","_objectSpread","isLast"],"mappings":"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"}