From 690f93e6a4b6d209eddfa499f4cdb688cc9c4e51 Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Mon, 17 Aug 2026 09:37:39 +0000 Subject: [PATCH] feat(app): dismiss recent home projects --- .../app/src/pages/home/home-projects-view.tsx | 20 +++++++++++++++---- packages/app/src/pages/home/home-projects.tsx | 4 ++++ 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/app/src/pages/home/home-projects-view.tsx b/packages/app/src/pages/home/home-projects-view.tsx index 2cd70594ef3..76b755547ec 100644 --- a/packages/app/src/pages/home/home-projects-view.tsx +++ b/packages/app/src/pages/home/home-projects-view.tsx @@ -36,6 +36,7 @@ export type HomeProjectsViewProps = { projectsForServer: (server: ServerConnection.Any) => LocalProject[] recentForServer: (server: ServerConnection.Any) => LocalProject[] showRecentForServer: (server: ServerConnection.Any) => boolean + onDismissRecent: (server: ServerConnection.Any) => void homedirForServer: (server: ServerConnection.Any) => string collapsed: (server: ServerConnection.Any) => boolean canDefaultServer: boolean @@ -115,7 +116,7 @@ export function HomeProjectsView(props: HomeProjectsViewProps) { {...contextMenuProps} server={props.servers[0]} projects={props.projects} - items={props.recentForServer(props.servers[0])} + items={props.showRecentForServer(props.servers[0]) ? props.recentForServer(props.servers[0]) : []} /> } > @@ -132,7 +133,7 @@ export function HomeProjectsView(props: HomeProjectsViewProps) { const healthy = () => !!props.serverHealth(item)?.healthy const hasProjects = () => projects().length > 0 const showRecent = () => props.showRecentForServer(item) - const hasChildren = () => hasProjects() || recent().length > 0 + const hasChildren = () => hasProjects() || (showRecent() && recent().length > 0) const collapsed = () => props.collapsed(item) return (
@@ -155,7 +156,7 @@ export function HomeProjectsView(props: HomeProjectsViewProps) { {...contextMenuProps} server={item} projects={projects()} - items={recent()} + items={showRecent() ? recent() : []} /> } > @@ -435,8 +436,19 @@ function HomeProjectEmpty( {props.language.t("home.project.add")} 0}> -
+
{props.language.t("home.recentlyClosed")}
+ + } + aria-label={props.language.t("common.dismiss")} + onClick={() => props.onDismissRecent(props.server)} + /> +
{(project) => } diff --git a/packages/app/src/pages/home/home-projects.tsx b/packages/app/src/pages/home/home-projects.tsx index d7397986524..3d3e73736f1 100644 --- a/packages/app/src/pages/home/home-projects.tsx +++ b/packages/app/src/pages/home/home-projects.tsx @@ -2,11 +2,14 @@ import type { HomeProjectsController } from "./home-projects-controller" import { HomeProjectsView } from "./home-projects-view" import type { HomeScrollController } from "./home-scroll-controller" import { ServerConnection } from "@/context/servers" +import { createStore } from "solid-js/store" export function HomeProjects(props: { projects: HomeProjectsController; scroll: HomeScrollController }) { const recentMode = new Map() + const [dismissedRecent, setDismissedRecent] = createStore({} as Record) const showRecentForServer = (server: ServerConnection.Any) => { const key = ServerConnection.key(server) + if (dismissedRecent[key]) return false if (recentMode.get(key)) return true if (props.projects.server.projects(server).length > 0) return false recentMode.set(key, true) @@ -23,6 +26,7 @@ export function HomeProjects(props: { projects: HomeProjectsController; scroll: projectsForServer={props.projects.server.projects} recentForServer={props.projects.project.recentForServer} showRecentForServer={showRecentForServer} + onDismissRecent={(server) => setDismissedRecent(ServerConnection.key(server), true)} homedirForServer={props.projects.project.homedirForServer} collapsed={props.projects.server.collapsed} canDefaultServer={props.projects.server.canDefault()}