feat(sub12b): wire Move Parts + Stop Timer dialogs into tablet (Task 15)
ShopfloorTablet component:
- Imports the 3 new OWL dialogs.
- useService('dialog') for spawning.
- Listens for 'fp-resolve-rack' window CustomEvent fired from inside
FpMovePartsDialog → spawns FpRackPartsDialog inline.
- New methods: openMovePartsDialog(from, to) + openStopTimerDialog(id).
Refresh tablet after commit/reconcile so the UI reflects new state.
Listener cleanup on unmount.
Note: the actual buttons that call these methods are added to the
existing tablet XML in a follow-up step — for now they are wired but
not surfaced. Operators get them after Task 16 + smoke test.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -20,6 +20,9 @@ import { registry } from "@web/core/registry";
|
|||||||
import { rpc } from "@web/core/network/rpc";
|
import { rpc } from "@web/core/network/rpc";
|
||||||
import { useService } from "@web/core/utils/hooks";
|
import { useService } from "@web/core/utils/hooks";
|
||||||
import { QrScanner } from "./qr_scanner";
|
import { QrScanner } from "./qr_scanner";
|
||||||
|
import { FpMovePartsDialog } from "./move_parts_dialog";
|
||||||
|
import { FpStopTimerDialog } from "./stop_timer_dialog";
|
||||||
|
import { FpRackPartsDialog } from "./rack_parts_dialog";
|
||||||
|
|
||||||
export class ShopfloorTablet extends Component {
|
export class ShopfloorTablet extends Component {
|
||||||
static template = "fusion_plating_shopfloor.ShopfloorTablet";
|
static template = "fusion_plating_shopfloor.ShopfloorTablet";
|
||||||
@@ -29,8 +32,21 @@ export class ShopfloorTablet extends Component {
|
|||||||
setup() {
|
setup() {
|
||||||
this.notification = useService("notification");
|
this.notification = useService("notification");
|
||||||
this.action = useService("action");
|
this.action = useService("action");
|
||||||
|
this.dialog = useService("dialog");
|
||||||
this.scanInput = useRef("scanInput");
|
this.scanInput = useRef("scanInput");
|
||||||
|
|
||||||
|
// Sub 12b — listen for the rack-resolution custom event fired
|
||||||
|
// from inside FpMovePartsDialog when the operator hits the
|
||||||
|
// 'Resolve' button on a rack-required blocker.
|
||||||
|
this._onResolveRack = (ev) => {
|
||||||
|
this.dialog.add(FpRackPartsDialog, {
|
||||||
|
fromStepId: ev.detail.fromStepId,
|
||||||
|
qty: ev.detail.qty || 0,
|
||||||
|
onRacked: () => this.refresh(),
|
||||||
|
});
|
||||||
|
};
|
||||||
|
window.addEventListener("fp-resolve-rack", this._onResolveRack);
|
||||||
|
|
||||||
this.state = useState({
|
this.state = useState({
|
||||||
overview: null,
|
overview: null,
|
||||||
stationId: null,
|
stationId: null,
|
||||||
@@ -56,6 +72,23 @@ export class ShopfloorTablet extends Component {
|
|||||||
onWillUnmount(() => {
|
onWillUnmount(() => {
|
||||||
if (this._interval) clearInterval(this._interval);
|
if (this._interval) clearInterval(this._interval);
|
||||||
if (this._tickInterval) clearInterval(this._tickInterval);
|
if (this._tickInterval) clearInterval(this._tickInterval);
|
||||||
|
window.removeEventListener("fp-resolve-rack", this._onResolveRack);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// ===================================================== Sub 12b dialogs
|
||||||
|
|
||||||
|
openMovePartsDialog(fromStepId, toStepId) {
|
||||||
|
this.dialog.add(FpMovePartsDialog, {
|
||||||
|
fromStepId, toStepId,
|
||||||
|
onCommit: () => this.refresh(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
openStopTimerDialog(timerId) {
|
||||||
|
this.dialog.add(FpStopTimerDialog, {
|
||||||
|
timerId,
|
||||||
|
onReconciled: () => this.refresh(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user