about summary refs log tree commit diff
path: root/app/assets/javascripts/components/reducers/compose.jsx
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2016-09-07 18:17:15 +0200
committerEugen Rochko <eugen@zeonfederated.com>2016-09-07 18:21:57 +0200
commit499beb4484031703f029511787163e3a5bb6e47a (patch)
tree415f8990a756fb4c42c0dac3dc434ed68c69ed99 /app/assets/javascripts/components/reducers/compose.jsx
parent1efa8e48d1cbf26715a764a9f4acf1b848a9f740 (diff)
UI for uploading media attachments (and cancelling them)
Mostly resolves #8, though attachments are still not displayed in public view
Diffstat (limited to 'app/assets/javascripts/components/reducers/compose.jsx')
-rw-r--r--app/assets/javascripts/components/reducers/compose.jsx26
1 files changed, 23 insertions, 3 deletions
diff --git a/app/assets/javascripts/components/reducers/compose.jsx b/app/assets/javascripts/components/reducers/compose.jsx
index 5dd093e9a..b4a21b874 100644
--- a/app/assets/javascripts/components/reducers/compose.jsx
+++ b/app/assets/javascripts/components/reducers/compose.jsx
@@ -5,7 +5,10 @@ import Immutable           from 'immutable';
 const initialState = Immutable.Map({
   text: '',
   in_reply_to: null,
-  is_submitting: false
+  is_submitting: false,
+  is_uploading: false,
+  progress: 0,
+  media_attachments: Immutable.List([])
 });
 
 export default function compose(state = initialState, action) {
@@ -19,16 +22,33 @@ export default function compose(state = initialState, action) {
       });
     case constants.COMPOSE_REPLY_CANCEL:
       return state.withMutations(map => {
-        map.set('in_reply_to', null).set('text', '');
+        map.set('in_reply_to', null);
+        map.set('text', '');
       });
     case constants.COMPOSE_SUBMIT_REQUEST:
       return state.set('is_submitting', true);
     case constants.COMPOSE_SUBMIT_SUCCESS:
       return state.withMutations(map => {
-        map.set('text', '').set('is_submitting', false).set('in_reply_to', null);
+        map.set('text', '');
+        map.set('is_submitting', false);
+        map.set('in_reply_to', null);
+        map.update('media_attachments', list => list.clear());
       });
     case constants.COMPOSE_SUBMIT_FAIL:
       return state.set('is_submitting', false);
+    case constants.COMPOSE_UPLOAD_REQUEST:
+      return state.set('is_uploading', true);
+    case constants.COMPOSE_UPLOAD_SUCCESS:
+      return state.withMutations(map => {
+        map.update('media_attachments', list => list.push(Immutable.fromJS(action.media)));
+        map.set('is_uploading', false);
+      });
+    case constants.COMPOSE_UPLOAD_FAIL:
+      return state.set('is_uploading', false);
+    case constants.COMPOSE_UPLOAD_UNDO:
+      return state.update('media_attachments', list => list.filterNot(item => item.get('id') === action.media_id));
+    case constants.COMPOSE_UPLOAD_PROGRESS:
+      return state.set('progress', Math.round((action.loaded / action.total) * 100));
     case TIMELINE_DELETE:
       if (action.id === state.get('in_reply_to')) {
         return state.set('in_reply_to', null);