blob: 38403b588f5285f9678300dde1c9148fbb0453c9 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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;
});
|