From cc3c735450c5ae9eee6257a7e52092aa1c107228 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Luba=C5=84ski?= Date: Tue, 23 Nov 2021 15:34:56 +0100 Subject: [PATCH] fix(store): merge nested model data when it is updated --- src/store.js | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/store.js b/src/store.js index b62a90bb..4bbe0b0b 100644 --- a/src/store.js +++ b/src/store.js @@ -587,7 +587,17 @@ function setupModel(Model, nested) { } resultModel = nestedData; } else { - resultModel = nestedConfig.create(nestedData); + const lastNestedModel = cache.getEntry( + nestedConfig, + data[key].id, + ).value; + resultModel = nestedConfig.create( + nestedData, + lastNestedModel && + nestedConfig.isInstance(lastNestedModel) + ? lastNestedModel + : undefined, + ); syncCache(nestedConfig, resultModel.id, resultModel); } } @@ -775,7 +785,15 @@ function setupListModel(Model, nested) { throw TypeError("Model instance must match the definition"); } } else { - model = modelConfig.create(data); + const lastModel = + modelConfig.enumerable && + cache.getEntry(modelConfig, data.id).value; + model = modelConfig.create( + data, + lastModel && modelConfig.isInstance(lastModel) + ? lastModel + : undefined, + ); if (modelConfig.enumerable) { id = model.id; syncCache(modelConfig, id, model, invalidate);