From 8fe6fc7d5ed6617b4fc72568ece9ff5cd3ffb622 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Flatval?= Date: Mon, 16 Sep 2024 15:01:09 +0200 Subject: [PATCH 1/4] feat(react-components): support newer scene -> 3d-model connection --- .../src/hooks/scenes/use3dScenes.tsx | 5 +++-- .../src/hooks/scenes/useSceneConfig.ts | 18 +++++++++++------- .../utilities/tryGetModelIdFromExternalId.ts | 16 ++++++++++++++++ 3 files changed, 30 insertions(+), 9 deletions(-) create mode 100644 react-components/src/utilities/tryGetModelIdFromExternalId.ts diff --git a/react-components/src/hooks/scenes/use3dScenes.tsx b/react-components/src/hooks/scenes/use3dScenes.tsx index c0bc9db9c50..f12bd377c77 100644 --- a/react-components/src/hooks/scenes/use3dScenes.tsx +++ b/react-components/src/hooks/scenes/use3dScenes.tsx @@ -35,6 +35,7 @@ import { type TRANSFORMATION_SOURCE, transformationSourceWithProperties } from './types'; +import { tryGetModelIdFromExternalId } from '../../utilities/tryGetModelIdFromExternalId'; export type Space = string; export type ExternalId = string; @@ -173,10 +174,10 @@ function populateSceneMapWithModels( const properties = Object.values(Object.values(edge.properties)[0])[0]; - const newModelId = Number(edge.endNode.externalId); + const newModelId = tryGetModelIdFromExternalId(edge.endNode.externalId); const newModelRevisionId = Number(properties?.revisionId); - if (isNaN(newModelId) || isNaN(newModelRevisionId)) { + if (newModelId === undefined || isNaN(newModelRevisionId)) { return; } diff --git a/react-components/src/hooks/scenes/useSceneConfig.ts b/react-components/src/hooks/scenes/useSceneConfig.ts index b32554f77ee..9428fbb903c 100644 --- a/react-components/src/hooks/scenes/useSceneConfig.ts +++ b/react-components/src/hooks/scenes/useSceneConfig.ts @@ -31,6 +31,7 @@ import { type SceneConfigurationProperties, type TRANSFORMATION_SOURCE } from './types'; +import { tryGetModelIdFromExternalId } from '../../utilities/tryGetModelIdFromExternalId'; const DefaultScene: Scene = { sceneConfiguration: { @@ -140,14 +141,17 @@ function getSceneModels(sceneResponse: SceneResponse): CadOrPointCloudModel[] { const sceneModels = sceneResponse.items.sceneModels; sceneModels.forEach((sceneModel) => { const sceneModelProperties = extractProperties(sceneModel.properties); - if (!isNaN(Number(sceneModel.endNode.externalId))) { - const model: CadOrPointCloudModel = { - modelId: Number(sceneModel.endNode.externalId), - ...sceneModelProperties - }; - - models.push(model); + const parsedModelId = tryGetModelIdFromExternalId(sceneModel.endNode.externalId); + if (parsedModelId === undefined) { + throw Error(`Could not parse model Id from externalId ${sceneModel.endNode.externalId}`); } + + const model: CadOrPointCloudModel = { + modelId: parsedModelId, + ...sceneModelProperties + }; + + models.push(model); }); } return models; diff --git a/react-components/src/utilities/tryGetModelIdFromExternalId.ts b/react-components/src/utilities/tryGetModelIdFromExternalId.ts new file mode 100644 index 00000000000..9cff3e62b9e --- /dev/null +++ b/react-components/src/utilities/tryGetModelIdFromExternalId.ts @@ -0,0 +1,16 @@ +import { getModelIdFromExternalId } from '../data-providers/core-dm-provider/getCdfIdFromExternalId'; + +export function tryGetModelIdFromExternalId(externalId: string): number | undefined { + const legacyModelId = Number(externalId); + if (!isNaN(legacyModelId)) { + return legacyModelId; + } + + const coreDmModelId = getModelIdFromExternalId(externalId); + + if (!isNaN(coreDmModelId)) { + return coreDmModelId; + } + + return undefined; +} From 45bdc55c4fce935e94aa332ffbd88d07fbfde428 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Flatval?= Date: Mon, 16 Sep 2024 15:23:12 +0200 Subject: [PATCH 2/4] chore: lint fix --- react-components/src/utilities/tryGetModelIdFromExternalId.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/react-components/src/utilities/tryGetModelIdFromExternalId.ts b/react-components/src/utilities/tryGetModelIdFromExternalId.ts index 9cff3e62b9e..fa7531ad603 100644 --- a/react-components/src/utilities/tryGetModelIdFromExternalId.ts +++ b/react-components/src/utilities/tryGetModelIdFromExternalId.ts @@ -1,3 +1,6 @@ +/*! + * Copyright 2024 Cognite AS + */ import { getModelIdFromExternalId } from '../data-providers/core-dm-provider/getCdfIdFromExternalId'; export function tryGetModelIdFromExternalId(externalId: string): number | undefined { From 2ce9b9f46fa623c61330f5be4e7864fb3eb081f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Flatval?= Date: Mon, 16 Sep 2024 16:24:22 +0200 Subject: [PATCH 3/4] chore: proper rename --- react-components/src/utilities/tryGetModelIdFromExternalId.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/react-components/src/utilities/tryGetModelIdFromExternalId.ts b/react-components/src/utilities/tryGetModelIdFromExternalId.ts index fa7531ad603..0423da66633 100644 --- a/react-components/src/utilities/tryGetModelIdFromExternalId.ts +++ b/react-components/src/utilities/tryGetModelIdFromExternalId.ts @@ -1,7 +1,7 @@ /*! * Copyright 2024 Cognite AS */ -import { getModelIdFromExternalId } from '../data-providers/core-dm-provider/getCdfIdFromExternalId'; +import { getModelIdFromExternalId as getCoreDmModelIdFromExternalId } from '../data-providers/core-dm-provider/getCdfIdFromExternalId'; export function tryGetModelIdFromExternalId(externalId: string): number | undefined { const legacyModelId = Number(externalId); @@ -9,7 +9,7 @@ export function tryGetModelIdFromExternalId(externalId: string): number | undefi return legacyModelId; } - const coreDmModelId = getModelIdFromExternalId(externalId); + const coreDmModelId = getCoreDmModelIdFromExternalId(externalId); if (!isNaN(coreDmModelId)) { return coreDmModelId; From 3405fec76c9f41d4e1e02449381726ad4fd9fcf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A5kon=20Flatval?= Date: Mon, 16 Sep 2024 16:31:45 +0200 Subject: [PATCH 4/4] chore: bump version --- react-components/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/react-components/package.json b/react-components/package.json index 2a5f41575d6..f1bb0589e29 100644 --- a/react-components/package.json +++ b/react-components/package.json @@ -1,6 +1,6 @@ { "name": "@cognite/reveal-react-components", - "version": "0.58.4", + "version": "0.59.0", "exports": { ".": { "import": "./dist/index.js",