From e9088957b3ed275202be9723b65465ec0affbace Mon Sep 17 00:00:00 2001 From: Mathias Biilmann Christensen Date: Tue, 21 Feb 2017 23:04:12 -0800 Subject: [PATCH] Fix persistence for collections stored in different files Getting the order of the fields failed when the collections was not folder based --- src/backends/backend.js | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/backends/backend.js b/src/backends/backend.js index b6fd24fe..eb079196 100644 --- a/src/backends/backend.js +++ b/src/backends/backend.js @@ -164,14 +164,15 @@ class Backend { entryObj = { path, slug, - raw: this.entryToRaw(collection, entryData), + raw: this.entryToRaw(collection, entryDraft.get("entry")), }; } else { const path = entryDraft.getIn(["entry", "path"]); + const slug = entryDraft.getIn(["entry", "slug"]); entryObj = { path, - slug: entryDraft.getIn(["entry", "slug"]), - raw: this.entryToRaw(collection, entryData), + slug, + raw: this.entryToRaw(collection, entryDraft.get("entry")), }; } @@ -201,9 +202,23 @@ class Backend { entryToRaw(collection, entry) { - const format = resolveFormat(collection, entry); - const fieldsOrder = collection.get('fields').map(f => f.get('name')).toArray(); - return format && format.toFile(entry, fieldsOrder); + const format = resolveFormat(collection, entry.toJS()); + const fieldsOrder = this.fieldsOrder(collection, entry); + return format && format.toFile(entry.get("data").toJS(), fieldsOrder); + } + + fieldsOrder(collection, entry) { + const fields = collection.get('fields'); + if (fields) { + return collection.get('fields').map(f => f.get('name')).toArray(); + } + + const files = collection.get('files'); + const file = (files || []).filter(f => f.get("name") === entry.get("slug")).get(0); + if (file == null) { + throw new Error(`No file found for ${ entry.get("slug") } in ${ collection.get('name') }`); + } + return file.get('fields'); } }