import type { Route } from './+types/route' import { Grid2X2Icon, ListIcon } from 'lucide-react' import { Suspense, useMemo } from 'react' import { Await, useSearchParams } from 'react-router' import { SearchForm } from '@repo/ui/components/search-form' import { Skeleton } from '@repo/ui/components/skeleton' import { Kbd } from '@repo/ui/components/ui/kbd' import { cloudflareContext } from '@repo/auth/context' import { createSearch } from '@repo/util/meili' import { request as req } from '@repo/util/request' import { ToggleGroup, ToggleGroupItem } from '@repo/ui/components/ui/toggle-group' import type { CustomPricing, Course } from './data' import { List } from './list' import { Grid } from './grid' export function meta({}: Route.MetaArgs) { return [{ title: 'Catálogo de cursos' }] } export async function loader({ context, request, params }: Route.LoaderArgs) { const cloudflare = context.get(cloudflareContext) const courses = createSearch({ index: 'saladeaula_courses', sort: ['created_at:desc'], filter: 'unlisted NOT EXISTS', hitsPerPage: 100, env: cloudflare.env }) const customPricing = req({ url: `/orgs/${params.orgid}/custom-pricing`, context, request }).then((r) => r.json() as Promise<{ items: CustomPricing[] }>) return { data: Promise.all([courses, customPricing]) } } export default function Route({ loaderData: { data } }: Route.ComponentProps) { const [searchParams, setSearchParams] = useSearchParams() const search = searchParams.get('s') as string const view = searchParams.get('view') || 'grid' return ( }>

Catálogo de cursos

Explore o catálogo de cursos disponíveis para sua empresa.

{([{ hits }, { items }]) => { const hits_ = hits.filter( ({ metadata__unit_price = 0 }) => metadata__unit_price > 0 ) as Course[] return ( <>
Digite / para pesquisar } defaultValue={search} onChange={(search) => { setSearchParams((searchParams) => { searchParams.set('s', String(search)) return searchParams }) }} />
{ setSearchParams((searchParams) => { searchParams.set('view', value) return searchParams }) }} >
{view === 'list' ? ( ) : ( )} ) }}
) }