import type { Route } from './+types'
import { CalendarIcon, PlusCircleIcon, PlusIcon } from 'lucide-react'
import { MeiliSearchFilterBuilder } from 'meilisearch-helper'
import { Suspense } from 'react'
import { Await, Link, useSearchParams } from 'react-router'
import { DataTable, DataTableViewOptions } from '@/components/data-table'
import { RangeCalendarFilter } from '@/components/range-calendar-filter'
import { createSearch } from '@/lib/meili'
import { FacetedFilter } from '@repo/ui/components/faceted-filter'
import { SearchForm } from '@repo/ui/components/search-form'
import { Skeleton } from '@repo/ui/components/skeleton'
import { Button } from '@repo/ui/components/ui/button'
import { Kbd } from '@repo/ui/components/ui/kbd'
import { columns, type Enrollment } from './columns'
import { sortings, statuses } from './data'
export function meta({}: Route.MetaArgs) {
return [{ title: 'Matrículas' }]
}
export async function loader({ params, context, request }: Route.LoaderArgs) {
const { searchParams } = new URL(request.url)
const { orgid } = params
const query = searchParams.get('q') || ''
const from = searchParams.get('from')
const to = searchParams.get('to')
const sort = searchParams.get('sort') || 'created_at:desc'
const status = searchParams.get('status')
const page = Number(searchParams.get('p')) + 1
const hitsPerPage = Number(searchParams.get('perPage')) || 25
let builder = new MeiliSearchFilterBuilder().where('org_id', '=', orgid)
if (status) {
builder = builder.where('status', 'in', status.split(','))
}
if (from && to) {
const [field, from_] = from.split(':')
builder = builder.where(field, 'between', [from_, to])
}
return {
data: createSearch({
index: 'betaeducacao-prod-enrollments',
filter: builder.build(),
sort: [sort],
query,
page,
hitsPerPage,
env: context.cloudflare.env
})
}
}
const formatted = new Intl.DateTimeFormat('en-CA', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
})
export default function Route({ loaderData: { data } }) {
const [searchParams, setSearchParams] = useSearchParams()
const status = searchParams.get('status')
const rangeParams = useRangeParams()
return (
Matricule colaboradores de forma rápida e acompanhe seu progresso.