@speckle/shared
Version:
Shared code between various Speckle JS packages
42 lines • 1.95 kB
JavaScript
import { err, ok } from 'true-myth/result';
import { DashboardNotFoundError, DashboardProjectsNotEnoughPermissionsError, DashboardsNotEnabledError, WorkspacePlanNoFeatureAccessError } from '../domain/authErrors.js';
import { isWorkspaceFeatureFlagOn, WorkspaceFeatureFlags } from '../../workspaces/index.js';
import { ensureMinimumProjectRoleFragment } from './projects.js';
export const ensureDashboardsEnabledFragment = (loaders) => async () => {
const env = await loaders.getEnv();
if (!env.FF_DASHBOARDS_MODULE_ENABLED)
return err(new DashboardsNotEnabledError());
return ok();
};
export const ensureWorkspaceDashboardsFeatureAccessFragment = (loaders) => async ({ workspaceId }) => {
const plan = await loaders.getWorkspacePlan({ workspaceId });
if (!plan)
return err(new WorkspacePlanNoFeatureAccessError());
const isFlagOn = isWorkspaceFeatureFlagOn({
workspaceFeatureFlags: plan.featureFlags,
feature: WorkspaceFeatureFlags.dashboards
});
if (!isFlagOn)
return err(new WorkspacePlanNoFeatureAccessError());
return ok();
};
export const ensureDashboardProjectsReadAccess = (loaders) => async ({ userId, dashboardId }) => {
const dashboard = await loaders.getDashboard({ dashboardId });
if (!dashboard)
return err(new DashboardNotFoundError());
const allProjectResults = await Promise.all(dashboard.projectIds.map(async (projectId) => {
return [
projectId,
await ensureMinimumProjectRoleFragment(loaders)({ projectId, userId })
];
}));
const projectAccessErrors = allProjectResults.filter(([, e]) => e.isErr);
return projectAccessErrors.length
? err(new DashboardProjectsNotEnoughPermissionsError({
payload: {
projectIds: projectAccessErrors.map(([projectId]) => projectId)
}
}))
: ok();
};
//# sourceMappingURL=dashboards.js.map