From a36661b4c2a24199922d60be1bcb6ed597b433a5 Mon Sep 17 00:00:00 2001 From: Christophe Besson Date: Sat, 29 Aug 2026 17:35:20 +0200 Subject: feat(hub): drop the Search page title, add a Files refresh button MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. The "Search Files"

is removed from the search page — it duplicated the nav and cost a line of vertical space on mobile. `search.title` is dropped from all ten locales (its only use). 2. A monochrome refresh button sits left of the Files breadcrumb home icon. It calls `onRefreshIndex` (re-fetch the group index from the node — the file list is a view over a cached copy with no other way to pull a fresh one), spins while in flight, and only renders where an `onRefreshIndex` is wired (the real group view, not the cross-group search results). New `refresh` icon; `group.refresh_index` in all ten locales. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_018BMLQjqFGCize2KtNBT79v --- .../meshbay-hub/src/meshbay_hub/static/files-app.js | 19 ++++++++++++++++++- packages/meshbay-hub/src/meshbay_hub/static/icon.js | 2 ++ .../meshbay-hub/src/meshbay_hub/static/locales/de.js | 2 +- .../meshbay-hub/src/meshbay_hub/static/locales/en.js | 2 +- .../meshbay-hub/src/meshbay_hub/static/locales/es.js | 2 +- .../meshbay-hub/src/meshbay_hub/static/locales/fr.js | 2 +- .../meshbay-hub/src/meshbay_hub/static/locales/it.js | 2 +- .../meshbay-hub/src/meshbay_hub/static/locales/ja.js | 2 +- .../meshbay-hub/src/meshbay_hub/static/locales/nl.js | 2 +- .../meshbay-hub/src/meshbay_hub/static/locales/pl.js | 2 +- .../src/meshbay_hub/static/locales/pt-BR.js | 2 +- .../src/meshbay_hub/static/locales/zh-CN.js | 2 +- .../meshbay-hub/src/meshbay_hub/static/search-page.js | 2 -- packages/meshbay-hub/src/meshbay_hub/static/style.css | 9 +++++++++ 14 files changed, 39 insertions(+), 13 deletions(-) (limited to 'packages') diff --git a/packages/meshbay-hub/src/meshbay_hub/static/files-app.js b/packages/meshbay-hub/src/meshbay_hub/static/files-app.js index 3d51e67..d2f0727 100644 --- a/packages/meshbay-hub/src/meshbay_hub/static/files-app.js +++ b/packages/meshbay-hub/src/meshbay_hub/static/files-app.js @@ -27,7 +27,7 @@ function FilesPanel({ groupId, transportRef, gekRef, status, entries, nodeDirs, nodeRoots, setEntries, setNodeDirs, setNodeRoots, applyIndex, isNodeAdmin, operatorPaired, mayUpload, userId, setError, onPreview, - showGroup, readOnly, getTransport, + showGroup, readOnly, getTransport, onRefreshIndex, }) { const [selecting, setSelecting] = useState(false); const [selected, setSelected] = useState(() => new Set()); @@ -35,6 +35,16 @@ function FilesPanel({ const [sortAsc, setSortAsc] = useState(true); const [filter, setFilter] = useState(''); const [currentPath, setCurrentPath] = useState(''); + const [refreshing, setRefreshing] = useState(false); + + // Force a re-fetch of the group index from the node — the client's file + // list is a view over a cached copy, and there is no other way to pull a + // fresh one on demand. + const doRefresh = useCallback(async () => { + if (refreshing || !onRefreshIndex) return; + setRefreshing(true); + try { await onRefreshIndex(); } finally { setRefreshing(false); } + }, [refreshing, onRefreshIndex]); // A directory from the group just left rarely exists in the one just // entered (e.g. "outputs" in one group, absent in another) — Files would @@ -329,6 +339,13 @@ function FilesPanel({