UNPKG

@premieroctet/next-admin

Version:

Next-Admin provides a customizable and turnkey admin dashboard for applications built with Next.js and powered by the Prisma ORM. It aims to simplify the development process by providing a turnkey admin system that can be easily integrated into your proje

95 lines (94 loc) 4.19 kB
import { jsx } from "react/jsx-runtime"; import { useMemo } from "react"; import Cell_mjs_default from "../components/Cell.mjs"; import TableHead_mjs_default from "../components/TableHead.mjs"; import { useConfig } from "../context/ConfigContext.mjs"; import { useI18n } from "../context/I18nContext.mjs"; import { useRouterInternal } from "./useRouterInternal.mjs"; const useDataColumns_useDataColumns = ({ sortable, data, resource, sortDirection, sortColumn, resourcesIdProperty, rawData })=>{ const { router, query } = useRouterInternal(); const { isAppDir, options: configOptions } = useConfig(); const { t } = useI18n(); const options = configOptions?.model?.[resource]; const allDisplayedFields = useMemo(()=>{ if (options?.list?.display) return options.list.display.map((disp)=>{ if ("string" == typeof disp) return { name: disp, virtual: false, label: void 0 }; return { name: disp.key, virtual: true, label: t(disp.label) }; }); if (data?.[0]) return Object.keys(data[0]).map((key)=>({ name: key, virtual: false, label: void 0 })); return []; }, []); return useMemo(()=>data && data?.length > 0 ? allDisplayedFields.map((property)=>{ const propertyName = property.name; const isVirtualField = property.virtual; const propertyAlias = t(`model.${resource}.fields.${propertyName}`, {}, options?.aliases?.[propertyName] || property.label || propertyName); const isColumnSortable = sortable && !isVirtualField; return { accessorKey: propertyName, header: ()=>/*#__PURE__*/ jsx(TableHead_mjs_default, { className: isColumnSortable ? "cursor-pointer" : "cursor-default", sortDirection: sortDirection, sortColumn: sortColumn, property: propertyName, propertyName: propertyAlias, onClick: ()=>{ if (isColumnSortable) router?.push({ pathname: location.pathname, query: { ...query, sortColumn: propertyName, sortDirection: "asc" === query.sortDirection ? "desc" : "asc" } }); } }, propertyName), cell: ({ row })=>{ const modelData = row.original; const cellData = modelData[propertyName]; const dataFormatter = isVirtualField ? options?.list?.display?.find((disp)=>"object" == typeof disp && disp.key === propertyName)?.formatter : options?.list?.fields?.[propertyName]?.formatter; return /*#__PURE__*/ jsx(Cell_mjs_default, { cell: cellData, formatter: isAppDir ? void 0 : dataFormatter ? (row, ctx)=>{ if (isVirtualField) return dataFormatter?.({ row, locale: ctx?.locale }); return dataFormatter?.(row[propertyName], ctx); } : void 0, copyable: options?.list?.copy?.includes(propertyName), getRawData: ()=>rawData?.[row.index] }); } }; }) : [], [ data, allDisplayedFields, t, resource, options?.aliases, options?.list?.display, options?.list?.fields, options?.list?.copy, sortable, sortDirection, sortColumn, router, query, isAppDir, rawData ]); }; const useDataColumns = useDataColumns_useDataColumns; export { useDataColumns as default };