Skip to content

Commit 7a516d6

Browse files
committed
refactor: point to admin console if url set
1 parent b131190 commit 7a516d6

8 files changed

Lines changed: 54 additions & 27 deletions

File tree

src/header/Header.tsx

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ interface HeaderProps {
2020
isHiddenMainMenu?: boolean,
2121
isLibrary?: boolean,
2222
containerProps?: ContainerPropsType,
23+
readOnly?: boolean,
2324
}
2425

2526
const Header = ({
@@ -30,6 +31,7 @@ const Header = ({
3031
isHiddenMainMenu = false,
3132
isLibrary = false,
3233
containerProps = {},
34+
readOnly = false,
3335
}: HeaderProps) => {
3436
const intl = useIntl();
3537
const waffleFlags = useWaffleFlags();
@@ -43,8 +45,8 @@ const Header = ({
4345
const settingMenuItems = useSettingMenuItems(contextId);
4446
const toolsMenuItems = useToolsMenuItems(contextId);
4547
const libraryToolsMenuItems = useLibraryToolsMenuItems(contextId);
46-
const libraryToolsSettingsItems = useLibrarySettingsMenuItems();
47-
const mainMenuDropdowns = !isLibrary ? [
48+
const libraryToolsSettingsItems = useLibrarySettingsMenuItems(contextId, readOnly);
49+
let mainMenuDropdowns = !isLibrary ? [
4850
{
4951
id: `${intl.formatMessage(messages['header.links.content'])}-dropdown-menu`,
5052
buttonTitle: intl.formatMessage(messages['header.links.content']),
@@ -61,18 +63,25 @@ const Header = ({
6163
items: toolsMenuItems,
6264
},
6365
] : [
64-
{
65-
id: `${intl.formatMessage(messages['header.links.settings'])}-dropdown-menu`,
66-
buttonTitle: intl.formatMessage(messages['header.links.settings']),
67-
items: libraryToolsSettingsItems,
68-
},
6966
{
7067
id: `${intl.formatMessage(messages['header.links.tools'])}-dropdown-menu`,
7168
buttonTitle: intl.formatMessage(messages['header.links.tools']),
7269
items: libraryToolsMenuItems,
7370
},
7471
];
7572

73+
// Include settings menu only if user is allowed to see them.
74+
if (isLibrary && libraryToolsSettingsItems.length > 0) {
75+
mainMenuDropdowns = [
76+
{
77+
id: `${intl.formatMessage(messages['header.links.settings'])}-dropdown-menu`,
78+
buttonTitle: intl.formatMessage(messages['header.links.settings']),
79+
items: libraryToolsSettingsItems,
80+
},
81+
...mainMenuDropdowns,
82+
];
83+
}
84+
7685
const getOutlineLink = () => {
7786
if (isLibrary) {
7887
return `/library/${contextId}`;

src/header/hooks.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ describe('header utils', () => {
142142

143143
describe('useLibrarySettingsMenuItems', () => {
144144
it('should contain team access url', () => {
145-
const items = renderHook(() => useLibrarySettingsMenuItems()).result.current;
145+
const items = renderHook(() => useLibrarySettingsMenuItems('library-123', false)).result.current;
146146
expect(items).toContainEqual({ title: 'Team Access', href: 'http://localhost/?sa=manage-team' });
147147
});
148148
});

src/header/hooks.tsx

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -146,25 +146,40 @@ export const useLibraryToolsMenuItems = (itemId: string) => {
146146
return items;
147147
};
148148

149-
export const useLibrarySettingsMenuItems = () => {
149+
export const useLibrarySettingsMenuItems = (itemId: string, readOnly: boolean) => {
150150
const intl = useIntl();
151151

152152
const openTeamAccessModalUrl = () => {
153-
if (!window.location.href) {
154-
return null;
153+
const adminConsoleUrl = getConfig().ADMIN_CONSOLE_URL;
154+
// always show link to admin console MFE if it is being used
155+
const shouldShowAdminConsoleLink = !!adminConsoleUrl;
156+
157+
// if the admin console MFE isn't being used, show team modal button for non–read-only users
158+
const shouldShowTeamModalButton = !adminConsoleUrl && !readOnly;
159+
if (shouldShowTeamModalButton) {
160+
if (!window.location.href) {
161+
return null;
162+
}
163+
const url = new URL(window.location.href);
164+
// Set ?sa=manage-team in url which in turn opens team access modal
165+
url.searchParams.set(LibQueryParamKeys.SidebarActions, SidebarActions.ManageTeam);
166+
return url.toString();
155167
}
156-
const url = new URL(window.location.href);
157-
// Set ?sa=manage-team in url which in turn opens team access modal
158-
url.searchParams.set(LibQueryParamKeys.SidebarActions, SidebarActions.ManageTeam);
159-
return url.toString();
168+
if (shouldShowAdminConsoleLink) {
169+
return `${adminConsoleUrl}/authz/libraries/${itemId}`;
170+
}
171+
return null;
160172
};
161173

162-
const items = [
163-
{
174+
const items: { title: string; href: string }[] = [];
175+
176+
const teamAccessUrl = openTeamAccessModalUrl();
177+
if (teamAccessUrl) {
178+
items.push({
164179
title: intl.formatMessage(messages['header.menu.teamAccess']),
165-
href: openTeamAccessModalUrl(),
166-
},
167-
];
180+
href: teamAccessUrl,
181+
});
182+
}
168183

169184
return items;
170185
};

src/library-authoring/backup-restore/LibraryBackupPage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import { useContentLibrary } from '@src/library-authoring/data/apiHooks';
2424

2525
export const LibraryBackupPage = () => {
2626
const intl = useIntl();
27-
const { libraryId } = useLibraryContext();
27+
const { libraryId, readOnly } = useLibraryContext();
2828
const [taskId, setTaskId] = useState<string>('');
2929
const [isMutationInProgress, setIsMutationInProgress] = useState<boolean>(false);
3030
const timeoutRef = useRef<NodeJS.Timeout | null>(null);
@@ -144,6 +144,7 @@ export const LibraryBackupPage = () => {
144144
title={libraryData.title}
145145
org={libraryData.org}
146146
contextId={libraryId}
147+
readOnly={readOnly}
147148
isLibrary
148149
containerProps={{
149150
size: undefined,

src/library-authoring/collections/LibraryCollectionPage.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ const LibraryCollectionPage = () => {
107107
showOnlyPublished,
108108
extraFilter: contextExtraFilter,
109109
setCollectionId,
110+
readOnly,
110111
} = useLibraryContext();
111112
const { sidebarItemInfo } = useSidebarContext();
112113

@@ -194,6 +195,7 @@ const LibraryCollectionPage = () => {
194195
title={libraryData.title}
195196
org={libraryData.org}
196197
contextId={libraryId}
198+
readOnly={readOnly}
197199
isLibrary
198200
containerProps={{
199201
size: undefined,

src/library-authoring/section-subsections/LibrarySectionPage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import { ContainerEditableTitle, FooterActions, HeaderActions } from '../contain
2020
/** Full library section page */
2121
export const LibrarySectionPage = () => {
2222
const intl = useIntl();
23-
const { libraryId, containerId } = useLibraryContext();
23+
const { libraryId, containerId, readOnly } = useLibraryContext();
2424
const {
2525
sidebarItemInfo,
2626
} = useSidebarContext();
@@ -84,6 +84,7 @@ export const LibrarySectionPage = () => {
8484
org={libraryData.org}
8585
contextId={libraryData.id}
8686
isLibrary
87+
readOnly={readOnly}
8788
containerProps={{
8889
size: undefined,
8990
}}

src/library-authoring/section-subsections/LibrarySubsectionPage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import { ContainerEditableTitle, FooterActions, HeaderActions } from '../contain
2222
/** Full library subsection page */
2323
export const LibrarySubsectionPage = () => {
2424
const intl = useIntl();
25-
const { libraryId, containerId } = useLibraryContext();
25+
const { libraryId, containerId, readOnly } = useLibraryContext();
2626
const { sidebarItemInfo } = useSidebarContext();
2727

2828
const { data: libraryData, isPending: isLibPending } = useContentLibrary(libraryId);
@@ -64,6 +64,7 @@ export const LibrarySubsectionPage = () => {
6464
title={libraryData.title}
6565
org={libraryData.org}
6666
contextId={libraryData.id}
67+
readOnly={readOnly}
6768
isLibrary
6869
containerProps={{
6970
size: undefined,

src/library-authoring/units/LibraryUnitPage.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,7 @@ import { ContainerEditableTitle, FooterActions, HeaderActions } from '../contain
2323
export const LibraryUnitPage = () => {
2424
const intl = useIntl();
2525

26-
const {
27-
libraryId,
28-
containerId,
29-
} = useLibraryContext();
26+
const { libraryId, containerId, readOnly } = useLibraryContext();
3027

3128
// istanbul ignore if: this should never happen
3229
if (!containerId) {
@@ -71,6 +68,7 @@ export const LibraryUnitPage = () => {
7168
org={libraryData.org}
7269
contextId={libraryId}
7370
isLibrary
71+
readOnly={readOnly}
7472
containerProps={{
7573
size: undefined,
7674
}}

0 commit comments

Comments
 (0)