diff --git a/frontend/mocking/faked_schema.js b/frontend/mocking/faked_schema.js index 80c49c405f..177b299604 100644 --- a/frontend/mocking/faked_schema.js +++ b/frontend/mocking/faked_schema.js @@ -96,7 +96,10 @@ export const getTypeNames = () => gql` ): SharedUser # Query used to check if the user has an admin role. - isUserAdmin: Boolean + isUserAdmin( + # The organization that you want to check for admin permissions on. + orgId: ID! + ): Boolean # Query used to check if the user has a super admin role. isUserSuperAdmin: Boolean diff --git a/frontend/src/OrganizationDetails.js b/frontend/src/OrganizationDetails.js index c96c6482ab..f3fc73d1dc 100644 --- a/frontend/src/OrganizationDetails.js +++ b/frontend/src/OrganizationDetails.js @@ -14,7 +14,7 @@ import { Tabs, useToast, } from '@chakra-ui/core' -import { ORG_DETAILS_PAGE } from './graphql/queries' +import { ORG_DETAILS_PAGE, IS_USER_ADMIN } from './graphql/queries' import { Link as RouteLink, useParams } from 'react-router-dom' import { OrganizationSummary } from './OrganizationSummary' import { ErrorBoundary } from 'react-error-boundary' @@ -46,6 +46,29 @@ export default function OrganizationDetails() { }, }) + const orgId = data?.organization?.id + const { data: isAdminData } = useQuery(IS_USER_ADMIN, { + skip: !orgId, + variables: { orgId: orgId }, + + onError: (error) => { + const [_, message] = error.message.split(': ') + toast({ + title: 'Error', + description: message, + status: 'error', + duration: 9000, + isClosable: true, + position: 'top-left', + }) + }, + }) + + let isAdmin = false + if (isAdminData?.isUserAdmin) { + isAdmin = isAdminData.isUserAdmin + } + let orgName = '' if (data?.organization) { orgName = data.organization.name @@ -85,9 +108,11 @@ export default function OrganizationDetails() { Domains - - Users - + {isAdmin && ( + + Users + + )} @@ -107,11 +132,13 @@ export default function OrganizationDetails() { - - - - - + {isAdmin && ( + + + + + + )} diff --git a/frontend/src/__tests__/OrganizationDetails.test.js b/frontend/src/__tests__/OrganizationDetails.test.js index bbfa5b5ccd..109c0a9e60 100644 --- a/frontend/src/__tests__/OrganizationDetails.test.js +++ b/frontend/src/__tests__/OrganizationDetails.test.js @@ -4,7 +4,7 @@ import { MockedProvider } from '@apollo/client/testing' import { MemoryRouter, Route } from 'react-router-dom' import { theme, ThemeProvider } from '@chakra-ui/core' import { UserVarProvider } from '../UserState' -import { ORG_DETAILS_PAGE } from '../graphql/queries' +import { ORG_DETAILS_PAGE, IS_USER_ADMIN } from '../graphql/queries' import { I18nProvider } from '@lingui/react' import { setupI18n } from '@lingui/core' import OrganizationDetails from '../OrganizationDetails' @@ -110,6 +110,17 @@ describe('', () => { }, }, }, + { + request: { + query: IS_USER_ADMIN, + variables: { orgId: 'ODk3MDg5MzI2MA==' }, + }, + result: { + data: { + isUserAdmin: true, + }, + }, + }, ] const { getByText } = render( @@ -139,6 +150,7 @@ describe('', () => { await waitFor(() => { expect(getByText(name)).toBeInTheDocument() + expect(getByText('Users')).toBeInTheDocument() }) }) }) diff --git a/frontend/src/graphql/queries.js b/frontend/src/graphql/queries.js index 5ac369cdd6..eaab58cfe2 100644 --- a/frontend/src/graphql/queries.js +++ b/frontend/src/graphql/queries.js @@ -1368,3 +1368,9 @@ export const IS_USER_SUPER_ADMIN = gql` isUserSuperAdmin } ` + +export const IS_USER_ADMIN = gql` + query IsUserAdmin($orgId: ID!) { + isUserAdmin(orgId: $orgId) + } +`