summaryrefslogtreecommitdiff
path: root/addons/point_of_sale/static/src/js/Popups/NumberPopup.js
diff options
context:
space:
mode:
Diffstat (limited to 'addons/point_of_sale/static/src/js/Popups/NumberPopup.js')
-rw-r--r--addons/point_of_sale/static/src/js/Popups/NumberPopup.js79
1 files changed, 79 insertions, 0 deletions
diff --git a/addons/point_of_sale/static/src/js/Popups/NumberPopup.js b/addons/point_of_sale/static/src/js/Popups/NumberPopup.js
new file mode 100644
index 00000000..bf63ba8d
--- /dev/null
+++ b/addons/point_of_sale/static/src/js/Popups/NumberPopup.js
@@ -0,0 +1,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;
+});