blob: 5321fdea0fe12878256bdcd89291e1c673277e8d (
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
|
odoo.define('point_of_sale.SelectionPopup', function (require) {
'use strict';
const { useState } = owl.hooks;
const AbstractAwaitablePopup = require('point_of_sale.AbstractAwaitablePopup');
const Registries = require('point_of_sale.Registries');
// formerly SelectionPopupWidget
class SelectionPopup extends AbstractAwaitablePopup {
/**
* Value of the `item` key of the selected element in the Selection
* Array is the payload of this popup.
*
* @param {Object} props
* @param {String} [props.confirmText='Confirm']
* @param {String} [props.cancelText='Cancel']
* @param {String} [props.title='Select']
* @param {String} [props.body='']
* @param {Array<Selection>} [props.list=[]]
* Selection {
* id: integer,
* label: string,
* isSelected: boolean,
* item: any,
* }
*/
constructor() {
super(...arguments);
this.state = useState({ selectedId: this.props.list.find((item) => item.isSelected) });
}
selectItem(itemId) {
this.state.selectedId = itemId;
this.confirm();
}
/**
* We send as payload of the response the selected item.
*
* @override
*/
getPayload() {
const selected = this.props.list.find((item) => this.state.selectedId === item.id);
return selected && selected.item;
}
}
SelectionPopup.template = 'SelectionPopup';
SelectionPopup.defaultProps = {
confirmText: 'Confirm',
cancelText: 'Cancel',
title: 'Select',
body: '',
list: [],
};
Registries.Component.add(SelectionPopup);
return SelectionPopup;
});
|