From 92afd296509de82e7550f67064b032db916b1f63 Mon Sep 17 00:00:00 2001
From: Eugen Rochko <eugen@zeonfederated.com>
Date: Fri, 26 Aug 2016 19:12:19 +0200
Subject: The frontend will now be an OAuth app, auto-authorized. The frontend
 will use an access token for API requests Adding better errors for the API
 controllers, posting a simple status works from the frontend now

---
 .../javascripts/components/actions/statuses.jsx    | 56 ++++++++++++++++++++--
 1 file changed, 52 insertions(+), 4 deletions(-)

(limited to 'app/assets/javascripts/components/actions/statuses.jsx')

diff --git a/app/assets/javascripts/components/actions/statuses.jsx b/app/assets/javascripts/components/actions/statuses.jsx
index fece257d5..45d62fab2 100644
--- a/app/assets/javascripts/components/actions/statuses.jsx
+++ b/app/assets/javascripts/components/actions/statuses.jsx
@@ -2,7 +2,11 @@ import fetch from 'isomorphic-fetch'
 
 export const SET_TIMELINE = 'SET_TIMELINE';
 export const ADD_STATUS   = 'ADD_STATUS';
-export const PUBLISH      = 'PUBLISH';
+
+export const PUBLISH       = 'PUBLISH';
+export const PUBLISH_START = 'PUBLISH_START';
+export const PUBLISH_SUCC  = 'PUBLISH_SUCC';
+export const PUBLISH_ERROR = 'PUBLISH_ERROR';
 
 export function setTimeline(timeline, statuses) {
   return {
@@ -20,14 +24,58 @@ export function addStatus(timeline, status) {
   };
 }
 
+export function publishStart() {
+  return {
+    type: PUBLISH_START
+  };
+}
+
+export function publishError(error) {
+  return {
+    type: PUBLISH_ERROR,
+    error: error
+  };
+}
+
+export function publishSucc(status) {
+  return {
+    type: PUBLISH_SUCC,
+    status: status
+  };
+}
+
 export function publish(text, in_reply_to_id) {
-  return function (dispatch) {
+  return function (dispatch, getState) {
+    const access_token = getState().getIn(['meta', 'access_token']);
+
+    var data = new FormData();
+
+    data.append('status', text);
+
+    if (in_reply_to_id !== null) {
+      data.append('in_reply_to_id', in_reply_to_id);
+    }
+
+    dispatch(publishStart());
+
     return fetch('/api/statuses', {
-      method: 'POST'
+      method: 'POST',
+
+      headers: {
+        'Authorization': `Bearer ${access_token}`
+      },
+
+      body: data
     }).then(function (response) {
       return response.json();
     }).then(function (json) {
-      console.log(json);
+      if (json.error) {
+        dispatch(publishError(json.error));
+      } else {
+        dispatch(publishSucc(json));
+      }
+    }).catch(function (error) {
+      dispatch(publishError(error));
     });
   };
 }
-- 
cgit 

