TriWorldBench_SPACE / src /lib /data /triworld-hero-actions.ts
TriWorldBench's picture
Update TriWorldBench web from desktop manager
1187856 verified
Raw
History Blame Contribute Delete
1.64 kB
import { getDb } from "@/lib/db";
import { all } from "@/lib/db/helpers";
import { contentValue, hasLocalizedText, localized, type LocalizedText } from "@/lib/i18n";
export interface TriWorldHeroAction {
id: number;
actionKey: string;
labelText: LocalizedText;
href: string;
openInNewTab: boolean;
}
interface HeroActionRow {
id: number;
action_key: string;
label_en: string;
label_zh: string;
href: string;
open_in_new_tab: number;
}
const FALLBACK_ACTIONS: TriWorldHeroAction[] = [
{ id: 1, actionKey: "submission", labelText: localized("Submission", "提交"), href: "/submission", openInNewTab: false },
{ id: 2, actionKey: "contact_us", labelText: localized("Contact Us", "联系我们"), href: "#contact", openInNewTab: false },
{ id: 3, actionKey: "github", labelText: localized("GitHub", "GitHub"), href: "https://github.com", openInNewTab: true },
{ id: 4, actionKey: "paper", labelText: localized("Paper", "论文"), href: "#citation", openInNewTab: false },
];
export function getTriWorldHeroActions(): TriWorldHeroAction[] {
try {
const rows = all<HeroActionRow>(
getDb().prepare("SELECT * FROM triworld_hero_actions ORDER BY sort_order, id")
);
if (!rows.length) return FALLBACK_ACTIONS;
return rows
.map((row) => ({
id: row.id,
actionKey: row.action_key,
labelText: localized(row.label_en, row.label_zh),
href: contentValue(row.href),
openInNewTab: Number(row.open_in_new_tab) > 0,
}))
.filter((action) => hasLocalizedText(action.labelText) && Boolean(action.href));
} catch {
return FALLBACK_ACTIONS;
}
}