feat(ideas): voeg activeProductId-prop toe aan IdeaList
IdeaListProps uitgebreid met activeProductId: string | null. Create-form initialiseert en reset naar het actieve product na aanmaken. Tests en page.tsx bijgewerkt (page.tsx krijgt echte waarde in volgende taak). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
parent
3f40bc2f0f
commit
2150038066
3 changed files with 11 additions and 9 deletions
|
|
@ -111,7 +111,7 @@ beforeEach(() => {
|
|||
|
||||
describe('IdeaList — filterpopover', () => {
|
||||
it('toont de "Filters"-knop in de toolbar (geen inline chip-rij)', () => {
|
||||
render(<IdeaList ideas={IDEAS} products={[]} isDemo={false} />)
|
||||
render(<IdeaList ideas={IDEAS} products={[]} isDemo={false} activeProductId={null} />)
|
||||
|
||||
// Filters-knop aanwezig
|
||||
expect(screen.getByText('Filters')).toBeInTheDocument()
|
||||
|
|
@ -122,7 +122,7 @@ describe('IdeaList — filterpopover', () => {
|
|||
})
|
||||
|
||||
it('klik op "Filters" opent de popover en toont 11 statusopties', () => {
|
||||
render(<IdeaList ideas={IDEAS} products={[]} isDemo={false} />)
|
||||
render(<IdeaList ideas={IDEAS} products={[]} isDemo={false} activeProductId={null} />)
|
||||
|
||||
// Popover nog niet open: content niet zichtbaar
|
||||
expect(screen.queryByTestId('popover-content')).not.toBeInTheDocument()
|
||||
|
|
@ -145,7 +145,7 @@ describe('IdeaList — filterpopover', () => {
|
|||
})
|
||||
|
||||
it('klik op een statuschip schrijft de status naar de store', () => {
|
||||
render(<IdeaList ideas={IDEAS} products={[]} isDemo={false} />)
|
||||
render(<IdeaList ideas={IDEAS} products={[]} isDemo={false} activeProductId={null} />)
|
||||
|
||||
fireEvent.click(screen.getByText('Filters'))
|
||||
fireEvent.click(screen.getByRole('button', { name: 'Concept' }))
|
||||
|
|
@ -160,7 +160,7 @@ describe('IdeaList — filterpopover', () => {
|
|||
.getState()
|
||||
.hydrate({ views: { ideasList: { filterStatuses: ['draft'] } } }, false)
|
||||
|
||||
render(<IdeaList ideas={IDEAS} products={[]} isDemo={false} />)
|
||||
render(<IdeaList ideas={IDEAS} products={[]} isDemo={false} activeProductId={null} />)
|
||||
|
||||
// Trigger toont het actieve filteraantal
|
||||
expect(screen.getByText('Filters (1)')).toBeInTheDocument()
|
||||
|
|
@ -172,7 +172,7 @@ describe('IdeaList — filterpopover', () => {
|
|||
})
|
||||
|
||||
it('"Wis filters" is disabled wanneer geen filter actief is', () => {
|
||||
render(<IdeaList ideas={IDEAS} products={[]} isDemo={false} />)
|
||||
render(<IdeaList ideas={IDEAS} products={[]} isDemo={false} activeProductId={null} />)
|
||||
|
||||
fireEvent.click(screen.getByText('Filters'))
|
||||
|
||||
|
|
@ -185,7 +185,7 @@ describe('IdeaList — filterpopover', () => {
|
|||
.getState()
|
||||
.hydrate({ views: { ideasList: { filterStatuses: ['draft'] } } }, false)
|
||||
|
||||
render(<IdeaList ideas={IDEAS} products={[]} isDemo={false} />)
|
||||
render(<IdeaList ideas={IDEAS} products={[]} isDemo={false} activeProductId={null} />)
|
||||
|
||||
fireEvent.click(screen.getByText('Filters (1)'))
|
||||
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ export default async function IdeasPage() {
|
|||
ideas={ideas.map((i) => ideaToDto(i))}
|
||||
products={products}
|
||||
isDemo={session.isDemo ?? false}
|
||||
activeProductId={null}
|
||||
/>
|
||||
</div>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -65,6 +65,7 @@ interface IdeaListProps {
|
|||
ideas: IdeaDto[]
|
||||
products: ProductOption[]
|
||||
isDemo: boolean
|
||||
activeProductId: string | null
|
||||
}
|
||||
|
||||
const STATUS_FILTERS: { value: IdeaStatusApi; label: string }[] = [
|
||||
|
|
@ -119,7 +120,7 @@ function SortHeader({
|
|||
)
|
||||
}
|
||||
|
||||
export function IdeaList({ ideas, products, isDemo }: IdeaListProps) {
|
||||
export function IdeaList({ ideas, products, isDemo, activeProductId }: IdeaListProps) {
|
||||
const router = useRouter()
|
||||
const [isPending, startTransition] = useTransition()
|
||||
|
||||
|
|
@ -140,7 +141,7 @@ export function IdeaList({ ideas, products, isDemo }: IdeaListProps) {
|
|||
const [showCreate, setShowCreate] = useState(false)
|
||||
const [newTitle, setNewTitle] = useState('')
|
||||
const [newDescription, setNewDescription] = useState('')
|
||||
const [newProductId, setNewProductId] = useState<string>('')
|
||||
const [newProductId, setNewProductId] = useState<string>(activeProductId ?? '')
|
||||
|
||||
// Quick-idea form state
|
||||
const [showQuick, setShowQuick] = useState(false)
|
||||
|
|
@ -235,7 +236,7 @@ export function IdeaList({ ideas, products, isDemo }: IdeaListProps) {
|
|||
toast.success(`Idee aangemaakt (${r.data?.code})`)
|
||||
setNewTitle('')
|
||||
setNewDescription('')
|
||||
setNewProductId('')
|
||||
setNewProductId(activeProductId ?? '')
|
||||
setShowCreate(false)
|
||||
router.refresh()
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue