@speckle/shared
Version:
Shared code between various Speckle JS packages
45 lines • 2.1 kB
JavaScript
;
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