From b7144ac19ae3872ed1110b899c58777b5a8615c5 Mon Sep 17 00:00:00 2001 From: Wroud Date: Wed, 3 Aug 2022 11:58:30 +0300 Subject: [PATCH] fix(core-sdk): CB-2372 alias cache in CachedResource --- .../src/ConnectionFolderResource.ts | 5 +---- .../core-sdk/src/Resource/CachedMapResource.ts | 4 ++-- .../core-sdk/src/Resource/CachedResource.ts | 16 +++++++++++++--- 3 files changed, 16 insertions(+), 9 deletions(-) diff --git a/webapp/packages/core-connections/src/ConnectionFolderResource.ts b/webapp/packages/core-connections/src/ConnectionFolderResource.ts index 9f4950833c..c742508b0e 100644 --- a/webapp/packages/core-connections/src/ConnectionFolderResource.ts +++ b/webapp/packages/core-connections/src/ConnectionFolderResource.ts @@ -166,10 +166,7 @@ export class ConnectionFolderResource extends CachedMapResource ( - k.projectId === key.projectId - && k.folderId === key.folderId - )); + const ref = this.keys.find(k => this.isKeyEqual(k, key)); if (ref) { return ref; diff --git a/webapp/packages/core-sdk/src/Resource/CachedMapResource.ts b/webapp/packages/core-sdk/src/Resource/CachedMapResource.ts index ab1946cb21..06570ad525 100644 --- a/webapp/packages/core-sdk/src/Resource/CachedMapResource.ts +++ b/webapp/packages/core-sdk/src/Resource/CachedMapResource.ts @@ -370,7 +370,7 @@ export abstract class CachedMapResource< } if (this.isAlias(param) || this.isAlias(key)) { - return param === key; + return this.isAliasEqual(param, key); } param = ResourceKeyUtils.mapKey(param, this.getKeyRef.bind(this)); @@ -451,7 +451,7 @@ export abstract class CachedMapResource< this.loadedKeys = []; } else { if (this.isAlias(key)) { - const index = this.loadedKeys.findIndex(loadedKey => this.includes(key!, loadedKey)); + const index = this.loadedKeys.findIndex(loadedKey => this.isAliasEqual(key!, loadedKey)); if (index >= 0) { this.loadedKeys.splice(index, 1); diff --git a/webapp/packages/core-sdk/src/Resource/CachedResource.ts b/webapp/packages/core-sdk/src/Resource/CachedResource.ts index c9debec931..12c08c0ae4 100644 --- a/webapp/packages/core-sdk/src/Resource/CachedResource.ts +++ b/webapp/packages/core-sdk/src/Resource/CachedResource.ts @@ -238,7 +238,7 @@ export abstract class CachedResource< } isAliasLoaded(key: TParam): boolean { - return this.loadedKeys.some(loadedKey => this.includes(key, loadedKey)); + return this.loadedKeys.some(loadedKey => this.isAliasEqual(key, loadedKey)); } isIncludes(key: TParam, includes: TContext): boolean { @@ -427,7 +427,7 @@ export abstract class CachedResource< protected markOutdatedSync(param: TParam): void { if (this.isAlias(param)) { - const index = this.loadedKeys.findIndex(key => this.includes(param, key)); + const index = this.loadedKeys.findIndex(key => this.isAliasEqual(param, key)); if (index >= 0) { this.loadedKeys.splice(index, 1); @@ -440,6 +440,16 @@ export abstract class CachedResource< this.onDataOutdated.execute(param); } + isAliasEqual(param: TParam, second: TParam): boolean { + return this.paramAliases.some(alias => { + if ('getter' in alias && alias.getter) { + return alias.param(param) && alias.param(second); + } else { + return alias.param === param && alias.param === second; + } + }); + } + isKeyEqual(param: TParam, second: TParam): boolean { return param === second; } @@ -450,7 +460,7 @@ export abstract class CachedResource< } if (this.isAlias(param) || this.isAlias(second)) { - return param === second; + return this.isAliasEqual(param, second); } param = this.transformParam(param);