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; });