@osdk/client 2.8.0-beta.12 → 2.8.0-beta.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/build/browser/createMediaFromReference.js +61 -0
- package/build/browser/createMediaFromReference.js.map +1 -0
- package/build/browser/index.js +1 -0
- package/build/browser/index.js.map +1 -1
- package/build/browser/object/mediaUpload.js +3 -0
- package/build/browser/object/mediaUpload.js.map +1 -1
- package/build/browser/observable/LinkPayload.js.map +1 -1
- package/build/browser/observable/ListPayload.js.map +1 -1
- package/build/browser/observable/ObservableClient/ObserveLink.js.map +1 -1
- package/build/browser/observable/ObservableClient.js.map +1 -1
- package/build/browser/observable/computeObjectSetCacheKey.js.map +1 -1
- package/build/browser/observable/internal/ListQueryView.js +4 -3
- package/build/browser/observable/internal/ListQueryView.js.map +1 -1
- package/build/browser/observable/internal/ObservableClientImpl.js +1 -1
- package/build/browser/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/browser/observable/internal/Store.test.js +11 -11
- package/build/browser/observable/internal/Store.test.js.map +1 -1
- package/build/browser/observable/internal/base-list/BaseCollectionQuery.js.map +1 -1
- package/build/browser/observable/internal/base-list/BaseListQuery.js +12 -13
- package/build/browser/observable/internal/base-list/BaseListQuery.js.map +1 -1
- package/build/browser/observable/internal/base-list/createCollectionConnectable.js +2 -2
- package/build/browser/observable/internal/base-list/createCollectionConnectable.js.map +1 -1
- package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js +2 -2
- package/build/browser/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -1
- package/build/browser/observable/internal/list/InterfaceListQuery.js +1 -1
- package/build/browser/observable/internal/list/InterfaceListQuery.js.map +1 -1
- package/build/browser/observable/internal/list/ListQuery.test.js +45 -46
- package/build/browser/observable/internal/list/ListQuery.test.js.map +1 -1
- package/build/browser/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
- package/build/browser/observable/internal/objectset/ObjectSetQueryOptions.js.map +1 -1
- package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +1 -1
- package/build/browser/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -1
- package/build/browser/observable/internal/testUtils.js +2 -2
- package/build/browser/observable/internal/testUtils.js.map +1 -1
- package/build/browser/queries/applyQuery.js +10 -2
- package/build/browser/queries/applyQuery.js.map +1 -1
- package/build/browser/queries/queries.test.js +80 -2
- package/build/browser/queries/queries.test.js.map +1 -1
- package/build/browser/util/UserAgent.js +2 -2
- package/build/browser/util/toDataValue.js +7 -7
- package/build/browser/util/toDataValue.js.map +1 -1
- package/build/browser/util/toDataValue.test.js +23 -0
- package/build/browser/util/toDataValue.test.js.map +1 -1
- package/build/browser/util/toDataValueQueries.js +19 -0
- package/build/browser/util/toDataValueQueries.js.map +1 -1
- package/build/cjs/{chunk-22QZVXHI.cjs → chunk-4HVAJSMV.cjs} +205 -123
- package/build/cjs/chunk-4HVAJSMV.cjs.map +1 -0
- package/build/cjs/{chunk-YVZM2JPW.cjs → chunk-Q2XRNNC7.cjs} +95 -90
- package/build/cjs/chunk-Q2XRNNC7.cjs.map +1 -0
- package/build/cjs/{chunk-LDTMSHUZ.cjs → chunk-QPPKY7HT.cjs} +4 -4
- package/build/cjs/{chunk-LDTMSHUZ.cjs.map → chunk-QPPKY7HT.cjs.map} +1 -1
- package/build/cjs/createObjectSet-BagR_R7M.d.cts +15 -0
- package/build/cjs/index.cjs +20 -12
- package/build/cjs/index.cjs.map +1 -1
- package/build/cjs/index.d.cts +2 -1
- package/build/cjs/public/internal-node.cjs +219 -219
- package/build/cjs/public/internal.cjs +14 -14
- package/build/cjs/public/unstable-do-not-use.cjs +148 -144
- package/build/cjs/public/unstable-do-not-use.cjs.map +1 -1
- package/build/cjs/public/unstable-do-not-use.d.cts +11 -14
- package/build/esm/createMediaFromReference.js +61 -0
- package/build/esm/createMediaFromReference.js.map +1 -0
- package/build/esm/index.js +1 -0
- package/build/esm/index.js.map +1 -1
- package/build/esm/object/mediaUpload.js +3 -0
- package/build/esm/object/mediaUpload.js.map +1 -1
- package/build/esm/observable/LinkPayload.js.map +1 -1
- package/build/esm/observable/ListPayload.js.map +1 -1
- package/build/esm/observable/ObservableClient/ObserveLink.js.map +1 -1
- package/build/esm/observable/ObservableClient.js.map +1 -1
- package/build/esm/observable/computeObjectSetCacheKey.js.map +1 -1
- package/build/esm/observable/internal/ListQueryView.js +4 -3
- package/build/esm/observable/internal/ListQueryView.js.map +1 -1
- package/build/esm/observable/internal/ObservableClientImpl.js +1 -1
- package/build/esm/observable/internal/ObservableClientImpl.js.map +1 -1
- package/build/esm/observable/internal/Store.test.js +11 -11
- package/build/esm/observable/internal/Store.test.js.map +1 -1
- package/build/esm/observable/internal/base-list/BaseCollectionQuery.js.map +1 -1
- package/build/esm/observable/internal/base-list/BaseListQuery.js +12 -13
- package/build/esm/observable/internal/base-list/BaseListQuery.js.map +1 -1
- package/build/esm/observable/internal/base-list/createCollectionConnectable.js +2 -2
- package/build/esm/observable/internal/base-list/createCollectionConnectable.js.map +1 -1
- package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js +2 -2
- package/build/esm/observable/internal/base-list/createCollectionConnectable.test.js.map +1 -1
- package/build/esm/observable/internal/list/InterfaceListQuery.js +1 -1
- package/build/esm/observable/internal/list/InterfaceListQuery.js.map +1 -1
- package/build/esm/observable/internal/list/ListQuery.test.js +45 -46
- package/build/esm/observable/internal/list/ListQuery.test.js.map +1 -1
- package/build/esm/observable/internal/objectset/ObjectSetQuery.js.map +1 -1
- package/build/esm/observable/internal/objectset/ObjectSetQueryOptions.js.map +1 -1
- package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js +1 -1
- package/build/esm/observable/internal/testUtils/observeLink/expectStandardObserveLink.js.map +1 -1
- package/build/esm/observable/internal/testUtils.js +2 -2
- package/build/esm/observable/internal/testUtils.js.map +1 -1
- package/build/esm/queries/applyQuery.js +10 -2
- package/build/esm/queries/applyQuery.js.map +1 -1
- package/build/esm/queries/queries.test.js +80 -2
- package/build/esm/queries/queries.test.js.map +1 -1
- package/build/esm/util/UserAgent.js +2 -2
- package/build/esm/util/toDataValue.js +7 -7
- package/build/esm/util/toDataValue.js.map +1 -1
- package/build/esm/util/toDataValue.test.js +23 -0
- package/build/esm/util/toDataValue.test.js.map +1 -1
- package/build/esm/util/toDataValueQueries.js +19 -0
- package/build/esm/util/toDataValueQueries.js.map +1 -1
- package/build/types/createMediaFromReference.d.ts +1 -0
- package/build/types/createMediaFromReference.d.ts.map +1 -0
- package/build/types/index.d.ts +2 -0
- package/build/types/index.d.ts.map +1 -1
- package/build/types/object/mediaUpload.d.ts +2 -1
- package/build/types/object/mediaUpload.d.ts.map +1 -1
- package/build/types/observable/LinkPayload.d.ts +1 -1
- package/build/types/observable/ListPayload.d.ts +1 -1
- package/build/types/observable/ObservableClient/ObserveLink.d.ts +1 -1
- package/build/types/observable/ObservableClient.d.ts +4 -4
- package/build/types/observable/ObservableClient.d.ts.map +1 -1
- package/build/types/observable/computeObjectSetCacheKey.d.ts +2 -2
- package/build/types/observable/computeObjectSetCacheKey.d.ts.map +1 -1
- package/build/types/observable/internal/ListQueryView.d.ts.map +1 -1
- package/build/types/observable/internal/Store.test.d.ts.map +1 -1
- package/build/types/observable/internal/base-list/BaseCollectionQuery.d.ts +4 -4
- package/build/types/observable/internal/base-list/BaseListQuery.d.ts +1 -1
- package/build/types/observable/internal/base-list/BaseListQuery.d.ts.map +1 -1
- package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts +1 -1
- package/build/types/observable/internal/objectset/ObjectSetQuery.d.ts.map +1 -1
- package/build/types/observable/internal/objectset/ObjectSetQueryOptions.d.ts +2 -2
- package/build/types/observable/internal/objectset/ObjectSetQueryOptions.d.ts.map +1 -1
- package/build/types/observable/internal/testUtils.d.ts +1 -1
- package/build/types/observable/internal/testUtils.d.ts.map +1 -1
- package/build/types/queries/applyQuery.d.ts.map +1 -1
- package/package.json +13 -13
- package/build/cjs/chunk-22QZVXHI.cjs.map +0 -1
- package/build/cjs/chunk-YVZM2JPW.cjs.map +0 -1
- package/build/cjs/createClient-BPK4om7e.d.cts +0 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"InterfaceListQuery.js","names":["groupBy","invariant","additionalContext","ObjectDefRef","ListQuery","PIVOT_IDX","RDP_IDX","RIDS_IDX","InterfaceListQuery","createObjectSet","store","rdpConfig","cacheKey","otherKeys","pivotInfo","rids","sourceSet","createSourceSetForPivot","objectSet","where","canonicalWhere","pivotTo","linkName","withProperties","objectTypeDef","type","apiName","clientCtx","client","objectSetFactory","objects","revalidateObjectType","objectMetadata","fetchMetadata","interfaceMap","revalidate","postProcessFetchedData","data","reloadDataAsFullObjects","createPayload","params","resolvedList","resolvedData","map","obj","$as","isOptimistic","fetchMore","hasMore","nextPageToken","status","lastUpdated","extractRelevantObjects","changes","matchesApiName","object","added","Array","from","addedObjects","filter","modified","modifiedObjects","all","strictMatches","Set","sortaMatches","sourceType","sourceTypeKind","length","groups","x","$objectType","objectTypeToPrimaryKeyToObject","Object","fromEntries","Promise","entries","objectDef","primaryKeyApiName","$in","$primaryKey","result","fetchPage","$includeRid","fullObject","process","env","NODE_ENV"],"sources":["InterfaceListQuery.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n DerivedProperty,\n InterfaceDefinition,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n WhereClause,\n} from \"@osdk/api\";\nimport groupBy from \"object.groupby\";\nimport invariant from \"tiny-invariant\";\nimport { additionalContext, type Client } from \"../../../Client.js\";\nimport type { InterfaceHolder } from \"../../../object/convertWireToOsdkObjects/InterfaceHolder.js\";\nimport { ObjectDefRef } from \"../../../object/convertWireToOsdkObjects/InternalSymbols.js\";\nimport type { ObjectHolder } from \"../../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { ListPayload } from \"../../ListPayload.js\";\nimport type { CollectionConnectableParams } from \"../base-list/BaseCollectionQuery.js\";\nimport type { Changes } from \"../Changes.js\";\nimport type { PivotInfo } from \"../PivotCanonicalizer.js\";\nimport type { Rdp } from \"../RdpCanonicalizer.js\";\nimport type { SimpleWhereClause } from \"../SimpleWhereClause.js\";\nimport type { Store } from \"../Store.js\";\nimport { ListQuery, PIVOT_IDX, RDP_IDX, RIDS_IDX } from \"./ListQuery.js\";\n\ntype ExtractRelevantObjectsResult = Record<\"added\" | \"modified\", {\n all: (ObjectHolder | InterfaceHolder)[];\n strictMatches: Set<(ObjectHolder | InterfaceHolder)>;\n sortaMatches: Set<(ObjectHolder | InterfaceHolder)>;\n}>;\n\nexport class InterfaceListQuery extends ListQuery {\n protected createObjectSet(store: Store): ObjectSet<ObjectTypeDefinition> {\n const rdpConfig = this.cacheKey.otherKeys[RDP_IDX];\n const pivotInfo = this.cacheKey.otherKeys[PIVOT_IDX];\n const rids = this.cacheKey.otherKeys[RIDS_IDX];\n\n if (pivotInfo != null) {\n const sourceSet = createSourceSetForPivot(store, pivotInfo, rids);\n\n let objectSet = sourceSet\n .where(this.canonicalWhere as WhereClause<any>)\n .pivotTo(pivotInfo.linkName);\n\n if (rdpConfig != null) {\n objectSet = objectSet.withProperties(\n rdpConfig as DerivedProperty.Clause<ObjectTypeDefinition>,\n );\n }\n\n // intersectWith for pivot queries is deferred to fetchPageData\n // where the target type can be resolved asynchronously\n return objectSet;\n }\n\n const type: string = \"interface\" as const;\n const objectTypeDef = {\n type,\n apiName: this.apiName,\n } as ObjectTypeDefinition;\n\n const clientCtx = store.client[additionalContext];\n let objectSet: ObjectSet<ObjectTypeDefinition>;\n if (rids != null) {\n objectSet = clientCtx.objectSetFactory(\n objectTypeDef,\n clientCtx,\n { type: \"static\", objects: [...rids] },\n );\n } else {\n objectSet = store.client(objectTypeDef);\n }\n\n if (rdpConfig != null) {\n objectSet = objectSet.withProperties(rdpConfig as Rdp);\n }\n\n return objectSet.where(this.canonicalWhere);\n }\n\n async revalidateObjectType(apiName: string): Promise<void> {\n const objectMetadata = await this.store.client.fetchMetadata({\n type: \"object\",\n apiName,\n });\n\n if (this.apiName in objectMetadata.interfaceMap) {\n await this.revalidate(/* force */ true);\n }\n }\n\n protected async postProcessFetchedData(\n data: Osdk.Instance<any>[],\n ): Promise<Osdk.Instance<any>[]> {\n return reloadDataAsFullObjects(this.store.client, data);\n }\n\n protected createPayload(\n params: CollectionConnectableParams,\n ): ListPayload {\n const resolvedList = params.resolvedData.map((obj: ObjectHolder) =>\n obj.$as(this.apiName)\n );\n\n return {\n resolvedList,\n isOptimistic: params.isOptimistic,\n fetchMore: this.fetchMore,\n hasMore: this.nextPageToken != null,\n status: params.status,\n lastUpdated: params.lastUpdated,\n };\n }\n\n protected extractRelevantObjects(\n changes: Changes,\n ): ExtractRelevantObjectsResult {\n const matchesApiName = ([, object]: [unknown, ObjectHolder]) => {\n return this.apiName in object[ObjectDefRef].interfaceMap;\n };\n\n const added = Array.from(changes.addedObjects).filter(matchesApiName).map((\n [, object],\n ) => object.$as(this.apiName));\n\n const modified = Array.from(changes.modifiedObjects).filter(matchesApiName)\n .map((\n [, object],\n ) => object.$as(this.apiName));\n\n return {\n added: {\n all: added,\n strictMatches: new Set(),\n sortaMatches: new Set(),\n },\n modified: {\n all: modified,\n strictMatches: new Set(),\n sortaMatches: new Set(),\n },\n };\n }\n}\n\nfunction createSourceSetForPivot(\n store: Store,\n pivotInfo: PivotInfo,\n rids: string[] | undefined,\n): ObjectSet<ObjectOrInterfaceDefinition> {\n const clientCtx = store.client[additionalContext];\n\n if (rids != null) {\n return clientCtx.objectSetFactory(\n {\n type: \"object\",\n apiName: pivotInfo.sourceType,\n } as ObjectTypeDefinition,\n clientCtx,\n { type: \"static\", objects: [...rids] },\n );\n }\n\n if (pivotInfo.sourceTypeKind === \"interface\") {\n return store.client({\n type: \"interface\",\n apiName: pivotInfo.sourceType,\n } as InterfaceDefinition) as ObjectSet<ObjectOrInterfaceDefinition>;\n }\n\n return store.client({\n type: \"object\",\n apiName: pivotInfo.sourceType,\n } as ObjectTypeDefinition) as ObjectSet<ObjectOrInterfaceDefinition>;\n}\n\n// Hopefully this can go away when we can just request the full object properties on first load\nasync function reloadDataAsFullObjects(\n client: Client,\n data: Osdk.Instance<any>[],\n) {\n if (data.length === 0) {\n return data;\n }\n\n const groups = groupBy(data, (x) => x.$objectType);\n const objectTypeToPrimaryKeyToObject = Object.fromEntries(\n await Promise.all(\n Object.entries(groups).map<\n Promise<\n [\n /** objectType **/ string,\n Record<string | number, Osdk.Instance<ObjectTypeDefinition>>,\n ]\n >\n >(async ([apiName, objects]) => {\n // Interface query results don't have ObjectDefRef, so we fetch metadata to get primaryKeyApiName\n const objectDef = await client.fetchMetadata({\n type: \"object\",\n apiName,\n });\n const where: SimpleWhereClause = {\n [objectDef.primaryKeyApiName]: {\n $in: objects.map(x => x.$primaryKey),\n },\n };\n\n const result = await client(\n objectDef as ObjectTypeDefinition,\n ).where(\n where as Parameters<ObjectSet<ObjectTypeDefinition>[\"where\"]>[0],\n ).fetchPage({ $includeRid: true });\n return [\n apiName,\n Object.fromEntries(result.data.map(\n x => [x.$primaryKey, x],\n )),\n ];\n }),\n ),\n );\n\n return data.map((obj) => {\n const fullObject =\n objectTypeToPrimaryKeyToObject[obj.$objectType][obj.$primaryKey];\n invariant(\n fullObject,\n `Could not find object ${obj.$objectType} ${obj.$primaryKey}`,\n );\n return fullObject;\n });\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"InterfaceListQuery.js","names":["groupBy","invariant","additionalContext","ObjectDefRef","ListQuery","PIVOT_IDX","RDP_IDX","RIDS_IDX","InterfaceListQuery","createObjectSet","store","rdpConfig","cacheKey","otherKeys","pivotInfo","rids","sourceSet","createSourceSetForPivot","objectSet","where","canonicalWhere","pivotTo","linkName","withProperties","objectTypeDef","type","apiName","clientCtx","client","objectSetFactory","objects","revalidateObjectType","objectMetadata","fetchMetadata","interfaceMap","revalidate","postProcessFetchedData","data","reloadDataAsFullObjects","createPayload","params","resolvedList","resolvedData","map","obj","$as","isOptimistic","fetchMore","hasMore","nextPageToken","status","lastUpdated","extractRelevantObjects","changes","matchesApiName","object","added","Array","from","addedObjects","filter","modified","modifiedObjects","all","strictMatches","Set","sortaMatches","sourceType","sourceTypeKind","length","groups","x","$objectType","objectTypeToPrimaryKeyToObject","Object","fromEntries","Promise","entries","objectDef","primaryKeyApiName","$in","$primaryKey","result","fetchPage","$includeRid","fullObject","process","env","NODE_ENV"],"sources":["InterfaceListQuery.ts"],"sourcesContent":["/*\n * Copyright 2025 Palantir Technologies, Inc. All rights reserved.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport type {\n DerivedProperty,\n InterfaceDefinition,\n ObjectOrInterfaceDefinition,\n ObjectSet,\n ObjectTypeDefinition,\n Osdk,\n WhereClause,\n} from \"@osdk/api\";\nimport groupBy from \"object.groupby\";\nimport invariant from \"tiny-invariant\";\nimport { additionalContext, type Client } from \"../../../Client.js\";\nimport type { InterfaceHolder } from \"../../../object/convertWireToOsdkObjects/InterfaceHolder.js\";\nimport { ObjectDefRef } from \"../../../object/convertWireToOsdkObjects/InternalSymbols.js\";\nimport type { ObjectHolder } from \"../../../object/convertWireToOsdkObjects/ObjectHolder.js\";\nimport type { ListPayload } from \"../../ListPayload.js\";\nimport type { CollectionConnectableParams } from \"../base-list/BaseCollectionQuery.js\";\nimport type { Changes } from \"../Changes.js\";\nimport type { PivotInfo } from \"../PivotCanonicalizer.js\";\nimport type { Rdp } from \"../RdpCanonicalizer.js\";\nimport type { SimpleWhereClause } from \"../SimpleWhereClause.js\";\nimport type { Store } from \"../Store.js\";\nimport { ListQuery, PIVOT_IDX, RDP_IDX, RIDS_IDX } from \"./ListQuery.js\";\n\ntype ExtractRelevantObjectsResult = Record<\"added\" | \"modified\", {\n all: (ObjectHolder | InterfaceHolder)[];\n strictMatches: Set<(ObjectHolder | InterfaceHolder)>;\n sortaMatches: Set<(ObjectHolder | InterfaceHolder)>;\n}>;\n\nexport class InterfaceListQuery extends ListQuery {\n protected createObjectSet(store: Store): ObjectSet<ObjectTypeDefinition> {\n const rdpConfig = this.cacheKey.otherKeys[RDP_IDX];\n const pivotInfo = this.cacheKey.otherKeys[PIVOT_IDX];\n const rids = this.cacheKey.otherKeys[RIDS_IDX];\n\n if (pivotInfo != null) {\n const sourceSet = createSourceSetForPivot(store, pivotInfo, rids);\n\n let objectSet = sourceSet\n .where(this.canonicalWhere as WhereClause<any>)\n .pivotTo(pivotInfo.linkName);\n\n if (rdpConfig != null) {\n objectSet = objectSet.withProperties(\n rdpConfig as DerivedProperty.Clause<ObjectTypeDefinition>,\n );\n }\n\n // intersectWith for pivot queries is deferred to fetchPageData\n // where the target type can be resolved asynchronously\n return objectSet;\n }\n\n const type: string = \"interface\" as const;\n const objectTypeDef = {\n type,\n apiName: this.apiName,\n } as ObjectTypeDefinition;\n\n const clientCtx = store.client[additionalContext];\n let objectSet: ObjectSet<ObjectTypeDefinition>;\n if (rids != null) {\n objectSet = clientCtx.objectSetFactory(\n objectTypeDef,\n clientCtx,\n { type: \"static\", objects: [...rids] },\n );\n } else {\n objectSet = store.client(objectTypeDef);\n }\n\n if (rdpConfig != null) {\n objectSet = objectSet.withProperties(rdpConfig as Rdp);\n }\n\n return objectSet.where(this.canonicalWhere);\n }\n\n async revalidateObjectType(apiName: string): Promise<void> {\n const objectMetadata = await this.store.client.fetchMetadata({\n type: \"object\",\n apiName,\n });\n\n if (this.apiName in objectMetadata.interfaceMap) {\n await this.revalidate(/* force */ true);\n }\n }\n\n protected async postProcessFetchedData(\n data: Osdk.Instance<any>[],\n ): Promise<Osdk.Instance<any>[]> {\n return reloadDataAsFullObjects(this.store.client, data);\n }\n\n protected createPayload(\n params: CollectionConnectableParams,\n ): ListPayload {\n const resolvedList = params.resolvedData?.map((obj: ObjectHolder) =>\n obj.$as(this.apiName)\n );\n\n return {\n resolvedList,\n isOptimistic: params.isOptimistic,\n fetchMore: this.fetchMore,\n hasMore: this.nextPageToken != null,\n status: params.status,\n lastUpdated: params.lastUpdated,\n };\n }\n\n protected extractRelevantObjects(\n changes: Changes,\n ): ExtractRelevantObjectsResult {\n const matchesApiName = ([, object]: [unknown, ObjectHolder]) => {\n return this.apiName in object[ObjectDefRef].interfaceMap;\n };\n\n const added = Array.from(changes.addedObjects).filter(matchesApiName).map((\n [, object],\n ) => object.$as(this.apiName));\n\n const modified = Array.from(changes.modifiedObjects).filter(matchesApiName)\n .map((\n [, object],\n ) => object.$as(this.apiName));\n\n return {\n added: {\n all: added,\n strictMatches: new Set(),\n sortaMatches: new Set(),\n },\n modified: {\n all: modified,\n strictMatches: new Set(),\n sortaMatches: new Set(),\n },\n };\n }\n}\n\nfunction createSourceSetForPivot(\n store: Store,\n pivotInfo: PivotInfo,\n rids: string[] | undefined,\n): ObjectSet<ObjectOrInterfaceDefinition> {\n const clientCtx = store.client[additionalContext];\n\n if (rids != null) {\n return clientCtx.objectSetFactory(\n {\n type: \"object\",\n apiName: pivotInfo.sourceType,\n } as ObjectTypeDefinition,\n clientCtx,\n { type: \"static\", objects: [...rids] },\n );\n }\n\n if (pivotInfo.sourceTypeKind === \"interface\") {\n return store.client({\n type: \"interface\",\n apiName: pivotInfo.sourceType,\n } as InterfaceDefinition) as ObjectSet<ObjectOrInterfaceDefinition>;\n }\n\n return store.client({\n type: \"object\",\n apiName: pivotInfo.sourceType,\n } as ObjectTypeDefinition) as ObjectSet<ObjectOrInterfaceDefinition>;\n}\n\n// Hopefully this can go away when we can just request the full object properties on first load\nasync function reloadDataAsFullObjects(\n client: Client,\n data: Osdk.Instance<any>[],\n) {\n if (data.length === 0) {\n return data;\n }\n\n const groups = groupBy(data, (x) => x.$objectType);\n const objectTypeToPrimaryKeyToObject = Object.fromEntries(\n await Promise.all(\n Object.entries(groups).map<\n Promise<\n [\n /** objectType **/ string,\n Record<string | number, Osdk.Instance<ObjectTypeDefinition>>,\n ]\n >\n >(async ([apiName, objects]) => {\n // Interface query results don't have ObjectDefRef, so we fetch metadata to get primaryKeyApiName\n const objectDef = await client.fetchMetadata({\n type: \"object\",\n apiName,\n });\n const where: SimpleWhereClause = {\n [objectDef.primaryKeyApiName]: {\n $in: objects.map(x => x.$primaryKey),\n },\n };\n\n const result = await client(\n objectDef as ObjectTypeDefinition,\n ).where(\n where as Parameters<ObjectSet<ObjectTypeDefinition>[\"where\"]>[0],\n ).fetchPage({ $includeRid: true });\n return [\n apiName,\n Object.fromEntries(result.data.map(\n x => [x.$primaryKey, x],\n )),\n ];\n }),\n ),\n );\n\n return data.map((obj) => {\n const fullObject =\n objectTypeToPrimaryKeyToObject[obj.$objectType][obj.$primaryKey];\n invariant(\n fullObject,\n `Could not find object ${obj.$objectType} ${obj.$primaryKey}`,\n );\n return fullObject;\n });\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -88,7 +88,7 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
88
88
|
}, listSub));
|
|
89
89
|
testStage("Initial loading state");
|
|
90
90
|
await waitForCall(listSub.next, 1);
|
|
91
|
-
expectSingleListCallAndClear(listSub,
|
|
91
|
+
expectSingleListCallAndClear(listSub, undefined, {
|
|
92
92
|
status: "loading"
|
|
93
93
|
});
|
|
94
94
|
testStage("Auto-fetch page 1 (20 items)");
|
|
@@ -96,21 +96,21 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
96
96
|
let payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
97
97
|
status: "loading"
|
|
98
98
|
});
|
|
99
|
-
expect(payload?.resolvedList
|
|
99
|
+
expect(payload?.resolvedList?.length).toBe(20);
|
|
100
100
|
testStage("Auto-fetch page 2 (40 items)");
|
|
101
101
|
await waitForCall(listSub.next, 1);
|
|
102
102
|
payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
103
103
|
status: "loading"
|
|
104
104
|
});
|
|
105
|
-
expect(payload?.resolvedList
|
|
105
|
+
expect(payload?.resolvedList?.length).toBe(40);
|
|
106
106
|
testStage("Auto-fetch page 3 (60 items) - threshold met");
|
|
107
107
|
await waitForCall(listSub.next, 1);
|
|
108
108
|
payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
109
109
|
status: "loaded"
|
|
110
110
|
});
|
|
111
111
|
testStage("Verify final state meets threshold");
|
|
112
|
-
expect(payload?.resolvedList
|
|
113
|
-
expect(payload?.resolvedList
|
|
112
|
+
expect(payload?.resolvedList?.length).toBeGreaterThanOrEqual(50);
|
|
113
|
+
expect(payload?.resolvedList?.length).toBeLessThanOrEqual(80);
|
|
114
114
|
expect(payload?.fetchMore).toBeDefined();
|
|
115
115
|
testStage("Verify no additional auto-fetches occur");
|
|
116
116
|
expectNoMoreCalls(listSub);
|
|
@@ -128,7 +128,7 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
128
128
|
}, listSub));
|
|
129
129
|
testStage("Initial loading state");
|
|
130
130
|
await waitForCall(listSub.next, 1);
|
|
131
|
-
expectSingleListCallAndClear(listSub,
|
|
131
|
+
expectSingleListCallAndClear(listSub, undefined, {
|
|
132
132
|
status: "loading"
|
|
133
133
|
});
|
|
134
134
|
testStage("Auto-fetch page 1 (20 items)");
|
|
@@ -136,32 +136,32 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
136
136
|
let payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
137
137
|
status: "loading"
|
|
138
138
|
});
|
|
139
|
-
expect(payload?.resolvedList
|
|
139
|
+
expect(payload?.resolvedList?.length).toBe(20);
|
|
140
140
|
testStage("Auto-fetch page 2 (40 items)");
|
|
141
141
|
await waitForCall(listSub.next, 1);
|
|
142
142
|
payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
143
143
|
status: "loading"
|
|
144
144
|
});
|
|
145
|
-
expect(payload?.resolvedList
|
|
145
|
+
expect(payload?.resolvedList?.length).toBe(40);
|
|
146
146
|
testStage("Auto-fetch page 3 (60 items)");
|
|
147
147
|
await waitForCall(listSub.next, 1);
|
|
148
148
|
payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
149
149
|
status: "loading"
|
|
150
150
|
});
|
|
151
|
-
expect(payload?.resolvedList
|
|
151
|
+
expect(payload?.resolvedList?.length).toBe(60);
|
|
152
152
|
testStage("Auto-fetch page 4 (80 items)");
|
|
153
153
|
await waitForCall(listSub.next, 1);
|
|
154
154
|
payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
155
155
|
status: "loading"
|
|
156
156
|
});
|
|
157
|
-
expect(payload?.resolvedList
|
|
157
|
+
expect(payload?.resolvedList?.length).toBe(80);
|
|
158
158
|
testStage("Auto-fetch page 5 (100 items) - all data fetched");
|
|
159
159
|
await waitForCall(listSub.next, 1);
|
|
160
160
|
payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
161
161
|
status: "loaded"
|
|
162
162
|
});
|
|
163
163
|
testStage("Verify all items fetched and no more pages");
|
|
164
|
-
expect(payload?.resolvedList
|
|
164
|
+
expect(payload?.resolvedList?.length).toBeGreaterThanOrEqual(80);
|
|
165
165
|
expect(payload?.hasMore).toBe(false);
|
|
166
166
|
testStage("Verify no additional auto-fetches occur");
|
|
167
167
|
expectNoMoreCalls(listSub);
|
|
@@ -178,7 +178,7 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
178
178
|
}, listSub));
|
|
179
179
|
testStage("Initial loading state");
|
|
180
180
|
await waitForCall(listSub.next, 1);
|
|
181
|
-
expectSingleListCallAndClear(listSub,
|
|
181
|
+
expectSingleListCallAndClear(listSub, undefined, {
|
|
182
182
|
status: "loading"
|
|
183
183
|
});
|
|
184
184
|
testStage("First page loads (20 items) and stops");
|
|
@@ -187,7 +187,7 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
187
187
|
status: "loaded"
|
|
188
188
|
});
|
|
189
189
|
testStage("Verify only first page fetched");
|
|
190
|
-
expect(payload?.resolvedList
|
|
190
|
+
expect(payload?.resolvedList?.length).toBe(20);
|
|
191
191
|
expect(payload?.fetchMore).toBeDefined();
|
|
192
192
|
expect(payload?.hasMore).toBe(true);
|
|
193
193
|
testStage("Verify no additional auto-fetches occur");
|
|
@@ -206,7 +206,7 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
206
206
|
}, listSub));
|
|
207
207
|
testStage("Initial loading state");
|
|
208
208
|
await waitForCall(listSub.next, 1);
|
|
209
|
-
expectSingleListCallAndClear(listSub,
|
|
209
|
+
expectSingleListCallAndClear(listSub, undefined, {
|
|
210
210
|
status: "loading"
|
|
211
211
|
});
|
|
212
212
|
testStage("Auto-fetch page 1 (20 items)");
|
|
@@ -214,32 +214,32 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
214
214
|
let payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
215
215
|
status: "loading"
|
|
216
216
|
});
|
|
217
|
-
expect(payload?.resolvedList
|
|
217
|
+
expect(payload?.resolvedList?.length).toBe(20);
|
|
218
218
|
testStage("Auto-fetch page 2 (40 items)");
|
|
219
219
|
await waitForCall(listSub.next, 1);
|
|
220
220
|
payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
221
221
|
status: "loading"
|
|
222
222
|
});
|
|
223
|
-
expect(payload?.resolvedList
|
|
223
|
+
expect(payload?.resolvedList?.length).toBe(40);
|
|
224
224
|
testStage("Auto-fetch page 3 (60 items)");
|
|
225
225
|
await waitForCall(listSub.next, 1);
|
|
226
226
|
payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
227
227
|
status: "loading"
|
|
228
228
|
});
|
|
229
|
-
expect(payload?.resolvedList
|
|
229
|
+
expect(payload?.resolvedList?.length).toBe(60);
|
|
230
230
|
testStage("Auto-fetch page 4 (80 items)");
|
|
231
231
|
await waitForCall(listSub.next, 1);
|
|
232
232
|
payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
233
233
|
status: "loading"
|
|
234
234
|
});
|
|
235
|
-
expect(payload?.resolvedList
|
|
235
|
+
expect(payload?.resolvedList?.length).toBe(80);
|
|
236
236
|
testStage("Auto-fetch page 5 (100 items) - all data fetched, stops despite high threshold");
|
|
237
237
|
await waitForCall(listSub.next, 1);
|
|
238
238
|
payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
239
239
|
status: "loaded"
|
|
240
240
|
});
|
|
241
241
|
testStage("Verify all available items fetched");
|
|
242
|
-
expect(payload?.resolvedList
|
|
242
|
+
expect(payload?.resolvedList?.length).toBeGreaterThanOrEqual(80);
|
|
243
243
|
expect(payload?.hasMore).toBe(false);
|
|
244
244
|
testStage("Verify no additional auto-fetches occur");
|
|
245
245
|
expectNoMoreCalls(listSub);
|
|
@@ -258,7 +258,7 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
258
258
|
}, listSub));
|
|
259
259
|
testStage("Initial loading state");
|
|
260
260
|
await waitForCall(listSub.next, 1);
|
|
261
|
-
expectSingleListCallAndClear(listSub,
|
|
261
|
+
expectSingleListCallAndClear(listSub, undefined, {
|
|
262
262
|
status: "loading"
|
|
263
263
|
});
|
|
264
264
|
testStage("First page loads (20 items)");
|
|
@@ -267,7 +267,7 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
267
267
|
status: "loaded"
|
|
268
268
|
});
|
|
269
269
|
testStage("Verify data loaded and sorted descending");
|
|
270
|
-
expect(payload?.resolvedList
|
|
270
|
+
expect(payload?.resolvedList?.length).toBe(20);
|
|
271
271
|
expect(payload?.resolvedList).toBeTruthy();
|
|
272
272
|
// Verify items are sorted descending by checking if first item has higher id than last
|
|
273
273
|
if (payload?.resolvedList && payload.resolvedList.length > 1) {
|
|
@@ -300,7 +300,7 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
300
300
|
}, listSub));
|
|
301
301
|
testStage("Initial loading state");
|
|
302
302
|
await waitForCall(listSub.next, 1);
|
|
303
|
-
expectSingleListCallAndClear(listSub,
|
|
303
|
+
expectSingleListCallAndClear(listSub, undefined, {
|
|
304
304
|
status: "loading"
|
|
305
305
|
});
|
|
306
306
|
testStage("First page: 2 even items sorted desc (ids 4, 2)");
|
|
@@ -308,9 +308,9 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
308
308
|
let payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
309
309
|
status: "loaded"
|
|
310
310
|
});
|
|
311
|
-
expect(payload?.resolvedList
|
|
312
|
-
expect(payload?.resolvedList[0].id).toBe(4);
|
|
313
|
-
expect(payload?.resolvedList[1].id).toBe(2);
|
|
311
|
+
expect(payload?.resolvedList?.length).toBe(2);
|
|
312
|
+
expect(payload?.resolvedList?.[0].id).toBe(4);
|
|
313
|
+
expect(payload?.resolvedList?.[1].id).toBe(2);
|
|
314
314
|
expect(payload?.hasMore).toBe(true);
|
|
315
315
|
testStage("fetchMore() to get last even item (id 0)");
|
|
316
316
|
void payload.fetchMore();
|
|
@@ -322,8 +322,8 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
322
322
|
payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
323
323
|
status: "loaded"
|
|
324
324
|
});
|
|
325
|
-
expect(payload?.resolvedList
|
|
326
|
-
expect(payload?.resolvedList[2].id).toBe(0);
|
|
325
|
+
expect(payload?.resolvedList?.length).toBe(3);
|
|
326
|
+
expect(payload?.resolvedList?.[2].id).toBe(0);
|
|
327
327
|
expect(payload?.hasMore).toBe(false);
|
|
328
328
|
testStage("Verify no additional unexpected calls");
|
|
329
329
|
expectNoMoreCalls(listSub);
|
|
@@ -339,7 +339,7 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
339
339
|
}, listSub));
|
|
340
340
|
testStage("Initial loading state");
|
|
341
341
|
await waitForCall(listSub.next, 1);
|
|
342
|
-
expectSingleListCallAndClear(listSub,
|
|
342
|
+
expectSingleListCallAndClear(listSub, undefined, {
|
|
343
343
|
status: "loading"
|
|
344
344
|
});
|
|
345
345
|
testStage("Empty result with hasMore: false");
|
|
@@ -347,7 +347,7 @@ describe("ListQuery autoFetchMore tests", () => {
|
|
|
347
347
|
const payload = expectSingleListCallAndClear(listSub, expect.anything(), {
|
|
348
348
|
status: "loaded"
|
|
349
349
|
});
|
|
350
|
-
expect(payload?.resolvedList
|
|
350
|
+
expect(payload?.resolvedList?.length).toBe(0);
|
|
351
351
|
expect(payload?.hasMore).toBe(false);
|
|
352
352
|
testStage("Verify no additional unexpected calls");
|
|
353
353
|
expectNoMoreCalls(listSub);
|
|
@@ -420,7 +420,7 @@ describe("ListQuery pivotTo tests", () => {
|
|
|
420
420
|
}, listSub));
|
|
421
421
|
testStage("Initial loading state");
|
|
422
422
|
await waitForCall(listSub.next, 1);
|
|
423
|
-
expectSingleListCallAndClear(listSub,
|
|
423
|
+
expectSingleListCallAndClear(listSub, undefined, {
|
|
424
424
|
status: "loading"
|
|
425
425
|
});
|
|
426
426
|
testStage("Data loads");
|
|
@@ -429,8 +429,8 @@ describe("ListQuery pivotTo tests", () => {
|
|
|
429
429
|
status: "loaded"
|
|
430
430
|
});
|
|
431
431
|
testStage("Verify only office linked to employee 1 is returned");
|
|
432
|
-
expect(payload?.resolvedList
|
|
433
|
-
expect(payload?.resolvedList[0]).toMatchObject({
|
|
432
|
+
expect(payload?.resolvedList?.length).toBe(1);
|
|
433
|
+
expect(payload?.resolvedList?.[0]).toMatchObject({
|
|
434
434
|
officeId: "office-a",
|
|
435
435
|
name: "Office A"
|
|
436
436
|
});
|
|
@@ -480,7 +480,7 @@ describe("ListQuery pivotTo tests", () => {
|
|
|
480
480
|
}, listSub));
|
|
481
481
|
testStage("Initial loading state");
|
|
482
482
|
await waitForCall(listSub.next, 1);
|
|
483
|
-
expectSingleListCallAndClear(listSub,
|
|
483
|
+
expectSingleListCallAndClear(listSub, undefined, {
|
|
484
484
|
status: "loading"
|
|
485
485
|
});
|
|
486
486
|
testStage("Data loads");
|
|
@@ -489,7 +489,7 @@ describe("ListQuery pivotTo tests", () => {
|
|
|
489
489
|
status: "loaded"
|
|
490
490
|
});
|
|
491
491
|
testStage("Verify offices linked to emp1 and emp3 are returned");
|
|
492
|
-
expect(payload?.resolvedList
|
|
492
|
+
expect(payload?.resolvedList?.length).toBe(2);
|
|
493
493
|
expect(payload?.resolvedList).toEqual(expect.arrayContaining([expect.objectContaining({
|
|
494
494
|
officeId: "office-a"
|
|
495
495
|
}), expect.objectContaining({
|
|
@@ -537,7 +537,7 @@ describe("ListQuery pivotTo tests", () => {
|
|
|
537
537
|
}, listSub));
|
|
538
538
|
testStage("Initial loading state");
|
|
539
539
|
await waitForCall(listSub.next, 1);
|
|
540
|
-
expectSingleListCallAndClear(listSub,
|
|
540
|
+
expectSingleListCallAndClear(listSub, undefined, {
|
|
541
541
|
status: "loading"
|
|
542
542
|
});
|
|
543
543
|
testStage("Data loads");
|
|
@@ -546,8 +546,8 @@ describe("ListQuery pivotTo tests", () => {
|
|
|
546
546
|
status: "loaded"
|
|
547
547
|
});
|
|
548
548
|
testStage("Verify only office linked to employee 1 is returned");
|
|
549
|
-
expect(payload?.resolvedList
|
|
550
|
-
expect(payload?.resolvedList[0]).toMatchObject({
|
|
549
|
+
expect(payload?.resolvedList?.length).toBe(1);
|
|
550
|
+
expect(payload?.resolvedList?.[0]).toMatchObject({
|
|
551
551
|
officeId: "office-a",
|
|
552
552
|
name: "Office A"
|
|
553
553
|
});
|
|
@@ -578,7 +578,7 @@ describe("ListQuery pivotTo tests", () => {
|
|
|
578
578
|
}, listSub));
|
|
579
579
|
testStage("Initial loading state");
|
|
580
580
|
await waitForCall(listSub.next, 1);
|
|
581
|
-
expectSingleListCallAndClear(listSub,
|
|
581
|
+
expectSingleListCallAndClear(listSub, undefined, {
|
|
582
582
|
status: "loading"
|
|
583
583
|
});
|
|
584
584
|
testStage("Data loads");
|
|
@@ -587,7 +587,7 @@ describe("ListQuery pivotTo tests", () => {
|
|
|
587
587
|
status: "loaded"
|
|
588
588
|
});
|
|
589
589
|
testStage("Verify empty result");
|
|
590
|
-
expect(payload?.resolvedList
|
|
590
|
+
expect(payload?.resolvedList?.length).toBe(0);
|
|
591
591
|
testStage("Verify no additional calls");
|
|
592
592
|
expectNoMoreCalls(listSub);
|
|
593
593
|
});
|
|
@@ -613,7 +613,7 @@ describe("ListQuery pivotTo tests", () => {
|
|
|
613
613
|
}, listSub));
|
|
614
614
|
testStage("Initial loading state verifies query construction succeeded");
|
|
615
615
|
await waitForCall(listSub.next, 1);
|
|
616
|
-
expectSingleListCallAndClear(listSub,
|
|
616
|
+
expectSingleListCallAndClear(listSub, undefined, {
|
|
617
617
|
status: "loading"
|
|
618
618
|
});
|
|
619
619
|
testStage("Verify no additional calls");
|
|
@@ -641,7 +641,7 @@ describe("ListQuery pivotTo tests", () => {
|
|
|
641
641
|
pivotTo: "officeLink"
|
|
642
642
|
}, listSub));
|
|
643
643
|
await waitForCall(listSub.next, 1);
|
|
644
|
-
expectSingleListCallAndClear(listSub,
|
|
644
|
+
expectSingleListCallAndClear(listSub, undefined, {
|
|
645
645
|
status: "loading"
|
|
646
646
|
});
|
|
647
647
|
await waitForCall(listSub.next, 1);
|
|
@@ -649,7 +649,7 @@ describe("ListQuery pivotTo tests", () => {
|
|
|
649
649
|
status: "loaded"
|
|
650
650
|
});
|
|
651
651
|
testStage("Verify data loaded successfully");
|
|
652
|
-
expect(payload?.resolvedList
|
|
652
|
+
expect(payload?.resolvedList).toHaveLength(1);
|
|
653
653
|
expectNoMoreCalls(listSub);
|
|
654
654
|
});
|
|
655
655
|
it("pivotTo with multiple source objects returns all linked targets", async () => {
|
|
@@ -685,7 +685,7 @@ describe("ListQuery pivotTo tests", () => {
|
|
|
685
685
|
pivotTo: "officeLink"
|
|
686
686
|
}, listSub));
|
|
687
687
|
await waitForCall(listSub.next, 1);
|
|
688
|
-
expectSingleListCallAndClear(listSub,
|
|
688
|
+
expectSingleListCallAndClear(listSub, undefined, {
|
|
689
689
|
status: "loading"
|
|
690
690
|
});
|
|
691
691
|
await waitForCall(listSub.next, 1);
|
|
@@ -693,9 +693,8 @@ describe("ListQuery pivotTo tests", () => {
|
|
|
693
693
|
status: "loaded"
|
|
694
694
|
});
|
|
695
695
|
testStage("Verify both linked offices are returned");
|
|
696
|
-
expect(payload?.resolvedList
|
|
697
|
-
|
|
698
|
-
expect(officeIds).toEqual(["office-a", "office-b"]);
|
|
696
|
+
expect(payload?.resolvedList).toHaveLength(2);
|
|
697
|
+
expect(payload?.resolvedList?.map(o => o.$primaryKey).sort()).toEqual(["office-a", "office-b"]);
|
|
699
698
|
expectNoMoreCalls(listSub);
|
|
700
699
|
});
|
|
701
700
|
});
|