import { X } from 'lucide-react' import Link from 'next/link' import React, { useState } from 'react' import { extensions } from 'shared-data' import { Badge, Input } from 'ui' import { GlassPanel } from 'ui-patterns/GlassPanel' type Extension = { name: string comment: string tags: string[] link: string } type LinkTarget = React.ComponentProps<'a'>['target'] function getLinkTarget(link: string): LinkTarget { // Link is relative, open in the same tab if (link.startsWith('/')) { return '_self' } // Link is external, open in a new tab return '_blank' } function getUniqueTags(json: Extension[]): string[] { const tags: string[] = [] for (const item of json) { if (item.tags) { tags.push(...item.tags) } } return [...new Set(tags)] } export default function Extensions() { const [searchTerm, setSearchTerm] = useState('') const [filters, setFilters] = useState([]) const tags = getUniqueTags(extensions) function handleChecked(tag: string) { if (filters.includes(tag)) { setFilters(filters.filter((x) => x !== tag)) } else { setFilters([...filters, tag]) } } return ( <>
setSearchTerm(e.target.value)} />

Filter

    {tags.sort().map((tag) => (
  • ))}

{extensions .filter((x) => x.name.indexOf(searchTerm) >= 0) .filter((x) => filters.length === 0 ? x : x.tags.some((item) => filters.includes(item)) ) .map((extension) => (

{extension.comment.charAt(0).toUpperCase() + extension.comment.slice(1)}

{extension.deprecated && ( Deprecated in {extension.deprecated.join(', ')} )}
))}
) }