UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

45 lines 2.1 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.canSetSavedViewAsHomeViewPolicy = void 0; const result_1 = require("true-myth/result"); const authErrors_js_1 = require("../../../domain/authErrors.js"); const savedViews_js_1 = require("../../../fragments/savedViews.js"); const types_js_1 = require("../../../domain/savedViews/types.js"); const route_js_1 = require("../../../../viewer/helpers/route.js"); const canSetSavedViewAsHomeViewPolicy = (loaders) => async ({ userId, projectId, savedViewId }) => { const canDoUpdate = await (0, savedViews_js_1.ensureCanAccessSavedViewFragment)(loaders)({ userId, projectId, savedViewId, access: savedViews_js_1.WriteTypes.SetHomeView }); if (canDoUpdate.isErr) { return (0, result_1.err)(canDoUpdate.error); } const view = await loaders.getSavedView({ projectId, savedViewId }); if (!view) return (0, result_1.err)(new authErrors_js_1.SavedViewNotFoundError()); // Must be a shared view to be set as home view const isAuthorOnly = view.visibility === types_js_1.SavedViewVisibility.authorOnly; if (isAuthorOnly) { return (0, result_1.err)(new authErrors_js_1.SavedViewInvalidUpdateError({ message: 'A view must be shared to be set as a home view' })); } // Must not be federated const resourceIds = (0, route_js_1.resourceBuilder)().addResources(view.resourceIds); const firstResource = resourceIds.toResources().at(0); const modelResource = firstResource && (0, route_js_1.isModelResource)(firstResource) ? firstResource : undefined; const isSingleModelView = resourceIds.length === 1 && modelResource; if (!isSingleModelView) { return (0, result_1.err)(new authErrors_js_1.SavedViewInvalidUpdateError({ message: 'Only single model views can be set as home views' })); } return (0, result_1.ok)(); }; exports.canSetSavedViewAsHomeViewPolicy = canSetSavedViewAsHomeViewPolicy; //# sourceMappingURL=canSetAsHomeView.js.map