import ReactDOM from 'react-dom' import { useState, useEffect } from 'react' import DOM from 'react-dom' import { UserPlus, Unlink, Check, Loader2, Clock, X } from 'lucide-react' import { useVacayStore } from '../../store/vacayStore' import { useAuthStore } from '../../store/authStore' import { useTranslation } from '../../i18n' import { getApiErrorMessage } from '../../types' import { useToast } from '../shared/Toast' import CustomSelect from '../shared/CustomSelect' import apiClient from '../../api/client' const PRESET_COLORS = [ '#6366f1', '#ec4899', '#14b8a6', '#8b5cf6', '#ef4444', '#3b82f6', '#22c55e', '#06b6d4', '#f43f5e', '#a855f7', '#10b981', '#0ea5e9', '#64748b', '#be185d', '#0d9488', ] export default function VacayPersons() { const { t } = useTranslation() const toast = useToast() const { users, pendingInvites, invite, cancelInvite, updateColor, selectedUserId, setSelectedUserId, isFused } = useVacayStore() const { user: currentUser } = useAuthStore() // Default selectedUserId to current user useEffect(() => { if (!selectedUserId && currentUser) setSelectedUserId(currentUser.id) }, [currentUser, selectedUserId]) const [showInvite, setShowInvite] = useState(false) const [showColorPicker, setShowColorPicker] = useState(false) const [colorEditUserId, setColorEditUserId] = useState(null) const [availableUsers, setAvailableUsers] = useState([]) const [selectedInviteUser, setSelectedInviteUser] = useState(null) const [inviting, setInviting] = useState(false) const loadAvailable = async () => { try { const data = await apiClient.get('/addons/vacay/available-users').then(r => r.data) setAvailableUsers(data.users) } catch { /* */ } } const handleInvite = async () => { if (!selectedInviteUser) return setInviting(true) try { await invite(selectedInviteUser) toast.success(t('vacay.inviteSent')) setShowInvite(false) setSelectedInviteUser(null) } catch (err: unknown) { toast.error(getApiErrorMessage(err, t('vacay.inviteError'))) } finally { setInviting(false) } } const handleColorChange = async (color) => { await updateColor(color, colorEditUserId) setShowColorPicker(false) setColorEditUserId(null) } const editingUserColor = users.find(u => u.id === colorEditUserId)?.color || '#6366f1' return (
{t('vacay.inviteHint')}
{availableUsers.length === 0 ? ({t('vacay.noUsersAvailable')}
) : (