Fix mobile realtime patch - globalStore already imported

This commit is contained in:
Zac Gaetano 2026-05-14 07:25:49 -04:00
parent b792301c75
commit fc40f54540

View file

@ -1,8 +1,7 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
""" """
Patch MobileTicketAgent.vue to add socket realtime listeners so that Patch MobileTicketAgent.vue to add socket realtime listeners.
comments and ticket updates auto-reload without a manual refresh. globalStore is already imported from a previous patch - just destructure $socket.
Mirrors the onMounted/onUnmounted logic from TicketAgent.vue.
""" """
TARGET = '/home/frappe/frappe-bench/frappe-bench/apps/helpdesk/desk/src/pages/ticket/MobileTicketAgent.vue' 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: with open(TARGET, 'r') as f:
content = f.read() content = f.read()
# ── 1. Add globalStore import ──────────────────────────────────────────────── # Verify globalStore is already imported
OLD_ROUTER = 'import { useRouter } from "vue-router";' assert 'globalStore' in content, 'ERROR: globalStore not found - check imports'
NEW_ROUTER = '''import { useRouter } from "vue-router";
import { globalStore } from "@/stores/globalStore";'''
assert OLD_ROUTER in content, 'ERROR: router import anchor not found' # ── 1. Add $socket destructure after existing globalStore usage ──────────────
content = content.replace(OLD_ROUTER, NEW_ROUTER, 1) # globalStore() is called as `const { $dialog } = globalStore();` in the file
# ── 2. Add $socket destructure near top of setup (after router/store inits) ─
OLD_STORE_INIT = 'const ticketStatusStore = useTicketStatusStore();\nconst { getUser } = useUserStore();' OLD_STORE_INIT = 'const ticketStatusStore = useTicketStatusStore();\nconst { getUser } = useUserStore();'
NEW_STORE_INIT = '''const ticketStatusStore = useTicketStatusStore(); NEW_STORE_INIT = '''const ticketStatusStore = useTicketStatusStore();
const { getUser } = useUserStore(); const { getUser } = useUserStore();
const { $socket } = globalStore();''' const { $socket } = globalStore();'''
assert OLD_STORE_INIT in content, 'ERROR: store init anchor not found' assert OLD_STORE_INIT in content, 'ERROR: store init anchor not found'
# Only patch if $socket not already added
if '$socket' not in content:
content = content.replace(OLD_STORE_INIT, NEW_STORE_INIT, 1) 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(() => { OLD_MOUNTED = '''onMounted(() => {
document.title = props.ticketId; document.title = props.ticketId;
});''' });'''
@ -35,15 +34,15 @@ OLD_MOUNTED = '''onMounted(() => {
NEW_MOUNTED = '''onMounted(() => { NEW_MOUNTED = '''onMounted(() => {
document.title = props.ticketId; document.title = props.ticketId;
// BMG: realtime reload activities when a new comment is posted // BMG: realtime reload when a new comment is posted
$socket.on("helpdesk:ticket-comment", (data: { ticket_id: string }) => { $socket.on("helpdesk:ticket-comment", (data) => {
if (String(data.ticket_id) === String(props.ticketId)) { if (String(data.ticket_id) === String(props.ticketId)) {
ticket.reload(); ticket.reload();
} }
}); });
// BMG: realtime reload ticket when it is updated by another user // BMG: realtime reload when ticket is updated by another user
$socket.on("helpdesk:ticket-update", (data: { ticket_id: string }) => { $socket.on("helpdesk:ticket-update", (data) => {
if (String(data.ticket_id) === String(props.ticketId)) { if (String(data.ticket_id) === String(props.ticketId)) {
ticket.reload(); ticket.reload();
} }
@ -53,7 +52,7 @@ NEW_MOUNTED = '''onMounted(() => {
assert OLD_MOUNTED in content, 'ERROR: onMounted anchor not found' assert OLD_MOUNTED in content, 'ERROR: onMounted anchor not found'
content = content.replace(OLD_MOUNTED, NEW_MOUNTED, 1) 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(() => { OLD_UNMOUNTED = '''onUnmounted(() => {
document.title = "Helpdesk"; document.title = "Helpdesk";
});''' });'''