Skip to Content
OWL overlay

Dropdown Group

Odoo 19 OWL component — Dropdown Group (core)

Live preview Interactive
Source excerpt web/static/src/core/dropdown/dropdown_group.js
import { Component, onWillDestroy, useChildSubEnv, xml } from "@odoo/owl";

const GROUPS = new Map();

function getGroup(id) {
    if (!GROUPS.has(id)) {
        GROUPS.set(id, {
            group: new Set(),
            count: 0,
        });
    }
    GROUPS.get(id).count++;
    return GROUPS.get(id).group;
}

function removeGroup(id) {
    const groupData = GROUPS.get(id);
    groupData.count--;
    if (groupData.count <= 0) {
        GROUPS.delete(id);
    }
}

export const DROPDOWN_GROUP = Symbol("dropdownGroup");
export class DropdownGroup extends Component {
    static template = xml`<t t-slot="default"/>`;
    static props = {
        group: { type: String, optional: true },
        slots: Object,
    };

    setup() {
        if (this.props.group) {
            const group = getGroup(this.props.group);
            onWillDestroy(() => removeGroup(this.props.group));
            useChildSubEnv({ [DROPDOWN_GROUP]: group });
        } else {
            useChildSubEnv({ [DROPDOWN_GROUP]: new Set() });
        }
    }
}
Registry / API
Registry name
DropdownGroup
Category
Module
web
Slug
dropdown-group
Nav group
overlay