From fc40f545403076032e981fe75d8fd3897d64dbb9 Mon Sep 17 00:00:00 2001 From: ZGaetano Date: Thu, 14 May 2026 07:25:49 -0400 Subject: [PATCH] Fix mobile realtime patch - globalStore already imported --- scripts/patch_mobile_realtime.py | 35 ++++++++++++++++---------------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/scripts/patch_mobile_realtime.py b/scripts/patch_mobile_realtime.py index 35642a4..eea87ad 100644 --- a/scripts/patch_mobile_realtime.py +++ b/scripts/patch_mobile_realtime.py @@ -1,8 +1,7 @@ #!/usr/bin/env python3 """ -Patch MobileTicketAgent.vue to add socket realtime listeners so that -comments and ticket updates auto-reload without a manual refresh. -Mirrors the onMounted/onUnmounted logic from TicketAgent.vue. +Patch MobileTicketAgent.vue to add socket realtime listeners. +globalStore is already imported from a previous patch - just destructure $socket. """ TARGET = '/home/frappe/frappe-bench/frappe-bench/apps/helpdesk/desk/src/pages/ticket/MobileTicketAgent.vue' @@ -10,24 +9,24 @@ TARGET = '/home/frappe/frappe-bench/frappe-bench/apps/helpdesk/desk/src/pages/ti with open(TARGET, 'r') as f: content = f.read() -# ── 1. Add globalStore import ──────────────────────────────────────────────── -OLD_ROUTER = 'import { useRouter } from "vue-router";' -NEW_ROUTER = '''import { useRouter } from "vue-router"; -import { globalStore } from "@/stores/globalStore";''' +# Verify globalStore is already imported +assert 'globalStore' in content, 'ERROR: globalStore not found - check imports' -assert OLD_ROUTER in content, 'ERROR: router import anchor not found' -content = content.replace(OLD_ROUTER, NEW_ROUTER, 1) - -# ── 2. Add $socket destructure near top of setup (after router/store inits) ─ +# ── 1. Add $socket destructure after existing globalStore usage ────────────── +# globalStore() is called as `const { $dialog } = globalStore();` in the file OLD_STORE_INIT = 'const ticketStatusStore = useTicketStatusStore();\nconst { getUser } = useUserStore();' NEW_STORE_INIT = '''const ticketStatusStore = useTicketStatusStore(); const { getUser } = useUserStore(); const { $socket } = globalStore();''' assert OLD_STORE_INIT in content, 'ERROR: store init anchor not found' -content = content.replace(OLD_STORE_INIT, NEW_STORE_INIT, 1) +# Only patch if $socket not already added +if '$socket' not in content: + content = content.replace(OLD_STORE_INIT, NEW_STORE_INIT, 1) +else: + print('INFO: $socket already present, skipping destructure') -# ── 3. Patch onMounted to add socket listeners ─────────────────────────────── +# ── 2. Patch onMounted to add socket listeners ─────────────────────────────── OLD_MOUNTED = '''onMounted(() => { document.title = props.ticketId; });''' @@ -35,15 +34,15 @@ OLD_MOUNTED = '''onMounted(() => { NEW_MOUNTED = '''onMounted(() => { document.title = props.ticketId; - // BMG: realtime — reload activities when a new comment is posted - $socket.on("helpdesk:ticket-comment", (data: { ticket_id: string }) => { + // BMG: realtime — reload when a new comment is posted + $socket.on("helpdesk:ticket-comment", (data) => { if (String(data.ticket_id) === String(props.ticketId)) { ticket.reload(); } }); - // BMG: realtime — reload ticket when it is updated by another user - $socket.on("helpdesk:ticket-update", (data: { ticket_id: string }) => { + // BMG: realtime — reload when ticket is updated by another user + $socket.on("helpdesk:ticket-update", (data) => { if (String(data.ticket_id) === String(props.ticketId)) { ticket.reload(); } @@ -53,7 +52,7 @@ NEW_MOUNTED = '''onMounted(() => { assert OLD_MOUNTED in content, 'ERROR: onMounted anchor not found' content = content.replace(OLD_MOUNTED, NEW_MOUNTED, 1) -# ── 4. Patch onUnmounted to remove socket listeners ───────────────────────── +# ── 3. Patch onUnmounted to remove socket listeners ───────────────────────── OLD_UNMOUNTED = '''onUnmounted(() => { document.title = "Helpdesk"; });'''