summaryrefslogtreecommitdiff
path: root/addons/pos_restaurant/static/src/js/Chrome.js
diff options
context:
space:
mode:
authorstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
committerstephanchrst <stephanchrst@gmail.com>2022-05-10 21:51:50 +0700
commit3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch)
treea44932296ef4a9b71d5f010906253d8c53727726 /addons/pos_restaurant/static/src/js/Chrome.js
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (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.js99
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;
+});