From 1fdafd34d187320e66fc7851db9dbe9cddd52577 Mon Sep 17 00:00:00 2001 From: gsinghpal Date: Sat, 23 May 2026 00:28:30 -0400 Subject: [PATCH] feat(fusion_plating_shopfloor): FpIdleWarning overlay (P6.2.3) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixed-position yellow-border overlay + countdown toast shown during the last N (default 30) seconds before auto-lock. Pure props-driven — secondsRemaining is the only input; parent (FpTabletLock) decides when to mount and unmount. Box-shadow pulse animation runs CSS-only so OWL doesn't need to re-render every tick. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../fusion_plating_shopfloor/__manifest__.py | 3 ++ .../static/src/js/components/idle_warning.js | 18 ++++++++++ .../src/scss/components/_idle_warning.scss | 35 +++++++++++++++++++ .../src/xml/components/idle_warning.xml | 13 +++++++ 4 files changed, 69 insertions(+) create mode 100644 fusion_plating/fusion_plating_shopfloor/static/src/js/components/idle_warning.js create mode 100644 fusion_plating/fusion_plating_shopfloor/static/src/scss/components/_idle_warning.scss create mode 100644 fusion_plating/fusion_plating_shopfloor/static/src/xml/components/idle_warning.xml diff --git a/fusion_plating/fusion_plating_shopfloor/__manifest__.py b/fusion_plating/fusion_plating_shopfloor/__manifest__.py index 7b9f058e..89c9381c 100644 --- a/fusion_plating/fusion_plating_shopfloor/__manifest__.py +++ b/fusion_plating/fusion_plating_shopfloor/__manifest__.py @@ -88,6 +88,9 @@ Copyright (c) 2026 Nexa Systems Inc. All rights reserved. 'fusion_plating_shopfloor/static/src/scss/components/_pin_pad.scss', 'fusion_plating_shopfloor/static/src/xml/components/pin_pad.xml', 'fusion_plating_shopfloor/static/src/js/components/pin_pad.js', + 'fusion_plating_shopfloor/static/src/scss/components/_idle_warning.scss', + 'fusion_plating_shopfloor/static/src/xml/components/idle_warning.xml', + 'fusion_plating_shopfloor/static/src/js/components/idle_warning.js', # ---- Job Workspace (Phase 1 — tablet redesign) ---- 'fusion_plating_shopfloor/static/src/scss/job_workspace.scss', 'fusion_plating_shopfloor/static/src/xml/job_workspace.xml', diff --git a/fusion_plating/fusion_plating_shopfloor/static/src/js/components/idle_warning.js b/fusion_plating/fusion_plating_shopfloor/static/src/js/components/idle_warning.js new file mode 100644 index 00000000..e4ca6af7 --- /dev/null +++ b/fusion_plating/fusion_plating_shopfloor/static/src/js/components/idle_warning.js @@ -0,0 +1,18 @@ +/** @odoo-module **/ +// ============================================================================= +// Fusion Plating — FpIdleWarning (shared OWL service) +// +// Yellow-border overlay + countdown toast shown during the last +// (default 30) seconds before auto-lock. Any pointer/touch event on +// the document elsewhere resets the activity tracker, which causes +// this component's parent (FpTabletLock) to hide the warning. +// ============================================================================= + +import { Component } from "@odoo/owl"; + +export class FpIdleWarning extends Component { + static template = "fusion_plating_shopfloor.IdleWarning"; + static props = { + secondsRemaining: { type: Number }, + }; +} diff --git a/fusion_plating/fusion_plating_shopfloor/static/src/scss/components/_idle_warning.scss b/fusion_plating/fusion_plating_shopfloor/static/src/scss/components/_idle_warning.scss new file mode 100644 index 00000000..51fca641 --- /dev/null +++ b/fusion_plating/fusion_plating_shopfloor/static/src/scss/components/_idle_warning.scss @@ -0,0 +1,35 @@ +// ============================================================================= +// FpIdleWarning — yellow-border countdown overlay before auto-lock +// ============================================================================= + +.o_fp_idle_warning_overlay { + position: fixed; + inset: 0; + pointer-events: none; + z-index: 9998; + box-shadow: inset 0 0 0 4px #ff9f0a; + animation: o_fp_idle_pulse 1s ease-in-out infinite alternate; +} + +@keyframes o_fp_idle_pulse { + from { box-shadow: inset 0 0 0 4px rgba(255, 159, 10, 0.6); } + to { box-shadow: inset 0 0 0 4px rgba(255, 159, 10, 1); } +} + +.o_fp_idle_warning_toast { + position: fixed; + top: 16px; + left: 50%; + transform: translateX(-50%); + background: #1d1d1f; + color: #ffd585; + padding: 0.6rem 1.2rem; + border-radius: 8px; + font-size: 0.9rem; + z-index: 9999; + pointer-events: none; + box-shadow: 0 4px 12px rgba(0,0,0,0.4); + + strong { color: #ffb84d; margin: 0 0.2rem; } + > i { margin-right: 0.4rem; } +} diff --git a/fusion_plating/fusion_plating_shopfloor/static/src/xml/components/idle_warning.xml b/fusion_plating/fusion_plating_shopfloor/static/src/xml/components/idle_warning.xml new file mode 100644 index 00000000..79668faa --- /dev/null +++ b/fusion_plating/fusion_plating_shopfloor/static/src/xml/components/idle_warning.xml @@ -0,0 +1,13 @@ + + + + +
+
+ + Locking in s · tap anywhere to stay +
+
+
+ +