@instructure/canvas-rce
Version:
A component wrapping Canvas's usage of Tinymce
161 lines (154 loc) • 3.79 kB
JavaScript
/*
* Copyright (C) 2018 - present Instructure, Inc.
*
* This file is part of Canvas.
*
* Canvas is free software: you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License as published by the Free
* Software Foundation, version 3 of the License.
*
* Canvas is distributed in the hope that it will be useful, but WITHOUT ANY
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
* A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License along
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
import RceApiSource from '../../rcs/api';
// normalize contextType. e.g. accept either of 'course' or 'courses', but
// only store 'course'
function normalizeContextType(contextType) {
switch (contextType) {
case 'course':
case 'courses':
return 'course';
case 'group':
case 'groups':
return 'group';
case 'user':
case 'users':
return 'user';
default:
return undefined;
}
}
/* eslint-disable prefer-const */
export default function (props = {}) {
let {
source,
jwt,
refreshToken,
host,
contextType,
contextId,
collections,
files,
folders,
upload,
images,
documents,
media,
flickr,
newPageLinkExpanded,
searchString,
sortBy,
all_files,
canvasOrigin,
canvasUrl
} = props;
/* eslint-enable prefer-const */
if (!canvasOrigin) {
canvasOrigin = canvasUrl;
}
// normalize contextType (including in props)
contextType = normalizeContextType(contextType);
props = {
...props,
contextType
};
if (searchString === undefined) {
searchString = '';
}
if (all_files === undefined) {
all_files = {
isLoading: false
};
}
if (!sortBy) sortBy = {};
sortBy = {
sort: 'date_added',
dir: 'desc',
...sortBy
};
// default to API source
if (source == null) {
source = new RceApiSource({
jwt,
refreshToken,
host,
canvasOrigin
});
}
// create collections in default state if none provided
if (collections === undefined) {
collections = {
announcements: source.initializeCollection('announcements', props),
assignments: source.initializeCollection('assignments', props),
discussions: source.initializeCollection('discussions', props),
modules: source.initializeCollection('modules', props),
quizzes: source.initializeCollection('quizzes', props),
wikiPages: source.initializeCollection('wikiPages', props)
};
}
if (upload === undefined) {
upload = source.initializeUpload(props);
}
if (flickr === undefined) {
flickr = source.initializeFlickr(props);
}
if (images === undefined) {
images = source.initializeImages(props);
}
if (documents === undefined) {
documents = source.initializeDocuments(props);
}
if (media === undefined) {
media = source.initializeMedia(props);
}
if (newPageLinkExpanded === undefined) {
newPageLinkExpanded = false;
}
function getAccordionIndex() {
try {
return window.sessionStorage.getItem('canvas_rce_links_accordion_index');
} catch (err) {
// If there is an error accessing session storage, just ignore it.
// We are likely in a test environment
return undefined;
}
}
const ui = {
selectedAccordionIndex: getAccordionIndex()
};
return {
ui,
source,
jwt,
host,
contextType,
contextId,
collections,
files,
folders,
upload,
images,
documents,
media,
flickr,
newPageLinkExpanded,
searchString,
sortBy,
all_files
};
}