From c2fdccd1635139f402e9842fb8b95b2f20b8b7e6 Mon Sep 17 00:00:00 2001 From: Sebastian Malton Date: Thu, 24 Mar 2022 09:43:34 -0400 Subject: [PATCH] Remove observable.map in PodDetailsSecrets Signed-off-by: Sebastian Malton --- .../+workloads-pods/pod-details-secrets.tsx | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/renderer/components/+workloads-pods/pod-details-secrets.tsx b/src/renderer/components/+workloads-pods/pod-details-secrets.tsx index c7985bb9aa..989c151217 100644 --- a/src/renderer/components/+workloads-pods/pod-details-secrets.tsx +++ b/src/renderer/components/+workloads-pods/pod-details-secrets.tsx @@ -7,7 +7,7 @@ import "./pod-details-secrets.scss"; import React, { useEffect, useState } from "react"; import { Link } from "react-router-dom"; -import { autorun, observable } from "mobx"; +import { reaction } from "mobx"; import { observer } from "mobx-react"; import { Pod, Secret, secretsApi } from "../../../common/k8s-api/endpoints"; import { getDetailsUrl } from "../kube-detail-params"; @@ -17,18 +17,27 @@ export interface PodDetailsSecretsProps { } export const PodDetailsSecrets = observer(({ pod }: PodDetailsSecretsProps) => { - const [secrets] = useState(observable.map()); + const [secrets, setSecrets] = useState(new Map()); - useEffect(() => autorun(async () => { - const podSecrets = await Promise.all( - pod.getSecrets().map(secretName => secretsApi.get({ - name: secretName, - namespace: pod.getNs(), - })), - ); + useEffect(() => ( + reaction( + () => pod.getSecrets(), + async (secretNames) => { + const results = await Promise.allSettled( + secretNames.map(secretName => secretsApi.get({ + name: secretName, + namespace: pod.getNs(), + })), + ); - secrets.replace(podSecrets.filter(Boolean).map(secret => [secret.getName(), secret])); - }), []); + setSecrets(new Map( + results + .filter(result => result.status === "fulfilled" && result.value) + .map(result => (result as PromiseFulfilledResult).value) + .map(secret => [secret.getName(), secret]), + )); + }) + ), []); const renderSecret = (name: string) => { const secret = secrets.get(name);