diff --git a/.env.example b/.env.example index a3a61fe..d45a041 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.77 +JAMA_VERSION=0.9.78 # App port — the host port Docker maps to the container PORT=3000 diff --git a/backend/package.json b/backend/package.json index a03f3a7..aa49ec6 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "jama-backend", - "version": "0.9.77", + "version": "0.9.78", "description": "TeamChat backend server", "main": "src/index.js", "scripts": { diff --git a/build.sh b/build.sh index aebf93f..0fa4b24 100644 --- a/build.sh +++ b/build.sh @@ -13,7 +13,7 @@ # ───────────────────────────────────────────────────────────── set -euo pipefail -VERSION="${1:-0.9.77}" +VERSION="${1:-0.9.78}" ACTION="${2:-}" REGISTRY="${REGISTRY:-}" IMAGE_NAME="jama" diff --git a/frontend/package.json b/frontend/package.json index 8626620..87a532a 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "jama-frontend", - "version": "0.9.77", + "version": "0.9.78", "private": true, "scripts": { "dev": "vite", diff --git a/frontend/src/components/SchedulePage.jsx b/frontend/src/components/SchedulePage.jsx index eb45065..54d298c 100644 --- a/frontend/src/components/SchedulePage.jsx +++ b/frontend/src/components/SchedulePage.jsx @@ -597,10 +597,27 @@ function EventDetailModal({ event, onClose, onEdit, onAvailabilityChange, isTool } // ── Event Types Panel ───────────────────────────────────────────────────────── -function EventTypesPanel({ eventTypes, userGroups, onUpdated }) { +function EventTypesPanel({ eventTypes, userGroups, onUpdated, isMobile=false }) { const toast=useToast(); const [editingType,setEditingType]=useState(null); const [showForm,setShowForm]=useState(false); + // Mobile bottom sheet state + const [sheetMode,setSheetMode]=useState(null); // null | 'create' | 'edit' + const [sheetName,setSheetName]=useState(''); + const [sheetColour,setSheetColour]=useState('#6366f1'); + const [sheetSaving,setSheetSaving]=useState(false); + const openCreateSheet=()=>{setSheetName('');setSheetColour('#6366f1');setSheetMode('create');}; + const openEditSheet=(et)=>{setSheetName(et.name);setSheetColour(et.colour);setEditingType(et);setSheetMode('edit');}; + const closeSheet=()=>{setSheetMode(null);setEditingType(null);}; + const saveSheet=async()=>{ + if(!sheetName.trim()) return; + setSheetSaving(true); + try{ + if(sheetMode==='create') await api.createEventType({name:sheetName.trim(),colour:sheetColour}); + else await api.updateEventType(editingType.id,{name:sheetName.trim(),colour:sheetColour}); + onUpdated(); closeSheet(); + }catch(e){} finally{setSheetSaving(false);} + }; const handleDel=async et=>{ if(!confirm(`Delete "${et.name}"?`)) return; try{await api.deleteEventType(et.id);toast('Deleted','success');onUpdated();}catch(e){toast(e.message,'error');} @@ -609,7 +626,10 @@ function EventTypesPanel({ eventTypes, userGroups, onUpdated }) {