Files
donutbrowser/src/lib/dns-blocklist-levels.ts
T
2026-07-18 11:42:07 +04:00

39 lines
1.6 KiB
TypeScript

/**
* The DNS blocklist levels the backend accepts, mirroring
* `BlocklistLevel::as_str` in `src-tauri/src/dns_blocklist.rs`. Ordered from
* least to most restrictive, with `custom` (the user's own sources/rules) last.
*
* Every level picker reads from this list. Keeping it in one place is what
* stops a new level from reaching some surfaces and not others — `custom` was
* previously missing from two pickers, so a profile already set to it rendered
* with nothing selected and could not be restored.
*
* Labels are translation keys, never the backend's `display_name`: that field
* is hardcoded English and renders untranslated to every locale.
*/
export const DNS_BLOCKLIST_LEVELS = [
{ value: "light", labelKey: "dnsBlocklist.light" },
{ value: "normal", labelKey: "dnsBlocklist.normal" },
{ value: "pro", labelKey: "dnsBlocklist.pro" },
{ value: "pro_plus", labelKey: "dnsBlocklist.proPlus" },
{ value: "ultimate", labelKey: "dnsBlocklist.ultimate" },
{ value: "custom", labelKey: "dnsBlocklist.customLevel" },
] as const;
export type DnsBlocklistLevel = (typeof DNS_BLOCKLIST_LEVELS)[number]["value"];
/**
* Translation key for a level slug. A null/empty level means no filtering, and
* an unrecognised one (a level added backend-first) falls back to the same,
* which is the honest reading of "we don't know this level".
*/
export function dnsBlocklistLabelKey(level: string | null | undefined): string {
if (!level) {
return "dnsBlocklist.none";
}
return (
DNS_BLOCKLIST_LEVELS.find((l) => l.value === level)?.labelKey ??
"dnsBlocklist.none"
);
}