summaryrefslogtreecommitdiff
path: root/addons/point_of_sale/static/src/js/ChromeWidgets/ClientScreenButton.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/point_of_sale/static/src/js/ChromeWidgets/ClientScreenButton.js
parent0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff)
initial commit 2
Diffstat (limited to 'addons/point_of_sale/static/src/js/ChromeWidgets/ClientScreenButton.js')
-rw-r--r--addons/point_of_sale/static/src/js/ChromeWidgets/ClientScreenButton.js87
1 files changed, 87 insertions, 0 deletions
diff --git a/addons/point_of_sale/static/src/js/ChromeWidgets/ClientScreenButton.js b/addons/point_of_sale/static/src/js/ChromeWidgets/ClientScreenButton.js
new file mode 100644
index 00000000..38403b58
--- /dev/null
+++ b/addons/point_of_sale/static/src/js/ChromeWidgets/ClientScreenButton.js
@@ -0,0 +1,87 @@
+odoo.define('point_of_sale.ClientScreenButton', function(require) {
+ 'use strict';
+
+ const { useState } = owl;
+ const PosComponent = require('point_of_sale.PosComponent');
+ const Registries = require('point_of_sale.Registries');
+
+ // Formerly ClientScreenWidget
+ class ClientScreenButton extends PosComponent {
+ constructor() {
+ super(...arguments);
+ this.state = useState({ status: 'failure' });
+ this._start();
+ }
+ get message() {
+ return {
+ success: '',
+ warning: this.env._t('Connected, Not Owned'),
+ failure: this.env._t('Disconnected'),
+ not_found: this.env._t('Client Screen Unsupported. Please upgrade the IoT Box'),
+ }[this.state.status];
+ }
+ async onClick() {
+ try {
+ const renderedHtml = await this.env.pos.render_html_for_customer_facing_display();
+ const ownership = await this.env.pos.proxy.take_ownership_over_client_screen(
+ renderedHtml
+ );
+ if (typeof ownership === 'string') {
+ ownership = JSON.parse(ownership);
+ }
+ if (ownership.status === 'success') {
+ this.state.status = 'success';
+ } else {
+ this.state.status = 'warning';
+ }
+ if (!this.env.pos.proxy.posbox_supports_display) {
+ this.env.pos.proxy.posbox_supports_display = true;
+ this._start();
+ }
+ } catch (error) {
+ if (typeof error == 'undefined') {
+ this.state.status = 'failure';
+ } else {
+ this.state.status = 'not_found';
+ }
+ }
+ }
+ _start() {
+ const self = this;
+ async function loop() {
+ if (self.env.pos.proxy.posbox_supports_display) {
+ try {
+ const ownership = await self.env.pos.proxy.test_ownership_of_client_screen();
+ if (typeof ownership === 'string') {
+ ownership = JSON.parse(ownership);
+ }
+ if (ownership.status === 'OWNER') {
+ self.state.status = 'success';
+ } else {
+ self.state.status = 'warning';
+ }
+ setTimeout(loop, 3000);
+ } catch (error) {
+ if (error.abort) {
+ // Stop the loop
+ return;
+ }
+ if (typeof error == 'undefined') {
+ self.state.status = 'failure';
+ } else {
+ self.state.status = 'not_found';
+ self.env.pos.proxy.posbox_supports_display = false;
+ }
+ setTimeout(loop, 3000);
+ }
+ }
+ }
+ loop();
+ }
+ }
+ ClientScreenButton.template = 'ClientScreenButton';
+
+ Registries.Component.add(ClientScreenButton);
+
+ return ClientScreenButton;
+});