overleaf/services/web/frontend/js/main/project-list/notifications-controller.js

151 lines
4.4 KiB
JavaScript
Raw Normal View History

/* eslint-disable
max-len,
no-return-assign,
no-undef,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
* decaffeinate suggestions:
* DS101: Remove unnecessary use of Array.from
* DS102: Remove unnecessary code created because of implicit returns
* Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
*/
define(['base'], function(App) {
App.controller('NotificationsController', function($scope, $http) {
for (let notification of Array.from($scope.notifications)) {
notification.hide = false
}
$scope.samlInitPath = ExposedSettings.samlInitPath
return ($scope.dismiss = notification =>
$http({
url: `/notifications/${notification._id}`,
method: 'DELETE',
headers: {
'X-Csrf-Token': window.csrfToken
}
}).then(() => (notification.hide = true)))
})
App.controller('ProjectInviteNotificationController', function(
$scope,
$http
) {
// Shortcuts for translation keys
$scope.projectName = $scope.notification.messageOpts.projectName
$scope.userName = $scope.notification.messageOpts.userName
return ($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('OverleafV2NotificationController', function(
$scope,
localStorage
) {
$scope.visible = !localStorage('overleaf_v2_2_notification_hidden_at')
return ($scope.dismiss = function() {
$scope.visible = false
return localStorage('overleaf_v2_2_notification_hidden_at', Date.now())
})
})
App.controller('OverleafV1NotificationController', function(
$scope,
localStorage
) {
$scope.visible = !localStorage('overleaf_v1_notification_hidden_at')
return ($scope.toggle = function() {
$scope.visible = !$scope.visible
if (!$scope.visible) {
return localStorage('overleaf_v1_notification_hidden_at', Date.now())
} else {
return localStorage('overleaf_v1_notification_hidden_at', null)
}
})
})
return App.controller('EmailNotificationController', function(
$scope,
$http,
UserAffiliationsDataService
) {
$scope.userEmails = []
const _ssoAvailable = email => {
if (!ExposedSettings.hasSamlFeature) return false
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 (let userEmail of Array.from($scope.userEmails)) {
userEmail.hide = false
}
const _getUserEmails = () =>
UserAffiliationsDataService.getUserEmails().then(function(emails) {
$scope.userEmails = emails
return $scope.$emit('project-list:notifications-received')
})
_getUserEmails()
return ($scope.resendConfirmationEmail = function(userEmail) {
userEmail.confirmationInflight = true
return UserAffiliationsDataService.resendConfirmationEmail(
userEmail.email
).then(function() {
userEmail.hide = true
userEmail.confirmationInflight = false
return $scope.$emit('project-list:notifications-received')
})
})
})
})