import { useState, useEffect } from 'react'
import { useAdminConfig } from '../hooks/useAdminConfig'
import { useAuth } from '../context/AuthContext'
import { useCustomers } from '../hooks/useCustomers'
import { useEmployees } from '../hooks/useEmployees'
import { FaPlus, FaTrash, FaFloppyDisk, FaSpinner } from 'react-icons/fa6'
import { FaEdit } from 'react-icons/fa'
export default function AdminPage() {
const { user, isAdmin } = useAuth()
const { config, loading, error, updateConfig } = useAdminConfig()
const { customers, loading: customersLoading, createCustomer, updateCustomer, deleteCustomer, refresh: refreshCustomers } = useCustomers()
const { employees, loading: employeesLoading, createEmployee, updateEmployee, deleteEmployee, refresh: refreshEmployees } = useEmployees()
const [localConfig, setLocalConfig] = useState(() => {
// Initialisiere mit Default-Werten falls config noch nicht geladen
if (config && Object.keys(config).length > 0) {
return config
}
return {
ticketTypes: [],
systems: [],
responseLevels: [],
serviceTypes: [],
priorities: []
}
})
const [saving, setSaving] = useState(false)
const [saveMessage, setSaveMessage] = useState('')
const [editingCustomer, setEditingCustomer] = useState(null)
const [customerForm, setCustomerForm] = useState({ code: '', name: '', location: '', email: '', phone: '' })
const [editingEmployee, setEditingEmployee] = useState(null)
const [employeeForm, setEmployeeForm] = useState({ userId: '', displayName: '', email: '', shortcode: '' })
const [adminSection, setAdminSection] = useState('config')
// Update localConfig when config loads
useEffect(() => {
if (config && Object.keys(config).length > 0) {
setLocalConfig(config)
}
}, [config])
if (!isAdmin) {
return (
Zugriff verweigert
Du hast keine Berechtigung, auf diese Seite zuzugreifen.
)
}
const handleAddItem = (field) => {
setLocalConfig(prev => ({
...prev,
[field]: [...prev[field], field === 'priorities' ? { value: prev[field].length, label: 'New' } : 'New Item']
}))
}
const handleRemoveItem = (field, index) => {
setLocalConfig(prev => ({
...prev,
[field]: prev[field].filter((_, i) => i !== index)
}))
}
const handleUpdateItem = (field, index, value) => {
setLocalConfig(prev => {
const newArray = [...prev[field]]
if (field === 'priorities') {
newArray[index] = { ...newArray[index], ...value }
} else {
newArray[index] = value
}
return { ...prev, [field]: newArray }
})
}
const handleSave = async () => {
setSaving(true)
setSaveMessage('')
const result = await updateConfig(localConfig)
if (result.success) {
setSaveMessage('Konfiguration erfolgreich gespeichert!')
setTimeout(() => setSaveMessage(''), 3000)
} else {
setSaveMessage('Fehler beim Speichern: ' + (result.error || 'Unbekannter Fehler'))
}
setSaving(false)
}
if (loading && !config) {
return (
)
}
return (
Admin Panel - Dropdown Konfiguration
{error && (
Fehler: {error}
)}
{saveMessage && (
{saveMessage}
)}
{[
{ id: 'config', label: 'Konfiguration' },
{ id: 'customers', label: 'Kunden' },
{ id: 'employees', label: 'Mitarbeiter' },
].map((section) => (
))}
{adminSection === 'config' && (
<>
{/* Ticket Types */}
Work Order Types
{localConfig.ticketTypes?.map((type, index) => (
handleUpdateItem('ticketTypes', index, e.target.value)}
style={{ flex: 1 }}
/>
))}
{/* Systems */}
Affected Systems
{localConfig.systems?.map((system, index) => (
handleUpdateItem('systems', index, e.target.value)}
style={{ flex: 1 }}
/>
))}
{/* Response Levels */}
Response Levels
{localConfig.responseLevels?.map((level, index) => (
handleUpdateItem('responseLevels', index, e.target.value)}
style={{ flex: 1 }}
/>
))}
{/* Service Types */}
Service Types
{localConfig.serviceTypes?.map((type, index) => (
handleUpdateItem('serviceTypes', index, e.target.value)}
style={{ flex: 1 }}
/>
))}
{/* Priorities */}
>
)}
{adminSection === 'customers' && (
Kunden
{customersLoading ? (
Lade Kunden...
) : (
<>
| Code |
Name |
Location |
Email |
Phone |
Aktionen |
{customers.map((customer) => (
{editingCustomer === customer.$id ? (
<>
|
setCustomerForm(prev => ({ ...prev, code: e.target.value }))}
style={{ width: '100px' }}
/>
|
setCustomerForm(prev => ({ ...prev, name: e.target.value }))}
/>
|
setCustomerForm(prev => ({ ...prev, location: e.target.value }))}
/>
|
setCustomerForm(prev => ({ ...prev, email: e.target.value }))}
/>
|
setCustomerForm(prev => ({ ...prev, phone: e.target.value }))}
/>
|
|
>
) : (
<>
{customer.code || '-'} |
{customer.name || '-'} |
{customer.location || '-'} |
{customer.email || '-'} |
{customer.phone || '-'} |
|
>
)}
))}
Neuen Kunden hinzufügen
>
)}
)}
{adminSection === 'employees' && (
Mitarbeiter & Kürzel
{employeesLoading ? (
Lade Mitarbeiter...
) : (
<>
{employees.length === 0 ? (
Noch keine Mitarbeiter in der Liste
Sobald sich Benutzer einloggen, werden sie automatisch hier angezeigt.
) : (
| Name |
Email |
Kürzel |
User ID |
Aktionen |
{employees.map((employee) => (
{editingEmployee === employee.$id ? (
<>
| {employee.displayName || '-'} |
{employee.email || '-'} |
setEmployeeForm(prev => ({ ...prev, shortcode: e.target.value.toUpperCase() }))}
placeholder="KNSO"
style={{ width: '100px' }}
maxLength={10}
autoFocus
/>
|
{employee.userId.substring(0, 12)}...
|
|
>
) : (
<>
{employee.displayName || '-'} |
{employee.email || '-'} |
{employee.shortcode || '(kein Kürzel)'}
|
{employee.userId.substring(0, 12)}...
|
|
>
)}
))}
)}
>
)}
)}
)
}