From e0065e885fe63378739897f13dc1742ec63c3ff2 Mon Sep 17 00:00:00 2001 From: mudabbir-ahmad Date: Thu, 9 Apr 2026 11:56:22 +0100 Subject: [PATCH 1/9] updating business components. --- App.js | 2 + src/components/layout/Screen.js | 1 + .../screens/DepartmentSettingsScreen.js | 225 ++++++++++++++ src/components/screens/GameSettingsScreen.js | 288 +++++++++++------- src/components/screens/LeaderboardScreen.js | 28 +- src/components/screens/MapScreen.js | 176 ++++++++++- src/components/screens/TeamScreen.js | 29 +- src/hooks/useGameHook.js | 20 ++ 8 files changed, 659 insertions(+), 110 deletions(-) create mode 100644 src/components/screens/DepartmentSettingsScreen.js diff --git a/App.js b/App.js index 222b6a0..9efbd46 100644 --- a/App.js +++ b/App.js @@ -9,6 +9,7 @@ import TeamScreen from "./src/components/screens/TeamScreen"; import MapScreen from "./src/components/screens/MapScreen"; import LeaderboardScreen from "./src/components/screens/LeaderboardScreen"; import GameSettingsScreen from "./src/components/screens/GameSettingsScreen"; +import DepartmentSettingsScreen from "./src/components/screens/DepartmentSettingsScreen"; import PlayersScreen from "./src/components/screens/PlayersScreen"; import ExpandedMapScreen from "./src/components/screens/ExpandedMapScreen"; import {loadSession} from "./src/hooks/SessionStore"; @@ -43,6 +44,7 @@ const GameStack = () => ( const AdminStack = () => ( + diff --git a/src/components/layout/Screen.js b/src/components/layout/Screen.js index 947fd9f..3d9b491 100644 --- a/src/components/layout/Screen.js +++ b/src/components/layout/Screen.js @@ -17,6 +17,7 @@ const Screen = ({ children, style, showBack = false }) => { TeamScreen: "Current Team", MapScreen: "Map", GameSettingsScreen: "Game Settings", + DepartmentSettingsScreen: "Department Settings", PlayersScreen: "Players", ExpandedMapScreen: "Map View", }; diff --git a/src/components/screens/DepartmentSettingsScreen.js b/src/components/screens/DepartmentSettingsScreen.js new file mode 100644 index 0000000..21aeff6 --- /dev/null +++ b/src/components/screens/DepartmentSettingsScreen.js @@ -0,0 +1,225 @@ +import React, {useEffect, useState} from 'react'; +import {ActivityIndicator, Alert, ScrollView, StyleSheet, Switch, Text, TextInput, View} from 'react-native'; +import Screen from '../layout/Screen'; +import {Button, ButtonTray} from '../UI/Button'; +import useGameHook from '../../hooks/useGameHook'; + +const DepartmentSettingsScreen = ({route, navigation}) => { +// Initialisation ------------ + + const {SGid, Gid} = route.params; + const {getSubgroup, updateSubgroup, getCaches, resetGame} = useGameHook(); + +// State ---------------------- + + const [loading, setLoading] = useState(true); + const [saving, setSaving] = useState(false); + const [deptName, setDeptName] = useState(''); + const [joinCode, setJoinCode] = useState(''); + const [teamsEnabled, setTeamsEnabled] = useState(false); + const [cacheTriggerMeters, setCacheTriggerMeters] = useState('20'); + const [cacheCount, setCacheCount] = useState(0); + +// Handlers ------------------- + + useEffect(() => { + const load = async () => { + const sg = await getSubgroup(SGid); + if (sg) { + setDeptName(sg.SubGroupName || ''); + setJoinCode(sg.JoinCode || ''); + setTeamsEnabled(Boolean(sg.TeamsEnabled)); + setCacheTriggerMeters(String(sg.CacheTriggerMeters || 20)); + } + // Load cache count for this department + const caches = await getCaches(Gid, SGid); + setCacheCount((caches || []).length); + setLoading(false); + }; + load(); + }, []); + + const handleSave = async () => { + setSaving(true); + await updateSubgroup(SGid, { + SubGroupName: deptName.trim(), + TeamsEnabled: teamsEnabled, + CacheTriggerMeters: parseInt(cacheTriggerMeters) || 20, + }); + setSaving(false); + Alert.alert('Saved', 'Department settings updated.'); + }; + + const handleResetDepartment = () => { + Alert.alert( + 'Reset Department', + 'This will reset all cache claims for this department. Are you sure?', + [ + {text: 'Cancel', style: 'cancel'}, + { + text: 'Reset', + style: 'destructive', + onPress: async () => { + await resetGame(Gid); + Alert.alert('Done', 'Department progress has been reset.'); + }, + }, + ], + ); + }; + + const handleManageCaches = () => { + navigation.navigate('MapScreen'); + }; + +// View ----------------------- + + if (loading) { + return ( + + + + ); + } + + return ( + + + Department Settings + + Department Name + + + + Department Join Code + {joinCode || '—'} + + + + Teams Enabled + + + + Cache Claim Distance (metres) + + + + Total Caches + {cacheCount} + + + + +