Skip to Content
OWL data_display

Calendar Side Panel

Odoo 19 OWL component — Calendar Side Panel (views)

Live preview Interactive
Source excerpt web/static/src/views/calendar/calendar_side_panel/calendar_side_panel.js
import { Component } from "@odoo/owl";
import { DateTimePicker } from "@web/core/datetime/datetime_picker";
import { CalendarFilterSection } from "@web/views/calendar/calendar_filter_section/calendar_filter_section";

export class CalendarSidePanel extends Component {
    static components = {
        DatePicker: DateTimePicker,
        FilterSection: CalendarFilterSection,
    };
    static template = "web.CalendarSidePanel";
    static props = ["model"];

    get datePickerProps() {
        return {
            type: "date",
            showWeekNumbers: false,
            maxPrecision: "days",
            daysOfWeekFormat: "narrow",
            onSelect: (date) => {
                let scale = "week";

                if (this.props.model.date.hasSame(date, "day")) {
                    const scales = ["month", "week", "day"];
                    scale = scales[(scales.indexOf(this.props.model.scale) + 1) % scales.length];
                } else {
                    // Check if dates are on the same week
                    // As a.hasSame(b, "week") does not depend on locale and week always starts on Monday,
                    // we are comparing derivated dates instead to take this into account.
                    const currentDate =
                        this.props.model.date.weekday === 7
                            ? this.props.model.date.plus({ day: 1 })
                            : this.props.model.date;
                    const pickedDate = date.weekday === 7 ? date.plus({ day: 1 }) : date;

                    // a.hasSame(b, "week") does not depend on locale and week alway starts on Monday
                    if (currentDate.hasSame(pickedDate, "week")) {
                        scale = "day";
                    }
                }

                this.props.model.load({ scale, date });
            },
            value: this.props.model.date,
        };
    }
    get filterPanelProps() {
        return {
            model: this.props.model,
        };
    }

    get showDatePicker() {
        return this.props.model.showDatePicker && !this.env.isSmall;
    }
}
Registry / API
Registry name
CalendarSidePanel
Category
Module
web
Slug
calendar-side-panel
Nav group
data_display