21e8ec3e27
* canUpdate auth policy * delete mutation WIP * backend works * frontend working * minor adjustments * test fix * switch to new empty state * beefing up coverage * cr fix
62 lines
1.8 KiB
TypeScript
62 lines
1.8 KiB
TypeScript
import { defineRequestDataloaders } from '@/modules/shared/helpers/graphqlHelper'
|
|
import type {
|
|
SavedView,
|
|
SavedViewGroup
|
|
} from '@/modules/viewer/domain/types/savedViews'
|
|
import {
|
|
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}`
|
|
}
|
|
)
|
|
}
|
|
}
|
|
}
|
|
)
|
|
|
|
export default dataLoadersDefinition
|