OWL
data_display
Button Box
Odoo 19 OWL component — Button Box (views)
Live preview
Interactive
Source excerpt
web/static/src/views/form/button_box/button_box.js
import { useService } from "@web/core/utils/hooks";
import { Dropdown } from "@web/core/dropdown/dropdown";
import { DropdownItem } from "@web/core/dropdown/dropdown_item";
import { Component, onWillRender } from "@odoo/owl";
export class ButtonBox extends Component {
static template = "web.Form.ButtonBox";
static components = { Dropdown, DropdownItem };
static props = {
slots: Object,
class: { type: String, optional: true },
};
static defaultProps = {
class: "",
};
setup() {
const ui = useService("ui");
onWillRender(() => {
const maxVisibleButtons = [0, 0, 7, 4, 5, 8][ui.size] ?? 8;
const allVisibleButtons = Object.entries(this.props.slots)
.filter(([_, slot]) => this.isSlotVisible(slot))
.map(([slotName]) => slotName);
if (allVisibleButtons.length <= maxVisibleButtons) {
this.visibleButtons = allVisibleButtons;
this.additionalButtons = [];
this.isFull = allVisibleButtons.length === maxVisibleButtons;
} else {
// -1 for "More" dropdown
const splitIndex = Math.max(maxVisibleButtons - 1, 0);
this.visibleButtons = allVisibleButtons.slice(0, splitIndex);
this.additionalButtons = allVisibleButtons.slice(splitIndex);
this.isFull = true;
}
});
}
isSlotVisible(slot) {
return !("isVisible" in slot) || slot.isVisible;
}
}
Registry / API
- Registry name
ButtonBox- Category
—- Module
web- Slug
button-box- Nav group
data_display