diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 441a13b997a..255fdd2ad0d 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -1343,7 +1343,8 @@ class UsersController < ApplicationController
return render(json: { :message => "This endpoint only works against the current user" }, status: :unauthorized)
end
- valid_names = %w{home modules pages assignments quizzes settings files people announcements grades discussions}
+ valid_names = %w{home modules pages assignments quizzes settings files people announcements
+ grades discussions syllabus collaborations import conferences}
# Check if the page_name is valid
unless valid_names.include?(params[:page_name])
diff --git a/app/jsx/new_user_tutorial/trays/CollaborationsTray.jsx b/app/jsx/new_user_tutorial/trays/CollaborationsTray.jsx
new file mode 100644
index 00000000000..3216b13ec95
--- /dev/null
+++ b/app/jsx/new_user_tutorial/trays/CollaborationsTray.jsx
@@ -0,0 +1,22 @@
+define([
+ 'react',
+ 'i18n!new_user_tutorial',
+ 'instructure-ui',
+], (React, I18n, { Typography, Heading }) => {
+ const CollaborationsTray = () => (
+
+ {I18n.t('Collaborations')}
+
+ {I18n.t('Work and create together')}
+
+
+ {
+ I18n.t(`Provide a space for users to work on a single Google Doc
+ simultaneously, from within your Canvas course.`)
+ }
+
+
+ );
+
+ return CollaborationsTray;
+});
diff --git a/app/jsx/new_user_tutorial/trays/ConferencesTray.jsx b/app/jsx/new_user_tutorial/trays/ConferencesTray.jsx
new file mode 100644
index 00000000000..e66a6ff9d98
--- /dev/null
+++ b/app/jsx/new_user_tutorial/trays/ConferencesTray.jsx
@@ -0,0 +1,24 @@
+define([
+ 'react',
+ 'i18n!new_user_tutorial',
+ 'instructure-ui',
+], (React, I18n, { Typography, Heading }) => {
+ const ConferencesTray = () => (
+
+ {I18n.t('Conferences')}
+
+ {I18n.t('Virtual lectures in real-time')}
+
+
+ {
+ I18n.t(`Conduct virtual lectures, virtual office hours, and student
+ groups. Broadcast real-time audio and video, share presentation
+ slides, give demonstrations of applications and online resources,
+ and more.`)
+ }
+
+
+ );
+
+ return ConferencesTray;
+});
diff --git a/app/jsx/new_user_tutorial/trays/ImportTray.jsx b/app/jsx/new_user_tutorial/trays/ImportTray.jsx
new file mode 100644
index 00000000000..2b1c4d83d7b
--- /dev/null
+++ b/app/jsx/new_user_tutorial/trays/ImportTray.jsx
@@ -0,0 +1,22 @@
+define([
+ 'react',
+ 'i18n!new_user_tutorial',
+ 'instructure-ui',
+], (React, I18n, { Typography, Heading }) => {
+ const ImportTray = () => (
+
+ {I18n.t('Import')}
+
+ {I18n.t('Bring your content into your course')}
+
+
+ {
+ I18n.t(`Bring existing content from another course or course
+ management system into your Canvas course.`)
+ }
+
+
+ );
+
+ return ImportTray;
+});
diff --git a/app/jsx/new_user_tutorial/trays/SyllabusTray.jsx b/app/jsx/new_user_tutorial/trays/SyllabusTray.jsx
new file mode 100644
index 00000000000..ce4da0218b5
--- /dev/null
+++ b/app/jsx/new_user_tutorial/trays/SyllabusTray.jsx
@@ -0,0 +1,23 @@
+define([
+ 'react',
+ 'i18n!new_user_tutorial',
+ 'instructure-ui',
+], (React, I18n, { Typography, Heading }) => {
+ const SyllabusTray = () => (
+
+ {I18n.t('Syllabus')}
+
+ {I18n.t('An auto-generated chronological summary of your course')}
+
+
+ {
+ I18n.t(`Communicate to your students exactly what will be required
+ of them throughout the course in chronological order. Generate a
+ built-in Syllabus based on Assignments and Events that you've created.`)
+ }
+
+
+ );
+
+ return SyllabusTray;
+});
diff --git a/app/jsx/new_user_tutorial/utils/getProperTray.jsx b/app/jsx/new_user_tutorial/utils/getProperTray.jsx
index 2945d16f3d3..31d2fe05d7d 100644
--- a/app/jsx/new_user_tutorial/utils/getProperTray.jsx
+++ b/app/jsx/new_user_tutorial/utils/getProperTray.jsx
@@ -10,9 +10,14 @@ define([
'../trays/PeopleTray',
'../trays/AnnouncementsTray',
'../trays/GradesTray',
- '../trays/DiscussionsTray'
+ '../trays/DiscussionsTray',
+ '../trays/SyllabusTray',
+ '../trays/CollaborationsTray',
+ '../trays/ImportTray',
+ '../trays/ConferencesTray'
], (I18n, HomeTray, ModulesTray, PagesTray, AssignmentsTray, QuizzesTray, SettingsTray,
- FilesTray, PeopleTray, AnnouncementsTray, GradesTray, DiscussionsTray) => {
+ FilesTray, PeopleTray, AnnouncementsTray, GradesTray, DiscussionsTray, SyllabusTray,
+ CollaborationsTray, ImportTray, ConferencesTray) => {
const generateObject = (component, label, pageName) => ({
component,
label,
@@ -24,6 +29,8 @@ define([
return generateObject(ModulesTray, I18n.t('Modules Tutorial Tray'), 'modules');
} else if (path.includes('pages')) {
return generateObject(PagesTray, I18n.t('Pages Tutorial Tray'), 'pages');
+ } else if (path.includes('syllabus')) { // syllabus must come before assignments (courses/#/assignments/syllabus)
+ return generateObject(SyllabusTray, I18n.t('Syllabus Tutorial Tray'), 'syllabus');
} else if (path.includes('assignments')) {
return generateObject(AssignmentsTray, I18n.t('Assignments Tutorial Tray'), 'assignments');
} else if (path.includes('quizzes')) {
@@ -40,6 +47,12 @@ define([
return generateObject(GradesTray, I18n.t('Gradebook Tutorial Tray'), 'grades');
} else if (path.includes('discussion_topics')) {
return generateObject(DiscussionsTray, I18n.t('Discussions Tutorial Tray'), 'discussions');
+ } else if (path.includes('lti_collaborations') || path.includes('collaborations')) {
+ return generateObject(CollaborationsTray, I18n.t('Collaborations Tutorial Tray'), 'collaborations');
+ } else if (path.includes('content_migrations')) {
+ return generateObject(ImportTray, I18n.t('Import Tutorial Tray'), 'collaborations');
+ } else if (path.includes('conferences')) {
+ return generateObject(ConferencesTray, I18n.t('Conferences Tutorial Tray'), 'conferences');
}
return generateObject(HomeTray, I18n.t('Home Tutorial Tray'), 'home');
}
diff --git a/spec/javascripts/jsx/new_user_tutorial/utils/getProperTraySpec.jsx b/spec/javascripts/jsx/new_user_tutorial/utils/getProperTraySpec.jsx
index 836071eab62..be8a002183a 100644
--- a/spec/javascripts/jsx/new_user_tutorial/utils/getProperTraySpec.jsx
+++ b/spec/javascripts/jsx/new_user_tutorial/utils/getProperTraySpec.jsx
@@ -10,9 +10,15 @@ define([
'jsx/new_user_tutorial/trays/PeopleTray',
'jsx/new_user_tutorial/trays/AnnouncementsTray',
'jsx/new_user_tutorial/trays/GradesTray',
- 'jsx/new_user_tutorial/trays/DiscussionsTray'
+ 'jsx/new_user_tutorial/trays/DiscussionsTray',
+ 'jsx/new_user_tutorial/trays/SyllabusTray',
+ 'jsx/new_user_tutorial/trays/CollaborationsTray',
+ 'jsx/new_user_tutorial/trays/ImportTray',
+ 'jsx/new_user_tutorial/trays/ConferencesTray'
], (getProperTray, HomeTray, ModulesTray, PagesTray, AssignmentsTray, QuizzesTray,
- SettingsTray, FilesTray, PeopleTray, AnnouncementsTray, GradesTray, DiscussionsTray) => {
+ SettingsTray, FilesTray, PeopleTray, AnnouncementsTray,
+ GradesTray, DiscussionsTray, SyllabusTray, CollaborationsTray, ImportTray,
+ ConferencesTray) => {
QUnit.module('getProperTray test');
test('if no match is in the path argument returns the HomeTray', () => {
@@ -55,7 +61,7 @@ define([
equal(trayObj.label, 'Settings Tutorial Tray', 'label matches');
});
-
+
test('if files is in the path argument returns the FilesTray', () => {
const trayObj = getProperTray('/courses/3/files/');
equal(trayObj.component, FilesTray, 'component matches');
@@ -82,7 +88,6 @@ define([
equal(trayObj.component, GradesTray, 'component matches');
equal(trayObj.label, 'Gradebook Tutorial Tray', 'label matches');
-
});
test('if discussion_topics is in the path argument returns the DiscussionsTray', () => {
@@ -91,4 +96,39 @@ define([
equal(trayObj.label, 'Discussions Tutorial Tray', 'label matches');
});
+
+ test('if syllabus is in the path argument returns the SyllabusTray', () => {
+ const trayObj = getProperTray('/courses/3/assignments/syllabus/');
+ equal(trayObj.component, SyllabusTray, 'component matches');
+
+ equal(trayObj.label, 'Syllabus Tutorial Tray', 'label matches');
+ });
+
+ test('if lti_collaborations is in the path argument returns the CollaborationsTray', () => {
+ const trayObj = getProperTray('/courses/3/lti_collaborations/');
+ equal(trayObj.component, CollaborationsTray, 'component matches');
+
+ equal(trayObj.label, 'Collaborations Tutorial Tray', 'label matches');
+ });
+
+ test('if collaborations is in the path argument returns the CollaborationsTray', () => {
+ const trayObj = getProperTray('/courses/3/collaborations/');
+ equal(trayObj.component, CollaborationsTray, 'component matches');
+
+ equal(trayObj.label, 'Collaborations Tutorial Tray', 'label matches');
+ });
+
+ test('if content_migrations is in the path argument returns the ImportTray', () => {
+ const trayObj = getProperTray('/courses/3/content_migrations/');
+ equal(trayObj.component, ImportTray, 'component matches');
+
+ equal(trayObj.label, 'Import Tutorial Tray', 'label matches');
+ });
+
+ test('if conferences is in the path argument returns the ConferencesTray', () => {
+ const trayObj = getProperTray('/courses/3/conferences/');
+ equal(trayObj.component, ConferencesTray, 'component matches');
+
+ equal(trayObj.label, 'Conferences Tutorial Tray', 'label matches');
+ });
});