From 169db77b4fd76e7be570dc466673589b171fd005 Mon Sep 17 00:00:00 2001 From: Michel Weststrate Date: Fri, 22 May 2020 19:29:50 +0100 Subject: [PATCH] fix: fixed issue where new items in Set where not recorded after iterating. Fixes #586 --- __tests__/map-set.js | 10 ++++++++++ src/plugins/mapset.ts | 4 +--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/__tests__/map-set.js b/__tests__/map-set.js index 3662d2b0..7ba25927 100644 --- a/__tests__/map-set.js +++ b/__tests__/map-set.js @@ -225,5 +225,15 @@ function runBaseTest(name, useProxies, autoFreeze, useListener) { } ]) }) + + test("#586", () => { + const base = new Set([1, 2]) + const set = produce(base, draftSet => { + debugger + expect(Array.from(draftSet)).toEqual([1, 2]) + draftSet.add(3) + }) + expect(Array.from(set).sort()).toEqual([1, 2, 3]) + }) }) } diff --git a/src/plugins/mapset.ts b/src/plugins/mapset.ts index d0be83c6..a2a5d922 100644 --- a/src/plugins/mapset.ts +++ b/src/plugins/mapset.ts @@ -241,9 +241,7 @@ export function enableMapSet() { p.add = function(value: any): any { const state: SetState = this[DRAFT_STATE] assertUnrevoked(state) - if (state.copy_) { - state.copy_.add(value) - } else if (!state.base_.has(value)) { + if (!this.has(value)) { prepareSetCopy(state) markChanged(state.scope_.immer_, state) state.copy_!.add(value)