thread-master/apps/web/src/lib/memberRole.ts

42 lines
1.1 KiB
TypeScript
Raw Normal View History

2026-07-10 05:10:31 +00:00
import type { Member, Role } from "../domain/types";
type TFn = (key: string) => string;
/** 角色標籤(可接 i18n */
export function roleLabel(role: Role | string, t?: TFn): string {
if (role === "admin") return t ? t("role.admin") : "管理員";
if (role === "member") return t ? t("role.member") : "一般會員";
return String(role);
}
/**
* admin
*
*/
export function memberRoleSummary(
member: Pick<Member, "roles"> | null | undefined,
t?: TFn,
): {
primary: "admin" | "member";
primaryLabel: string;
labels: string[];
isAdmin: boolean;
} {
const roles = member?.roles?.length ? member.roles : (["member"] as Role[]);
const isAdmin = roles.includes("admin");
const primary = isAdmin ? "admin" : "member";
const labels = [...new Set(roles.map((r) => roleLabel(r, t)))];
return {
primary,
primaryLabel: isAdmin
? t
? t("role.admin")
: "管理員"
: t
? t("role.member")
: "一般會員",
labels,
isAdmin,
};
}