fix: refactor object notation type in entity-service sort

This commit is contained in:
Convly 2023-12-18 17:36:58 +01:00
parent 1107713a66
commit 16a54daf6a

View File

@ -75,16 +75,24 @@ export type ArrayNotation<TSchemaUID extends Common.UID.Schema> = Any<TSchemaUID
* type F = 'title'; // ❌
*/
export type ObjectNotation<TSchemaUID extends Common.UID.Schema> = {
// First level sort
[key in SingleAttribute<TSchemaUID>]?: OrderKind.Any;
} & {
// Deep sort, only add populatable keys that have a
// target (remove dynamic zones and other polymorphic links)
[key in Attribute.GetKeysWithTarget<TSchemaUID>]?: ObjectNotation<
Attribute.GetTarget<TSchemaUID, key>
>;
[key in ObjectNotationKeys<TSchemaUID>]?: key extends SingleAttribute<TSchemaUID>
? // First level sort (scalar attributes, id, ...)
OrderKind.Any
: // Deep sort (relations with a target, components, media, ...)
ObjectNotation<Attribute.GetTarget<TSchemaUID, key>>;
};
/**
* Represents the keys of an object notation for a sort
* - SingleAttribute<TSchemaUID> represents a union of every non-populatable attribute based on the passed schema UID
* - Attribute.GetKeysWithTarget<TSchemaUID> provides keys with a target from the passed schema UID.
*
* This means that every member of ObjectNotationKeys can represent either a single non-populatable attribute or an attribute with a target.
*/
type ObjectNotationKeys<TSchemaUID extends Common.UID.Schema> =
| SingleAttribute<TSchemaUID>
| Attribute.GetKeysWithTarget<TSchemaUID>;
/**
* Represents any notation for a sort (string, array, object)
*