Chore: rename api->camera-management-api and web->management-dashboard-web-app; update compose, ignore, README references

This commit is contained in:
Alireza Vaezi
2025-08-07 22:07:25 -04:00
parent 9384c26504
commit cc63bf4110
281 changed files with 19 additions and 19 deletions

View File

@@ -0,0 +1,48 @@
import { useState, useEffect } from 'react'
import { userManagement, type User } from '../lib/supabase'
export function useAuth() {
const [user, setUser] = useState<User | null>(null)
const [loading, setLoading] = useState(true)
const [error, setError] = useState<string | null>(null)
useEffect(() => {
loadUser()
}, [])
const loadUser = async () => {
try {
setLoading(true)
setError(null)
const currentUser = await userManagement.getCurrentUser()
setUser(currentUser)
} catch (err) {
setError(err instanceof Error ? err.message : 'Failed to load user')
setUser(null)
} finally {
setLoading(false)
}
}
const isAdmin = () => {
return user?.roles.includes('admin') ?? false
}
const hasRole = (role: string) => {
return user?.roles.includes(role as any) ?? false
}
const hasAnyRole = (roles: string[]) => {
return roles.some(role => user?.roles.includes(role as any)) ?? false
}
return {
user,
loading,
error,
isAdmin,
hasRole,
hasAnyRole,
refreshUser: loadUser
}
}

View File

@@ -0,0 +1,81 @@
/**
* React hook for managing auto-recording functionality
*/
import { useState, useEffect, useCallback } from 'react'
import { autoRecordingManager, type AutoRecordingState } from '../lib/autoRecordingManager'
export interface UseAutoRecordingResult {
isRunning: boolean
states: AutoRecordingState[]
error: string | null
start: () => Promise<void>
stop: () => void
refresh: () => Promise<void>
}
export function useAutoRecording(): UseAutoRecordingResult {
const [isRunning, setIsRunning] = useState(false)
const [states, setStates] = useState<AutoRecordingState[]>([])
const [error, setError] = useState<string | null>(null)
// Update states periodically
useEffect(() => {
if (!isRunning) {
return
}
const interval = setInterval(() => {
setStates(autoRecordingManager.getStates())
}, 1000)
return () => clearInterval(interval)
}, [isRunning])
const start = useCallback(async () => {
try {
setError(null)
await autoRecordingManager.start()
setIsRunning(true)
setStates(autoRecordingManager.getStates())
} catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Failed to start auto-recording'
setError(errorMessage)
console.error('Failed to start auto-recording:', err)
}
}, [])
const stop = useCallback(() => {
try {
autoRecordingManager.stop()
setIsRunning(false)
setStates([])
setError(null)
} catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Failed to stop auto-recording'
setError(errorMessage)
console.error('Failed to stop auto-recording:', err)
}
}, [])
const refresh = useCallback(async () => {
try {
setError(null)
await autoRecordingManager.refreshConfigurations()
setStates(autoRecordingManager.getStates())
} catch (err) {
const errorMessage = err instanceof Error ? err.message : 'Failed to refresh configurations'
setError(errorMessage)
console.error('Failed to refresh auto-recording configurations:', err)
}
}, [])
return {
isRunning,
states,
error,
start,
stop,
refresh
}
}