diff --git a/TODO b/TODO index 16f93bd..5ee7128 100644 --- a/TODO +++ b/TODO @@ -1,4 +1,7 @@ #integrate login/signup flow #make no activity page #add notifications -#integrate logout flow \ No newline at end of file +#integrate logout flow +#change number of downloads +#link file with activity +#refresh request \ No newline at end of file diff --git a/src/components/common/notificationCard.js b/src/components/common/notificationCard.js index 3a480ad..4e760f5 100644 --- a/src/components/common/notificationCard.js +++ b/src/components/common/notificationCard.js @@ -1,6 +1,9 @@ import React,{ Component } from 'react'; import 'styles/main.scss'; +/** + * Component to render notifications. + */ class NotificationCard extends Component { render() { return( diff --git a/src/components/common/notifications.js b/src/components/common/notifications.js index 550c48a..f156745 100644 --- a/src/components/common/notifications.js +++ b/src/components/common/notifications.js @@ -5,6 +5,9 @@ import polygon from 'assets/Polygon.svg'; import notif from 'assets/notif.svg'; import 'styles/main.scss'; +/** + * Notification component for Studyportal. + */ class Notifications extends Component { render() { return( @@ -31,7 +34,10 @@ class Notifications extends Component { export default Notifications; Notifications.propTypes = { + /** Identifies notification popup toggle status. */ notifications: PropTypes.bool, + /** Function to toggle state of modals. */ handleClick: PropTypes.func, + /** Function to close modals. */ close: PropTypes.func }; diff --git a/src/components/common/userMenu.js b/src/components/common/userMenu.js index 608cab9..e8136ef 100644 --- a/src/components/common/userMenu.js +++ b/src/components/common/userMenu.js @@ -9,6 +9,9 @@ const mapStateToProps = state => { return { user: state }; }; +/** + * User-Menu component for Studyportal. + */ class UserMenu extends Component { render() { return( @@ -39,8 +42,12 @@ class UserMenu extends Component { export default connect(mapStateToProps)(UserMenu); UserMenu.propTypes = { + /** Holds user data which is handled through Redux. */ user: PropTypes.object, + /** Identifies user-menu popup toggle status */ userMenu: PropTypes.bool, + /** Function to toggle state of modals */ handleClick: PropTypes.func, + /** Function to close modals. */ close: PropTypes.func }; diff --git a/src/components/coursecard/coursePage.js b/src/components/coursecard/coursePage.js index 0572155..eba819b 100644 --- a/src/components/coursecard/coursePage.js +++ b/src/components/coursecard/coursePage.js @@ -17,6 +17,9 @@ function mapStateToProps(state) { return { user: state }; } +/** + * Coursepage component for Studyportal. + */ class CoursePage extends Component { constructor(props) { super(props); @@ -55,6 +58,11 @@ class CoursePage extends Component { } } + /** + * Fetches files according to params. + * + * @param {object} nextProps + */ getFiles(nextProps) { this.setState({ loading:true }); getDepartmentInfoByAbbr(nextProps.department_abbr).then((res,err) => { @@ -99,6 +107,11 @@ class CoursePage extends Component { });}}});}}); } + /** + * Sorts files by creation date. + * + * @param {array} files + */ sortFilesByYear(files) { if(!_.isEmpty(files)) { let years = []; @@ -120,6 +133,11 @@ class CoursePage extends Component { else return files; } + /** + * Checks if this course is registered for the user. + * + * @param {object} props + */ async checkCourse(props) { if(props.user.login) { this.setState({ mycourse:false }); @@ -130,6 +148,9 @@ class CoursePage extends Component { } } + /** + * Registers course for user. + */ addCourse() { const token = getCookie('token'); addCourseForUser(token,this.state.id).then((res,err) => { @@ -143,6 +164,9 @@ class CoursePage extends Component { }); } + /** + * Removes registered course from user. + */ deleteCourse() { const token = getCookie('token'); deleteCourseForUser(token,this.state.id).then((res,err) => { @@ -245,10 +269,16 @@ class CoursePage extends Component { export default connect(mapStateToProps)(CoursePage); CoursePage.propTypes = { + /** Holds user data which is handled through Redux. */ user: PropTypes.object, + /** Fetch user details from API. */ getUserDetails: PropTypes.func, + /** Function to close modals. */ close: PropTypes.func, + /** Holds course code for the course. */ course_code: PropTypes.string, + /** Holds file type displayed currently. */ file_type: PropTypes.string, + /** Holds department abbreviation for the department. */ department_abbr: PropTypes.string }; diff --git a/src/components/coursecard/materialCard.js b/src/components/coursecard/materialCard.js index a9b447f..c8ac937 100644 --- a/src/components/coursecard/materialCard.js +++ b/src/components/coursecard/materialCard.js @@ -10,6 +10,9 @@ import download1 from 'assets/download.svg'; import download2 from 'assets/download1.svg'; import CustomCheckbox from 'components/customcheckbox/customCheckbox'; +/** + * Component to render files. + */ class MaterialCard extends Component { constructor(props) { super(props); @@ -29,10 +32,16 @@ class MaterialCard extends Component { this.leave = this.leave.bind(this); } + /** + * Highlight download icon. + */ hover() { this.setState({ queue: '1' }); } + /** + * Remove highlight from download icon. + */ leave() { this.setState({ queue: '2' }); } @@ -71,11 +80,18 @@ class MaterialCard extends Component { export default MaterialCard; MaterialCard.propTypes = { + /** Holds download icon highlight status. */ queue: PropTypes.string, + /** Holds file name. */ name: PropTypes.string, + /** Holds file size. */ size: PropTypes.string, + /** Holds number of downloads. */ downloads: PropTypes.number, + /** Holds driveid of the file. */ url: PropTypes.string, + /** Holds file extension to display icon. */ ext: PropTypes.string, + /** Holds creation date of file. */ date_modified: PropTypes.string }; diff --git a/src/components/cover/courseCover.js b/src/components/cover/courseCover.js index 1fb8130..6276f46 100644 --- a/src/components/cover/courseCover.js +++ b/src/components/cover/courseCover.js @@ -3,6 +3,9 @@ import PropTypes from 'prop-types'; import courseselect from 'assets/course_select.svg'; import 'styles/main.scss'; +/** + * Coursecover component for Studyportal. + */ function CourseCover(props) { return (
@@ -15,5 +18,6 @@ function CourseCover(props) { export default CourseCover; CourseCover.propTypes = { + /** Function to close modals. */ close: PropTypes.func }; diff --git a/src/components/cover/fileCover.js b/src/components/cover/fileCover.js index 5895309..e130f68 100644 --- a/src/components/cover/fileCover.js +++ b/src/components/cover/fileCover.js @@ -3,6 +3,9 @@ import PropTypes from 'prop-types'; import loader from 'assets/fileloader.svg'; import 'styles/main.scss'; +/** + * Filecover component for Studyportal. + */ function FileCover(props) { return (
@@ -15,5 +18,6 @@ function FileCover(props) { export default FileCover; FileCover.propTypes = { + /** Function to close modals. */ close: PropTypes.func }; \ No newline at end of file diff --git a/src/components/customcheckbox/customCheckbox.js b/src/components/customcheckbox/customCheckbox.js index 99b37fd..47ad5ab 100644 --- a/src/components/customcheckbox/customCheckbox.js +++ b/src/components/customcheckbox/customCheckbox.js @@ -2,6 +2,9 @@ import React, { Component } from 'react'; import PropTypes from 'prop-types'; import 'styles/main.scss'; +/** + * Component to render custom checkboxes. + */ class CustomCheckbox extends Component { constructor(props) { super(props); @@ -14,10 +17,16 @@ class CustomCheckbox extends Component { this.leave = this.leave.bind(this); } + /** + * Highlight checkbox. + */ hover() { this.setState({ hover: true }); } + /** + * Remove highlight from checkbox. + */ leave() { this.setState({ hover: false }); } @@ -39,9 +48,14 @@ class CustomCheckbox extends Component { export default CustomCheckbox; CustomCheckbox.propTypes = { + /** Identifies checked status of checkbox. */ value: PropTypes.bool, + /** Identifies the checkbox toggle status. */ handleChange: PropTypes.func, + /** Holds border color for checkbox. */ border: PropTypes.string, + /** Holds border color for checkbox on hover. */ borderhover: PropTypes.string, + /** Holds colour displayed on higlight. */ hover: PropTypes.string }; diff --git a/src/components/error/error.js b/src/components/error/error.js index 5ce6336..bd0202f 100644 --- a/src/components/error/error.js +++ b/src/components/error/error.js @@ -3,6 +3,9 @@ import PropTypes from 'prop-types'; import { Link } from 'react-router-dom'; import error from 'assets/error.svg'; +/** + * 404Page component for Studyportal. + */ function Error(props) { return (
@@ -22,5 +25,6 @@ function Error(props) { export default Error; Error.propTypes = { + /** Function to close modals. */ close: PropTypes.func }; diff --git a/src/components/header/header.js b/src/components/header/header.js index 850241e..3278a0a 100644 --- a/src/components/header/header.js +++ b/src/components/header/header.js @@ -12,6 +12,9 @@ const mapStateToProps = state => { return { user: state }; }; +/** + * Header component for Studyportal. + */ class Header extends Component { render() { return( @@ -72,12 +75,18 @@ class Header extends Component { export default connect(mapStateToProps)(Header); Header.propTypes = { + /** Holds status of user-menu popup. */ userMenu: PropTypes.bool, + /** Holds status of notifications popup. */ notifications: PropTypes.bool, + /** Holds status of search result popup. */ search: PropTypes.bool, + /** Function to close modals. */ close: PropTypes.func, + /** Function to toggle state of modals. */ handleClick: PropTypes.func, - handleSeeAll: PropTypes.func, + /** Function to toggle see-all modal. */ handleSeeAllClick: PropTypes.func, + /** Holds user data which is handled through Redux. */ user: PropTypes.object }; diff --git a/src/components/header/search.js b/src/components/header/search.js index b2a8dbd..9db311c 100644 --- a/src/components/header/search.js +++ b/src/components/header/search.js @@ -8,6 +8,9 @@ import { getSearchResults } from 'api/searchApi'; import { Link } from 'react-router-dom'; import emoji from 'assets/mdi_sentiment_very_dissatisfied.svg'; +/** + * Component to render search. + */ class Search extends Component { constructor(props) { super(props); @@ -28,6 +31,11 @@ class Search extends Component { this.setState({ search:props.search }); } + /** + * Fetches search result. + * + * @param {string} query + */ getResults(query) { getSearchResults(query).then((res,err) => { if(err){ @@ -47,6 +55,11 @@ class Search extends Component { }); } + /** + * Toggles search popup when text is typed in search bar. + * + * @param {object} e + */ result(e) { this.setState({ value: e.target.value }); if (e.target.value !== '') { @@ -164,10 +177,14 @@ class Search extends Component { export default Search; Search.propTypes = { + /** Holds status of search popup. */ search: PropTypes.bool, + /** Identifies whether search is in homepage. */ home: PropTypes.bool, + /** Function to close modals. */ close: PropTypes.func, + /** Function to toggle state of modals. */ handleClick: PropTypes.func, - handleReqClick: PropTypes.func, + /** Function to toggle see-all modal. */ handleSeeAllClick: PropTypes.func }; diff --git a/src/components/header/searchResult.js b/src/components/header/searchResult.js index e5056bd..6818949 100644 --- a/src/components/header/searchResult.js +++ b/src/components/header/searchResult.js @@ -7,6 +7,9 @@ import ppt from 'assets/material_ppt.svg'; import img from 'assets/material_img.svg'; import 'styles/main.scss'; +/** + * Component to render files. + */ class SearchResult extends Component { constructor(props) { super(props); @@ -53,11 +56,18 @@ class SearchResult extends Component { export default SearchResult; SearchResult.propTypes = { + /** Holds file name. */ name: PropTypes.string, + /** Holds driveid of the file. */ url: PropTypes.string, + /** Holds creation date of file. */ date_modified: PropTypes.string, + /** Holds course title related to file. */ course_name: PropTypes.string, + /** Holds course code related to file. */ course_code: PropTypes.string, + /** Holds the type of file. */ file_type: PropTypes.string, + /** Holds extension of file. */ ext: PropTypes.string }; diff --git a/src/components/header/showMoreFiles.js b/src/components/header/showMoreFiles.js index af18f07..b1d8968 100644 --- a/src/components/header/showMoreFiles.js +++ b/src/components/header/showMoreFiles.js @@ -5,6 +5,9 @@ import SearchResult from './searchResult'; import emoji from 'assets/mdi_sentiment_very_dissatisfied.svg'; import close from 'assets/closereq.png'; +/** + * Component to render see-all modal. + */ class ShowMoreFiles extends Component{ constructor(props){ super(props); @@ -61,10 +64,16 @@ class ShowMoreFiles extends Component{ export default ShowMoreFiles; ShowMoreFiles.propTypes = { + /** Holds search result files. */ files: PropTypes.array, + /** Holds search query string. */ searchquery: PropTypes.string, + /** Holds toggle status of see-all. */ showmore: PropTypes.bool, + /** Holds file name. */ handleSeeAll: PropTypes.func, + /** Function to toggle state of modals. */ handleClick: PropTypes.func, + /** Function to close modals. */ close: PropTypes.func }; diff --git a/src/components/home/header.js b/src/components/home/header.js index 2d6c40e..4a25f7e 100644 --- a/src/components/home/header.js +++ b/src/components/home/header.js @@ -12,6 +12,9 @@ const mapStateToProps = state => { return { user: state }; }; +/** + * Header component for Studyportal homepage. + */ class Header extends Component { render() { return ( @@ -54,11 +57,18 @@ class Header extends Component { export default connect(mapStateToProps)(Header); Header.propTypes = { + /** Holds status of search result popup. */ search: PropTypes.bool, + /** Function to close modals. */ close: PropTypes.func, + /** Holds status of notifications popup. */ notifications: PropTypes.bool, + /** Holds status of user-menu popup. */ userMenu: PropTypes.bool, + /** Function to toggle state of modals. */ handleClick: PropTypes.func, + /** Function to toggle see-all modal. */ handleSeeAllClick: PropTypes.func, + /** Holds user data which is handled through Redux. */ user: PropTypes.object }; diff --git a/src/components/home/subjectCard.js b/src/components/home/subjectCard.js index f9892f6..f893062 100644 --- a/src/components/home/subjectCard.js +++ b/src/components/home/subjectCard.js @@ -1,7 +1,10 @@ -/* eslint-disable react/prop-types */ import React, { Component } from 'react'; +import PropTypes from 'prop-types'; import 'styles/main.scss'; +/** + * Component to render subject card. + */ class SubjectCard extends Component { constructor(props) { super(props); @@ -12,6 +15,9 @@ class SubjectCard extends Component { this.togglehover = this.togglehover.bind(this); } + /** + * Toggles hover status on subjectcard. + */ togglehover() { this.setState(prevState => ({ hover:!prevState.hover @@ -31,3 +37,10 @@ class SubjectCard extends Component { } export default SubjectCard; + +SubjectCard.propTypes = { + /** Holds image url of department. */ + url: PropTypes.string, + /** Holds department name. */ + name: PropTypes.string +}; diff --git a/src/components/request/request.js b/src/components/request/request.js index 2f12b38..331a730 100644 --- a/src/components/request/request.js +++ b/src/components/request/request.js @@ -10,6 +10,9 @@ import check from 'assets/check.svg'; import 'styles/main.scss'; import { Link } from 'react-router-dom'; +/** + * Component to render request modal. + */ class Request extends Component { constructor(props) { super(props); @@ -45,16 +48,27 @@ class Request extends Component { }); } + /** + * Switches to course request. + */ switchToCourse() { this.setState({ type:'course' }); this.setState({ disable: 0 }); } + /** + * Switches to file request. + */ switchToFile() { this.setState({ type:'file' }); this.setState({ disableCourse: 0 }); } + /** + * Activates course select input. + * + * @param {object} e + */ file_active_course(e) { this.setState({ disable: 1 }); getCourseByDepartment(e.target[e.target.selectedIndex].id).then((res,err) => { @@ -67,22 +81,41 @@ class Request extends Component { }); } + /** + * Activates material select input. + * + * @param {object} e + */ file_active_material(e) { this.setState({ disable: 2 }); } + /** + * Activates file name input. + */ active_name() { this.setState({ disable: 3 }); } + /** + * Activates course name input. + */ course_active_course() { this.setState({ disableCourse: 1 }); } + /** + * Activates course code input. + */ course_active_courseid() { this.setState({ disableCourse: 2 }); } + /** + * Requests file through API. + * + * @param {object} e + */ requestFile(e) { e.preventDefault(); const course = e.target.course[e.target.course.selectedIndex].id; @@ -98,6 +131,11 @@ class Request extends Component { } } + /** + * Requests course through API. + * + * @param {object} e + */ requestCourse(e) { e.preventDefault(); const department = e.target.department.value; @@ -111,12 +149,14 @@ class Request extends Component { }); } + /** + * Refreshes request modal. + */ refreshRequest() { //TODO refresh upload } render() { - if (this.props.request) { return(
@@ -282,6 +322,8 @@ class Request extends Component { export default Request; Request.propTypes = { + /** Holds toggle status of request modal. */ request: PropTypes.bool, + /** Function to close modals. */ close: PropTypes.func }; diff --git a/src/components/sidebar/courseHandle.js b/src/components/sidebar/courseHandle.js index edac6c7..63d069b 100644 --- a/src/components/sidebar/courseHandle.js +++ b/src/components/sidebar/courseHandle.js @@ -10,6 +10,9 @@ function mapStateToProps(state) { return { user: state }; } +/** + * Component to render course in sidebar. + */ class CourseHandle extends Component { constructor(props) { super(props); @@ -54,10 +57,16 @@ class CourseHandle extends Component { } } + /** + * Activates associated course. + */ activatecourse() { this.props.handleClick(this.props.name); } + /** + * Check if course is registered for user. + */ checkMyCourse(props) { if(props.user.courses.find(o => o.code === props.code) !== undefined) return true; diff --git a/src/components/sidebar/sidebar.js b/src/components/sidebar/sidebar.js index 77f1de9..10f4e0d 100644 --- a/src/components/sidebar/sidebar.js +++ b/src/components/sidebar/sidebar.js @@ -14,6 +14,9 @@ const mapStateToProps = state => { return { user: state }; }; +/** + * Sidebar component for Studyportal homepage. + */ class Sidebar extends Component { constructor(props) { super(props); @@ -49,11 +52,19 @@ class Sidebar extends Component { this.setState({ login:nextProps.activity, department: nextProps.department }); } + /** + * Activates course. + */ handleClick(active) { this.active = active; this.forceUpdate(); } + /** + * Fetches course from API. + * + * @param {object} e + */ getCourse(e) { getCourseByDepartment(e.target[e.target.selectedIndex].id).then((res,err) => { if(err) { @@ -65,10 +76,20 @@ class Sidebar extends Component { }); } + /** + * Sets selected course into state. + * + * @param {object} e + */ setCourse(e) { this.setState({ course:e.target[e.target.selectedIndex].id }); } + /** + * Registers course for the user. + * + * @param {object} e + */ addCourse(e) { e.preventDefault(); const token = getCookie('token'); @@ -202,13 +223,22 @@ class Sidebar extends Component { export default connect(mapStateToProps)(Sidebar); Sidebar.propTypes = { + /** Holds currently active course. */ active: PropTypes.string, + /** Holds status of activity route. */ activity: PropTypes.string, + /** Holds current department title. */ department: PropTypes.string, + /** Fetch user details from API. */ getUserDetails: PropTypes.func, + /** Holds user login status. */ login: PropTypes.bool, + /** Function to close modals. */ close: PropTypes.func, + /** Holds user data which is handled through Redux. */ user: PropTypes.object, + /** Holds course list displayed. */ courses: PropTypes.array, + /** Holds department abbreviation for the current department. */ department_abbr: PropTypes.string }; diff --git a/src/components/upload/customFileUploader.js b/src/components/upload/customFileUploader.js index 6c07926..8b0d32f 100644 --- a/src/components/upload/customFileUploader.js +++ b/src/components/upload/customFileUploader.js @@ -7,6 +7,9 @@ import small_loader from 'assets/loader_small.svg'; import check from 'assets/check.svg'; import 'styles/main.scss'; +/** + * Component to render file uploader. + */ class CustomFileUploader extends Component { constructor(props) { super(props); @@ -17,6 +20,11 @@ class CustomFileUploader extends Component { this.handleRemove = this.handleRemove.bind(this); } + /** + * Adds files to upload queue. + * + * @param {object} e + */ addFiles(e) { const file = e.target.files; @@ -29,6 +37,11 @@ class CustomFileUploader extends Component { this.forceUpdate(); } + /** + * Removes files from upload queue. + * + * @param {number} index + */ handleRemove(index) { this.files.splice(index,1); this.props.getFiles(this.files); @@ -105,11 +118,18 @@ class CustomFileUploader extends Component { export default CustomFileUploader; CustomFileUploader.propTypes = { + /** Function to get files in upload queue. */ getFiles: PropTypes.func, + /** Function to modify upload modal. */ handleUpload: PropTypes.func, + /** Holds completed status of ongoing upload. */ uploaded: PropTypes.bool, + /** Holds list of ongoing uploads. */ uploadings: PropTypes.array, + /** Holds list of uploaded files. */ uploadeds: PropTypes.array, + /** Holds disabled status of upload queue. */ disabled: PropTypes.bool, + /** Holds running status of ongoing upload. */ uploading: PropTypes.bool }; diff --git a/src/components/upload/fileUploadContainer.js b/src/components/upload/fileUploadContainer.js index cfca487..765e32b 100644 --- a/src/components/upload/fileUploadContainer.js +++ b/src/components/upload/fileUploadContainer.js @@ -5,6 +5,9 @@ import small_loader from 'assets/small_loader.svg'; import check from 'assets/check.svg'; import 'styles/main.scss'; +/** + * Component to render uploading file. + */ class FileUploadContainer extends Component { constructor(props) { super(props); @@ -23,10 +26,18 @@ class FileUploadContainer extends Component { this.setState({ uploading:nextProps.uploading,uploaded:nextProps.uploaded }); } + /** + * Updates file type for queued file. + * + * @param {object} e + */ updateFileType(e) { this.props.files[this.props.index].type = e.target.value; } + /** + * Removes file from upload queue. + */ handleRemove() { this.props.handleRemove(this.props.index); } @@ -60,11 +71,18 @@ class FileUploadContainer extends Component { export default FileUploadContainer; FileUploadContainer.propTypes = { + /** Holds files in upload queue. */ files: PropTypes.array, + /** Holds running status of ongoing upload for current file. */ uploading: PropTypes.bool, + /** Holds completed status of ongoing upload for current file. */ uploaded: PropTypes.bool, + /** Holds index of current file in upload queue. */ index: PropTypes.number, + /** Holds name of file. */ name: PropTypes.string, + /** Holds status of select input. */ disabled: PropTypes.bool, + /** Function to remove file from upload queue. */ handleRemove: PropTypes.func }; diff --git a/src/components/upload/upload.js b/src/components/upload/upload.js index e0e6b3e..9921af7 100644 --- a/src/components/upload/upload.js +++ b/src/components/upload/upload.js @@ -8,6 +8,9 @@ import { getCourseByDepartment } from 'api/courseApi'; import { getCookie } from 'utils/handleCookies'; import 'styles/main.scss'; +/** + * Component to render upload modal. + */ class Upload extends Component { constructor(props) { super(props); @@ -46,6 +49,11 @@ class Upload extends Component { }); } + /** + * Activates course select input. + * + * @param {object} e + */ active_course(e) { this.setState({ disable: 1, department: e.target[e.target.selectedIndex].id }); getCourseByDepartment(e.target[e.target.selectedIndex].id).then((res,err) => { @@ -58,23 +66,44 @@ class Upload extends Component { }); } + /** + * Activates material select input. + * + * @param {object} e + */ active_material(e) { this.setState({ disable: 2, course: e.target[e.target.selectedIndex].id }); } + /** + * Closes upload modal. + */ toggleUploadModal() { this.setState({ active:false }); this.props.close(); } + /** + * Switches to upload queue. + */ handleUpload() { this.setState({ active: true }); } + /** + * Fetches files list from upload queue. + * + * @param {array} files + */ getFiles(files) { this.setState({ files }); } + /** + * Uploads files through API. + * + * @param {object} e + */ async upload(e) { e.preventDefault(); const token = getCookie('token'); @@ -102,6 +131,9 @@ class Upload extends Component { } } + /** + * Refreshes upload modal. + */ refreshUpload() { //TODO refresh upload } @@ -175,6 +207,8 @@ class Upload extends Component { export default Upload; Upload.propTypes = { + /** Holds toggle status of upload modal. */ upload: PropTypes.bool, + /** Function to close modals. */ close: PropTypes.func -}; \ No newline at end of file +}; diff --git a/src/pages/department.js b/src/pages/department.js index 6b74c7a..70f9d9d 100644 --- a/src/pages/department.js +++ b/src/pages/department.js @@ -452,9 +452,9 @@ export default connect(mapStateToProps,mapDispatchToProps)(Department); Department.propTypes = { /** Holds user data which is handled through Redux. */ user: PropTypes.object, - /** URL of present location */ + /** URL of present location. */ location: PropTypes.object, - /** Sets 404 page */ + /** Sets 404 page. */ error: PropTypes.bool, /** Sets user data in Redux. */ setUser: PropTypes.func,