From 91d66cd20b94c9b52f6bb6430a62b8f20ec2b860 Mon Sep 17 00:00:00 2001 From: seotts Date: Wed, 9 Jun 2021 10:56:56 -0400 Subject: [PATCH] Display backend mute errors on studio edit --- src/redux/studio-mutations.js | 4 +++- src/views/studio/l10n.json | 9 +++++---- src/views/studio/lib/studio-member-actions.js | 2 ++ src/views/studio/lib/studio-project-actions.js | 4 +++- src/views/studio/studio-curator-inviter.jsx | 1 + src/views/studio/studio-description.jsx | 1 + src/views/studio/studio-image.jsx | 1 + src/views/studio/studio-mute-edit-message.jsx | 2 +- src/views/studio/studio-project-adder.jsx | 1 + src/views/studio/studio-projects.jsx | 4 ++-- src/views/studio/studio-title.jsx | 1 + src/views/studio/studio.jsx | 5 ++--- 12 files changed, 23 insertions(+), 12 deletions(-) diff --git a/src/redux/studio-mutations.js b/src/redux/studio-mutations.js index 07919e6cb..674de1ae7 100644 --- a/src/redux/studio-mutations.js +++ b/src/redux/studio-mutations.js @@ -21,7 +21,8 @@ const Errors = keyMirror({ THUMBNAIL_INVALID: null, TEXT_TOO_LONG: null, REQUIRED_FIELD: null, - UNHANDLED: null + UNHANDLED: null, + USER_MUTED: null }); const MAX_IMAGE_BYTES = 524288; @@ -104,6 +105,7 @@ const selectCommentsAllowedMutationError = state => state.studioMutations.mutati */ const normalizeError = (err, body, res) => { if (err) return Errors.NETWORK; + if (res.statusCode === 403 && body.mute_status) return Errors.USER_MUTED; if (res.statusCode === 401 || res.statusCode === 403) return Errors.PERMISSION; if (res.statusCode !== 200) return Errors.SERVER; try { diff --git a/src/views/studio/l10n.json b/src/views/studio/l10n.json index da065babd..9ba996c24 100644 --- a/src/views/studio/l10n.json +++ b/src/views/studio/l10n.json @@ -97,10 +97,11 @@ "studio.reportThanksForLettingUsKnow": "Thanks for letting us know!", "studio.reportYourFeedback": "Your feedback will help us make Scratch better.", - "studios.mutedCurators": "You will be able to invite curators and add managers again {inDuration}.", - "studios.mutedProjects": "You will be able to add and remove projects again {inDuration}.", - "studios.mutedEdit": "You will be able to edit studios again {inDuration}.", - "studios.mutedPaused": "Your account has been paused from using studios until then.", + "studio.mutedCurators": "You will be able to invite curators and add managers again {inDuration}.", + "studio.mutedProjects": "You will be able to add and remove projects again {inDuration}.", + "studio.mutedEdit": "You will be able to edit studios again {inDuration}.", + "studio.mutedPaused": "Your account has been paused from using studios until then.", + "studio.mutedError": "Your account has been paused from using studios. Refresh for more information.", "studio.alertProjectAdded": "\"{title}\" added to studio", "studio.alertProjectAlreadyAdded": "That project is already in this studio", diff --git a/src/views/studio/lib/studio-member-actions.js b/src/views/studio/lib/studio-member-actions.js index 1fb13c373..b6753bac1 100644 --- a/src/views/studio/lib/studio-member-actions.js +++ b/src/views/studio/lib/studio-member-actions.js @@ -10,12 +10,14 @@ const Errors = keyMirror({ SERVER: null, PERMISSION: null, DUPLICATE: null, + USER_MUTED: null, UNKNOWN_USERNAME: null, RATE_LIMIT: null }); const normalizeError = (err, body, res) => { if (err) return Errors.NETWORK; + if (res.statusCode === 403 && body.mute_status) return Errors.USER_MUTED; if (res.statusCode === 401 || res.statusCode === 403) return Errors.PERMISSION; if (res.statusCode === 404) return Errors.UNKNOWN_USERNAME; if (res.statusCode === 429) return Errors.RATE_LIMIT; diff --git a/src/views/studio/lib/studio-project-actions.js b/src/views/studio/lib/studio-project-actions.js index 548772292..a822fc803 100644 --- a/src/views/studio/lib/studio-project-actions.js +++ b/src/views/studio/lib/studio-project-actions.js @@ -12,11 +12,13 @@ const Errors = keyMirror({ PERMISSION: null, UNKNOWN_PROJECT: null, RATE_LIMIT: null, - DUPLICATE: null + DUPLICATE: null, + USER_MUTED: null }); const normalizeError = (err, body, res) => { if (err) return Errors.NETWORK; + if (res.statusCode === 403 && body.mute_status) return Errors.USER_MUTED; if (res.statusCode === 401 || res.statusCode === 403) return Errors.PERMISSION; if (res.statusCode === 404) return Errors.UNKNOWN_PROJECT; if (res.statusCode === 409) return Errors.DUPLICATE; diff --git a/src/views/studio/studio-curator-inviter.jsx b/src/views/studio/studio-curator-inviter.jsx index 6d92b5e96..d8fabdd46 100644 --- a/src/views/studio/studio-curator-inviter.jsx +++ b/src/views/studio/studio-curator-inviter.jsx @@ -16,6 +16,7 @@ const errorToMessageId = error => { case Errors.PERMISSION: return 'studio.curatorErrors.generic'; case Errors.DUPLICATE: return 'studio.curatorErrors.alreadyCurator'; case Errors.UNKNOWN_USERNAME: return 'studio.curatorErrors.unknownUsername'; + case Errors.USER_MUTED: return 'studio.mutedError'; case Errors.RATE_LIMIT: return 'studio.curatorErrors.tooFast'; default: return 'studio.curatorErrors.generic'; } diff --git a/src/views/studio/studio-description.jsx b/src/views/studio/studio-description.jsx index aa1fe8163..9538085ac 100644 --- a/src/views/studio/studio-description.jsx +++ b/src/views/studio/studio-description.jsx @@ -21,6 +21,7 @@ const errorToMessageId = error => { case Errors.INAPPROPRIATE: return 'studio.updateErrors.inappropriate'; case Errors.TEXT_TOO_LONG: return 'studio.updateErrors.textTooLong'; case Errors.REQUIRED_FIELD: return 'studio.updateErrors.requiredField'; + case Errors.USER_MUTED: return 'studio.mutedError'; default: return 'studio.updateErrors.generic'; } }; diff --git a/src/views/studio/studio-image.jsx b/src/views/studio/studio-image.jsx index ef2c13cef..bfcbb4f27 100644 --- a/src/views/studio/studio-image.jsx +++ b/src/views/studio/studio-image.jsx @@ -21,6 +21,7 @@ const errorToMessageId = error => { switch (error) { case Errors.THUMBNAIL_INVALID: return 'studio.updateErrors.thumbnailInvalid'; case Errors.THUMBNAIL_TOO_LARGE: return 'studio.updateErrors.thumbnailTooLarge'; + case Errors.USER_MUTED: return 'studio.mutedError'; default: return 'studio.updateErrors.generic'; } }; diff --git a/src/views/studio/studio-mute-edit-message.jsx b/src/views/studio/studio-mute-edit-message.jsx index 44adce7ac..cc22ef107 100644 --- a/src/views/studio/studio-mute-edit-message.jsx +++ b/src/views/studio/studio-mute-edit-message.jsx @@ -14,7 +14,7 @@ const StudioMuteEditMessage = ({ { case Errors.DUPLICATE: return 'studio.projectErrors.duplicate'; case Errors.RATE_LIMIT: return 'studio.projectErrors.tooFast'; case Errors.UNKNOWN_PROJECT: return 'studio.projectErrors.checkUrl'; + case Errors.USER_MUTED: return 'studio.mutedError'; default: return 'studio.projectErrors.generic'; } }; diff --git a/src/views/studio/studio-projects.jsx b/src/views/studio/studio-projects.jsx index 86c329d28..68cf83615 100644 --- a/src/views/studio/studio-projects.jsx +++ b/src/views/studio/studio-projects.jsx @@ -38,13 +38,13 @@ const StudioProjects = ({

-
+

} diff --git a/src/views/studio/studio-title.jsx b/src/views/studio/studio-title.jsx index 606b992a7..cccc7fea0 100644 --- a/src/views/studio/studio-title.jsx +++ b/src/views/studio/studio-title.jsx @@ -17,6 +17,7 @@ const errorToMessageId = error => { case Errors.INAPPROPRIATE: return 'studio.updateErrors.inappropriate'; case Errors.TEXT_TOO_LONG: return 'studio.updateErrors.textTooLong'; case Errors.REQUIRED_FIELD: return 'studio.updateErrors.requiredField'; + case Errors.USER_MUTED: return 'studio.mutedError'; default: return 'studio.updateErrors.generic'; } }; diff --git a/src/views/studio/studio.jsx b/src/views/studio/studio.jsx index 500e49360..c464f8048 100644 --- a/src/views/studio/studio.jsx +++ b/src/views/studio/studio.jsx @@ -48,7 +48,6 @@ import {selectShowCuratorMuteError} from '../../redux/studio-permissions.js'; const StudioShell = ({showCuratorMuteError, muteExpiresAtMs, studioLoadFailed}) => { const match = useRouteMatch(); - return ( studioLoadFailed ? : @@ -68,13 +67,13 @@ const StudioShell = ({showCuratorMuteError, muteExpiresAtMs, studioLoadFailed})

-
+

}