tav-ui
Version:
1 lines • 7.28 kB
Source Map (JSON)
{"version":3,"file":"context-menu2.mjs","sources":["../../../../../../../packages/components/context-menu/src/context-menu.tsx"],"sourcesContent":["import { computed, defineComponent, nextTick, onMounted, onUnmounted, ref, unref } from 'vue'\nimport { Divider, Menu } from 'ant-design-vue'\nimport Icon from '@tav-ui/components/icon'\nimport { contextMenuProps } from './types'\nimport type { CSSProperties, FunctionalComponent } from 'vue'\nimport type { ContextMenuItem, ItemContentProps } from './types'\nconst prefixCls = 'context-menu'\nconst ItemContent: FunctionalComponent<ItemContentProps> = (props) => {\n const { item } = props\n return (\n <span\n style=\"display: inline-block; width: 100%; \"\n class=\"px-4\"\n onClick={props.handler.bind(null, item)}\n >\n {props.showIcon && item.icon && <Icon class=\"mr-2\" icon={item.icon} />}\n <span>{item.label}</span>\n </span>\n )\n}\n\nexport default defineComponent({\n name: 'TaContextMenu',\n props: contextMenuProps,\n setup(props) {\n const wrapRef = ref(null)\n const showRef = ref(false)\n\n const getStyle = computed((): CSSProperties => {\n const { axis, items, styles, width } = props\n const { x, y } = axis || { x: 0, y: 0 }\n const menuHeight = (items || []).length * 40\n const menuWidth = width\n const body = document.body\n\n const left = body.clientWidth < x + menuWidth ? x - menuWidth : x\n const top = body.clientHeight < y + menuHeight ? y - menuHeight : y\n return {\n ...(styles as object),\n width: `${width}px`,\n left: `${left + 1}px`,\n top: `${top + 1}px`,\n }\n })\n\n onMounted(() => {\n nextTick(() => (showRef.value = true))\n })\n\n onUnmounted(() => {\n const el = unref(wrapRef)\n el && document.body.removeChild(el)\n })\n\n function handleAction(item: ContextMenuItem, e: MouseEvent) {\n const { handler, disabled } = item\n if (disabled) return\n\n showRef.value = false\n e?.stopPropagation()\n e?.preventDefault()\n handler?.()\n }\n\n function renderMenuItem(items: ContextMenuItem[]) {\n return items.map((item) => {\n const { disabled, label, children, divider = false } = item\n\n const contentProps = {\n item,\n handler: handleAction,\n showIcon: props.showIcon,\n }\n\n if (!children || children.length === 0) {\n return (\n <>\n <Menu.Item disabled={disabled} class={`${prefixCls}__item`} key={label}>\n <ItemContent {...contentProps} />\n </Menu.Item>\n {divider ? <Divider key={`d-${label}`} /> : null}\n </>\n )\n }\n if (!unref(showRef)) return null\n\n return (\n <Menu.SubMenu key={label} disabled={disabled} popupClassName={`${prefixCls}__popup`}>\n {{\n title: () => <ItemContent {...contentProps} />,\n default: () => renderMenuItem(children),\n }}\n </Menu.SubMenu>\n )\n })\n }\n return () => {\n if (!unref(showRef)) return null\n\n const { items } = props\n return (\n <Menu\n inlineIndent={12}\n mode=\"vertical\"\n class={prefixCls}\n ref={wrapRef}\n style={unref(getStyle)}\n >\n {renderMenuItem(items)}\n </Menu>\n )\n }\n },\n})\n"],"names":["prefixCls","ItemContent","_createVNode","item","Icon","props","handler","showIcon","icon","name","items","styles","width","x","y","menuHeight","menuWidth","left","clientWidth","clientHeight","top","onMounted","nextTick","showRef","onUnmounted","el","disabled","e","renderMenuItem","label","children","divider","_Fragment","title","default"],"mappings":"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"}