From 506e0aa0e38c0bcb26931b85ef1d6d688b2d95ca Mon Sep 17 00:00:00 2001 From: schroda <50052685+schroda@users.noreply.github.com> Date: Mon, 29 Jan 2024 20:56:09 +0100 Subject: [PATCH] Update extension list after removing an obsolete extension (#579) The removed extension was never removed from the cached list --- src/components/ExtensionCard.tsx | 6 +++--- src/lib/requests/RequestManager.ts | 28 ++++++++++++++++------------ 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/components/ExtensionCard.tsx b/src/components/ExtensionCard.tsx index 75767f6b..208b2cc0 100644 --- a/src/components/ExtensionCard.tsx +++ b/src/components/ExtensionCard.tsx @@ -110,13 +110,13 @@ export function ExtensionCard(props: IProps) { setInstalledState(state); switch (action) { case ExtensionAction.INSTALL: - await requestManager.updateExtension(pkgName, { install: true }).response; + await requestManager.updateExtension(pkgName, { install: true, isObsolete }).response; break; case ExtensionAction.UNINSTALL: - await requestManager.updateExtension(pkgName, { uninstall: true }).response; + await requestManager.updateExtension(pkgName, { uninstall: true, isObsolete }).response; break; case ExtensionAction.UPDATE: - await requestManager.updateExtension(pkgName, { update: true }).response; + await requestManager.updateExtension(pkgName, { update: true, isObsolete }).response; break; default: throw new Error(`Unexpected ExtensionAction "${action}"`); diff --git a/src/lib/requests/RequestManager.ts b/src/lib/requests/RequestManager.ts index 0f4c76b1..f35e1a07 100644 --- a/src/lib/requests/RequestManager.ts +++ b/src/lib/requests/RequestManager.ts @@ -1015,7 +1015,7 @@ export class RequestManager { public updateExtension( id: string, - patch: UpdateExtensionPatchInput, + { isObsolete = false, ...patch }: UpdateExtensionPatchInput & { isObsolete?: boolean }, options?: MutationOptions, ): AbortableApolloMutationResponse { const result = this.doRequest( @@ -1042,18 +1042,22 @@ export class RequestManager { ...cachedExtensions.data, fetchExtensions: { ...cachedExtensions.data.fetchExtensions, - extensions: cachedExtensions.data.fetchExtensions.extensions.map((extension) => { - const isUpdatedExtension = - extension.apkName === response.data?.updateExtension.extension?.apkName; - if (!isUpdatedExtension) { - return extension; - } + extensions: cachedExtensions.data.fetchExtensions.extensions + .filter((extension) => { + const isUpdatedExtension = id === extension.pkgName; + return isUpdatedExtension && !isObsolete; + }) + .map((extension) => { + const isUpdatedExtension = id === extension.pkgName; + if (!isUpdatedExtension) { + return extension; + } - return { - ...extension, - ...response.data?.updateExtension.extension, - }; - }), + return { + ...extension, + ...response.data?.updateExtension.extension, + }; + }), }, }, };