From 5d7a1983f982f299de4ef7448a0bddf1094781b9 Mon Sep 17 00:00:00 2001 From: git_admin Date: Fri, 1 May 2026 15:00:27 +0000 Subject: [PATCH] Tower: upload laundry_management 19.0.19.0.4 (via marketplace) --- .../popups/laundry_delivery_details_popup.js | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 addons/laundry_management/static/src/js/popups/laundry_delivery_details_popup.js diff --git a/addons/laundry_management/static/src/js/popups/laundry_delivery_details_popup.js b/addons/laundry_management/static/src/js/popups/laundry_delivery_details_popup.js new file mode 100644 index 0000000..07ca5b3 --- /dev/null +++ b/addons/laundry_management/static/src/js/popups/laundry_delivery_details_popup.js @@ -0,0 +1,59 @@ +/** @odoo-module */ +import { Component, useState, useRef, onMounted } from "@odoo/owl"; +import { Dialog } from "@web/core/dialog/dialog"; +import { _t } from "@web/core/l10n/translation"; + +export class LaundryDeliveryDetailsPopup extends Component { + static components = { Dialog }; + static template = "laundry_management.LaundryDeliveryDetailsPopup"; + static props = { + defaultAddress: { type: String, optional: true }, + defaultScheduledAt: { type: String, optional: true }, + requireAddress: { type: Boolean, optional: true }, + requireScheduledTime: { type: Boolean, optional: true }, + title: { type: String, optional: true }, + getPayload: { type: Function }, + close: { type: Function }, + }; + static defaultProps = { + defaultAddress: "", + defaultScheduledAt: "", + requireAddress: true, + requireScheduledTime: false, + title: _t("Delivery Details"), + }; + + setup() { + this.state = useState({ + address: this.props.defaultAddress || "", + scheduledAt: this.props.defaultScheduledAt || "", + addressError: false, + timeError: false, + }); + this.addressRef = useRef("addressInput"); + onMounted(() => { + if (this.addressRef.el) { + this.addressRef.el.focus(); + } + }); + } + + confirm() { + this.state.addressError = + this.props.requireAddress && !this.state.address.trim(); + this.state.timeError = + this.props.requireScheduledTime && !this.state.scheduledAt; + if (this.state.addressError || this.state.timeError) { + return; + } + this.props.getPayload({ + address: this.state.address.trim(), + scheduledAt: this.state.scheduledAt || false, + }); + this.props.close(); + } + + cancel() { + this.props.close(); + } +}