about summary refs log tree commit diff
path: root/app/javascript/mastodon/actions/alerts.js
diff options
context:
space:
mode:
authorunarist <m.unarist@gmail.com>2018-04-02 21:51:02 +0900
committerEugen Rochko <eugen@zeonfederated.com>2018-04-02 14:51:02 +0200
commit2c51bc0ca5a4c3a4bb140b4b40dabdda859ebb94 (patch)
treedfc6ec5791ab17992f6940da330b3b7193f80ec4 /app/javascript/mastodon/actions/alerts.js
parente7a17167015dca6864f31152c47334c3b3a857a2 (diff)
Add missing rejection handling for Promises (#7008)
* Add eslint-plugin-promise to detect uncaught rejections

* Move alert generation for errors to actions/alert

* Add missing rejection handling for Promises

* Use catch() instead of onReject on then()

Then it will catches rejection from onFulfilled. This detection can be
disabled by `allowThen` option, though.
Diffstat (limited to 'app/javascript/mastodon/actions/alerts.js')
-rw-r--r--app/javascript/mastodon/actions/alerts.js25
1 files changed, 25 insertions, 0 deletions
diff --git a/app/javascript/mastodon/actions/alerts.js b/app/javascript/mastodon/actions/alerts.js
index f37fdeeb6..3f5d7ef46 100644
--- a/app/javascript/mastodon/actions/alerts.js
+++ b/app/javascript/mastodon/actions/alerts.js
@@ -1,3 +1,10 @@
+import { defineMessages } from 'react-intl';
+
+const messages = defineMessages({
+  unexpectedTitle: { id: 'alert.unexpected.title', defaultMessage: 'Oops!' },
+  unexpectedMessage: { id: 'alert.unexpected.message', defaultMessage: 'An unexpected error occurred.' },
+});
+
 export const ALERT_SHOW    = 'ALERT_SHOW';
 export const ALERT_DISMISS = 'ALERT_DISMISS';
 export const ALERT_CLEAR   = 'ALERT_CLEAR';
@@ -22,3 +29,21 @@ export function showAlert(title, message) {
     message,
   };
 };
+
+export function showAlertForError(error) {
+  if (error.response) {
+    const { data, status, statusText } = error.response;
+
+    let message = statusText;
+    let title   = `${status}`;
+
+    if (data.error) {
+      message = data.error;
+    }
+
+    return showAlert(title, message);
+  } else {
+    console.error(error);
+    return showAlert(messages.unexpectedTitle, messages.unexpectedMessage);
+  }
+}