Update: admin panel fixes, badge icons, studio improvements, gitea runner v5

This commit is contained in:
openhands
2026-10-11 18:44:02 +02:00
parent afc8909d3f
commit a06db72c65
7 changed files with 185 additions and 47 deletions
+27 -5
View File
@@ -124,6 +124,7 @@ const GRID_ROW_H = 176;
// Persisted UI preferences (survive reloads).
const LS_VIEW_MODE = "studio:viewMode";
const LS_SORT_BY = "studio:sortBy";
const LS_FILTERS = "studio.filters";
const SORT_KEYS = [
"default",
"name",
@@ -228,10 +229,31 @@ export function StudioClient({
const [activeSource, setActiveSource] = useState<string>("");
const [activeSourceName, setActiveSourceName] = useState("");
// Filters
const [typeFilter, setTypeFilter] = useState<string>("all");
const [categoryFilter, setCategoryFilter] = useState<string>("all");
const [statusFilter, setStatusFilter] = useState<string>("all");
// Filter persistence in localStorage
const storedFilters = JSON.parse(
localStorage.getItem(LS_FILTERS) ||
'{"typeFilter":"all","categoryFilter":"all","statusFilter":"all"}',
);
const [typeFilter, setTypeFilter] = useState<string>(
storedFilters.typeFilter || "all",
);
const [categoryFilter, setCategoryFilter] = useState<string>(
storedFilters.categoryFilter || "all",
);
const [statusFilter, setStatusFilter] = useState<string>(
storedFilters.statusFilter || "all",
);
// Sync to localStorage on change
useEffect(() => {
localStorage.setItem(
LS_FILTERS,
JSON.stringify({
typeFilter,
categoryFilter,
statusFilter,
}),
);
}, [typeFilter, categoryFilter, statusFilter]);
const [sortBy, setSortBy] = useState<string>(() =>
readLs(LS_SORT_BY, "default", SORT_KEYS),
);
@@ -378,7 +400,7 @@ export function StudioClient({
// ── Grid virtualization ─────────────────────────────────────────
const [gridCols, setGridCols] = useState(1);
useEffect(() => {
useLayoutEffect(() => {
const el = listRef.current;
if (viewMode !== "grid" || !el) return;
const update = () => {