import { useState, type ComponentProps, useMemo } from "react" import { Stack, SegmentGroup, Card, SkeletonText, Box, Flex, Field, Container } from '@chakra-ui/react'; import type {ComponentsApiJson} from "../../../core/Api"; import { MSComponentSummary, MSComponentSummaryFetchable } from "./MSComponentSummary"; import { useQuery } from '@tanstack/react-query'; import { ErrorAlert } from "../ErrorAlert"; import { tanQueries } from "../../queries"; import { MSErrorBoundary } from "../ErrorBoundary"; import { useLocalStorage } from 'usehooks-ts' import { TextMuted } from "../TextMuted"; export interface ComponentListProps { components: ComponentsApiJson[] fetchable?: boolean } const gridColumns = (columns: number): ComponentProps['gridTemplateColumns'] => ({ mdDown: "repeat(1, minmax(295px, 1fr))", xlDown: `repeat(${columns > 1 ? 2 : 1}, minmax(295px, 1fr))`, //xlTo2xl: "repeat(3, minmax(295px, 1fr))", base: `repeat(${columns}, minmax(295px, 1fr))` }) export const MSComponentList = (props: ComponentListProps) => { const [value, setValue] = useLocalStorage('pref-component-columns', 3) const [shownType, setShownType] = useState("All"); const gc = useMemo(() => gridColumns(value),[value]); return ( setShownType(val.value)}> Grid Max Width setValue(Number.parseInt(val.value))}> 1 2 3 {props.components.filter(x => { if (shownType === 'All') { return true; } if (shownType === 'Sources') { return x.mode === 'source'; } return x.mode === 'client'; }).map(x => props.fetchable ? : )} ) } export const MSComponentListFetchable = () => { const { isPending, isError, data, error } = useQuery({ ...tanQueries.components.list() }); if(isPending) { return ( ) } if(isError) { return } return }