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 = false',
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 (
Explore o catálogo de cursos disponíveis para sua empresa.