From 08f72a0fa86769ace5f70361c707b71ec3c8f654 Mon Sep 17 00:00:00 2001 From: yifei Date: Thu, 3 Sep 2020 09:14:51 +0800 Subject: [PATCH] set assigned keys when clear map --- __tests__/map-set.js | 22 ++++++++++++++++++++++ src/plugins/mapset.ts | 6 +++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/__tests__/map-set.js b/__tests__/map-set.js index faa46803..bbe9d479 100644 --- a/__tests__/map-set.js +++ b/__tests__/map-set.js @@ -244,5 +244,27 @@ function runBaseTest(name, useProxies, autoFreeze, useListener) { expect(map1.has("key")).toBe(true) expect(map1.get("key")).toBe(undefined) }) + + test("#663 - clear map", () => { + const map = new Map([ + ["a", "b"], + ["b", "c"] + ]) + const result = produceWithPatches(map, draft => { + draft.clear() + }) + + expect(result).toEqual([ + new Map(), + [ + {op: "remove", path: ["a"]}, + {op: "remove", path: ["b"]} + ], + [ + {op: "add", path: ["a"], value: "b"}, + {op: "add", path: ["b"], value: "c"} + ] + ]) + }) }) } diff --git a/src/plugins/mapset.ts b/src/plugins/mapset.ts index 8bb2d096..6dd579a7 100644 --- a/src/plugins/mapset.ts +++ b/src/plugins/mapset.ts @@ -15,7 +15,8 @@ import { markChanged, ProxyTypeMap, ProxyTypeSet, - die + die, + each } from "../internal" export function enableMapSet() { @@ -110,6 +111,9 @@ export function enableMapSet() { prepareMapCopy(state) markChanged(state) state.assigned_ = new Map() + each(state.base_, key => { + state.assigned_!.set(key, false) + }) return state.copy_!.clear() }