All files / libs/tenants/users/profile/components/src/lib/roles/user-role UserRoleLabel.tsx

0% Statements 0/43
0% Branches 0/1
0% Functions 0/1
0% Lines 0/43

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44                                                                                       
import { memo } from 'react';
import { FormattedMessage } from 'react-intl';

import { assert } from '@amalia/ext/typescript';
import { type AdminScope } from '@amalia/kernel/auth/types';
import { useAdminScopes } from '@amalia/tenants/companies/admin-scopes/state';
import { useFeatureFlag } from '@amalia/tenants/companies/state';
import { CompanyFeatureFlags } from '@amalia/tenants/companies/types';
import { UserRole } from '@amalia/tenants/users/types';

import { UserRoleLabels } from './roles.messages';

export type UserRoleLabelProps = {
  readonly role: UserRole;
  readonly adminScopeId: AdminScope['id'] | null;
};

export const UserRoleLabel = memo(function UserRoleLabel({ role, adminScopeId }: UserRoleLabelProps) {
  const { data: adminScopesList } = useAdminScopes();

  assert(role in UserRoleLabels, `Invalid user role: ${role}`);

  const { isFeatureEnabled: isAdminScopesFeatureEnabled } = useFeatureFlag(CompanyFeatureFlags.ADMIN_SCOPES);

  if (role === UserRole.ADMIN && isAdminScopesFeatureEnabled) {
    return <FormattedMessage defaultMessage="Admin (full access)" />;
  }

  if (role === UserRole.SCOPED_ADMIN) {
    const adminScope = adminScopesList?.find((adminScope) => adminScope.id === adminScopeId);

    return adminScope ? (
      <FormattedMessage
        defaultMessage="Admin ({scopeName})"
        values={{ scopeName: adminScope.name }}
      />
    ) : (
      <FormattedMessage defaultMessage="Admin (scoped)" />
    );
  }

  return <FormattedMessage {...UserRoleLabels[role]} />;
});