mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-20 10:52:08 +00:00
33 lines
1.2 KiB
TypeScript
33 lines
1.2 KiB
TypeScript
import type { Organization, OrganizationRole } from '@/api/orgs';
|
|
|
|
const defaultBadgeClass = 'bg-slate-100 text-slate-700';
|
|
|
|
const roleBadgeClasses: Record<OrganizationRole, string> = {
|
|
owner: 'bg-amber-100 text-amber-800 dark:bg-amber-900 dark:text-amber-200',
|
|
admin: 'bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200',
|
|
editor: 'bg-emerald-100 text-emerald-800 dark:bg-emerald-900 dark:text-emerald-200',
|
|
viewer: defaultBadgeClass,
|
|
};
|
|
|
|
export const normalizeRole = (role: OrganizationRole): OrganizationRole => role;
|
|
|
|
export const canManageOrg = (org: Organization | null, currentUser?: string): boolean => {
|
|
if (!org || !currentUser) return false;
|
|
if (org.ownerUserId === currentUser) return true;
|
|
const role = normalizeRole(
|
|
org.members?.find((member) => member.userId === currentUser)?.role ?? 'viewer',
|
|
);
|
|
return role === 'admin' || role === 'owner';
|
|
};
|
|
|
|
export const roleBadgeClass = (role: string): string => {
|
|
return roleBadgeClasses[role as OrganizationRole] ?? defaultBadgeClass;
|
|
};
|
|
|
|
export const formatOrgDate = (value?: string): string => {
|
|
if (!value) return 'Unknown';
|
|
const date = new Date(value);
|
|
if (Number.isNaN(date.getTime())) return value;
|
|
return date.toLocaleDateString();
|
|
};
|