2026-01-30 22:42:00 +01:00
|
|
|
import { Select, Space, Typography, Tag, Skeleton } from 'antd';
|
2026-01-18 02:52:30 +01:00
|
|
|
import { ShopOutlined } from '@ant-design/icons';
|
|
|
|
|
import { useCompanyStore } from '@/stores/companyStore';
|
|
|
|
|
import { formatCVR } from '@/lib/formatters';
|
|
|
|
|
import type { Company } from '@/types/accounting';
|
|
|
|
|
|
|
|
|
|
const { Text } = Typography;
|
|
|
|
|
|
2026-01-30 22:24:36 +01:00
|
|
|
interface CompanySwitcherProps {
|
|
|
|
|
compact?: boolean;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default function CompanySwitcher({ compact = false }: CompanySwitcherProps) {
|
2026-01-30 22:47:05 +01:00
|
|
|
const { activeCompany, setActiveCompany } = useCompanyStore();
|
|
|
|
|
const companies = useCompanyStore((state) => state.companies);
|
2026-01-18 02:52:30 +01:00
|
|
|
|
|
|
|
|
const handleCompanyChange = (companyId: string) => {
|
|
|
|
|
const company = companies.find((c) => c.id === companyId);
|
|
|
|
|
if (company) {
|
|
|
|
|
setActiveCompany(company);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2026-01-30 22:42:00 +01:00
|
|
|
if (companies.length === 0) {
|
2026-01-30 22:47:05 +01:00
|
|
|
return <Skeleton.Input style={{ width: 200 }} active />;
|
2026-01-30 22:42:00 +01:00
|
|
|
}
|
|
|
|
|
|
2026-01-18 02:52:30 +01:00
|
|
|
return (
|
|
|
|
|
<Space>
|
|
|
|
|
<ShopOutlined style={{ fontSize: 18, color: '#1677ff' }} />
|
|
|
|
|
<Select
|
|
|
|
|
value={activeCompany?.id}
|
|
|
|
|
onChange={handleCompanyChange}
|
2026-01-30 22:24:36 +01:00
|
|
|
style={{ minWidth: compact ? 150 : 280 }}
|
2026-01-18 02:52:30 +01:00
|
|
|
optionLabelProp="label"
|
|
|
|
|
popupMatchSelectWidth={false}
|
|
|
|
|
options={companies.map((company) => ({
|
|
|
|
|
value: company.id,
|
|
|
|
|
label: company.name,
|
|
|
|
|
company,
|
|
|
|
|
}))}
|
|
|
|
|
optionRender={(option) => {
|
|
|
|
|
const company = option.data.company as Company;
|
|
|
|
|
return (
|
|
|
|
|
<Space direction="vertical" size={0} style={{ padding: '4px 0' }}>
|
|
|
|
|
<Space>
|
|
|
|
|
<Text strong>{company.name}</Text>
|
|
|
|
|
{company.id === activeCompany?.id && (
|
|
|
|
|
<Tag color="blue" style={{ marginLeft: 8 }}>
|
|
|
|
|
Aktiv
|
|
|
|
|
</Tag>
|
|
|
|
|
)}
|
|
|
|
|
</Space>
|
|
|
|
|
<Text type="secondary" style={{ fontSize: 12 }}>
|
|
|
|
|
CVR: {formatCVR(company.cvr)}
|
|
|
|
|
</Text>
|
|
|
|
|
</Space>
|
|
|
|
|
);
|
|
|
|
|
}}
|
|
|
|
|
/>
|
|
|
|
|
</Space>
|
|
|
|
|
);
|
|
|
|
|
}
|