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)