0
0
Fork 0

Add redraft function (#7735)

* Add redraft function

Fix #7010

* Add explicit confirmation

* Add explicit confirmation message
This commit is contained in:
Eugen Rochko 2018-06-05 00:17:38 +02:00 committed by GitHub
parent 5fb013878f
commit bd0791d800
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 74 additions and 12 deletions

View file

@ -32,6 +32,7 @@ import {
} from '../actions/compose';
import { TIMELINE_DELETE } from '../actions/timelines';
import { STORE_HYDRATE } from '../actions/store';
import { REDRAFT } from '../actions/statuses';
import { Map as ImmutableMap, List as ImmutableList, OrderedSet as ImmutableOrderedSet, fromJS } from 'immutable';
import uuid from '../uuid';
import { me } from '../initial_state';
@ -170,6 +171,18 @@ const hydrate = (state, hydratedState) => {
return state;
};
const domParser = new DOMParser();
const htmlToText = status => {
const fragment = domParser.parseFromString(status.get('content'), 'text/html').documentElement;
status.get('mentions').forEach(mention => {
fragment.querySelector(`a[href="${mention.get('url')}"]`).textContent = `@${mention.get('acct')}`;
});
return fragment.textContent;
};
export default function compose(state = initialState, action) {
switch(action.type) {
case STORE_HYDRATE:
@ -301,6 +314,24 @@ export default function compose(state = initialState, action) {
return item;
}));
case REDRAFT:
return state.withMutations(map => {
map.set('text', htmlToText(action.status));
map.set('in_reply_to', action.status.get('in_reply_to_id'));
map.set('privacy', action.status.get('visibility'));
map.set('media_attachments', action.status.get('media_attachments'));
map.set('focusDate', new Date());
map.set('caretPosition', null);
map.set('idempotencyKey', uuid());
if (action.status.get('spoiler_text').length > 0) {
map.set('spoiler', true);
map.set('spoiler_text', action.status.get('spoiler_text'));
} else {
map.set('spoiler', false);
map.set('spoiler_text', '');
}
});
default:
return state;
}