mantine-entity
Version:
A library combining Mantine, TanStack Query, and Mantine React Table for efficient entity management
45 lines (44 loc) • 3.87 kB
JavaScript
"use client";
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
import { Container, Flex, Group, Text } from "@mantine/core";
import { Suspense, useMemo } from "react";
import { BackButton, CreateButton } from "./action-button";
import RenderTable from "./render-table";
import RenderCreateForm from "./render-create-form";
import RenderUpdateForm from "./render-update-form";
import RenderDetailView from "./render-detail-view";
import { capitalizeTxt } from "../../utils/string";
import NotFoundLayout from "../../components/not-found-layout";
const renderComponent = ({ params, table, form, queryBuilder, rootConfig, q, requestParams, navigator, searchParams, LinkComponent, currentPermissions, appMainPath }) => {
const { method, feat } = params;
switch (method) {
case "create":
return (_jsx(RenderCreateForm, { feat: feat, fields: form?.fields ?? [], defaultValues: form?.defaultValues, queryBuilder: queryBuilder, rootConfig: rootConfig, mapDefaultValue: form?.mapDefaultValue, disableOn: form?.disableOn, hiddenOn: form?.hiddenOn, requestParams: requestParams, navigator: navigator, searchParams: searchParams, appMainPath: appMainPath }));
case "update":
return (_jsx(RenderUpdateForm, { feat: feat, fields: form?.fields ?? [], mapDefaultValue: form?.mapDefaultValue, defaultValues: form?.defaultValues, queryBuilder: queryBuilder, rootConfig: rootConfig, disableOn: form?.disableOn, hiddenOn: form?.hiddenOn, requestParams: requestParams, navigator: navigator, searchParams: searchParams, appMainPath: appMainPath }));
case "view":
return (_jsx(RenderDetailView, { feat: feat, queryBuilder: queryBuilder, rootConfig: rootConfig, requestParams: requestParams, searchParams: searchParams, appMainPath: appMainPath }));
case "list":
return (_jsx(RenderTable, { feat: feat, columns: table?.columns, filters: table?.filters, queryBuilder: queryBuilder, accessorKey: table?.accessorKey, rootConfig: rootConfig, renderCustomActions: table?.renderCustomActions, q: q, requestParams: requestParams, searchParams: searchParams, LinkComponent: LinkComponent, currentPermissions: currentPermissions, appMainPath: appMainPath }));
default:
return _jsx(NotFoundLayout, {});
}
};
const EntityProvider = ({ params, queryBuilder, table, form, rootConfig, q, currentPermissions, LinkComponent, requestParams, navigator, searchParams, appMainPath }) => {
const { feat, method } = useMemo(() => params, [params]);
return (_jsxs(Container, { fluid: true, className: "min-h-screen relative", p: 0, children: [_jsxs(Flex, { fz: 16, fw: 600, justify: "space-between", className: "p-2 items-center", children: [method !== "list" ? (_jsxs(Group, { gap: 20, children: [_jsx(BackButton, { path: feat, LinkComponent: LinkComponent, currentPermissions: currentPermissions, appMainPath: appMainPath }), _jsxs(Flex, { align: "center", gap: 4, className: "gap-4 items-center ", children: [_jsx(Text, { fz: 20, fw: 500, children: capitalizeTxt(method) }), _jsx(Text, { fz: 20, fw: 500, children: capitalizeTxt(feat) })] })] })) : (_jsx(Text, { fz: 20, fw: 500, children: capitalizeTxt(feat) })), method === "list" && queryBuilder?.create && (_jsx(CreateButton, { path: feat, LinkComponent: LinkComponent, currentPermissions: currentPermissions, appMainPath: appMainPath }))] }), _jsx(Suspense, { children: renderComponent({
params,
queryBuilder,
table,
form,
rootConfig,
q,
LinkComponent,
requestParams,
navigator,
searchParams,
currentPermissions,
appMainPath
}) })] }));
};
export { EntityProvider };