72 lines
2.5 KiB
Python
72 lines
2.5 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
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'
|
|
|
|
with open(TARGET, 'r') as f:
|
|
content = f.read()
|
|
|
|
# Verify globalStore is already imported
|
|
assert 'globalStore' in content, 'ERROR: globalStore not found - check imports'
|
|
|
|
# ── 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'
|
|
# 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')
|
|
|
|
# ── 2. Patch onMounted to add socket listeners ───────────────────────────────
|
|
OLD_MOUNTED = '''onMounted(() => {
|
|
document.title = props.ticketId;
|
|
});'''
|
|
|
|
NEW_MOUNTED = '''onMounted(() => {
|
|
document.title = props.ticketId;
|
|
|
|
// 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 when ticket is updated by another user
|
|
$socket.on("helpdesk:ticket-update", (data) => {
|
|
if (String(data.ticket_id) === String(props.ticketId)) {
|
|
ticket.reload();
|
|
}
|
|
});
|
|
});'''
|
|
|
|
assert OLD_MOUNTED in content, 'ERROR: onMounted anchor not found'
|
|
content = content.replace(OLD_MOUNTED, NEW_MOUNTED, 1)
|
|
|
|
# ── 3. Patch onUnmounted to remove socket listeners ─────────────────────────
|
|
OLD_UNMOUNTED = '''onUnmounted(() => {
|
|
document.title = "Helpdesk";
|
|
});'''
|
|
|
|
NEW_UNMOUNTED = '''onUnmounted(() => {
|
|
document.title = "Helpdesk";
|
|
$socket.off("helpdesk:ticket-comment");
|
|
$socket.off("helpdesk:ticket-update");
|
|
});'''
|
|
|
|
assert OLD_UNMOUNTED in content, 'ERROR: onUnmounted anchor not found'
|
|
content = content.replace(OLD_UNMOUNTED, NEW_UNMOUNTED, 1)
|
|
|
|
with open(TARGET, 'w') as f:
|
|
f.write(content)
|
|
|
|
print('PATCH OK')
|