This commit is contained in:
2026-05-24 01:34:52 +05:30
parent a3970d6a7b
commit 653c8caecf
6 changed files with 23 additions and 13 deletions

View File

@@ -61,7 +61,7 @@ export default function EnhancedTable({
const isMobile = useMediaQuery(theme.breakpoints.down('md')); const isMobile = useMediaQuery(theme.breakpoints.down('md'));
const navigate = useNavigate(); const navigate = useNavigate();
const isServer = config.mode !== "client"; const isServer = config.filterOptions?.mode !== "client";
const [internalPaginationModel, setInternalPaginationModel] = React.useState<GridPaginationModel>({ const [internalPaginationModel, setInternalPaginationModel] = React.useState<GridPaginationModel>({
page: 0, page: 0,
pageSize: 10, pageSize: 10,

View File

@@ -102,7 +102,7 @@ export default function ResourceView({ config, onNavigateToResource }: ResourceV
const isView = !!id && !isEdit; const isView = !!id && !isEdit;
const isList = !id && !isCreate; const isList = !id && !isCreate;
const isServer = config.mode !== "client"; const isServer = config.filterOptions?.mode !== "client";
const [paginationModel, setPaginationModel] = React.useState<GridPaginationModel>({ const [paginationModel, setPaginationModel] = React.useState<GridPaginationModel>({
page: 0, page: 0,
@@ -170,11 +170,11 @@ export default function ResourceView({ config, onNavigateToResource }: ResourceV
<Box> <Box>
{isList ? ( {isList ? (
<Box> <Box>
{!isServer && config.filterableFields && config.filterableFields.length > 0 && ( {!isServer && config.filterOptions?.fields && config.filterOptions.fields.length > 0 && (
<FilterBar <FilterBar
fields={config.fields} fields={config.fields}
filterableFields={config.filterableFields!} filterableFields={config.filterOptions.fields}
mode={config.mode} mode={config.filterOptions?.mode || "server"}
data={rawData} data={rawData}
appliedValues={appliedFilters} appliedValues={appliedFilters}
onApply={setAppliedFilters} onApply={setAppliedFilters}

View File

@@ -34,8 +34,10 @@ export interface ResourceConfig {
fields: Record<string, ResourceField>; fields: Record<string, ResourceField>;
pagination?: boolean; pagination?: boolean;
hidden?: boolean; hidden?: boolean;
mode: ResourceMode; filterOptions?: {
filterableFields?: string[]; mode?: ResourceMode;
fields?: string[];
};
} }
export interface AppConfig { export interface AppConfig {

View File

@@ -14,6 +14,8 @@ export interface ResourceOverride {
fields?: Record<string, FieldOverride>; fields?: Record<string, FieldOverride>;
pagination?: boolean; pagination?: boolean;
hidden?: boolean; hidden?: boolean;
filterOptions?: {
mode?: "server" | "client"; mode?: "server" | "client";
filterableFields?: string[]; fields?: string[];
};
} }

View File

@@ -154,6 +154,8 @@ export async function loadConfigFromOpenApi(baseUrl: string, configuration: Reco
const resourceOverride = configuration[name] || {}; const resourceOverride = configuration[name] || {};
const fo = resourceOverride.filterOptions || {};
resources.push({ resources.push({
name, name,
label: schema.title || label, label: schema.title || label,
@@ -163,8 +165,10 @@ export async function loadConfigFromOpenApi(baseUrl: string, configuration: Reco
fields, fields,
pagination: resourceOverride.pagination, pagination: resourceOverride.pagination,
hidden: resourceOverride.hidden, hidden: resourceOverride.hidden,
mode: resourceOverride.mode || "server", filterOptions: {
filterableFields: resourceOverride.filterableFields, mode: fo.mode || "server",
fields: fo.fields,
},
}); });
} }

View File

@@ -2,8 +2,10 @@ import { ResourceOverride } from "../react-openapi/types/overrides";
export const configuration: Record<string, ResourceOverride> = { export const configuration: Record<string, ResourceOverride> = {
expenses: { expenses: {
filterOptions: {
mode: "client", mode: "client",
filterableFields: ["payee", "account", "tags", "occurred_at", "amount"], fields: ["payee", "account", "tags", "occurred_at", "amount"],
},
fields: { fields: {
payee: { payee: {
displayField: "name", displayField: "name",