Add settings page and store with UI customization options

- Implement SettingsView with appearance, data, notifications, and
advanced tabs - Add settings store (Pinia) for theme, navigation,
notifications, and app config - Integrate settings store into HomeView
and BottomNav for theme and navigation mode - Add room management modal
and store methods for adding/removing rooms - Update
SensorManagementView with room management button and modal - Support
exporting/importing settings and resetting to defaults - Enable dark
mode via Tailwind config
This commit is contained in:
rafaeldpsilva
2025-09-03 17:07:19 +01:00
parent 1c96437e5a
commit 05baaca23c
9 changed files with 1250 additions and 17 deletions

View File

@@ -425,6 +425,68 @@ export const useEnergyStore = defineStore('energy', () => {
return Array.from(sensorDevices.values()).filter(sensor => sensor.type === type)
}
// Room management functions
function addRoom(roomName: string): boolean {
if (!roomName.trim()) return false
// Check if room already exists
if (availableRooms.value.includes(roomName.trim())) {
return false
}
// Add room to available rooms list
availableRooms.value.push(roomName.trim())
availableRooms.value.sort() // Keep rooms sorted alphabetically
console.log(`Added new room: ${roomName}`)
return true
}
function removeRoom(roomName: string): boolean {
const index = availableRooms.value.indexOf(roomName)
if (index === -1) return false
// Check if any sensors are assigned to this room
const sensorsInRoom = Array.from(sensorDevices.values()).filter(sensor => sensor.room === roomName)
if (sensorsInRoom.length > 0) {
// Reassign sensors to 'Unassigned'
sensorsInRoom.forEach(sensor => {
sensor.room = ''
sensorDevices.set(sensor.id, { ...sensor })
})
}
// Remove room data
roomsData.delete(roomName)
// Remove from available rooms
availableRooms.value.splice(index, 1)
console.log(`Removed room: ${roomName}`)
return true
}
function getRoomStats(roomName: string) {
const sensorsInRoom = getSensorsByRoom(roomName)
const roomMetrics = roomsData.get(roomName)
return {
sensorCount: sensorsInRoom.length,
sensorTypes: [...new Set(sensorsInRoom.map(s => s.type))],
hasMetrics: !!roomMetrics,
energyConsumption: roomMetrics?.energy.current || 0,
co2Level: roomMetrics?.co2.current || 0,
lastUpdated: roomMetrics?.lastUpdated || null
}
}
function getAllRoomsWithStats() {
return availableRooms.value.map(room => ({
name: room,
...getRoomStats(room)
}))
}
// Initialize mock sensors on store creation
initializeMockSensors()
@@ -443,6 +505,10 @@ export const useEnergyStore = defineStore('energy', () => {
updateSensorRoom,
executeSensorAction,
getSensorsByRoom,
getSensorsByType
getSensorsByType,
addRoom,
removeRoom,
getRoomStats,
getAllRoomsWithStats
}
})