diff --git a/.env.example b/.env.example index 175dc68..6bd595a 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.81 +JAMA_VERSION=0.9.82 # App port — the host port Docker maps to the container PORT=3000 diff --git a/backend/package.json b/backend/package.json index c379b3e..e0cd5c0 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "jama-backend", - "version": "0.9.81", + "version": "0.9.82", "description": "TeamChat backend server", "main": "src/index.js", "scripts": { diff --git a/build.sh b/build.sh index 81a224e..53b6709 100644 --- a/build.sh +++ b/build.sh @@ -13,7 +13,7 @@ # ───────────────────────────────────────────────────────────── set -euo pipefail -VERSION="${1:-0.9.81}" +VERSION="${1:-0.9.82}" ACTION="${2:-}" REGISTRY="${REGISTRY:-}" IMAGE_NAME="jama" diff --git a/frontend/package.json b/frontend/package.json index d45ae84..6d9dbd5 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "jama-frontend", - "version": "0.9.81", + "version": "0.9.82", "private": true, "scripts": { "dev": "vite", diff --git a/frontend/src/components/GroupInfoModal.jsx b/frontend/src/components/GroupInfoModal.jsx index da3164a..a2cc08d 100644 --- a/frontend/src/components/GroupInfoModal.jsx +++ b/frontend/src/components/GroupInfoModal.jsx @@ -134,7 +134,7 @@ export default function GroupInfoModal({ group, onClose, onUpdated, onBack }) {
{editing ? (
- setNewName(e.target.value)} onKeyDown={e => e.key === 'Enter' && handleRename()} /> + setNewName(e.target.value)} onKeyDown={e => e.key === 'Enter' && handleRename()} autoComplete="off" autoCorrect="off" autoCapitalize="off" spellCheck={false} />
@@ -219,7 +219,7 @@ export default function GroupInfoModal({ group, onClose, onUpdated, onBack }) {
{canManage && (
- setAddSearch(e.target.value)} /> + setAddSearch(e.target.value)} /> {addResults.length > 0 && addSearch && (
{addResults.filter(u => !members.find(m => m.id === u.id)).map(u => ( diff --git a/frontend/src/components/MobileGroupManager.jsx b/frontend/src/components/MobileGroupManager.jsx index ba4f030..fa53b28 100644 --- a/frontend/src/components/MobileGroupManager.jsx +++ b/frontend/src/components/MobileGroupManager.jsx @@ -33,7 +33,11 @@ function MembersScreen({ group, allUsers, onBack }) { }; useEffect(() => { loadMembers(); }, [group.id]); + const [search, setSearch] = useState(''); const memberIds = new Set(members.map(m => m.id)); + const filteredUsers = search.trim() + ? allUsers.filter(u => (u.display_name||u.name).toLowerCase().includes(search.toLowerCase())) + : allUsers; const toggle = async (user) => { const nowMember = memberIds.has(user.id); @@ -62,8 +66,21 @@ function MembersScreen({ group, allUsers, onBack }) {
Loading…
) : (
-
All Users
- {allUsers.map(u => { +
+
+ + setSearch(e.target.value)} + placeholder="Search users…" + autoComplete="off" autoCorrect="off" autoCapitalize="off" spellCheck={false} + style={{width:'100%',padding:'8px 10px 8px 32px',border:'1px solid var(--border)',borderRadius:'var(--radius)',background:'var(--background)',color:'var(--text-primary)',fontSize:14,boxSizing:'border-box'}} + /> +
+
+
+ {search ? `${filteredUsers.length} result${filteredUsers.length!==1?'s':''}` : 'All Users'} +
+ {filteredUsers.map(u => { const isMember = memberIds.has(u.id); return (
@@ -129,7 +146,7 @@ function MultiGroupDmsScreen({ userGroups, onBack }) { /> {creating && (
- setNewName(e.target.value)} placeholder="DM name…" style={{ width:'100%',padding:'9px 12px',border:'1px solid var(--border)',borderRadius:'var(--radius)',background:'var(--background)',color:'var(--text-primary)',fontSize:15,marginBottom:10,boxSizing:'border-box' }}/> + setNewName(e.target.value)} placeholder="DM name…" autoComplete="off" autoCorrect="off" autoCapitalize="off" spellCheck={false} style={{ width:'100%',padding:'9px 12px',border:'1px solid var(--border)',borderRadius:'var(--radius)',background:'var(--background)',color:'var(--text-primary)',fontSize:15,marginBottom:10,boxSizing:'border-box' }}/>
Select groups (min 2):
{userGroups.map(g=>(