a6287fc06d
* init db migration * WIP store view * create service call * WIP insertion * insert sort of works * moving code arounmd * creation tests * avoid duplicate entries * fixes from main * basic group retrieval works * group filtering works * WIP view listing * filter by acl * fixes + WIP single group retrieval * wip pivot * more pivot query fixes * tests fixed after pivot * views list tests * fixing test command * business plan only checks * more tests for coverage * .dts import fix * cli fix * anutha one * auth policy tests for business plan access * WIP saved views panel base * BE listing adjustments * WIP group rendering * group render done * WIP post create cache updates * listing fine? * my vs theirs * auto open * minor fixes * click load omg * nicely loading views * type fix * less spammy loading * another type fix: * more lint fix * test fix * codecov disable * moar coverage * fix sidebar flashin * more test coverage * more test cvoverage * minor adfjustments * adj * saved view wipe fixes * CSR viewer * more improvements * extra feature flag checks * lint fix * feature flags fix * more test fixes
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 views by their IDs
|
|
*/
|
|
getSavedViews: 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
|