import React, { useEffect, useState } from 'react' import { ArticleGuide, useProductGuidesContext } from 'components/context/ProductGuidesContext' import { useTranslation } from 'components/hooks/useTranslation' import { ArticleCard } from './ArticleCard' import { DropdownMenu } from '@primer/components' import { ItemInput } from '@primer/components/lib/ActionList/List' const PAGE_SIZE = 9 export const ArticleCards = () => { const { t } = useTranslation('product_guides') const guideTypes: Record = t('guide_types') const { allTopics, includeGuides } = useProductGuidesContext() const [numVisible, setNumVisible] = useState(PAGE_SIZE) const [typeFilter, setTypeFilter] = useState() const [topicFilter, setTopicFilter] = useState() const [filteredResults, setFilteredResults] = useState>([]) useEffect(() => { setNumVisible(PAGE_SIZE) setFilteredResults( (includeGuides || []).filter((card) => { const matchesType = card.type === typeFilter?.key const matchesTopic = card.topics.some((key) => key === topicFilter?.key) return (typeFilter?.key ? matchesType : true) && (topicFilter?.key ? matchesTopic : true) }) ) }, [typeFilter, topicFilter]) const isUserFiltering = typeFilter !== undefined || topicFilter !== undefined const guides = isUserFiltering ? filteredResults : includeGuides || [] const types = Object.entries(guideTypes).map(([key, val]) => { return { text: val, key: key } }) as ItemInput[] types.unshift({ text: t('filters.all'), key: undefined }) const topics = allTopics?.map((topic) => { return { text: topic, key: topic } }) as ItemInput[] topics.unshift({ text: t('filters.all'), key: undefined }) return (
{guides.length === 0 ? t('guides_found.none') : guides.length === 1 ? t('guides_found.one') : t('guides_found.multiple').replace('{n}', guides.length)}
{guides.slice(0, numVisible).map((card) => { return })}
{guides.length > numVisible && ( )}
) }