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); + } } }); } 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..f054d023cbc 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'; @@ -15,13 +15,12 @@ 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[] }; export const useSearchMappedEquipmentFDM = ( query: string, - viewsToSearch: DmsUniqueIdentifier[], + viewsToSearch: SimpleSource[], models: AddModelOptions[], instancesFilter: InstanceFilter | undefined, limit: number = 100 @@ -53,7 +52,7 @@ export const useSearchMappedEquipmentFDM = ( if (models.length === 0) { return []; } - const sources = await createSourcesFromViews(viewsToSearch, fdmSdk); + const sources = createSourcesFromViews(viewsToSearch); const chunkedSources = chunk(sources, 10); if (chunkedSources.length === 0) { chunkedSources.push([]); @@ -127,15 +126,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 = createSourcesFromViews(viewsToSearch); return await fdmDataProvider.listAllMappedFdmNodes(models, viewSources, undefined); }, @@ -189,38 +187,9 @@ function convertQueryNodeItemsToSearchResultsWithViews( }, []); } -async function createSourcesFromViews( - viewsToSearch: DmsUniqueIdentifier[], - fdmSdk: FdmSDK -): 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) { - console.error( - `Could not find version for view with space/externalId ${view.space}/${view.externalId}` - ); - return undefined; - } - return { - ...view, - type: 'view' as const, - version - }; - }) - .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' + })); } 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 = {