diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/pos_restaurant/static/src/js/Chrome.js | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/pos_restaurant/static/src/js/Chrome.js')
| -rw-r--r-- | addons/pos_restaurant/static/src/js/Chrome.js | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/addons/pos_restaurant/static/src/js/Chrome.js b/addons/pos_restaurant/static/src/js/Chrome.js new file mode 100644 index 00000000..949082f1 --- /dev/null +++ b/addons/pos_restaurant/static/src/js/Chrome.js @@ -0,0 +1,99 @@ +odoo.define('pos_restaurant.chrome', function (require) { + 'use strict'; + + const Chrome = require('point_of_sale.Chrome'); + const Registries = require('point_of_sale.Registries'); + + const NON_IDLE_EVENTS = 'mousemove mousedown touchstart touchend touchmove click scroll keypress'.split(/\s+/); + let IDLE_TIMER_SETTER; + + const PosResChrome = (Chrome) => + class extends Chrome { + /** + * @override + */ + async start() { + await super.start(); + if (this.env.pos.config.iface_floorplan) { + this._setActivityListeners(); + } + } + /** + * @override + * Do not set `FloorScreen` to the order. + */ + _setScreenData(name) { + if (name === 'FloorScreen') return; + super._setScreenData(...arguments); + } + /** + * @override + * `FloorScreen` is the start screen if there are floors. + */ + get startScreen() { + if (this.env.pos.config.iface_floorplan) { + const table = this.env.pos.table; + return { name: 'FloorScreen', props: { floor: table ? table.floor : null } }; + } else { + return super.startScreen; + } + } + /** + * @override + * Order is set to null when table is selected. There is no saved + * screen for null order so show `FloorScreen` instead. + */ + _showSavedScreen(pos, newSelectedOrder) { + if (!newSelectedOrder) { + this.showScreen('FloorScreen', { floor: pos.table ? pos.table.floor : null }); + } else { + super._showSavedScreen(pos, newSelectedOrder); + } + } + _setActivityListeners() { + IDLE_TIMER_SETTER = this._setIdleTimer.bind(this); + for (const event of NON_IDLE_EVENTS) { + window.addEventListener(event, IDLE_TIMER_SETTER); + } + } + _setIdleTimer() { + if (this._shouldResetIdleTimer()) { + clearTimeout(this.idleTimer); + this.idleTimer = setTimeout(() => { + this._actionAfterIdle(); + }, 60000); + } + } + _actionAfterIdle() { + if (this.tempScreen.isShown) { + this.trigger('close-temp-screen'); + } + const table = this.env.pos.table; + this.showScreen('FloorScreen', { floor: table ? table.floor : null }); + } + _shouldResetIdleTimer() { + return this.env.pos.config.iface_floorplan && this.mainScreen.name !== 'FloorScreen'; + } + __showScreen() { + super.__showScreen(...arguments); + this._setIdleTimer(); + } + /** + * @override + * Before closing pos, we remove the event listeners set on window + * for detecting activities outside FloorScreen. + */ + async _closePos() { + if (IDLE_TIMER_SETTER) { + for (const event of NON_IDLE_EVENTS) { + window.removeEventListener(event, IDLE_TIMER_SETTER); + } + } + await super._closePos(); + } + }; + + Registries.Component.extend(Chrome, PosResChrome); + + return Chrome; +}); |
