add filter to test_mode

This commit is contained in:
2026-01-27 10:26:05 -03:00
parent a9d5ba1352
commit 5ca514095a
5 changed files with 233 additions and 60 deletions

View File

@@ -8,7 +8,7 @@ import {
PlusIcon,
Trash2Icon
} from 'lucide-react'
import { Fragment } from 'react'
import { Fragment, useMemo } from 'react'
import { Controller, useFieldArray, useForm } from 'react-hook-form'
import { Link } from 'react-router'
@@ -41,6 +41,7 @@ import { CoursePicker } from '../_.$orgid.enrollments.add/course-picker'
import {
formSchema,
MAX_ITEMS,
type Course,
type User
} from '../_.$orgid.enrollments.add/data'
import {
@@ -55,6 +56,12 @@ export function meta({}: Route.MetaArgs) {
return [{ title: 'Adicionar matrícula' }]
}
type Seat = {
id: string
pk: string
course: Course
}
export async function loader({ request, params, context }: Route.LoaderArgs) {
const seats = await req({
url: `/orgs/${params.orgid}/seats`,
@@ -62,19 +69,12 @@ export async function loader({ request, params, context }: Route.LoaderArgs) {
context
})
.then((r) => r.json() as any)
.then(({ items }) => items)
.then(({ items }) => items as Seat[])
const courses = new Promise((resolve, reject) => {
resolve({
hits: seats.map(({ course }) => ({ metadata__unit_price: 1, ...course }))
})
})
return { seats, courses }
return { seats }
}
export default function Route({
loaderData: { courses }
}: Route.ComponentProps) {
export default function Route({ loaderData: { seats } }: Route.ComponentProps) {
const { orgid } = useParams()
const form = useForm({
resolver: zodResolver(formSchema),
@@ -86,6 +86,26 @@ export default function Route({
name: 'enrollments'
})
const courses = useMemo(
() =>
Promise.resolve({
hits: Array.from(
new Map(
seats.map(({ course }) => [
course.id,
{
...course,
metadata__unit_price: 1
}
]) ?? []
).values()
)
}),
[seats]
)
console.log(seats)
const onSearch = async (search: string) => {
const params = new URLSearchParams({ q: search })
const r = await fetch(`/${orgid}/users.json?${params.toString()}`)

View File

@@ -1,19 +1,19 @@
import type { Route } from './+types/route'
import { PlusIcon } from 'lucide-react'
import { MeiliSearchFilterBuilder } from 'meilisearch-helper'
import { Suspense, useState } from 'react'
import { Await, Link, useParams, useSearchParams } from 'react-router'
import { MeiliSearchFilterBuilder } from 'meilisearch-helper'
import { cloudflareContext } from '@repo/auth/context'
import { DataTable } from '@repo/ui/components/data-table'
import { ExportMenu } from '@repo/ui/components/export-menu'
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 { ExportMenu } from '@repo/ui/components/export-menu'
import { createSearch } from '@repo/util/meili'
import { headers } from '@repo/ui/routes/users/data'
import { createSearch } from '@repo/util/meili'
import { columns, type User } from './columns'
@@ -51,10 +51,10 @@ export async function loader({ params, context, request }: Route.LoaderArgs) {
env: cloudflare.env
})
return { data: users }
return { users }
}
export default function Route({ loaderData: { data } }: Route.ComponentProps) {
export default function Route({ loaderData: { users } }: Route.ComponentProps) {
const { orgid } = useParams()
const [searchParams, setSearchParams] = useSearchParams()
const [selectedRows, setSelectedRows] = useState<User[]>([])
@@ -70,7 +70,7 @@ export default function Route({ loaderData: { data } }: Route.ComponentProps) {
</p>
</div>
<Await resolve={data}>
<Await resolve={users}>
{({ hits, page = 1, hitsPerPage, totalHits }) => {
return (
<DataTable