feat: Rename to Toju and add translation
Some checks failed
Deploy Web Apps / deploy (push) Successful in 5m52s
Build Android APK / build-android-apk (push) Failing after 23m15s
Queue Release Build / prepare (push) Successful in 1m42s
Queue Release Build / build-linux (push) Failing after 9m33s
Queue Release Build / build-windows (push) Successful in 26m5s
Queue Release Build / finalize (push) Has been skipped
Some checks failed
Deploy Web Apps / deploy (push) Successful in 5m52s
Build Android APK / build-android-apk (push) Failing after 23m15s
Queue Release Build / prepare (push) Successful in 1m42s
Queue Release Build / build-linux (push) Failing after 9m33s
Queue Release Build / build-windows (push) Successful in 26m5s
Queue Release Build / finalize (push) Has been skipped
This commit is contained in:
@@ -5,6 +5,7 @@ import {
|
||||
RoomRoleAssignment
|
||||
} from '../../../../shared-kernel';
|
||||
import { SYSTEM_ROLE_IDS } from '../constants/access-control.constants';
|
||||
import { localizeSystemRoleDisplayName } from './role-display.rules';
|
||||
import type { MemberIdentity } from '../models/access-control.model';
|
||||
import {
|
||||
buildRoleLookup,
|
||||
@@ -106,13 +107,19 @@ export function getAssignedRoleIds(assignments: readonly RoomRoleAssignment[] |
|
||||
return uniqueStrings(assignment?.roleIds ?? []);
|
||||
}
|
||||
|
||||
export function getDisplayRoleName(room: Room, member: MemberIdentity | null | undefined): string {
|
||||
export function getDisplayRoleName(
|
||||
room: Room,
|
||||
member: MemberIdentity | null | undefined,
|
||||
translate?: (key: string) => string
|
||||
): string {
|
||||
const translateOr = (key: string, fallback: string) => translate?.(key) ?? fallback;
|
||||
|
||||
if (!member) {
|
||||
return 'Member';
|
||||
return translateOr('shared.leaveServer.roles.member', 'Member');
|
||||
}
|
||||
|
||||
if (room.hostId === member.id || room.hostId === member.oderId) {
|
||||
return 'Owner';
|
||||
return translateOr('shared.leaveServer.roles.owner', 'Owner');
|
||||
}
|
||||
|
||||
const roles = normalizeRoomRoles(room.roles, room.permissions);
|
||||
@@ -121,8 +128,13 @@ export function getDisplayRoleName(room: Room, member: MemberIdentity | null | u
|
||||
.map((roleId) => roleLookup.get(roleId))
|
||||
.filter((role): role is RoomRole => !!role)
|
||||
.sort(roleSortDescending);
|
||||
const roleName = assignedRoles[0]?.name;
|
||||
|
||||
return assignedRoles[0]?.name || '@everyone';
|
||||
if (!roleName) {
|
||||
return translateOr('shared.accessControl.roles.everyone', '@everyone');
|
||||
}
|
||||
|
||||
return translate ? localizeSystemRoleDisplayName(roleName, translate) : roleName;
|
||||
}
|
||||
|
||||
export function getAssignedRoles(room: Room, identity: MemberIdentity | null | undefined): RoomRole[] {
|
||||
|
||||
@@ -0,0 +1,37 @@
|
||||
import {
|
||||
describe,
|
||||
expect,
|
||||
it
|
||||
} from 'vitest';
|
||||
|
||||
import { localizeSystemRoleDisplayName, resolveSystemRoleDisplayI18nKey } from './role-display.rules';
|
||||
|
||||
describe('role-display.rules', () => {
|
||||
describe('resolveSystemRoleDisplayI18nKey', () => {
|
||||
it('maps built-in role display names to i18n keys', () => {
|
||||
expect(resolveSystemRoleDisplayI18nKey('Member')).toBe('shared.leaveServer.roles.member');
|
||||
expect(resolveSystemRoleDisplayI18nKey('Owner')).toBe('shared.leaveServer.roles.owner');
|
||||
expect(resolveSystemRoleDisplayI18nKey('@everyone')).toBe('shared.accessControl.roles.everyone');
|
||||
expect(resolveSystemRoleDisplayI18nKey('Moderator')).toBe('shared.leaveServer.roles.moderator');
|
||||
expect(resolveSystemRoleDisplayI18nKey('Admin')).toBe('shared.leaveServer.roles.admin');
|
||||
});
|
||||
|
||||
it('returns null for custom role names', () => {
|
||||
expect(resolveSystemRoleDisplayI18nKey('Custom Role')).toBeNull();
|
||||
});
|
||||
});
|
||||
|
||||
describe('localizeSystemRoleDisplayName', () => {
|
||||
it('translates known system role names', () => {
|
||||
const translate = (key: string) => `translated:${key}`;
|
||||
|
||||
expect(localizeSystemRoleDisplayName('Admin', translate)).toBe('translated:shared.leaveServer.roles.admin');
|
||||
});
|
||||
|
||||
it('returns custom role names unchanged', () => {
|
||||
const translate = (key: string) => `translated:${key}`;
|
||||
|
||||
expect(localizeSystemRoleDisplayName('Event Host', translate)).toBe('Event Host');
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -0,0 +1,20 @@
|
||||
const SYSTEM_ROLE_DISPLAY_I18N_KEYS: Readonly<Record<string, string>> = {
|
||||
Member: 'shared.leaveServer.roles.member',
|
||||
Owner: 'shared.leaveServer.roles.owner',
|
||||
'@everyone': 'shared.accessControl.roles.everyone',
|
||||
Moderator: 'shared.leaveServer.roles.moderator',
|
||||
Admin: 'shared.leaveServer.roles.admin'
|
||||
};
|
||||
|
||||
export function resolveSystemRoleDisplayI18nKey(displayName: string): string | null {
|
||||
return SYSTEM_ROLE_DISPLAY_I18N_KEYS[displayName] ?? null;
|
||||
}
|
||||
|
||||
export function localizeSystemRoleDisplayName(
|
||||
displayName: string,
|
||||
translate: (key: string) => string
|
||||
): string {
|
||||
const key = resolveSystemRoleDisplayI18nKey(displayName);
|
||||
|
||||
return key ? translate(key) : displayName;
|
||||
}
|
||||
Reference in New Issue
Block a user