- components/dashboard/products-empty-state.tsx: nieuwe component met rounded-xl container, NL-tekst, en NewProductButton (verborgen in demo). - ProductsTable: vroege return ProductsEmptyState bij products.length===0. - __tests__/components/dashboard/products-empty-state.test.tsx: 4 tests (tekst, NewProductButton zichtbaar/verborgen op demo, container-styling). - __tests__/components/dashboard/product-row-actions.test.tsx: 7 tests (Activeer/Actief-badge zichtbaarheid per state, Docs/Backlog aria-labels, Meer-acties-knop disabled in demo). Mocks: next/navigation, sonner, actions/products + actions/active-product. - 1035 tests groen totaal. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
35 lines
1.1 KiB
TypeScript
35 lines
1.1 KiB
TypeScript
// Empty-state voor de Dashboard products-tabel: wordt getoond wanneer de
|
|
// gebruiker (en alle leden van zijn ProductMember-set) nog géén producten
|
|
// hebben. Hergebruikt NewProductButton zodat de CTA dezelfde dialog opent
|
|
// als de header-knop.
|
|
|
|
import { NewProductButton } from '@/components/dashboard/new-product-button'
|
|
import { debugProps } from '@/lib/debug'
|
|
|
|
interface Props {
|
|
isDemo: boolean
|
|
}
|
|
|
|
export function ProductsEmptyState({ isDemo }: Props) {
|
|
return (
|
|
<div
|
|
className="rounded-xl border border-border bg-surface-container-low p-12 text-center space-y-4"
|
|
{...debugProps(
|
|
'products-empty-state',
|
|
'ProductsEmptyState',
|
|
'components/dashboard/products-empty-state.tsx',
|
|
)}
|
|
>
|
|
<div>
|
|
<p className="text-base font-medium">
|
|
Nog geen producten aangemaakt
|
|
</p>
|
|
<p className="text-sm text-muted-foreground mt-1">
|
|
Een product groepeert je backlog, sprints en docs. Maak er eentje aan
|
|
om te beginnen.
|
|
</p>
|
|
</div>
|
|
{!isDemo && <NewProductButton />}
|
|
</div>
|
|
)
|
|
}
|