// FiscalYearSelector - Dropdown for selecting active fiscal year (regnskabsar) import { useState, useEffect } from 'react'; import { Select, Space, Typography, Tag, Divider, Button, Skeleton } from 'antd'; import { CalendarOutlined, PlusOutlined, SettingOutlined, CheckCircleOutlined, MinusCircleOutlined, LockOutlined, } from '@ant-design/icons'; import { usePeriodStore } from '@/stores/periodStore'; import { useCompanyStore } from '@/stores/companyStore'; import { useFiscalYears } from '@/api/queries/fiscalYearQueries'; import type { FiscalYear } from '@/types/periods'; import { formatDateShort } from '@/lib/formatters'; import CreateFiscalYearModal from '@/components/modals/CreateFiscalYearModal'; const { Text } = Typography; /** * Status badge configuration */ const STATUS_CONFIG: Record = { open: { color: 'success', icon: , label: 'Aben', }, closed: { color: 'warning', icon: , label: 'Lukket', }, locked: { color: 'error', icon: , label: 'Last', }, }; interface FiscalYearSelectorProps { onCreateNew?: () => void; onManage?: () => void; } export default function FiscalYearSelector({ onCreateNew, onManage }: FiscalYearSelectorProps) { const { activeCompany } = useCompanyStore(); const { fiscalYears, currentFiscalYear, setFiscalYears, setCurrentFiscalYear, } = usePeriodStore(); const { data: fiscalYearsData = [], isLoading } = useFiscalYears(activeCompany?.id); const [createModalOpen, setCreateModalOpen] = useState(false); // Sync fiscal years with store when data changes useEffect(() => { if (fiscalYearsData.length > 0) { setFiscalYears(fiscalYearsData); } }, [fiscalYearsData, setFiscalYears]); // Set default fiscal year if none selected useEffect(() => { if (fiscalYears.length > 0 && !currentFiscalYear) { // Default to most recent open year, or first year const openYear = fiscalYears.find(y => y.status === 'open'); setCurrentFiscalYear(openYear || fiscalYears[0]); } }, [fiscalYears, currentFiscalYear, setCurrentFiscalYear]); const handleFiscalYearChange = (yearId: string) => { const year = fiscalYears.find((y) => y.id === yearId); if (year) { setCurrentFiscalYear(year); } }; const handleCreateNew = () => { if (onCreateNew) { onCreateNew(); } else { setCreateModalOpen(true); } }; const handleCloseCreateModal = () => { setCreateModalOpen(false); }; const handleCreateSuccess = (newYear: FiscalYear) => { setCurrentFiscalYear(newYear); setCreateModalOpen(false); }; const handleManage = () => { if (onManage) { onManage(); } else { // Navigate to settings page console.log('Navigate to fiscal year settings'); } }; if (isLoading) { return ; } // Sort fiscal years by start date descending (newest first) const sortedYears = [...fiscalYears].sort( (a, b) => new Date(b.startDate).getTime() - new Date(a.startDate).getTime() ); return (