Refactor #4351 - For TabMenu

pull/4377/head
Tuğçe Küçükoğlu 2023-08-31 16:08:40 +03:00
parent e6af833aa6
commit eb23a00428
2 changed files with 35 additions and 1 deletions

View File

@ -162,6 +162,14 @@ export interface TabMenuSlots {
* Menuitem instance * Menuitem instance
*/ */
item: MenuItem; item: MenuItem;
/**
* Label property of the menuitem
*/
label: string | ((...args: any) => string) | undefined;
/**
* Binding properties of the menuitem
*/
props: (...args: any) => string;
}): VNode[]; }): VNode[];
/** /**
* Custom item icon template. * Custom item icon template.

View File

@ -53,7 +53,7 @@
<span :class="cx('label')" v-bind="getPTOptions('label', item, i)">{{ label(item) }}</span> <span :class="cx('label')" v-bind="getPTOptions('label', item, i)">{{ label(item) }}</span>
</a> </a>
</template> </template>
<component v-else :is="$slots.item" :item="item" :index="i"></component> <component v-else :is="$slots.item" :item="item" :index="i" :label="label(item)" :props="getMenuItemProps(item, i)"></component>
</li> </li>
</template> </template>
<li ref="inkbar" role="none" :class="cx('inkbar')" v-bind="ptm('inkbar')"></li> <li ref="inkbar" role="none" :class="cx('inkbar')" v-bind="ptm('inkbar')"></li>
@ -64,6 +64,7 @@
<script> <script>
import Ripple from 'primevue/ripple'; import Ripple from 'primevue/ripple';
import { DomHandler } from 'primevue/utils'; import { DomHandler } from 'primevue/utils';
import { mergeProps } from 'vue';
import BaseTabMenu from './BaseTabMenu.vue'; import BaseTabMenu from './BaseTabMenu.vue';
export default { export default {
@ -263,6 +264,31 @@ export default {
this.$refs.inkbar.style.width = '0px'; this.$refs.inkbar.style.width = '0px';
this.$refs.inkbar.style.left = '0px'; this.$refs.inkbar.style.left = '0px';
} }
},
getMenuItemProps(item, index) {
return {
action: mergeProps(
{
class: this.cx('action'),
tabindex: -1,
onClick: ($event) => this.onItemClick($event, item, index),
onKeyDown: ($event) => this.onKeydownItem($event, item, index)
},
this.getPTOptions('action', item, index)
),
icon: mergeProps(
{
class: [this.cx('icon'), item.icon]
},
this.getPTOptions('icon', item, index)
),
label: mergeProps(
{
class: this.cx('label')
},
this.getPTOptions('label', item, index)
)
};
} }
}, },
directives: { directives: {