feat: SAC 0.6.0 user edit UI, login to dashboard, daily report timer sync
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -84,8 +84,47 @@ type SortKey =
|
||||
| "last_seen_at"
|
||||
| "event_count"
|
||||
| "last_daily_report_at";
|
||||
const sortBy = ref<SortKey>("last_seen_at");
|
||||
const sortDir = ref<"asc" | "desc">("desc");
|
||||
|
||||
const HOSTS_SORT_KEYS: SortKey[] = [
|
||||
"id",
|
||||
"display_name",
|
||||
"hostname",
|
||||
"product",
|
||||
"os_family",
|
||||
"ipv4",
|
||||
"last_seen_at",
|
||||
"event_count",
|
||||
"last_daily_report_at",
|
||||
];
|
||||
|
||||
const HOSTS_SORT_STORAGE_KEY = "sac_hosts_sort";
|
||||
|
||||
function loadHostsSortPrefs(): { sortBy: SortKey; sortDir: "asc" | "desc" } {
|
||||
const fallback = { sortBy: "last_seen_at" as SortKey, sortDir: "desc" as const };
|
||||
try {
|
||||
const raw = localStorage.getItem(HOSTS_SORT_STORAGE_KEY);
|
||||
if (!raw) return fallback;
|
||||
const parsed = JSON.parse(raw) as { sortBy?: string; sortDir?: string };
|
||||
if (
|
||||
parsed.sortBy &&
|
||||
HOSTS_SORT_KEYS.includes(parsed.sortBy as SortKey) &&
|
||||
(parsed.sortDir === "asc" || parsed.sortDir === "desc")
|
||||
) {
|
||||
return { sortBy: parsed.sortBy as SortKey, sortDir: parsed.sortDir };
|
||||
}
|
||||
} catch {
|
||||
/* ignore corrupt storage */
|
||||
}
|
||||
return fallback;
|
||||
}
|
||||
|
||||
function saveHostsSortPrefs(sortBy: SortKey, sortDir: "asc" | "desc") {
|
||||
localStorage.setItem(HOSTS_SORT_STORAGE_KEY, JSON.stringify({ sortBy, sortDir }));
|
||||
}
|
||||
|
||||
const initialSort = loadHostsSortPrefs();
|
||||
const sortBy = ref<SortKey>(initialSort.sortBy);
|
||||
const sortDir = ref<"asc" | "desc">(initialSort.sortDir);
|
||||
const deletingId = ref<number | null>(null);
|
||||
|
||||
function formatDt(iso: string) {
|
||||
@@ -101,10 +140,11 @@ function agentLabel(status: string) {
|
||||
function setSort(key: SortKey) {
|
||||
if (sortBy.value === key) {
|
||||
sortDir.value = sortDir.value === "asc" ? "desc" : "asc";
|
||||
return;
|
||||
} else {
|
||||
sortBy.value = key;
|
||||
sortDir.value = key === "id" || key === "last_seen_at" || key === "event_count" ? "desc" : "asc";
|
||||
}
|
||||
sortBy.value = key;
|
||||
sortDir.value = key === "id" || key === "last_seen_at" || key === "event_count" ? "desc" : "asc";
|
||||
saveHostsSortPrefs(sortBy.value, sortDir.value);
|
||||
}
|
||||
|
||||
function sortMark(key: SortKey) {
|
||||
|
||||
Reference in New Issue
Block a user