summaryrefslogtreecommitdiff
path: root/src/store/denormalizer.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/store/denormalizer.js')
-rw-r--r--src/store/denormalizer.js20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/store/denormalizer.js b/src/store/denormalizer.js
index fbf15430..e6583ae7 100644
--- a/src/store/denormalizer.js
+++ b/src/store/denormalizer.js
@@ -1,14 +1,28 @@
+const EXCLUDED_IDENTIFIERS = [
+ "objectId",
+ "googleId",
+];
+
export function denormalize(state, objectType, id) {
+ return denormalizeWithRecursionCheck(state, objectType, id, undefined);
+}
+
+function denormalizeWithRecursionCheck(state, objectType, id, previousType) {
const object = Object.assign({}, state.objects[objectType][id]);
for (let prop in object) {
- if (!object.hasOwnProperty(prop)) {
+ if (prop.indexOf(previousType) !== -1) {
continue;
}
- if (prop.endsWith("Id")) {
+ if (prop.endsWith("Id") && EXCLUDED_IDENTIFIERS.indexOf(prop) === -1) {
const propType = prop.replace("Id", "");
- object[propType] = state.objects[propType][object[prop]];
+ object[propType] = denormalizeWithRecursionCheck(state, propType, object[prop], objectType);
+ }
+
+ if (prop.endsWith("Ids")) {
+ const propType = prop.replace("Ids", "");
+ object[propType + "s"] = object[prop].map(id => denormalizeWithRecursionCheck(state, propType, id, objectType));
}
}