From 37e519b74cebf99e873c95aa4826d01fa819f9a6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Flatval?= Date: Thu, 4 Jul 2024 10:54:09 +0200 Subject: [PATCH 1/4] fix(react-components): deduplicate result models from `useModelsForInstanceQuery` --- .../src/query/useModelsForInstanceQuery.ts | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/react-components/src/query/useModelsForInstanceQuery.ts b/react-components/src/query/useModelsForInstanceQuery.ts index 5cde9215f1b..599da2274b5 100644 --- a/react-components/src/query/useModelsForInstanceQuery.ts +++ b/react-components/src/query/useModelsForInstanceQuery.ts @@ -16,6 +16,12 @@ import { isAssetInstance, isDmsInstance } from '../utilities/types'; +import { uniqBy } from 'lodash'; +import { + is360ImageDataModelAddOptions, + is360ImageEventsAddOptions +} from '../components/Reveal3DResources/typeGuards'; +import { assertNever } from '../utilities/assertNever'; export const useModelsForInstanceQuery = ( instance: InstanceReference | undefined @@ -53,9 +59,27 @@ async function getModelsForAssetInstance( cogniteClient ); - return ( - await Promise.all([cadModelsPromise, pointCloudModelsPromise, image360CollectionsPromise]) - ).flat(); + return deduplicateModels( + ( + await Promise.all([cadModelsPromise, pointCloudModelsPromise, image360CollectionsPromise]) + ).flat() + ); +} + +function deduplicateModels(models: TaggedAddResourceOptions[]): TaggedAddResourceOptions[] { + return uniqBy(models, getAddOptionsKey); +} + +function getAddOptionsKey(model: TaggedAddResourceOptions): string { + if (model.type === 'cad' || model.type === 'pointcloud') { + return `${model.type}-${model.addOptions.modelId}-${model.addOptions.revisionId}`; + } else if (model.type === 'image360' && is360ImageDataModelAddOptions(model.addOptions)) { + return `${model.type}-${model.addOptions.externalId}/${model.addOptions.space}`; + } else if (model.type === 'image360' && is360ImageEventsAddOptions(model.addOptions)) { + return `${model.type}-${model.addOptions.siteId}`; + } else { + throw Error('Unrecognized add option type'); + } } async function getModelsForFdmInstance( From 54882c4a75b45fa96efdbcbcbd12357b286a159e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Flatval?= Date: Thu, 4 Jul 2024 11:03:05 +0200 Subject: [PATCH 2/4] chore: lint fix --- react-components/src/query/useModelsForInstanceQuery.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/react-components/src/query/useModelsForInstanceQuery.ts b/react-components/src/query/useModelsForInstanceQuery.ts index 599da2274b5..e44bf980221 100644 --- a/react-components/src/query/useModelsForInstanceQuery.ts +++ b/react-components/src/query/useModelsForInstanceQuery.ts @@ -21,7 +21,6 @@ import { is360ImageDataModelAddOptions, is360ImageEventsAddOptions } from '../components/Reveal3DResources/typeGuards'; -import { assertNever } from '../utilities/assertNever'; export const useModelsForInstanceQuery = ( instance: InstanceReference | undefined From 1fb76cd33c08d6c48761349eb9340d89460012a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Flatval?= Date: Thu, 4 Jul 2024 11:16:27 +0200 Subject: [PATCH 3/4] chore: move function to separate place --- .../src/query/useModelsForInstanceQuery.ts | 25 ++++--------------- .../src/utilities/createAddOptionsKey.ts | 17 +++++++++++++ 2 files changed, 22 insertions(+), 20 deletions(-) create mode 100644 react-components/src/utilities/createAddOptionsKey.ts diff --git a/react-components/src/query/useModelsForInstanceQuery.ts b/react-components/src/query/useModelsForInstanceQuery.ts index e44bf980221..f2072dcd0b5 100644 --- a/react-components/src/query/useModelsForInstanceQuery.ts +++ b/react-components/src/query/useModelsForInstanceQuery.ts @@ -21,6 +21,7 @@ import { is360ImageDataModelAddOptions, is360ImageEventsAddOptions } from '../components/Reveal3DResources/typeGuards'; +import { createAddOptionsKey } from '../utilities/createAddOptionsKey'; export const useModelsForInstanceQuery = ( instance: InstanceReference | undefined @@ -58,27 +59,11 @@ async function getModelsForAssetInstance( cogniteClient ); - return deduplicateModels( - ( - await Promise.all([cadModelsPromise, pointCloudModelsPromise, image360CollectionsPromise]) - ).flat() - ); -} - -function deduplicateModels(models: TaggedAddResourceOptions[]): TaggedAddResourceOptions[] { - return uniqBy(models, getAddOptionsKey); -} + const results = ( + await Promise.all([cadModelsPromise, pointCloudModelsPromise, image360CollectionsPromise]) + ).flat(); -function getAddOptionsKey(model: TaggedAddResourceOptions): string { - if (model.type === 'cad' || model.type === 'pointcloud') { - return `${model.type}-${model.addOptions.modelId}-${model.addOptions.revisionId}`; - } else if (model.type === 'image360' && is360ImageDataModelAddOptions(model.addOptions)) { - return `${model.type}-${model.addOptions.externalId}/${model.addOptions.space}`; - } else if (model.type === 'image360' && is360ImageEventsAddOptions(model.addOptions)) { - return `${model.type}-${model.addOptions.siteId}`; - } else { - throw Error('Unrecognized add option type'); - } + return uniqBy(results, createAddOptionsKey); } async function getModelsForFdmInstance( diff --git a/react-components/src/utilities/createAddOptionsKey.ts b/react-components/src/utilities/createAddOptionsKey.ts new file mode 100644 index 00000000000..f5397ea8e0e --- /dev/null +++ b/react-components/src/utilities/createAddOptionsKey.ts @@ -0,0 +1,17 @@ +import { + is360ImageDataModelAddOptions, + is360ImageEventsAddOptions +} from '../components/Reveal3DResources/typeGuards'; +import { TaggedAddResourceOptions } from '../components/Reveal3DResources/types'; + +export function createAddOptionsKey(model: TaggedAddResourceOptions): string { + if (model.type === 'cad' || model.type === 'pointcloud') { + return `${model.type}-${model.addOptions.modelId}-${model.addOptions.revisionId}`; + } else if (model.type === 'image360' && is360ImageDataModelAddOptions(model.addOptions)) { + return `${model.type}-${model.addOptions.externalId}/${model.addOptions.space}`; + } else if (model.type === 'image360' && is360ImageEventsAddOptions(model.addOptions)) { + return `${model.type}-${model.addOptions.siteId}`; + } else { + throw Error('Unrecognized add option type'); + } +} From 677193b1394f1906d27c66f841cf5d97ece2626d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Flatval?= Date: Thu, 4 Jul 2024 11:44:27 +0200 Subject: [PATCH 4/4] chore: lint fix --- react-components/src/query/useModelsForInstanceQuery.ts | 4 ---- react-components/src/utilities/createAddOptionsKey.ts | 5 ++++- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/react-components/src/query/useModelsForInstanceQuery.ts b/react-components/src/query/useModelsForInstanceQuery.ts index f2072dcd0b5..3cee5c41a8d 100644 --- a/react-components/src/query/useModelsForInstanceQuery.ts +++ b/react-components/src/query/useModelsForInstanceQuery.ts @@ -17,10 +17,6 @@ import { isDmsInstance } from '../utilities/types'; import { uniqBy } from 'lodash'; -import { - is360ImageDataModelAddOptions, - is360ImageEventsAddOptions -} from '../components/Reveal3DResources/typeGuards'; import { createAddOptionsKey } from '../utilities/createAddOptionsKey'; export const useModelsForInstanceQuery = ( diff --git a/react-components/src/utilities/createAddOptionsKey.ts b/react-components/src/utilities/createAddOptionsKey.ts index f5397ea8e0e..f8dd5b8ed01 100644 --- a/react-components/src/utilities/createAddOptionsKey.ts +++ b/react-components/src/utilities/createAddOptionsKey.ts @@ -1,8 +1,11 @@ +/*! + * Copyright 2024 Cognite AS + */ import { is360ImageDataModelAddOptions, is360ImageEventsAddOptions } from '../components/Reveal3DResources/typeGuards'; -import { TaggedAddResourceOptions } from '../components/Reveal3DResources/types'; +import { type TaggedAddResourceOptions } from '../components/Reveal3DResources/types'; export function createAddOptionsKey(model: TaggedAddResourceOptions): string { if (model.type === 'cad' || model.type === 'pointcloud') {