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})
-
+
}