[REF] point_of_sale: handle dblClick

In the ticket screen the user has the option to double click on an
order in order to continue editing it. This functionality is implemented
using custom code for handling the double click. This is cumbersome and
error prone.

In this PR we replace the custom double click logic with the default
`t-on-dblclick` from `owl`.

closes odoo/odoo#135856

Task: 3512282
Signed-off-by: Joseph Caburnay (jcb) <jcb@odoo.com>
This commit is contained in:
vlst
2023-09-20 11:34:08 +00:00
parent f8bba6b9bc
commit 2c3a88e40e
5 changed files with 21 additions and 37 deletions
@@ -2,9 +2,6 @@
import { Component } from "@odoo/owl";
/**
* How to extend this component:
*/
export class Orderline extends Component {
static template = "point_of_sale.Orderline";
static props = {
@@ -117,32 +117,14 @@ export class TicketScreen extends Component {
}
}
onClickOrder(clickedOrder) {
if (!clickedOrder || clickedOrder.locked) {
this._state.ui.selectedOrder = clickedOrder;
if (!this.getSelectedOrderlineId()) {
// Automatically select the first orderline of the selected order.
const firstLine = this._state.ui.selectedOrder.get_orderlines()[0];
if (firstLine) {
this._state.ui.selectedOrderlineIds[clickedOrder.backendId] = firstLine.id;
}
this._state.ui.selectedOrder = clickedOrder;
this.numberBuffer.reset();
if ((!clickedOrder || clickedOrder.locked) && !this.getSelectedOrderlineId()) {
// Automatically select the first orderline of the selected order.
const firstLine = this._state.ui.selectedOrder.get_orderlines()[0];
if (firstLine) {
this._state.ui.selectedOrderlineIds[clickedOrder.backendId] = firstLine.id;
}
this.numberBuffer.reset();
} else {
if (
!this._state.ui.selectedOrder ||
clickedOrder.uid !== this._state.ui.selectedOrder.uid
) {
this.dbclk_time = new Date().getTime();
} else if (!this.dbclk_time) {
this.dbclk_time = new Date().getTime();
} else if (this.dbclk_time + 500 > new Date().getTime()) {
this._setOrder(clickedOrder);
this.dbclk_time = 0;
} else {
this.dbclk_time = new Date().getTime();
}
this._state.ui.selectedOrder = clickedOrder;
this.numberBuffer.reset();
}
}
onCreateNewOrder() {
@@ -191,9 +173,6 @@ export class TicketScreen extends Component {
if (this.pos.isOpenOrderShareable()) {
this.pos._removeOrdersFromServer();
}
// When deleting an order, the double click time should be reset, so that it's not taken into account
// when clicking on another order.
this.dbclk_time = 0;
}
async onNextPage() {
if (this._state.syncedOrders.currentPage < this._getLastPage()) {
@@ -650,8 +629,7 @@ export class TicketScreen extends Component {
modelField: "pos_reference",
},
DATE: {
repr: (order) =>
deserializeDate(order.date_order).toFormat("yyyy-MM-dd HH:mm a"),
repr: (order) => deserializeDate(order.date_order).toFormat("yyyy-MM-dd HH:mm a"),
displayName: _t("Date"),
modelField: "date_order",
},
@@ -59,7 +59,8 @@
<div class="col very-narrow p-2" name="delete"></div>
</div>
<t t-if="!ui.isSmall" t-foreach="_filteredOrderList" t-as="order" t-key="order.cid">
<div class="order-row" t-att-class="{ 'highlight bg-primary text-white': isHighlighted(order) }" t-on-click="() => this.onClickOrder(order)">
<div class="order-row" t-att-class="{ 'highlight bg-primary text-white': isHighlighted(order) }"
t-on-click="() => this.onClickOrder(order)" t-on-dblclick="() => order.locked ? ()=>{} : this._setOrder(order)" >
<div class="col wide p-2 ">
<div><t t-esc="getDate(order)"></t></div>
</div>
@@ -88,7 +89,8 @@
</div>
</t>
<t t-if="ui.isSmall" t-foreach="_filteredOrderList" t-as="order" t-key="order.cid">
<div class="mobileOrderList order-row" t-att-class="{ 'highlight bg-primary text-white': isHighlighted(order) }" t-on-click="() => this.onClickOrder(order)">
<div class="mobileOrderList order-row" t-att-class="{ 'highlight bg-primary text-white': isHighlighted(order) }"
t-on-click="() => this.onClickOrder(order)" t-on-dblclick="() => order.locked ? ()=>{} : this._setOrder(order)" >
<div class="col p-2 d-flex justify-content-between align-items-center">
<div><t t-esc="order.name"></t></div>
<div><t t-esc="getTotal(order)"></t></div>
@@ -41,6 +41,14 @@ class Do {
},
];
}
doubleClickOrder(orderName) {
return [
{
trigger: `.ticket-screen .order-row > .col:nth-child(2):contains("${orderName}")`,
run: "dblclick",
},
];
}
loadSelectedOrder() {
return [
{
@@ -47,8 +47,7 @@ registry
Chrome.do.clickTicketButton();
TicketScreen.do.deleteOrder("-0003");
Chrome.do.confirmPopup();
TicketScreen.do.selectOrder("-0002");
TicketScreen.do.loadSelectedOrder();
TicketScreen.do.doubleClickOrder("-0002");
ProductScreen.check.isShown();
ProductScreen.check.totalAmountIs("2.0");
Chrome.do.backToFloor();