Files
gzth/awesome_theme/static/src/components/header/awesome_header.js
T
2024-06-20 13:39:24 +08:00

148 lines
5.3 KiB
JavaScript

/** @odoo-module **/
import { registry } from "@web/core/registry";
import { ErrorHandler } from "@web/core/utils/components";
import { session } from '@web/session'
import { Component, useState, useExternalListener } from "@odoo/owl";
const systrayRegistry = registry.category("systray");
import { useService, useBus } from "@web/core/utils/hooks";
export class AwesomeHeader extends Component {
setup() {
this.userService = useService('user')
this.overlay = useService("awesome_overlay");
this.orm = useService("orm");
this.action = useService("action");
let company = session.company_id;
// config.device.bus.on('size_changed', this, () => {
// if (config.device.isMobile) {
// if ($('body').hasClass('navigation-show')) {
// this.overlay.show()
// }
// } else {
// this.overlay.hide()
// }
// });
// if click outside the panel close it
useExternalListener(window, 'click', (event) => {
if ($('body').hasClass("navigation-show")) {
if (!$(event.target).is($(".sidebar_menu, .sidebar_menu *, .navigation-toggler *"))) {
this.overlay.hide()
$('body').removeClass("navigation-show");
}
}
});
this.state = useState({
logo_url: '/web/binary/company_logo' + '?db=' + session.db + (
company ? '&company=' + company : ''),
})
useBus(this.env.bus, "ACTION_MANAGER:UI-UPDATED", ({ detail: mode }) => {
if (mode !== "new") {
this.state.fullscreen = mode === "fullscreen";
}
});
}
handleItemError(error, item) {
// remove the faulty component
item.isDisplayed = () => false;
Promise.resolve().then(() => {
throw error;
});
}
get systrayItems() {
return systrayRegistry
.getEntries()
.map(([key, value]) => ({ key, ...value }))
.filter((item) => ("isDisplayed" in item ? item.isDisplayed(this.env) : true))
.reverse();
}
// This dummy setter is only here to prevent conflicts between the
// Enterprise NavBar extension and the Website NavBar patch.
set systrayItems(_) {}
async on_logo_click() {
// this.action.doAction({
// type: 'ir.actions.act_window',
// res_model: 'res.company',
// views: [[false, 'form']],
// context: {
// 'form_view_ref': 'base.action_res_company_form',
// },
// res_id: session.user_context.current_company,
// target: 'new',
// }, {
// onClosed: () => {
// this.update_logo(true)
// }
// });
}
get logo_url() {
return '/web/binary/company_logo' + '?db=' + session.db + (company ? '&company=' + session.user_context.current_company : '')
}
update_logo(reload) {
let company = session.company_id
this.state.logo_url = '/web/binary/company_logo' + '?db=' + session.db + (company ?
'&company=' + session.user_context.current_company : '') + moment().format('x')
}
on_toggler_click() {
let $body = $('body');
if (this.env.isSmall) {
$body.addClass("navigation-show");
this.overlay.show()
} else {
this.overlay.hide()
if ($body.hasClass("navigation-toggle-one")) {
$body.removeClass("navigation-toggle-one");
$body.removeClass("navigation-show");
$body.addClass("navigation-toggle-none");
localStorage.setItem('awesome_menu_mode', 'navigation-toggle-none')
} else if ($body.hasClass("navigation-toggle-two")) {
// jump one to none
if (!$body.hasClass('not_have_child')) {
$body.removeClass("navigation-toggle-two");
$body.removeClass("navigation-show");
$body.addClass("navigation-toggle-one");
localStorage.setItem('awesome_menu_mode', 'navigation-toggle-one')
} else {
$body.removeClass("navigation-toggle-two");
$body.removeClass("navigation-show");
$body.addClass("navigation-toggle-none");
localStorage.setItem('awesome_menu_mode', 'navigation-toggle-one')
}
} else if ($body.hasClass("navigation-toggle-none")) {
$body.removeClass("navigation-toggle-none");
$body.removeClass("navigation-show");
$body.addClass("navigation-toggle-two");
localStorage.setItem('awesome_menu_mode', 'navigation-toggle-two')
} else {
// if nothing
$body.removeClass("navigation-toggle-two");
$body.removeClass("navigation-show");
$body.addClass("navigation-toggle-one");
localStorage.setItem('awesome_menu_mode', 'navigation-toggle-one')
}
}
}
};
AwesomeHeader.props = {};
AwesomeHeader.template = "awesome_theme.header";
AwesomeHeader.components = { ErrorHandler };