'use client' import { useState, useEffect } from 'react' import { createClient } from '@/lib/supabase/client' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { ChevronDown, ChevronRight, Search } from 'lucide-react' import type { BASAccount } from '@/types' const CLASS_LABELS: Record = { 1: 'Tillgångar', 2: 'Eget kapital och skulder', 3: 'Intäkter', 4: 'Varor och material', 5: 'Övriga externa kostnader', 6: 'Övriga externa kostnader', 7: 'Personal och avskrivningar', 8: 'Finansiella poster', } export default function ChartOfAccounts() { const [accounts, setAccounts] = useState([]) const [loading, setLoading] = useState(true) const [expandedClasses, setExpandedClasses] = useState>(new Set()) const [searchQuery, setSearchQuery] = useState('') useEffect(() => { fetchAccounts() }, []) async function fetchAccounts() { const res = await fetch('/api/bookkeeping/accounts') const { data } = await res.json() setAccounts(data || []) setLoading(false) } const toggleClass = (cls: number) => { const next = new Set(expandedClasses) if (next.has(cls)) { next.delete(cls) } else { next.add(cls) } setExpandedClasses(next) } const filteredAccounts = accounts.filter((a) => { if (!searchQuery) return true const q = searchQuery.toLowerCase() return ( a.account_number.includes(q) || a.account_name.toLowerCase().includes(q) ) }) const groupedByClass = filteredAccounts.reduce( (acc, account) => { const cls = account.account_class if (!acc[cls]) acc[cls] = [] acc[cls].push(account) return acc }, {} as Record ) if (loading) { return ( Laddar kontoplan... ) } return (
setSearchQuery(e.target.value)} className="pl-9" />
{Object.entries(groupedByClass) .sort(([a], [b]) => Number(a) - Number(b)) .map(([cls, classAccounts]) => { const classNum = Number(cls) const isExpanded = expandedClasses.has(classNum) || !!searchQuery return ( {isExpanded && ( {classAccounts.map((account) => ( ))}
Konto Namn Typ Normal
{account.account_number} {account.account_name} {account.account_type === 'asset' ? 'Tillgång' : account.account_type === 'liability' ? 'Skuld' : account.account_type === 'equity' ? 'EK' : account.account_type === 'revenue' ? 'Intäkt' : 'Kostnad'} {account.normal_balance === 'debit' ? 'Debet' : 'Kredit'}
)}
) })}
) }