From 05001d54d15c486caa6cebe9462222d37d87576d Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Mon, 5 Sep 2016 16:56:43 +0200 Subject: [PATCH] Make compose form also use normalized data --- .../javascripts/components/actions/compose.jsx | 4 ++-- .../containers/compose_form_container.jsx | 15 ++++++++++++++- .../javascripts/components/reducers/compose.jsx | 14 +++++++++++--- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/app/assets/javascripts/components/actions/compose.jsx b/app/assets/javascripts/components/actions/compose.jsx index de4fe7445..1efb1ba9d 100644 --- a/app/assets/javascripts/components/actions/compose.jsx +++ b/app/assets/javascripts/components/actions/compose.jsx @@ -15,10 +15,10 @@ export function changeCompose(text) { }; } -export function replyCompose(payload) { +export function replyCompose(status) { return { type: COMPOSE_REPLY, - payload: payload + status: status }; } diff --git a/app/assets/javascripts/components/containers/compose_form_container.jsx b/app/assets/javascripts/components/containers/compose_form_container.jsx index 534830c27..d49217a90 100644 --- a/app/assets/javascripts/components/containers/compose_form_container.jsx +++ b/app/assets/javascripts/components/containers/compose_form_container.jsx @@ -2,11 +2,24 @@ import { connect } from 'react-redux'; import ComposeForm from '../components/compose_form'; import { changeCompose, submitCompose, cancelReplyCompose } from '../actions/compose'; +function selectStatus(state) { + let statusId = state.getIn(['compose', 'in_reply_to'], null); + + if (statusId === null) { + return null; + } + + let status = state.getIn(['timelines', 'statuses', statusId]); + status = status.set('account', state.getIn(['timelines', 'accounts', status.get('account')])); + + return status; +}; + const mapStateToProps = function (state, props) { return { text: state.getIn(['compose', 'text']), is_submitting: state.getIn(['compose', 'is_submitting']), - in_reply_to: state.getIn(['compose', 'in_reply_to']) + in_reply_to: selectStatus(state) }; }; diff --git a/app/assets/javascripts/components/reducers/compose.jsx b/app/assets/javascripts/components/reducers/compose.jsx index abd99ee68..5dd093e9a 100644 --- a/app/assets/javascripts/components/reducers/compose.jsx +++ b/app/assets/javascripts/components/reducers/compose.jsx @@ -1,5 +1,6 @@ -import * as constants from '../actions/compose'; -import Immutable from 'immutable'; +import * as constants from '../actions/compose'; +import { TIMELINE_DELETE } from '../actions/timelines'; +import Immutable from 'immutable'; const initialState = Immutable.Map({ text: '', @@ -13,7 +14,8 @@ export default function compose(state = initialState, action) { return state.set('text', action.text); case constants.COMPOSE_REPLY: return state.withMutations(map => { - map.set('in_reply_to', action.payload).set('text', `@${action.payload.getIn(['account', 'acct'])} `); + map.set('in_reply_to', action.status.get('id')); + map.set('text', `@${action.status.getIn(['account', 'acct'])} `); }); case constants.COMPOSE_REPLY_CANCEL: return state.withMutations(map => { @@ -27,6 +29,12 @@ export default function compose(state = initialState, action) { }); case constants.COMPOSE_SUBMIT_FAIL: return state.set('is_submitting', false); + case TIMELINE_DELETE: + if (action.id === state.get('in_reply_to')) { + return state.set('in_reply_to', null); + } else { + return state; + } default: return state; }