"use client" import React from "react" import { DashboardHeader } from "@/base/components/layout/dashboard" import DashboardPage from "@/base/components/layout/dashboard/dashboard-page" import FormDialog from "@/shared/components/form-dialog" import { Card, CardContent } from "@/shared/components/ui/card" import { DataTable, type ActionsColumnOptions } from "@/shared/data-view/table-view" import { useResourcePage, type UseResourcePageOptions, type ResourceItem, type ResourcePageClient } from "./use-resource-page" import type { ColumnDef } from "@tanstack/react-table" export type ResourceFormProps = { resourceId: string | null initialData: ResourceItem | null onSuccess: () => void } export type ResourcePageColumnHelpers = { actionsColumn: (options?: Partial>>) => ColumnDef, unknown> openEdit: (row: ResourceItem) => void deleteItem: (id: string) => Promise } export type ResourcePageProps = UseResourcePageOptions & { title: string columns: ColumnDef>[] | ((helpers: ResourcePageColumnHelpers) => ColumnDef>[]) renderForm: (props: ResourceFormProps) => React.ReactNode pageTitle?: string paramKey?: string } export function ResourcePage({ title, columns: columnsProp, renderForm, pageTitle, routeKey, getClient, queryOptions, paramKey, }: ResourcePageProps) { type TItem = ResourceItem const page = useResourcePage({ routeKey, getClient, queryOptions, paramKey }) const columns = typeof columnsProp === "function" ? columnsProp({ actionsColumn: page.actionsColumn, openEdit: page.openEdit, deleteItem: page.deleteItem, }) : columnsProp type ListResponse = { data?: TItem[] } const responseData = page.data as ListResponse | undefined return ( {(resourceId) => renderForm({ resourceId, initialData: page.selectedItem, onSuccess: () => page.invalidateQuery(), }) } } /> } title={pageTitle} > ) }