import { __decorate } from "tslib";
import { Vue, Component, Prop, Emit } from 'vue-property-decorator';
import { Util } from '@ibizstudio/runtime';
import './app-header-right-menus.less';
/**
 * 应用头部菜单
 *
 * @export
 * @class AppHeaderMenus
 * @extends {Vue}
 */
let AppHeaderRightMenus = class AppHeaderRightMenus extends Vue {
    /**
     * 菜单项点击
     *
     * @param {*} item
     * @returns {*}
     * @memberof AppHeaderRightMenus
     */
    menuClick(item) { }
    /**
     * 组件创建完毕
     *
     * @memberof AppHeaderRightMenus
     */
    mounted() {
        this.$nextTick(() => {
            if (this.$route.matched && this.$route.matched.length > 1) {
                return;
            }
            const openDefault = this.findDefaultOpen(this.menus);
            if (openDefault) {
                this.menuClick(openDefault);
            }
        });
    }
    /**
     * 查找默认打开视图
     *
     * @protected
     * @param {any[]} items
     * @returns {*}
     * @memberof AppHeaderRightMenus
     */
    findDefaultOpen(items) {
        if (items) {
            return items.find((item) => {
                let data;
                if (item && item.getPSAppMenuItems && Util.typeOf(item.getPSAppMenuItems) === 'array') {
                    data = this.findDefaultOpen(item.getPSAppMenuItems);
                }
                else {
                    if (item.opendefault === true) {
                        data = item;
                    }
                }
                return data;
            });
        }
    }
    /**
     * 菜单项选中
     *
     * @protected
     * @param {string} name
     * @memberof AppHeaderRightMenus
     */
    onSelect(name) {
        const item = this.findMenuByName(name);
        if (item) {
            this.menuClick(item);
        }
    }
    /**
     * 根据名称查找菜单项
     *
     * @protected
     * @param {string} name
     * @param {any[]} [menus=this.menus]
     * @returns {*}
     * @memberof AppHeaderRightMenus
     */
    findMenuByName(name, menus = this.menus) {
        let item;
        menus.find((menu) => {
            if (Object.is(menu.name, name)) {
                item = menu;
                return menu;
            }
            if (menu.getPSAppMenuItems) {
                const subItem = this.findMenuByName(name, menu.getPSAppMenuItems);
                if (subItem) {
                    item = subItem;
                    return subItem;
                }
            }
        });
        return item;
    }
    /**
     * 绘制菜单
     *
     * @protected
     * @param {*} items
     * @returns {*}
     * @memberof AppHeaderRightMenus
     */
    renderMenus(items) {
        return items.map((item) => {
            if (item.getPSAppMenuItems) {
                return this.renderSubMenu(item);
            }
            return this.renderMenuItem(item);
        });
    }
    /**
     * 绘制菜单项
     *
     * @protected
     * @param {*} item
     * @returns {*}
     * @memberof AppHeaderRightMenus
     */
    renderMenuItem(item) {
        if (item.hidden) {
            return;
        }
        return (<menuItem title={this.$tl(item.tooltipTag, item.tooltip)} name={item.name}>
                <menu-icon item={item}/>
                {this.$tl(item.captionTag, item.caption)}
            </menuItem>);
    }
    /**
     * 绘制菜单分组
     *
     * @protected
     * @param {*} item
     * @returns {*}
     * @memberof AppHeaderRightMenus
     */
    renderSubMenu(item) {
        if (item.hidden) {
            return;
        }
        return (<submenu name={item.name}>
                <template slot="title">
                    <menu-icon item={item}/>
                    {this.$tl(item.captionTag, item.caption)}
                </template>
                {this.renderMenus(item.getPSAppMenuItems)}
            </submenu>);
    }
    /**
     * 绘制内容
     *
     * @returns {*}
     * @memberof AppHeaderRightMenus
     */
    render() {
        return (<div class="app-header-menus">
                <i-menu mode="horizontal" on-on-select={(val) => this.onSelect(val)}>
                    {this.renderMenus(this.menus)}
                </i-menu>
            </div>);
    }
};
__decorate([
    Prop()
], AppHeaderRightMenus.prototype, "ctrlName", void 0);
__decorate([
    Prop({ default: () => [] })
], AppHeaderRightMenus.prototype, "menus", void 0);
__decorate([
    Prop()
], AppHeaderRightMenus.prototype, "modelService", void 0);
__decorate([
    Emit('menu-click')
], AppHeaderRightMenus.prototype, "menuClick", null);
AppHeaderRightMenus = __decorate([
    Component({})
], AppHeaderRightMenus);
export { AppHeaderRightMenus };
