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", 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..0423da66633 --- /dev/null +++ b/react-components/src/utilities/tryGetModelIdFromExternalId.ts @@ -0,0 +1,19 @@ +/*! + * Copyright 2024 Cognite AS + */ +import { getModelIdFromExternalId as getCoreDmModelIdFromExternalId } 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 = getCoreDmModelIdFromExternalId(externalId); + + if (!isNaN(coreDmModelId)) { + return coreDmModelId; + } + + return undefined; +}