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
|
odoo.define('point_of_sale.NumberPopup', function(require) {
'use strict';
var core = require('web.core');
var _t = core._t;
const { useState } = owl;
const AbstractAwaitablePopup = require('point_of_sale.AbstractAwaitablePopup');
const NumberBuffer = require('point_of_sale.NumberBuffer');
const { useListener } = require('web.custom_hooks');
const Registries = require('point_of_sale.Registries');
// formerly NumberPopupWidget
class NumberPopup extends AbstractAwaitablePopup {
/**
* @param {Object} props
* @param {Boolean} props.isPassword Show password popup.
* @param {number|null} props.startingValue Starting value of the popup.
*
* Resolve to { confirmed, payload } when used with showPopup method.
* @confirmed {Boolean}
* @payload {String}
*/
constructor() {
super(...arguments);
useListener('accept-input', this.confirm);
useListener('close-this-popup', this.cancel);
let startingBuffer = '';
if (typeof this.props.startingValue === 'number' && this.props.startingValue > 0) {
startingBuffer = this.props.startingValue.toString();
}
this.state = useState({ buffer: startingBuffer });
NumberBuffer.use({
nonKeyboardInputEvent: 'numpad-click-input',
triggerAtEnter: 'accept-input',
triggerAtEscape: 'close-this-popup',
state: this.state,
});
}
get decimalSeparator() {
return this.env._t.database.parameters.decimal_point;
}
get inputBuffer() {
if (this.state.buffer === null) {
return '';
}
if (this.props.isPassword) {
return this.state.buffer.replace(/./g, '•');
} else {
return this.state.buffer;
}
}
confirm(event) {
const bufferState = event.detail;
if (bufferState.buffer !== '') {
super.confirm();
}
}
sendInput(key) {
this.trigger('numpad-click-input', { key });
}
getPayload() {
return NumberBuffer.get();
}
}
NumberPopup.template = 'NumberPopup';
NumberPopup.defaultProps = {
confirmText: _t('Ok'),
cancelText: _t('Cancel'),
title: _t('Confirm ?'),
body: '',
cheap: false,
startingValue: null,
isPassword: false,
};
Registries.Component.add(NumberPopup);
return NumberPopup;
});
|