fix(menu): fix/menu-item-group-not-working (#1217)

- Make the menu-item-group exported correctly
This commit is contained in:
jeremywu 2021-01-07 11:52:28 +08:00 committed by GitHub
parent 59bcb722e9
commit d8faf46ada
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 61 additions and 73 deletions

View File

@ -3,7 +3,7 @@ import { nextTick } from 'vue'
import { sleep } from '@element-plus/test-utils'
import Menu from '../src/menu.vue'
import MenuGroup from '../src/menuGroup.vue'
import MenuGroup from '../src/menuItemGroup.vue'
import MenuItem from '../src/menuItem.vue'
import SubMenu from '../src/submenu.vue'

View File

@ -1,66 +0,0 @@
<template>
<li class="el-menu-item-group">
<div
class="el-menu-item-group__title"
:style="{ paddingLeft: levelPadding + 'px' }"
>
<template v-if="!slots.title">{{ title }}</template>
<slot v-else name="title"></slot>
</div>
<ul>
<slot></slot>
</ul>
</li>
</template>
<script lang="ts">
import {
defineComponent,
computed,
getCurrentInstance,
inject,
reactive,
} from 'vue'
import { IMenuGroupProps, RootMenuProvider } from './menu'
export default defineComponent({
name: 'ElMenuItemGroup',
componentName: 'ElMenuItemGroup',
props: {
title: {
type: String,
},
},
setup(props: IMenuGroupProps, { slots }) {
// data
const data = reactive({
paddingLeft: 20,
})
const instance = getCurrentInstance()
// computed
const levelPadding = computed(() => {
let padding = 20
let parent = instance.parent
if (rootProps.collapse) return 20
while (parent && parent.type.name !== 'ElMenu') {
if (parent.type.name === 'ElSubmenu') {
padding += 20
}
parent = parent.parent
}
return padding
})
// inject
const { props: rootProps } = inject<RootMenuProvider>('rootMenu')
return {
data,
levelPadding,
props,
slots,
}
},
})
</script>

View File

@ -1,12 +1,66 @@
<template>
<div>
<slot></slot>
</div>
<li class="el-menu-item-group">
<div
class="el-menu-item-group__title"
:style="{ paddingLeft: levelPadding + 'px' }"
>
<template v-if="!slots.title">{{ title }}</template>
<slot v-else name="title"></slot>
</div>
<ul>
<slot></slot>
</ul>
</li>
</template>
<script lang='ts'>
import { defineComponent } from 'vue'
<script lang="ts">
import {
defineComponent,
computed,
getCurrentInstance,
inject,
reactive,
} from 'vue'
import { IMenuGroupProps, RootMenuProvider } from './menu'
export default defineComponent({
name: 'ElMenuItemGroup',
props: { },
componentName: 'ElMenuItemGroup',
props: {
title: {
type: String,
},
},
setup(props: IMenuGroupProps, { slots }) {
// data
const data = reactive({
paddingLeft: 20,
})
const instance = getCurrentInstance()
// computed
const levelPadding = computed(() => {
let padding = 20
let parent = instance.parent
if (rootProps.collapse) return 20
while (parent && parent.type.name !== 'ElMenu') {
if (parent.type.name === 'ElSubmenu') {
padding += 20
}
parent = parent.parent
}
return padding
})
// inject
const { props: rootProps } = inject<RootMenuProvider>('rootMenu')
return {
data,
levelPadding,
props,
slots,
}
},
})
</script>