diff --git a/src/components/ExportComponent.tsx b/src/components/ExportComponent.tsx index 0c77577..ce0398c 100644 --- a/src/components/ExportComponent.tsx +++ b/src/components/ExportComponent.tsx @@ -15,6 +15,15 @@ export const getExportedFileName = (extension: string) => `export-${format(Date.now(), 'yyyy-MM-dd_HH-mm')}.${extension}`; const ExportComponent: FC = ({ resource }) => { + const filter: Record = {}; + const query = new URLSearchParams(location.search); + for (const entry of query.entries()) { + const [key, value] = entry; + if (key.match('filters.')) { + filter[key.replace('filters.', '')] = value; + } + } + const [isFetching, setFetching] = useState(); const sendNotice = useNotice(); @@ -29,6 +38,7 @@ const ExportComponent: FC = ({ resource }) => { actionName: 'export', params: { type, + filter, }, }); diff --git a/src/export.handler.ts b/src/export.handler.ts index 6dd42fa..d42af05 100644 --- a/src/export.handler.ts +++ b/src/export.handler.ts @@ -9,7 +9,7 @@ export const exportHandler: ActionHandler = async ( ) => { const parser = Parsers[request.query?.type ?? 'json'].export; - const records = await getRecords(context); + const records = await getRecords(context, request); const parsedData = parser(records); return { diff --git a/src/importExportFeature.ts b/src/importExportFeature.ts index 0303148..75a5b88 100644 --- a/src/importExportFeature.ts +++ b/src/importExportFeature.ts @@ -13,11 +13,13 @@ const importExportFeature = (): FeatureType => { handler: postActionHandler(exportHandler), component: EXPORT_COMPONENT, actionType: 'resource', + showFilter: true, }, import: { handler: postActionHandler(importHandler), component: IMPORT_COMPONENT, actionType: 'resource', + showFilter: true, }, }, }); diff --git a/src/utils.ts b/src/utils.ts index 84fd436..d41ff82 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -65,7 +65,8 @@ export const getFileFromRequest = (request: ActionRequest) => { }; export const getRecords = async ( - context: ActionContext + context: ActionContext, + request: ActionRequest ): Promise => { const idProperty = context.resource .properties() @@ -73,11 +74,17 @@ export const getRecords = async ( ?.name?.(); const titleProperty = context.resource.decorate().titleProperty()?.name?.(); - return context.resource.find(new Filter({}, context.resource), { - limit: Number.MAX_SAFE_INTEGER, - sort: { - sortBy: idProperty ?? titleProperty, - direction: 'asc', - }, - }); + return context.resource.find( + new Filter( + request?.query?.filter ? JSON.parse(request?.query?.filter) : {}, + context.resource + ), + { + limit: Number.MAX_SAFE_INTEGER, + sort: { + sortBy: idProperty ?? titleProperty, + direction: 'asc', + }, + } + ); };