From 2d0214fc100938d7cb6933f81eb7cb028f326453 Mon Sep 17 00:00:00 2001 From: Ricky Stretch Date: Sat, 14 Mar 2026 12:38:46 -0400 Subject: [PATCH] v0.9.12 Fixed back swipe --- .env.example | 2 +- backend/package.json | 2 +- backend/src/routes/messages.js | 6 +++--- build.sh | 2 +- frontend/package.json | 2 +- frontend/src/components/Message.jsx | 1 + frontend/src/pages/Chat.jsx | 20 +++++++++++++++++++- 7 files changed, 27 insertions(+), 8 deletions(-) diff --git a/.env.example b/.env.example index db8fcbb..8da7847 100644 --- a/.env.example +++ b/.env.example @@ -10,7 +10,7 @@ PROJECT_NAME=jama # Image version to run (set by build.sh, or use 'latest') -JAMA_VERSION=0.9.11 +JAMA_VERSION=0.9.12 # App port — the host port Docker maps to the container PORT=3000 diff --git a/backend/package.json b/backend/package.json index c631dc1..f930b8a 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "jama-backend", - "version": "0.9.11", + "version": "0.9.12", "description": "TeamChat backend server", "main": "src/index.js", "scripts": { diff --git a/backend/src/routes/messages.js b/backend/src/routes/messages.js index d8f90f7..60fadfa 100644 --- a/backend/src/routes/messages.js +++ b/backend/src/routes/messages.js @@ -45,7 +45,7 @@ router.get('/group/:groupId', authMiddleware, (req, res) => { const { before, limit = 50 } = req.query; let query = ` SELECT m.*, - u.name as user_name, u.display_name as user_display_name, u.avatar as user_avatar, u.role as user_role, u.status as user_status, u.hide_admin_tag as user_hide_admin_tag, u.about_me as user_about_me, + u.name as user_name, u.display_name as user_display_name, u.avatar as user_avatar, u.role as user_role, u.status as user_status, u.hide_admin_tag as user_hide_admin_tag, u.about_me as user_about_me, u.allow_dm as user_allow_dm, rm.content as reply_content, rm.image_url as reply_image_url, ru.name as reply_user_name, ru.display_name as reply_user_display_name, rm.is_deleted as reply_is_deleted @@ -96,7 +96,7 @@ router.post('/group/:groupId', authMiddleware, (req, res) => { const message = db.prepare(` SELECT m.*, - u.name as user_name, u.display_name as user_display_name, u.avatar as user_avatar, u.role as user_role, + u.name as user_name, u.display_name as user_display_name, u.avatar as user_avatar, u.role as user_role, u.allow_dm as user_allow_dm, rm.content as reply_content, ru.name as reply_user_name, ru.display_name as reply_user_display_name FROM messages m JOIN users u ON m.user_id = u.id @@ -128,7 +128,7 @@ router.post('/group/:groupId/image', authMiddleware, uploadImage.single('image') const message = db.prepare(` SELECT m.*, - u.name as user_name, u.display_name as user_display_name, u.avatar as user_avatar, u.role as user_role + u.name as user_name, u.display_name as user_display_name, u.avatar as user_avatar, u.role as user_role, u.allow_dm as user_allow_dm FROM messages m JOIN users u ON m.user_id = u.id WHERE m.id = ? `).get(result.lastInsertRowid); diff --git a/build.sh b/build.sh index f18c9c0..f490be0 100644 --- a/build.sh +++ b/build.sh @@ -13,7 +13,7 @@ # ───────────────────────────────────────────────────────────── set -euo pipefail -VERSION="${1:-0.9.11}" +VERSION="${1:-0.9.12}" ACTION="${2:-}" REGISTRY="${REGISTRY:-}" IMAGE_NAME="jama" diff --git a/frontend/package.json b/frontend/package.json index 24ff3a1..bebed99 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "jama-frontend", - "version": "0.9.11", + "version": "0.9.12", "private": true, "scripts": { "dev": "vite", diff --git a/frontend/src/components/Message.jsx b/frontend/src/components/Message.jsx index a51c0f0..c51b187 100644 --- a/frontend/src/components/Message.jsx +++ b/frontend/src/components/Message.jsx @@ -149,6 +149,7 @@ export default function Message({ message: msg, prevMessage, currentUser, onRepl status: msg.user_status, hide_admin_tag: msg.user_hide_admin_tag, about_me: msg.user_about_me, + allow_dm: msg.user_allow_dm, }; return ( diff --git a/frontend/src/pages/Chat.jsx b/frontend/src/pages/Chat.jsx index 96750ab..3f52e1a 100644 --- a/frontend/src/pages/Chat.jsx +++ b/frontend/src/pages/Chat.jsx @@ -255,12 +255,30 @@ export default function Chat() { const selectGroup = (id) => { setActiveGroupId(id); - if (isMobile) setShowSidebar(false); + if (isMobile) { + setShowSidebar(false); + // Push a history entry so swipe-back returns to sidebar instead of exiting the app + window.history.pushState({ jamaChatOpen: true }, ''); + } // Clear notifications and unread count for this group setNotifications(prev => prev.filter(n => n.groupId !== id)); setUnreadGroups(prev => { const next = new Map(prev); next.delete(id); return next; }); }; + // Handle browser back gesture on mobile — return to sidebar instead of exiting + useEffect(() => { + const handlePopState = (e) => { + if (isMobile && activeGroupId) { + setShowSidebar(true); + setActiveGroupId(null); + // Push another entry so subsequent back gestures are also intercepted + window.history.pushState({ jamaChatOpen: true }, ''); + } + }; + window.addEventListener('popstate', handlePopState); + return () => window.removeEventListener('popstate', handlePopState); + }, [isMobile, activeGroupId]); + // Update page title AND PWA app badge with total unread count useEffect(() => { const totalUnread = [...unreadGroups.values()].reduce((a, b) => a + b, 0);