* feat: add backup view for libraries v2 * chore: updated paths and cleanup * chore: cleanup text * chore: added test * chore: fix contracts after rebase * chore: more tests to improve coverage * chore: more test for coverage * chore: more test for coverage * chore: fixed lint issues * chore: update naming for a more semantic one * chore: changed fireEvent to userEvent * chore: improved queryKeys * chore: lint cleanup * chore: changed tests and time to 1min * chore: even more tests * chore: split hook for library menu items * chore: fixed typo on refactor * chore: improved test to use available mocks * chore: change from jest.mocks to spyon * chore: update test based on commets * chore: update test to get URL from a better place * chore: added extra getters for new endpoints * chore: update test to prevent issues with useContentLibrary * chore: added comments for clarity * chore: lint fix * chore: updated url handle to use full URL * chore: linting fixes
142 lines
5.1 KiB
JavaScript
142 lines
5.1 KiB
JavaScript
import { getConfig } from '@edx/frontend-platform';
|
|
import { useIntl } from '@edx/frontend-platform/i18n';
|
|
import { useSelector } from 'react-redux';
|
|
import { Badge } from '@openedx/paragon';
|
|
|
|
import { getPagePath } from '../utils';
|
|
import { useWaffleFlags } from '../data/apiHooks';
|
|
import { getStudioHomeData } from '../studio-home/data/selectors';
|
|
import messages from './messages';
|
|
import courseOptimizerMessages from '../optimizer-page/messages';
|
|
|
|
export const useContentMenuItems = courseId => {
|
|
const intl = useIntl();
|
|
const studioBaseUrl = getConfig().STUDIO_BASE_URL;
|
|
const waffleFlags = useWaffleFlags();
|
|
const { librariesV2Enabled } = useSelector(getStudioHomeData);
|
|
|
|
const items = [
|
|
{
|
|
href: waffleFlags.useNewCourseOutlinePage ? `/course/${courseId}` : `${studioBaseUrl}/course/${courseId}`,
|
|
title: intl.formatMessage(messages['header.links.outline']),
|
|
},
|
|
{
|
|
href: waffleFlags.useNewUpdatesPage ? `/course/${courseId}/course_info` : `${studioBaseUrl}/course_info/${courseId}`,
|
|
title: intl.formatMessage(messages['header.links.updates']),
|
|
},
|
|
{
|
|
href: getPagePath(courseId, 'true', 'tabs'),
|
|
title: intl.formatMessage(messages['header.links.pages']),
|
|
},
|
|
{
|
|
href: waffleFlags.useNewFilesUploadsPage ? `/course/${courseId}/assets` : `${studioBaseUrl}/assets/${courseId}`,
|
|
title: intl.formatMessage(messages['header.links.filesAndUploads']),
|
|
},
|
|
];
|
|
if (getConfig().ENABLE_VIDEO_UPLOAD_PAGE_LINK_IN_CONTENT_DROPDOWN === 'true' || waffleFlags.useNewVideoUploadsPage) {
|
|
items.push({
|
|
href: `/course/${courseId}/videos`,
|
|
title: intl.formatMessage(messages['header.links.videoUploads']),
|
|
});
|
|
}
|
|
|
|
if (librariesV2Enabled) {
|
|
items.splice(1, 0, {
|
|
href: `/course/${courseId}/libraries`,
|
|
title: intl.formatMessage(messages['header.links.libraries']),
|
|
});
|
|
}
|
|
|
|
return items;
|
|
};
|
|
|
|
export const useSettingMenuItems = courseId => {
|
|
const intl = useIntl();
|
|
const studioBaseUrl = getConfig().STUDIO_BASE_URL;
|
|
const { canAccessAdvancedSettings } = useSelector(getStudioHomeData);
|
|
const waffleFlags = useWaffleFlags();
|
|
|
|
const items = [
|
|
{
|
|
href: waffleFlags.useNewScheduleDetailsPage ? `/course/${courseId}/settings/details` : `${studioBaseUrl}/settings/details/${courseId}`,
|
|
title: intl.formatMessage(messages['header.links.scheduleAndDetails']),
|
|
},
|
|
{
|
|
href: waffleFlags.useNewGradingPage ? `/course/${courseId}/settings/grading` : `${studioBaseUrl}/settings/grading/${courseId}`,
|
|
title: intl.formatMessage(messages['header.links.grading']),
|
|
},
|
|
{
|
|
href: waffleFlags.useNewCourseTeamPage ? `/course/${courseId}/course_team` : `${studioBaseUrl}/course_team/${courseId}`,
|
|
title: intl.formatMessage(messages['header.links.courseTeam']),
|
|
},
|
|
{
|
|
href: waffleFlags.useNewGroupConfigurationsPage ? `/course/${courseId}/group_configurations` : `${studioBaseUrl}/group_configurations/${courseId}`,
|
|
title: intl.formatMessage(messages['header.links.groupConfigurations']),
|
|
},
|
|
...(canAccessAdvancedSettings === true
|
|
? [{
|
|
href: waffleFlags.useNewAdvancedSettingsPage ? `/course/${courseId}/settings/advanced` : `${studioBaseUrl}/settings/advanced/${courseId}`,
|
|
title: intl.formatMessage(messages['header.links.advancedSettings']),
|
|
}] : []
|
|
),
|
|
];
|
|
if (getConfig().ENABLE_CERTIFICATE_PAGE === 'true' || waffleFlags.useNewCertificatesPage) {
|
|
items.push({
|
|
href: `/course/${courseId}/certificates`,
|
|
title: intl.formatMessage(messages['header.links.certificates']),
|
|
});
|
|
}
|
|
return items;
|
|
};
|
|
|
|
export const useToolsMenuItems = (courseId) => {
|
|
const intl = useIntl();
|
|
const studioBaseUrl = getConfig().STUDIO_BASE_URL;
|
|
const waffleFlags = useWaffleFlags();
|
|
|
|
const items = [
|
|
{
|
|
href: waffleFlags.useNewImportPage ? `/course/${courseId}/import` : `${studioBaseUrl}/import/${courseId}`,
|
|
title: intl.formatMessage(messages['header.links.import']),
|
|
},
|
|
{
|
|
href: waffleFlags.useNewExportPage ? `/course/${courseId}/export` : `${studioBaseUrl}/export/${courseId}`,
|
|
title: intl.formatMessage(messages['header.links.exportCourse']),
|
|
},
|
|
...(getConfig().ENABLE_TAGGING_TAXONOMY_PAGES === 'true'
|
|
? [{
|
|
href: `${studioBaseUrl}/course/${courseId}#export-tags`,
|
|
title: intl.formatMessage(messages['header.links.exportTags']),
|
|
}] : []
|
|
),
|
|
{
|
|
href: `/course/${courseId}/checklists`,
|
|
title: intl.formatMessage(messages['header.links.checklists']),
|
|
},
|
|
...(waffleFlags.enableCourseOptimizer ? [{
|
|
href: `/course/${courseId}/optimizer`,
|
|
title: (
|
|
<>
|
|
{intl.formatMessage(messages['header.links.optimizer'])}
|
|
<Badge variant="primary" className="ml-2">{intl.formatMessage(courseOptimizerMessages.new)}</Badge>
|
|
</>
|
|
),
|
|
}] : []),
|
|
];
|
|
|
|
return items;
|
|
};
|
|
|
|
export const useLibraryToolsMenuItems = itemId => {
|
|
const intl = useIntl();
|
|
|
|
const items = [
|
|
{
|
|
href: `/library/${itemId}/backup`,
|
|
title: intl.formatMessage(messages['header.links.exportLibrary']),
|
|
},
|
|
];
|
|
|
|
return items;
|
|
};
|