/** @odoo-module */ import { Component, useRef, useState, xml } from "@odoo/owl"; import { refresh } from "../core/url"; import { useWindowListener } from "../hoot_utils"; /** * @typedef {{ * }} HootPresetsProps */ //----------------------------------------------------------------------------- // Exports //----------------------------------------------------------------------------- /** @extends {Component} */ export class HootPresets extends Component { static props = {}; static template = xml`
`; refresh = refresh; setup() { const { runner } = this.env; this.rootRef = useRef("root"); this.togglerRef = useRef("toggler"); this.config = useState(runner.config); this.state = useState({ open: false }); this.runnerState = useState(runner.state); useWindowListener("keydown", (ev) => { if (this.state.open && ev.key === "Escape") { ev.preventDefault(); this.state.open = false; } }); useWindowListener( "click", (ev) => { const path = ev.composedPath(); if (!path.includes(this.rootRef.el)) { this.state.open = false; } else if (path.includes(this.togglerRef.el)) { this.state.open = !this.state.open; } }, { capture: true } ); } getPresetIcon() { const activePreset = this.env.runner.presets.get(this.config.preset); return activePreset?.icon || "fa-check-square-o"; } /** * @param {string} presetId * @param {Event & { currentTarget: HTMLInputElement }} ev */ onPresetChange(presetId, ev) { if (ev.currentTarget.checked) { this.config.preset = presetId; } else { this.config.preset = ""; if (presetId === "") { ev.currentTarget.checked = true; } } } }