Update: admin panel fixes, badge icons, studio improvements, gitea runner v5
Gitea Actions Runner Test / test-job (push) Successful in 2s
CI / check (push) Failing after 21s
CI / tests-unit (push) Skipped
CI / tests-integration (push) Skipped
CI / tests-ui (push) Skipped
CI / preflight (push) Skipped
CI / deploy (push) Skipped

This commit is contained in:
openhands committed 2026-10-11 18:44:02 +02:00
1 parent afc8909d3f
commit a06db72c65
7 files changed
+185 -47

No files matched your search

+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 = () => {