Add export as csv (#4034)

* Add export as csv

Resolves 2183.

* collect over paginated data

* refactor

* add tests

* parameterize pageSize (limit)

* use pageInfo for onCompleted callback

* json column variable naming

* omit relations from csv exports
This commit is contained in:
Tate Thurston
2024-02-29 08:45:44 -08:00
committed by GitHub
parent 11434fc1c6
commit 8625a71f15
9 changed files with 378 additions and 55 deletions

View File

@ -34,7 +34,10 @@ export const useFindManyRecords = <T extends ObjectRecord = ObjectRecord>({
depth,
}: ObjectMetadataItemIdentifier &
ObjectRecordQueryVariables & {
onCompleted?: (data: ObjectRecordConnection<T>) => void;
onCompleted?: (
data: ObjectRecordConnection<T>,
pageInfo: ObjectRecordConnection<T>['pageInfo'],
) => void;
skip?: boolean;
useRecordsWithoutConnection?: boolean;
depth?: number;
@ -77,15 +80,13 @@ export const useFindManyRecords = <T extends ObjectRecord = ObjectRecord>({
orderBy,
},
onCompleted: (data) => {
onCompleted?.(data[objectMetadataItem.namePlural]);
const pageInfo = data?.[objectMetadataItem.namePlural]?.pageInfo;
onCompleted?.(data[objectMetadataItem.namePlural], pageInfo);
if (data?.[objectMetadataItem.namePlural]) {
setLastCursor(
data?.[objectMetadataItem.namePlural]?.pageInfo.endCursor ?? '',
);
setHasNextPage(
data?.[objectMetadataItem.namePlural]?.pageInfo.hasNextPage ?? false,
);
setLastCursor(pageInfo.endCursor ?? '');
setHasNextPage(pageInfo.hasNextPage ?? false);
}
},
onError: (error) => {
@ -128,27 +129,26 @@ export const useFindManyRecords = <T extends ObjectRecord = ObjectRecord>({
]);
}
const pageInfo =
fetchMoreResult?.[objectMetadataItem.namePlural]?.pageInfo;
if (data?.[objectMetadataItem.namePlural]) {
setLastCursor(
fetchMoreResult?.[objectMetadataItem.namePlural]?.pageInfo
.endCursor ?? '',
);
setHasNextPage(
fetchMoreResult?.[objectMetadataItem.namePlural]?.pageInfo
.hasNextPage ?? false,
);
setLastCursor(pageInfo.endCursor ?? '');
setHasNextPage(pageInfo.hasNextPage ?? false);
}
onCompleted?.({
__typename: `${capitalize(
objectMetadataItem.nameSingular,
)}Connection`,
edges: newEdges,
pageInfo:
fetchMoreResult?.[objectMetadataItem.namePlural].pageInfo,
totalCount:
fetchMoreResult?.[objectMetadataItem.namePlural].totalCount,
});
onCompleted?.(
{
__typename: `${capitalize(
objectMetadataItem.nameSingular,
)}Connection`,
edges: newEdges,
pageInfo:
fetchMoreResult?.[objectMetadataItem.namePlural].pageInfo,
totalCount:
fetchMoreResult?.[objectMetadataItem.namePlural].totalCount,
},
pageInfo,
);
return Object.assign({}, prev, {
[objectMetadataItem.namePlural]: {