fix: REST cursor encoding for nested order_by composite fields (#20974)

## Summary

fix: REST cursor encoding for nested order_by composite fields

Closes #20109

---
AI was used for assistance.

---------

Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Etienne <45695613+etiennejouan@users.noreply.github.com>
This commit is contained in:
Matt Van Horn
2026-06-02 00:10:20 -07:00
committed by GitHub
parent 3d6bcc3102
commit 6ac797a69c
9 changed files with 363 additions and 24 deletions
@@ -7,12 +7,17 @@ import {
encodeCursor,
getPaginationInfo,
} from 'src/engine/api/graphql/graphql-query-runner/utils/cursors.util';
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
export const getPageInfo = (
records: ObjectRecord[],
orderBy: ObjectRecordOrderBy,
limit: number,
isForwardPagination: boolean,
flatObjectMetadata: FlatObjectMetadata,
flatFieldMetadataMaps: FlatEntityMaps<FlatFieldMetadata>,
): CommonPageInfo => {
const { hasNextPage, hasPreviousPage, hasMoreRecords } = getPaginationInfo(
records,
@@ -25,10 +30,22 @@ export const getPageInfo = (
}
const startCursor =
records.length > 0 ? encodeCursor(records[0], orderBy) : null;
records.length > 0
? encodeCursor({
objectRecord: records[0],
order: orderBy,
flatObjectMetadata,
flatFieldMetadataMaps,
})
: null;
const endCursor =
records.length > 0
? encodeCursor(records[records.length - 1], orderBy)
? encodeCursor({
objectRecord: records[records.length - 1],
order: orderBy,
flatObjectMetadata,
flatFieldMetadataMaps,
})
: null;
return { startCursor, endCursor, hasNextPage, hasPreviousPage };