diff options
author | Eugen Rochko <eugen@zeonfederated.com> | 2016-09-07 18:17:15 +0200 |
---|---|---|
committer | Eugen Rochko <eugen@zeonfederated.com> | 2016-09-07 18:21:57 +0200 |
commit | 499beb4484031703f029511787163e3a5bb6e47a (patch) | |
tree | 415f8990a756fb4c42c0dac3dc434ed68c69ed99 /app/assets/javascripts/components/reducers | |
parent | 1efa8e48d1cbf26715a764a9f4acf1b848a9f740 (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')
-rw-r--r-- | app/assets/javascripts/components/reducers/compose.jsx | 26 |
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); |