mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-05-23 17:19:37 +02:00
[web] add preferences to control all implemented notifications (#33320)
* feat: add granular controls for other features * feat: add filtering to notifications that were missing them * refactor: rm duplicate thread fetches * fix: reduce permissions to fit spec (all === new comments/tracked changes, replies === only if also a participant) * fix: include mentions in types GitOrigin-RevId: b4a09ef59e5cf4de2e07d5b9a13c31fc1cf81a31
This commit is contained in:
@@ -22,36 +22,45 @@ function levelToPreferences(
|
||||
switch (level) {
|
||||
case 'all':
|
||||
return {
|
||||
trackedChangesOnOwnProject: true,
|
||||
trackedChangesOnInvitedProject: true,
|
||||
commentOnOwnProject: true,
|
||||
commentOnInvitedProject: true,
|
||||
repliesOnOwnProject: true,
|
||||
repliesOnInvitedProject: true,
|
||||
repliesOnAuthoredThread: true,
|
||||
repliesOnParticipatingThread: true,
|
||||
commentResolvedOnAuthoredThread: true,
|
||||
commentResolvedOnParticipatingThread: true,
|
||||
commentReopenedOnAuthoredThread: true,
|
||||
commentReopenedOnParticipatingThread: true,
|
||||
trackedChangesOnOwnProject: true,
|
||||
trackedChangesOnInvitedProject: true,
|
||||
trackChangesAcceptedOnAuthoredChange: true,
|
||||
}
|
||||
case 'replies':
|
||||
return {
|
||||
trackedChangesOnOwnProject: false,
|
||||
trackedChangesOnInvitedProject: false,
|
||||
commentOnOwnProject: false,
|
||||
commentOnInvitedProject: false,
|
||||
repliesOnOwnProject: false,
|
||||
repliesOnInvitedProject: false,
|
||||
repliesOnAuthoredThread: true,
|
||||
repliesOnParticipatingThread: true,
|
||||
commentResolvedOnAuthoredThread: true,
|
||||
commentResolvedOnParticipatingThread: true,
|
||||
commentReopenedOnAuthoredThread: true,
|
||||
commentReopenedOnParticipatingThread: true,
|
||||
trackedChangesOnOwnProject: false,
|
||||
trackedChangesOnInvitedProject: false,
|
||||
trackChangesAcceptedOnAuthoredChange: true,
|
||||
}
|
||||
case 'off':
|
||||
return {
|
||||
trackedChangesOnOwnProject: false,
|
||||
trackedChangesOnInvitedProject: false,
|
||||
commentOnOwnProject: false,
|
||||
commentOnInvitedProject: false,
|
||||
repliesOnOwnProject: false,
|
||||
repliesOnInvitedProject: false,
|
||||
repliesOnAuthoredThread: false,
|
||||
repliesOnParticipatingThread: false,
|
||||
commentResolvedOnAuthoredThread: false,
|
||||
commentResolvedOnParticipatingThread: false,
|
||||
commentReopenedOnAuthoredThread: false,
|
||||
commentReopenedOnParticipatingThread: false,
|
||||
trackedChangesOnOwnProject: false,
|
||||
trackedChangesOnInvitedProject: false,
|
||||
trackChangesAcceptedOnAuthoredChange: false,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -76,15 +85,16 @@ function preferencesToLevel(
|
||||
const projectTrackedChanges = isOwner
|
||||
? preferences.trackedChangesOnOwnProject
|
||||
: preferences.trackedChangesOnInvitedProject
|
||||
const projectReplies = isOwner
|
||||
? preferences.repliesOnOwnProject
|
||||
: preferences.repliesOnInvitedProject
|
||||
|
||||
const anyProjectNotifications =
|
||||
projectComments || projectTrackedChanges || projectReplies
|
||||
const anyProjectNotifications = projectComments || projectTrackedChanges
|
||||
const anyParticipantNotifications =
|
||||
preferences.repliesOnAuthoredThread ||
|
||||
preferences.repliesOnParticipatingThread
|
||||
preferences.repliesOnParticipatingThread ||
|
||||
preferences.trackChangesAcceptedOnAuthoredChange ||
|
||||
preferences.commentResolvedOnAuthoredThread ||
|
||||
preferences.commentResolvedOnParticipatingThread ||
|
||||
preferences.commentReopenedOnAuthoredThread ||
|
||||
preferences.commentReopenedOnParticipatingThread
|
||||
|
||||
if (!anyProjectNotifications && !anyParticipantNotifications) {
|
||||
return 'off'
|
||||
|
||||
@@ -9,25 +9,31 @@ import ProjectNotificationsSetting from '@/features/settings/components/editor-s
|
||||
const preferencesUrl = `/notifications/preferences/project/${PROJECT_ID}`
|
||||
|
||||
const allNotificationsOn = {
|
||||
trackedChangesOnOwnProject: true,
|
||||
trackedChangesOnInvitedProject: true,
|
||||
commentOnOwnProject: true,
|
||||
commentOnInvitedProject: true,
|
||||
repliesOnOwnProject: true,
|
||||
repliesOnInvitedProject: true,
|
||||
repliesOnAuthoredThread: true,
|
||||
repliesOnParticipatingThread: true,
|
||||
commentResolvedOnAuthoredThread: true,
|
||||
commentResolvedOnParticipatingThread: true,
|
||||
commentReopenedOnAuthoredThread: true,
|
||||
commentReopenedOnParticipatingThread: true,
|
||||
trackedChangesOnOwnProject: true,
|
||||
trackedChangesOnInvitedProject: true,
|
||||
trackChangesAcceptedOnAuthoredChange: true,
|
||||
}
|
||||
|
||||
const repliesOnlyPreferences = {
|
||||
trackedChangesOnOwnProject: false,
|
||||
trackedChangesOnInvitedProject: false,
|
||||
commentOnOwnProject: false,
|
||||
commentOnInvitedProject: false,
|
||||
repliesOnOwnProject: false,
|
||||
repliesOnInvitedProject: false,
|
||||
repliesOnAuthoredThread: true,
|
||||
repliesOnParticipatingThread: true,
|
||||
commentResolvedOnAuthoredThread: true,
|
||||
commentResolvedOnParticipatingThread: true,
|
||||
commentReopenedOnAuthoredThread: true,
|
||||
commentReopenedOnParticipatingThread: true,
|
||||
trackedChangesOnOwnProject: false,
|
||||
trackedChangesOnInvitedProject: false,
|
||||
trackChangesAcceptedOnAuthoredChange: true,
|
||||
}
|
||||
|
||||
const globallyMutedPreferences = {
|
||||
@@ -35,22 +41,28 @@ const globallyMutedPreferences = {
|
||||
trackedChangesOnInvitedProject: false,
|
||||
commentOnOwnProject: false,
|
||||
commentOnInvitedProject: false,
|
||||
repliesOnOwnProject: false,
|
||||
repliesOnInvitedProject: false,
|
||||
repliesOnAuthoredThread: false,
|
||||
repliesOnParticipatingThread: false,
|
||||
muteAllNotifications: true,
|
||||
commentResolvedOnAuthoredThread: false,
|
||||
commentResolvedOnParticipatingThread: false,
|
||||
commentReopenedOnAuthoredThread: false,
|
||||
commentReopenedOnParticipatingThread: false,
|
||||
trackChangesAcceptedOnAuthoredChange: false,
|
||||
}
|
||||
|
||||
const allNotificationsOff = {
|
||||
trackedChangesOnOwnProject: false,
|
||||
trackedChangesOnInvitedProject: false,
|
||||
commentOnOwnProject: false,
|
||||
commentOnInvitedProject: false,
|
||||
repliesOnOwnProject: false,
|
||||
repliesOnInvitedProject: false,
|
||||
repliesOnAuthoredThread: false,
|
||||
repliesOnParticipatingThread: false,
|
||||
commentResolvedOnAuthoredThread: false,
|
||||
commentResolvedOnParticipatingThread: false,
|
||||
commentReopenedOnAuthoredThread: false,
|
||||
commentReopenedOnParticipatingThread: false,
|
||||
trackedChangesOnOwnProject: false,
|
||||
trackedChangesOnInvitedProject: false,
|
||||
trackChangesAcceptedOnAuthoredChange: false,
|
||||
}
|
||||
|
||||
const defaultPreferences = {
|
||||
@@ -58,11 +70,14 @@ const defaultPreferences = {
|
||||
trackedChangesOnInvitedProject: false,
|
||||
commentOnOwnProject: true,
|
||||
commentOnInvitedProject: false,
|
||||
repliesOnOwnProject: false,
|
||||
repliesOnInvitedProject: false,
|
||||
repliesOnAuthoredThread: true,
|
||||
repliesOnParticipatingThread: true,
|
||||
muteAllNotifications: false,
|
||||
commentResolvedOnAuthoredThread: true,
|
||||
commentResolvedOnParticipatingThread: true,
|
||||
commentReopenedOnAuthoredThread: true,
|
||||
commentReopenedOnParticipatingThread: true,
|
||||
trackChangesAcceptedOnAuthoredChange: true,
|
||||
}
|
||||
|
||||
function renderComponent(props: { permissionsLevel?: string } = {}) {
|
||||
|
||||
Reference in New Issue
Block a user