UNPKG

mantine-entity

Version:

A library combining Mantine, TanStack Query, and Mantine React Table for efficient entity management

122 lines (121 loc) 4.01 kB
import { MRT_RowData, type MRT_ColumnDef } from "mantine-react-table"; import { TField } from "../form-builder/model"; import { FieldPath, UseFormProps } from "react-hook-form"; import { JSX } from "react"; import { Collection, FilterOperator } from "../../models/collection-query"; export type QueryType = "GET" | "POST" | "PUT" | "DELETE"; export type ActionType = "list" | "view" | "create" | "update" | "delete"; export type QueryBuilder<T extends MRT_RowData> = { [K in ActionType]?: ActionQuery<T>; }; export type ActionQuery<T extends MRT_RowData> = { url: (data?: Partial<T>) => string; method: QueryType; queryKey?: string; collectionQuery?: Collection<FieldPath<T>>; dataType?: "paginated" | "un-paginated"; }; export type RootConfig = { feat: string; title: string; metadata: any; img?: string; path: string; icon?: JSX.Element; mainQueryKey?: string; }; export type RenderTableProps<T extends MRT_RowData> = { feat: string; columns?: MRT_ColumnDef<T>[]; filters?: RenderFilterColumn<T>[]; renderCustomActions?: (data: T) => React.ReactNode; queryBuilder?: QueryBuilder<T>; accessorKey?: string; rootConfig?: RootConfig; q?: string; requestParams: RequestParams; searchParams: URLSearchParams; LinkComponent: any; currentPermissions?: any; appMainPath: string; renderActionToolBar?: React.ReactNode; }; export type RenderTable<T extends MRT_RowData> = { columns?: MRT_ColumnDef<T>[]; filters?: RenderFilterColumn<T>[]; accessorKey?: string; renderCustomActions?: (data: T) => React.ReactNode; appMainPath?: string; }; export type RenderFormProps<T extends MRT_RowData> = { feat: string; fields: TField<T>[]; defaultValues?: UseFormProps<T>["defaultValues"]; queryBuilder?: QueryBuilder<T>; rootConfig?: RootConfig; mapDefaultValue?: (data: T | undefined) => T | undefined; disableOn?: { create?: TField<T>["name"][]; update?: TField<T>["name"][]; }; hiddenOn?: { create?: TField<T>["name"][]; update?: TField<T>["name"][]; }; requestParams: RequestParams; navigator: (href: string) => void; searchParams: URLSearchParams; appMainPath: string; }; export type RenderForm<T extends MRT_RowData> = { fields: TField<T>[]; defaultValues?: UseFormProps<T>["defaultValues"]; queryBuilder?: QueryBuilder<T>; mapDefaultValue?: (data: T | undefined) => T | undefined; disableOn?: { create?: TField<T>["name"][]; update?: TField<T>["name"][]; }; hiddenOn?: { create?: TField<T>["name"][]; update?: TField<T>["name"][]; }; }; export type RenderDetailViewProps<T extends MRT_RowData> = { feat: string; queryBuilder?: QueryBuilder<T>; rootConfig?: RootConfig; requestParams: RequestParams; searchParams: URLSearchParams; appMainPath: string; }; export interface RenderFilterColumn<T extends MRT_RowData> extends Omit<TField<T>, "name"> { name: FieldPath<T>; operators?: FilterOperator[]; } export type EntityConfig<T extends MRT_RowData> = { rootConfig?: RootConfig; queryBuilder?: QueryBuilder<T>; table?: RenderTable<T>; form?: RenderForm<T>; }; export interface EntityProviderProps<T extends MRT_RowData> extends EntityConfig<T> { params: { feat: string; method: string; }; q?: string; LinkComponent: any; currentPermissions?: any; requestParams: RequestParams; navigator: (href: string) => void; searchParams: URLSearchParams; appMainPath: string; } export type RequestParams = { getBaseUrl: (path: string) => string; httpGet<TResponse>(url: string): Promise<TResponse>; httpPost<TResponse, TArgs>(url: string, options?: TArgs | undefined): Promise<TResponse>; httpPut<TResponse, TArgs>(url: string, options?: TArgs | undefined): Promise<TResponse>; httpDelete<TResponse>(url: string): Promise<TResponse>; };