overleaf/services/web/frontend/js/main/project-list/notifications-controller.js
Thomas 16b2d27fde Update B2B Groups and Enterprise banners (#11989)
* Tear down B2B banner ad split test and implement updated ads

GitOrigin-RevId: 7d09d54bef7cb4e2b2b597d3834e0f58551b179e
2023-02-28 09:04:31 +00:00

141 lines
4.1 KiB
JavaScript

import App from '../../base'
import getMeta from '../../utils/meta'
const ExposedSettings = window.ExposedSettings
App.controller('NotificationsController', function ($scope, $http) {
for (const notification of $scope.notifications || []) {
notification.hide = false
}
$scope.samlInitPath = ExposedSettings.samlInitPath
$scope.dismiss = notification => {
if (!notification._id) {
notification.hide = true
return
}
$http({
url: `/notifications/${notification._id}`,
method: 'DELETE',
headers: {
'X-Csrf-Token': window.csrfToken,
},
}).then(() => (notification.hide = true))
}
})
App.controller(
'GroupsAndEnterpriseBannerController',
function ($scope, localStorage) {
$scope.hasDismissedGroupsAndEnterpriseBanner = localStorage(
'has_dismissed_groups_and_enterprise_banner'
)
$scope.dismiss = () => {
localStorage('has_dismissed_groups_and_enterprise_banner', true)
$scope.hasDismissedGroupsAndEnterpriseBanner = true
}
$scope.groupsAndEnterpriseBannerVariant = getMeta(
'ol-groupsAndEnterpriseBannerVariant'
)
const valid = ['did-you-know', 'on-premise', 'people', 'FOMO']
$scope.isVariantValid = valid.includes(
$scope.groupsAndEnterpriseBannerVariant
)
$scope.urlVariantSuffix = $scope.isVariantValid
? `-${valid.indexOf($scope.groupsAndEnterpriseBannerVariant) + 1}`
: ''
}
)
App.controller('ProjectInviteNotificationController', function ($scope, $http) {
// Shortcuts for translation keys
$scope.projectName = $scope.notification.messageOpts.projectName
$scope.userName = $scope.notification.messageOpts.userName
$scope.accept = function () {
$scope.notification.inflight = true
return $http({
url: `/project/${$scope.notification.messageOpts.projectId}/invite/token/${$scope.notification.messageOpts.token}/accept`,
method: 'POST',
headers: {
'X-Csrf-Token': window.csrfToken,
'X-Requested-With': 'XMLHttpRequest',
},
})
.then(() => {
$scope.notification.accepted = true
})
.catch(({ status }) => {
if (status === 404) {
// 404 probably means the invite has already been accepted and
// deleted. Treat as success
$scope.notification.accepted = true
} else {
$scope.notification.error = true
}
})
.finally(() => {
$scope.notification.inflight = false
})
}
})
App.controller(
'EmailNotificationController',
function ($scope, $http, UserAffiliationsDataService) {
$scope.userEmails = window.data.userEmails
const _ssoAvailable = email => {
if (!ExposedSettings.hasSamlFeature) return false
if (email.samlProviderId) return true
if (!email.affiliation || !email.affiliation.institution) return false
if (email.affiliation.institution.ssoEnabled) return true
if (
ExposedSettings.hasSamlBeta &&
email.affiliation.institution.ssoBeta
) {
return true
}
return false
}
$scope.showConfirmEmail = email => {
if (ExposedSettings.emailConfirmationDisabled) {
return false
}
if (!email.confirmedAt && !email.hide) {
if (_ssoAvailable(email)) {
return false
}
return true
}
return false
}
for (const userEmail of $scope.userEmails) {
userEmail.hide = false
}
$scope.resendConfirmationEmail = function (userEmail) {
userEmail.confirmationInflight = true
userEmail.error = false
userEmail.errorMessage = null
UserAffiliationsDataService.resendConfirmationEmail(userEmail.email)
.then(() => {
userEmail.hide = true
$scope.$emit('project-list:notifications-received')
})
.catch(error => {
userEmail.error = true
userEmail.errorMessage = error.data.message
console.error(error)
$scope.$emit('project-list:notifications-received')
})
.finally(() => {
userEmail.confirmationInflight = false
})
}
}
)