0c957ed9cc
* frontend update works * starting viewer resources saved view tests * test fix * viewerResources new resolver + adjustment for home views * create/update view fixing up and tests * sort of works? * fixing more race conditions * loading preview * disable home view stuff when federated * fixing up links * tests and home view fix
78 lines
2.4 KiB
TypeScript
78 lines
2.4 KiB
TypeScript
import { defineRequestDataloaders } from '@/modules/shared/helpers/graphqlHelper'
|
|
import type {
|
|
SavedView,
|
|
SavedViewGroup
|
|
} from '@/modules/viewer/domain/types/savedViews'
|
|
import {
|
|
getModelHomeSavedViewsFactory,
|
|
getSavedViewGroupsFactory,
|
|
getSavedViewsFactory
|
|
} from '@/modules/viewer/repositories/savedViews'
|
|
import type { Nullable } from '@speckle/shared'
|
|
|
|
declare module '@/modules/core/loaders' {
|
|
interface ModularizedDataLoaders extends ReturnType<typeof dataLoadersDefinition> {}
|
|
}
|
|
|
|
const dataLoadersDefinition = defineRequestDataloaders(
|
|
({ createLoader, deps: { db } }) => {
|
|
const getSavedViewGroups = getSavedViewGroupsFactory({ db })
|
|
const getSavedViews = getSavedViewsFactory({ db })
|
|
|
|
return {
|
|
savedViews: {
|
|
/**
|
|
* Get a saved view group by ID. Can also handle unpersisted ungrouped groups, just make sure
|
|
* you use their encoded IDs.
|
|
*/
|
|
getSavedViewGroup: createLoader<
|
|
{ groupId: string; projectId: string },
|
|
Nullable<SavedViewGroup>,
|
|
string
|
|
>(
|
|
async (ids) => {
|
|
const groups = await getSavedViewGroups({ groupIds: ids.slice() })
|
|
return ids.map(({ groupId }) => groups[groupId] || null)
|
|
},
|
|
{
|
|
cacheKeyFn: ({ groupId, projectId }) => `${groupId}-${projectId}`
|
|
}
|
|
),
|
|
/**
|
|
* Get saved view by its ID
|
|
*/
|
|
getSavedView: createLoader<
|
|
{ viewId: string; projectId: string },
|
|
Nullable<SavedView>,
|
|
string
|
|
>(
|
|
async (ids) => {
|
|
const views = await getSavedViews({ viewIds: ids.slice() })
|
|
return ids.map(({ viewId }) => views[viewId] || null)
|
|
},
|
|
{
|
|
cacheKeyFn: ({ viewId, projectId }) => `${viewId}-${projectId}`
|
|
}
|
|
),
|
|
getModelHomeSavedView: createLoader<
|
|
{ modelId: string; projectId: string },
|
|
Nullable<SavedView>,
|
|
string
|
|
>(
|
|
async (ids) => {
|
|
const views = await getModelHomeSavedViewsFactory({ db })({
|
|
requests: ids.slice()
|
|
})
|
|
return ids.map(({ modelId }) => views[modelId] || null)
|
|
},
|
|
{
|
|
cacheKeyFn: ({ modelId, projectId }) => `${modelId}-${projectId}`
|
|
}
|
|
)
|
|
}
|
|
}
|
|
}
|
|
)
|
|
|
|
export default dataLoadersDefinition
|