Redesigned compose form

This commit is contained in:
Eugen Rochko 2017-03-25 00:01:43 +01:00
parent 9bf4c34919
commit d8c5a83827
21 changed files with 477 additions and 218 deletions

View file

@ -32,8 +32,7 @@ const initialState = Immutable.Map({
sensitive: false,
spoiler: false,
spoiler_text: '',
unlisted: false,
private: false,
privacy: null,
text: '',
focusDate: null,
preselectDate: null,
@ -67,8 +66,7 @@ function clearAll(state) {
map.set('spoiler_text', '');
map.set('is_submitting', false);
map.set('in_reply_to', null);
map.set('unlisted', state.get('default_privacy') === 'unlisted');
map.set('private', state.get('default_privacy') === 'private');
map.set('privacy', state.get('default_privacy'));
map.update('media_attachments', list => list.clear());
});
};
@ -114,6 +112,18 @@ const insertEmoji = (state, position, emojiData) => {
});
};
const privacyPreference = (a, b) => {
if (a === 'direct' || b === 'direct') {
return 'direct';
} else if (a === 'private' || b === 'private') {
return 'private';
} else if (a === 'unlisted' || b === 'unlisted') {
return 'unlisted';
} else {
return 'public';
}
};
export default function compose(state = initialState, action) {
switch(action.type) {
case STORE_HYDRATE:
@ -123,26 +133,23 @@ export default function compose(state = initialState, action) {
case COMPOSE_UNMOUNT:
return state.set('mounted', false);
case COMPOSE_SENSITIVITY_CHANGE:
return state.set('sensitive', action.checked);
return state.set('sensitive', !state.get('sensitive'));
case COMPOSE_SPOILERNESS_CHANGE:
return state.withMutations(map => {
map.set('spoiler_text', '');
map.set('spoiler', action.checked);
map.set('spoiler', !state.get('spoiler'));
});
case COMPOSE_SPOILER_TEXT_CHANGE:
return state.set('spoiler_text', action.text);
case COMPOSE_VISIBILITY_CHANGE:
return state.set('private', action.checked);
case COMPOSE_LISTABILITY_CHANGE:
return state.set('unlisted', action.checked);
return state.set('privacy', action.value);
case COMPOSE_CHANGE:
return state.set('text', action.text);
case COMPOSE_REPLY:
return state.withMutations(map => {
map.set('in_reply_to', action.status.get('id'));
map.set('text', statusToTextMentions(state, action.status));
map.set('unlisted', action.status.get('visibility') === 'unlisted' || state.get('default_privacy') === 'unlisted');
map.set('private', action.status.get('visibility') === 'private' || state.get('default_privacy') === 'private');
map.set('privacy', privacyPreference(action.status.get('visibility'), state.get('default_privacy')));
map.set('focusDate', new Date());
map.set('preselectDate', new Date());
});
@ -150,8 +157,7 @@ export default function compose(state = initialState, action) {
return state.withMutations(map => {
map.set('in_reply_to', null);
map.set('text', '');
map.set('unlisted', state.get('default_privacy') === 'unlisted');
map.set('private', state.get('default_privacy') === 'private');
map.set('privacy', state.get('default_privacy'));
});
case COMPOSE_SUBMIT_REQUEST:
return state.set('is_submitting', true);