Fix relation lists (regression #359)

This commit is contained in:
Luís Miguel 2018-01-09 11:32:47 +00:00 committed by Shawn Erquhart
parent 5be7d3c7e4
commit 3c21a6a6db
4 changed files with 15 additions and 11 deletions

View File

@ -177,10 +177,10 @@ export function emptyDraftCreated(entry) {
/* /*
* Exported simple Action Creators * Exported simple Action Creators
*/ */
export function createDraftFromEntry(entry) { export function createDraftFromEntry(entry, metadata) {
return { return {
type: DRAFT_CREATE_FROM_ENTRY, type: DRAFT_CREATE_FROM_ENTRY,
payload: entry, payload: { entry, metadata },
}; };
} }

View File

@ -164,7 +164,8 @@ class Editor extends React.Component {
*/ */
const values = deserializeValues(entry.get('data'), fields); const values = deserializeValues(entry.get('data'), fields);
const deserializedEntry = entry.set('data', values); const deserializedEntry = entry.set('data', values);
this.createDraft(deserializedEntry); const fieldsMetaData = nextProps.entryDraft && nextProps.entryDraft.get('fieldsMetaData');
this.createDraft(deserializedEntry, fieldsMetaData);
} else if (newEntry) { } else if (newEntry) {
this.props.createEmptyDraft(collection); this.props.createEmptyDraft(collection);
} }
@ -175,8 +176,8 @@ class Editor extends React.Component {
window.removeEventListener('beforeunload', this.exitBlocker); window.removeEventListener('beforeunload', this.exitBlocker);
} }
createDraft = (entry) => { createDraft = (entry, metadata) => {
if (entry) this.props.createDraftFromEntry(entry); if (entry) this.props.createDraftFromEntry(entry, metadata);
}; };
handleChangeStatus = (newStatusName) => { handleChangeStatus = (newStatusName) => {

View File

@ -33,10 +33,13 @@ const entryDraftReducer = (state = Map(), action) => {
case DRAFT_CREATE_FROM_ENTRY: case DRAFT_CREATE_FROM_ENTRY:
// Existing Entry // Existing Entry
return state.withMutations((state) => { return state.withMutations((state) => {
state.set('entry', action.payload); state.set('entry', action.payload.entry);
state.setIn(['entry', 'newRecord'], false); state.setIn(['entry', 'newRecord'], false);
state.set('mediaFiles', List()); state.set('mediaFiles', List());
state.set('fieldsMetaData', Map()); // An existing entry may already have metadata. If we surfed away and back to its
// editor page, the metadata will have been fetched already, so we shouldn't
// clear it as to not break relation lists.
state.set('fieldsMetaData', action.payload.metadata || Map());
state.set('fieldsErrors', Map()); state.set('fieldsErrors', Map());
state.set('hasChanged', false); state.set('hasChanged', false);
}); });
@ -55,7 +58,7 @@ const entryDraftReducer = (state = Map(), action) => {
case DRAFT_CHANGE_FIELD: case DRAFT_CHANGE_FIELD:
return state.withMutations((state) => { return state.withMutations((state) => {
state.setIn(['entry', 'data', action.payload.field], action.payload.value); state.setIn(['entry', 'data', action.payload.field], action.payload.value);
state.mergeIn(['fieldsMetaData'], fromJS(action.payload.metadata)); state.mergeDeepIn(['fieldsMetaData'], fromJS(action.payload.metadata));
state.set('hasChanged', true); state.set('hasChanged', true);
}); });

View File

@ -56,7 +56,7 @@ const entries = (state = defaultState, action) => {
return state.withMutations((map) => { return state.withMutations((map) => {
map.set('isFetching', false); map.set('isFetching', false);
map.set('term', searchTerm); map.set('term', searchTerm);
map.set('queryHits', Map({ [action.payload.namespace]: response.hits })); map.mergeIn(['queryHits'], Map({ [action.payload.namespace]: response.hits }));
}); });
default: default: