diff --git a/services/web/app/src/Features/Subscription/TeamInvitesController.js b/services/web/app/src/Features/Subscription/TeamInvitesController.js index 2a4179b4a3..5745e981fd 100644 --- a/services/web/app/src/Features/Subscription/TeamInvitesController.js +++ b/services/web/app/src/Features/Subscription/TeamInvitesController.js @@ -14,7 +14,6 @@ const EmailHandler = require('../Email/EmailHandler') const { RateLimiter } = require('../../infrastructure/RateLimiter') const Modules = require('../../infrastructure/Modules') const UserAuditLogHandler = require('../User/UserAuditLogHandler') -const SplitTestHandler = require('../SplitTests/SplitTestHandler') const rateLimiters = { resendGroupInvite: new RateLimiter('resend-group-invite', { @@ -73,12 +72,6 @@ async function viewInvite(req, res, next) { return ErrorController.notFound(req, res) } - const { variant } = await SplitTestHandler.promises.getAssignment( - req, - res, - 'team-invite-react' - ) - let validationStatus = new Map() if (userId) { const personalSubscription = @@ -152,30 +145,16 @@ async function viewInvite(req, res, next) { logger.error({ err }, 'error getting subscription admin email') } - if (variant === 'enabled') { - return res.render('subscriptions/team/invite-react', { - inviterName: invite.inviterName, - inviteToken: invite.token, - hasIndividualRecurlySubscription, - expired: req.query.expired, - userRestrictions: Array.from(req.userRestrictions || []), - currentManagedUserAdminEmail, - groupSSOActive, - subscriptionId: subscription._id.toString(), - }) - } else { - return res.render('subscriptions/team/invite', { - inviterName: invite.inviterName, - inviteToken: invite.token, - hasIndividualRecurlySubscription, - appName: settings.appName, - expired: req.query.expired, - userRestrictions: Array.from(req.userRestrictions || []), - currentManagedUserAdminEmail, - groupSSOActive, - subscriptionId: subscription._id.toString(), - }) - } + return res.render('subscriptions/team/invite', { + inviterName: invite.inviterName, + inviteToken: invite.token, + hasIndividualRecurlySubscription, + expired: req.query.expired, + userRestrictions: Array.from(req.userRestrictions || []), + currentManagedUserAdminEmail, + groupSSOActive, + subscriptionId: subscription._id.toString(), + }) } } else { const userByEmail = await UserGetter.promises.getUserByMainEmail( diff --git a/services/web/app/views/subscriptions/team/invite-react.pug b/services/web/app/views/subscriptions/team/invite-react.pug deleted file mode 100644 index 803de6a72d..0000000000 --- a/services/web/app/views/subscriptions/team/invite-react.pug +++ /dev/null @@ -1,17 +0,0 @@ -extends ../../layout-marketing - -block entrypointVar - - entrypoint = 'pages/user/subscription/invite' - - -block append meta - meta(name="ol-hasIndividualRecurlySubscription" data-type="boolean" content=hasIndividualRecurlySubscription) - meta(name="ol-inviterName" date-type="string" content=inviterName) - meta(name="ol-inviteToken" data-type="string" content=inviteToken) - meta(name="ol-currentManagedUserAdminEmail" data-type="string" content=currentManagedUserAdminEmail) - meta(name="ol-expired" data-type="boolean" content=expired) - meta(name="ol-groupSSOActive" data-type="boolean" content=groupSSOActive) - meta(name="ol-subscriptionId" data-type="string" content=subscriptionId) - -block content - main.content.content-alt#invite-root \ No newline at end of file diff --git a/services/web/app/views/subscriptions/team/invite.pug b/services/web/app/views/subscriptions/team/invite.pug index 07b1a75253..803de6a72d 100644 --- a/services/web/app/views/subscriptions/team/invite.pug +++ b/services/web/app/views/subscriptions/team/invite.pug @@ -1,48 +1,17 @@ -extends ../../layout +extends ../../layout-marketing + +block entrypointVar + - entrypoint = 'pages/user/subscription/invite' + block append meta meta(name="ol-hasIndividualRecurlySubscription" data-type="boolean" content=hasIndividualRecurlySubscription) - meta(name="ol-inviteToken" content=inviteToken) + meta(name="ol-inviterName" date-type="string" content=inviterName) + meta(name="ol-inviteToken" data-type="string" content=inviteToken) + meta(name="ol-currentManagedUserAdminEmail" data-type="string" content=currentManagedUserAdminEmail) + meta(name="ol-expired" data-type="boolean" content=expired) meta(name="ol-groupSSOActive" data-type="boolean" content=groupSSOActive) meta(name="ol-subscriptionId" data-type="string" content=subscriptionId) block content - main.content.content-alt.team-invite#main-content - .container - .row - .col-md-8.col-md-offset-2 - if (expired) - .alert.alert-warning #{translate("email_link_expired")} - - .row.row-spaced - .col-md-8.col-md-offset-2.text-center(ng-cloak) - .card(ng-controller="TeamInviteController") - .page-header - h1.text-centered(ng-non-bindable) !{translate("invited_to_group", {inviterName: inviterName, appName: appName}, [{name: 'span', attrs: {class: 'team-invite-name'}}])} - - div(ng-show="view =='restrictedByManagedGroup'") - .alert.alert-info - strong #{translate("you_cant_join_this_group_subscription")} - p !{translate("your_account_is_managed_by_admin_cant_join_additional_group", {admin: currentManagedUserAdminEmail}, [{name: 'a', attrs: {href: '/learn/how-to/Understanding_Managed_Overleaf_Accounts'}}])} - - div(ng-show="view =='hasIndividualRecurlySubscription'") - p #{translate("cancel_personal_subscription_first")} - .alert.alert-danger(ng-show="cancel_error" ng-cloak) #{translate("something_went_wrong_canceling_your_subscription")} - p - a.btn.btn.btn-secondary(ng-click="keepPersonalSubscription()", ng-disabled="inflight") #{translate("not_now")} - |   - a.btn.btn.btn-primary(ng-click="cancelPersonalSubscription()", ng-disabled="inflight") #{translate("cancel_your_subscription")} - - div(ng-show="view =='teamInvite'") - p #{translate("join_team_explanation", {appName: appName})} - if (!expired) - p - a.btn.btn-secondary(href="/project") #{translate("not_now")} - |   - a.btn.btn.btn-primary(ng-click="joinTeam()", ng-disabled="inflight") #{translate("accept_invitation")} - - div(ng-show="view =='inviteAccepted'") - - var doneLink = groupSSOActive ? `/subscription/${subscriptionId}/sso_enrollment` : '/project' - p(ng-non-bindable) #{translate("joined_team", {inviterName: inviterName})} - p - a.btn.btn.btn-primary(href=doneLink) #{translate("done")} + main.content.content-alt#invite-root \ No newline at end of file diff --git a/services/web/frontend/js/main.js b/services/web/frontend/js/main.js index 7c2c587a97..1472a803ef 100644 --- a/services/web/frontend/js/main.js +++ b/services/web/frontend/js/main.js @@ -11,7 +11,6 @@ import './main/token-access' // used in project/token/access import './main/event' // used in various controllers import './main/system-messages' // used in project/editor -import './main/subscription/team-invite-controller' // used in subscriptions/team/invite import './directives/eventTracking' // used in lots of places import './features/cookie-banner' import '../../modules/modules-main' diff --git a/services/web/frontend/js/main/subscription/team-invite-controller.js b/services/web/frontend/js/main/subscription/team-invite-controller.js deleted file mode 100644 index 6a45904e96..0000000000 --- a/services/web/frontend/js/main/subscription/team-invite-controller.js +++ /dev/null @@ -1,71 +0,0 @@ -/* eslint-disable - max-len, - no-return-assign, -*/ -// TODO: This file was created by bulk-decaffeinate. -// Fix any style issues and re-enable lint. -/* - * decaffeinate suggestions: - * DS102: Remove unnecessary code created because of implicit returns - * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md - */ -import App from '../../base' -import getMeta from '../../utils/meta' -import { debugConsole } from '@/utils/debugging' - -export default App.controller('TeamInviteController', [ - '$scope', - '$http', - function ($scope, $http) { - $scope.inflight = false - - const hideJoinSubscription = getMeta('ol-cannot-join-subscription') - const hasIndividualRecurlySubscription = getMeta( - 'ol-hasIndividualRecurlySubscription' - ) - - if (hideJoinSubscription) { - $scope.view = 'restrictedByManagedGroup' - } else if (hasIndividualRecurlySubscription) { - $scope.view = 'hasIndividualRecurlySubscription' - } else { - $scope.view = 'teamInvite' - } - - $scope.keepPersonalSubscription = () => ($scope.view = 'teamInvite') - - $scope.cancelPersonalSubscription = function () { - $scope.inflight = true - const request = $http.post('/user/subscription/cancel', { - _csrf: window.csrfToken, - }) - request.then(function () { - $scope.inflight = false - return ($scope.view = 'teamInvite') - }) - return request.catch(() => { - $scope.inflight = false - $scope.cancel_error = true - debugConsole.error('the request failed') - }) - } - - return ($scope.joinTeam = function () { - $scope.inflight = true - const inviteToken = getMeta('ol-inviteToken') - const request = $http.put(`/subscription/invites/${inviteToken}/`, { - _csrf: window.csrfToken, - }) - request.then(function (response) { - const { status } = response - $scope.inflight = false - $scope.view = 'inviteAccepted' - if (status !== 200) { - // assume request worked - return ($scope.requestSent = false) - } - }) - return request.catch(() => debugConsole.error('the request failed')) - }) - }, -]) diff --git a/services/web/test/unit/src/Subscription/TeamInvitesControllerTests.js b/services/web/test/unit/src/Subscription/TeamInvitesControllerTests.js index 1506492d96..a99f9bdc81 100644 --- a/services/web/test/unit/src/Subscription/TeamInvitesControllerTests.js +++ b/services/web/test/unit/src/Subscription/TeamInvitesControllerTests.js @@ -195,54 +195,14 @@ describe('TeamInvitesController', function () { }) }) - describe('Feature rollout of React migration', function () { - describe('feature rollout is not active', function () { - it('renders old Angular template', function (done) { - const res = { - render: template => { - expect(template).to.equal('subscriptions/team/invite') - done() - }, - } - this.Controller.viewInvite(req, res) - }) - }) - - describe('user is on default variant', function () { - beforeEach(function () { - this.SplitTestHandler.promises.getAssignment.resolves({ - variant: 'default', - }) - }) - - it('renders old Angular template', function (done) { - const res = { - render: template => { - expect(template).to.equal('subscriptions/team/invite') - done() - }, - } - this.Controller.viewInvite(req, res) - }) - }) - - describe('user is on enabled variant', function () { - beforeEach(function () { - this.SplitTestHandler.promises.getAssignment.resolves({ - variant: 'enabled', - }) - }) - - it('renders React template', function (done) { - const res = { - render: template => { - expect(template).to.equal('subscriptions/team/invite-react') - done() - }, - } - this.Controller.viewInvite(req, res) - }) - }) + it('renders the view', function (done) { + const res = { + render: template => { + expect(template).to.equal('subscriptions/team/invite') + done() + }, + } + this.Controller.viewInvite(req, res) }) }) })