From aa985a01a3be0ec91d8eb478dcfdaf893ca32be6 Mon Sep 17 00:00:00 2001 From: Wroud Date: Thu, 11 Jun 2020 17:48:22 +0300 Subject: [PATCH] feat(core): make MetadataMap iterable fix(core): fix first returned value MetadataMap --- webapp/packages/core/src/utils/MetadataMap.ts | 35 +++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/webapp/packages/core/src/utils/MetadataMap.ts b/webapp/packages/core/src/utils/MetadataMap.ts index 4a2b30a9e4..e952895721 100644 --- a/webapp/packages/core/src/utils/MetadataMap.ts +++ b/webapp/packages/core/src/utils/MetadataMap.ts @@ -12,9 +12,31 @@ export type DefaultValueGetter = (key: TKey, metadata: MetadataMap export class MetadataMap { private data: Map; + private length: number; constructor(private defaultValueGetter: DefaultValueGetter) { this.data = observable(new Map()); + this.length = 0; + } + + [Symbol.iterator]() { + return this.data[Symbol.iterator](); + } + + entries() { + return this.data.entries(); + } + + keys() { + return this.data.keys(); + } + + values() { + return this.data.values(); + } + + count() { + return this.length; } get(key: TKey): TValue { @@ -23,10 +45,19 @@ export class MetadataMap { } const value = this.defaultValueGetter(key, this); this.data.set(key, value); - return value; + this.length++; + return this.data.get(key)!; } delete(key: TKey) { - this.data.delete(key); + if (this.data.has(key)) { + this.data.delete(key); + this.length--; + } + } + + clear() { + this.data.clear(); + this.length = 0; } }