xdesign-vue-next
Version:
XDesign Component for vue-next
1 lines • 9.62 kB
Source Map (JSON)
{"version":3,"file":"menu.mjs","sources":["../../src/menu/menu.tsx"],"sourcesContent":["import { defineComponent, ref, computed, provide, watchEffect, watch, onMounted, toRefs } from 'vue';\nimport props from './props';\nimport { MenuValue } from './type';\nimport { TdMenuInterface, TdOpenType } from './const';\nimport { renderContent, renderTNodeJSX } from '../utils/render-tnode';\nimport VMenu from './v-menu';\nimport log from '../_common/js/log/log';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport useVModel from '../hooks/useVModel';\nimport useDefaultValue from '../hooks/useDefaultValue';\nimport isNumber from 'lodash/isNumber';\nimport isArray from 'lodash/isArray';\n\nexport default defineComponent({\n name: 'XMenu',\n props: { ...props, onCollapsed: Function },\n setup(props, ctx) {\n const classPrefix = usePrefixClass();\n watchEffect(() => {\n if (ctx.slots.options) {\n log.warnOnce('TMenu', '`options` slot is going to be deprecated, please use `operations` for slot instead.');\n }\n });\n const mode = ref(props.expandType);\n const theme = computed(() => props.theme);\n const isMutex = computed(() => props.expandMutex);\n const collapsed = computed(() => props.collapsed);\n const menuClass = computed(() => [\n `${classPrefix.value}-default-menu`,\n `${classPrefix.value}-menu--${props.theme}`,\n {\n [`${classPrefix.value}-is-collapsed`]: props.collapsed,\n },\n ]);\n const innerClasses = computed(() => [`${classPrefix.value}-menu`, `${classPrefix.value}-menu--scroll`]);\n const expandWidth = computed(() => {\n const { width } = props;\n const format = (val: string | number) => (isNumber(val) ? `${val}px` : val);\n if (isArray(width)) return width.map((item) => format(item));\n\n return [format(width), '64px'];\n });\n\n const styles = computed(() => ({\n height: '100%',\n width: props.collapsed ? expandWidth.value[1] : expandWidth.value[0],\n }));\n\n const { value, modelValue, expanded } = toRefs(props);\n const [activeValue, setActiveValue] = useVModel(value, modelValue, props.defaultValue, props.onChange);\n const [expandValues, setExpand] = useDefaultValue(expanded, props.defaultExpanded, props.onExpand, 'expanded');\n const activeValues = ref([]);\n\n watchEffect(() => {\n mode.value = props.collapsed ? 'popup' : props.expandType;\n props.onCollapsed?.({ collapsed: props.collapsed });\n });\n\n const vMenu = new VMenu({ isMutex, expandValues: expandValues.value ? [...expandValues.value] : [] });\n provide<TdMenuInterface>('TdMenu', {\n activeValue,\n activeValues,\n expandValues,\n mode,\n theme,\n isHead: false,\n vMenu,\n collapsed,\n select: (value: MenuValue) => {\n if (value !== activeValue.value) {\n setActiveValue(value);\n }\n },\n open: (value: MenuValue, type: TdOpenType) => {\n if (mode.value === 'normal') {\n setExpand(vMenu.expand(value));\n } else if (type === 'add') {\n if (expandValues.value.indexOf(value) === -1) {\n // 可能初始expanded里包含了该value\n setExpand([...expandValues.value, value]);\n }\n } else if (type === 'remove') {\n const index = expandValues.value.indexOf(value);\n const tmp = [...expandValues.value];\n tmp.splice(index, 1);\n setExpand(tmp);\n }\n },\n });\n\n // watch\n watch(\n () => props.expanded,\n (value) => {\n vMenu.expandValues = new Set(value);\n },\n );\n watch(\n () => props.collapsed,\n (newValue, oldValue) => {\n if (!newValue && oldValue) {\n // 如果重新打开菜单,就将原本已经展开的子菜单重新展开\n setExpand([...vMenu.expandValues]);\n }\n },\n );\n\n const updateActiveValues = (value: MenuValue) => {\n activeValues.value = vMenu.select(value);\n };\n watch(activeValue, updateActiveValues);\n\n // timelifes\n onMounted(() => {\n activeValues.value = vMenu.select(activeValue.value);\n });\n\n return {\n styles,\n classPrefix,\n menuClass,\n innerClasses,\n activeValue,\n activeValues,\n expandValues,\n };\n },\n render() {\n const operations = renderContent(this, 'operations', 'options');\n const logo = renderTNodeJSX(this, 'logo');\n return (\n <div class={this.menuClass} style={this.styles}>\n <div class={`${this.classPrefix}-default-menu__inner`}>\n {logo && <div class={`${this.classPrefix}-menu__logo`}>{logo}</div>}\n <ul class={this.innerClasses}>{renderContent(this, 'default', 'content')}</ul>\n {operations && <div class={`${this.classPrefix}-menu__operations`}>{operations}</div>}\n </div>\n </div>\n );\n },\n});\n"],"names":["name","props","onCollapsed","setup","watchEffect","log","height","width","activeValue","setActiveValue","expandValues","setExpand","isMutex","activeValues","mode","theme","isHead","vMenu","collapsed","select","value","open","tmp","watch","onMounted","styles","classPrefix","menuClass","innerClasses","_createVNode"],"mappings":"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"}