Quellcode durchsuchen

app: deduplicate allServers list

Brendan Allan vor 1 Monat
Ursprung
Commit
d620455531

+ 4 - 3
packages/app/src/components/dialog-select-server.tsx

@@ -427,6 +427,7 @@ export function DialogSelectServer() {
             }
           >
             {(i) => {
+              const key = ServerConnection.key(i)
               return (
                 <div class="flex items-center gap-3 min-w-0 flex-1 group/item">
                   <Show
@@ -446,8 +447,8 @@ export function DialogSelectServer() {
                   >
                     <ServerRow
                       conn={i}
-                      status={store.status[ServerConnection.key(i)]}
-                      dimmed={store.status[ServerConnection.key(i)]?.healthy === false}
+                      status={store.status[key]}
+                      dimmed={store.status[key]?.healthy === false}
                       class="flex items-center gap-3 px-4 min-w-0 flex-1"
                       badge={
                         <Show when={defaultUrl() === i.http.url}>
@@ -460,7 +461,7 @@ export function DialogSelectServer() {
                   </Show>
                   <Show when={store.editServer.id !== i.http.url}>
                     <div class="flex items-center justify-center gap-5 pl-4">
-                      <Show when={current() === i}>
+                      <Show when={ServerConnection.key(current()) === key}>
                         <p class="text-text-weak text-12-regular">{language.t("dialog.server.current")}</p>
                       </Show>
 

+ 8 - 4
packages/app/src/context/server.tsx

@@ -102,15 +102,19 @@ export const { use: useServer, provider: ServerProvider } = createSimpleContext(
       }),
     )
 
-    const allServers = createMemo(
-      (): Array<ServerConnection.Any> => [
+    const allServers = createMemo((): Array<ServerConnection.Any> => {
+      const servers = [
         ...(props.servers ?? []),
         ...store.list.map((value) => ({
           type: "http" as const,
           http: typeof value === "string" ? { url: value } : value,
         })),
-      ],
-    )
+      ]
+
+      const deduped = new Map(servers.map((conn) => [ServerConnection.key(conn), conn]))
+
+      return [...deduped.values()]
+    })
 
     const [state, setState] = createStore({
       active: props.defaultServer,