import Link from 'next/link'; import { Plus } from 'lucide-react'; import { getTranslations } from 'next-intl/server'; import { createModuleBuilderApi } from '@kit/module-builder/api'; import { getSupabaseServerClient } from '@kit/supabase/server-client'; import { Button } from '@kit/ui/button'; import { AccountNotFound } from '~/components/account-not-found'; import { CmsPageShell } from '~/components/cms-page-shell'; import { decodeFilters } from './_lib/filter-params'; import { ModuleRecordsTable } from './module-records-table'; import { ModuleSearchBar } from './module-search-bar'; interface ModuleDetailPageProps { params: Promise<{ account: string; moduleId: string }>; searchParams: Promise>; } export default async function ModuleDetailPage({ params, searchParams, }: ModuleDetailPageProps) { const { account, moduleId } = await params; const search = await searchParams; const client = getSupabaseServerClient(); const t = await getTranslations('cms.modules'); const api = createModuleBuilderApi(client); const moduleWithFields = await api.modules.getModuleWithFields(moduleId); if (!moduleWithFields) { return ; } const page = Number(search.page) || 1; const pageSize = Number(search.pageSize) || moduleWithFields.default_page_size || 25; const sortField = (search.sort as string) ?? moduleWithFields.default_sort_field ?? undefined; const sortDirection = (search.dir as 'asc' | 'desc') ?? (moduleWithFields.default_sort_direction as 'asc' | 'desc') ?? 'asc'; const filters = decodeFilters(search.f as string | undefined); const result = await api.query.query({ moduleId, page, pageSize, sortField, sortDirection, search: (search.q as string) ?? undefined, filters: filters as Array<{ field: string; operator: | 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'like' | 'is_null' | 'not_null'; value?: string; }>, }); const allFields = moduleWithFields.fields; const records = (result.data ?? []).map((row: Record) => ({ id: String(row.id ?? ''), data: (row.data ?? {}) as Record, status: String(row.status ?? 'active'), created_at: String(row.created_at ?? ''), updated_at: String(row.updated_at ?? ''), })); return (
{moduleWithFields.description && (

{moduleWithFields.description}

)}
); }