From 76b20b404665ebcc14fdf76a331f0524d51165c2 Mon Sep 17 00:00:00 2001 From: Pramod S Date: Thu, 26 Sep 2024 18:49:59 +0200 Subject: [PATCH 1/4] consider data model version when request for data fetch --- react-components/src/data-providers/index.ts | 2 +- .../src/query/useSearchMappedEquipmentFDM.tsx | 33 +++++-------------- 2 files changed, 10 insertions(+), 25 deletions(-) diff --git a/react-components/src/data-providers/index.ts b/react-components/src/data-providers/index.ts index 9d1bdd50714..77fd2578512 100644 --- a/react-components/src/data-providers/index.ts +++ b/react-components/src/data-providers/index.ts @@ -3,4 +3,4 @@ */ export type { FdmInstanceWithView, InstanceReference, AssetInstanceReference } from './types'; -export type { Source, DmsUniqueIdentifier } from './FdmSDK'; +export type { Source, DmsUniqueIdentifier, SimpleSource } from './FdmSDK'; diff --git a/react-components/src/query/useSearchMappedEquipmentFDM.tsx b/react-components/src/query/useSearchMappedEquipmentFDM.tsx index 4faf73b391a..8ecea119f3c 100644 --- a/react-components/src/query/useSearchMappedEquipmentFDM.tsx +++ b/react-components/src/query/useSearchMappedEquipmentFDM.tsx @@ -6,8 +6,8 @@ import { type NodeItem, type FdmSDK, type Source, - type DmsUniqueIdentifier, - type InstanceFilter + type InstanceFilter, + type SimpleSource } from '../data-providers/FdmSDK'; import { useFdm3dDataProvider, useFdmSdk } from '../components/RevealCanvas/SDKProvider'; import { type UseQueryResult, useQuery } from '@tanstack/react-query'; @@ -21,7 +21,7 @@ export type InstancesWithView = { view: Source; instances: NodeItem[] }; export const useSearchMappedEquipmentFDM = ( query: string, - viewsToSearch: DmsUniqueIdentifier[], + viewsToSearch: SimpleSource[], models: AddModelOptions[], instancesFilter: InstanceFilter | undefined, limit: number = 100 @@ -53,7 +53,7 @@ export const useSearchMappedEquipmentFDM = ( if (models.length === 0) { return []; } - const sources = await createSourcesFromViews(viewsToSearch, fdmSdk); + const sources = await createSourcesFromViews(viewsToSearch); const chunkedSources = chunk(sources, 10); if (chunkedSources.length === 0) { chunkedSources.push([]); @@ -127,15 +127,14 @@ const searchNodesWithViewsAndModels = async ( export const useAllMappedEquipmentFDM = ( models: AddModelOptions[], - viewsToSearch: DmsUniqueIdentifier[] + viewsToSearch: SimpleSource[] ): UseQueryResult => { - const fdmSdk = useFdmSdk(); const fdmDataProvider = useFdm3dDataProvider(); return useQuery({ queryKey: ['reveal', 'react-components', 'all-mapped-equipment-fdm', viewsToSearch, models], queryFn: async () => { - const viewSources = await createSourcesFromViews(viewsToSearch, fdmSdk); + const viewSources = await createSourcesFromViews(viewsToSearch); return await fdmDataProvider.listAllMappedFdmNodes(models, viewSources, undefined); }, @@ -189,24 +188,11 @@ function convertQueryNodeItemsToSearchResultsWithViews( }, []); } -async function createSourcesFromViews( - viewsToSearch: DmsUniqueIdentifier[], - fdmSdk: FdmSDK -): Promise { +async function createSourcesFromViews(viewsToSearch: SimpleSource[]): Promise { try { - const dataModelResult = await fdmSdk.listDataModels(); - const viewToVersionMap = new Map( - dataModelResult.items.flatMap((dataModel: { views: Source[] }) => { - return dataModel.views.map( - (view: Source) => [`${view.space}/${view.externalId}`, view.version] as const - ); - }) - ); - return viewsToSearch .map((view) => { - const version = viewToVersionMap.get(`${view.space}/${view.externalId}`); - if (version === undefined) { + if (view.version === undefined) { console.error( `Could not find version for view with space/externalId ${view.space}/${view.externalId}` ); @@ -214,8 +200,7 @@ async function createSourcesFromViews( } return { ...view, - type: 'view' as const, - version + type: 'view' as const }; }) .filter(isDefined); From 01a6e6b221d15a5a515a2cd7c89194b2519b22ac Mon Sep 17 00:00:00 2001 From: Pramod S Date: Thu, 26 Sep 2024 19:06:02 +0200 Subject: [PATCH 2/4] fixed story book example --- react-components/stories/SearchHooks.stories.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/react-components/stories/SearchHooks.stories.tsx b/react-components/stories/SearchHooks.stories.tsx index 05f33c32332..e0a33aa139c 100644 --- a/react-components/stories/SearchHooks.stories.tsx +++ b/react-components/stories/SearchHooks.stories.tsx @@ -42,9 +42,9 @@ import { is360ImageAddOptions } from '../src/components/Reveal3DResources/typeGu const queryClient = new QueryClient(); const sdk = createSdkByUrlToken(); const viewsToSearch = [ - { externalId: 'Equipment', space: 'fdx-boys' }, - { externalId: 'WorkOrderMultiple', space: 'fdx-boys' }, - { externalId: 'WorkOrderSingle', space: 'fdx-boys' } + { externalId: 'Equipment', space: 'fdx-boys', version: 'e040583320d31a' }, + { externalId: 'WorkOrderMultiple', space: 'fdx-boys', version: 'e040583320d31a' }, + { externalId: 'WorkOrderSingle', space: 'fdx-boys', version: 'e040583320d31a' } ]; type Equipment = { From e259df3be9741f3cb4780d0655cf2264bb141c75 Mon Sep 17 00:00:00 2001 From: Pramod S Date: Thu, 26 Sep 2024 19:15:27 +0200 Subject: [PATCH 3/4] simplified creation of Source object from SimpleSource --- .../src/query/useSearchMappedEquipmentFDM.tsx | 30 +++++-------------- 1 file changed, 7 insertions(+), 23 deletions(-) diff --git a/react-components/src/query/useSearchMappedEquipmentFDM.tsx b/react-components/src/query/useSearchMappedEquipmentFDM.tsx index 8ecea119f3c..f054d023cbc 100644 --- a/react-components/src/query/useSearchMappedEquipmentFDM.tsx +++ b/react-components/src/query/useSearchMappedEquipmentFDM.tsx @@ -15,7 +15,6 @@ import { type AddModelOptions } from '@cognite/reveal'; import { isEqual, uniq, chunk } from 'lodash'; import { type Fdm3dDataProvider } from '../data-providers/Fdm3dDataProvider'; import { removeEmptyProperties } from '../utilities/removeEmptyProperties'; -import { isDefined } from '../utilities/isDefined'; export type InstancesWithView = { view: Source; instances: NodeItem[] }; @@ -53,7 +52,7 @@ export const useSearchMappedEquipmentFDM = ( if (models.length === 0) { return []; } - const sources = await createSourcesFromViews(viewsToSearch); + const sources = createSourcesFromViews(viewsToSearch); const chunkedSources = chunk(sources, 10); if (chunkedSources.length === 0) { chunkedSources.push([]); @@ -134,7 +133,7 @@ export const useAllMappedEquipmentFDM = ( return useQuery({ queryKey: ['reveal', 'react-components', 'all-mapped-equipment-fdm', viewsToSearch, models], queryFn: async () => { - const viewSources = await createSourcesFromViews(viewsToSearch); + const viewSources = createSourcesFromViews(viewsToSearch); return await fdmDataProvider.listAllMappedFdmNodes(models, viewSources, undefined); }, @@ -188,24 +187,9 @@ function convertQueryNodeItemsToSearchResultsWithViews( }, []); } -async function createSourcesFromViews(viewsToSearch: SimpleSource[]): Promise { - try { - return viewsToSearch - .map((view) => { - if (view.version === undefined) { - console.error( - `Could not find version for view with space/externalId ${view.space}/${view.externalId}` - ); - return undefined; - } - return { - ...view, - type: 'view' as const - }; - }) - .filter(isDefined); - } catch (e) { - console.error('Error when fetching sources from views', e); - throw e; - } +function createSourcesFromViews(viewsToSearch: SimpleSource[]): Source[] { + return viewsToSearch.map((view) => ({ + ...view, + type: 'view' + })); } From 5571ae48f34fd5ffbc8077a6a9e3f899b03a1c6f Mon Sep 17 00:00:00 2001 From: Pramod S Date: Thu, 26 Sep 2024 19:54:11 +0200 Subject: [PATCH 4/4] enable point cloud or 360 images visiblity when no CAD model in scene --- .../RevealToolbar/LayersContainer/useModelHandlers.tsx | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/react-components/src/components/RevealToolbar/LayersContainer/useModelHandlers.tsx b/react-components/src/components/RevealToolbar/LayersContainer/useModelHandlers.tsx index af60c46d819..785308fdd2b 100644 --- a/react-components/src/components/RevealToolbar/LayersContainer/useModelHandlers.tsx +++ b/react-components/src/components/RevealToolbar/LayersContainer/useModelHandlers.tsx @@ -131,6 +131,8 @@ function setDefaultConfigOnNewHandlers( modelHandlers: ModelLayerHandlers, defaultLayersConfig: DefaultLayersConfiguration | undefined ): void { + const containsCadModel = newHandlers.cadHandlers.length > 0; + const containsPointCloudModel = newHandlers.pointCloudHandlers.length > 0; newHandlers.cadHandlers.forEach((newHandler) => { if (!modelHandlers.cadHandlers.some((oldHandler) => oldHandler.isSame(newHandler))) { newHandler.setVisibility(defaultLayersConfig?.cad ?? true); @@ -139,13 +141,17 @@ function setDefaultConfigOnNewHandlers( newHandlers.pointCloudHandlers.forEach((newHandler) => { if (!modelHandlers.pointCloudHandlers.some((oldHandler) => oldHandler.isSame(newHandler))) { - newHandler.setVisibility(defaultLayersConfig?.pointcloud ?? true); + newHandler.setVisibility(containsCadModel ? defaultLayersConfig?.pointcloud ?? true : true); } }); newHandlers.image360Handlers.forEach((newHandler) => { if (!modelHandlers.image360Handlers.some((oldHandler) => oldHandler.isSame(newHandler))) { - newHandler.setVisibility(defaultLayersConfig?.image360 ?? true); + if (!containsCadModel && !containsPointCloudModel) { + newHandler.setVisibility(true); + } else { + newHandler.setVisibility(defaultLayersConfig?.image360 ?? true); + } } }); }