{"version":3,"sources":["common/images/print-passcodes.png","components/pages/pupil/work/works-table/octopus.png","components/pages/add-pupils/pupils.png","components/pupils-component/no-pupils/no-pupils.png","components/pages/groups/no-groups/no-groups.png","components/app/app.styles.js","components/pages/pupil/pupil-head/pupil-head.styles.js","components/head/head.styles.js","components/head/head.jsx","components/head-nav/head-nav.styles.js","components/head-nav/head-nav.jsx","components/head-nav/head-nav-link/head-nav-link.styles.js","components/head-nav/head-nav-link/head-nav-link.jsx","components/pages/pupil/pupil-head/nav/nav.jsx","components/head-title/head-title.styles.js","components/head-title/head-title.jsx","components/pages/pupil/pupil-head/title/title.jsx","stores/pupil/pupil.selectors.js","components/pages/pupil/pupil-head/title/title.container.js","components/back-to-pupils/back-to-pupils.styles.js","components/back-to-pupils/back-to-pupils.jsx","components/pages/pupil/pupil-head/pupil-head.jsx","components/pages/pupil/pupil-head/pupil-head.container.js","stores/profile/profile.selectors.js","components/pages/pupil/profile/profile.styles.js","components/pages/pupil/profile/profile-info/profile-info-head/pupil/pupil.jsx","components/pages/pupil/profile/profile-info/profile-info-head/pupil/pupil.styles.js","components/pages/pupil/profile/profile-info/profile-info-head/pupil/pupil.container.js","components/pages/pupil/profile/profile-info/profile-info-head/profile-info-head.jsx","components/pages/pupil/profile/profile-info/profile-info-head/profile-info-head.styles.js","components/pages/pupil/profile/profile-info/pupil-info-form/row/row.jsx","components/pages/pupil/profile/profile-info/pupil-info-form/row/row.styles.js","components/pages/pupil/profile/profile-info/pupil-info-form/cell/cell.jsx","components/pages/pupil/profile/profile-info/pupil-info-form/cell/cell.styles.js","components/pages/pupil/profile/profile-info/pupil-info-form/hint-cell/hint-cell.jsx","components/pages/pupil/profile/profile-info/pupil-info-form/hint-cell/hint-cell.styles.js","components/age-groups-select/age-groups-select.jsx","components/age-groups-select/age-groups-select.styles.js","common/api/year-groops.js","stores/year-groups/year-groups.selectors.js","components/age-groups-select/age-groups-select.container.js","stores/year-groups/year-groups.actions.js","components/pages/pupil/profile/profile-info/pupil-info-form/updating-overlay/updating-overlay.jsx","components/pages/pupil/profile/profile-info/pupil-info-form/updating-overlay/updating-overlay.styles.js","components/pages/pupil/profile/profile-info/pupil-info-form/groups/group/group.jsx","components/pages/pupil/profile/profile-info/pupil-info-form/groups/group/group.styles.js","common/api/student-management.js","stores/groups/groups.selectors.js","stores/profile/profile.actions.js","components/pages/pupil/profile/profile-info/pupil-info-form/groups/group/group.container.js","components/pages/pupil/profile/profile-info/pupil-info-form/groups/groups.jsx","components/pages/pupil/profile/profile-info/pupil-info-form/groups/groups.styles.js","components/pages/pupil/profile/profile-info/pupil-info-form/groups/groups.container.js","components/pages/pupil/profile/profile-info/pupil-info-form/pupil-info-form.jsx","components/pages/pupil/profile/profile-info/pupil-info-form/pupil-info-form.styles.js","components/add-to-group/add-to-group.actions.js","components/pages/pupil/profile/profile-info/pupil-info-form/pupil-info-form.container.jsx","components/groups-select/groups-select.jsx","components/groups-select/groups-select.styles.js","common/api/school.js","stores/groups/groups.actions.js","stores/me/me.selectors.js","components/groups-select/groups-select.container.js","components/add-to-group/add-to-group.jsx","components/add-to-group/add-to-group.styles.js","components/add-to-group/add-to-group.selectors.js","components/add-to-group/add-to-group.container.js","components/pages/pupil/dialogs/add-to-group/add-to-group.container.js","components/pages/pupil/profile/profile-info/profile-info.jsx","components/pages/pupil/profile/profile-info/profile-info.styles.js","components/content-holder/content-holder.styles.js","components/content-holder/content-holder.jsx","components/pages/pupil/profile/loading-screen/loading-screen.styles.js","components/pages/pupil/profile/loading-screen/loading-screen.jsx","components/pages/pupil/profile/profile-permission/profile-permission-head/profile-permission-head.jsx","components/pages/pupil/profile/profile-permission/profile-permission-head/profile-permission-head.styles.js","components/pages/pupil/profile/profile-permission/profile-permission-head/profile-permission-head.container.js","components/pages/pupil/profile/profile-permission/profile-permission.jsx","components/pages/pupil/profile/profile-permission/profile-permission.styles.js","components/pages/pupil/profile/profile.jsx","components/pages/pupil/profile/profile.container.js","components/pages/pupil/work/works-table/work-entry/context-menu/context-menu.jsx","components/pages/pupil/work/works-table/work-entry/context-menu/context-menu.styles.js","common/api/profile.js","stores/works/works.actions.js","common/api/works.js","stores/works/works.selectors.js","components/pages/pupil/work/works-table/work-entry/context-menu/context-menu.container.js","components/pages/pupil/work/works-table/work-entry/work-entry.jsx","components/pages/pupil/work/works-table/work-entry/work-entry.styles.js","components/pages/pupil/work/works-table/work-entry/work-entry.container.js","components/pages/pupil/work/works-table/bulk-actions/bulk-actions.jsx","components/pages/pupil/work/works-table/bulk-actions/bulk-actions.styles.js","components/pages/pupil/work/works-table/bulk-actions/bulk-actions.container.js","components/pages/pupil/dialogs/create-assessment/create-assessment.actions.js","components/pages/pupil/dialogs/create-assessment/create-assessment.jsx","components/pages/pupil/dialogs/create-assessment/create-assessment.styles.js","components/pages/pupil/dialogs/create-assessment/create-assessment.selectors.js","stores/assessment/assessment.actions.js","common/api/assessment.js","components/pages/pupil/dialogs/create-assessment/create-assessment.container.js","components/pages/pupil/work/works-table/works-table.jsx","components/pages/pupil/work/works-table/works-table.styles.js","components/pages/pupil/work/works-table/works-table.container.js","components/pages/pupil/work/work-skeleton/entry-skeleton/entry-skeleton.jsx","components/pages/pupil/work/work-skeleton/entry-skeleton/entry-skeleton.styles.js","components/pages/pupil/work/work-skeleton/work-skeleton.jsx","components/pages/pupil/work/work-skeleton/work-skeleton.styles.js","components/pages/pupil/work/work.jsx","components/pages/pupil/work/work.styles.js","components/pages/pupil/work/work.container.js","components/pages/pupil/comments/comments-table/comment-entry/context-menu/context-menu.jsx","components/pages/pupil/comments/comments-table/comment-entry/context-menu/context-menu.styles.js","stores/comments/comments.selectors.js","components/pages/pupil/comments/comments-table/comment-entry/context-menu/context-menu.container.js","components/pages/pupil/comments/comments-table/comment-entry/comment-entry.jsx","components/pages/pupil/comments/comments-table/comment-entry/comment-entry.styles.js","components/pages/pupil/comments/comments-table/comment-entry/comment-entry.container.js","components/pages/pupil/comments/comments-table/comments-table.jsx","components/pages/pupil/comments/comments-table/comments-table.styles.js","common/api/comments.js","stores/comments/comments.actions.js","components/pages/pupil/comments/comments-table/comments-table.container.js","components/pages/pupil/comments/comments-skeleton/entry-skeleton/entry-skeleton.jsx","components/pages/pupil/comments/comments-skeleton/entry-skeleton/entry-skeleton.styles.js","components/pages/pupil/comments/comments-skeleton/comments-skeleton.jsx","components/pages/pupil/comments/comments-skeleton/comments-skeleton.styles.js","components/pages/pupil/comments/comments.jsx","components/pages/pupil/comments/comments.styles.js","components/pages/pupil/comments/comments.container.js","components/pages/pupil/assessment/assessments-table/assessment-entry/context-menu/context-menu.jsx","components/pages/pupil/assessment/assessments-table/assessment-entry/context-menu/context-menu.styles.js","components/pages/pupil/assessment/assessments-table/assessment-entry/context-menu/context-menu.container.js","components/pages/pupil/assessment/assessments-table/assessment-entry/assessment-entry.jsx","components/pages/pupil/assessment/assessments-table/assessment-entry/assessment-entry.styles.js","stores/assessment/assessment.selectors.js","components/pages/pupil/assessment/assessments-table/assessment-entry/assessment-entry.container.js","components/pages/pupil/assessment/assessments-table/bulk-actions/bulk-actions.jsx","components/pages/pupil/assessment/assessments-table/bulk-actions/bulk-actions.styles.js","components/pages/pupil/assessment/assessments-table/bulk-actions/bulk-actions.container.js","components/pages/pupil/assessment/assessments-table/assessments-table.jsx","components/pages/pupil/assessment/assessments-table/assessments-table.styles.js","components/pages/pupil/assessment/assessments-table/assessments-table.container.js","components/pages/pupil/assessment/assessment-skeleton/entry-skeleton/entry-skeleton.jsx","components/pages/pupil/assessment/assessment-skeleton/entry-skeleton/entry-skeleton.styles.js","components/pages/pupil/assessment/assessment-skeleton/assessment-skeleton.jsx","components/pages/pupil/assessment/assessment-skeleton/assessment-skeleton.styles.js","components/pages/pupil/assessment/assessment-invitation-modal/info-message/info-message.jsx","components/pages/pupil/assessment/assessment-invitation-modal/info-message/info-message.styles.js","components/pages/pupil/assessment/assessment-invitation-modal/info-message/info-message.container.js","components/pages/pupil/assessment/assessment-invitation-modal/assessment-invitation-modal.jsx","components/pages/pupil/assessment/assessment-invitation-modal/assessement-invitation.selectors.js","components/pages/pupil/assessment/assessment-invitation-modal/assessment-invitation-modal.container.js","components/pages/pupil/assessment/assessment.jsx","components/pages/pupil/assessment/assessment.styles.js","components/pages/pupil/assessment/assessment.container.js","components/pages/pupil/pupil.jsx","components/pages/pupil/pupil.container.js","stores/pupil/pupil.actions.js","components/print-passcodes/print-passcodes.styles.js","components/print-passcodes/print-passcodes.jsx","components/pages/add-pupils/add-pupils.jsx","components/school-head/school-head.styles.js","components/school-head/nav/nav.jsx","components/school-head/school-head-title/school-head-title.jsx","components/school-head/school-head-title/school-head-title.container.js","components/school-head/school-head.jsx","components/pages/pupils/pupils.styles.js","components/pupils-component/pupils-component.styles.js","components/pupils-component/pupils-filter-controls/pupils-filter-controls.styles.js","components/pupils-component/pupils-filter-controls/pupils-filter-controls.jsx","stores/pupils/pupils.selectors.js","components/pupils-component/pupils-component-redux/pupils-component.selectors.js","components/pupils-component/pupils-component-redux/pupils-component.actions.js","components/pupils-component/pupils-filter-controls/pupils-filter-controls.container.js","components/pupils-component/pupils-search/pupils-search.styles.js","components/pupils-component/pupils-search/pupils-search.jsx","components/pupils-component/pupils-search/pupils-search.container.js","components/pupils-component/pupils-table/pupils-table.styles.js","components/pupils-component/pupil-entry/pupil-entry.styles.js","components/pupils-component/pupil-entry/context-menu/context-menu.jsx","components/pupils-component/pupil-entry/context-menu/context-menu.styles.js","components/pages/pupils/dialogs/set-age-group/set-age-group.actions.js","components/pages/pupils/dialogs/remove-from-group/remove-from-group.actions.js","stores/pupils/pupils.actions.js","components/pupils-component/pupil-entry/context-menu/context-menu.container.js","components/pupils-component/pupil-entry/groups/groups.jsx","components/pupils-component/pupil-entry/pupil-entry.jsx","components/pupils-component/pupil-entry/pupil-entry.container.js","components/pupils-component/pupils-table/pupils-table.jsx","components/pupils-component/pupils-table/pupils-table.container.js","components/pupils-component/pupils-filter-dialog/groups-modal-footer/groups-modal-footer.jsx","components/pupils-component/pupils-filter-dialog/groups-modal-footer/groups-modal-footer.styles.js","components/pupils-component/pupils-filter-dialog/groups-modal-footer/groups-modal-footer.container.js","components/pupils-component/pupils-filter-dialog/groups-component/groups-component.jsx","components/pupils-component/pupils-filter-dialog/groups-component/groups-component.styles.js","components/pupils-component/pupils-filter-dialog/groups-component/groups-component.container.js","components/pupils-component/pupils-filter-dialog/pupils-filter-dialog.jsx","components/pupils-component/pupils-filter-dialog/pupils-filter-dialog.container.js","components/pupils-component/add-pupil-button/add-pupil-button.jsx","components/pupils-component/add-pupil-button/add-pupil-button.styles.js","components/pupils-component/no-pupils/no-pupils.jsx","components/pupils-component/no-pupils/no-pupils.styles.js","components/pupils-component/pupils-component.jsx","components/pupils-component/pupils-component.container.js","components/pages/pupils/loading-screen/loading-screen.styles.js","components/pages/pupils/loading-screen/loading-screen.jsx","components/pages/pupils/dialogs/set-age-group/set-age-group.jsx","components/pages/pupils/dialogs/set-age-group/set-age-group.styles.js","components/pages/pupils/dialogs/set-age-group/set-age-group.selectors.js","components/pages/pupils/dialogs/set-age-group/set-age-group.container.js","components/pages/pupils/dialogs/add-to-group/add-to-group.container.js","components/pages/pupils/dialogs/remove-from-group/remove-from-group.jsx","components/pages/pupils/dialogs/remove-from-group/remove-from-group.styles.js","components/pages/pupils/dialogs/remove-from-group/remove-from-group.selectors.js","components/pages/pupils/dialogs/remove-from-group/remove-from-group.container.js","components/bulk-action-bar/bulk-action-bar.jsx","components/bulk-action-bar/bulk-action-bar.styles.js","components/pages/pupils/pupils.context.js","components/pages/pupils/pupils-bulk-action/pupils-bulk-action.jsx","components/pages/pupils/pupils-bulk-action/pupils-bulk-action.styles.js","components/pages/pupils/pupils-bulk-action/pupils-bulk-action.container.js","components/pages/pupils/pupils.jsx","components/pages/pupils/pupils.container.js","components/pages/groups/groups.styles.js","components/pages/groups/groups-table/groups-table.styles.js","components/pages/groups/groups-table/group-entry/group-entry.styles.js","components/pages/groups/groups-table/group-entry/context-menu/context-menu.jsx","components/pages/groups/groups-table/group-entry/context-menu/context-menu.styles.js","components/pages/groups/groups-table/group-entry/context-menu/context-menu.container.js","components/pages/groups/dialogs/update-group/update-group.actions.js","components/pages/groups/groups-table/group-entry/group-entry.jsx","components/pages/groups/groups-component-redux/groups-component-redux.actions.js","components/pages/groups/groups-component-redux/groups-component-redux.selectors.js","components/pages/groups/groups-table/group-entry/group-entry.container.js","components/icons/comment-left-icon.jsx","components/icons/comment-received-icon.jsx","components/pages/groups/groups-table/groups-table.jsx","components/pages/groups/groups-table/groups-table.container.js","components/pages/groups/loading-screen/loading-screen.styles.js","components/pages/groups/loading-screen/loading-screen.jsx","components/pages/groups/dialogs/add-group/add-group.jsx","components/pages/groups/dialogs/add-group/add-group.styles.js","components/pages/groups/dialogs/add-group/add-group.selectors.js","components/pages/groups/dialogs/add-group/add-group.actions.js","components/pages/groups/dialogs/add-group/add-group.container.js","components/pages/groups/dialogs/update-group/update-group.jsx","components/pages/groups/dialogs/update-group/update-group.styles.js","components/pages/groups/dialogs/update-group/update-group.selectors.js","components/pages/groups/dialogs/update-group/update-group.container.js","components/pages/groups/dialogs/set-visibility/set-visibility.jsx","components/pages/groups/dialogs/set-visibility/set-visibility.styles.js","components/pages/groups/dialogs/set-visibility/set-visibility.selectors.js","components/pages/groups/dialogs/set-visibility/set-visibility.container.js","components/pages/groups/dialogs/set-visibility/set-visibility.actions.js","components/pages/groups/groups-bulk-action/groups-bulk-action.jsx","components/pages/groups/groups-bulk-action/groups-bulk-action.styles.js","components/pages/groups/groups-bulk-action/groups-bulk-action.container.js","components/pages/groups/groups-head/groups-head.jsx","components/pages/groups/groups-head/groups-head.styles.js","components/pages/groups/groups-head/groups-head.container.js","components/pages/groups/no-groups/no-groups.jsx","components/pages/groups/no-groups/no-groups.styles.js","components/pages/groups/no-groups/no-groups.container.js","components/pages/groups/groups.jsx","components/pages/groups/groups.container.js","components/pages/school-overview/school-overview.jsx","components/pages/conflict-resolution/conflict-resolution.styles.js","components/pages/conflict-resolution/wizard/wizard.styles.js","components/pages/conflict-resolution/wizard/steps/introduction/introduction.styles.js","components/pages/conflict-resolution/wizard/steps/introduction/introduction.jsx","stores/conflict-resolution/conflict-resolution.selectors.js","stores/conflict-resolution/conflict-resolution.actions.js","components/pages/conflict-resolution/wizard/steps/introduction/introduction.container.js","components/pages/conflict-resolution/wizard/steps/resolution/resolution.styles.js","components/pages/conflict-resolution/wizard/steps/resolution/resolution.jsx","components/pages/conflict-resolution/wizard/steps/resolution/resolution.container.js","components/pages/conflict-resolution/wizard/steps/conclusion/conclusion.styles.js","components/pages/conflict-resolution/wizard/steps/conclusion/conclusion.jsx","components/pages/conflict-resolution/wizard/steps/conclusion/conclusion.container.js","components/pages/conflict-resolution/wizard/wizard.jsx","components/pages/conflict-resolution/wizard/wizard.container.js","components/pages/conflict-resolution/conflict-resolution.jsx","components/pages/conflict-resolution/conflict-resolution.container.js","components/permission-warning/permission-warning.jsx","components/permission-warning/permission-warning.styles.js","components/app/app.js","components/pages/pupils/dialogs/set-age-group/set-age-group.reducer.js","components/pages/pupils/dialogs/remove-from-group/remove-from-group.reducer.js","components/pages/pupils/pupils.reducer.js","stores/pupils/pupils.reducer.js","stores/pupil/pupil.reducer.js","stores/profile/profile.reducer.js","stores/permissions/permissions.reducer.js","stores/comments/comments.reducer.js","stores/works/works.reducer.js","stores/assessment/assessment.reducer.js","stores/groups/groups.reducer.js","components/pages/groups/dialogs/add-group/add-group.reducer.js","components/pages/groups/dialogs/update-group/update-group.reducer.js","components/pages/groups/dialogs/set-visibility/set-visibility.reducer.js","components/pages/groups/groups-component-redux/groups-component-redux.reducer.js","components/pupils-component/pupils-component-redux/pupils-component.reducer.js","stores/year-groups/year-groups.reducer.js","components/add-to-group/add-to-group.reducer.js","stores/conflict-resolution/conflict-resolution.reducer.js","reducer.js","index.js"],"names":["module","exports","styles","container","color","_ref","BREAKPOINTS","loadingContainer","display","justifyContent","pupilName","textAlign","margin","navContianer","position","left","bottom","width","backToPupils","top","XS","boxShadow","padding","backgroundColor","height","injectSheet","classes","children","className","style","React","createElement","classNames","listStyle","flexDirection","COLORS","FONT_SIZES","item","content","transition","BLUE","NORMAL","transform","activeItem","link","textDecoration","TEXT","MID_GREY","HEADING_BIG","STYLE","HEADING_MEDIUM","hover","withRouter","path","location","pathname","Link","to","match","HeadNav","HeadNavLink","params","pupilId","title","LIGHT_GREY","HEADING_EXTRA_LARGE","PupilTitle","name","HeadTitle","getState","state","PupilStore","getPupil","pupil","connect","mapStateToProps","account","first_name","last_name","PupilHead","pupilsList","CarretLeftIcon","back","showLoadingScreen","showPupilHead","Head","Title","Bone","Nav","BackToPupils","fetchRequest","getFetchRequest","pending","requestError","PupilProfileStore","getData","selector","data","getGroups","groups","getProfile","profile","getPupilGroupIds","createSelector","result","getGroupsMap","entities","alignItems","desc","avatar","fontSize","lineHeight","displayName","avatarUrl","UserAvatar","avatar_url","full_name","display_name","Pupil","profileInfoHead","row","borderBottom","holder","cell","hintCell","hint","flexShrink","borderRadius","Cell","AgeGroupsOptions","ageGroups","selectOption","Fragment","map","_ref2","id","key","value","AgeGroupsSelect","Component","componentDidMount","fetchAgeGroups","this","props","render","formSelectProps","fetching","fetchingError","bone","FormSelect","Object","assign","RED","border","whiteSpace","overflow","textOverflow","apiGetYearGroups","apiClient","get","YearGroups","getYearGroups","yearGroups","fetchingStatus","getYearGroupsFetchingStatus","dispatch","requestPrefix","request","include","catch","AgeGroupSelect","background","Spinner","group","icon","right","cursor","mis","marginLeft","onDelete","editable","TimesIcon","onClick","openConfirmationDialog","bodyText","confirmText","action","apiGetStudent","apiUpdateStudent","put","apiRetireStudent","delete","apiCreateStudent","shooldId","post","apiAddStudentToAGroup","apiRemoveStudentFromGroup","apiAddPermissionToStudent","apiRemovePermissionFromStudent","GroupsStore","getGroupsFetchingStatus","getCategories","categories","getGroup","getGroupsArray","getUpdatableGroupsArray","filter","policy","can_manage_students_for_group","getGroupDeletingStatus","provider_type","deleting","getGroupsDeletingStatuses","getGroupCreatingStatus","creating","getGroupUpdatingStatus","updating","getGroupsUpdatingStatuses","defaultInclude","resetPasscode","apiResetStudentPasscode","removePupilFromGroup","student_account_id","groupId","group_id","getPupilGroup","mis_group","mapDispatchToProps","Group","noGroups","onRemove","length","mergeProps","stateProps","ownProps","Groups","updatingOverlay","zIndex","dateCell","resetPass","daySelect","submitHolder","marginTop","HEADING_LARGE","groupAddHintCell","paddingTop","groupAddCell","groupAddButton","firstName","lastName","bdMonth","bdDay","ageGroup","updatePupil","showUpdatingOverlay","passCode","parentCode","parents","onResetPasscode","onAddToGroup","permission","editableProps","Formik","enableReinitialize","onSubmit","values","initialValues","validationSchema","Yup","shape","required","validateDisplayName","handleChange","handleSubmit","handleBlur","errors","isValid","UpdatingOverlay","Button","disabled","type","tall","secondary","Row","FormLabel","htmlFor","FormInput","validationError","placeholder","onBlur","onChange","HintCell","spaceBetween","CharactersCount","max","maxLength","parent","openAddToGroupDialog","ids","withMe","me","updatingStatus","getPupilUpdatingStatus","removingFromFormStatus","getPupilRemovingFromGroupStatus","removingFromGroup","resettingPasscodeStatus","getPupilPasscodeResettingStatus","resettingPasscode","addingToGroup","getPupilAddingToGroupStatus","student_type","editable_properties","can_manage_students","passcode","parent_code","year_group","can_publish","parent_types","year_group_id","errorHandler","PupilInfoForm","GroupsOptions","GroupsSelect","PureComponent","onMount","applyFilters","except","only","groupsArray","whenNoGroupsAvailable","options","apiGetSchoolData","apiGetSchoolConflicts","schoolId","fetchGroups","createGroup","apiCreateGroup","deleteGroup","apiDeleteGroup","updateGroup","apiUpdateGroup","getSchool","teacher_type","teacher","school","getSchoolId","keys","footer","cancel","modalContent","minWidth","opened","requestClose","allGroups","Modal","isOpen","ModalHeader","ModalContent","legacy","ModalFooter","simple","Shared","AddToGroupDialog","getPupilsIds","idsArray","forEach","getExcept","_ref3","AddToGroup","addPupilToGroup","ProfileInfoHead","maxWidth","marginRight","XL","gridTemplateColumns","columnGap","InputCell","label","marginBottom","input","_ref4","labelWidth","_ref5","_ref6","fLineWidth","sLineWidth","flex","_ref7","manualUpdate","canUpdatePermission","addPermission","removePermission","permissionWarning","useContext","AppContext","CircleStatus","status","FontAwesomeIcon","faFileCheck","faFileTimes","currentState","addingPermission","removingPermission","can_update_school_leader_permissions","ProfilePermissionHead","documents","Profile","showProfile","ContentHolder","Paper","LoadingScreen","ProfileInfo","Permission","getPupilFetchingStatus","onPublish","onUnpublish","canPublish","DropMenu","button","ref","togglePopover","MoreButton","forwardedRef","Menu","MenuItem","IconHolder","Separator","closePopover","faGlobe","theme","faTimesCircle","faTrashAlt","apiGetAccount","fetchWorks","arguments","undefined","page","deleteWork","apiDeleteWork","updateWork","apiUpdateWork","WorksStore","fetchWorksRequest","getDeletingWorkRequests","deletingWorkRequests","anyWorkDeleting","deletingWorksRequests","getWorks","works","getWorksMap","getWorksResult","getWorksList","worksMap","getWork","getPagination","pagination","work","then","current","ContextMenu","titleLink","fontWeight","thumbnail","paddingBottom","backgroundSize","inPart","date","published","ageOrder","ageTitle","independent","independentInfo","TableRow","center","BulkCheckbox","href","backgroundImage","Tooltip","faInfoCircle","AgeGroup","order","updatingRequest","getWorksState","updatingWorkRequests","format","created_at","media","thumb_url","independent_description","WorkEntry","onOpenCreateAssessmentDialog","createAssesmenFileSP","useSubscriptionPolicy","sp","moderation","create_assessment_file","moderationSP","ActionButton","bulkSelectedList","restricted","showDialog","SubsCrown","faFileAlt","Promise","all","selectedWorks","openCreateAssessmentDialog","BulkAction","part","optionals","borderTop","optional","count","context","moderation_type","judgement","touched","FormTextArea","PaperclipIcon","default","getSelectedWorks","createAssessmentDialog","getSelectedWorksCount","createAssessmentFile","studentId","apiCreateAssessmentFile","deleteAssessmentFile","apiDeleteAssessmentFile","inviteToAssessmentFile","assessmentFileId","emails","recaptchaToken","apiInviteToAssessmentFileBulk","assessment_file_id","recaptcha_token","work_ids","student_id","resp","window","assessment_file","CreateAssessment","sta","contextMenuCell","noWorks","moreWorks","onSelectAll","onDeselectAll","onPageChange","src","octopus","alt","BulkActionProvider","Table","HeadCell","SelectAllButton","BulkActions","Pagination","CreateAssessement","selected","WorksTable","checkbox","contextMenu","thumbnailCell","titleWidth","allCell","titleCell","ageGroupCell","publishedCell","bulkAction","staCell","EntrySkeleton","Work","paper","WorkSkeleton","minHeight","onGoToWork","FileIcon","CommentsStore","fetchCommentsRequest","getComments","comments","getCommentsMap","getCommentsResult","getCommentsList","commentsMap","getComment","workId","commentCell","statusCell","comment","CommentEntry","allButton","on","noComments","fetchComments","getCommentsPagination","mapDispatchToprops","CommentsTable","commentWidth","Comments","contentHolder","CommentsSkeleton","initial","onOpenInvitationAssessmentDialog","AddUserIcon","TrashIcon","openInvitationAssessmentDialog","conclusion","contributors","AssessmentStore","fetchAssessmentsRequest","getDeletingAssessmentRequest","deletingAssessmentRequests","getDeletingAssessmentRequests","getAssessments","assessments","getAssessmentsMap","getAssessmentsResult","getAssessmentsList","assessmentsMap","getAssessment","assessment","updated_at","concluded","AssessmentEntry","noAssessments","AssessmentsTable","contributorsCell","conclusionCell","message","student","worksCount","assessmentFile","InfoMessage","selectedEmails","setSelectedEmails","useState","setPending","Recaptcha","recaptchaProps","getReCaptchaToken","useRecaptcha","closeButton","small","ColorsInfo","EmailInput","cacheKey","alignRight","token","invitationAssessmentDialog","getAssessmentFileId","email","toast","success","AssessementInvitationModal","Assessment","AssessmentSkeleton","scrollTo","Route","exact","component","printPageStyles","opacity","tableLayout","borderCollapse","nameField","fullName","printPasscodesStyles","img","paddingLeft","paddingRight","usePasscodesPrint","accounts","onAfterPrint","pupils","setPupils","printInProgress","setPrintInProgress","componentRef","useRef","pupilsPages","useMemo","i","slice","Array","push","useEffect","res","handlePrint","useReactToPrint","copyStyles","pageStyle","print","setTimeout","PrintComponent","renderItem","split","number","index","nextPupil","PrintPasscodes","ButtonElement","printPasscodesImg","faPrint","PrintPasscodesDialog","ResultModal","buttons","BODY_SMALL","onPrint","PobbleLink","LayoutHolder","PupilsTable","info","ageLabel","labelRow","gap","intro","separator","canEnableProvider","useMe","view_school_tab","FormRow","isEmpty","fields","e","target","yg","btn","ActionBar","show","faSave","addFormItemDetails","filledFileds","isComplete","AddPupils","head","card","objectFit","mobileBreak","cardDesc","listStyleType","safetyHint","font","csv","_ref8","setData","setYearGroups","savedPupils","setSavedPupils","resultModalState","setResultModalState","open","addingPupils","setAddingPupils","finalData","enable_pull_provider","year_groups","pupilsImg","preventDefault","saved","field","dataCopy","dataItem","URLS","DASHBOARD","FormFile","files","formData","FormData","append","apiParseCsvOfStudents","school_id","student_details_csv","newData","student_details","oldData","lastField","accept","schoolTitle","SchoolHeadTitle","pageHolder","pupilsMessage","borderLeft","borderRight","BODY_LARGE","topPanel","searchHolder","filterControlsContainer","addPupilHolder","showingSelectedHolder","showAllPupils","firstGroup","DARK_GREY","otherGroups","actionLink","selectedGroups","onEdit","onReset","onSelectGroups","PupilsStore","getPupils","getPupilsUpdatingStatuses","getPupilDeletingStatus","getPupilsDeletingStatuses","getPupilIncrementingAgeGroupStatus","incrementingAge","getPupilsArray","PupilsComponent","getSelectedPupils","selectedPupils","isPupilSelected","getSortBy","sortBy","getSearchValue","searchValue","getFilterDialogOpened","filterDialogOpened","getSelectedGroups","getVisiblePupilsLength","visiblePupils","isShowingSelected","showSelected","getSelectedGroupsArray","getSelectedPupilsIdsArray","getSelectedPupilsArray","getSelectedPupilsLength","getFilteredPeopleByGroups","getFilteredPeopleBySearch","toLowerCase","indexOf","getPupilsConditionally","filteredPupils","getSortedPupils","sort","pupilsArray","orderBy","age","direction","isEveryoneSelected","selectedPupilsLength","getPupilsWithAllFilters","visiblePupilsLength","sortedPupils","isThereHiddenPupils","setPupilSelectStatuses","selectedGroupsCategory","selectedCategory","category","statuses","buttonLabel","searchValueChange","inputProps","defaultValue","debounce","PupilsSearch","selectAll","userSelect","loadMoreContainer","overflowX","nameCell","alignLeft","usernameWrapper","userNameHighlight","updatingSpinner","pendingRow","retirePupil","openAgeGroupDialog","openRemoveFromGroupDialog","onIncrementAge","canUpdatePermissions","popoverClassName","contextMenuHolder","menu","faBirthdayCake","faLevelUp","faUsers","faUserTimes","faTimes","incrementAgeGroup","apiIncrementAgeGroup","exportCSV","student_ids","apiExportStudentsToCSV","join","onPupilClick","Checkbox","checked","UserName","as","all_works_count","setPupilSelectStatus","PupilEntry","allAction","everyoneSelected","changeSortKey","actualPupilsListEmpty","showLoadMore","loadMoreAction","history","hideAllAction","ordered","dispatchProps","onCancel","applyGroupsFilter","GroupsModalFooter","GroupsComponent","GroupsSelectionProvider","store","GroupsSelection","groupsSelection","animation","from","GroupsModal","PupilsFilterDialog","PlusIcon","noPupils","filteredPupilsEmpty","showAll","canAddPupil","NoPupils","PupilsFilterControls","selectedWarning","AddPupilButton","PupilsFilter","selectGroup","UserRow","nameWidth","initialAgeGroup","Pupils","setAgeGroupDialog","SetAgeGroup","getErrorInfo","includeGroups","removeFromGroupDialog","keyBy","RemoveFromGroup","pointerEvents","buttonIcon","renderContextMenu","onShowSelected","showingSelected","onShowAll","renderMessage","nodeRef","EllipsisIcon","createContext","onSetAgeGroup","retirePupils","onRemoveFromGroup","onExportCSV","openPasscodesDialog","pupilsContext","BulkActionBar","url","PupilsBulkAction","showPupilsComponent","printPasscodesState","setPrintPasscodesState","contextValue","PupilsContext","Provider","SetAgeGroupDialog","RemoveFromGroupDialog","getPupilsFetchingStatus","table","groupWrapper","spinner","misLabel","groupName","canEdit","PencilIcon","CloseIcon","access","students","onSelect","worksPublished","recieved","out","views","EyeIcon","EyeSlashIcon","setGroupSelectStatuses","getSelectedGroupsIdsArray","groupsIdArray","selectedGroupsArray","isGroupSelected","getSelectedGroupsLength","selectedGroupsLength","getGroupsConditionally","getSortedGroups","visibility","students_count","number_of_students","number_of_published_works","number_of_comments_received","number_of_comments_left","number_of_work_views","setGroupSelectStatus","GroupEntry","xmlns","viewBox","d","fill","onGroupClick","hideAllButton","actualGroupsEmpty","filteredGroupsEmpty","BookIcon","CommentLeftIcon","CommentReceivedIcon","actualGroups","filteredGroups","groupAction","GroupsTable","GroupRow","groupWidth","addGroupDialog","openAddGroupDialog","AddGroup","groupTitle","groupVisibility","updateGroupDialog","getId","UpdateGroup","setVisibilityDialog","getIds","SetVisibility","onSetVisibility","anyWondeGroupSelected","GroupsBulkAction","addGroupButton","onAddGroup","GroupsHead","addGroup","NoGroups","showGroupsTable","UpdateGroupDialog","SetVisibilityDialog","AddGroupDialog","showContent","SchoolOverview","SchoolHead","modalHeader","remainingStudents","importedStudentsCount","onNextStep","ConflictsStore","fetchConflictsRequest","getRefetchRequest","refetchConflictsRequest","getRetireRequest","retireStudentRequest","getResolveRequest","resolveConflictRequest","getConflicts","conflicts","refetchConflicts","resolveConflict","matchingStudentId","legacyStudentId","apiResolveConflict","matching_student_id","legacy_student_id","remaining","imported_students_count","step","setStep","Introduction","alert","details","selection","processing","choice","highlighted","Resolution","constructor","super","selectedStudent","similarStudentResolved","studentName","studentDay","studentMonth","workCount","unmatchingStudents","onResolve","onRetire","Alert","PobbleAvatar","FormRadio","setState","Autocomplete","wrapperStyle","items","getItemValue","event","renderMenu","isHighlighted","meRequest","legacy_student","similar_resolved","dob_day","dob_month","non_matched_pull_provider_students","resolve","reject","retireStudent","Conclusion","noMoreStudents","onIntroScreen","onResolutionScreen","getCurrentStep","Wizard","ConflictResolution","fetchConflicts","actions","meError","setPermissionWarning","UserProvider","fetchMe","SubscriptionProvider","Router","basename","process","EnvironmentLine","Header","activePage","ErrorBoundary","UserInspector","schoolRequired","Switch","PageNotFound","PsermissionWarning","defaultState","SetAgeGroupDialogReducer","createReducer","PUPILS:DIALOG:SET_AGE_GROUP_OPEN","PUPILS:REMOVE_FROM_GROUP_DIALOG:OPEN","PupilsReducer","combineReducers","RemoveFromGroupDialogReducer","normalizePupils","schema","Entity","idAttribute","normalize","createRequestReducer","createMappedRequestReducer","creatingBatch","PUPILS_STORE:SET_PUPILS","PUPILS_STORE:FETCHING_REQUEST_SUCCESS","response","student_types","PUPILS_STORE:UPDATE_PUPIL_REQUEST_SUCCESS","PUPILS_STORE:RETIRE_PUPIL_REQUEST_SUCCESS","PUPILS_STORE:ADD_PERMISSION_REQUEST_SUCCESS","PUPILS_STORE:REMOVE_PERMISSION_REQUEST_SUCCESS","PUPILS_STORE:ADD_PUPIL_TO_GROUP_REQUEST_SUCCESS","PUPILS_STORE:REMOVE_PUPIL_FROM_GROUP_REQUEST_SUCCESS","PUPILS_STORE:INCREMENT_AGE_GROUP_REQUEST_SUCCESS","_ref9","dotProp","set","PupilReducer","PUPIL_STORE:FETCHING_REQUEST_SUCCESS","PUPIL_PROFILE_STORE:FETCHING_REQUEST_SUCCESS","PUPIL_PROFILE_STORE:UPDATE_PUPIL_REQUEST_SUCCESS","PUPIL_PROFILE_STORE:RESET_PASSCODE_REQUEST_SUCCESS","PUPIL_PROFILE_STORE:REFETCH_POLICY_REQUEST_SUCCESS","normalizeGroups","PUPIL_PROFILE_STORE:ADD_PUPIL_TO_GROUP_REQUEST_SUCCESS","PUPIL_PROFILE_STORE:REMOVE_PUPIL_FROM_GROUP_REQUEST_SUCCESS","PermissionsReducer","uploadingPermission","deletingPermission","permissions","PERMISSIONS_STORE:FETCHING_REQUEST_SUCCESS","pemrission","normalizePermissionSlips","permission_slips","PERMISSIONS_STORE:DELETE_PERMISSION_REQUEST_SUCCESS","PERMISSIONS_STORE:UPLOAD_PERMISSION_REQUEST","file_name","file","PERMISSIONS_STORE:UPLOAD_PERMISSION_REQUEST_SUCCESS","permission_slip","CommentsReducer","COMMENTS_STORE:FETCH_REQUEST_SUCCESS","comments_pagination","normalizeComments","WorksReducer","WORKS_STORE:FETCH_REQUEST_SUCCESS","works_pagination","normalizeWorks","WORKS_STORE:UPDATE_REQUEST_SUCCESS","WORKS_STORE:CREATE_ASSESSMENT_DIALOG:OPEN","AssessmentsReducer","ASSESSMENT_STORE:FETCH_REQUEST_SUCCESS","normalizeAssessments","assessment_files","ASSESSMENT_STORE:DELETE_REQUEST_SUCCESS","selectedAssessments","ASSESSMENT_STORE:CREATE_ASSESSMENT_DIALOG:OPEN","ASSESSMENT_STORE:INVITATION_ASSESSMENT_DIALOG:OPEN","GroupsReducer","GROUPS_STORE:FETCHING_REQUEST_SUCCESS","group_categories","GROUPS_STORE:CREATE_REQUEST_SUCCESS","GROUPS_STORE:DELETE_REQUEST_SUCCESS","GROUPS_STORE:UPDATE_REQUEST_SUCCESS","GROUPS:ADD_GROUP_DIALOG:OPEN","GROUPS:UPDATE_GROUP_DIALOG:OPEN","GROUPS:SET_VISIBILITY_DIALOG:OPEN","GroupsComponentReducer","addGroupDialogReducer","updateGroupDialogReducer","setVisibilityDialogReducer","GROUPS_COMPONENT:SET_SELECT_STATUS","GROUPS_COMPONENT:SET_SELECT_STATUSES","GROUPS_COMPONENT:SET_SORT_KEY","cacheSelectedGroups","localStorage","setItem","JSON","stringify","removeItem","groupsStorage","getItem","parse","selectedGroupsTemp","PupilsComponentReducer","PUPILS_COMPONENT:SET_SELECT_STATUS","PUPILS_COMPONENT:SET_SELECT_STATUSES","PUPILS_COMPONENT:SET_SORT_KEY","PUPILS_COMPONENT:CHANGE_SEARCH_VALUE","PUPILS_COMPONENT:APPLY_GROUPS_FILTER","PUPILS_COMPONENT:CHANGE_GROUP_CATEGORY","GROUPS_COMPONENT:GROUP_ACTION","YearGroupsReducer","YEAR_GROUPS:FETCHING_REQUEST_SUCCESS","ADD_TO_GROUP_DIALOG:OPEN","ConflictsReducer","CONFLICTS_STORE:FETCHING_REQUEST_SUCCESS","CONFLICTS_STORE:REFETCHING_REQUEST_SUCCESS","CONFLICTS_STORE:SET_STEP_SUCCESS","Reducer","AddToGroupDialogReducer","PupilStoreReducer","AssessmentReducer","PermissionsStore","PupilsStoreReducer","PupilProfileReducer","createStore","rootReducer","applyMiddleware","requestMiddleware","thunk","ReactDOM","PobbleStyles","App","ConfirmationDialog","ToastContainer","document","getElementById"],"mappings":"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","file":"static/js/main.15c96934.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/print-passcodes.a4c1daa2.png\";","module.exports = __webpack_public_path__ + \"static/media/octopus.6a85081b.png\";","module.exports = __webpack_public_path__ + \"static/media/pupils.e4c24069.png\";","module.exports = __webpack_public_path__ + \"static/media/no-pupils.5b04fd70.png\";","module.exports = __webpack_public_path__ + \"static/media/no-groups.c490b6ff.png\";","const styles = {\n container: {\n color: 'red'\n }\n}\n\nexport default styles\n","const styles = ({ BREAKPOINTS }) => ({\n loadingContainer: {\n display: 'flex',\n justifyContent: 'center'\n },\n pupilName: {\n textAlign: 'center',\n margin: '0'\n },\n navContianer: {\n display: 'flex',\n justifyContent: 'center',\n position: 'absolute',\n left: '0',\n bottom: '0',\n width: '100%'\n },\n backToPupils: {\n position: 'absolute',\n top: '20px',\n left: '20px',\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n top: '10px',\n left: '10px'\n }\n }\n})\n\nexport default styles\n","const styles = ({ BREAKPOINTS }) => ({\n container: {\n boxShadow: '0 2px 4px 0 rgba(0, 0, 0, 0.1)',\n padding: '30px 0 0',\n backgroundColor: '#fff',\n margin: '0 0 30px',\n position: 'relative',\n height: '140px',\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n padding: '48px 0 0'\n }\n }\n})\n\nexport default styles\n","import React from 'react'\nimport styles from './head.styles'\nimport injectSheet from 'react-jss'\nimport classNames from 'classnames'\n\nconst Head = ({ classes, children, className, style }) => (\n
\n {children}\n
\n)\n\nexport default injectSheet(styles)(Head)\n","const styles = {\n container: {\n listStyle: 'none',\n padding: '0',\n margin: '0',\n display: 'flex',\n flexDirection: 'row'\n }\n}\n\nexport default styles\n","import React from 'react'\nimport styles from './head-nav.styles'\nimport injectSheet from 'react-jss'\nimport classNames from 'classnames'\n\nconst HeadNav = ({ classes, children, className }) => (\n \n)\n\nexport default injectSheet(styles)(HeadNav)\n","import { hover } from 'pobble-components/dist/jss-mixins'\n\nconst styles = ({ COLORS, FONT_SIZES, BREAKPOINTS }) => ({\n item: {\n margin: '0 0 0 60px',\n padding: '0 16px 5px',\n position: 'relative',\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n margin: '0 0 0 30px'\n },\n '&:first-child': {\n margin: '0'\n },\n '&:after': {\n content: '\"\"',\n transition: 'transform 0.3s',\n height: '2px',\n backgroundColor: COLORS.BLUE.NORMAL,\n width: '100%',\n position: 'absolute',\n bottom: '0',\n left: '0',\n transform: 'scaleX(0)'\n }\n },\n activeItem: {\n '&:after': {\n transform: 'scaleX(1)'\n },\n '& $link': {\n color: COLORS.BLUE.NORMAL\n }\n },\n link: {\n transition: 'color 0.3s',\n textDecoration: 'none',\n color: COLORS.TEXT.MID_GREY.NORMAL,\n ...FONT_SIZES.HEADING_BIG.STYLE,\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n ...FONT_SIZES.HEADING_MEDIUM.STYLE\n },\n ...hover({\n color: COLORS.BLUE.NORMAL\n })\n }\n})\n\nexport default styles\n","import React from 'react'\nimport styles from './head-nav-link.styles'\nimport injectSheet from 'react-jss'\nimport { Link, withRouter } from 'react-router-dom'\nimport classNames from 'classnames'\n\nconst HeadNavLink = ({ classes, children, path, location }) => (\n \n \n {children}\n \n \n)\n\nexport default withRouter(injectSheet(styles)(HeadNavLink))\n","import React from 'react'\nimport HeadNav from '../../../../head-nav/head-nav'\nimport HeadNavLink from '../../../../head-nav/head-nav-link/head-nav-link'\nimport { withRouter } from 'react-router-dom'\n\nconst Nav = ({ classes, className, location, match }) => (\n \n Profile\n \n Evidence bank\n \n \n Comments\n \n \n Moderation portfolio\n \n \n)\n\nexport default withRouter(Nav)\n","const styles = ({ COLORS, FONT_SIZES }) => ({\n title: {\n color: COLORS.TEXT.LIGHT_GREY.NORMAL,\n ...FONT_SIZES.HEADING_EXTRA_LARGE.STYLE,\n margin: '0',\n textAlign: 'center'\n }\n})\n\nexport default styles\n","import React from 'react'\nimport styles from './head-title.styles'\nimport injectSheet from 'react-jss'\nimport classNames from 'classnames'\n\nconst HeadTitle = ({ classes, children, className }) => (\n

{children}

\n)\n\nexport default injectSheet(styles)(HeadTitle)\n","import React from 'react'\nimport HeadTitle from '../../../../head-title/head-title'\n\nconst PupilTitle = ({ classes, name }) => {name}\n\nexport default PupilTitle\n","const getState = state => state.PupilStore\n\nconst getPupil = state => getState(state).pupil\n\nconst getFetchRequest = state => getState(state).fetchRequest\n\nexport { getPupil, getFetchRequest }\n","import { connect } from 'react-redux'\nimport PupilHead from './title'\nimport { withRouter } from 'react-router'\nimport { getPupil } from '../../../../../stores/pupil/pupil.selectors'\n\nconst mapStateToProps = (state, { match }) => {\n const pupil = getPupil(state)\n return {\n name: `${pupil.account.first_name} ${pupil.account.last_name}`\n }\n}\n\nexport default withRouter(\n connect(\n mapStateToProps,\n null\n )(PupilHead)\n)\n","const styles = ({ COLORS, BREAKPOINTS }) => ({\n link: {\n color: COLORS.BLUE.NORMAL,\n textDecoration: 'none',\n '& svg': {\n margin: '-2px -4px 0 0'\n }\n },\n pupilsList: {\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n display: 'none'\n }\n }\n})\n\nexport default styles\n","import React from 'react'\nimport styles from './back-to-pupils.styles'\nimport injectSheet from 'react-jss'\nimport classNames from 'classnames'\nimport { Link } from 'react-router-dom'\nimport CarretLeftIcon from 'react-icons/lib/fa/caret-left'\n\nconst BackToPupils = ({ classes, className }) => (\n \n Back{' '}\n to pupils list\n \n)\n\nexport default injectSheet(styles)(BackToPupils)\n","import React from 'react'\nimport styles from './pupil-head.styles'\nimport injectSheet from 'react-jss'\nimport Head from '../../../head/head'\nimport Nav from './nav/nav'\nimport Title from './title/title.container'\nimport BackToPupils from '../../../back-to-pupils/back-to-pupils'\nimport Bone from 'pobble-components/dist/bone'\nimport classNames from 'classnames'\n\nconst PupilHead = ({ classes, showLoadingScreen, showPupilHead }) => (\n \n {showPupilHead && }\n {showLoadingScreen && <Bone style={{ width: '180px', height: '38px' }} />}\n <Nav className={classes.navContianer} />\n <BackToPupils className={classes.backToPupils} />\n </Head>\n)\n\nexport default injectSheet(styles)(PupilHead)\n","import { connect } from 'react-redux'\nimport PupilHead from './pupil-head'\nimport { withRouter } from 'react-router'\nimport {\n getFetchRequest,\n getPupil\n} from '../../../../stores/pupil/pupil.selectors'\n\nconst mapStateToProps = (state, { match }) => {\n const pupil = getPupil(state)\n const fetchRequest = getFetchRequest(state)\n return {\n showLoadingScreen: !pupil || fetchRequest.pending,\n showPupilHead:\n !!pupil && !fetchRequest.pending && !fetchRequest.requestError\n }\n}\n\nexport default withRouter(connect(mapStateToProps)(PupilHead))\n","import { createSelector } from 'reselect'\n\nconst getState = state => state.PupilProfileStore\n\nconst getData = (state, selector) => {\n const data = state.PupilProfileStore ? state.PupilProfileStore : state\n return !data ? null : selector(data)\n}\n\nconst getGroups = state => getState(state).groups\n\nconst getPupilFetchingStatus = (state, id) =>\n getData(\n state,\n data => data.fetching[id] || { pending: true, requestError: null }\n )\n\nconst getPupilUpdatingStatus = (state, id) =>\n getData(state, data => data.updating[id] || {})\n\nconst getPupilPasscodeResettingStatus = (state, id) =>\n getData(state, data => data.resettingPasscode[id] || {})\n\nconst getPupilRemovingFromGroupStatus = (state, id) =>\n getData(state, data => data.removingFromGroup[id] || {})\n\nconst getPupilAddingToGroupStatus = (state, id) =>\n getData(state, data => data.addingToGroup[id] || {})\n\nconst getProfile = state => getState(state).profile\n\nconst getPupilGroupIds = createSelector(\n [getGroups],\n groups => (!groups ? [] : groups.result)\n)\n\nconst getGroupsMap = createSelector(\n [getGroups],\n groups => (!groups ? {} : groups.entities.groups)\n)\n\nconst getPupilGroup = (state, groupId) => getGroupsMap(state)[groupId]\n\nexport {\n getState,\n getProfile,\n getPupilFetchingStatus,\n getPupilUpdatingStatus,\n getPupilPasscodeResettingStatus,\n getPupilRemovingFromGroupStatus,\n getPupilAddingToGroupStatus,\n getPupilGroup,\n getPupilGroupIds\n}\n","export default {\n container: {\n padding: '0 0 30px'\n },\n content: {\n '& > div': {\n marginTop: '30px',\n '&:first-child': {\n marginTop: '0'\n }\n }\n }\n}\n","import React from 'react'\nimport styles from './pupil.styles'\nimport injectSheet from 'react-jss'\nimport UserAvatar from 'pobble-components/dist/user-avatar'\n\nconst Pupil = ({ classes, className, avatarUrl, name, displayName }) => (\n <div className={classes.container}>\n <UserAvatar className={classes.avatar} name={name} />\n <div className={classes.desc}>\n <span className={classes.name}>{name}</span>\n <span className={classes.displayName}>{displayName}</span>\n </div>\n </div>\n)\n\nexport default injectSheet(styles)(Pupil)\n","export default ({ COLORS }) => ({\n container: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center'\n },\n desc: {\n display: 'flex',\n flexDirection: 'column'\n },\n avatar: {\n fontSize: '48px !important',\n margin: '0 20px 0 0'\n },\n name: {\n fontSize: '22px',\n lineHeight: '22px',\n color: COLORS.TEXT.MID_GREY.NORMAL\n },\n displayName: {\n fontSize: '18px',\n lineHeight: '18px',\n color: COLORS.TEXT.LIGHT_GREY.NORMAL\n }\n})\n","import { connect } from 'react-redux'\nimport Pupil from './pupil'\nimport { getProfile } from '../../../../../../../stores/profile/profile.selectors'\n\nconst mapStateToProps = state => {\n const profile = getProfile(state)\n return {\n avatarUrl: profile.avatar_url,\n name: `${profile.full_name}`,\n displayName: profile.display_name\n }\n}\n\nexport default connect(mapStateToProps)(Pupil)\n","import React from 'react'\nimport styles from './profile-info-head.styles'\nimport injectSheet from 'react-jss'\nimport classNames from 'classnames'\nimport Pupil from './pupil/pupil.container'\n\nconst ProfileInfoHead = ({ classes, className }) => (\n <div className={classNames(classes.profileInfoHead, className)}>\n <Pupil />\n </div>\n)\n\nexport default injectSheet(styles)(ProfileInfoHead)\n","export default {\n profileInfoHead: {\n height: '140px',\n padding: '22px'\n }\n}\n","import React from 'react'\nimport styles from './row.styles'\nimport injectSheet from 'react-jss'\n\nconst Row = ({ classes, children }) => (\n <div className={classes.row}>\n <div className={classes.holder}>{children}</div>\n </div>\n)\n\nexport default injectSheet(styles)(Row)\n","export default ({ BREAKPOINTS }) => ({\n row: {\n padding: '20px 0',\n borderBottom: '1px solid #eee'\n },\n holder: {\n display: 'flex',\n flexDirection: 'row',\n margin: '0 -10px',\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n margin: '0',\n flexDirection: 'column'\n }\n }\n})\n","import React from 'react'\nimport styles from './cell.styles'\nimport injectSheet from 'react-jss'\nimport classNames from 'classnames'\n\nconst Cell = ({ classes, children, className }) => (\n <div className={classNames(classes.cell, className)}>{children}</div>\n)\n\nexport default injectSheet(styles)(Cell)\n","export default ({ BREAKPOINTS }) => ({\n cell: {\n width: '33.333%',\n padding: '0 10px',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'flex-end',\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n width: '100%',\n margin: '20px 0 0',\n padding: '0',\n '&:first-child': {\n margin: '0'\n }\n }\n }\n})\n","import React from 'react'\nimport styles from './hint-cell.styles'\nimport injectSheet from 'react-jss'\nimport Cell from '../cell/cell'\nimport classNames from 'classnames'\n\nconst HintCell = ({ classes, children, className }) => (\n <Cell className={classNames(classes.hintCell, className)}>\n <span className={classes.hint}>{children}</span>\n </Cell>\n)\n\nexport default injectSheet(styles)(HintCell)\n","export default ({ COLORS, BREAKPOINTS }) => ({\n hintCell: {\n display: 'flex',\n fontSize: '12px',\n lineHeight: '14px',\n color: COLORS.TEXT.LIGHT_GREY.NORMAL\n },\n hint: {\n display: 'inline-flex',\n alignItems: 'center',\n height: '40px',\n '&:before': {\n content: '\"\"',\n flexShrink: '0',\n height: '100%',\n width: '5px',\n backgroundColor: '#ececec',\n margin: '0 10px 0 0',\n borderRadius: '10px'\n },\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n height: 'auto',\n '&:before': {\n display: 'none'\n }\n }\n }\n})\n","import React, { Component, Fragment } from 'react'\nimport styles from './age-groups-select.styles'\nimport injectSheet from 'react-jss'\nimport FormSelect from 'pobble-components/dist/form-elements/form-select'\nimport Bone from 'pobble-components/dist/bone'\n\nconst AgeGroupsOptions = ({ ageGroups, selectOption }) => (\n <Fragment>\n {ageGroups.map(({ id, title }) => (\n <option key={id} value={id}>\n {title}\n </option>\n ))}\n </Fragment>\n)\n\nclass AgeGroupsSelect extends Component {\n componentDidMount() {\n const { fetchAgeGroups, ageGroups } = this.props\n if (fetchAgeGroups && !ageGroups) fetchAgeGroups()\n }\n render() {\n const {\n classes,\n className,\n formSelectProps,\n ageGroups,\n fetching,\n fetchingError,\n selectOption\n } = this.props\n return fetching ? (\n <Bone className={classes.bone} />\n ) : fetchingError ? (\n <div className={classes.fetchingError}>Try reload the page</div>\n ) : (\n <FormSelect className={className} {...formSelectProps}>\n {selectOption && <option value=\"\">{selectOption}</option>}\n {!formSelectProps.value && <option value=\"\">Missing</option>}\n <AgeGroupsOptions ageGroups={ageGroups} />\n </FormSelect>\n )\n }\n}\n\nexport default injectSheet(styles)(AgeGroupsSelect)\n","export default ({ COLORS }) => ({\n bone: {\n height: '40px !important',\n borderRadius: '4px !important',\n width: '100% !important'\n },\n fetchingError: {\n height: '40px',\n borderRadius: '4px',\n color: COLORS.RED.NORMAL,\n backgroundColor: '#FEF7F6',\n border: `1px solid ${COLORS.RED.NORMAL}`,\n padding: '10px 15px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n }\n})\n","import { apiClient } from 'pobble-components/dist/api'\n\nconst apiGetYearGroups = params => apiClient.get('v3/year_groups', { params })\n\nexport { apiGetYearGroups }\n","const getData = (state, selector) => {\n const data = state.YearGroups ? state.YearGroups : state\n return !data ? null : selector(data)\n}\n\nconst getYearGroupsFetchingStatus = (state, id) =>\n getData(state, data => data.fetching)\n\nconst getYearGroups = state => getData(state, data => data.yearGroups)\n\nexport { getYearGroupsFetchingStatus, getYearGroups }\n","import { connect } from 'react-redux'\nimport AgeGroupSelect from './age-groups-select'\nimport { fetchYearGroups } from '../../stores/year-groups/year-groups.actions'\nimport {\n getYearGroupsFetchingStatus,\n getYearGroups\n} from '../../stores/year-groups/year-groups.selectors'\n\nconst mapStateToProps = state => {\n const fetchingStatus = getYearGroupsFetchingStatus(state)\n return {\n fetching: fetchingStatus.pending,\n fetchingError: !fetchingStatus.pending && fetchingStatus.requestError,\n ageGroups: getYearGroups(state)\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n fetchAgeGroups: () => dispatch(fetchYearGroups()).catch(() => null)\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(AgeGroupSelect)\n","import { apiGetYearGroups } from '../../common/api/year-groops'\n\nconst fetchYearGroups = () => ({\n requestPrefix: 'YEAR_GROUPS:FETCHING',\n request: () =>\n apiGetYearGroups({ include: 'year_group.names,year_group.order' })\n})\n\nexport { fetchYearGroups }\n","import React from 'react'\nimport styles from './updating-overlay.styles'\nimport injectSheet from 'react-jss'\nimport classNames from 'classnames'\nimport Spinner from 'pobble-components/dist/spinner'\n\nconst UpdatingOverlay = ({ classes, className }) => (\n <div className={classNames(classes.container, className)}>\n <Spinner />\n </div>\n)\n\nexport default injectSheet(styles)(UpdatingOverlay)\n","export default {\n container: {\n width: '100%',\n height: '100%',\n background: 'rgba(255, 255, 255, 0.5)',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n }\n}\n","import React from 'react'\nimport styles from './group.styles'\nimport injectSheet from 'react-jss'\nimport classNames from 'classnames'\nimport TimesIcon from 'react-icons/lib/fa/times-circle'\nimport { openConfirmationDialog } from 'pobble-components/dist/modal/confirmation-dialog'\n\nconst Group = ({ classes, title, onDelete, className, mis, editable }) => (\n <div className={classNames(classes.group, className)}>\n {title} {mis && <span className={classes.mis}>MIS</span>}\n {editable && (\n <TimesIcon\n onClick={() =>\n openConfirmationDialog({\n bodyText: `Are you sure you want to remove pupil from ${title} ?`,\n confirmText: 'Remove from group',\n action: onDelete\n })\n }\n className={classes.icon}\n />\n )}\n </div>\n)\n\nexport default injectSheet(styles)(Group)\n","export default ({ COLORS }) => ({\n group: {\n height: '40px',\n padding: '12px 15px',\n fontSize: '14px',\n lineHeight: '14px',\n backgroundColor: '#f9f9f9',\n border: '1px solid #ececec',\n borderRadius: '4px',\n color: COLORS.TEXT.MID_GREY.NORMAL,\n position: 'relative',\n display: 'flex'\n },\n icon: {\n position: 'absolute',\n right: '10px',\n top: '12px',\n cursor: 'pointer'\n },\n mis: {\n background: '#c5c5c5',\n display: 'block',\n borderRadius: '4px',\n fontSize: '11px',\n lineHeight: '12px',\n color: '#fff',\n padding: '2px 7px',\n marginLeft: '6px'\n }\n})\n","import { apiClient } from 'pobble-components/dist/api'\n\nexport const apiGetStudent = (id, params) =>\n apiClient.get(`v3/accounts/${id}`, { params })\n\nexport const apiUpdateStudent = (id, data, params) =>\n apiClient.put(`v3/accounts/${id}/update_student`, data, { params })\n\nexport const apiRetireStudent = id =>\n apiClient.delete(`v3/students/${id}/retire`)\n\nexport const apiCreateStudent = (shooldId, data, params) =>\n apiClient.post(`v3/schools/${shooldId}/students`, data, { params })\n\nexport const apiResetStudentPasscode = (id, params) =>\n apiClient.put(`v3/accounts/${id}/reset_student_passcode`, {}, { params })\n\nexport const apiAddStudentToAGroup = (data, params) =>\n apiClient.put('v3/group_students/add', data, { params })\n\nexport const apiRemoveStudentFromGroup = data =>\n apiClient.delete('v3/group_students/remove', { data })\n\nexport const apiParseCsvOfStudents = data => {\n const formData = new FormData()\n Object.keys(data).forEach(key => formData.append(key, data[key]))\n return apiClient.post('v3/students/parse_csv_of_students', formData)\n}\n\nexport const apiIncrementAgeGroup = (id, params) =>\n apiClient.put(`v3/accounts/${id}/increment_year_group`, {}, { params })\n\nexport const apiUploadPermissionSlip = (pupilId, permissionSlip, params) => {\n const formData = new FormData()\n formData.append('permission_slip', permissionSlip)\n return apiClient.post(`/v3/accounts/${pupilId}/permission_slips`, formData, {\n params\n })\n}\n\nexport const apiGetPermissionSlips = (id, params) =>\n apiClient.get(`v3/accounts/${id}/permission_slips`, { params })\n\nexport const apiDeletePermissionSlip = id =>\n apiClient.delete(`/v3/permission_slips/${id}`)\n\nexport const apiAddPermissionToStudent = id =>\n apiClient.put(`/v3/accounts/${id}/add_school_leader_permission`)\n\nexport const apiRemovePermissionFromStudent = id =>\n apiClient.put(`/v3/accounts/${id}/remove_school_leader_permission`)\n\nexport const apiExportStudentsToCSV = ids =>\n apiClient.post(`/v3/students_generate_csv_reports`, { student_ids: ids })\n","import { createSelector } from 'reselect'\n\nconst getData = (state, selector) => {\n const data = state.GroupsStore ? state.GroupsStore : state\n return !data ? null : selector(data)\n}\n\nconst getGroupsFetchingStatus = state => getData(state, data => data.fetching)\n\nconst getGroups = state =>\n getData(\n state,\n data => (data.groups.entities ? data.groups.entities.groups : {})\n )\n\nconst getCategories = state => getData(state, data => data.categories || [])\n\nconst getGroup = (state, id) => getGroups(state)[id] || null\n\nconst getGroupsResult = state =>\n getData(state, data => data.groups.result || [])\n\nconst getGroupsArray = createSelector(\n [getGroups, getGroupsResult],\n (groups, result) => (!groups || !result ? [] : result.map(id => groups[id]))\n)\n\nconst getUpdatableGroupsArray = createSelector([getGroupsArray], groups =>\n groups.filter(group => group.policy.can_manage_students_for_group)\n)\n\nconst getCustomGroupsArray = createSelector([getGroupsArray], groups =>\n groups.filter(group => group.provider_type === 'CUSTOM')\n)\n\nconst getGroupsDeletingStatuses = state => getData(state, data => data.deleting)\n\nconst getGroupDeletingStatus = (state, id) =>\n getGroupsDeletingStatuses(state)[id] || {\n pending: false,\n requestError: false\n }\n\nconst getGroupCreatingStatus = state => getData(state, data => data.creating)\n\nconst getGroupsUpdatingStatuses = state => getData(state, data => data.updating)\n\nconst getGroupUpdatingStatus = (state, id) =>\n getGroupsUpdatingStatuses(state)[id] || {\n pending: false,\n requestError: false\n }\n\nexport {\n getGroups,\n getUpdatableGroupsArray,\n getGroupsResult,\n getGroupsArray,\n getCustomGroupsArray,\n getGroupsFetchingStatus,\n getGroup,\n getGroupDeletingStatus,\n getGroupCreatingStatus,\n getGroupUpdatingStatus,\n getCategories\n}\n","import {\n apiGetStudent,\n apiUpdateStudent,\n apiResetStudentPasscode,\n apiAddStudentToAGroup,\n apiRemoveStudentFromGroup,\n apiAddPermissionToStudent,\n apiRemovePermissionFromStudent\n} from '../../common/api/student-management'\n\nimport { getGroups } from '../groups/groups.selectors'\n\nconst defaultInclude =\n 'account.names,account.avatar,account.student_type.dob,account.student_type.year_group,account.student_type.year_group.names,account.student_type.year_group.order,account.student_type.passcode,account.student_type.groups,account.student_type.group.policy.can_update,account.student_type.group.names,account.student_type.group.mis,account.student_type.parent_types,account.student_type.parent_type.account,account.student_type.parent_type.status,account.student_type.parent_type.account.email_identity.email,account.student_type.policy,account.student_type.parent_type.policy,account.student_type.parent_code,account.student_type.parent_types,account.student_type.parent_type.account,account.student_type.parent_type.account.names'\n\nconst fetchProfile = id => ({\n requestPrefix: 'PUPIL_PROFILE_STORE:FETCHING',\n params: { id },\n request: () =>\n apiGetStudent(id, {\n include: defaultInclude\n })\n})\n\nconst updatePupil = (id, data) => ({\n requestPrefix: 'PUPIL_PROFILE_STORE:UPDATE_PUPIL',\n params: { id },\n request: () =>\n apiUpdateStudent(id, data, {\n include: defaultInclude\n })\n})\n\nconst resetPasscode = id => ({\n requestPrefix: 'PUPIL_PROFILE_STORE:RESET_PASSCODE',\n params: { id },\n request: () =>\n apiResetStudentPasscode(id, {\n include: defaultInclude\n })\n})\n\nconst addPupilToGroup = (id, data) => (dispatch, getState) =>\n dispatch({\n requestPrefix: 'PUPIL_PROFILE_STORE:ADD_PUPIL_TO_GROUP',\n params: { id, groups: getGroups(getState()) },\n request: () =>\n apiAddStudentToAGroup(data, {\n include: 'group.policy,group.mis,group.names'\n })\n })\n\nconst removePupilFromGroup = data => ({\n requestPrefix: 'PUPIL_PROFILE_STORE:REMOVE_PUPIL_FROM_GROUP',\n params: { id: data.student_account_id, groupId: data.group_id },\n request: () => apiRemoveStudentFromGroup(data)\n})\n\nconst refetchPolicy = id => ({\n requestPrefix: 'PUPIL_PROFILE_STORE:REFETCH_POLICY',\n params: { id },\n request: () =>\n apiGetStudent(id, {\n include: 'account.student_type.policy'\n })\n})\n\nconst addPermissionProfile = id => ({\n requestPrefix: 'PUPIL_PROFILE_STORE:ADD_PERMISSION',\n params: { id },\n request: () => apiAddPermissionToStudent(id)\n})\n\nconst removePermissionProfile = id => ({\n requestPrefix: 'PUPIL_PROFILE_STORE:REMOVE_PERMISSION',\n params: { id },\n request: () => apiRemovePermissionFromStudent(id)\n})\n\nexport {\n fetchProfile,\n updatePupil,\n resetPasscode,\n addPupilToGroup,\n removePupilFromGroup,\n refetchPolicy,\n addPermissionProfile,\n removePermissionProfile\n}\n","import { connect } from 'react-redux'\nimport Group from './group'\nimport { getPupilGroup } from '../../../../../../../../stores/profile/profile.selectors'\nimport { removePupilFromGroup } from '../../../../../../../../stores/profile/profile.actions'\nimport { withRouter } from 'react-router-dom'\n\nconst mapStateToProps = (state, { id }) => {\n const group = getPupilGroup(state, id)\n return {\n mis: group.mis_group,\n title: group.title,\n editable: group.policy.can_manage_students_for_group\n }\n}\n\nconst mapDispatchToProps = (dispatch, { id, match }) => ({\n onDelete: () =>\n dispatch(\n removePupilFromGroup({\n student_account_id: match.params.id,\n group_id: id\n })\n )\n})\n\nexport default withRouter(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(Group)\n)\n","import React from 'react'\nimport styles from './groups.styles'\nimport injectSheet from 'react-jss'\nimport Group from './group/group.container'\n\nconst Groups = ({ classes, groups, onRemove, pupilId }) => (\n <div>\n {!groups.length && (\n <div className={classes.noGroups}>\n This pupil is not a member of any group yet\n </div>\n )}\n {groups.map(id => (\n <Group pupilId={pupilId} id={id} key={id} className={classes.group} />\n ))}\n </div>\n)\n\nexport default injectSheet(styles)(Groups)\n","export default ({ COLORS }) => ({\n group: {\n margin: '15px 0 0',\n '&:first-child': {\n margin: '0'\n }\n },\n noGroups: {\n color: COLORS.TEXT.MID_GREY.NORMAL,\n height: '40px',\n display: 'flex',\n alignItems: 'center'\n }\n})\n","import { connect } from 'react-redux'\nimport Groups from './groups'\nimport { removePupilFromGroup } from '../../../../../../../stores/profile/profile.actions'\nimport { getPupilGroupIds } from '../../../../../../../stores/profile/profile.selectors'\n\nconst mapStateToProps = state => ({\n groups: getPupilGroupIds(state)\n})\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...stateProps,\n ...ownProps,\n onRemove: groupId =>\n dispatch(\n removePupilFromGroup({\n student_account_id: ownProps.pupilId,\n group_id: groupId\n })\n )\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n)(Groups)\n","import React from 'react'\nimport styles from './pupil-info-form.styles'\nimport injectSheet from 'react-jss'\nimport Row from './row/row'\nimport Cell from './cell/cell'\nimport HintCell from './hint-cell/hint-cell'\nimport FormLabel from 'pobble-components/dist/form-elements/form-label'\nimport FormInput from 'pobble-components/dist/form-elements/form-input'\nimport CharactersCount from 'pobble-components/dist/form-elements/characters-count'\nimport AgeGroupsSelect from '../../../../../age-groups-select/age-groups-select.container'\nimport Button from 'pobble-components/dist/button'\nimport { Formik } from 'formik'\nimport UpdatingOverlay from './updating-overlay/updating-overlay'\nimport * as Yup from 'yup'\nimport Groups from './groups/groups.container'\nimport { validateDisplayName } from 'pobble-components/dist/validators'\n\nconst DISPLAY_NAME_CHARACTERS_LIMIT = 20\n\nconst PupilInfoForm = ({\n id,\n classes,\n firstName,\n lastName,\n displayName,\n bdMonth,\n bdDay,\n ageGroup,\n updatePupil,\n showUpdatingOverlay,\n passCode,\n parentCode,\n parents,\n onResetPasscode,\n onAddToGroup,\n editable,\n permission,\n editableProps\n}) => (\n <Formik\n enableReinitialize={true}\n onSubmit={values => updatePupil(values)}\n initialValues={{\n firstName: firstName,\n lastName: lastName,\n displayName: displayName || '',\n bdMonth: bdMonth,\n bdDay: bdDay,\n ageGroup: ageGroup\n }}\n validationSchema={Yup.object().shape({\n firstName: Yup.string().required('First name is required'),\n lastName: Yup.string().required('Last name is required'),\n displayName: validateDisplayName().required('Display name is required')\n })}>\n {props => {\n const {\n initialValues,\n values,\n handleChange,\n handleSubmit,\n handleBlur,\n errors,\n isValid\n } = props\n return (\n <form onSubmit={handleSubmit} className={classes.container}>\n {showUpdatingOverlay && (\n <UpdatingOverlay className={classes.updatingOverlay} />\n )}\n <div className={classes.submitHolder}>\n <span>\n {firstName}\n 's info\n </span>\n <Button\n disabled={!isValid || values === initialValues}\n type=\"submit\"\n tall\n secondary>\n Save changes\n </Button>\n </div>\n <Row>\n <Cell>\n <FormLabel htmlFor=\"firstName\">First Name</FormLabel>\n <FormInput\n disabled={!editableProps.first_name}\n validationError={errors.firstName}\n placeholder=\"e.g. William\"\n id=\"firstName\"\n name=\"firstName\"\n onBlur={handleBlur}\n onChange={handleChange}\n value={values.firstName}\n />\n </Cell>\n <Cell>\n <FormLabel htmlFor=\"lastName\">Last Name</FormLabel>\n <FormInput\n disabled={!editableProps.last_name}\n validationError={errors.lastName}\n placeholder=\"e.g. Shakespeare\"\n id=\"lastName\"\n name=\"lastName\"\n onBlur={handleBlur}\n onChange={handleChange}\n value={values.lastName}\n />\n </Cell>\n <HintCell>\n Only visible to the teachers and administrators of your school,\n and the pupil’s parents\n </HintCell>\n </Row>\n <Row>\n <Cell>\n <FormLabel htmlFor=\"displayName\" spaceBetween>\n Display name\n <CharactersCount\n value={values.displayName || ''}\n max={DISPLAY_NAME_CHARACTERS_LIMIT}\n />\n </FormLabel>\n <FormInput\n disabled={!editableProps.display_name}\n name=\"displayName\"\n id=\"displayName\"\n validationError={errors.displayName}\n placeholder=\"e.g. Will\"\n maxLength={DISPLAY_NAME_CHARACTERS_LIMIT}\n onBlur={handleBlur}\n onChange={handleChange}\n value={values.displayName}\n />\n </Cell>\n <Cell />\n <HintCell>\n The pupil chooses a public display name. Please avoid personally\n identifiable information, like last names.{' '}\n </HintCell>\n </Row>\n <Row>\n <Cell>\n <FormLabel htmlFor=\"pupil-profile-info-age-groups\">\n Age group\n </FormLabel>\n <AgeGroupsSelect\n formSelectProps={{\n name: 'ageGroup',\n onBlur: handleBlur,\n onChange: handleChange,\n value: values.ageGroup,\n disabled: !editable\n }}\n />\n </Cell>\n <Cell />\n <HintCell>\n The age group is used to tag work, and is public.\n </HintCell>\n </Row>\n <Row>\n <Cell>\n <FormLabel>Groups:</FormLabel>\n <Groups />\n </Cell>\n <Cell className={classes.groupAddCell}>\n <Button\n action={onAddToGroup}\n className={classes.groupAddButton}\n tall\n secondary>\n Add to a group\n </Button>\n </Cell>\n <HintCell className={classes.groupAddHintCell}>\n Groups can be used to segment and easily find students.\n <br />\n Public groups are visible on your school page.\n </HintCell>\n </Row>\n <Row>\n <Cell>\n <FormLabel>Pupil passcode:</FormLabel>\n <FormInput disabled value={passCode} />\n </Cell>\n <Cell>\n {editable && (\n <Button\n action={onResetPasscode}\n tall\n type=\"button\"\n secondary\n className={classes.resetPass}>\n Reset passcode\n </Button>\n )}\n </Cell>\n <HintCell>\n Provide to child so they can login to their Pobble account\n </HintCell>\n </Row>\n <Row>\n <Cell>\n <FormLabel>Parent code:</FormLabel>\n <FormInput disabled value={parentCode || '-'} />\n </Cell>\n <Cell>\n <FormLabel>Connected parents:</FormLabel>\n <FormInput\n disabled\n value={\n parents &&\n parents.map(parent => parent.account.full_name + ' ' || '-')\n }\n />\n </Cell>\n <HintCell>\n Provide this unique Parent code to this child’s parent / carer so\n they can connect with their child’s Pobble account.\n </HintCell>\n </Row>\n </form>\n )\n }}\n </Formik>\n)\n\nexport default injectSheet(styles)(PupilInfoForm)\n","export default ({ FONT_SIZES }) => ({\n container: {\n position: 'relative'\n },\n updatingOverlay: {\n position: 'absolute',\n top: '0',\n left: '0',\n zIndex: '100'\n },\n dateCell: {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'flex-end'\n },\n resetPass: {\n display: 'block'\n },\n daySelect: {\n width: '100%'\n },\n submitHolder: {\n display: 'flex',\n justifyContent: 'space-between',\n marginTop: '20px',\n alignItems: 'center',\n ...FONT_SIZES.HEADING_LARGE.STYLE\n },\n groupAddHintCell: {\n justifyContent: 'flex-start',\n paddingTop: '26px'\n },\n groupAddCell: {\n justifyContent: 'flex-start',\n paddingTop: '26px'\n },\n groupAddButton: {\n textAlign: 'center',\n display: 'block'\n }\n})\n","const openAddToGroupDialog = ids => ({\n type: 'ADD_TO_GROUP_DIALOG:OPEN',\n ids\n})\nconst closeAddToGroupDialog = () => ({\n type: 'ADD_TO_GROUP_DIALOG:CLOSE'\n})\n\nexport { openAddToGroupDialog, closeAddToGroupDialog }\n","import { connect } from 'react-redux'\nimport PupilInfoForm from './pupil-info-form'\nimport {\n getProfile,\n getPupilUpdatingStatus,\n getPupilPasscodeResettingStatus,\n getPupilRemovingFromGroupStatus,\n getPupilAddingToGroupStatus\n} from '../../../../../../stores/profile/profile.selectors'\nimport {\n updatePupil,\n resetPasscode\n} from '../../../../../../stores/profile/profile.actions'\nimport { withRouter } from 'react-router'\nimport { openAddToGroupDialog } from '../../../../../add-to-group/add-to-group.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\nimport { withMe } from 'pobble-components/dist/pobble-user'\n\nconst mapStateToProps = (state, { match, me }) => {\n const pupil = getProfile(state)\n const updatingStatus = getPupilUpdatingStatus(state, match.params.id)\n const removingFromFormStatus = getPupilRemovingFromGroupStatus(\n state,\n match.params.id\n )\n const resettingPasscodeStatus = getPupilPasscodeResettingStatus(\n state,\n match.params.id\n )\n const addingToGroup = getPupilAddingToGroupStatus(state, match.params.id)\n return {\n editableProps: pupil.student_type.policy.editable_properties,\n editable: me.account.policy.can_manage_students,\n id: pupil.id,\n firstName: pupil.first_name,\n lastName: pupil.last_name,\n displayName: pupil.display_name,\n passCode: pupil.student_type.passcode,\n parentCode: pupil.student_type.parent_code,\n ageGroup: pupil.student_type.year_group && pupil.student_type.year_group.id,\n permission: pupil.student_type.policy.can_publish,\n showUpdatingOverlay:\n updatingStatus.pending ||\n resettingPasscodeStatus.pending ||\n removingFromFormStatus.pending ||\n addingToGroup.pending,\n parents: pupil.student_type.parent_types\n }\n}\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...ownProps,\n ...stateProps,\n updatePupil: data =>\n dispatch(\n updatePupil(stateProps.id, {\n first_name: data.firstName,\n last_name: data.lastName,\n display_name: data.displayName,\n year_group_id: data.ageGroup\n })\n ).catch(errorHandler),\n onResetPasscode: () =>\n dispatch(resetPasscode(stateProps.id)).catch(errorHandler),\n onAddToGroup: () => dispatch(openAddToGroupDialog([stateProps.id]))\n})\n\nexport default withRouter(\n withMe(\n connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n )(PupilInfoForm)\n )\n)\n","import React, { PureComponent, Fragment } from 'react'\nimport styles from './groups-select.styles'\nimport injectSheet from 'react-jss'\nimport FormSelect from 'pobble-components/dist/form-elements/form-select'\nimport Bone from 'pobble-components/dist/bone'\n\nconst GroupsOptions = ({ children }) => (\n <Fragment>\n {children.map(({ id, title }) => (\n <option key={id} value={id}>\n {title}\n </option>\n ))}\n </Fragment>\n)\n\nclass GroupsSelect extends PureComponent {\n componentDidMount() {\n this.props.onMount && this.props.onMount()\n }\n // TO DO - make memorizeable\n applyFilters(groups) {\n const { except, only } = this.props\n return except\n ? groups.filter(group => !except[group.id])\n : only\n ? groups.filter(group => only[group.id])\n : groups\n }\n render() {\n const {\n classes,\n className,\n formSelectProps,\n fetching,\n fetchingError,\n selectOption,\n groupsArray,\n whenNoGroupsAvailable\n } = this.props\n if (fetching) return <Bone className={classes.bone} />\n if (fetchingError)\n return <div className={classes.fetchingError}>Try reload the page</div>\n const options = this.applyFilters(groupsArray)\n if (!options.length && whenNoGroupsAvailable) return whenNoGroupsAvailable\n return (\n <FormSelect className={className} {...formSelectProps}>\n {selectOption && <option value=\"\">{selectOption}</option>}\n <GroupsOptions>{options}</GroupsOptions>\n </FormSelect>\n )\n }\n}\n\nexport default injectSheet(styles)(GroupsSelect)\n","export default ({ COLORS }) => ({\n bone: {\n height: '40px !important',\n borderRadius: '4px !important',\n width: '100% !important'\n },\n fetchingError: {\n height: '40px',\n borderRadius: '4px',\n color: COLORS.RED.NORMAL,\n backgroundColor: '#FEF7F6',\n border: `1px solid ${COLORS.RED.NORMAL}`,\n padding: '10px 15px',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis'\n }\n})\n","import { apiClient } from 'pobble-components/dist/api'\n\nconst apiGetSchoolData = (id, params) =>\n apiClient.get(`v3/schools/${id}`, { params: params })\n\nconst apiCreateGroup = (schoolId, data, params) =>\n apiClient.post(`/v3/schools/${schoolId}/groups`, data, { params })\n\nconst apiDeleteGroup = id => apiClient.delete('v3/groups', { data: { id } })\n\nconst apiUpdateGroup = (data, params) =>\n apiClient.put('v3/groups', data, { params })\n\nconst apiGetSchoolConflicts = schoolId =>\n apiClient.get(\n `/v3/schools/${schoolId}/pull_provider_operations/student_conflict_resolution`\n )\n\nconst apiResolveConflict = (schoolId, data) =>\n apiClient.post(\n `/v3/schools/${schoolId}/pull_provider_operations/student_conflict_resolution`,\n data\n )\n\nexport {\n apiGetSchoolData,\n apiCreateGroup,\n apiDeleteGroup,\n apiUpdateGroup,\n apiGetSchoolConflicts,\n apiResolveConflict\n}\n","import {\n apiGetSchoolData,\n apiCreateGroup,\n apiDeleteGroup,\n apiUpdateGroup\n} from '../../common/api/school'\n\nlet id = 0\n\nconst fetchGroups = schoolId => ({\n requestPrefix: 'GROUPS_STORE:FETCHING',\n request: () =>\n apiGetSchoolData(schoolId, {\n include:\n 'school.groups,school.group.names,school.group.mis,school.group.policy.editable_properties,school,school.group.visibility,school.group.counters,school.group.category,school.group_categories'\n })\n})\n\nconst createGroup = (schoolId, data) => ({\n requestPrefix: 'GROUPS_STORE:CREATE',\n params: { ...data, id: id++ },\n request: () =>\n apiCreateGroup(schoolId, data, {\n include:\n 'group.names,group.mis,group.visibility,group.stats,group.policy.editable_properties'\n })\n})\n\nconst deleteGroup = id => ({\n requestPrefix: 'GROUPS_STORE:DELETE',\n params: { id },\n request: () => apiDeleteGroup(id)\n})\n\nconst updateGroup = (id, data) => ({\n requestPrefix: 'GROUPS_STORE:UPDATE',\n params: { id },\n request: () =>\n apiUpdateGroup(\n { id, ...data },\n {\n include:\n 'group.names,group.mis,group.visibility,group.stats,group.policy.editable_properties'\n }\n )\n})\n\nexport { fetchGroups, createGroup, deleteGroup, updateGroup }\n","import { createSelector } from 'reselect'\n\nconst getTeacherType = me => me.account.teacher_type\nconst getSchool = createSelector([getTeacherType], teacher => teacher.school)\nconst getSchoolId = createSelector([getSchool], school => school.id)\n\nexport { getSchool, getSchoolId }\n","import { connect } from 'react-redux'\nimport AgeGroupSelect from './groups-select'\nimport { fetchGroups } from '../../stores/groups/groups.actions'\nimport { withMe } from 'pobble-components/dist/pobble-user'\nimport {\n getGroupsFetchingStatus,\n getGroups,\n getUpdatableGroupsArray\n} from '../../stores/groups/groups.selectors'\nimport { getSchoolId } from '../../stores/me/me.selectors'\n\nconst mapStateToProps = (state, { me }) => {\n const fetchingStatus = getGroupsFetchingStatus(state)\n return {\n schoolId: getSchoolId(me),\n fetching: fetchingStatus.pending,\n fetchingError: !fetchingStatus.pending && fetchingStatus.requestError,\n groups: getGroups(state),\n groupsArray: getUpdatableGroupsArray(state)\n }\n}\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...ownProps,\n ...stateProps,\n onMount: () => {\n if (!Object.keys(stateProps.groups).length)\n dispatch(fetchGroups(stateProps.schoolId))\n }\n})\n\nexport default withMe(\n connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n )(AgeGroupSelect)\n)\n","import React from 'react'\nimport styles from './add-to-group.styles'\nimport injectSheet from 'react-jss'\nimport {\n Modal,\n ModalHeader,\n ModalContent,\n ModalFooter\n} from 'pobble-components/dist/modal'\nimport Button from 'pobble-components/dist/button'\nimport GroupsSelect from '../groups-select/groups-select.container'\nimport { Formik } from 'formik'\n\nconst AddToGroup = ({\n classes,\n opened,\n requestClose = () => null,\n onSubmit,\n title,\n except,\n allGroups\n}) => (\n <Modal isOpen={opened}>\n <ModalHeader>{title}</ModalHeader>\n <Formik\n onSubmit={onSubmit}\n initialValues={{\n group: ''\n }}>\n {props => {\n const {\n values,\n handleChange,\n handleSubmit,\n handleBlur,\n isValid\n } = props\n return (\n <form onSubmit={handleSubmit}>\n <ModalContent legacy className={classes.modalContent}>\n {!allGroups && (\n <GroupsSelect\n except={except}\n selectOption=\"Select a group\"\n whenNoGroupsAvailable={\n <span>You can't add this pupil to any more groups</span>\n }\n formSelectProps={{\n value: values.group,\n name: 'group',\n onChange: handleChange,\n onBlur: handleBlur\n }}\n />\n )}\n </ModalContent>\n <ModalFooter className={classes.footer}>\n <Button\n simple\n tall\n className={classes.cancel}\n action={requestClose}>\n Cancel\n </Button>\n <Button disabled={!isValid} tall type=\"submit\">\n Add to a group\n </Button>\n </ModalFooter>\n </form>\n )\n }}\n </Formik>\n </Modal>\n)\n\nexport default injectSheet(styles)(AddToGroup)\n","export default {\n footer: {\n display: 'flex',\n justifyContent: 'flex-end'\n },\n cancel: {\n margin: '0 10px 0 0'\n },\n modalContent: {\n minWidth: '400px !important'\n }\n}\n","const getData = (state, selector) => {\n const data = state.Shared.AddToGroupDialog\n ? state.Shared.AddToGroupDialog\n : state\n return !data ? null : selector(data)\n}\n\nconst isOpen = state => getData(state, data => data.opened)\nconst getPupilsIds = state => getData(state, data => data.ids)\n\nexport { isOpen, getPupilsIds }\n","import { connect } from 'react-redux'\nimport AddToGroup from './add-to-group'\nimport { isOpen, getPupilsIds } from './add-to-group.selectors'\nimport { closeAddToGroupDialog } from './add-to-group.actions'\n\nconst getExcept = idsArray => {\n const result = {}\n idsArray.forEach(id => (result[id] = true))\n return result\n}\n\nconst mapStateToProps = (state, { getGroups }) => {\n const ids = getPupilsIds(state)\n const except = ids.length === 1 ? getExcept(getGroups(state, ids[0])) : null\n return {\n title:\n ids.length === 1\n ? 'Add pupil to a group'\n : `Add ${ids.length} pupils to a group`,\n ids: ids,\n opened: isOpen(state),\n except\n }\n}\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...stateProps,\n ...ownProps,\n requestClose: () => dispatch(closeAddToGroupDialog()),\n onSubmit: ({ group }) => {\n dispatch(closeAddToGroupDialog())\n stateProps.ids.forEach(id => ownProps.action && ownProps.action(id, group))\n }\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n)(AddToGroup)\n","import { connect } from 'react-redux'\nimport AddToGroup from '../../../../add-to-group/add-to-group.container'\nimport { addPupilToGroup } from '../../../../../stores/profile/profile.actions'\nimport { getPupilGroupIds } from '../../../../../stores/profile/profile.selectors'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapDispatchToProps = dispatch => ({\n getGroups: (state, id) => getPupilGroupIds(state, id),\n action: (id, groupId) =>\n dispatch(\n addPupilToGroup(id, {\n student_account_id: id,\n group_id: groupId\n })\n ).catch(errorHandler)\n})\n\nexport default connect(\n null,\n mapDispatchToProps\n)(AddToGroup)\n","import React from 'react'\nimport styles from './profile-info.styles'\nimport injectSheet from 'react-jss'\nimport ProfileInfoHead from './profile-info-head/profile-info-head'\nimport PupilInfoForm from './pupil-info-form/pupil-info-form.container'\nimport AddToGroupDialog from '../../dialogs/add-to-group/add-to-group.container'\n\nconst ProfileInfo = ({ classes, style }) => (\n <div style={style}>\n <ProfileInfoHead className={classes.profileInfoHead} />\n <PupilInfoForm />\n <AddToGroupDialog />\n </div>\n)\n\nexport default injectSheet(styles)(ProfileInfo)\n","export default {\n profileInfoHead: {\n borderBottom: '1px solid #eee',\n margin: '-22px -22px 0'\n }\n}\n","const styles = ({ BREAKPOINTS }) => ({\n container: {\n maxWidth: '1320px',\n padding: '0 20px',\n marginLeft: 'auto',\n marginRight: 'auto',\n [`@media (max-width: ${BREAKPOINTS.XL})`]: {\n maxWidth: '1140px'\n },\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n padding: '0'\n }\n }\n})\n\nexport default styles\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './content-holder.styles'\nimport classNames from 'classnames'\n\nconst ContentHolder = ({ classes, children, className }) => (\n <div className={classNames(classes.container, className)}>{children}</div>\n)\n\nexport default injectSheet(styles)(ContentHolder)\n","const styles = {\n container: {\n display: 'flex',\n width: '100%',\n flexDirection: 'column'\n }\n}\n\nexport default styles\n","import React from 'react'\nimport styles from './loading-screen.styles'\nimport injectSheet from 'react-jss'\nimport Bone from 'pobble-components/dist/bone'\n\nconst Row = injectSheet(({ BREAKPOINTS }) => ({\n row: {\n padding: '20px 0',\n borderBottom: '1px solid #eee',\n display: 'grid',\n gridTemplateColumns: '1fr 1fr 1fr',\n columnGap: '20px',\n alignItems: 'end',\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n display: 'block',\n padding: '20px 0'\n }\n }\n}))(({ classes, children }) => <div className={classes.row}>{children}</div>)\n\nconst InputCell = injectSheet(({ BREAKPOINTS }) => ({\n container: {\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n margin: '20px 0 0',\n '&:first-child': {\n margin: '0'\n }\n }\n },\n label: {\n height: '16px !important',\n marginBottom: '6px'\n },\n input: {\n display: 'block !important',\n width: '100% !important',\n borderRadius: '4px !important',\n height: '40px !important'\n }\n}))(({ labelWidth, classes }) => (\n <div className={classes.container}>\n <Bone className={classes.label} style={{ width: labelWidth }} />\n <Bone className={classes.input} />\n </div>\n))\n\nconst HintCell = injectSheet(({ BREAKPOINTS }) => ({\n container: {\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n margin: '20px 0 0'\n }\n }\n}))(({ fLineWidth, sLineWidth, classes }) => (\n <div\n className={classes.container}\n style={{ height: '40px', display: 'flex' }}>\n <span\n style={{\n width: '5px',\n height: '40px',\n marginRight: '10px',\n borderRadius: '10px',\n backgroundColor: '#ececec'\n }}\n />\n <div\n style={{\n flex: '1',\n display: 'flex',\n flexDirection: 'column',\n justifyContent: 'center'\n }}>\n <Bone style={{ height: '8px', width: fLineWidth, marginBottom: '4px' }} />\n <Bone style={{ height: '8px', width: sLineWidth }} />\n </div>\n </div>\n))\n\nconst LoadingScreen = ({ classes }) => (\n <div className={classes.container}>\n <div\n style={{\n height: '140px',\n margin: '-22px -22px 0',\n borderBottom: '1px solid #eee',\n display: 'flex',\n alignItems: 'center',\n padding: '22px'\n }}>\n <Bone\n style={{\n width: '96px',\n height: '96px',\n borderRadius: '96px',\n marginRight: '20px'\n }}\n />\n <div style={{ display: 'flex', flexDirection: 'column' }}>\n <Bone style={{ width: '160px', height: '16px', marginBottom: '8px' }} />\n <Bone style={{ width: '80px', height: '12px' }} />\n </div>\n </div>\n <div\n style={{\n marginTop: '20px',\n display: 'flex',\n justifyContent: 'space-between'\n }}>\n <Bone style={{ width: '150px', height: '25px' }} />\n <Bone style={{ width: '120px', height: '40px', borderRadius: '4px' }} />\n </div>\n <Row>\n <InputCell labelWidth=\"80px\" />\n <InputCell labelWidth=\"80px\" />\n <HintCell fLineWidth=\"100%\" sLineWidth=\"50%\" />\n </Row>\n <Row>\n <InputCell labelWidth=\"100px\" />\n <div />\n <HintCell fLineWidth=\"100%\" sLineWidth=\"80%\" />\n </Row>\n <Row>\n <InputCell labelWidth=\"70px\" />\n <InputCell labelWidth=\"0\" />\n <HintCell fLineWidth=\"100%\" sLineWidth=\"10%\" />\n </Row>\n <Row>\n <InputCell labelWidth=\"75px\" />\n <InputCell labelWidth=\"0\" />\n <HintCell fLineWidth=\"100%\" sLineWidth=\"0\" />\n </Row>\n <Row>\n <InputCell labelWidth=\"75px\" />\n <div />\n <HintCell fLineWidth=\"80%\" sLineWidth=\"0\" />\n </Row>\n <Row>\n <InputCell labelWidth=\"60px\" />\n <InputCell labelWidth=\"0\" />\n <HintCell fLineWidth=\"100%\" sLineWidth=\"80%\" />\n </Row>\n </div>\n)\n\nexport default injectSheet(styles)(LoadingScreen)\n","import React, { useContext } from 'react'\nimport styles from './profile-permission-head.styles'\nimport injectSheet from 'react-jss'\nimport CircleStatus from 'pobble-components/dist/circle-status'\nimport Button from 'pobble-components/dist/button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faFileCheck } from '@fortawesome/pro-solid-svg-icons/faFileCheck'\nimport { faFileTimes } from '@fortawesome/pro-solid-svg-icons/faFileTimes'\nimport { AppContext } from '../../../../../app/app'\n\nconst ProfilePermissionHead = ({\n classes,\n pupilName,\n permission,\n canUpdatePermission,\n addPermission,\n removePermission,\n pending\n}) => {\n const { permissionWarning } = useContext(AppContext)\n\n return (\n <div className={classes.container}>\n <p className={classes.title}>Permission to Pobble</p>\n <div className={classes.holder}>\n <CircleStatus className={classes.icon} status={permission} />\n {permission && (\n <span>\n {pupilName} has permission to publish and comment on Pobble\n </span>\n )}\n {!permission && (\n <span>\n {pupilName} doesn't have permission to publish and comment on Pobble\n </span>\n )}\n </div>\n {canUpdatePermission && (\n <div className={classes.manualUpdate}>\n {!permission && (\n <Button\n pending={pending}\n action={() => permissionWarning({ action: addPermission })}\n icon={<FontAwesomeIcon icon={faFileCheck} />}\n tall\n secondary>\n Add permission\n </Button>\n )}\n {permission && (\n <Button\n pending={pending}\n action={() => permissionWarning({ action: removePermission })}\n icon={<FontAwesomeIcon icon={faFileTimes} />}\n tall\n secondary>\n Remove permission\n </Button>\n )}\n </div>\n )}\n </div>\n )\n}\n\nexport default injectSheet(styles)(ProfilePermissionHead)\n","export default ({ COLORS, FONT_SIZES }) => ({\n container: {\n margin: '-22px -22px 0',\n padding: '22px',\n borderBottom: '1px solid #eee'\n },\n title: {\n margin: '0 0 15px',\n color: COLORS.TEXT.MID_GREY.NORMAL,\n ...FONT_SIZES.HEADING_BIG.STYLE\n },\n icon: {\n marginRight: '10px',\n flexShrink: '0'\n },\n holder: {\n display: 'flex',\n alignItems: 'center'\n },\n manualUpdate: {\n marginTop: '20px'\n }\n})\n","import { connect } from 'react-redux'\nimport ProfilePermissionHead from './profile-permission-head'\nimport { withRouter } from 'react-router'\nimport {\n getProfile,\n getState\n} from '../../../../../../stores/profile/profile.selectors'\nimport { withMe } from 'pobble-components/dist/pobble-user'\nimport {\n addPermissionProfile,\n removePermissionProfile\n} from '../../../../../../stores/profile/profile.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapStateToProps = (state, { match, me }) => {\n const currentState = getState(state)\n const profile = getProfile(state)\n return {\n pending:\n currentState.addingPermission.pending ||\n currentState.removingPermission.pending,\n pupilName: profile.full_name,\n permission: profile.student_type.policy.can_publish,\n canUpdatePermission: me.account.policy.can_update_school_leader_permissions\n }\n}\n\nconst mapDispatchToProps = (dispatch, { match }) => {\n return {\n addPermission: () =>\n dispatch(addPermissionProfile(match.params.id)).catch(errorHandler),\n removePermission: () =>\n dispatch(removePermissionProfile(match.params.id)).catch(errorHandler)\n }\n}\n\nexport default withMe(\n withRouter(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(ProfilePermissionHead)\n )\n)\n","import React from 'react'\nimport styles from './profile-permission.styles'\nimport injectSheet from 'react-jss'\nimport ProfilePermissionHead from './profile-permission-head/profile-permission-head.container'\n\nconst ProfilePermission = ({ classes }) => {\n return (\n <div className={classes.container}>\n <ProfilePermissionHead />\n </div>\n )\n}\n\nexport default injectSheet(styles)(ProfilePermission)\n","export default {\n parents: {\n margin: '0 -22px 20px',\n padding: '22px 22px 30px',\n borderBottom: '1px solid #eee'\n },\n documents: {\n margin: '0 -22px',\n padding: '22px 22px 30px'\n }\n}\n","import React, { Component } from 'react'\nimport styles from './profile.styles'\nimport injectSheet from 'react-jss'\nimport ProfileInfo from './profile-info/profile-info'\nimport Paper from 'pobble-components/dist/paper'\nimport ContentHolder from '../../../content-holder/content-holder'\nimport LoadingScreen from './loading-screen/loading-screen'\nimport Permission from './profile-permission/profile-permission'\n\nclass Profile extends Component {\n componentDidMount() {\n this.props.onMount()\n }\n render() {\n const { classes, showLoadingScreen, showProfile } = this.props\n return (\n <div className={classes.container}>\n <ContentHolder className={classes.content}>\n <Paper>\n {showLoadingScreen && <LoadingScreen />}\n {showProfile && <ProfileInfo />}\n </Paper>\n <Paper>{showProfile && <Permission />}</Paper>\n </ContentHolder>\n </div>\n )\n }\n}\n\nexport default injectSheet(styles)(Profile)\n","import { connect } from 'react-redux'\nimport { getPupilFetchingStatus } from '../../../../stores/profile/profile.selectors'\nimport Profile from './profile'\nimport { withRouter } from 'react-router'\nimport { fetchProfile } from '../../../../stores/profile/profile.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapStateToProps = (state, { match }) => {\n const { pending, requestError } =\n getPupilFetchingStatus(state, match.params.id) || {}\n return {\n showLoadingScreen: pending,\n showProfile: !pending && !requestError\n }\n}\n\nconst mapDispatchToProps = (dispatch, { match }) => ({\n onMount: () => dispatch(fetchProfile(match.params.id)).catch(errorHandler)\n})\n\nexport default withRouter(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(Profile)\n)\n","import React, { Fragment } from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './context-menu.styles'\nimport DropMenu from 'pobble-components/dist/drop-menu'\nimport MoreButton from 'pobble-components/dist/more-button'\nimport { openConfirmationDialog } from 'pobble-components/dist/modal/confirmation-dialog'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faGlobe } from '@fortawesome/pro-regular-svg-icons/faGlobe'\nimport { faTrashAlt } from '@fortawesome/pro-regular-svg-icons/faTrashAlt'\nimport { faTimesCircle } from '@fortawesome/pro-regular-svg-icons/faTimesCircle'\n\nconst ContextMenu = ({\n classes,\n onDelete,\n onPublish,\n onUnpublish,\n status,\n canPublish\n}) => (\n <DropMenu\n button={({ ref, togglePopover }) => (\n <MoreButton forwardedRef={ref} onClick={togglePopover} />\n )}>\n {({ Menu, MenuItem, IconHolder, Separator, closePopover }) => (\n <Menu>\n <Fragment>\n {canPublish && (\n <Fragment>\n {status === 'unpublished' && (\n <MenuItem\n onClick={() => {\n openConfirmationDialog({\n bodyText: `Are you sure you want to publish this work to the world?`,\n confirmText: `Publish`,\n action: () => {\n onPublish()\n }\n })\n }}>\n <IconHolder>\n <FontAwesomeIcon icon={faGlobe} />\n </IconHolder>\n Publish\n </MenuItem>\n )}\n {status === 'published' && (\n <MenuItem\n onClick={() => {\n openConfirmationDialog({\n theme: 'danger',\n bodyText: `Are you sure you want to unpublish this work?`,\n confirmText: `Unpublish`,\n action: onUnpublish\n })\n }}>\n <IconHolder>\n <FontAwesomeIcon icon={faTimesCircle} />\n </IconHolder>\n Unpublish\n </MenuItem>\n )}\n </Fragment>\n )}\n\n <MenuItem\n className={classes.delete}\n onClick={() => {\n openConfirmationDialog({\n theme: 'danger',\n bodyText: `Are you sure you want to delete this work?`,\n confirmText: `Delete work`,\n action: onDelete\n })\n closePopover()\n }}>\n <IconHolder>\n <FontAwesomeIcon icon={faTrashAlt} />\n </IconHolder>\n Delete work\n </MenuItem>\n </Fragment>\n </Menu>\n )}\n </DropMenu>\n)\n\nexport default injectSheet(styles)(ContextMenu)\n","export default ({ COLORS }) => ({})\n","import { apiClient } from 'pobble-components/dist/api'\n\nconst apiGetMe = params => apiClient.get('v3/me', { params })\n\nconst apiGetAccount = (id, params) =>\n apiClient.get(`v3/accounts/${id}`, { params })\n\nexport { apiGetMe, apiGetAccount }\n","import { apiGetAccount } from '../../common/api/profile'\nimport { apiDeleteWork, apiUpdateWork } from '../../common/api/works'\n\nexport const fetchWorks = (pupilId, params = {}) => ({\n requestPrefix: 'WORKS_STORE:FETCH',\n params: { pupilId, ...params },\n request: () =>\n apiGetAccount(pupilId, {\n include: `account.student_type.works,account.student_type.work.names,account.student_type.work.status,account.student_type.work.timestamps,account.student_type.work.year_group,account.student_type.work.year_group.names,account.student_type.work.year_group.order,account.student_type.works.limit.20,account.student_type.works.order.desc,account.student_type.works.page.${params.page ||\n 1},account.student_type.work.media,account.student_type.work.medium.thumb,account.student_type.work.independent`\n })\n})\n\nexport const deleteWork = id => ({\n requestPrefix: 'WORKS_STORE:DELETE',\n params: { id },\n request: () => apiDeleteWork(id)\n})\n\nexport const updateWork = (id, data) => ({\n requestPrefix: 'WORKS_STORE:UPDATE',\n params: { id, data },\n request: () => apiUpdateWork(id, data)\n})\n","import { apiClient } from 'pobble-components/dist/api'\n\nexport const apiDeleteWork = id => apiClient.delete(`/v3/works/${id}/`)\n\nexport const apiUpdateWork = (id, data) =>\n apiClient.put(`/v3/works/${id}`, data)\n","import { createSelector } from 'reselect'\n\nconst getState = state => state.WorksStore\n\nconst getFetchRequest = state => getState(state).fetchWorksRequest\nconst getDeletingWorkRequests = state => getState(state).deletingWorkRequests\n\nconst getDeletingWorkRequest = (state, id) =>\n getDeletingWorkRequests(state)[id] || { pending: false, requestError: null }\n\nconst anyWorkDeleting = createSelector(\n [getDeletingWorkRequests],\n deletingWorksRequests => {\n for (let id in deletingWorksRequests) {\n if (deletingWorksRequests[id].pending) return true\n }\n return false\n }\n)\n\nconst getWorks = state => getState(state).works\n\nconst getWorksMap = createSelector(\n [getWorks],\n works => (!works ? {} : works.entities.works)\n)\n\nconst getWorksResult = createSelector(\n [getWorks],\n works => (!works ? [] : works.result)\n)\n\nconst getWorksList = createSelector(\n [getWorksResult, getWorksMap],\n (result, worksMap) => result.map(id => worksMap[id])\n)\n\nconst getWork = (state, id) => getWorksMap(state)[id]\n\nconst getPagination = state => getState(state).pagination\n\nexport {\n getFetchRequest,\n getWorksList,\n getWork,\n getDeletingWorkRequest,\n getWorksResult,\n getPagination,\n anyWorkDeleting,\n getState as getWorksState\n}\n","import { connect } from 'react-redux'\nimport ContextMenu from './context-menu'\nimport {\n deleteWork,\n fetchWorks,\n updateWork\n} from '../../../../../../../stores/works/works.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\nimport {\n getPagination,\n getWork\n} from '../../../../../../../stores/works/works.selectors'\nimport { getPupil } from '../../../../../../../stores/pupil/pupil.selectors'\nimport { withRouter } from 'react-router-dom'\n\nconst mapStateToProps = (state, { id }) => {\n const work = getWork(state, id)\n const pupil = getPupil(state)\n return {\n status: work.status,\n pagination: getPagination(state),\n canPublish: !!pupil && pupil.account.student_type.policy.can_publish\n }\n}\n\nconst mapDispatchToProps = (dispatch, { id }) => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...stateProps,\n ...ownProps,\n onPublish: () =>\n dispatch(updateWork(ownProps.id, { state: 'published' })).catch(\n errorHandler\n ),\n onUnpublish: () =>\n dispatch(updateWork(ownProps.id, { state: 'evidence_bank' })).catch(\n errorHandler\n ),\n onDelete: () =>\n dispatch(deleteWork(ownProps.id))\n .then(() =>\n dispatch(\n fetchWorks(ownProps.match.params.id, {\n page: stateProps.pagination.current\n })\n )\n )\n .catch(errorHandler)\n})\n\nexport default withRouter(\n connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n )(ContextMenu)\n)\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './work-entry.styles'\nimport { Cell, TableRow } from 'pobble-components/dist/table'\nimport CircleStatus from 'pobble-components/dist/circle-status'\nimport ContextMenu from './context-menu/context-menu.container'\nimport Tooltip from 'pobble-components/dist/tooltip'\nimport AgeGroup from 'pobble-components/dist/age-group'\nimport { BulkCheckbox } from 'pobble-components/dist/bulk-action'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faInfoCircle } from '@fortawesome/pro-regular-svg-icons/faInfoCircle'\n\nconst WorkEntry = ({\n classes,\n date,\n title,\n id,\n published,\n link,\n ageOrder,\n ageTitle,\n pending,\n thumbnail,\n independent,\n independentInfo\n}) => (\n <TableRow pending={pending}>\n <Cell center>\n <BulkCheckbox id={id} />\n </Cell>\n <Cell>{date}</Cell>\n <Cell className={classes.thumbnail}>\n <a href={link}>\n <span style={{ backgroundImage: `url(\"${thumbnail}\")` }} />\n </a>\n </Cell>\n <Cell>\n <a href={link} className={classes.titleLink}>\n {title}\n </a>\n </Cell>\n <Cell center>\n {!independent && 'N/A'}\n {independent === 'yes' && 'Yes'}\n {independent === 'no' && 'No'}\n {independent === 'in_part' && (\n <Tooltip content={independentInfo}>\n <span className={classes.inPart}>\n In part <FontAwesomeIcon icon={faInfoCircle} />\n </span>\n </Tooltip>\n )}\n </Cell>\n <Cell center>\n <AgeGroup order={ageOrder}>{ageTitle}</AgeGroup>\n </Cell>\n <Cell center>\n <Tooltip\n content={published ? 'Work is published' : 'Work is not published'}>\n <CircleStatus status={published} />\n </Tooltip>\n </Cell>\n <Cell right>\n <ContextMenu id={id} />\n </Cell>\n </TableRow>\n)\n\nexport default injectSheet(styles)(WorkEntry)\n","export default ({ COLORS }) => ({\n titleLink: {\n color: COLORS.BLUE.NORMAL,\n fontWeight: 'bold',\n textDecoration: 'none'\n },\n thumbnail: {\n padding: '10px',\n '& > a': {\n display: 'block',\n position: 'relative',\n background: '#ececec',\n border: '1px solid #ececec',\n width: '100%',\n paddingBottom: '133%',\n borderRadius: '8px',\n overflow: 'hidden',\n '& > span': {\n position: 'absolute',\n left: '0',\n top: '0',\n backgroundSize: 'cover',\n width: '100%',\n height: '100%'\n }\n }\n },\n inPart: {\n '& svg': {\n fontSize: '.8em',\n marginLeft: '2px'\n }\n }\n})\n","import { connect } from 'react-redux'\nimport WorkEntry from './work-entry'\nimport {\n getWork,\n getWorksState\n} from '../../../../../../stores/works/works.selectors'\nimport { format } from 'date-fns/esm'\n\nconst mapStateToProps = (state, { id }) => {\n const work = getWork(state, id)\n const updatingRequest = getWorksState(state).updatingWorkRequests\n return {\n pending: updatingRequest[id] && updatingRequest[id].pending,\n date: format(work.created_at, 'dd.MM.yyyy'),\n title: work.title || '-',\n link: `/works/${id}`,\n published: work.status === 'published',\n ageOrder: work.year_group.order,\n ageTitle: work.year_group.title,\n thumbnail: work.media && work.media[0] && work.media[0].thumb_url,\n independent: work.independent,\n independentInfo: work.independent_description\n }\n}\n\nexport default connect(\n mapStateToProps,\n null\n)(WorkEntry)\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './bulk-actions.styles'\nimport { ActionButton } from 'pobble-components/dist/bulk-action'\nimport { openConfirmationDialog } from 'pobble-components/dist/modal/confirmation-dialog'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faFileAlt } from '@fortawesome/pro-regular-svg-icons/faFileAlt'\nimport { faTrashAlt } from '@fortawesome/pro-regular-svg-icons/faTrashAlt'\nimport {\n useSubscriptionPolicy,\n SubsCrown\n} from 'pobble-components/dist/subscriptions'\n\nconst BulkActions = ({ classes, onDelete, onOpenCreateAssessmentDialog }) => {\n const createAssesmenFileSP = useSubscriptionPolicy(\n sp => sp.moderation.create_assessment_file\n )\n const moderationSP = useSubscriptionPolicy(sp => sp.moderation)\n return (\n <ActionButton>\n {({ Menu, MenuItem, IconHolder, closePopover, bulkSelectedList }) => (\n <Menu>\n <MenuItem\n className={classes.delete}\n onClick={() => {\n closePopover()\n openConfirmationDialog({\n bodyText: `Are you sure you want to delete ${\n bulkSelectedList.length\n } works`,\n confirmText: `Delete works`,\n action: () => onDelete(bulkSelectedList)\n })\n }}>\n <IconHolder>\n <FontAwesomeIcon icon={faTrashAlt} />\n </IconHolder>\n Delete works\n </MenuItem>\n <MenuItem\n onClick={() => {\n closePopover()\n if (createAssesmenFileSP.restricted)\n return moderationSP.showDialog()\n onOpenCreateAssessmentDialog(bulkSelectedList)\n }}>\n <IconHolder>\n {createAssesmenFileSP.restricted && <SubsCrown />}\n {!createAssesmenFileSP.restricted && (\n <FontAwesomeIcon icon={faFileAlt} />\n )}\n </IconHolder>\n Create moderation file\n </MenuItem>\n </Menu>\n )}\n </ActionButton>\n )\n}\n\nexport default injectSheet(styles)(BulkActions)\n","export default ({ COLORS }) => ({\n delete: {\n color: COLORS.RED.NORMAL\n }\n})\n","import { connect } from 'react-redux'\nimport BulkAction from './bulk-actions'\nimport {\n deleteWork,\n fetchWorks\n} from '../../../../../../stores/works/works.actions'\nimport { openCreateAssessmentDialog } from '../../../dialogs/create-assessment/create-assessment.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\nimport { getPagination } from '../../../../../../stores/works/works.selectors'\nimport { withRouter } from 'react-router-dom'\n\nconst mapStateToProps = state => ({\n pagination: getPagination(state)\n})\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...stateProps,\n ...ownProps,\n onDelete: works =>\n Promise.all(\n works.map(work => dispatch(deleteWork(work.id)).catch(errorHandler))\n ).then(() =>\n dispatch(\n fetchWorks(ownProps.match.params.id, {\n page: stateProps.pagination.current\n })\n )\n ),\n onOpenCreateAssessmentDialog: works =>\n dispatch(openCreateAssessmentDialog(works))\n})\n\nexport default withRouter(\n connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n )(BulkAction)\n)\n","const openCreateAssessmentDialog = works => ({\n type: 'WORKS_STORE:CREATE_ASSESSMENT_DIALOG:OPEN',\n params: {\n selectedWorks: works\n }\n})\n\nconst closeCreateAssessmentDialog = () => ({\n type: 'WORKS_STORE:CREATE_ASSESSMENT_DIALOG:CLOSE'\n})\n\nexport { openCreateAssessmentDialog, closeCreateAssessmentDialog }\n","import React from 'react'\nimport styles from './create-assessment.styles'\nimport injectSheet from 'react-jss'\nimport {\n Modal,\n ModalHeader,\n ModalContent,\n ModalFooter\n} from 'pobble-components/dist/modal'\nimport Button from 'pobble-components/dist/button'\nimport FormInput from 'pobble-components/dist/form-elements/form-input'\nimport FormTextArea from 'pobble-components/dist/form-elements/form-text-area'\nimport FormLabel from 'pobble-components/dist/form-elements/form-label'\nimport * as Yup from 'yup'\nimport { Formik } from 'formik'\nimport PaperclipIcon from 'react-icons/lib/fa/paperclip'\nimport FormSelect from 'pobble-components/dist/form-elements/form-select'\n\nconst CreateAssessment = ({\n classes,\n opened,\n name,\n count,\n requestClose,\n onSubmit\n}) => (\n <Modal isOpen={opened}>\n <ModalHeader>New moderation file for {name}</ModalHeader>\n <Formik\n validationSchema={Yup.object().shape({\n title: Yup.string().required(\n 'Please provide a title to your moderation file'\n ),\n context: Yup.string().required(\n 'Please provide a context to your moderation file'\n )\n })}\n onSubmit={onSubmit}\n initialValues={{\n title: '',\n context: '',\n moderation_type: '',\n judgement: ''\n }}>\n {props => {\n const {\n handleChange,\n handleSubmit,\n handleBlur,\n errors,\n isValid,\n touched,\n values\n } = props\n return (\n <form onSubmit={handleSubmit}>\n <ModalContent legacy className={classes.modalContent}>\n <div className={classes.part}>\n <FormLabel htmlFor={'title'} className={classes.label}>\n Title\n </FormLabel>\n <FormInput\n type=\"text\"\n validationError={touched.title ? errors.title : null}\n name=\"title\"\n value={values.title}\n onChange={handleChange}\n onBlur={handleBlur}\n />\n </div>\n <div className={classes.part}>\n <FormLabel htmlFor={'context'} className={classes.label}>\n Context\n </FormLabel>\n <FormTextArea\n validationError={touched.context ? errors.context : null}\n placeholder={\n 'E.g. context for this moderation file, or a specific question for moderators.'\n }\n name=\"context\"\n value={values.context}\n onChange={handleChange}\n onBlur={handleBlur}\n />\n <div>\n <PaperclipIcon /> {count} piece\n {count > 1 ? 's' : ''}\n </div>\n <div className={classes.optionals}>\n <div className={classes.part}>\n <FormLabel\n htmlFor={'moderation_type'}\n className={classes.label}>\n Type{' '}\n <small className={classes.optional}>(optional)</small>\n </FormLabel>\n <FormSelect\n value={values.moderation_type}\n onChange={handleChange}\n onBlur={handleBlur}\n name=\"moderation_type\">\n <option value={''} default>\n Not applicable\n </option>\n <option value={'in_school_moderation'}>\n In school moderation\n </option>\n <option value={'cross_school_moderation'}>\n Cross school moderation\n </option>\n <option value={'statutory_moderation'}>\n Statutory moderation\n </option>\n <option value={'external_non_statutory_moderation'}>\n External non statutory moderation\n </option>\n </FormSelect>\n </div>\n <div className={classes.part}>\n <FormLabel htmlFor={'judgement'} className={classes.label}>\n Judgement\n <small className={classes.optional}>(optional)</small>\n </FormLabel>\n <FormSelect\n value={values.judgement}\n onChange={handleChange}\n onBlur={handleBlur}\n name=\"judgement\">\n <option value={''} default>\n Not applicable\n </option>\n <option value={'working_towards_the_expected_standard'}>\n Working towards the expected standard (WTS)\n </option>\n <option value={'working_at_the_expected_standard'}>\n Working at the expected standard (EXS)\n </option>\n <option\n value={'greater_depth_within_the_expected_standard'}>\n Greater depth within the expected standard (GDS)\n </option>\n </FormSelect>\n </div>\n </div>\n </div>\n </ModalContent>\n <ModalFooter className={classes.footer}>\n <Button\n simple\n tall\n type=\"button\"\n className={classes.cancel}\n action={requestClose}>\n Cancel\n </Button>\n <Button disabled={!isValid} tall type=\"submit\">\n Create moderation file\n </Button>\n </ModalFooter>\n </form>\n )\n }}\n </Formik>\n </Modal>\n)\n\nexport default injectSheet(styles)(CreateAssessment)\n","export default ({ COLORS }) => ({\n label: {\n margin: '0 0 5px'\n },\n part: {\n margin: '0 0 20px'\n },\n footer: {\n display: 'flex',\n justifyContent: 'flex-end'\n },\n optionals: {\n borderTop: '1px solid #e5e5e5',\n marginTop: '20px',\n paddingTop: '20px'\n },\n optional: {\n marginLeft: '5px',\n color: '#a5a5a5'\n }\n})\n","import { createSelector } from 'reselect'\n\nconst isOpen = state => state.WorksStore.createAssessmentDialog.opened\n\nconst getSelectedWorks = state =>\n state.WorksStore.createAssessmentDialog.selectedWorks\n\nconst getSelectedWorksCount = createSelector(\n [getSelectedWorks],\n works => works.length\n)\n\nexport { isOpen, getSelectedWorks, getSelectedWorksCount }\n","import { apiGetAccount } from '../../common/api/profile'\nimport {\n apiCreateAssessmentFile,\n apiDeleteAssessmentFile,\n apiInviteToAssessmentFileBulk\n} from '../../common/api/assessment'\n\nconst fetchAssessmentFiles = pupilId => ({\n requestPrefix: 'ASSESSMENT_STORE:FETCH',\n params: { pupilId },\n request: () =>\n apiGetAccount(pupilId, {\n include:\n 'account.student_type.assessment_files,account.student_type.assessment_file.details,account.student_type.assessment_file.timestamps,account.student_type.assessment_file.contributors,account.student_type.assessment_file.contributions,account.student_type.assessment_file.student_type.account.names,account.student_type.assessment_file.works'\n })\n})\n\nconst createAssessmentFile = (title, context, studentId, works) => ({\n requestPrefix: 'ASSESSMENT_STORE:CREATE',\n request: () => apiCreateAssessmentFile(title, context, studentId, works)\n})\n\nconst deleteAssessmentFile = id => ({\n requestPrefix: 'ASSESSMENT_STORE:DELETE',\n params: { id },\n request: () => apiDeleteAssessmentFile(id)\n})\n\nconst openInvitationAssessmentDialog = id => ({\n type: 'ASSESSMENT_STORE:INVITATION_ASSESSMENT_DIALOG:OPEN',\n params: {\n id\n }\n})\n\nconst closeInvitationAssessmentDialog = () => ({\n type: 'ASSESSMENT_STORE:INVITATION_ASSESSMENT_DIALOG:CLOSE'\n})\n\nconst inviteToAssessmentFile = (assessmentFileId, emails, recaptchaToken) => ({\n requestPrefix: 'ASSESSMENT_STORE:INVITE',\n params: { assessmentFileId, emails },\n request: () =>\n apiInviteToAssessmentFileBulk({\n assessment_file_id: assessmentFileId,\n emails,\n recaptcha_token: recaptchaToken\n })\n})\n\nexport {\n fetchAssessmentFiles,\n createAssessmentFile,\n deleteAssessmentFile,\n openInvitationAssessmentDialog,\n closeInvitationAssessmentDialog,\n inviteToAssessmentFile\n}\n","import { apiClient } from 'pobble-components/dist/api'\n\nconst apiCreateAssessmentFile = data =>\n apiClient.post(`/v3/assessment_files`, data)\n\nconst apiDeleteAssessmentFile = id =>\n apiClient.delete(`/v3/assessment_files/${id}/`)\n\nconst apiInviteToAssessmentFileBulk = data =>\n apiClient.post('/v3/bulk_invite_guest_moderators', data)\n\nexport {\n apiCreateAssessmentFile,\n apiDeleteAssessmentFile,\n apiInviteToAssessmentFileBulk\n}\n","import { connect } from 'react-redux'\nimport CreateAssessment from './create-assessment'\nimport {\n isOpen,\n getSelectedWorks,\n getSelectedWorksCount\n} from './create-assessment.selectors'\nimport { getPupil } from '../../../../../stores/pupil/pupil.selectors'\nimport { closeCreateAssessmentDialog } from './create-assessment.actions'\nimport { createAssessmentFile } from '../../../../../stores/assessment/assessment.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapStateToProps = state => {\n const opened = isOpen(state)\n const pupil = getPupil(state)\n return {\n opened,\n id: pupil && pupil.account.id,\n name: pupil && pupil.account.full_name,\n works: getSelectedWorks(state),\n count: getSelectedWorksCount(state)\n }\n}\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...ownProps,\n ...stateProps,\n requestClose: () => dispatch(closeCreateAssessmentDialog()),\n onSubmit: values => {\n dispatch(closeCreateAssessmentDialog())\n dispatch(\n createAssessmentFile({\n title: values.title,\n context: values.context,\n work_ids: stateProps.works.map(works => works.id),\n student_id: stateProps.id,\n moderation_type: values.moderation_type,\n judgement: values.judgement\n })\n )\n .then(resp => {\n return (window.location =\n '/moderation/assessment-files/' + resp.data.assessment_file.id)\n })\n .catch(errorHandler)\n }\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n)(CreateAssessment)\n","import React, { Fragment } from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './works-table.styles'\nimport { Table, HeadCell } from 'pobble-components/dist/table'\nimport WorkEntry from './work-entry/work-entry.container'\nimport {\n BulkActionProvider,\n SelectAllButton\n} from 'pobble-components/dist/bulk-action'\nimport BulkActions from './bulk-actions/bulk-actions.container'\nimport CreateAssessement from '../../dialogs/create-assessment/create-assessment.container'\nimport { Pagination } from 'pobble-components/dist/pagination'\nimport Button from 'pobble-components/dist/button'\nimport octopus from './octopus.png'\n\nconst WorksTable = ({\n classes,\n works,\n onSelectAll,\n onDeselectAll,\n noWorks,\n pagination,\n onPageChange,\n pending\n}) =>\n noWorks ? (\n <div className={classes.noWorks}>\n <img width=\"220\" src={octopus} alt=\"No works yet\" />\n <p>This pupil doesn't have any works yet.</p>\n <p>\n <Button tall href={'/actions/upload'}>\n Upload work\n </Button>\n </p>\n </div>\n ) : (\n <Fragment>\n <BulkActionProvider entities={works}>\n <Table pending={pending}>\n <thead>\n <tr>\n <HeadCell className={classes.all}>\n <SelectAllButton />\n </HeadCell>\n <HeadCell className={classes.date}>Date</HeadCell>\n <HeadCell className={classes.work}>Work</HeadCell>\n <HeadCell className={classes.left} />\n <HeadCell className={classes.sta}>Independent</HeadCell>\n <HeadCell className={classes.ageGroup}>Age group</HeadCell>\n <HeadCell className={classes.published}>Published</HeadCell>\n <HeadCell className={classes.contextMenuCell}>\n <BulkActions />\n </HeadCell>\n </tr>\n </thead>\n <tbody>\n {works.map(work => (\n <WorkEntry key={work.id} id={work.id} />\n ))}\n </tbody>\n </Table>\n </BulkActionProvider>\n <div className={classes.pagination}>\n <Pagination onPageChange={onPageChange} data={pagination} />\n </div>\n <p className={classes.moreWorks}>\n <Button tall href={'/actions/upload'}>\n Upload more work\n </Button>\n </p>\n <CreateAssessement />\n </Fragment>\n )\n\nexport default injectSheet(styles)(WorksTable)\n","export default ({ COLORS }) => ({\n left: {\n textAlign: 'left'\n },\n work: {\n width: '100px'\n },\n date: {\n textAlign: 'left',\n width: '120px'\n },\n all: {\n width: '60px'\n },\n published: {\n width: '120px'\n },\n ageGroup: {\n width: '140px'\n },\n sta: {\n width: '140px'\n },\n contextMenuCell: {\n width: '60px'\n },\n pagination: {\n marginTop: '20px',\n display: 'flex',\n justifyContent: 'center'\n },\n noWorks: {\n paddingTop: '50px',\n textAlign: 'center',\n '& p': {\n fontSize: '18px'\n }\n },\n moreWorks: {\n paddingTop: '10px',\n textAlign: 'center'\n }\n})\n","import { connect } from 'react-redux'\nimport WorksTable from './works-table'\nimport {\n getWorksList,\n getPagination,\n getFetchRequest,\n anyWorkDeleting\n} from '../../../../../stores/works/works.selectors'\nimport { fetchWorks } from '../../../../../stores/works/works.actions'\nimport { withRouter } from 'react-router-dom'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapStateToProps = state => {\n const works = getWorksList(state)\n return {\n works: works,\n noWorks: !works.length,\n pagination: getPagination(state),\n pending: getFetchRequest(state).pending || anyWorkDeleting(state)\n }\n}\n\nconst mapDispatchToProps = (dispatch, { match }) => ({\n onPageChange: ({ selected }) =>\n dispatch(fetchWorks(match.params.id, { page: selected })).catch(\n errorHandler\n )\n})\n\nexport default withRouter(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(WorksTable)\n)\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './entry-skeleton.styles'\nimport { TableRow, Cell } from 'pobble-components/dist/table'\nimport Bone from 'pobble-components/dist/bone'\n\nconst EntrySkeleton = ({ classes, titleWidth = 80 }) => (\n <TableRow>\n <Cell center>\n <Bone className={classes.checkbox} />\n </Cell>\n <Cell>\n <Bone className={classes.date} />\n </Cell>\n <Cell className={classes.thumbnailCell}>\n <Bone className={classes.thumbnail} />\n </Cell>\n <Cell>\n <Bone style={{ width: `${titleWidth}%` }} />\n </Cell>\n <Cell center>\n <Bone className={classes.sta} />\n </Cell>\n <Cell center>\n <Bone className={classes.ageGroup} />\n </Cell>\n <Cell center>\n <Bone className={classes.published} />\n </Cell>\n <Cell right>\n <Bone className={classes.contextMenu} />\n </Cell>\n </TableRow>\n)\n\nexport default injectSheet(styles)(EntrySkeleton)\n","export default {\n center: {\n textAlign: 'center'\n },\n checkbox: {\n height: '20px',\n width: '20px',\n borderRadius: '4px'\n },\n date: {\n width: '80px'\n },\n published: {\n width: '30px',\n height: '30px',\n borderRadius: '30px'\n },\n contextMenu: {\n width: '40px',\n height: '40px',\n borderRadius: '5px',\n display: 'inline-block'\n },\n ageGroup: {\n width: '82px',\n height: '31px',\n borderRadius: '4px'\n },\n thumbnailCell: {\n padding: '10px'\n },\n thumbnail: {\n width: '100%',\n height: '0',\n paddingBottom: '133%',\n borderRadius: '8px'\n },\n sta: {\n width: '40px'\n }\n}\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './work-skeleton.styles'\nimport { Table, HeadCell } from 'pobble-components/dist/table'\nimport Bone from 'pobble-components/dist/bone'\nimport EntrySkeleton from './entry-skeleton/entry-skeleton'\n\nconst WorkSkeleton = ({ classes }) => (\n <Table>\n <thead>\n <tr>\n <HeadCell className={classes.allCell}>\n <Bone className={classes.all} />\n </HeadCell>\n <HeadCell className={classes.dateCell}>\n <Bone className={classes.date} />\n </HeadCell>\n <HeadCell className={classes.thumbnailCell}>\n <Bone className={classes.thumbnail} />\n </HeadCell>\n <HeadCell className={classes.titleCell} />\n <HeadCell className={classes.staCell}>\n <Bone className={classes.sta} />\n </HeadCell>\n <HeadCell className={classes.ageGroupCell}>\n <Bone className={classes.ageGroup} />\n </HeadCell>\n <HeadCell className={classes.publishedCell}>\n <Bone className={classes.published} />\n </HeadCell>\n <HeadCell className={classes.contextMenuCell}>\n <Bone className={classes.bulkAction} />\n </HeadCell>\n </tr>\n </thead>\n <tbody>\n <EntrySkeleton titleWidth={30} />\n <EntrySkeleton titleWidth={50} />\n <EntrySkeleton titleWidth={20} />\n <EntrySkeleton titleWidth={60} />\n <EntrySkeleton titleWidth={25} />\n </tbody>\n </Table>\n)\n\nexport default injectSheet(styles)(WorkSkeleton)\n","export default {\n allCell: {\n width: '60px'\n },\n all: {\n width: '30px'\n },\n dateCell: {\n width: '120px',\n textAlign: 'left'\n },\n date: {\n width: '40px'\n },\n title: {\n width: '40px'\n },\n titleCell: {\n textAlign: 'left'\n },\n ageGroupCell: {\n textAlign: 'center',\n width: '140px'\n },\n ageGroup: {\n width: '80px'\n },\n publishedCell: {\n width: '120px'\n },\n published: {\n width: '75px'\n },\n contextMenuCell: {\n width: '60px'\n },\n bulkAction: {\n display: 'block',\n height: '40px',\n width: '93px',\n borderRadius: '4px'\n },\n thumbnailCell: {\n width: '100px'\n },\n thumbnail: {\n width: '40px'\n },\n staCell: {\n width: '140px'\n },\n sta: {\n width: '90px'\n }\n}\n","import React, { Component } from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './work.styles'\nimport ContentHolder from '../../../content-holder/content-holder'\nimport Paper from 'pobble-components/dist/paper'\nimport WorksTable from './works-table/works-table.container'\nimport WorkSkeleton from './work-skeleton/work-skeleton'\n\nclass Work extends Component {\n componentDidMount() {\n this.props.onMount()\n }\n render() {\n const { classes, pending } = this.props\n return (\n <ContentHolder>\n <Paper className={classes.paper}>\n {pending && <WorkSkeleton />}\n {!pending && <WorksTable />}\n </Paper>\n </ContentHolder>\n )\n }\n}\n\nexport default injectSheet(styles)(Work)\n","export default {\n paper: {\n minHeight: 'calc(100vh - 270px)',\n marginBottom: '20px'\n }\n}\n","import { connect } from 'react-redux'\nimport Work from './work'\nimport { fetchWorks } from '../../../../stores/works/works.actions'\nimport { withRouter } from 'react-router-dom'\nimport { getFetchRequest } from '../../../../stores/works/works.selectors'\n\nconst mapsStateToProps = state => {\n const fetchRequest = getFetchRequest(state)\n return {\n pending:\n (!fetchRequest.params || !fetchRequest.params.page) &&\n fetchRequest.pending\n }\n}\n\nconst mapDispatchToProps = (dispatch, { match }) => ({\n onMount: () => dispatch(fetchWorks(match.params.id))\n})\n\nexport default withRouter(\n connect(\n mapsStateToProps,\n mapDispatchToProps\n )(Work)\n)\n","import React, { Fragment } from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './context-menu.styles'\nimport DropMenu from 'pobble-components/dist/drop-menu'\nimport MoreButton from 'pobble-components/dist/more-button'\nimport FileIcon from 'react-icons/lib/fa/file-text-o'\n\nconst ContextMenu = ({ classes, onGoToWork }) => (\n <DropMenu\n button={({ ref, togglePopover }) => (\n <MoreButton forwardedRef={ref} onClick={togglePopover} />\n )}>\n {({ Menu, MenuItem, IconHolder, Separator, closePopover }) => (\n <Menu>\n <Fragment>\n <MenuItem\n onClick={() => {\n onGoToWork()\n closePopover()\n }}>\n <IconHolder>\n <FileIcon />\n </IconHolder>\n View work\n </MenuItem>\n </Fragment>\n </Menu>\n )}\n </DropMenu>\n)\n\nexport default injectSheet(styles)(ContextMenu)\n","export default ({ COLORS }) => ({})\n","import { createSelector } from 'reselect'\n\nconst getState = state => state.CommentsStore\n\nconst getFetchRequest = state => getState(state).fetchCommentsRequest\n\nconst getComments = state => getState(state).comments\n\nconst getCommentsMap = createSelector(\n [getComments],\n comments => (!comments ? {} : comments.entities.comments)\n)\n\nconst getCommentsResult = createSelector(\n [getComments],\n comments => (!comments ? [] : comments.result)\n)\n\nconst getCommentsList = createSelector(\n [getCommentsResult, getCommentsMap],\n (result, commentsMap) => result.map(id => commentsMap[id])\n)\n\nconst getCommentsPagination = state => getState(state).pagination\n\nconst getComment = (state, id) => getCommentsMap(state)[id]\n\nexport { getFetchRequest, getCommentsList, getComment, getCommentsPagination }\n","import { connect } from 'react-redux'\nimport ContextMenu from './context-menu'\nimport { getComment } from '../../../../../../../stores/comments/comments.selectors'\n\nconst mapStateToProps = (state, { id }) => {\n const comment = getComment(state, id)\n return {\n workId: comment.work.id\n }\n}\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...ownProps,\n ...stateProps,\n onGoToWork: () => (window.location.href = `/works/${stateProps.workId}`)\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n)(ContextMenu)\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './comment-entry.styles'\nimport { Cell } from 'pobble-components/dist/table'\nimport CircleStatus from 'pobble-components/dist/circle-status'\nimport Tooltip from 'pobble-components/dist/tooltip'\nimport ContextMenu from './context-menu/context-menu.container'\n\nconst CommentEntry = ({ classes, date, comment, status, id }) => (\n <tr>\n <Cell className={classes.commentCell}>{date}</Cell>\n <Cell>{comment}</Cell>\n <Cell className={classes.statusCell}>\n <Tooltip\n content={\n status === 'pending' ? 'Pending' : status ? 'Approved' : 'Declined'\n }>\n <CircleStatus status={status} />\n </Tooltip>\n </Cell>\n <Cell>\n <ContextMenu id={id} />\n </Cell>\n </tr>\n)\n\nexport default injectSheet(styles)(CommentEntry)\n","export default {\n commentCell: {\n whiteSpace: 'nowrap',\n width: '120px'\n },\n center: {\n textAlign: 'center'\n },\n statusCell: {\n textAlign: 'center',\n width: '100px'\n }\n}\n","import { connect } from 'react-redux'\nimport CommentEntry from './comment-entry'\nimport { getComment } from '../../../../../../stores/comments/comments.selectors'\nimport { format } from 'date-fns/esm'\n\nconst mapStateToProps = (state, { id }) => {\n const comment = getComment(state, id)\n return {\n date: format(comment.created_at, 'dd.MM.yyyy'),\n comment: comment.content,\n status:\n comment.status === 'approved'\n ? true\n : comment.status === 'pending'\n ? 'pending'\n : false\n }\n}\n\nexport default connect(\n mapStateToProps,\n null\n)(CommentEntry)\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './comments-table.styles'\nimport { Table, HeadCell } from 'pobble-components/dist/table'\nimport CommentEntry from './comment-entry/comment-entry.container'\nimport { Pagination } from 'pobble-components/dist/pagination'\n\nconst CommentsTable = ({\n classes,\n comments,\n on,\n noComments,\n pagination,\n onPageChange,\n pending\n}) => {\n return noComments ? (\n <span>This pupil doesn't have any comments yet</span>\n ) : (\n <div className={classes.container}>\n <Table pending={pending}>\n <thead>\n <tr>\n <HeadCell className={classes.left}>Date</HeadCell>\n <HeadCell className={classes.left}>Comment</HeadCell>\n <HeadCell>Status</HeadCell>\n <HeadCell className={classes.contextMenuCell} />\n </tr>\n </thead>\n <tbody>\n {comments.map(comment => (\n <CommentEntry id={comment.id} />\n ))}\n </tbody>\n </Table>\n <div className={classes.pagination}>\n <Pagination onPageChange={onPageChange} data={pagination} />\n </div>\n </div>\n )\n}\n\nexport default injectSheet(styles)(CommentsTable)\n","export default ({ COLORS }) => ({\n container: {\n position: 'relative'\n },\n left: {\n textAlign: 'left'\n },\n all: {\n width: '60px'\n },\n allButton: {\n color: COLORS.BLUE.NORMAL,\n fontWeight: 'bold'\n },\n contextMenuCell: {\n width: '60px'\n },\n pagination: {\n marginTop: '20px',\n display: 'flex',\n justifyContent: 'center'\n }\n})\n","import { apiClient } from 'pobble-components/dist/api'\n\nconst apiApproveComment = id => apiClient.put(`/v3/comments/${id}/approve`)\n\nexport { apiApproveComment }\n","import { apiGetAccount } from '../../common/api/profile'\nimport { apiApproveComment } from '../../common/api/comments'\n\nconst fetchComments = (pupilId, params = {}) => ({\n requestPrefix: 'COMMENTS_STORE:FETCH',\n params: { pupilId, ...params },\n request: () =>\n apiGetAccount(pupilId, {\n include: `account.comments,account.comment.timestamps,account.comment.details,account.comment.work,account.comments.limit.10,account.comments.page.${params.page ||\n 1}`\n })\n})\n\nconst approveComment = commentId => ({\n requestPrefix: 'COMMENTS_STORE:APPROVE',\n params: { commentId },\n request: () => apiApproveComment(commentId)\n})\n\nexport { fetchComments, approveComment }\n","import { connect } from 'react-redux'\nimport CommentsTable from './comments-table'\nimport {\n getCommentsList,\n getCommentsPagination,\n getFetchRequest\n} from '../../../../../stores/comments/comments.selectors'\nimport { fetchComments } from '../../../../../stores/comments/comments.actions'\nimport { withRouter } from 'react-router-dom'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapStateToProps = state => {\n const comments = getCommentsList(state)\n const pagination = getCommentsPagination(state)\n return {\n pending: getFetchRequest(state).pending,\n comments: comments,\n noComments: !comments.length,\n pagination\n }\n}\n\nconst mapDispatchToprops = (dispatch, { match }) => ({\n onPageChange: ({ selected }) =>\n dispatch(fetchComments(match.params.id, { page: selected })).catch(\n errorHandler\n )\n})\n\nexport default withRouter(\n connect(\n mapStateToProps,\n mapDispatchToprops\n )(CommentsTable)\n)\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './entry-skeleton.styles'\nimport { TableRow, Cell } from 'pobble-components/dist/table'\nimport Bone from 'pobble-components/dist/bone'\n\nconst EntrySkeleton = ({ classes, commentWidth = 80 }) => (\n <TableRow>\n <Cell center>\n <Bone className={classes.checkbox} />\n </Cell>\n <Cell>\n <Bone className={classes.date} />\n </Cell>\n <Cell>\n <Bone style={{ width: `${commentWidth}%` }} />\n </Cell>\n <Cell center>\n <Bone className={classes.status} />\n </Cell>\n <Cell>\n <Bone className={classes.contextMenu} />\n </Cell>\n </TableRow>\n)\n\nexport default injectSheet(styles)(EntrySkeleton)\n","export default {\n center: {\n textAlign: 'center'\n },\n checkbox: {\n height: '20px',\n width: '20px',\n borderRadius: '4px'\n },\n date: {\n width: '80px'\n },\n status: {\n width: '30px',\n height: '30px',\n borderRadius: '30px'\n },\n contextMenu: {\n width: '40px',\n height: '40px',\n borderRadius: '5px',\n display: 'block'\n }\n}\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './comments-skeleton.styles'\nimport { Table, HeadCell } from 'pobble-components/dist/table'\nimport Bone from 'pobble-components/dist/bone'\nimport EntrySkeleton from './entry-skeleton/entry-skeleton'\n\nconst CommentsSkeleton = ({ classes }) => (\n <Table>\n <thead>\n <tr>\n <HeadCell className={classes.allCell}>\n <Bone className={classes.all} />\n </HeadCell>\n <HeadCell className={classes.dateCell}>\n <Bone className={classes.date} />\n </HeadCell>\n <HeadCell className={classes.commentCell}>\n <Bone className={classes.comment} />\n </HeadCell>\n <HeadCell className={classes.statusCell}>\n <Bone className={classes.status} />\n </HeadCell>\n <HeadCell className={classes.contextMenuCell} />\n </tr>\n </thead>\n <tbody>\n <EntrySkeleton commentWidth={90} />\n <EntrySkeleton commentWidth={70} />\n <EntrySkeleton commentWidth={80} />\n <EntrySkeleton commentWidth={50} />\n <EntrySkeleton commentWidth={90} />\n </tbody>\n </Table>\n)\n\nexport default injectSheet(styles)(CommentsSkeleton)\n","export default {\n allCell: {\n width: '60px'\n },\n all: {\n width: '30px'\n },\n dateCell: {\n width: '120px',\n textAlign: 'left'\n },\n date: {\n width: '40px'\n },\n comment: {\n width: '75px'\n },\n commentCell: {\n textAlign: 'left'\n },\n statusCell: {\n width: '100px'\n },\n status: {\n width: '50px'\n },\n contextMenuCell: {\n width: '60px'\n }\n}\n","import React, { Component } from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './comments.styles'\nimport ContentHolder from '../../../content-holder/content-holder'\nimport Paper from 'pobble-components/dist/paper'\nimport CommentsTable from './comments-table/comments-table.container'\nimport CommentsSkeleton from './comments-skeleton/comments-skeleton'\n\nclass Comments extends Component {\n componentDidMount() {\n this.props.onMount()\n }\n render() {\n const { pending, classes } = this.props\n return (\n <ContentHolder className={classes.contentHolder}>\n <Paper className={classes.paper}>\n {pending && <CommentsSkeleton />}\n {!pending && <CommentsTable />}\n </Paper>\n </ContentHolder>\n )\n }\n}\n\nexport default injectSheet(styles)(Comments)\n","export default {\n paper: {\n minHeight: 'calc(100vh - 270px)',\n marginBottom: '20px'\n }\n}\n","import { connect } from 'react-redux'\nimport Comments from './comments'\nimport { withRouter } from 'react-router-dom'\nimport { fetchComments } from '../../../../stores/comments/comments.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\nimport { getFetchRequest } from '../../../../stores/comments/comments.selectors'\n\nconst mapStateToProps = state => {\n const fetchRequest = getFetchRequest(state)\n return {\n pending:\n fetchRequest.params && fetchRequest.params.initial && fetchRequest.pending\n }\n}\n\nconst mapDispatchToProps = (dispatch, { match }) => ({\n onMount: () =>\n dispatch(fetchComments(match.params.id, { initial: true })).catch(\n errorHandler\n )\n})\n\nexport default withRouter(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(Comments)\n)\n","import React, { Fragment } from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './context-menu.styles'\nimport DropMenu from 'pobble-components/dist/drop-menu'\nimport MoreButton from 'pobble-components/dist/more-button'\nimport TrashIcon from 'react-icons/lib/fa/trash'\nimport AddUserIcon from 'react-icons/lib/fa/user-plus'\nimport { openConfirmationDialog } from 'pobble-components/dist/modal/confirmation-dialog'\n\nconst ContextMenu = ({\n classes,\n onDelete,\n onOpenInvitationAssessmentDialog\n}) => (\n <DropMenu\n button={({ ref, togglePopover }) => (\n <MoreButton forwardedRef={ref} onClick={togglePopover} />\n )}>\n {({ Menu, MenuItem, IconHolder, Separator, closePopover }) => (\n <Menu>\n <Fragment>\n <MenuItem\n onClick={() => {\n onOpenInvitationAssessmentDialog()\n closePopover()\n }}>\n <IconHolder>\n <AddUserIcon />\n </IconHolder>\n Invite contributor\n </MenuItem>\n <MenuItem\n className={classes.delete}\n onClick={() => {\n openConfirmationDialog({\n bodyText: `Are you sure you want to delete this moderation file?`,\n confirmText: `Delete moderation file`,\n action: onDelete\n })\n closePopover()\n }}>\n <IconHolder>\n <TrashIcon />\n </IconHolder>\n Delete moderation file\n </MenuItem>\n </Fragment>\n </Menu>\n )}\n </DropMenu>\n)\n\nexport default injectSheet(styles)(ContextMenu)\n","export default ({ COLORS }) => ({\n delete: {\n color: COLORS.RED.NORMAL\n }\n})\n","import { connect } from 'react-redux'\nimport ContextMenu from './context-menu'\nimport {\n deleteAssessmentFile,\n openInvitationAssessmentDialog\n} from '../../../../../../../stores/assessment/assessment.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapDispatchToProps = (dispatch, { id }) => ({\n onDelete: () => dispatch(deleteAssessmentFile(id)).catch(errorHandler),\n onOpenInvitationAssessmentDialog: () =>\n dispatch(openInvitationAssessmentDialog(id))\n})\n\nexport default connect(\n null,\n mapDispatchToProps\n)(ContextMenu)\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './assessment-entry.styles'\nimport { Cell, TableRow } from 'pobble-components/dist/table'\nimport CircleStatus from 'pobble-components/dist/circle-status'\nimport ContextMenu from './context-menu/context-menu.container'\nimport Tooltip from 'pobble-components/dist/tooltip'\nimport { BulkCheckbox } from 'pobble-components/dist/bulk-action'\n\nconst AssessmentEntry = ({\n classes,\n date,\n title,\n id,\n conclusion,\n contributors,\n link,\n pending\n}) => (\n <TableRow pending={pending}>\n <Cell center>\n <BulkCheckbox id={id} />\n </Cell>\n <Cell>{date}</Cell>\n <Cell>\n <a href={link} className={classes.titleLink}>\n {title}\n </a>\n </Cell>\n <Cell center>\n {contributors ? contributors : 'No'} contributor\n {contributors > 1 ? 's' : ''}\n </Cell>\n <Cell center>\n <Tooltip\n content={\n conclusion\n ? 'This moderation file has a conclusion'\n : 'No conclusion yet'\n }>\n <CircleStatus status={conclusion} />\n </Tooltip>\n </Cell>\n <Cell right>\n <ContextMenu id={id} />\n </Cell>\n </TableRow>\n)\n\nexport default injectSheet(styles)(AssessmentEntry)\n","export default ({ COLORS }) => ({\n titleLink: {\n color: COLORS.BLUE.NORMAL,\n fontWeight: 'bold',\n textDecoration: 'none'\n }\n})\n","import { createSelector } from 'reselect'\n\nconst getState = state => state.AssessmentStore\n\nconst getFetchRequest = state => getState(state).fetchAssessmentsRequest\nconst getDeletingAssessmentRequests = state =>\n getState(state).deletingAssessmentRequests\n\nconst getDeletingAssessmentRequest = (state, id) =>\n getDeletingAssessmentRequests(state)[id] || {\n pending: false,\n requestError: null\n }\n\nconst getAssessments = state => getState(state).assessments\n\nconst getAssessmentsMap = createSelector(\n [getAssessments],\n assessments => (!assessments ? {} : assessments.entities.assessments)\n)\n\nconst getAssessmentsResult = createSelector(\n [getAssessments],\n assessments => (!assessments ? [] : assessments.result)\n)\n\nconst getAssessmentsList = createSelector(\n [getAssessmentsResult, getAssessmentsMap],\n (result, assessmentsMap) => result.map(id => assessmentsMap[id])\n)\n\nconst getAssessment = (state, id) => getAssessmentsMap(state)[id]\n\nexport {\n getFetchRequest,\n getAssessmentsList,\n getAssessment,\n getDeletingAssessmentRequest\n}\n","import { connect } from 'react-redux'\nimport AssessmentEntry from './assessment-entry'\nimport {\n getAssessment,\n getDeletingAssessmentRequest\n} from '../../../../../../stores/assessment/assessment.selectors'\nimport { format } from 'date-fns/esm'\n\nconst mapStateToProps = (state, { id }) => {\n const assessment = getAssessment(state, id)\n return {\n date: format(assessment.updated_at, 'dd.MM.yyyy'),\n title: assessment.title,\n link: `/moderation/assessment-files/${id}`,\n contributors: assessment.contributors && assessment.contributors.length,\n conclusion: assessment.concluded,\n pending: getDeletingAssessmentRequest(state, id).pending\n }\n}\n\nexport default connect(mapStateToProps, null)(AssessmentEntry)\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './bulk-actions.styles'\nimport { ActionButton } from 'pobble-components/dist/bulk-action'\nimport { openConfirmationDialog } from 'pobble-components/dist/modal/confirmation-dialog'\nimport TrashIcon from 'react-icons/lib/fa/trash-o'\n\nconst BulkActions = ({ classes, onDelete }) => (\n <ActionButton>\n {({ Menu, MenuItem, IconHolder, closePopover, bulkSelectedList }) => (\n <Menu>\n <MenuItem\n className={classes.delete}\n onClick={() => {\n closePopover()\n openConfirmationDialog({\n bodyText: `Are you sure you want to delete ${\n bulkSelectedList.length\n } moderation files?`,\n confirmText: `Delete moderation files`,\n action: () => onDelete(bulkSelectedList)\n })\n }}>\n <IconHolder>\n <TrashIcon />\n </IconHolder>\n Delete files\n </MenuItem>\n </Menu>\n )}\n </ActionButton>\n)\n\nexport default injectSheet(styles)(BulkActions)\n","export default ({ COLORS }) => ({\n delete: {\n color: COLORS.RED.NORMAL\n }\n})\n","import { connect } from 'react-redux'\nimport BulkAction from './bulk-actions'\nimport { deleteAssessmentFile } from '../../../../../../stores/assessment/assessment.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapDispatchToProps = dispatch => ({\n onDelete: ids =>\n ids.forEach(({ id }) =>\n dispatch(deleteAssessmentFile(id)).catch(errorHandler)\n )\n})\n\nexport default connect(\n null,\n mapDispatchToProps\n)(BulkAction)\n","import React, { Fragment } from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './assessments-table.styles'\nimport { Table, HeadCell } from 'pobble-components/dist/table'\nimport AssessmentEntry from './assessment-entry/assessment-entry.container'\nimport {\n BulkActionProvider,\n SelectAllButton\n} from 'pobble-components/dist/bulk-action'\nimport BulkActions from './bulk-actions/bulk-actions.container'\nimport CreateAssessement from '../../dialogs/create-assessment/create-assessment.container'\n\nconst AssessmentsTable = ({\n classes,\n assessments,\n onSelectAll,\n onDeselectAll,\n noAssessments\n}) =>\n noAssessments ? (\n <span>This pupil doesn't have any moderation files yet</span>\n ) : (\n <Fragment>\n <BulkActionProvider entities={assessments}>\n <Table>\n <thead>\n <tr>\n <HeadCell className={classes.all}>\n <SelectAllButton />\n </HeadCell>\n <HeadCell className={classes.date}>Date</HeadCell>\n <HeadCell className={classes.left}>Title</HeadCell>\n <HeadCell className={classes.contributors}>Contributors</HeadCell>\n <HeadCell className={classes.conclusion}>Conclusion</HeadCell>\n <HeadCell className={classes.contextMenuCell}>\n <BulkActions />\n </HeadCell>\n </tr>\n </thead>\n <tbody>\n {assessments.map(assessment => (\n <AssessmentEntry key={assessment.id} id={assessment.id} />\n ))}\n </tbody>\n </Table>\n </BulkActionProvider>\n <CreateAssessement />\n </Fragment>\n )\n\nexport default injectSheet(styles)(AssessmentsTable)\n","export default ({ COLORS }) => ({\n left: {\n textAlign: 'left'\n },\n date: {\n textAlign: 'left',\n width: '120px'\n },\n all: {\n width: '60px'\n },\n conclusion: {\n width: '120px'\n },\n contributors: {\n width: '140px'\n },\n contextMenuCell: {\n width: '60px'\n }\n})\n","import { connect } from 'react-redux'\nimport AssessmentsTable from './assessments-table'\nimport { getAssessmentsList } from '../../../../../stores/assessment/assessment.selectors'\n\nconst mapStateToProps = state => {\n const assessments = getAssessmentsList(state)\n return {\n assessments: assessments,\n noAssessments: !assessments.length\n }\n}\n\nexport default connect(\n mapStateToProps,\n null\n)(AssessmentsTable)\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './entry-skeleton.styles'\nimport { TableRow, Cell } from 'pobble-components/dist/table'\nimport Bone from 'pobble-components/dist/bone'\n\nconst EntrySkeleton = ({ classes, titleWidth = 80 }) => (\n <TableRow>\n <Cell center>\n <Bone className={classes.checkbox} />\n </Cell>\n <Cell>\n <Bone className={classes.date} />\n </Cell>\n <Cell>\n <Bone style={{ width: `${titleWidth}%` }} />\n </Cell>\n <Cell center>\n <Bone className={classes.contributors} />\n </Cell>\n <Cell center>\n <Bone className={classes.conclusion} />\n </Cell>\n <Cell right>\n <Bone className={classes.contextMenu} />\n </Cell>\n </TableRow>\n)\n\nexport default injectSheet(styles)(EntrySkeleton)\n","export default {\n center: {\n textAlign: 'center'\n },\n checkbox: {\n height: '20px',\n width: '20px',\n borderRadius: '4px'\n },\n date: {\n width: '80px'\n },\n conclusion: {\n width: '30px',\n height: '30px',\n borderRadius: '30px'\n },\n contextMenu: {\n width: '40px',\n height: '40px',\n borderRadius: '4px',\n display: 'inline-block'\n },\n contributors: {\n width: '82px',\n borderRadius: '30px'\n }\n}\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './assessment-skeleton.styles'\nimport { Table, HeadCell } from 'pobble-components/dist/table'\nimport Bone from 'pobble-components/dist/bone'\nimport EntrySkeleton from './entry-skeleton/entry-skeleton'\n\nconst AssessmentSkeleton = ({ classes }) => (\n <Table>\n <thead>\n <tr>\n <HeadCell className={classes.allCell}>\n <Bone className={classes.all} />\n </HeadCell>\n <HeadCell className={classes.dateCell}>\n <Bone className={classes.date} />\n </HeadCell>\n <HeadCell className={classes.titleCell}>\n <Bone className={classes.title} />\n </HeadCell>\n <HeadCell className={classes.contributorsCell}>\n <Bone className={classes.contributors} />\n </HeadCell>\n <HeadCell className={classes.conclusionCell}>\n <Bone className={classes.conclusion} />\n </HeadCell>\n <HeadCell className={classes.contextMenuCell}>\n <Bone className={classes.bulkAction} />\n </HeadCell>\n </tr>\n </thead>\n <tbody>\n <EntrySkeleton titleWidth={30} />\n <EntrySkeleton titleWidth={50} />\n <EntrySkeleton titleWidth={20} />\n <EntrySkeleton titleWidth={60} />\n <EntrySkeleton titleWidth={25} />\n </tbody>\n </Table>\n)\n\nexport default injectSheet(styles)(AssessmentSkeleton)\n","export default {\n allCell: {\n width: '60px'\n },\n all: {\n width: '30px'\n },\n dateCell: {\n width: '120px',\n textAlign: 'left'\n },\n date: {\n width: '40px'\n },\n title: {\n width: '50px'\n },\n titleCell: {\n textAlign: 'left'\n },\n contributorsCell: {\n textAlign: 'center',\n width: '145px'\n },\n conclusionCell: {\n width: '120px'\n },\n conclusion: {\n width: '80px'\n },\n contextMenuCell: {\n width: '93px'\n },\n bulkAction: {\n display: 'block',\n height: '40px',\n width: '93px',\n borderRadius: '4px'\n }\n}\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './info-message.styles'\nimport PaperclipIcon from 'react-icons/lib/fa/paperclip'\n\nconst InfoMessage = ({ classes, student, worksCount }) => (\n <p className={classes.message}>\n <PaperclipIcon className={classes.icon} />\n Moderation file with {worksCount} piece\n {worksCount > 1 ? 's' : ''} by {student} attached\n </p>\n)\n\nexport default injectSheet(styles)(InfoMessage)\n","export default ({ COLORS }) => ({\n message: {\n color: COLORS.TEXT.LIGHT_GREY.NORMAL,\n margin: '20px 0 0',\n display: 'flex',\n alignItems: 'center'\n },\n icon: {\n marginRight: '5px'\n }\n})\n","import { connect } from 'react-redux'\nimport InfoMessage from './info-message'\nimport { getAssessment } from '../../../../../../stores/assessment/assessment.selectors'\n\nconst mapStateToProps = (state, { id }) => {\n const assessmentFile = getAssessment(state, id)\n return {\n student:\n assessmentFile &&\n assessmentFile.student_type &&\n assessmentFile.student_type.account &&\n assessmentFile.student_type.account.full_name,\n worksCount:\n assessmentFile &&\n assessmentFile.works &&\n assessmentFile &&\n assessmentFile.works.length\n }\n}\n\nexport default connect(\n mapStateToProps,\n null\n)(InfoMessage)\n","import React, { useState } from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './assessment-invitation-modal.styles'\nimport {\n Modal,\n ModalHeader,\n ModalContent,\n ModalFooter\n} from 'pobble-components/dist/modal'\nimport Button from 'pobble-components/dist/button'\nimport EmailInput from 'pobble-components/dist/email-input'\nimport { ColorsInfo } from 'pobble-components/dist/email-input/utils'\nimport FormLabel from 'pobble-components/dist/form-elements/form-label'\nimport InfoMessage from './info-message/info-message.container'\nimport { useRecaptcha } from 'pobble-components/dist/recaptcha'\n\nconst AssessmentInvitationModal = ({\n classes,\n isOpen,\n onSubmit,\n requestClose,\n id\n}) => {\n const [selectedEmails, setSelectedEmails] = useState([])\n const [pending, setPending] = useState(false)\n\n const { Recaptcha, recaptchaProps, getReCaptchaToken } = useRecaptcha()\n\n return (\n <Modal isOpen={isOpen} closeButton requestClose={requestClose}>\n <ModalHeader>Invite contributors</ModalHeader>\n <ModalContent className={classes.modalContent}>\n <FormLabel spaceBetween small>\n To: {!!selectedEmails.length && <ColorsInfo />}\n </FormLabel>\n <EmailInput\n cacheKey=\"moderationInvitationEmailCache\"\n selected={selectedEmails}\n onChange={setSelectedEmails}\n />\n <InfoMessage id={id} />\n <Recaptcha {...recaptchaProps} />\n </ModalContent>\n <ModalFooter alignRight>\n <Button\n pending={pending}\n disabled={!selectedEmails.length}\n action={() => {\n setPending(true)\n getReCaptchaToken(token => {\n onSubmit(selectedEmails, token).then(() => {\n setSelectedEmails([])\n setPending(false)\n })\n })\n }}\n tall>\n {!pending && 'Send invitation'}\n {pending && 'Sending...'}\n </Button>\n </ModalFooter>\n </Modal>\n )\n}\n\nexport default injectSheet(styles)(AssessmentInvitationModal)\n","const isOpen = state => state.AssessmentStore.invitationAssessmentDialog.opened\n\nconst getAssessmentFileId = state =>\n state.AssessmentStore.invitationAssessmentDialog.id\n\nexport { isOpen, getAssessmentFileId }\n","import { connect } from 'react-redux'\nimport AssessementInvitationModal from './assessment-invitation-modal'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\nimport { getAssessmentFileId } from './assessement-invitation.selectors'\nimport {\n closeInvitationAssessmentDialog,\n inviteToAssessmentFile\n} from '../../../../../stores/assessment/assessment.actions'\nimport { isOpen } from './assessement-invitation.selectors'\nimport { toast } from 'pobble-components/dist/toast'\n\nconst mapStateToProps = state => {\n return {\n isOpen: isOpen(state),\n id: getAssessmentFileId(state)\n }\n}\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...stateProps,\n ...ownProps,\n requestClose: () => dispatch(closeInvitationAssessmentDialog()),\n onSubmit: (emails, token) =>\n dispatch(\n inviteToAssessmentFile(\n stateProps.id,\n emails.map(email => email.value),\n token\n )\n )\n .then(resp => {\n toast.success('Your invitation was sent.')\n return dispatch(closeInvitationAssessmentDialog())\n })\n .catch(errorHandler)\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n)(AssessementInvitationModal)\n","import React, { Component } from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './assessment.styles'\nimport ContentHolder from '../../../content-holder/content-holder'\nimport Paper from 'pobble-components/dist/paper'\nimport AssessmentsTable from './assessments-table/assessments-table.container'\nimport AssessmentSkeleton from './assessment-skeleton/assessment-skeleton'\nimport AssessementInvitationModal from './assessment-invitation-modal/assessment-invitation-modal.container'\n\nclass Assessment extends Component {\n componentDidMount() {\n this.props.onMount()\n }\n render() {\n const { classes, pending } = this.props\n return (\n <ContentHolder>\n <Paper className={classes.paper}>\n {pending && <AssessmentSkeleton />}\n {!pending && <AssessmentsTable />}\n </Paper>\n <AssessementInvitationModal />\n </ContentHolder>\n )\n }\n}\n\nexport default injectSheet(styles)(Assessment)\n","export default {\n paper: {\n minHeight: 'calc(100vh - 270px)',\n marginBottom: '20px'\n }\n}\n","import { connect } from 'react-redux'\nimport Assessment from './assessment'\nimport { fetchAssessmentFiles } from '../../../../stores/assessment/assessment.actions'\nimport { withRouter } from 'react-router-dom'\nimport { getFetchRequest } from '../../../../stores/assessment/assessment.selectors'\n\nconst mapsStateToProps = state => ({\n pending: getFetchRequest(state).pending\n})\n\nconst mapDispatchToProps = (dispatch, { match }) => ({\n onMount: () => dispatch(fetchAssessmentFiles(match.params.id))\n})\n\nexport default withRouter(\n connect(\n mapsStateToProps,\n mapDispatchToProps\n )(Assessment)\n)\n","import React, { Component } from 'react'\nimport styles from './pupil.styles'\nimport injectSheet from 'react-jss'\nimport PupilHead from './pupil-head/pupil-head.container'\nimport { Route } from 'react-router-dom'\nimport Profile from './profile/profile.container'\nimport Work from './work/work.container'\nimport Comments from './comments/comments.container'\nimport Assessment from './assessment/assessment.container'\n\nclass Pupil extends Component {\n componentDidMount() {\n window.scrollTo(0, 0)\n this.props.onMount()\n }\n render() {\n return (\n <div>\n <PupilHead />\n <Route exact path=\"/pupil/:id\" component={Profile} />\n <Route exact path=\"/pupil/:id/work\" component={Work} />\n <Route exact path=\"/pupil/:id/comments\" component={Comments} />\n <Route exact path=\"/pupil/:id/assessment\" component={Assessment} />\n </div>\n )\n }\n}\n\nexport default injectSheet(styles)(Pupil)\n","import { connect } from 'react-redux'\nimport Pupil from './pupil'\nimport { withRouter } from 'react-router-dom'\nimport { fetchPupil } from '../../../stores/pupil/pupil.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapDispatchToProps = (dispatch, { match }) => ({\n onMount: () => dispatch(fetchPupil(match.params.pupilId)).catch(errorHandler)\n})\n\nexport default withRouter(\n connect(\n null,\n mapDispatchToProps\n )(Pupil)\n)\n","import { apiGetStudent } from '../../common/api/student-management'\n\nconst fetchPupil = id => ({\n requestPrefix: 'PUPIL_STORE:FETCHING',\n params: { id },\n request: () =>\n apiGetStudent(id, {\n include: 'account.names,account.student_type.policy'\n })\n})\n\nexport { fetchPupil }\n","export const printPageStyles = {\n container: {\n position: 'fixed',\n height: '100%',\n width: '100%',\n opacity: '0',\n color: '#000',\n '@media print': {\n position: 'static',\n opacity: '1'\n }\n },\n page: {\n tableLayout: 'fixed',\n height: '100vh',\n fontSize: '15px',\n fontWeight: 'bold',\n borderCollapse: 'collapse',\n background: '#fff',\n width: '100%',\n '& td': {\n height: '25%'\n }\n },\n item: {\n padding: '1.18em 2em 2em',\n border: '1px solid #000'\n },\n label: {\n fontSize: '.8em',\n fontWeight: 'normal'\n },\n nameField: {\n padding: '0 0 .4em',\n margin: '0 0 .8em',\n '& $label': {\n display: 'block'\n }\n },\n name: {\n fontSize: '2em'\n },\n passcode: {\n margin: '.5em 0 0',\n display: 'flex',\n '& > *': {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '1.6em',\n height: '2.4em',\n width: '2.4em',\n borderRadius: '.4em',\n border: '1px solid #000',\n marginRight: '.6em'\n }\n },\n fullName: {\n fontSize: '.8em',\n lineHeight: '1.4',\n borderBottom: '1px solid #000',\n marginBottom: '3em',\n display: 'inline-block'\n }\n}\n\nexport const printPasscodesStyles = ({ FONT_SIZES, COLORS }) => ({\n content: {\n minWidth: '460px',\n maxWidth: '460px',\n padding: '0',\n '@media (max-width: 575px)': {\n minWidth: 'auto'\n }\n },\n img: {\n borderRadius: '6px 6px 0 0',\n overflow: 'hidden',\n padding: '0 0 54.5%',\n position: 'relative',\n '& img': {\n position: 'absolute',\n left: '0',\n top: '0',\n width: '100%'\n }\n },\n desc: {\n height: '200px',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n '& h2': {\n ...FONT_SIZES.HEADING_LARGE.STYLE,\n margin: '0 0 10px',\n color: '#000'\n },\n '& p': {\n margin: '0'\n }\n },\n button: {\n margin: '20px auto 0',\n paddingLeft: '20px',\n paddingRight: '20px'\n },\n closeButton: {\n fontSize: '17px',\n right: '20px',\n top: '20px',\n color: '#fff',\n position: 'absolute',\n zIndex: '100'\n }\n})\n","import React, { useEffect, useMemo, useRef, useState } from 'react'\nimport injectSheet from 'react-jss'\nimport { printPageStyles, printPasscodesStyles } from './print-passcodes.styles'\nimport { Modal, ModalContent } from 'pobble-components/dist/modal'\nimport Button from 'pobble-components/dist/button'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faPrint } from '@fortawesome/pro-solid-svg-icons/faPrint'\nimport { faTimesCircle } from '@fortawesome/pro-solid-svg-icons/faTimesCircle'\nimport { apiGetAccount } from '../../common/api/profile'\nimport { useReactToPrint } from 'react-to-print'\nimport printPasscodesImg from '../../common/images/print-passcodes.png'\nimport ButtonElement from 'pobble-components/dist/button-element'\n\nexport const usePasscodesPrint = ({ ids, accounts, onAfterPrint } = {}) => {\n const [pupils, setPupils] = useState(null)\n const [printInProgress, setPrintInProgress] = useState(false)\n const componentRef = useRef(null)\n\n const pupilsPages = useMemo(\n () => {\n if (!pupils) return null\n const pupilsPerPage = 8\n const result = []\n for (let i = 0; i < pupils.length; i += pupilsPerPage) {\n let page = pupils.slice(i, i + pupilsPerPage)\n if (page.length < pupilsPerPage)\n page = [...page, ...new Array(pupilsPerPage - page.length)]\n result.push(page)\n }\n return result\n },\n [pupils]\n )\n\n useEffect(\n () => {\n if (accounts) {\n setPupils(accounts)\n }\n },\n [accounts]\n )\n\n useEffect(\n () => {\n if (ids && !!ids.length) {\n Promise.all(\n ids.map(id =>\n apiGetAccount(id, {\n include: 'account.names,account.student_type.passcode'\n }).then(res => res.data.account)\n )\n ).then(setPupils)\n }\n },\n [ids]\n )\n\n const handlePrint = useReactToPrint({\n onAfterPrint: () => {\n setPrintInProgress(false)\n onAfterPrint && onAfterPrint()\n },\n copyStyles: true,\n pageStyle:\n '@page { size: portrait; margin: 0mm; } @media print { body { -webkit-print-color-adjust: exact; } }\"',\n content: () => componentRef.current\n })\n\n const print = () => {\n setPrintInProgress(true)\n setTimeout(handlePrint, 1000)\n }\n\n const PrintComponent = injectSheet(printPageStyles)(({ classes }) => {\n const renderItem = pupil =>\n !pupil ? (\n <td />\n ) : (\n <td className={classes.item}>\n <p className={classes.fullName}>{pupil.full_name}</p>\n <div className={classes.nameField}>\n <span className={classes.label}>Name</span>\n <span className={classes.name}>{pupil.first_name}</span>\n </div>\n <div>\n <span className={classes.label}>Passcode</span>\n <div className={classes.passcode}>\n {pupil.student_type.passcode.split('').map(number => (\n <span>{number}</span>\n ))}\n </div>\n </div>\n </td>\n )\n return !printInProgress ? null : (\n <div className={classes.container} ref={componentRef}>\n {pupilsPages.map(page => {\n return (\n <table className={classes.page}>\n <tbody>\n {page.map((pupil, index) => {\n const nextPupil = page[index + 1]\n return (\n index % 2 === 0 && (\n <tr>\n {renderItem(pupil)}\n {renderItem(nextPupil)}\n </tr>\n )\n )\n })}\n </tbody>\n </table>\n )\n })}\n </div>\n )\n })\n return { PrintComponent, print, printInProgress, pupils }\n}\n\nconst PrintPasscodes = injectSheet(printPasscodesStyles)(\n ({ classes, ids, requestClose }) => {\n const {\n print,\n PrintComponent,\n printInProgress,\n pupils\n } = usePasscodesPrint({\n ids,\n onAfterPrint: () => requestClose()\n })\n\n return (\n !!ids && (\n <ModalContent legacy className={classes.content}>\n <ButtonElement onClick={requestClose} className={classes.closeButton}>\n <FontAwesomeIcon icon={faTimesCircle} />\n </ButtonElement>\n <div className={classes.img}>\n <img src={printPasscodesImg} alt=\"Print pupil passcodes\" />\n </div>\n <div className={classes.desc}>\n <h2>Print pupil passcodes</h2>\n <p>\n You are about to print {ids.length} passcode\n {ids.length > 1 && 's'}\n </p>\n <Button\n action={print}\n icon={<FontAwesomeIcon icon={faPrint} />}\n disabled={!pupils}\n pending={!pupils || printInProgress}\n className={classes.button}\n tall>\n Print\n </Button>\n </div>\n <PrintComponent />\n </ModalContent>\n )\n )\n }\n)\n\nexport const PrintPasscodesDialog = ({\n classes,\n isOpen,\n requestClose,\n ...props\n}) => {\n return (\n <Modal closeButton isOpen={isOpen} requestClose={requestClose}>\n <PrintPasscodes {...props} requestClose={requestClose} />\n </Modal>\n )\n}\n","import React, { useState, Fragment, useEffect, useMemo } from 'react'\nimport injectSheet from 'react-jss'\nimport Head from '../../head/head'\nimport BackToPupils from '../../back-to-pupils/back-to-pupils'\nimport HeadTitle from '../../head-title/head-title'\nimport Paper from 'pobble-components/dist/paper'\nimport classNames from 'classnames'\nimport FormLabel from 'pobble-components/dist/form-elements/form-label'\nimport FormInput from 'pobble-components/dist/form-elements/form-input'\nimport FormRow from 'pobble-components/dist/form-elements/form-row'\nimport FormSelect from 'pobble-components/dist/form-elements/form-select'\nimport { apiGetYearGroups } from '../../../common/api/year-groops'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\nimport Bone from 'pobble-components/dist/bone'\nimport Button from 'pobble-components/dist/button'\nimport {\n apiCreateStudent,\n apiParseCsvOfStudents\n} from '../../../common/api/student-management'\nimport { useMe } from 'pobble-components/dist/pobble-user'\nimport { Modal, ModalContent } from 'pobble-components/dist/modal'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faSave } from '@fortawesome/pro-solid-svg-icons/faSave'\nimport { faTimesCircle } from '@fortawesome/pro-solid-svg-icons/faTimesCircle'\nimport { faPrint } from '@fortawesome/pro-solid-svg-icons/faPrint'\nimport { faInfoCircle } from '@fortawesome/pro-solid-svg-icons/faInfoCircle'\nimport pupilsImg from './pupils.png'\nimport FormFile from 'pobble-components/dist/form-elements/form-file'\nimport { URLS } from 'pobble-components/dist/setup'\nimport ButtonElement from 'pobble-components/dist/button-element'\nimport printPasscodesImg from '../../../common/images/print-passcodes.png'\nimport { usePasscodesPrint } from '../../print-passcodes/print-passcodes'\nimport Tooltip from 'pobble-components/dist/tooltip'\nimport PobbleLink from 'pobble-components/dist/pobble-link'\nimport { Link } from 'react-router-dom'\n\nconst ResultModal = injectSheet(({ FONT_SIZES, COLORS }) => ({\n content: {\n minWidth: '460px',\n maxWidth: '460px',\n padding: '0',\n '@media (max-width: 575px)': {\n minWidth: 'auto'\n }\n },\n img: {\n borderRadius: '6px 6px 0 0',\n overflow: 'hidden',\n padding: '0 0 54.5%',\n position: 'relative',\n '& img': {\n position: 'absolute',\n left: '0',\n top: '0',\n width: '100%'\n }\n },\n desc: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n padding: '30px',\n textAlign: 'center',\n '& h2': {\n color: COLORS.TEXT.MID_GREY.NORMAL,\n ...FONT_SIZES.HEADING_BIG.STYLE,\n margin: '0 0 10px',\n '@media (min-width: 541px)': {\n ...FONT_SIZES.HEADING_LARGE.STYLE\n }\n },\n '& p': {\n margin: '0'\n }\n },\n buttons: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n marginTop: '20px',\n '& >:first-child': {\n marginBottom: '10px'\n }\n },\n closeButton: {\n fontSize: '17px',\n right: '20px',\n top: '20px',\n color: '#fff',\n position: 'absolute',\n zIndex: '100'\n },\n hint: {\n ...FONT_SIZES.BODY_SMALL.STYLE,\n color: COLORS.TEXT.MID_GREY.NORMAL,\n margin: '6px 0'\n },\n link: {\n textDecoration: 'none'\n }\n}))(({ classes, onPrint, accounts, ...props }) => {\n const { pupils, printInProgress, PrintComponent, print } = usePasscodesPrint({\n accounts,\n onAfterPrint: () => props.requestClose()\n })\n\n return (\n <Modal {...props}>\n <ModalContent legacy className={classes.content}>\n <ButtonElement\n onClick={props.requestClose}\n className={classes.closeButton}>\n <FontAwesomeIcon icon={faTimesCircle} />\n </ButtonElement>\n <div className={classes.desc}>\n <h2>Your pupils have been saved</h2>\n <div className={classes.buttons}>\n <Link className={classes.link} to={'/'}>\n <PobbleLink>Close and return to My Pupils</PobbleLink>\n </Link>\n </div>\n </div>\n <PrintComponent />\n </ModalContent>\n </Modal>\n )\n})\n\nconst LayoutHolder = injectSheet({\n holder: {\n maxWidth: '780px',\n margin: '0 auto',\n padding: '0 20px'\n }\n})(({ classes, className, children, ...props }) => (\n <div className={classNames(classes.holder, className)} {...props}>\n {children}\n </div>\n))\n\nconst PupilsTable = injectSheet(({ COLORS }) => ({\n info: {\n color: '#ccc',\n margin: '0 3px 0 0'\n },\n ageLabel: {\n display: 'flex',\n alignItems: 'center'\n },\n labelRow: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n holder: {\n '@media (min-width: 541px)': {\n display: 'grid',\n width: '100%',\n gridTemplateColumns: '1fr 1fr 1fr',\n gap: '20px',\n '& > *': {\n margin: '0'\n }\n }\n },\n title: {\n fontSize: '18px',\n lineHeight: '22px',\n color: COLORS.TEXT.MID_GREY.NORMAL,\n marginTop: '5px'\n },\n intro: {\n marginBottom: '30px'\n },\n link: {\n textDecoration: 'none',\n fontWeight: 'bold',\n color: COLORS.BLUE.NORMAL\n },\n separator: {\n margin: '25px -20px 20px',\n borderBottom: '1px solid #ededed',\n '@media (min-width: 541px)': {\n display: 'none'\n }\n }\n}))(({ data, classes, onChange, yearGroups, canEnableProvider }) => {\n const { me } = useMe()\n return (\n <Fragment>\n <div className={classes.intro}>\n <h3 className={classes.title}>Recommended for individual classes</h3>\n <p>\n Manually add your pupils below via the form below, or via CSV, then\n manually \n <Link className={classes.link} to={'/groups'}>\n create your groups\n </Link>\n .\n {me.account.policy.view_school_tab && (\n <span>\n {' '}\n Alternatively,{' '}\n <PobbleLink href=\"/account/school/data\">\n sync your pupils and groups to Pobble\n </PobbleLink>{' '}\n from your MIS via our partner Wonde.\n </span>\n )}\n </p>\n </div>\n <div className={classes.holder}>\n {data.map((item, index) => {\n return (\n <Fragment key={index}>\n {!!index && <div className={classes.separator} />}\n <FormRow>\n <FormLabel required small>\n First Name\n </FormLabel>\n <FormInput\n required={!item.isEmpty}\n value={item.fields.firstName || ''}\n onChange={e => {\n onChange(index, 'firstName', e.target.value)\n }}\n placeholder=\"Add first name\"\n />\n </FormRow>\n <FormRow>\n <FormLabel required small>\n Last Name\n </FormLabel>\n <FormInput\n required={!item.isEmpty}\n value={item.fields.lastName || ''}\n onChange={e => {\n onChange(index, 'lastName', e.target.value)\n }}\n placeholder=\"Add last name\"\n />\n </FormRow>\n <FormRow>\n <FormLabel className={classes.ageLabel} required small>\n <Tooltip\n className={classes.info}\n content=\"Please assign pupils to the age group they belong to this school year e.g. for Year 6 use age 10-11.\">\n <span>\n <FontAwesomeIcon icon={faInfoCircle} />\n </span>\n </Tooltip>\n Age Group\n </FormLabel>\n\n {yearGroups && (\n <FormSelect\n required={!item.isEmpty}\n value={item.fields.ageGroup || ''}\n onChange={e => {\n onChange(index, 'ageGroup', e.target.value)\n }}>\n <option value={''} default>\n Select age group\n </option>\n {yearGroups.map(yg => {\n return (\n <option key={yg.id} value={yg.id}>\n {yg.title}\n </option>\n )\n })}\n </FormSelect>\n )}\n {!yearGroups && <Bone btn />}\n </FormRow>\n </Fragment>\n )\n })}\n </div>\n </Fragment>\n )\n})\n\nconst ActionBar = injectSheet({\n container: {\n height: '80px',\n position: 'fixed',\n bottom: '0',\n background: '#fff',\n boxShadow: '0 -2px 4px 0 rgba(0, 0, 0, 0.1)',\n width: '100%',\n transform: 'translateY(100px)',\n transition: 'transform .3s'\n },\n show: {\n transform: 'translateY(0)'\n },\n holder: {\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n height: '100%',\n '& span': {\n marginRight: '16px'\n }\n }\n})(({ classes, data, pending }) => {\n return (\n <div\n className={classNames(classes.container, {\n [classes.show]: !!data.length\n })}>\n <LayoutHolder className={classes.holder}>\n <span>\n You are about to add {data.length} pupil\n {data.length > 1 && 's'}\n </span>\n <Button\n tall\n type=\"submit\"\n pending={pending}\n icon={<FontAwesomeIcon icon={faSave} />}>\n Save pupils\n </Button>\n </LayoutHolder>\n </div>\n )\n})\n\nconst addFormItemDetails = item => {\n const filledFileds = Object.keys(item.fields).filter(\n key => !!item.fields[key]\n ).length\n item.isEmpty = !item.fields.firstName && !item.fields.lastName\n item.isComplete = filledFileds === 3\n return item\n}\n\nconst AddPupils = injectSheet(({ COLORS, FONT_SIZES }) => ({\n container: {\n paddingBottom: '100px'\n },\n head: {\n height: 'auto',\n padding: '20px 0',\n position: 'relative'\n },\n backToPupils: {\n position: 'absolute',\n left: '20px',\n top: '30px'\n },\n card: {\n borderRadius: '6px',\n background: '#fff',\n boxShadow: '0 6px 12px rgba(0, 0, 0, 0.1)',\n overflow: 'hidden',\n margin: '0 0 30px',\n '& img': {\n height: '200px',\n width: '100%',\n objectFit: 'cover',\n '@media (min-width: 541px)': {\n width: '176px',\n height: 'auto'\n }\n },\n '@media (min-width: 541px)': {\n display: 'flex',\n flexDirection: 'row-reverse'\n }\n },\n mobileBreak: {\n '@media (min-width: 541px)': {\n display: 'none'\n }\n },\n cardDesc: {\n flex: '1',\n padding: '22px',\n '& h2': {\n ...FONT_SIZES.HEADING_MEDIUM.STYLE,\n color: COLORS.TEXT.MID_GREY.NORMAL,\n margin: '0 0 20px',\n '@media (min-width: 541px)': {\n ...FONT_SIZES.HEADING_BIG.STYLE\n }\n },\n '& ul': {\n margin: '0',\n padding: '0',\n listStyleType: 'none',\n '& li': {\n marginBottom: '16px',\n position: 'relative',\n padding: '0 0 0 20px',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n left: '0',\n top: '6px',\n width: '5px',\n height: '5px',\n borderRadius: '5px',\n background: COLORS.BLUE.NORMAL\n }\n }\n }\n },\n safetyHint: {\n margin: '24px 0',\n color: 'var(--grey)',\n font: 'var(--body-)'\n },\n csv: {\n marginTop: '20px',\n color: COLORS.TEXT.MID_GREY.NORMAL,\n '& a': {\n color: COLORS.TEXT.MID_GREY.NORMAL,\n textDecoration: 'underline'\n },\n '& label': {\n cursor: 'pointer',\n color: COLORS.BLUE.NORMAL,\n fontWeight: 'bold'\n }\n }\n}))(({ classes }) => {\n const [data, setData] = useState([{ fields: {}, isEmpty: true }])\n const [yearGroups, setYearGroups] = useState(null)\n const [savedPupils, setSavedPupils] = useState([])\n const [resultModalState, setResultModalState] = useState({\n open: false\n })\n const [addingPupils, setAddingPupils] = useState(false)\n const finalData = useMemo(\n () => {\n return data.filter(item => !item.isEmpty)\n },\n [data]\n )\n\n const { me } = useMe()\n\n const schoolId = me.account.teacher_type.school.id\n const canEnableProvider = me.account.policy.enable_pull_provider\n\n useEffect(() => {\n apiGetYearGroups({\n include: 'year_group.names,year_group.order'\n })\n .then(res => setYearGroups(res.data.year_groups))\n .catch(errorHandler)\n }, [])\n\n return (\n <div className={classes.container}>\n <Head className={classes.head}>\n <BackToPupils className={classes.backToPupils} />\n <HeadTitle>Add pupils</HeadTitle>\n </Head>\n <LayoutHolder>\n <div className={classes.card}>\n <img src={pupilsImg} alt=\"Students in class\" />\n <div className={classes.cardDesc}>\n <h2>Add your pupils to Pobble if you are planning to...</h2>\n <ul>\n <li>publish your children's writing.</li>\n <li>create writing moderation files.</li>\n <li>use our pupil logins so children can access Pobble.</li>\n </ul>\n </div>\n </div>\n </LayoutHolder>\n <form\n onSubmit={e => {\n e.preventDefault()\n setAddingPupils(true)\n Promise.all(\n finalData.map(item => {\n return apiCreateStudent(\n schoolId,\n {\n first_name: item.fields.firstName,\n last_name: item.fields.lastName,\n year_group_id: item.fields.ageGroup\n },\n {\n include: 'account.names,account.student_type.passcode'\n }\n ).catch(e => false)\n })\n ).then(result => {\n setAddingPupils(false)\n const errors = []\n const saved = []\n result.forEach((item, index) => {\n if (!item) {\n errors.push(data[index])\n } else {\n saved.push(item.data.account)\n }\n })\n setResultModalState({\n open: true\n })\n setSavedPupils(saved)\n setData(!errors.length ? [{ fields: {}, isEmpty: true }] : errors)\n })\n }}>\n <LayoutHolder>\n <Paper>\n <PupilsTable\n yearGroups={yearGroups}\n data={data}\n canEnableProvider={canEnableProvider}\n onChange={(i, field, value) => {\n const dataCopy = [...data]\n const dataItem = dataCopy[i]\n dataItem.fields[field] = value\n addFormItemDetails(dataItem)\n if (dataItem.isComplete && !data[i + 1]) {\n dataCopy[i + 1] = {\n fields: { ageGroup: dataItem.fields.ageGroup },\n isEmpty: true\n }\n }\n setData(dataCopy)\n }}\n />\n <div className={classes.csv}>\n Or use{' '}\n <a href={`${URLS.DASHBOARD}/files/PobbleStudentTemplate.csv`}>\n our template\n </a>{' '}\n to \n <FormFile\n onChange={files => {\n if (!files.length) return\n apiParseCsvOfStudents({\n school_id: schoolId,\n student_details_csv: files[0]\n }).then(res => {\n const newData = res.data.student_details.map(item =>\n addFormItemDetails({\n fields: {\n firstName: item.first_name,\n lastName: item.last_name,\n ageGroup: item.year_group_id\n }\n })\n )\n const oldData = data.slice(0, data.length - 1)\n const lastField = data[data.length - 1]\n setData([...oldData, ...newData, lastField])\n })\n }}\n accept=\".csv\">\n <span>Upload CSV file</span>\n </FormFile>\n </div>\n </Paper>\n {me.account.policy.view_school_tab && (\n <p className={classes.safetyHint}>\n Pobble is a safe space. You can always review who has access to\n your pupil data on your{' '}\n <PobbleLink href=\"/account/school/team\">Team page</PobbleLink>\n </p>\n )}\n </LayoutHolder>\n <ActionBar pending={addingPupils} data={finalData} />\n </form>\n <ResultModal\n accounts={savedPupils}\n isOpen={resultModalState.open}\n requestClose={() =>\n setResultModalState({ ...resultModalState, open: false })\n }\n />\n </div>\n )\n})\n\nexport default AddPupils\n","const styles = {\n schoolTitle: {\n textAlign: 'center',\n margin: '0'\n },\n navContianer: {\n display: 'flex',\n justifyContent: 'center',\n position: 'absolute',\n left: '0',\n bottom: '0',\n width: '100%'\n }\n}\n\nexport default styles\n","import React from 'react'\nimport HeadNav from '../../head-nav/head-nav'\nimport HeadNavLink from '../../head-nav/head-nav-link/head-nav-link'\n\nconst Nav = ({ classes, className }) => (\n <HeadNav>\n <HeadNavLink path=\"/groups\">Groups</HeadNavLink>\n <HeadNavLink path=\"/\">Pupils</HeadNavLink>\n </HeadNav>\n)\n\nexport default Nav\n","import React from 'react'\nimport styles from './school-head-title.styles'\nimport injectSheet from 'react-jss'\nimport HeadTitle from '../../head-title/head-title'\n\nconst SchoolHead = ({ classes, title, className }) => (\n <HeadTitle className={className}>{title}</HeadTitle>\n)\n\nexport default injectSheet(styles)(SchoolHead)\n","import { connect } from 'react-redux'\nimport SchoolHeadTitle from './school-head-title'\nimport { withMe } from 'pobble-components/dist/pobble-user'\nimport { getSchool } from '../../../stores/me/me.selectors'\n\nconst mapStateToProps = (state, { me }) => ({\n title: getSchool(me).title\n})\n\nexport default withMe(\n connect(\n mapStateToProps,\n null\n )(SchoolHeadTitle)\n)\n","import React from 'react'\nimport styles from './school-head.styles'\nimport injectSheet from 'react-jss'\nimport Nav from './nav/nav'\nimport Head from '../head/head'\nimport SchoolHeadTitle from './school-head-title/school-head-title.container'\n\nconst SchoolHead = ({ classes, title }) => (\n <Head>\n <SchoolHeadTitle />\n <div className={classes.navContianer}>\n <Nav />\n </div>\n </Head>\n)\n\nexport default injectSheet(styles)(SchoolHead)\n","const styles = {\n pageHolder: {\n paddingBottom: '80px'\n }\n}\n\nexport default styles\n","const styles = ({ COLORS, FONT_SIZES }) => ({\n pupilsMessage: {\n padding: '10px 0',\n margin: '30px 0 0',\n border: '1px solid #ECECEC',\n borderLeft: 'none',\n borderRight: 'none',\n color: COLORS.TEXT.MID_GREY.NORMAL,\n ...FONT_SIZES.BODY_LARGE.STYLE\n },\n topPanel: {\n margin: '0 0 20px',\n display: 'flex',\n flexDirection: 'row'\n },\n searchHolder: {\n flex: '1'\n },\n filterControlsContainer: {\n margin: '0 0 15px'\n },\n addPupilHolder: {\n padding: '0 0 0 15px',\n margin: '0 0 0 15px',\n position: 'relative',\n '&:after': {\n position: 'absolute',\n content: '\"\"',\n height: '30px',\n top: '5px',\n left: '0',\n width: '1px',\n backgroundColor: '#ddd'\n }\n },\n showingSelectedHolder: {\n display: 'flex',\n alignItems: 'center',\n margin: '0 0 15px'\n },\n showAllPupils: {\n fontWeight: 'bold',\n color: COLORS.BLUE.NORMAL,\n cursor: 'pointer',\n margin: '0 0 0 5px'\n }\n})\n\nexport default styles\n","const styles = ({ FONT_SIZES, COLORS }) => ({\n container: {\n listStyle: 'none',\n padding: '0',\n margin: '0',\n display: 'flex',\n flexDirection: 'row',\n fontSize: '16px',\n '& li': {\n padding: '0 0 0 40px',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n width: '5px',\n height: '5px',\n borderRadius: '100%',\n backgroundColor: '#DDDDDD',\n position: 'absolute',\n left: '18px',\n top: '7px'\n },\n '&:first-child': {\n padding: '0',\n '&:after': {\n display: 'none'\n }\n }\n }\n },\n title: {\n fontWeight: 'bold',\n margin: '0 5px 0'\n },\n firstGroup: {\n color: COLORS.TEXT.DARK_GREY.NORMAL\n },\n otherGroups: {\n margin: '0 0 0 5px',\n color: COLORS.TEXT.DARK_GREY.NORMAL\n },\n actionLink: {\n color: COLORS.BLUE.NORMAL,\n cursor: 'pointer'\n }\n})\n\nexport default styles\n","import React, { Fragment } from 'react'\nimport styles from './pupils-filter-controls.styles'\nimport injectSheet from 'react-jss'\n\nconst PupilsFilterControls = ({\n classes,\n selectedGroups,\n onEdit,\n onReset,\n onSelectGroups\n}) => (\n <ul className={classes.container}>\n {!selectedGroups.length && (\n <li>\n <span className={classes.actionLink} onClick={onSelectGroups}>\n Select groups\n </span>\n </li>\n )}\n {!!selectedGroups.length && (\n <Fragment>\n <li>\n <span className={classes.title}>Groups selected:</span>\n <span className={classes.firstGroup}>\n {selectedGroups[0] && selectedGroups[0].title}\n </span>\n {selectedGroups.length > 1 && (\n <span className={classes.otherGroups}>\n and {selectedGroups.length - 1} other\n {selectedGroups.length > 2 ? 's' : ''}\n </span>\n )}\n </li>\n <li>\n <span className={classes.actionLink} onClick={onEdit}>\n Edit\n </span>\n </li>\n <li>\n <span className={classes.actionLink} onClick={onReset}>\n Reset\n </span>\n </li>\n </Fragment>\n )}\n </ul>\n)\n\nexport default injectSheet(styles)(PupilsFilterControls)\n","import { createSelector } from 'reselect'\n\nconst getData = (state, selector) => {\n const data = state.PupilsStore ? state.PupilsStore : state\n return !data ? null : selector(data)\n}\n\nconst getPupilsFetchingStatus = state => getData(state, data => data.fetching)\n\nconst getPupils = state =>\n getData(state, data => (data.pupils ? data.pupils.entities.pupils : null))\n\nconst getPupil = (state, id) =>\n getData(state, data => (data.pupils ? data.pupils.entities.pupils[id] : null))\n\nconst getPupilsResultArray = state =>\n getData(state, data => (data.pupils ? data.pupils.result : null))\n\nconst getPupilsUpdatingStatuses = state => getData(state, data => data.updating)\nconst getPupilsDeletingStatuses = state => getData(state, data => data.deleting)\nconst getPupilsCreatingStatuses = state => getData(state, data => data.creating)\nconst getPupilsCreatingBatchStatus = state =>\n getData(\n state,\n data =>\n data.creatingBatch || {\n pending: false,\n requestError: false\n }\n )\n\nconst getPupilUpdatingStatus = (state, id) =>\n getPupilsUpdatingStatuses(state)[id] || {\n pending: false,\n requestError: false\n }\n\nconst getPupilDeletingStatus = (state, id) =>\n getPupilsDeletingStatuses(state)[id] || {\n pending: false,\n requestError: false\n }\n\nconst getPupilCreatingStatus = (state, id) =>\n getPupilsCreatingStatuses(state)[id] || {\n pending: false,\n requestError: false\n }\n\nconst getPupilAddingToGroupStatus = (state, id) =>\n getData(\n state,\n data => data.addingToGroup[id] || { pending: false, requestError: false }\n )\n\nconst getPupilRemovingFromGroupStatus = (state, id) =>\n getData(\n state,\n data =>\n data.removingFromGroup[id] || { pending: false, requestError: false }\n )\n\nconst getPupilIncrementingAgeGroupStatus = (state, id) =>\n getData(\n state,\n data => data.incrementingAge[id] || { pending: false, requestError: false }\n )\n\nconst getPupilsArray = createSelector(\n [getPupils, getPupilsResultArray],\n (pupils, result) => (result ? result.map(id => pupils[id]) : [])\n)\n\nexport {\n getPupils,\n getPupilsArray,\n getPupilsFetchingStatus,\n getPupil,\n getPupilUpdatingStatus,\n getPupilDeletingStatus,\n getPupilCreatingStatus,\n getPupilAddingToGroupStatus,\n getPupilRemovingFromGroupStatus,\n getPupilIncrementingAgeGroupStatus,\n getPupilsCreatingBatchStatus\n}\n","import { createSelector } from 'reselect'\nimport {\n getPupilsArray,\n getPupils\n} from '../../../stores/pupils/pupils.selectors'\nimport {\n getGroups,\n getGroupsArray\n} from '../../../stores/groups/groups.selectors'\nimport orderBy from 'lodash/orderBy'\n\nconst getData = (state, selector) => {\n const data = state.PupilsComponent ? state.PupilsComponent : state\n return !data ? null : selector(data)\n}\n\nconst getSelectedPupils = state => getData(state, data => data.selectedPupils)\n\nconst getSelectedGroupsCategory = state =>\n getData(state, data => data.selectedGroupsCategory)\n\nconst isPupilSelected = (state, id) => !!getSelectedPupils(state)[id]\n\nconst getSortBy = state => getData(state, data => data.sortBy)\n\nconst getSearchValue = state => getData(state, data => data.searchValue)\n\nconst getFilterDialogOpened = state =>\n getData(state, data => data.filterDialogOpened)\n\nconst getSelectedGroups = state => getData(state, data => data.selectedGroups)\n\nconst getSelectedGroupsTemp = state =>\n getData(state, data => data.selectedGroupsTemp)\n\nconst isGroupSelected = (state, id) => getSelectedGroupsTemp(state)[id] || false\n\nconst getVisiblePupilsLength = state =>\n getData(state, data => data.visiblePupils)\n\nconst isShowingSelected = state => getData(state, data => data.showSelected)\n\nconst getSelectedGroupsArray = createSelector(\n [getSelectedGroups, getGroups],\n (selectedGroups, groups) => {\n if (\n !groups ||\n Object.keys(selectedGroups).length > Object.keys(groups).length\n )\n return []\n return Object.keys(selectedGroups)\n .filter(id => selectedGroups[id])\n .map(id => groups[id])\n }\n)\n\nconst getSelectedPupilsIdsArray = createSelector(\n [getSelectedPupils],\n selectedPupils => {\n let selected = []\n Object.keys(selectedPupils).forEach(\n id => selectedPupils[id] && selected.push(id)\n )\n return selected\n }\n)\n\nconst getSelectedPupilsArray = createSelector(\n [getPupils, getSelectedPupilsIdsArray],\n (pupils, ids) => ids.map(id => pupils[id])\n)\n\nconst getSelectedPupilsLength = createSelector(\n [getSelectedPupils],\n selectedPupils => Object.keys(selectedPupils).length\n)\n\nconst getFilteredPeopleByGroups = createSelector(\n [getSelectedGroups, getPupilsArray],\n (selectedGroups, pupils) =>\n !Object.keys(selectedGroups).length\n ? pupils\n : pupils.filter(\n pupil => pupil.groups.filter(group => selectedGroups[group.id]).length\n )\n)\n\nconst getFilteredPeopleBySearch = createSelector(\n [getSearchValue, getFilteredPeopleByGroups],\n (searchValue, pupils) =>\n searchValue.length < 2\n ? pupils\n : pupils.filter(\n pupil =>\n pupil.account.full_name\n .toLowerCase()\n .indexOf(searchValue.toLowerCase()) !== -1\n )\n)\n\nconst getPupilsConditionally = createSelector(\n [getFilteredPeopleBySearch, isShowingSelected, getSelectedPupilsArray],\n (filteredPupils, isShowingSelected, selectedPupils) =>\n isShowingSelected ? selectedPupils : filteredPupils\n)\n\nconst getSortedPupils = createSelector(\n [getSortBy, getPupilsConditionally],\n (sort, pupilsArray) => {\n if (!sort.key) return pupilsArray\n const propsMap = {\n name: pupil =>\n pupil.account.full_name && pupil.account.full_name.toLowerCase(),\n age: pupil => pupil.year_group && pupil.year_group.order,\n permission: pupil => pupil.policy.can_publish,\n displayName: pupil =>\n pupil.account.display_name && pupil.account.display_name.toLowerCase()\n }\n return orderBy(pupilsArray, propsMap[sort.key], sort.direction)\n }\n)\n\nconst isEveryoneSelected = createSelector(\n [getSelectedPupilsLength, getSortedPupils],\n (selectedPupilsLength, pupils) =>\n selectedPupilsLength === pupils.length ? true : false\n)\n\nconst getPupilsWithAllFilters = createSelector(\n [getVisiblePupilsLength, getSortedPupils],\n (visiblePupilsLength, sortedPupils) =>\n sortedPupils.slice(0, visiblePupilsLength)\n)\n\nconst isThereHiddenPupils = createSelector(\n [getVisiblePupilsLength, getSortedPupils],\n (visiblePupilsLength, sortedPupils) =>\n visiblePupilsLength < sortedPupils.length\n)\n\nconst getFilteredGroups = createSelector(\n [getSelectedGroupsCategory, getGroupsArray],\n (selectedCategory, groups) =>\n selectedCategory === 'ALL'\n ? groups\n : groups.filter(group => group.category === selectedCategory)\n)\n\nexport {\n isShowingSelected,\n getSelectedPupils,\n isPupilSelected,\n getSelectedPupilsLength,\n isEveryoneSelected,\n getSortedPupils,\n getPupilsWithAllFilters,\n getSortBy,\n getSearchValue,\n getFilteredPeopleBySearch,\n getFilterDialogOpened,\n getSelectedGroups,\n getSelectedGroupsTemp,\n getSelectedGroupsArray,\n isThereHiddenPupils,\n getSelectedPupilsIdsArray,\n getSelectedPupilsArray,\n isGroupSelected,\n getSelectedGroupsCategory,\n getFilteredGroups\n}\n","import { getSortedPupils } from './pupils-component.selectors'\n\nconst setPupilSelectStatus = (id, status) => ({\n type: 'PUPILS_COMPONENT:SET_SELECT_STATUS',\n id,\n status\n})\n\nconst setPupilSelectStatuses = statuses => ({\n type: 'PUPILS_COMPONENT:SET_SELECT_STATUSES',\n statuses\n})\n\nconst selectAllPupils = () => (dispatch, getState) => {\n const pupils = getSortedPupils(getState())\n const statuses = {}\n pupils.forEach(pupil => (statuses[pupil.account.id] = true))\n dispatch(setPupilSelectStatuses(statuses))\n}\n\nconst deselectAllPupils = () => dispatch => dispatch(setPupilSelectStatuses({}))\n\nconst changeSortKey = (key, direction) => ({\n type: 'PUPILS_COMPONENT:SET_SORT_KEY',\n key,\n direction\n})\n\nconst searchValueChange = value => ({\n type: 'PUPILS_COMPONENT:CHANGE_SEARCH_VALUE',\n value\n})\n\nconst showFilterDialog = () => ({ type: 'PUPILS_COMPONENT:SHOW_FILTER_DIALOG' })\n\nconst hideFilterDialog = () => ({ type: 'PUPILS_COMPONENT:HIDE_FILTER_DIALOG' })\n\nconst resetFilter = () => ({ type: 'PUPILS_COMPONENT:RESET_FILTER' })\n\nconst resetAllFilters = () => ({ type: 'PUPILS_COMPONENT:RESET_ALL_FILTERS' })\n\nconst applyGroupsFilter = selectedGroups => ({\n type: 'PUPILS_COMPONENT:APPLY_GROUPS_FILTER',\n selectedGroups\n})\n\nconst loadMorePupils = () => ({ type: 'PUPILS_COMPONENT:LOAD_MORE' })\n\nconst showSelected = () => ({ type: 'PUPILS_COMPONENT:SHOW_SELECTED' })\n\nconst unsetShowSelected = () => ({\n type: 'PUPILS_COMPONENT:UNSET_SHOW_SELECTED'\n})\n\nconst changeGroupsCategory = category => ({\n type: 'PUPILS_COMPONENT:CHANGE_GROUP_CATEGORY',\n category\n})\n\nexport {\n showSelected,\n unsetShowSelected,\n setPupilSelectStatus,\n selectAllPupils,\n deselectAllPupils,\n changeSortKey,\n searchValueChange,\n showFilterDialog,\n hideFilterDialog,\n resetFilter,\n applyGroupsFilter,\n loadMorePupils,\n changeGroupsCategory,\n resetAllFilters\n}\n","import { connect } from 'react-redux'\nimport PupilsComponent from './pupils-filter-controls'\nimport { getSelectedGroupsArray } from '../pupils-component-redux/pupils-component.selectors'\nimport {\n showFilterDialog,\n resetFilter\n} from '../pupils-component-redux/pupils-component.actions'\n\nconst mapStateToProps = state => ({\n selectedGroups: getSelectedGroupsArray(state)\n})\n\nconst mapDispatchToProps = dispatch => ({\n onEdit: () => dispatch(showFilterDialog()),\n onSelectGroups: () => dispatch(showFilterDialog()),\n onReset: () => dispatch(resetFilter())\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(PupilsComponent)\n","const styles = ({ BREAKPOINTS }) => ({\n container: {\n display: 'flex',\n flexDirection: 'row'\n },\n input: {\n borderRadius: '4px 0 0 4px',\n borderRight: 'none',\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n borderRadius: '4px',\n borderRight: '1px solid #ddd'\n }\n },\n button: {\n borderRadius: '0 4px 4px 0',\n whiteSpace: 'nowrap',\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n display: 'none !important'\n }\n },\n buttonLabel: {\n display: 'inline-block',\n padding: '12px 15px',\n margin: '-12px -15px',\n cursor: 'pointer'\n }\n})\n\nexport default styles\n","import React from 'react'\nimport styles from './pupils-search.styles'\nimport injectSheet from 'react-jss'\nimport FormInput from 'pobble-components/dist/form-elements/form-input'\nimport Button from 'pobble-components/dist/button'\n\nconst PupilsSearch = ({\n classes,\n searchValue,\n searchValueChange,\n disabled,\n value\n}) => (\n <div className={classes.container}>\n <FormInput\n disabled={disabled}\n onChange={e => searchValueChange(e.target.value)}\n className={classes.input}\n id=\"pupilSearch\"\n placeholder=\"Type a pupil’s name…\"\n inputProps={{ defaultValue: searchValue }}\n />\n <Button disabled={disabled} className={classes.button} tall>\n <label className={classes.buttonLabel} htmlFor=\"pupilSearch\">\n Search for pupil\n </label>\n </Button>\n </div>\n)\n\nexport default injectSheet(styles)(PupilsSearch)\n","import { connect } from 'react-redux'\nimport PupilsSearch from './pupils-search'\nimport { getSearchValue } from '../pupils-component-redux/pupils-component.selectors'\nimport { searchValueChange } from '../pupils-component-redux/pupils-component.actions'\nimport debounce from 'lodash/debounce'\n\nconst mapStateToProps = state => ({\n searchValue: getSearchValue(state)\n})\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n searchValueChange: debounce(value => dispatch(searchValueChange(value)), 300)\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(PupilsSearch)\n","const styles = ({ COLORS, BREAKPOINTS }) => ({\n selectAll: {\n color: COLORS.BLUE.NORMAL,\n cursor: 'pointer',\n fontWeight: 'bold',\n userSelect: 'none'\n },\n loadMoreContainer: {\n display: 'flex',\n justifyContent: 'center',\n margin: '20px 0 0'\n },\n container: {\n overflowX: 'auto'\n },\n nameCell: {\n textAlign: 'left',\n paddingLeft: '54px'\n },\n alignLeft: {\n textAlign: 'left'\n }\n})\n\nexport default styles\n","import { hover } from 'pobble-components/dist/jss-mixins'\n\nconst styles = ({ COLORS }) => ({\n center: {\n textAlign: 'center'\n },\n right: {\n textAlign: 'right'\n },\n usernameWrapper: {\n transition: 'color 0.3s',\n cursor: 'pointer',\n whiteSpace: 'nowrap',\n ...hover({\n color: COLORS.BLUE.NORMAL\n })\n },\n userNameHighlight: {\n color: COLORS.BLUE.NORMAL,\n fontWeight: 'bold'\n },\n updatingSpinner: {\n fontSize: '20px !important',\n margin: '8px 10px',\n display: 'inline-flex !important'\n },\n pendingRow: {\n '& td': {\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n left: '0',\n top: '0',\n width: '100%',\n height: '100%',\n backgroundColor: 'rgba(255, 255, 255, 0.5)'\n }\n }\n }\n})\n\nexport default styles\n","import React, { Fragment, useContext } from 'react'\nimport styles from './context-menu.styles'\nimport injectSheet from 'react-jss'\nimport MoreButton from 'pobble-components/dist/more-button'\nimport DropMenu from 'pobble-components/dist/drop-menu'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faBirthdayCake } from '@fortawesome/pro-solid-svg-icons/faBirthdayCake'\nimport { faLevelUp } from '@fortawesome/pro-solid-svg-icons/faLevelUp'\nimport { faUsers } from '@fortawesome/pro-solid-svg-icons/faUsers'\nimport { faUserTimes } from '@fortawesome/pro-solid-svg-icons/faUserTimes'\nimport { faTimes } from '@fortawesome/pro-solid-svg-icons/faTimes'\nimport { faFileCheck } from '@fortawesome/pro-solid-svg-icons/faFileCheck'\nimport { faFileTimes } from '@fortawesome/pro-solid-svg-icons/faFileTimes'\nimport { openConfirmationDialog } from 'pobble-components/dist/modal/confirmation-dialog'\nimport { AppContext } from '../../../app/app'\n\nconst ContextMenu = ({\n classes,\n id,\n openAgeGroupDialog,\n openAddToGroupDialog,\n openRemoveFromGroupDialog,\n pupilName,\n retirePupil,\n onIncrementAge,\n editable,\n canUpdatePermissions,\n canPublish,\n addPermission,\n removePermission\n}) => {\n const { permissionWarning } = useContext(AppContext)\n\n return (\n <DropMenu\n popoverClassName={classes.contextMenuHolder}\n button={({ ref, togglePopover }) => (\n <MoreButton forwardedRef={ref} onClick={togglePopover} />\n )}>\n {({ Menu, MenuItem, IconHolder, Separator, closePopover }) => (\n <Menu className={classes.menu}>\n {editable && (\n <Fragment>\n <MenuItem\n onClick={() => closePopover() && openAgeGroupDialog([id])}>\n <IconHolder>\n <FontAwesomeIcon icon={faBirthdayCake} />\n </IconHolder>\n Set age group\n </MenuItem>\n <MenuItem\n onClick={() =>\n closePopover() &&\n openConfirmationDialog({\n bodyText: `Are you sure you want to increment age group for ${pupilName}?`,\n confirmText: 'Increment age group',\n action: () => onIncrementAge(id)\n })\n }>\n <IconHolder>\n <FontAwesomeIcon icon={faLevelUp} />\n </IconHolder>\n Increment age group\n </MenuItem>\n <Separator />\n </Fragment>\n )}\n <MenuItem\n onClick={() => closePopover() && openAddToGroupDialog([id])}>\n <IconHolder>\n <FontAwesomeIcon icon={faUsers} />\n </IconHolder>\n Add to group\n </MenuItem>\n <MenuItem\n onClick={() => closePopover() && openRemoveFromGroupDialog([id])}>\n <IconHolder>\n <FontAwesomeIcon icon={faUserTimes} />\n </IconHolder>\n Remove from group\n </MenuItem>\n {canUpdatePermissions && (\n <Fragment>\n <Separator />\n {canPublish && (\n <MenuItem\n onClick={() =>\n closePopover() &&\n permissionWarning({ action: () => removePermission(id) })\n }>\n <IconHolder>\n <FontAwesomeIcon icon={faFileTimes} />\n </IconHolder>\n Remove permission to publish\n </MenuItem>\n )}\n {!canPublish && (\n <MenuItem\n onClick={() =>\n closePopover() &&\n permissionWarning({ action: () => addPermission(id) })\n }>\n <IconHolder>\n <FontAwesomeIcon icon={faFileCheck} />\n </IconHolder>\n Add permission to publish\n </MenuItem>\n )}\n </Fragment>\n )}\n\n {editable && (\n <Fragment>\n <Separator />\n <MenuItem\n onClick={() => {\n closePopover()\n openConfirmationDialog({\n bodyText: `Are you sure you want to retire ${pupilName} ?`,\n confirmText: 'Retire pupil',\n action: () => retirePupil(id)\n })\n }}\n className={classes.retirePupil}>\n <IconHolder>\n <FontAwesomeIcon icon={faTimes} />\n </IconHolder>\n Retire pupil\n </MenuItem>\n </Fragment>\n )}\n </Menu>\n )}\n </DropMenu>\n )\n}\n\nexport default injectSheet(styles)(ContextMenu)\n","export default ({ COLORS }) => ({\n retirePupil: {\n color: COLORS.RED.NORMAL\n }\n})\n","const openAgeGroupDialog = ids => ({\n type: 'PUPILS:DIALOG:SET_AGE_GROUP_OPEN',\n ids\n})\nconst closeAgeGroupDialog = () => ({\n type: 'PUPILS:DIALOG:SET_AGE_GROUP_CLOSE'\n})\n\nexport { openAgeGroupDialog, closeAgeGroupDialog }\n","const openRemoveFromGroupDialog = ids => ({\n type: 'PUPILS:REMOVE_FROM_GROUP_DIALOG:OPEN',\n ids\n})\nconst closeRemoveFromGroupDialog = () => ({\n type: 'PUPILS:REMOVE_FROM_GROUP_DIALOG:CLOSE'\n})\n\nexport { openRemoveFromGroupDialog, closeRemoveFromGroupDialog }\n","import { apiGetSchoolData } from '../../common/api/school'\nimport {\n apiUpdateStudent,\n apiRetireStudent,\n apiCreateStudent,\n apiAddStudentToAGroup,\n apiRemoveStudentFromGroup,\n apiIncrementAgeGroup,\n apiAddPermissionToStudent,\n apiRemovePermissionFromStudent,\n apiExportStudentsToCSV\n} from '../../common/api/student-management'\nimport { getGroups } from '../groups/groups.selectors'\n\nconst setPupils = pupils => ({ type: 'PUPILS_STORE:SET_PUPILS', pupils })\n\nconst createPupilBatch = request => ({\n requestPrefix: 'PUPILS_STORE:CREATE_PUPIL_BATCH',\n request: request\n})\n\nconst createPupil = (id, schoolId, data) => ({\n requestPrefix: 'PUPILS_STORE:CREATE_PUPIL',\n params: { id },\n request: () => apiCreateStudent(schoolId, data)\n})\n\nconst updatePupil = (id, data) => ({\n requestPrefix: 'PUPILS_STORE:UPDATE_PUPIL',\n params: { id },\n request: () =>\n apiUpdateStudent(id, data, {\n include:\n 'account.student_type.year_group,account.student_type.year_group.names,account.student_type.year_group.order'\n })\n})\n\nconst retirePupil = id => ({\n requestPrefix: 'PUPILS_STORE:RETIRE_PUPIL',\n params: { id },\n request: () => apiRetireStudent(id)\n})\n\nconst fetchPupils = schoolId => ({\n requestPrefix: 'PUPILS_STORE:FETCHING',\n request: () =>\n apiGetSchoolData(schoolId, {\n include:\n 'school.student_types,school.student_type.dob,school.student_type.passcode,school.student_type.account.names,school.student_type.year_group,school.student_type.year_group.names,school.student_type.year_group.order,school.student_type.policy,school.student_type.groups,school.student_type.group.names,school.student_type.works_count'\n })\n})\n\nconst addPupilToGroup = (id, data) => (dispatch, getState) =>\n dispatch({\n requestPrefix: 'PUPILS_STORE:ADD_PUPIL_TO_GROUP',\n params: { id, groups: getGroups(getState()) },\n request: () => apiAddStudentToAGroup(data)\n })\n\nconst removePupilFromGroup = data => ({\n requestPrefix: 'PUPILS_STORE:REMOVE_PUPIL_FROM_GROUP',\n params: { id: data.student_account_id, groupId: data.group_id },\n request: () => apiRemoveStudentFromGroup(data)\n})\n\nconst incrementAgeGroup = id => ({\n requestPrefix: 'PUPILS_STORE:INCREMENT_AGE_GROUP',\n params: { id: id },\n request: () =>\n apiIncrementAgeGroup(id, {\n include:\n 'account.student_type.year_group,account.student_type.year_group.names,account.student_type.year_group.order'\n })\n})\n\nconst addPermission = id => ({\n requestPrefix: 'PUPILS_STORE:ADD_PERMISSION',\n params: { id },\n request: () => apiAddPermissionToStudent(id)\n})\n\nconst removePermission = id => ({\n requestPrefix: 'PUPILS_STORE:REMOVE_PERMISSION',\n params: { id },\n request: () => apiRemovePermissionFromStudent(id)\n})\n\nconst exportCSV = ids => ({\n requestPrefix: 'PUPILS_STORE:EXPORT_CSV',\n request: () => apiExportStudentsToCSV(ids)\n})\n\nexport {\n addPermission,\n removePermission,\n setPupils,\n fetchPupils,\n updatePupil,\n retirePupil,\n createPupil,\n addPupilToGroup,\n removePupilFromGroup,\n incrementAgeGroup,\n createPupilBatch,\n exportCSV\n}\n","import { connect } from 'react-redux'\nimport ContextMenu from './context-menu'\nimport { openAgeGroupDialog } from '../../../pages/pupils/dialogs/set-age-group/set-age-group.actions'\nimport { openAddToGroupDialog } from '../../../add-to-group/add-to-group.actions'\nimport { openRemoveFromGroupDialog } from '../../../pages/pupils/dialogs/remove-from-group/remove-from-group.actions'\nimport { getPupil } from '../../../../stores/pupils/pupils.selectors'\nimport {\n retirePupil,\n incrementAgeGroup,\n addPermission,\n removePermission\n} from '../../../../stores/pupils/pupils.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\nimport { withMe } from 'pobble-components/dist/pobble-user'\n\nconst mapStateToProps = (state, { id, me }) => {\n const pupil = getPupil(state, id)\n return {\n editable: me.account.policy.can_manage_students,\n canUpdatePermissions:\n me.account.policy.can_update_school_leader_permissions,\n pupilName: pupil.account.full_name,\n canPublish: pupil.policy.can_publish\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n openAgeGroupDialog: ids => dispatch(openAgeGroupDialog(ids)),\n openAddToGroupDialog: ids => dispatch(openAddToGroupDialog(ids)),\n openRemoveFromGroupDialog: ids => dispatch(openRemoveFromGroupDialog(ids)),\n retirePupil: id => dispatch(retirePupil(id)).catch(errorHandler),\n addPermission: id => dispatch(addPermission(id)).catch(errorHandler),\n removePermission: id => dispatch(removePermission(id)).catch(errorHandler),\n onIncrementAge: id => dispatch(incrementAgeGroup(id)).catch(errorHandler)\n})\n\nexport default withMe(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(ContextMenu)\n)\n","import React from 'react'\nimport styles from './groups.styles'\nimport injectSheet from 'react-jss'\nimport Tooltip from 'pobble-components/dist/tooltip'\n\nconst Groups = ({ classes, children }) =>\n !children.length ? null : children.length === 1 ? (\n <span>{children[0].title}</span>\n ) : (\n <Tooltip content={children.map(group => group.title).join(', ')}>\n {children.length} groups\n </Tooltip>\n )\n\nexport default injectSheet(styles)(Groups)\n","import React from 'react'\nimport styles from './pupil-entry.styles'\nimport injectSheet from 'react-jss'\nimport { Cell, TableRow } from 'pobble-components/dist/table'\nimport Checkbox from 'pobble-components/dist/form-elements/form-checkbox'\nimport UserName from 'pobble-components/dist/user-name'\nimport AgeGroup from 'pobble-components/dist/age-group'\nimport CircleStatus from 'pobble-components/dist/circle-status'\nimport ContextMenu from './context-menu/context-menu.container'\nimport Groups from './groups/groups'\nimport Spinner from 'pobble-components/dist/spinner'\nimport classNames from 'classnames'\nimport PobbleLink from 'pobble-components/dist/pobble-link'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faFileAlt } from '@fortawesome/pro-regular-svg-icons/faFileAlt'\nimport { Link } from 'react-router-dom'\n\nconst PupilEntry = ({\n id,\n classes,\n selected,\n name,\n age,\n groups,\n permission,\n passcode,\n works,\n onChange,\n onPupilClick,\n pending,\n displayName\n}) => (\n <TableRow pending={pending}>\n <Cell className={classes.center}>\n <Checkbox onChange={onChange} checked={selected} />\n </Cell>\n <Cell>\n {onPupilClick && (\n <span\n className={classNames(\n classes.usernameWrapper,\n classes.userNameHighlight\n )}\n onClick={onPupilClick}>\n <UserName>{name}</UserName>\n </span>\n )}\n {!onPupilClick && <UserName>{name}</UserName>}\n </Cell>\n <Cell>\n {onPupilClick && (\n <span className={classes.usernameWrapper} onClick={onPupilClick}>\n {displayName}\n </span>\n )}\n {!onPupilClick && displayName}\n </Cell>\n <Cell className={classes.center}>\n <AgeGroup data={age} />\n </Cell>\n <Cell className={classes.center}>\n <Groups>{groups}</Groups>\n </Cell>\n <Cell className={classes.center}>\n <CircleStatus status={permission} />\n </Cell>\n <Cell className={classes.right}>\n {!!works && (\n <PobbleLink as={Link} to={`pupil/${id}/work`}>\n {works} <FontAwesomeIcon icon={faFileAlt} />\n </PobbleLink>\n )}\n </Cell>\n <Cell className={classes.center}>{passcode}</Cell>\n <Cell className={classes.right}>\n {pending ? (\n <Spinner className={classes.updatingSpinner} />\n ) : (\n <ContextMenu id={id} />\n )}\n </Cell>\n </TableRow>\n)\n\nexport default injectSheet(styles)(PupilEntry)\n","import { connect } from 'react-redux'\nimport PupilEntry from './pupil-entry'\nimport {\n getPupil,\n getPupilUpdatingStatus,\n getPupilDeletingStatus,\n getPupilAddingToGroupStatus,\n getPupilRemovingFromGroupStatus,\n getPupilIncrementingAgeGroupStatus\n} from '../../../stores/pupils/pupils.selectors'\nimport { setPupilSelectStatus } from '../pupils-component-redux/pupils-component.actions'\nimport { isPupilSelected } from '../pupils-component-redux/pupils-component.selectors'\n\nconst mapStateToProps = (state, { id }) => {\n const pupil = getPupil(state, id)\n return {\n pending:\n getPupilUpdatingStatus(state, id).pending ||\n getPupilDeletingStatus(state, id).pending ||\n getPupilAddingToGroupStatus(state, id).pending ||\n getPupilRemovingFromGroupStatus(state, id).pending ||\n getPupilIncrementingAgeGroupStatus(state, id).pending,\n selected: isPupilSelected(state, id),\n name: pupil.account.full_name,\n displayName: pupil.account.display_name,\n age: pupil.year_group,\n groups: pupil.groups,\n permission: pupil.policy.can_publish,\n passcode: pupil.passcode,\n works: pupil.all_works_count\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n dispatch\n})\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...stateProps,\n ...ownProps,\n onChange: e => dispatch(setPupilSelectStatus(ownProps.id, e.target.checked))\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n)(PupilEntry)\n","import React from 'react'\nimport styles from './pupils-table.styles'\nimport injectSheet from 'react-jss'\nimport { Table, HeadCell } from 'pobble-components/dist/table'\nimport { withRouter } from 'react-router-dom'\nimport Button from 'pobble-components/dist/button'\nimport PupilEntry from '../pupil-entry/pupil-entry.container'\n\nconst PupilsTable = ({\n classes,\n pupils,\n allAction,\n everyoneSelected,\n changeSortKey,\n sortBy,\n actualPupilsListEmpty,\n showLoadMore,\n loadMoreAction,\n history,\n hideAllAction\n}) => (\n <div className={classes.container}>\n <Table>\n <thead>\n <tr>\n <HeadCell>\n {!hideAllAction && (\n <span className={classes.selectAll} onClick={allAction}>\n All\n </span>\n )}\n </HeadCell>\n <HeadCell\n className={classes.nameCell}\n left\n ordered={sortBy.key === 'name' ? sortBy.direction : null}\n order={direction => changeSortKey('name', direction)}>\n Name\n </HeadCell>\n <HeadCell\n className={classes.alignLeft}\n ordered={sortBy.key === 'displayName' ? sortBy.direction : null}\n order={direction => changeSortKey('displayName', direction)}>\n Display name\n </HeadCell>\n <HeadCell\n ordered={sortBy.key === 'age' ? sortBy.direction : null}\n order={direction => changeSortKey('age', direction)}>\n Year\n </HeadCell>\n <HeadCell>Groups</HeadCell>\n <HeadCell\n ordered={sortBy.key === 'permission' ? sortBy.direction : null}\n order={direction => changeSortKey('permission', direction)}>\n Permission\n </HeadCell>\n <HeadCell>Work</HeadCell>\n <HeadCell>Passcode</HeadCell>\n <HeadCell />\n </tr>\n </thead>\n <tbody>\n {pupils.map(pupil => (\n <PupilEntry\n id={pupil.account.id}\n key={pupil.account.id}\n onPupilClick={() => history.push(`pupil/${pupil.account.id}`)}\n />\n ))}\n </tbody>\n </Table>\n {showLoadMore && (\n <div className={classes.loadMoreContainer}>\n <Button tall secondary action={loadMoreAction}>\n Show more pupils\n </Button>\n </div>\n )}\n </div>\n)\n\nexport default withRouter(injectSheet(styles)(PupilsTable))\n","import { connect } from 'react-redux'\nimport PupilsTable from './pupils-table'\nimport {\n getPupilsWithAllFilters,\n getSortBy,\n isThereHiddenPupils,\n isEveryoneSelected,\n isShowingSelected\n} from '../pupils-component-redux/pupils-component.selectors'\nimport {\n selectAllPupils,\n deselectAllPupils,\n changeSortKey,\n loadMorePupils\n} from '../pupils-component-redux/pupils-component.actions'\n\nconst mapStateToProps = state => {\n const pupils = getPupilsWithAllFilters(state)\n return {\n pupils,\n hideAllAction: isShowingSelected(state),\n sortBy: getSortBy(state),\n everyoneSelected: isEveryoneSelected(state),\n showLoadMore: isThereHiddenPupils(state)\n }\n}\n\nconst mapDispatchToProps = (dispatch, ownProps) => ({\n changeSortKey: (key, direction) => dispatch(changeSortKey(key, direction)),\n loadMoreAction: () => dispatch(loadMorePupils()),\n dispatch\n})\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => ({\n ...ownProps,\n ...stateProps,\n ...dispatchProps,\n allAction: () => {\n return !stateProps.everyoneSelected\n ? dispatchProps.dispatch(selectAllPupils())\n : dispatchProps.dispatch(deselectAllPupils())\n }\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n)(PupilsTable)\n","import React from 'react'\nimport styles from './groups-modal-footer.styles'\nimport injectSheet from 'react-jss'\nimport { ModalFooter } from 'pobble-components/dist/modal'\nimport Button from 'pobble-components/dist/button'\n\nconst GroupsModalFooter = ({ classes, onCancel, onSubmit, disabled }) => (\n <ModalFooter className={classes.footer}>\n <Button tall simple action={onCancel}>\n Cancel\n </Button>\n <Button disabled={disabled} tall action={onSubmit}>\n Apply filter\n </Button>\n </ModalFooter>\n)\n\nexport default injectSheet(styles)(GroupsModalFooter)\n","export default {\n footer: {\n display: 'flex',\n justifyContent: 'flex-end'\n }\n}\n","import { connect } from 'react-redux'\nimport GroupsModalFooter from './groups-modal-footer'\nimport {\n hideFilterDialog,\n applyGroupsFilter\n} from '../../pupils-component-redux/pupils-component.actions'\n\nconst mapDispatchToProps = (dispatch, { selectedGroups }) => ({\n onCancel: () => dispatch(hideFilterDialog()),\n onSubmit: () => dispatch(applyGroupsFilter(selectedGroups))\n})\n\nexport default connect(\n null,\n mapDispatchToProps\n)(GroupsModalFooter)\n","import React, { Component, Fragment } from 'react'\nimport styles from './groups-component.styles'\nimport injectSheet from 'react-jss'\nimport Spinner from 'pobble-components/dist/spinner'\nimport {\n GroupsSelectionProvider,\n GroupsSelection\n} from 'pobble-components/dist/groups-selection'\nimport { ModalContent } from 'pobble-components/dist/modal'\nimport GroupsModalFooter from '../groups-modal-footer/groups-modal-footer.container'\n\nclass GroupsComponent extends Component {\n componentDidMount() {\n this.props.onMount()\n }\n render() {\n const { classes, pending, groups, categories, selectedGroups } = this.props\n return (\n <GroupsSelectionProvider\n selected={selectedGroups}\n groups={groups}\n categories={categories}>\n {store => (\n <Fragment>\n <ModalContent legacy className={classes.content}>\n {pending && (\n <div className={classes.pending}>\n <Spinner />\n </div>\n )}\n {!pending && (\n <GroupsSelection className={classes.groupsSelection} />\n )}\n </ModalContent>\n <GroupsModalFooter\n disabled={pending}\n selectedGroups={store.selectedGroups}\n />\n </Fragment>\n )}\n </GroupsSelectionProvider>\n )\n }\n}\n\nexport default injectSheet(styles)(GroupsComponent)\n","export default {\n pending: {\n width: '100%',\n height: '100%',\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center'\n },\n content: {\n height: '300px',\n padding: '0'\n },\n groupsSelection: {\n animation: '0.3s fadeIn ease-in'\n },\n '@keyframes fadeIn': {\n from: { opacity: '0' },\n to: { opacity: '1' }\n }\n}\n","import { connect } from 'react-redux'\nimport GroupsComponent from './groups-component'\nimport {\n getGroupsFetchingStatus,\n getGroupsArray,\n getCategories\n} from '../../../../stores/groups/groups.selectors'\nimport { fetchGroups } from '../../../../stores/groups/groups.actions'\nimport { getSelectedGroups } from '../../pupils-component-redux/pupils-component.selectors'\nimport { withMe } from 'pobble-components/dist/pobble-user'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapStateToProps = state => ({\n pending: getGroupsFetchingStatus(state).pending,\n categories: getCategories(state),\n groups: getGroupsArray(state),\n selectedGroups: getSelectedGroups(state)\n})\n\nconst mapDispatchToProps = (dispatch, { me }) => ({\n onMount: () =>\n dispatch(fetchGroups(me.account.teacher_type.school.id)).catch(errorHandler)\n})\n\nexport default withMe(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(GroupsComponent)\n)\n","import React from 'react'\nimport { Modal, ModalHeader } from 'pobble-components/dist/modal'\nimport GroupsComponent from './groups-component/groups-component.container'\n\nconst GroupsModal = ({ classes, isOpen, requestClose, onSubmit }) => (\n <Modal isOpen={isOpen} closeButton requestClose={requestClose}>\n <ModalHeader>Filter by groups</ModalHeader>\n <GroupsComponent />\n </Modal>\n)\n\nexport default GroupsModal\n","import { connect } from 'react-redux'\nimport PupilsFilterDialog from './pupils-filter-dialog'\nimport { getFilterDialogOpened } from '../pupils-component-redux/pupils-component.selectors'\nimport { hideFilterDialog } from '../pupils-component-redux/pupils-component.actions'\n\nconst mapStateToProps = state => ({\n isOpen: getFilterDialogOpened(state)\n})\n\nconst mapDispatchToProps = dispatch => ({\n requestClose: () => dispatch(hideFilterDialog())\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(PupilsFilterDialog)\n","import React from 'react'\nimport styles from './add-pupil-button.styles'\nimport injectSheet from 'react-jss'\nimport Button from 'pobble-components/dist/button'\nimport PlusIcon from 'react-icons/lib/fa/plus'\nimport { withRouter } from 'react-router-dom'\n\nconst AddPupilButton = ({\n classes,\n searchValue,\n searchValueChange,\n history,\n disabled\n}) => (\n <Button\n disabled={disabled}\n tall\n action={() => {\n history.push('/add-pupils')\n }}>\n <PlusIcon className={classes.icon} />\n Add Pupils\n </Button>\n)\n\nexport default withRouter(injectSheet(styles)(AddPupilButton))\n","export default {\n icon: {\n margin: '0 5px 0 -5px'\n }\n}\n","import React from 'react'\nimport styles from './no-pupils.styles'\nimport injectSheet from 'react-jss'\nimport noPupils from './no-pupils.png'\nimport { Link } from 'react-router-dom'\n\nconst NoPupils = ({ classes }) => (\n <div className={classes.container}>\n <h2>No pupils yet</h2>\n <img src={noPupils} alt=\"There are no pupils yet\" />\n <p>\n <Link to=\"/add-pupils\">Let's add some pupils</Link>\n </p>\n </div>\n)\n\nexport default injectSheet(styles)(NoPupils)\n","export default ({ COLORS, FONT_SIZES }) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n padding: '20px 0 30px',\n '& h2': {\n color: COLORS.TEXT.MID_GREY.NORMAL,\n ...FONT_SIZES.HEADING_BIG.STYLE,\n margin: '0 0 20px'\n },\n '& a': {\n color: COLORS.BLUE.NORMAL,\n textDecoration: 'none',\n fontWeight: 'bold'\n },\n '& img': {\n width: '131px',\n height: '131px',\n margin: '0 0 10px'\n }\n }\n})\n","import React from 'react'\nimport styles from './pupils-component.styles'\nimport injectSheet from 'react-jss'\nimport PupilsFilterControls from './pupils-filter-controls/pupils-filter-controls.container'\nimport PupilsSearch from './pupils-search/pupils-search.container'\nimport PupilsTable from './pupils-table/pupils-table.container'\nimport PupilsFilter from './pupils-filter-dialog/pupils-filter-dialog.container'\nimport AddPupilButton from './add-pupil-button/add-pupil-button'\nimport NoPupils from './no-pupils/no-pupils'\n\nconst PupilsComponent = ({\n classes,\n actualPupilsListEmpty,\n filteredPupilsEmpty,\n style,\n selectedPupils,\n isShowingSelected,\n showAll,\n canAddPupil\n}) =>\n actualPupilsListEmpty ? (\n <div style={style}>\n <NoPupils />\n </div>\n ) : (\n <div style={style}>\n {!isShowingSelected && (\n <div className={classes.filterControlsContainer}>\n <PupilsFilterControls />\n </div>\n )}\n {isShowingSelected && (\n <div className={classes.showingSelectedHolder}>\n <span className={classes.selectedWarning}>\n You are seeing only selected pupils.\n </span>\n <span className={classes.showAllPupils} onClick={showAll}>\n Show all\n </span>\n </div>\n )}\n <div className={classes.topPanel}>\n <div className={classes.searchHolder}>\n <PupilsSearch disabled={isShowingSelected} />\n </div>\n {canAddPupil && (\n <div className={classes.addPupilHolder}>\n <AddPupilButton disabled={isShowingSelected} />\n </div>\n )}\n </div>\n {!actualPupilsListEmpty &&\n filteredPupilsEmpty && (\n <div className={classes.pupilsMessage}>\n No pupil matching those criteria\n </div>\n )}\n {!actualPupilsListEmpty && !filteredPupilsEmpty && <PupilsTable />}\n <PupilsFilter />\n </div>\n )\n\nexport default injectSheet(styles)(PupilsComponent)\n","import { connect } from 'react-redux'\nimport PupilsComponent from './pupils-component'\nimport { getPupilsArray } from '../../stores/pupils/pupils.selectors'\nimport {\n getPupilsWithAllFilters,\n isShowingSelected\n} from './pupils-component-redux/pupils-component.selectors'\nimport { unsetShowSelected } from './pupils-component-redux/pupils-component.actions'\nimport { withMe } from 'pobble-components/dist/pobble-user'\n\nconst mapStateToProps = (state, { me }) => ({\n canAddPupil: me.account.policy.can_manage_students,\n actualPupilsListEmpty: !getPupilsArray(state).length,\n filteredPupilsEmpty: !getPupilsWithAllFilters(state).length,\n isShowingSelected: isShowingSelected(state)\n})\n\nconst mapDispatchToProps = dispatch => ({\n showAll: () => dispatch(unsetShowSelected())\n})\n\nexport default withMe(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(PupilsComponent)\n)\n","const styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%'\n },\n selectGroup: {\n height: '14px',\n width: '50px'\n }\n}\n\nexport default styles\n","import React from 'react'\nimport styles from './loading-screen.styles'\nimport injectSheet from 'react-jss'\nimport Bone from 'pobble-components/dist/bone'\n\nconst Cell = ({ children, style }) => (\n <td\n style={{\n textAlign: 'center',\n padding: '20px 10px',\n borderBottom: '1px solid #ececec',\n ...style\n }}>\n {children}\n </td>\n)\nconst UserRow = ({ nameWidth }) => (\n <tr>\n <Cell>\n <Bone style={{ width: '20px', height: '20px', borderRadius: '4px' }} />\n </Cell>\n <Cell style={{ textAlign: 'left' }}>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <Bone\n style={{\n width: '32px',\n height: '32px',\n borderRadius: '32px',\n marginRight: '10px'\n }}\n />\n <Bone style={{ width: nameWidth, height: '14px' }} />\n </div>\n </Cell>\n <Cell style={{ textAlign: 'left' }}>\n <Bone style={{ width: '80px' }} />\n </Cell>\n <Cell>\n <Bone style={{ width: '82px', height: '31px', borderRadius: '4px' }} />\n </Cell>\n <Cell>\n <Bone style={{ width: '40px' }} />\n </Cell>\n <Cell>\n <Bone style={{ width: '30px', height: '30px', borderRadius: '30px' }} />\n </Cell>\n <Cell style={{ textAlign: 'right' }}>\n <Bone style={{ width: '30px' }} />\n </Cell>\n <Cell>\n <Bone style={{ width: '60px' }} />\n </Cell>\n <Cell style={{ textAlign: 'right' }}>\n <Bone style={{ width: '40px', height: '40px', borderRadius: '5px' }} />\n </Cell>\n </tr>\n)\n\nconst LoadingScreen = ({ classes }) => (\n <div className={classes.container}>\n <Bone style={{ width: '80px', height: '14px' }} />\n <div\n style={{\n width: '100%',\n marginTop: '20px',\n display: 'flex',\n marginBottom: '16px'\n }}>\n <Bone style={{ height: '40px', flex: '1', borderRadius: '4px' }} />\n <Bone\n style={{\n height: '40px',\n width: '112px',\n borderRadius: '4px',\n marginLeft: '34px'\n }}\n />\n </div>\n <table>\n <tbody>\n <tr>\n <Cell>\n <Bone style={{ width: '30px' }} />\n </Cell>\n <Cell>\n <Bone style={{ width: '60px' }} />\n </Cell>\n <Cell style={{ textAlign: 'left' }}>\n <Bone style={{ width: '100px' }} />\n </Cell>\n <Cell>\n <Bone style={{ width: '55px' }} />\n </Cell>\n <Cell>\n <Bone style={{ width: '55px' }} />\n </Cell>\n <Cell>\n <Bone style={{ width: '70px' }} />\n </Cell>\n <Cell>\n <Bone style={{ width: '60px' }} />\n </Cell>\n <Cell>\n <Bone style={{ width: '70px' }} />\n </Cell>\n <Cell />\n </tr>\n <UserRow nameWidth=\"120px\" />\n <UserRow nameWidth=\"130px\" />\n <UserRow nameWidth=\"70px\" />\n <UserRow nameWidth=\"90px\" />\n <UserRow nameWidth=\"100px\" />\n <UserRow nameWidth=\"80px\" />\n </tbody>\n </table>\n </div>\n)\n\nexport default injectSheet(styles)(LoadingScreen)\n","import React from 'react'\nimport styles from './set-age-group.styles'\nimport injectSheet from 'react-jss'\nimport {\n Modal,\n ModalHeader,\n ModalContent,\n ModalFooter\n} from 'pobble-components/dist/modal'\nimport Button from 'pobble-components/dist/button'\nimport AgeGroupSelect from '../../../../age-groups-select/age-groups-select.container'\nimport { Formik } from 'formik'\n\nconst SetAgeGroups = ({\n classes,\n opened,\n requestClose = () => null,\n initialAgeGroup,\n onSubmit\n}) => (\n <Modal isOpen={opened}>\n <ModalHeader>Set age group</ModalHeader>\n <Formik\n onSubmit={onSubmit}\n initialValues={{\n ageGroup: initialAgeGroup\n }}>\n {props => {\n const {\n values,\n handleChange,\n handleSubmit,\n handleBlur,\n initialValues\n } = props\n return (\n <form onSubmit={handleSubmit}>\n <ModalContent legacy className={classes.modalContent}>\n <AgeGroupSelect\n selectOption={!initialAgeGroup ? 'Select an age group' : null}\n formSelectProps={{\n value: values.ageGroup,\n name: 'ageGroup',\n onChange: handleChange,\n onBlur: handleBlur\n }}\n />\n </ModalContent>\n <ModalFooter className={classes.footer}>\n <Button\n simple\n tall\n className={classes.cancel}\n action={requestClose}>\n Cancel\n </Button>\n <Button\n disabled={!values.ageGroup || values === initialValues}\n tall\n type=\"submit\">\n Set age group\n </Button>\n </ModalFooter>\n </form>\n )\n }}\n </Formik>\n </Modal>\n)\n\nexport default injectSheet(styles)(SetAgeGroups)\n","export default {\n footer: {\n display: 'flex',\n justifyContent: 'flex-end'\n },\n cancel: {\n margin: '0 10px 0 0'\n },\n modalContent: {\n minWidth: '400px !important'\n }\n}\n","const getData = (state, selector) => {\n const data = state.Pupils.setAgeGroupDialog\n ? state.Pupils.setAgeGroupDialog\n : state\n return !data ? null : selector(data)\n}\n\nconst isOpen = state => getData(state, data => data.opened)\nconst getPupilsIds = state => getData(state, data => data.ids)\n\nexport { isOpen, getPupilsIds }\n","import { connect } from 'react-redux'\nimport SetAgeGroup from './set-age-group'\nimport { isOpen, getPupilsIds } from './set-age-group.selectors'\nimport { closeAgeGroupDialog } from './set-age-group.actions'\nimport { getPupil } from '../../../../../stores/pupils/pupils.selectors'\nimport { updatePupil } from '../../../../../stores/pupils/pupils.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapStateToProps = state => {\n const ids = getPupilsIds(state)\n let initialAgeGroup = false\n if (ids.length === 1) initialAgeGroup = getPupil(state, ids[0]).year_group.id\n return {\n ids: ids,\n opened: isOpen(state),\n initialAgeGroup: initialAgeGroup\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n dispatch: dispatch,\n requestClose: () => dispatch(closeAgeGroupDialog())\n})\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => ({\n ...stateProps,\n ...dispatchProps,\n ...ownProps,\n onSubmit: ({ ageGroup }) => {\n dispatchProps.requestClose()\n stateProps.ids.forEach(id => {\n dispatchProps\n .dispatch(updatePupil(id, { year_group_id: ageGroup }))\n .catch(errorHandler)\n })\n }\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n)(SetAgeGroup)\n","import { connect } from 'react-redux'\nimport AddToGroup from '../../../../add-to-group/add-to-group.container'\nimport { addPupilToGroup } from '../../../../../stores/pupils/pupils.actions'\nimport { getPupil } from '../../../../../stores/pupils/pupils.selectors'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\nimport { getErrorInfo } from 'pobble-components/dist/utils'\n\nconst mapDispatchToProps = dispatch => ({\n getGroups: (state, id) => getPupil(state, id).groups.map(group => group.id),\n action: (id, groupId) =>\n dispatch(\n addPupilToGroup(id, {\n student_account_id: id,\n group_id: groupId\n })\n ).catch(e => getErrorInfo(e).ref !== 'e0029' && errorHandler(e))\n})\n\nexport default connect(\n null,\n mapDispatchToProps\n)(AddToGroup)\n","import React from 'react'\nimport styles from './remove-from-group.styles'\nimport injectSheet from 'react-jss'\nimport {\n Modal,\n ModalHeader,\n ModalContent,\n ModalFooter\n} from 'pobble-components/dist/modal'\nimport Button from 'pobble-components/dist/button'\nimport GroupsSelect from '../../../../groups-select/groups-select.container'\nimport { Formik } from 'formik'\n\nconst RemoveFromGroup = ({\n classes,\n opened,\n requestClose = () => null,\n onSubmit,\n title,\n includeGroups,\n noGroups\n}) => (\n <Modal isOpen={opened}>\n <ModalHeader>{title}</ModalHeader>\n <Formik\n onSubmit={onSubmit}\n initialValues={{\n group: ''\n }}>\n {props => {\n const {\n values,\n handleChange,\n handleSubmit,\n handleBlur,\n isValid\n } = props\n return (\n <form onSubmit={handleSubmit}>\n <ModalContent legacy className={classes.modalContent}>\n <GroupsSelect\n only={includeGroups}\n selectOption=\"Select a group\"\n whenNoGroupsAvailable={\n <span>This pupil is not a part of any group</span>\n }\n formSelectProps={{\n value: values.group,\n name: 'group',\n onChange: handleChange,\n onBlur: handleBlur\n }}\n />\n </ModalContent>\n <ModalFooter className={classes.footer}>\n <Button\n simple\n tall\n className={classes.cancel}\n action={requestClose}>\n Cancel\n </Button>\n <Button disabled={!isValid} tall type=\"submit\">\n Remove from group\n </Button>\n </ModalFooter>\n </form>\n )\n }}\n </Formik>\n </Modal>\n)\n\nexport default injectSheet(styles)(RemoveFromGroup)\n","export default {\n footer: {\n display: 'flex',\n justifyContent: 'flex-end'\n },\n cancel: {\n margin: '0 10px 0 0'\n },\n modalContent: {\n minWidth: '400px !important'\n }\n}\n","const getData = (state, selector) => {\n const data = state.Pupils.removeFromGroupDialog\n ? state.Pupils.removeFromGroupDialog\n : state\n return !data ? null : selector(data)\n}\n\nconst isOpen = state => getData(state, data => data.opened)\nconst getPupilsIds = state => getData(state, data => data.ids)\n\nexport { isOpen, getPupilsIds }\n","import { connect } from 'react-redux'\nimport RemoveFromGroup from './remove-from-group'\nimport { isOpen, getPupilsIds } from './remove-from-group.selectors'\nimport { closeRemoveFromGroupDialog } from './remove-from-group.actions'\nimport { getPupil } from '../../../../../stores/pupils/pupils.selectors'\nimport { removePupilFromGroup } from '../../../../../stores/pupils/pupils.actions'\nimport keyBy from 'lodash/keyBy'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapStateToProps = state => {\n const ids = getPupilsIds(state)\n const includeGroups =\n ids.length === 1 ? keyBy(getPupil(state, ids[0]).groups, 'id') : null\n return {\n title:\n ids.length === 1\n ? 'Remove pupil from a group'\n : `Remove ${ids.length} pupils from a group`,\n ids: ids,\n opened: isOpen(state),\n includeGroups\n }\n}\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...stateProps,\n ...ownProps,\n requestClose: () => dispatch(closeRemoveFromGroupDialog()),\n onSubmit: ({ group }) => {\n stateProps.ids.forEach(id =>\n dispatch(\n removePupilFromGroup({\n student_account_id: id,\n group_id: group\n })\n ).catch(errorHandler)\n )\n }\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n)(RemoveFromGroup)\n","import React from 'react'\nimport styles from './bulk-action-bar.styles'\nimport ContentHolder from '../content-holder/content-holder'\nimport Button from 'pobble-components/dist/button'\nimport injectSheet from 'react-jss'\nimport EllipsisIcon from 'react-icons/lib/fa/ellipsis-h'\nimport DropMenu from 'pobble-components/dist/drop-menu'\nimport classNames from 'classnames'\n\nconst BulkActionBar = ({\n show,\n classes,\n renderContextMenu,\n selected = [],\n onShowSelected,\n showingSelected,\n onShowAll,\n renderMessage = () => null\n}) => {\n return (\n <div className={classNames(classes.container, { [classes.show]: show })}>\n <ContentHolder className={classes.contentHolder}>\n <div>\n <span className={classes.selected}>{renderMessage(selected)}</span>\n {!showingSelected && (\n <span className={classes.showSelected} onClick={onShowSelected}>\n Show selected\n </span>\n )}\n {showingSelected && (\n <span className={classes.showSelected} onClick={onShowAll}>\n Show all\n </span>\n )}\n </div>\n <div>\n <DropMenu\n button={({ ref, togglePopover }) => (\n <Button nodeRef={ref} action={togglePopover} tall>\n <EllipsisIcon className={classes.buttonIcon} />\n Action\n </Button>\n )}>\n {renderContextMenu\n ? renderContextMenu\n : () => 'Supply context menu please'}\n </DropMenu>\n </div>\n </ContentHolder>\n </div>\n )\n}\n\nexport default injectSheet(styles)(BulkActionBar)\n","export default ({ COLORS, BREAKPOINTS }) => ({\n container: {\n position: 'fixed',\n width: '100%',\n bottom: '0',\n left: '0',\n backgroundColor: '#fff',\n boxShadow: '0 -2px 4px 0 rgba(0, 0, 0, 0.1)',\n color: COLORS.TEXT.MID_GREY.NORMAL,\n pointerEvents: 'none',\n transform: 'translateY(80px)',\n transition: 'transform .2s ease-out'\n },\n show: {\n pointerEvents: 'auto',\n transform: 'translateY(0)'\n },\n contentHolder: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n height: '80px',\n padding: '0 42px'\n },\n buttonIcon: {\n margin: '0 8px 0 0'\n },\n selected: {\n margin: '0 10px 0 0'\n },\n showSelected: {\n color: COLORS.BLUE.NORMAL,\n fontWeight: 'bold',\n cursor: 'pointer',\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n display: 'block'\n }\n }\n})\n","import { createContext } from 'react'\n\nexport default createContext(null)\n","import React, { Fragment, useContext } from 'react'\nimport BulkActionBar from '../../../bulk-action-bar/bulk-action-bar'\nimport styles from './pupils-bulk-action.styles'\nimport injectSheet from 'react-jss'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome'\nimport { faBirthdayCake } from '@fortawesome/pro-solid-svg-icons/faBirthdayCake'\nimport { faLevelUp } from '@fortawesome/pro-solid-svg-icons/faLevelUp'\nimport { faUsers } from '@fortawesome/pro-solid-svg-icons/faUsers'\nimport { faUserTimes } from '@fortawesome/pro-solid-svg-icons/faUserTimes'\nimport { faTimes } from '@fortawesome/pro-solid-svg-icons/faTimes'\nimport { faPrint } from '@fortawesome/pro-solid-svg-icons/faPrint'\nimport { faFileCheck } from '@fortawesome/pro-solid-svg-icons/faFileCheck'\nimport { faFileTimes } from '@fortawesome/pro-solid-svg-icons/faFileTimes'\nimport { openConfirmationDialog } from 'pobble-components/dist/modal/confirmation-dialog'\nimport pupilsContext from '../pupils.context'\nimport { AppContext } from '../../../app/app'\n\nconst PupilsBulkAction = ({\n classes,\n selectedPupils,\n onSetAgeGroup,\n onAddToGroup,\n retirePupils,\n showSelected,\n showAll,\n showingSelected,\n onRemoveFromGroup,\n onIncrementAge,\n editable,\n canUpdatePermissions,\n addPermission,\n removePermission,\n onExportCSV\n}) => {\n const { openPasscodesDialog } = useContext(pupilsContext)\n const { permissionWarning } = useContext(AppContext)\n return (\n <BulkActionBar\n onShowAll={showAll}\n onShowSelected={showSelected}\n show={selectedPupils.length}\n selected={selectedPupils}\n showingSelected={showingSelected}\n renderMessage={selected => `${selected.length} pupils selected`}\n renderContextMenu={({\n Menu,\n MenuItem,\n IconHolder,\n Separator,\n closePopover\n }) => (\n <Menu>\n {editable && (\n <Fragment>\n <MenuItem onClick={() => closePopover() && onSetAgeGroup()}>\n <IconHolder>\n <FontAwesomeIcon icon={faBirthdayCake} />\n </IconHolder>\n Set age group\n </MenuItem>\n <MenuItem\n onClick={() =>\n closePopover() &&\n openConfirmationDialog({\n bodyText: `Are you sure you want to increment age groups for those ${\n selectedPupils.length\n } pupils?`,\n confirmText: 'Increment age group',\n action: onIncrementAge\n })\n }>\n <IconHolder>\n <FontAwesomeIcon icon={faLevelUp} />\n </IconHolder>\n Increment age group\n </MenuItem>\n <Separator />\n </Fragment>\n )}\n <MenuItem onClick={() => closePopover() && onAddToGroup()}>\n <IconHolder>\n <FontAwesomeIcon icon={faUsers} />\n </IconHolder>\n Add to group\n </MenuItem>\n <MenuItem onClick={() => closePopover() && onRemoveFromGroup()}>\n <IconHolder>\n <FontAwesomeIcon icon={faUserTimes} />\n </IconHolder>\n Remove from group\n </MenuItem>\n <Separator />\n <MenuItem\n onClick={() => {\n closePopover()\n onExportCSV(selectedPupils)\n }}>\n <IconHolder>\n <FontAwesomeIcon icon={faPrint} />\n </IconHolder>\n Export pupil/parent codes\n </MenuItem>\n {canUpdatePermissions && (\n <Fragment>\n <Separator />\n <MenuItem\n onClick={() =>\n closePopover() && permissionWarning({ action: addPermission })\n }>\n <IconHolder>\n <FontAwesomeIcon icon={faFileCheck} />\n </IconHolder>\n Add permission to publish\n </MenuItem>\n <MenuItem\n onClick={() =>\n closePopover() &&\n permissionWarning({ action: removePermission })\n }>\n <IconHolder>\n <FontAwesomeIcon icon={faFileTimes} />\n </IconHolder>\n Remove permission to publish\n </MenuItem>\n </Fragment>\n )}\n {editable && (\n <Fragment>\n <Separator />\n <MenuItem\n className={classes.retirePupil}\n onClick={() =>\n closePopover() &&\n openConfirmationDialog({\n bodyText: `Are you sure you want to retire ${\n selectedPupils.length\n } pupils?`,\n confirmText: 'Retire pupils',\n action: retirePupils\n })\n }>\n <IconHolder>\n <FontAwesomeIcon icon={faTimes} />\n </IconHolder>\n Retire pupil\n </MenuItem>\n </Fragment>\n )}\n </Menu>\n )}\n />\n )\n}\n\nexport default injectSheet(styles)(PupilsBulkAction)\n","export default ({ COLORS }) => ({\n retirePupil: {\n color: COLORS.RED.NORMAL\n }\n})\n","import { connect } from 'react-redux'\nimport PupilsBulkAction from './pupils-bulk-action'\nimport {\n getSelectedPupilsIdsArray,\n isShowingSelected\n} from '../../../pupils-component/pupils-component-redux/pupils-component.selectors'\nimport {\n showSelected,\n unsetShowSelected\n} from '../../../pupils-component/pupils-component-redux/pupils-component.actions'\nimport { openAgeGroupDialog } from '../dialogs/set-age-group/set-age-group.actions'\nimport { openAddToGroupDialog } from '../../../add-to-group/add-to-group.actions'\nimport { openRemoveFromGroupDialog } from '../dialogs/remove-from-group/remove-from-group.actions'\nimport {\n retirePupil,\n incrementAgeGroup,\n addPermission,\n removePermission,\n exportCSV\n} from '../../../../stores/pupils/pupils.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\nimport { withMe } from 'pobble-components/dist/pobble-user'\n\nconst mapStateToProps = (state, { me }) => ({\n editable: me.account.policy.can_manage_students,\n selectedPupils: getSelectedPupilsIdsArray(state),\n showingSelected: isShowingSelected(state),\n canUpdatePermissions: me.account.policy.can_update_school_leader_permissions\n})\n\nconst mapDispatchToProps = dispatch => ({\n dispatch\n})\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...stateProps,\n ...ownProps,\n showSelected: () => dispatch(showSelected()),\n showAll: () => dispatch(unsetShowSelected()),\n onSetAgeGroup: () => dispatch(openAgeGroupDialog(stateProps.selectedPupils)),\n onAddToGroup: () => dispatch(openAddToGroupDialog(stateProps.selectedPupils)),\n onRemoveFromGroup: () =>\n dispatch(openRemoveFromGroupDialog(stateProps.selectedPupils)),\n retirePupils: () =>\n stateProps.selectedPupils.forEach(id =>\n dispatch(retirePupil(id)).catch(errorHandler)\n ),\n onIncrementAge: () =>\n stateProps.selectedPupils.forEach(id =>\n dispatch(incrementAgeGroup(id)).catch(errorHandler)\n ),\n addPermission: () =>\n stateProps.selectedPupils.forEach(id =>\n dispatch(addPermission(id)).catch(e => null)\n ),\n removePermission: () =>\n stateProps.selectedPupils.forEach(id =>\n dispatch(removePermission(id)).catch(e => null)\n ),\n onExportCSV: () =>\n dispatch(exportCSV(stateProps.selectedPupils)).then(\n resp => (window.location = resp.data.url)\n )\n})\n\nexport default withMe(\n connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n )(PupilsBulkAction)\n)\n","import React, { Fragment, useEffect, useMemo, useState } from 'react'\nimport styles from './pupils.styles'\nimport injectSheet from 'react-jss'\nimport Paper from 'pobble-components/dist/paper'\nimport ContentHolder from '../../content-holder/content-holder'\nimport PupilsComponent from '../../pupils-component/pupils-component.container'\nimport LoadingScreen from './loading-screen/loading-screen'\nimport SetAgeGroupDialog from './dialogs/set-age-group/set-age-group.container'\nimport AddToGroupDialog from './dialogs/add-to-group/add-to-group.container'\nimport RemoveFromGroupDialog from './dialogs/remove-from-group/remove-from-group.container'\nimport PupilsBulkAction from './pupils-bulk-action/pupils-bulk-action.container'\nimport { PrintPasscodesDialog } from '../../print-passcodes/print-passcodes'\nimport PupilsContext from './pupils.context'\nimport { printPasscodesStyles } from '../../print-passcodes/print-passcodes.styles'\n\nconst Pupils = ({\n classes,\n showLoadingScreen,\n showPupilsComponent,\n onMount\n}) => {\n useEffect(() => {\n onMount()\n }, []) //eslint-disable-line\n\n const [printPasscodesState, setPrintPasscodesState] = useState({\n open: false,\n ids: []\n })\n\n const contextValue = useMemo(\n () => {\n return {\n openPasscodesDialog: ids => setPrintPasscodesState({ open: true, ids })\n }\n },\n [setPrintPasscodesState]\n )\n\n return (\n <PupilsContext.Provider value={contextValue}>\n <ContentHolder className={classes.pageHolder}>\n <Paper>\n {showLoadingScreen && <LoadingScreen />}\n {showPupilsComponent && (\n <Fragment>\n <PupilsComponent />\n <SetAgeGroupDialog />\n <AddToGroupDialog />\n <RemoveFromGroupDialog />\n </Fragment>\n )}\n </Paper>\n <PupilsBulkAction />\n <PrintPasscodesDialog\n isOpen={printPasscodesState.open}\n ids={printPasscodesState.ids}\n requestClose={() =>\n setPrintPasscodesState({ ...printPasscodesStyles, open: false })\n }\n />\n </ContentHolder>\n </PupilsContext.Provider>\n )\n}\n\nexport default injectSheet(styles)(Pupils)\n","import { connect } from 'react-redux'\nimport Pupils from './pupils'\nimport { getSchoolId } from '../../../stores/me/me.selectors'\nimport { fetchPupils } from '../../../stores/pupils/pupils.actions'\nimport { getPupilsFetchingStatus } from '../../../stores/pupils/pupils.selectors.js'\nimport { withMe } from 'pobble-components/dist/pobble-user'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\nimport { fetchGroups } from '../../../stores/groups/groups.actions'\n\nconst mapStateToProps = (state, { me }) => {\n const { pending, requestError } = getPupilsFetchingStatus(state)\n return {\n schoolId: getSchoolId(me),\n showLoadingScreen: pending,\n showPupilsComponent: !pending && !requestError\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n dispatch: dispatch\n})\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...ownProps,\n ...stateProps,\n onMount: () => {\n dispatch(fetchGroups(stateProps.schoolId)).catch(errorHandler)\n dispatch(fetchPupils(stateProps.schoolId)).catch(errorHandler)\n }\n})\n\nexport default withMe(\n connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n )(Pupils)\n)\n","const styles = {\n pageHolder: {\n paddingBottom: '80px'\n },\n head: {\n display: 'flex',\n justifyContent: 'flex-end'\n }\n}\n\nexport default styles\n","const styles = ({ COLORS, BREAKPOINTS }) => ({\n container: {\n [`@media (max-width: ${BREAKPOINTS.XS})`]: {\n overflow: 'auto'\n }\n },\n table: {\n width: '100%'\n },\n left: {\n textAlign: 'left'\n },\n selectAll: {\n color: COLORS.BLUE.NORMAL,\n cursor: 'pointer',\n fontWeight: 'bold',\n userSelect: 'none'\n },\n icon: {\n width: '20px',\n height: '20px',\n position: 'relative',\n top: '4px'\n }\n})\n\nexport default styles\n","import { hover } from 'pobble-components/dist/jss-mixins'\n\nconst styles = ({ COLORS }) => ({\n center: {\n textAlign: 'center'\n },\n right: {\n textAlign: 'right'\n },\n groupWrapper: {\n cursor: 'pointer',\n transition: 'color, 0.3s',\n ...hover({\n color: COLORS.BLUE.NORMAL\n }),\n display: 'flex',\n alignItems: 'center'\n },\n spinner: {\n fontSize: '20px !important',\n margin: '8px 10px',\n display: 'inline-flex !important'\n },\n pendingRow: {\n '& td': {\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n left: '0',\n top: '0',\n width: '100%',\n height: '100%',\n backgroundColor: 'rgba(255, 255, 255, 0.5)'\n }\n }\n },\n misLabel: {\n background: '#c5c5c5',\n display: 'block',\n borderRadius: '4px',\n fontSize: '11px',\n lineHeight: '12px',\n color: '#fff',\n padding: '2px 7px',\n marginLeft: '6px'\n },\n mis: {\n width: '40px',\n height: '40px',\n background: '#c5c5c5',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: '4px',\n fontSize: '11px',\n lineHeight: '12px',\n color: '#fff'\n }\n})\n\nexport default styles\n","import React, { Fragment } from 'react'\nimport styles from './context-menu.styles'\nimport injectSheet from 'react-jss'\nimport MoreButton from 'pobble-components/dist/more-button'\nimport DropMenu from 'pobble-components/dist/drop-menu'\nimport PencilIcon from 'react-icons/lib/fa/pencil'\nimport CloseIcon from 'react-icons/lib/fa/close'\nimport { openConfirmationDialog } from 'pobble-components/dist/modal/confirmation-dialog'\n\nconst ContextMenu = ({\n classes,\n id,\n openAgeGroupDialog,\n groupName,\n retirePupil,\n onDelete,\n onEdit,\n canEdit\n}) => (\n <DropMenu\n popoverClassName={classes.contextMenuHolder}\n button={({ ref, togglePopover }) => (\n <MoreButton forwardedRef={ref} onClick={togglePopover} />\n )}>\n {({ Menu, MenuItem, IconHolder, Separator, closePopover }) => (\n <Menu>\n <MenuItem onClick={() => closePopover() && onEdit()}>\n <IconHolder>\n <PencilIcon />\n </IconHolder>\n Edit group\n </MenuItem>\n {canEdit && (\n <Fragment>\n <Separator />\n <MenuItem\n onClick={() => {\n closePopover()\n openConfirmationDialog({\n bodyText: `Are you sure you want to delete ${groupName} ?`,\n confirmText: 'Delete group',\n action: () => onDelete()\n })\n }}\n className={classes.retirePupil}>\n <IconHolder>\n <CloseIcon />\n </IconHolder>\n Delete group\n </MenuItem>\n </Fragment>\n )}\n </Menu>\n )}\n </DropMenu>\n)\n\nexport default injectSheet(styles)(ContextMenu)\n","export default ({ COLORS }) => ({\n retirePupil: {\n color: COLORS.RED.NORMAL\n }\n})\n","import { connect } from 'react-redux'\nimport ContextMenu from './context-menu'\nimport { getGroup } from '../../../../../../stores/groups/groups.selectors'\nimport { deleteGroup } from '../../../../../../stores/groups/groups.actions'\nimport { openUpdateGroupDialog } from '../../../dialogs/update-group/update-group.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapStateToProps = (state, { id }) => {\n const group = getGroup(state, id)\n return {\n groupName: group.title,\n mis: group.mis_group,\n canEdit: group.policy && group.policy.can_manage_students_for_group\n }\n}\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...ownProps,\n ...stateProps,\n onDelete: () => dispatch(deleteGroup(ownProps.id)).catch(errorHandler),\n onEdit: () => dispatch(openUpdateGroupDialog(ownProps.id))\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n)(ContextMenu)\n","const openUpdateGroupDialog = id => ({\n type: 'GROUPS:UPDATE_GROUP_DIALOG:OPEN',\n id\n})\n\nconst closeUpdateGroupDialog = () => ({\n type: 'GROUPS:UPDATE_GROUP_DIALOG:CLOSE'\n})\n\nexport { openUpdateGroupDialog, closeUpdateGroupDialog }\n","import React from 'react'\nimport styles from './group-entry.styles'\nimport injectSheet from 'react-jss'\nimport { Cell } from 'pobble-components/dist/table'\nimport Checkbox from 'pobble-components/dist/form-elements/form-checkbox'\nimport EyeIcon from 'react-icons/lib/fa/eye'\nimport EyeSlashIcon from 'react-icons/lib/fa/eye-slash'\nimport Tooltip from 'pobble-components/dist/tooltip'\nimport UserName from 'pobble-components/dist/user-name'\nimport ContextMenu from './context-menu/context-menu.container'\nimport Spinner from 'pobble-components/dist/spinner'\nimport classNames from 'classnames'\n\nconst PupilEntry = ({\n classes,\n selected,\n title,\n access,\n students,\n onSelect,\n worksPublished,\n recieved,\n out,\n views,\n onClick,\n id,\n pending,\n mis\n}) => (\n <tr className={classNames({ [classes.pendingRow]: pending })}>\n <Cell className={classes.center}>\n <Checkbox checked={selected} onChange={onSelect} />\n </Cell>\n <Cell>\n <span className={classes.groupWrapper} onClick={onClick}>\n <UserName>{title}</UserName>\n {mis && <span className={classes.misLabel}>MIS</span>}\n </span>\n </Cell>\n <Cell className={classes.center}>\n {access ? (\n <Tooltip content=\"Group is listed on the school page\">\n <EyeIcon />\n </Tooltip>\n ) : (\n <Tooltip content=\"The team can see this group, but it not listed in the school page\">\n <EyeSlashIcon />\n </Tooltip>\n )}\n </Cell>\n <Cell className={classes.center}>{students}</Cell>\n <Cell className={classes.center}>{worksPublished}</Cell>\n <Cell className={classes.center}>{recieved}</Cell>\n <Cell className={classes.center}>{out}</Cell>\n <Cell className={classes.center}>{views}</Cell>\n <Cell className={classes.right}>\n {pending && <Spinner className={classes.spinner} />}\n {!pending && <ContextMenu id={id} />}\n </Cell>\n </tr>\n)\n\nexport default injectSheet(styles)(PupilEntry)\n","import { getGroupsArray } from '../../../../stores/groups/groups.selectors'\n\nconst changeSortKey = (key, direction) => ({\n type: 'GROUPS_COMPONENT:SET_SORT_KEY',\n key,\n direction\n})\n\nconst groupAction = id => ({ type: 'GROUPS_COMPONENT:GROUP_ACTION', id })\n\nconst setGroupSelectStatus = (id, status) => ({\n type: 'GROUPS_COMPONENT:SET_SELECT_STATUS',\n id,\n status\n})\n\nconst setGroupSelectStatuses = statuses => ({\n type: 'GROUPS_COMPONENT:SET_SELECT_STATUSES',\n statuses\n})\n\nconst selectAllGroups = () => (dispatch, getState) => {\n const groups = getGroupsArray(getState())\n const statuses = {}\n groups.forEach(group => (statuses[group.id] = true))\n dispatch(setGroupSelectStatuses(statuses))\n}\n\nconst showSelectedGroups = () => ({ type: 'GROUPS_COMPONENT:SHOW_SELECTED' })\nconst unsetShowSelectedGroups = () => ({ type: 'GROUPS_COMPONENT:SHOW_ALL' })\n\nconst deselectAllGroups = () => dispatch => dispatch(setGroupSelectStatuses({}))\n\nexport {\n changeSortKey,\n setGroupSelectStatus,\n selectAllGroups,\n deselectAllGroups,\n groupAction,\n showSelectedGroups,\n unsetShowSelectedGroups\n}\n","import { createSelector } from 'reselect'\nimport orderBy from 'lodash/orderBy'\nimport {\n getGroups,\n getGroupsArray\n} from '../../../../stores/groups/groups.selectors'\n\nconst getData = (state, selector) => {\n const data = state.GroupsComponent ? state.GroupsComponent : state\n return !data ? null : selector(data)\n}\n\nconst getSelectedGroups = state => getData(state, data => data.selectedGroups)\n\nconst isShowingSelected = state => getData(state, data => data.showSelected)\n\nconst getSelectedGroupsIdsArray = createSelector(\n [getSelectedGroups],\n groups => {\n const groupsIdArray = []\n Object.keys(groups).forEach(id => groups[id] && groupsIdArray.push(id))\n return groupsIdArray\n }\n)\n\nconst getSelectedGroupsArray = createSelector(\n [getGroups, getSelectedGroupsIdsArray],\n (groups, selectedGroupsArray) => selectedGroupsArray.map(id => groups[id])\n)\n\nconst isGroupSelected = (state, id) => getSelectedGroups(state)[id] || false\n\nconst getSortBy = state => getData(state, data => data.sortBy)\n\nconst getSelectedGroupsLength = createSelector(\n [getSelectedGroups],\n selectedGroups => Object.keys(selectedGroups).length\n)\n\nconst isEveryoneSelected = createSelector(\n [getSelectedGroupsLength, getGroupsArray],\n (selectedGroupsLength, groups) =>\n selectedGroupsLength === groups.length ? true : false\n)\n\nconst getGroupsConditionally = createSelector(\n [getGroupsArray, isShowingSelected, getSelectedGroupsArray],\n (groups, isShowingSelected, selectedGroups) =>\n isShowingSelected ? selectedGroups : groups\n)\n\nconst getSortedGroups = createSelector(\n [getSortBy, getGroupsConditionally],\n (sort, groupsArray) => {\n if (!sort.key) return groupsArray\n const propsMap = {\n title: group => group.title,\n access: group => group.visibility,\n students_count: group => group.number_of_students\n }\n return orderBy(groupsArray, propsMap[sort.key], sort.direction)\n }\n)\n\nexport {\n getSelectedGroups,\n getSelectedGroupsIdsArray,\n getSelectedGroupsLength,\n getSortedGroups,\n getSortBy,\n isEveryoneSelected,\n isGroupSelected,\n isShowingSelected\n}\n","import { connect } from 'react-redux'\nimport GroupEntry from './group-entry'\nimport {\n getGroup,\n getGroupDeletingStatus,\n getGroupCreatingStatus,\n getGroupUpdatingStatus\n} from '../../../../../stores/groups/groups.selectors'\nimport { setGroupSelectStatus } from '../../groups-component-redux/groups-component-redux.actions'\nimport { isGroupSelected } from '../../groups-component-redux/groups-component-redux.selectors'\n\nconst mapStateToProps = (state, { id }) => {\n const group = getGroup(state, id)\n const creating = getGroupCreatingStatus(state, id)\n const deleting = getGroupDeletingStatus(state, id)\n const updating = getGroupUpdatingStatus(state, id)\n return {\n mis: group.mis_group,\n pending: creating.pending || deleting.pending || updating.pending,\n title: group.title,\n access: group.visibility === 'public',\n students: group.number_of_students,\n worksPublished: group.number_of_published_works || '-',\n recieved: group.number_of_comments_received || '-',\n out: group.number_of_comments_left || '-',\n views: group.number_of_work_views || '-',\n selected: isGroupSelected(state, id)\n }\n}\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...ownProps,\n ...stateProps,\n onSelect: e => dispatch(setGroupSelectStatus(ownProps.id, e.target.checked))\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n)(GroupEntry)\n","import React from 'react'\n\nexport default props => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\" {...props}>\n <path\n d=\"M91.2 44.07c0-16.43-18.62-29.7-41.6-29.7S8 27.68 8 44.07c0 9.43 6.13 17.83 15.7 23.27-2.18 7.75-5.53 10.54-8.45 13.83-.7.84-1.5 1.53-1.26 2.7h0a2.15 2.15 0 0 0 2.23 1.77 40.4 40.4 0 0 0 5.3-1 51.06 51.06 0 0 0 21.33-11.22 64.78 64.78 0 0 0 6.74.37c23 0 41.6-13.28 41.6-29.72\"\n fill=\"#545454\"\n />\n <path\n d=\"M39.8 44.4c0 7.16-5.08 10.44-10.3 10.44-5.72 0-10.12-3.76-10.12-10.08S23.53 34.4 29.8 34.4c6 0 10 4.12 10 10zm-14.15.2c0 3.36 1.4 5.88 4 5.88 2.35 0 3.87-2.36 3.87-5.88 0-2.92-1.1-5.88-3.87-5.88-2.92 0-4 3-4 5.88zM62 48.12l.16 6.28h-5.28l-.28-2.76h-.1a7 7 0 0 1-6.12 3.2c-4 0-6.88-2.48-6.88-8.52V34.84h6.12v10.52c0 2.84.92 4.56 3 4.56a3.25 3.25 0 0 0 3-2.12 3.4 3.4 0 0 0 .2-1.32V34.84H62zm11.7-18.88v5.6H78v4.48h-4.3v7.08c0 2.36.56 3.44 2.4 3.44a10 10 0 0 0 1.8-.16v4.6a11.82 11.82 0 0 1-4 .52 6.32 6.32 0 0 1-4.56-1.68c-1.12-1.16-1.68-3-1.68-5.8v-8h-2.6v-4.48h2.6V30.6z\"\n fill=\"#fff\"\n />\n </svg>\n)\n","import React from 'react'\n\nexport default props => (\n <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 100 100\" {...props}>\n <path\n d=\"M91.2 44.07c0-16.43-18.62-29.7-41.6-29.7S8 27.68 8 44.07c0 9.43 6.13 17.83 15.7 23.27-2.18 7.75-5.53 10.54-8.45 13.83-.7.84-1.5 1.53-1.26 2.7h0a2.15 2.15 0 0 0 2.23 1.77 40.4 40.4 0 0 0 5.3-1 51.06 51.06 0 0 0 21.33-11.22 64.78 64.78 0 0 0 6.74.37c23 0 41.6-13.28 41.6-29.72\"\n fill=\"#545454\"\n />\n <path\n d=\"M41.1 29.4a3.05 3.05 0 0 1-3.28 3 3.06 3.06 0 1 1 0-6.12 3 3 0 0 1 3.28 3.12zm-6.28 25V34.84h6.08V54.4zM45.8 41.08l-.16-6.24h5.28l.28 2.68h.12a7.16 7.16 0 0 1 6-3.12c4 0 7 2.64 7 8.4v11.6h-6.04V43.56c0-2.52-.88-4.24-3.08-4.24a3.25 3.25 0 0 0-3.08 2.28 4.18 4.18 0 0 0-.24 1.52V54.4H45.8z\"\n fill=\"#fff\"\n />\n </svg>\n)\n","import React from 'react'\nimport styles from './groups-table.styles'\nimport injectSheet from 'react-jss'\nimport { Table, HeadCell } from 'pobble-components/dist/table'\nimport GroupEntry from './group-entry/group-entry.container'\nimport BookIcon from 'react-icons/lib/fa/book'\nimport EyeIcon from 'react-icons/lib/fa/eye'\nimport CommentLeftIcon from '../../../icons/comment-left-icon'\nimport CommentReceivedIcon from '../../../icons/comment-received-icon'\n\nconst GroupsTable = ({\n style,\n classes,\n allAction,\n sortBy,\n changeSortKey,\n groups,\n onSelect,\n selectedGroups,\n onGroupClick,\n hideAllButton,\n actualGroupsEmpty,\n filteredGroupsEmpty\n}) => (\n <div style={style} className={classes.container}>\n {actualGroupsEmpty && <span>This school doesn't have any groups yet</span>}\n {filteredGroupsEmpty && <span>No groups matching this criteria</span>}\n {!!groups.length && (\n <Table className={classes.table}>\n <thead>\n <tr>\n <HeadCell>\n {!hideAllButton && (\n <span className={classes.selectAll} onClick={allAction}>\n All\n </span>\n )}\n </HeadCell>\n <HeadCell\n ordered={sortBy.key === 'title' ? sortBy.direction : null}\n order={direction => changeSortKey('title', direction)}>\n Title\n </HeadCell>\n <HeadCell\n ordered={sortBy.key === 'access' ? sortBy.direction : null}\n order={direction => changeSortKey('access', direction)}>\n Access\n </HeadCell>\n <HeadCell\n ordered={\n sortBy.key === 'students_count' ? sortBy.direction : null\n }\n order={direction => changeSortKey('students_count', direction)}>\n Pupils\n </HeadCell>\n <HeadCell>\n <BookIcon />\n </HeadCell>\n <HeadCell>\n <CommentLeftIcon className={classes.icon} />\n </HeadCell>\n <HeadCell>\n <CommentReceivedIcon className={classes.icon} />\n </HeadCell>\n <HeadCell>\n <EyeIcon />\n </HeadCell>\n <HeadCell />\n </tr>\n </thead>\n <tbody>\n {groups.map(group => (\n <GroupEntry\n onClick={() => onGroupClick(group.id)}\n key={group.id}\n id={group.id}\n />\n ))}\n </tbody>\n </Table>\n )}\n </div>\n)\n\nexport default injectSheet(styles)(GroupsTable)\n","import { connect } from 'react-redux'\nimport GroupsTable from './groups-table'\nimport { withRouter } from 'react-router-dom'\nimport {\n getSortedGroups,\n getSortBy,\n getSelectedGroups,\n isEveryoneSelected,\n isShowingSelected\n} from '../groups-component-redux/groups-component-redux.selectors'\nimport {\n changeSortKey,\n selectAllGroups,\n deselectAllGroups,\n groupAction\n} from '../groups-component-redux/groups-component-redux.actions'\nimport { getGroupsArray } from '../../../../stores/groups/groups.selectors'\n\nconst mapStateToProps = state => {\n const actualGroups = getGroupsArray(state)\n const filteredGroups = getSortedGroups(state)\n return {\n actualGroupsEmpty: !actualGroups.length,\n filteredGroupsEmpty: !!actualGroups.length && !filteredGroups.length,\n hideAllButton: isShowingSelected(state),\n groups: getSortedGroups(state),\n sortBy: getSortBy(state),\n selectedGroups: getSelectedGroups(state),\n everyoneSelected: isEveryoneSelected(state)\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n changeSortKey: (key, direction) => dispatch(changeSortKey(key, direction)),\n dispatch\n})\n\nconst mergeProps = (stateProps, dispatchProps, ownProps) => ({\n ...ownProps,\n ...stateProps,\n ...dispatchProps,\n onGroupClick: id => {\n dispatchProps.dispatch(groupAction(id))\n ownProps.history.push('/')\n },\n allAction: () => {\n return !stateProps.everyoneSelected\n ? dispatchProps.dispatch(selectAllGroups())\n : dispatchProps.dispatch(deselectAllGroups())\n }\n})\n\nexport default withRouter(\n connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n )(GroupsTable)\n)\n","const styles = {\n container: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%'\n },\n selectGroup: {\n height: '14px',\n width: '50px'\n }\n}\n\nexport default styles\n","import React from 'react'\nimport styles from './loading-screen.styles'\nimport injectSheet from 'react-jss'\nimport Bone from 'pobble-components/dist/bone'\n\nconst Cell = ({ children, style }) => (\n <td\n style={{\n textAlign: 'center',\n padding: '20px 10px',\n borderBottom: '1px solid #ececec',\n ...style\n }}>\n {children}\n </td>\n)\nconst GroupRow = ({ groupWidth }) => (\n <tr>\n <Cell>\n <Bone style={{ width: '20px', height: '20px', borderRadius: '4px' }} />\n </Cell>\n <Cell style={{ textAlign: 'left' }}>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <Bone\n style={{\n flexShrink: '0',\n width: '32px',\n height: '32px',\n borderRadius: '32px',\n marginRight: '10px'\n }}\n />\n <Bone style={{ width: groupWidth, height: '14px' }} />\n </div>\n </Cell>\n <Cell>\n <Bone style={{ width: '18px', height: '18px' }} />\n </Cell>\n <Cell>\n <Bone style={{ width: '18px', height: '18px' }} />\n </Cell>\n <Cell style={{ textAlign: 'right' }}>\n <Bone style={{ width: '40px', height: '40px', borderRadius: '5px' }} />\n </Cell>\n </tr>\n)\n\nconst LoadingScreen = ({ classes }) => (\n <div className={classes.container}>\n <div style={{ display: 'flex', justifyContent: 'flex-end' }}>\n <Bone style={{ width: '110px', height: '40px', borderRadius: '4px' }} />\n </div>\n <table>\n <tbody>\n <tr>\n <Cell>\n <Bone style={{ width: '30px' }} />\n </Cell>\n <Cell>\n <Bone style={{ width: '60px' }} />\n </Cell>\n <Cell>\n <Bone style={{ width: '66px' }} />\n </Cell>\n <Cell>\n <Bone style={{ width: '78px' }} />\n </Cell>\n <Cell />\n </tr>\n <GroupRow groupWidth=\"120px\" />\n <GroupRow groupWidth=\"130px\" />\n <GroupRow groupWidth=\"70px\" />\n <GroupRow groupWidth=\"90px\" />\n <GroupRow groupWidth=\"100px\" />\n <GroupRow groupWidth=\"80px\" />\n </tbody>\n </table>\n </div>\n)\n\nexport default injectSheet(styles)(LoadingScreen)\n","import React from 'react'\nimport styles from './add-group.styles'\nimport injectSheet from 'react-jss'\nimport {\n Modal,\n ModalHeader,\n ModalContent,\n ModalFooter\n} from 'pobble-components/dist/modal'\nimport Button from 'pobble-components/dist/button'\nimport FormInput from 'pobble-components/dist/form-elements/form-input'\nimport * as Yup from 'yup'\nimport { Formik } from 'formik'\n\nconst SetAgeGroups = ({\n classes,\n opened,\n requestClose = () => null,\n initialAgeGroup,\n onSubmit,\n pending\n}) => (\n <Modal isOpen={opened}>\n <ModalHeader>Create a new group</ModalHeader>\n <Formik\n validationSchema={Yup.object().shape({\n groupName: Yup.string().required('Please provide a name for your group')\n })}\n onSubmit={onSubmit}\n initialValues={{\n groupName: ''\n }}>\n {props => {\n const {\n values,\n handleChange,\n handleSubmit,\n handleBlur,\n errors,\n isValid\n } = props\n return (\n <form onSubmit={handleSubmit}>\n <ModalContent legacy className={classes.modalContent}>\n <FormInput\n validationError={errors.groupName}\n placeholder=\"The name of the group\"\n name=\"groupName\"\n value={values.groupName}\n onChange={handleChange}\n onBlur={handleBlur}\n />\n </ModalContent>\n <ModalFooter className={classes.footer}>\n <Button\n simple\n tall\n type=\"button\"\n className={classes.cancel}\n action={requestClose}>\n Cancel\n </Button>\n <Button disabled={!isValid || pending} tall type=\"submit\">\n {!pending && 'Create group'}\n {pending && 'Creating'}\n </Button>\n </ModalFooter>\n </form>\n )\n }}\n </Formik>\n </Modal>\n)\n\nexport default injectSheet(styles)(SetAgeGroups)\n","export default {\n footer: {\n display: 'flex',\n justifyContent: 'flex-end'\n },\n cancel: {\n margin: '0 10px 0 0'\n },\n modalContent: {\n minWidth: '400px !important'\n }\n}\n","const getData = (state, selector) => {\n const data = state.GroupsComponent.addGroupDialog\n ? state.GroupsComponent.addGroupDialog\n : state\n return !data ? null : selector(data)\n}\n\nconst isOpen = state => getData(state, data => data.opened)\n\nexport { isOpen }\n","const openAddGroupDialog = ids => ({\n type: 'GROUPS:ADD_GROUP_DIALOG:OPEN',\n ids\n})\n\nconst closeAddGroupDialog = () => ({\n type: 'GROUPS:ADD_GROUP_DIALOG:CLOSE'\n})\n\nexport { openAddGroupDialog, closeAddGroupDialog }\n","import { connect } from 'react-redux'\nimport AddGroup from './add-group'\nimport { createGroup } from '../../../../../stores/groups/groups.actions'\nimport { isOpen } from './add-group.selectors'\nimport { closeAddGroupDialog } from './add-group.actions'\nimport { getSchoolId } from '../../../../../stores/me/me.selectors'\nimport { withMe } from 'pobble-components/dist/pobble-user'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\nimport { getGroupCreatingStatus } from '../../../../../stores/groups/groups.selectors'\n\nconst mapStateToProps = (state, { me }) => ({\n pending: getGroupCreatingStatus(state).pending,\n schoolId: getSchoolId(me),\n opened: isOpen(state)\n})\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...ownProps,\n ...stateProps,\n requestClose: () => dispatch(closeAddGroupDialog()),\n onSubmit: ({ groupName }) => {\n dispatch(\n createGroup(stateProps.schoolId, {\n title: groupName,\n visibility: 'public'\n })\n ).catch(errorHandler)\n }\n})\n\nexport default withMe(\n connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n )(AddGroup)\n)\n","import React from 'react'\nimport styles from './update-group.styles'\nimport injectSheet from 'react-jss'\nimport {\n Modal,\n ModalHeader,\n ModalContent,\n ModalFooter\n} from 'pobble-components/dist/modal'\nimport Button from 'pobble-components/dist/button'\nimport FormInput from 'pobble-components/dist/form-elements/form-input'\nimport FormSelect from 'pobble-components/dist/form-elements/form-select'\nimport * as Yup from 'yup'\nimport { Formik } from 'formik'\n\nconst UpdateGroup = ({\n classes,\n opened,\n requestClose = () => null,\n initialAgeGroup,\n onSubmit,\n title,\n visibility,\n editableProps\n}) => (\n <Modal isOpen={opened}>\n <ModalHeader>Update group</ModalHeader>\n <Formik\n validationSchema={Yup.object().shape({\n groupTitle: Yup.string().required(\n 'Please provide a name for your group'\n )\n })}\n onSubmit={onSubmit}\n initialValues={{\n groupTitle: title,\n groupVisibility: visibility\n }}>\n {props => {\n const {\n values,\n handleChange,\n handleSubmit,\n handleBlur,\n errors,\n isValid\n } = props\n return (\n <form onSubmit={handleSubmit}>\n <ModalContent legacy className={classes.modalContent}>\n <div className={classes.row}>\n <label className={classes.label} htmlFor=\"groupTitle\">\n Group title\n </label>\n <FormInput\n disabled={!editableProps.title}\n validationError={errors.groupTitle}\n placeholder=\"Enter group title\"\n id=\"groupTitle\"\n name=\"groupTitle\"\n value={values.groupTitle}\n onChange={handleChange}\n onBlur={handleBlur}\n />\n </div>\n <div className={classes.row}>\n <label className={classes.label} htmlFor=\"groupTitle\">\n Visibility of the group\n </label>\n <FormSelect\n disabled={!editableProps.visibility}\n name=\"groupVisibility\"\n value={values.groupVisibility}\n onChange={handleChange}\n onBlur={handleBlur}>\n <option value=\"public\">Public</option>\n <option value=\"internal\">Internal</option>\n </FormSelect>\n </div>\n </ModalContent>\n <ModalFooter className={classes.footer}>\n <Button\n simple\n tall\n type=\"button\"\n className={classes.cancel}\n action={requestClose}>\n Cancel\n </Button>\n <Button disabled={!isValid} tall type=\"submit\">\n Update group\n </Button>\n </ModalFooter>\n </form>\n )\n }}\n </Formik>\n </Modal>\n)\n\nexport default injectSheet(styles)(UpdateGroup)\n","export default ({ COLORS }) => ({\n footer: {\n display: 'flex',\n justifyContent: 'flex-end'\n },\n cancel: {\n margin: '0 10px 0 0'\n },\n modalContent: {\n minWidth: '400px !important'\n },\n label: {\n color: COLORS.TEXT.MID_GREY.NORMAL,\n display: 'inline-block',\n margin: '0 0 10px'\n },\n row: {\n margin: '20px 0 0',\n '&:first-child': {\n margin: '0'\n }\n }\n})\n","const getData = (state, selector) => {\n const data = state.GroupsComponent.updateGroupDialog\n ? state.GroupsComponent.updateGroupDialog\n : state\n return !data ? null : selector(data)\n}\n\nconst isOpen = state => getData(state, data => data.opened)\nconst getId = state => getData(state, data => data.id)\n\nexport { isOpen, getId }\n","import { connect } from 'react-redux'\nimport UpdateGroup from './update-group'\nimport { isOpen, getId } from './update-group.selectors'\nimport { closeUpdateGroupDialog } from './update-group.actions'\nimport { getGroup } from '../../../../../stores/groups/groups.selectors'\nimport { updateGroup } from '../../../../../stores/groups/groups.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapStateToProps = state => {\n const group = getGroup(state, getId(state))\n const opened = isOpen(state)\n if (!group) return { opened }\n return {\n editableProps: group.policy.editable_properties,\n opened,\n id: group.id,\n title: group.title,\n visibility: group.visibility\n }\n}\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...ownProps,\n ...stateProps,\n requestClose: () => dispatch(closeUpdateGroupDialog()),\n onSubmit: ({ groupTitle, groupVisibility }) => {\n const params = {\n title: groupTitle,\n visibility: groupVisibility\n }\n return dispatch(\n updateGroup(\n stateProps.id,\n !stateProps.mis\n ? params\n : {\n visibility: groupVisibility\n }\n )\n ).catch(errorHandler)\n }\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n)(UpdateGroup)\n","import React from 'react'\nimport styles from './set-visibility.styles'\nimport injectSheet from 'react-jss'\nimport {\n Modal,\n ModalHeader,\n ModalContent,\n ModalFooter\n} from 'pobble-components/dist/modal'\nimport Button from 'pobble-components/dist/button'\nimport FormSelect from 'pobble-components/dist/form-elements/form-select'\nimport * as Yup from 'yup'\nimport { Formik } from 'formik'\n\nconst SetVisibility = ({\n classes,\n opened,\n requestClose = () => null,\n onSubmit,\n ids,\n visibility\n}) => (\n <Modal isOpen={opened}>\n <ModalHeader>Set visibility for {ids.length} groups</ModalHeader>\n <Formik\n validationSchema={Yup.object().shape({\n groupVisibility: Yup.string().required('Please select a visibility')\n })}\n onSubmit={onSubmit}\n initialValues={{\n groupVisibility: visibility\n }}>\n {props => {\n const {\n values,\n handleChange,\n handleSubmit,\n handleBlur,\n errors,\n isValid\n } = props\n return (\n <form onSubmit={handleSubmit}>\n <ModalContent legacy className={classes.modalContent}>\n <FormSelect\n validationError={errors.groupVisibility}\n name=\"groupVisibility\"\n value={values.groupVisibility}\n onChange={handleChange}\n onBlur={handleBlur}>\n <option value=\"\">Select</option>\n <option value=\"public\">Public</option>\n <option value=\"internal\">Internal</option>\n </FormSelect>\n </ModalContent>\n <ModalFooter className={classes.footer}>\n <Button\n simple\n tall\n type=\"button\"\n className={classes.cancel}\n action={requestClose}>\n Cancel\n </Button>\n <Button disabled={!isValid} tall type=\"submit\">\n Set visibility\n </Button>\n </ModalFooter>\n </form>\n )\n }}\n </Formik>\n </Modal>\n)\n\nexport default injectSheet(styles)(SetVisibility)\n","export default ({ COLORS }) => ({\n footer: {\n display: 'flex',\n justifyContent: 'flex-end'\n },\n cancel: {\n margin: '0 10px 0 0'\n },\n modalContent: {\n minWidth: '400px !important'\n },\n label: {\n color: COLORS.TEXT.MID_GREY.NORMAL,\n display: 'inline-block',\n margin: '0 0 10px'\n },\n row: {\n margin: '20px 0 0',\n '&:first-child': {\n margin: '0'\n }\n }\n})\n","const getData = (state, selector) => {\n const data = state.GroupsComponent.setVisibilityDialog\n ? state.GroupsComponent.setVisibilityDialog\n : state\n return !data ? null : selector(data)\n}\n\nconst isOpen = state => getData(state, data => data.opened)\nconst getIds = state => getData(state, data => data.ids)\n\nexport { isOpen, getIds }\n","import { connect } from 'react-redux'\nimport SetVisibility from './set-visibility'\nimport { isOpen, getIds } from './set-visibility.selectors'\nimport { closeSetVisibilityDialog } from './set-visibility.actions'\nimport { getGroup } from '../../../../../stores/groups/groups.selectors'\nimport { updateGroup } from '../../../../../stores/groups/groups.actions'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapStateToProps = state => {\n const opened = isOpen(state)\n const ids = getIds(state)\n return {\n opened,\n ids,\n visibility: ids.length === 1 ? getGroup(state, ids[0]).visibility : ''\n }\n}\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...ownProps,\n ...stateProps,\n requestClose: () => dispatch(closeSetVisibilityDialog()),\n onSubmit: ({ groupVisibility }) =>\n stateProps.ids.forEach(id =>\n dispatch(\n updateGroup(id, {\n visibility: groupVisibility\n })\n ).catch(errorHandler)\n )\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n)(SetVisibility)\n","const openSetVisibilityDialog = ids => ({\n type: 'GROUPS:SET_VISIBILITY_DIALOG:OPEN',\n ids\n})\n\nconst closeSetVisibilityDialog = () => ({\n type: 'GROUPS:SET_VISIBILITY_DIALOG:CLOSE'\n})\n\nexport { openSetVisibilityDialog, closeSetVisibilityDialog }\n","import React, { useMemo, Fragment } from 'react'\nimport BulkActionBar from '../../../bulk-action-bar/bulk-action-bar'\nimport styles from './groups-bulk-action.styles'\nimport injectSheet from 'react-jss'\nimport CloseIcon from 'react-icons/lib/fa/close'\nimport EyeIcon from 'react-icons/lib/fa/eye'\nimport { openConfirmationDialog } from 'pobble-components/dist/modal/confirmation-dialog'\n\nconst GroupsBulkAction = ({\n classes,\n selectedGroups,\n deleteGroup,\n showSelected,\n showAll,\n showingSelected,\n onSetVisibility,\n groups\n}) => {\n const anyWondeGroupSelected = useMemo(\n () => {\n let result = false\n for (let groupId of selectedGroups) {\n if (groups[groupId].mis_group) {\n result = true\n break\n }\n }\n return result\n },\n [groups, selectedGroups]\n )\n\n return (\n <BulkActionBar\n onShowAll={showAll}\n onShowSelected={showSelected}\n show={selectedGroups.length}\n selected={selectedGroups}\n showingSelected={showingSelected}\n renderMessage={selected => `${selected.length} groups selected`}\n renderContextMenu={({\n Menu,\n MenuItem,\n IconHolder,\n Separator,\n closePopover\n }) => (\n <Menu>\n <MenuItem onClick={() => closePopover() && onSetVisibility()}>\n <IconHolder>\n <EyeIcon />\n </IconHolder>\n Set visibility\n </MenuItem>\n {!anyWondeGroupSelected && (\n <Fragment>\n <Separator />\n <MenuItem\n className={classes.deleteGroup}\n onClick={() =>\n closePopover() &&\n openConfirmationDialog({\n bodyText: `Are you sure you want to delete ${\n selectedGroups.length\n } groups?`,\n confirmText: 'Delete groups',\n action: deleteGroup\n })\n }>\n <IconHolder>\n <CloseIcon />\n </IconHolder>\n Delete groups\n </MenuItem>\n </Fragment>\n )}\n </Menu>\n )}\n />\n )\n}\n\nexport default injectSheet(styles)(GroupsBulkAction)\n","export default ({ COLORS }) => ({\n deleteGroup: {\n color: COLORS.RED.NORMAL\n }\n})\n","import { connect } from 'react-redux'\nimport GroupsBulkAction from './groups-bulk-action'\nimport {\n getSelectedGroupsIdsArray,\n isShowingSelected\n} from '../groups-component-redux/groups-component-redux.selectors'\nimport {\n showSelectedGroups,\n unsetShowSelectedGroups\n} from '../groups-component-redux/groups-component-redux.actions'\nimport { deleteGroup } from '../../../../stores/groups/groups.actions'\nimport { openSetVisibilityDialog } from '../dialogs/set-visibility/set-visibility.actions'\nimport { getGroups } from '../../../../stores/groups/groups.selectors'\n\nconst mapStateToProps = state => ({\n groups: getGroups(state),\n selectedGroups: getSelectedGroupsIdsArray(state),\n showingSelected: isShowingSelected(state)\n})\n\nconst mapDispatchToProps = dispatch => ({\n dispatch\n})\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...ownProps,\n ...stateProps,\n deleteGroup: () =>\n stateProps.selectedGroups.forEach(id => dispatch(deleteGroup(id))),\n showSelected: () => dispatch(showSelectedGroups()),\n showAll: () => dispatch(unsetShowSelectedGroups()),\n onSetVisibility: () =>\n dispatch(openSetVisibilityDialog(stateProps.selectedGroups))\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n)(GroupsBulkAction)\n","import React from 'react'\nimport styles from './groups-head.styles'\nimport injectSheet from 'react-jss'\nimport Button from 'pobble-components/dist/button'\n\nconst GroupsHead = ({ classes, onAddGroup, showingSelected, showAll }) => (\n <div className={classes.container}>\n {showingSelected && (\n <span className={classes.showingSelected}>\n You are seeing only selected groups.{' '}\n <span className={classes.showAll} onClick={showAll}>\n Show all\n </span>\n </span>\n )}\n <Button\n disabled={showingSelected}\n tall\n className={classes.addGroupButton}\n action={onAddGroup}>\n Add a group\n </Button>\n </div>\n)\n\nexport default injectSheet(styles)(GroupsHead)\n","export default ({ COLORS }) => ({\n container: {\n display: 'flex',\n justifyContent: 'space-between'\n },\n addGroupButton: {\n margin: '0 0 0 auto'\n },\n showingSelected: {\n display: 'flex',\n alignItems: 'center'\n },\n showAll: {\n color: COLORS.BLUE.NORMAL,\n cursor: 'pointer',\n fontWeight: 'bold',\n margin: '0 0 0 5px'\n }\n})\n","import { connect } from 'react-redux'\nimport GroupsHead from './groups-head'\nimport { openAddGroupDialog } from '../dialogs/add-group/add-group.actions'\nimport { isShowingSelected } from '../groups-component-redux/groups-component-redux.selectors'\nimport { unsetShowSelectedGroups } from '../groups-component-redux/groups-component-redux.actions'\n\nconst mapStateToProps = state => ({\n showingSelected: isShowingSelected(state)\n})\n\nconst mapDispatchToProps = dispatch => ({\n onAddGroup: () => dispatch(openAddGroupDialog()),\n showAll: () => dispatch(unsetShowSelectedGroups())\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(GroupsHead)\n","import React from 'react'\nimport styles from './no-groups.styles'\nimport injectSheet from 'react-jss'\nimport noGroups from './no-groups.png'\n\nconst NoGroups = ({ classes, onAddGroup }) => (\n <div className={classes.container}>\n <h2>No groups yet</h2>\n <img src={noGroups} alt=\"There is no groups yet\" />\n <p>\n <span className={classes.addGroup} onClick={onAddGroup}>\n Let's create your first group\n </span>\n </p>\n </div>\n)\n\nexport default injectSheet(styles)(NoGroups)\n","export default ({ COLORS, FONT_SIZES }) => ({\n container: {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n padding: '20px 0 30px',\n '& h2': {\n color: COLORS.TEXT.MID_GREY.NORMAL,\n ...FONT_SIZES.HEADING_BIG.STYLE,\n margin: '0 0 20px'\n },\n '& img': {\n width: '131px',\n height: '131px',\n margin: '0 0 10px'\n }\n },\n addGroup: {\n cursor: 'pointer',\n color: COLORS.BLUE.NORMAL,\n textDecoration: 'none',\n fontWeight: 'bold'\n }\n})\n","import { connect } from 'react-redux'\nimport NoGroups from './no-groups'\nimport { openAddGroupDialog } from '../dialogs/add-group/add-group.actions'\n\nconst mapDispatchToProps = dispatch => ({\n onAddGroup: () => dispatch(openAddGroupDialog())\n})\n\nexport default connect(\n null,\n mapDispatchToProps\n)(NoGroups)\n","import React, { Component, Fragment } from 'react'\nimport styles from './groups.styles'\nimport injectSheet from 'react-jss'\nimport Paper from 'pobble-components/dist/paper'\nimport ContentHolder from '../../content-holder/content-holder'\nimport GroupsTable from './groups-table/groups-table.container'\nimport LoadingScreen from './loading-screen/loading-screen'\nimport AddGroupDialog from './dialogs/add-group/add-group.container'\nimport UpdateGroupDialog from './dialogs/update-group/update-group.container'\nimport SetVisibilityDialog from './dialogs/set-visibility/set-visibility.container'\nimport GroupsBulkAction from './groups-bulk-action/groups-bulk-action.container'\nimport GroupsHead from './groups-head/groups-head.container'\nimport NoGroups from './no-groups/no-groups.container'\n\nclass Groups extends Component {\n componentDidMount() {\n this.props.onMount && this.props.onMount()\n }\n render() {\n const {\n classes,\n showGroupsTable,\n showLoadingScreen,\n actualGroupsEmpty\n } = this.props\n return (\n <ContentHolder className={classes.pageHolder}>\n <Paper>\n {showLoadingScreen && <LoadingScreen />}\n {showGroupsTable && (\n <div>\n <GroupsHead />\n <GroupsTable />\n </div>\n )}\n {actualGroupsEmpty && <NoGroups />}\n {showGroupsTable && (\n <Fragment>\n <UpdateGroupDialog />\n <SetVisibilityDialog />\n </Fragment>\n )}\n <AddGroupDialog />\n </Paper>\n <GroupsBulkAction />\n </ContentHolder>\n )\n }\n}\n\nexport default injectSheet(styles)(Groups)\n","import { connect } from 'react-redux'\nimport Groups from './groups'\nimport { getSchoolId } from '../../../stores/me/me.selectors'\nimport { fetchGroups } from '../../../stores/groups/groups.actions'\nimport {\n getGroupsFetchingStatus,\n getGroupsArray\n} from '../../../stores/groups/groups.selectors'\nimport { withMe } from 'pobble-components/dist/pobble-user'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapStateToProps = (state, { me }) => {\n const { pending, requestError } = getGroupsFetchingStatus(state)\n const actualGroups = getGroupsArray(state)\n const actualGroupsEmpty = !actualGroups.length\n const showContent = !pending && !requestError\n return {\n actualGroupsEmpty: showContent && actualGroupsEmpty,\n schoolId: getSchoolId(me),\n showLoadingScreen: pending,\n showGroupsTable: showContent && !actualGroupsEmpty\n }\n}\n\nconst mapDispatchToProps = dispatch => ({ dispatch })\n\nconst mergeProps = (stateProps, { dispatch }, ownProps) => ({\n ...ownProps,\n ...stateProps,\n onMount: () => dispatch(fetchGroups(stateProps.schoolId)).catch(errorHandler)\n})\n\nexport default withMe(\n connect(\n mapStateToProps,\n mapDispatchToProps,\n mergeProps\n )(Groups)\n)\n","import React, { Component, Fragment } from 'react'\nimport styles from './school-overview.styles'\nimport injectSheet from 'react-jss'\nimport { Route } from 'react-router-dom'\nimport SchoolHead from '../../school-head/school-head'\nimport Pupils from '../pupils/pupils.container'\nimport Groups from '../groups/groups.container'\n\nclass SchoolOverview extends Component {\n render() {\n return (\n <Fragment>\n <SchoolHead />\n <Route exact path=\"/\" component={Pupils} />\n <Route exact path=\"/groups\" component={Groups} />\n </Fragment>\n )\n }\n}\n\nexport default injectSheet(styles)(SchoolOverview)\n","const styles = () => ({\n container: {\n maxWidth: '1020px',\n margin: '0 auto'\n },\n spinner: {\n margin: '80px auto'\n }\n})\n\nexport default styles\n","const styles = () => ({\n container: {\n maxWidth: '800px',\n width: '95%',\n margin: '80px auto 40px',\n border: '1px solid #ebebeb',\n borderRadius: '8px'\n },\n modalHeader: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between'\n },\n modalContent: {\n backgroundColor: '#fff',\n padding: 0,\n '& p': {\n fontSize: '16px',\n lineHeight: '22px'\n }\n },\n footer: {\n display: 'flex',\n justifyContent: 'flex-end'\n }\n})\n\nexport default styles\n","const styles = () => ({\n container: {\n padding: '20px'\n },\n footer: {\n display: 'flex',\n justifyContent: 'flex-end'\n }\n})\n\nexport default styles\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './introduction.styles'\nimport { ModalFooter } from 'pobble-components/dist/modal'\nimport Button from 'pobble-components/dist/button'\n\nconst Introduction = ({\n classes,\n remainingStudents,\n importedStudentsCount,\n onNextStep\n}) => (\n <>\n <div className={classes.container}>\n <p>\n We've been able to match <strong>{importedStudentsCount}</strong> pupils\n automatically, but with <strong>{remainingStudents}</strong> pupil\n {remainingStudents > 1 ? 's' : ''} we might need your help.\n </p>\n <p>Please click the button below to decide on next steps. Thank you.</p>\n </div>\n <ModalFooter className={classes.footer}>\n <Button tall action={() => onNextStep(2)}>\n Next\n </Button>\n </ModalFooter>\n </>\n)\n\nexport default injectSheet(styles)(Introduction)\n","const getState = state => state.ConflictsStore\n\nconst getFetchRequest = state => getState(state).fetchConflictsRequest\nconst getRefetchRequest = state => getState(state).refetchConflictsRequest\nconst getRetireRequest = state => getState(state).retireStudentRequest\nconst getResolveRequest = state => getState(state).resolveConflictRequest\n\nconst getConflicts = state => getState(state).conflicts\n\nconst getCurrentStep = state => getState(state).step\n\nexport {\n getFetchRequest,\n getRefetchRequest,\n getRetireRequest,\n getResolveRequest,\n getConflicts,\n getCurrentStep\n}\n","import {\n apiGetSchoolConflicts,\n apiResolveConflict\n} from '../../common/api/school'\n\nimport { apiRetireStudent } from '../../common/api/student-management'\n\nconst fetchConflicts = schoolId => ({\n requestPrefix: 'CONFLICTS_STORE:FETCHING',\n request: () => apiGetSchoolConflicts(schoolId)\n})\n\nconst refetchConflicts = schoolId => ({\n requestPrefix: 'CONFLICTS_STORE:REFETCHING',\n request: () => apiGetSchoolConflicts(schoolId)\n})\n\nconst retireStudent = studentId => ({\n requestPrefix: 'CONFLICTS_STORE:RETIRE',\n request: () => apiRetireStudent(studentId)\n})\n\nconst resolveConflict = (schoolId, matchingStudentId, legacyStudentId) => ({\n requestPrefix: 'CONFLICTS_STORE:RESOLVE',\n request: () =>\n apiResolveConflict(schoolId, {\n matching_student_id: matchingStudentId,\n legacy_student_id: legacyStudentId\n })\n})\n\nconst setStep = step => ({\n type: 'CONFLICTS_STORE:SET_STEP_SUCCESS',\n step\n})\n\nexport {\n fetchConflicts,\n refetchConflicts,\n retireStudent,\n resolveConflict,\n setStep\n}\n","import { connect } from 'react-redux'\nimport Introduction from './introduction'\nimport { getConflicts } from '../../../../../../stores/conflict-resolution/conflict-resolution.selectors'\nimport { setStep } from '../../../../../../stores/conflict-resolution/conflict-resolution.actions'\n\nconst mapStateToProps = state => {\n const conflicts = getConflicts(state)\n return {\n remainingStudents: conflicts && conflicts.remaining,\n importedStudentsCount: conflicts && conflicts.imported_students_count\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n onNextStep: step => dispatch(setStep(step))\n})\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(Introduction)\n","const styles = ({ COLORS }) => ({\n container: {\n padding: 0\n },\n head: {\n display: 'flex',\n alignItems: 'center',\n '& p': {\n fontWeight: 'bold'\n }\n },\n content: {\n padding: '10px 20px 20px'\n },\n alert: {\n margin: '20px 20px 0'\n },\n remaining: {\n padding: '10px 20px',\n background: '#f9f9f9',\n borderBottom: '1px solid #ececec'\n },\n avatar: {\n fontSize: '30px',\n marginRight: '10px'\n },\n details: {\n listStyle: 'none',\n fontSize: '16px',\n margin: 0,\n '& li': {\n marginBottom: '6px'\n }\n },\n selection: {\n borderTop: '1px solid #e5e5e5',\n paddingTop: '30px',\n marginTop: '30px'\n },\n processing: {\n opacity: '0.7',\n pointerEvents: 'none'\n },\n choice: {\n display: 'flex',\n alignItems: 'center',\n marginBottom: '10px',\n '& label': {\n marginLeft: '10px'\n }\n },\n field: {\n width: '50%',\n height: '40px',\n border: '1px solid #ddd',\n padding: '10px 15px',\n borderRadius: '4px',\n color: '#999',\n marginTop: '10px',\n '&::placeholder': {\n color: '#bbb'\n }\n },\n menu: {\n background: '#fff',\n boxShadow: '0 0 4px rgba(0,0,0,0.2)',\n position: 'absolute',\n width: '50%',\n zIndex: '100'\n },\n item: {\n padding: '5px 15px'\n },\n highlighted: {\n background: COLORS.BLUE.NORMAL,\n color: '#fff',\n cursor: 'pointer'\n },\n footer: {\n display: 'flex',\n justifyContent: 'flex-end'\n }\n})\n\nexport default styles\n","import React, { Component } from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './resolution.styles'\nimport Alert from 'pobble-components/dist/alert'\nimport { ModalFooter } from 'pobble-components/dist/modal'\nimport Button from 'pobble-components/dist/button'\nimport PobbleLink from 'pobble-components/dist/pobble-link'\nimport { PobbleAvatar } from 'pobble-components/dist/pobble-avatar'\nimport FormRadio from 'pobble-components/dist/form-elements/form-radio'\nimport Autocomplete from 'react-autocomplete'\nimport classNames from 'classnames'\n\nclass Resolution extends Component {\n constructor(props) {\n super(props)\n this.state = {\n status: 'retiring',\n value: '',\n selectedStudent: null\n }\n }\n\n render() {\n const {\n classes,\n similarStudentResolved,\n studentName,\n studentDay,\n studentMonth,\n workCount,\n groups,\n remainingStudents,\n unmatchingStudents,\n schoolId,\n studentId,\n processing,\n onResolve,\n onRetire\n } = this.props\n return (\n <div className={classes.container}>\n <div className={classes.remaining}>\n <strong>{remainingStudents}</strong> student\n {remainingStudents > 1 ? 's' : ''} left\n </div>\n {similarStudentResolved && (\n <Alert type=\"info\" className={classes.alert}>\n It appears that this pupil had previously been entered twice.\n Currently, this pupil already exists in Pobble. You can safely\n retire this record. In case this leads to unexpected results, please\n contact Pobble at{' '}\n <PobbleLink href=\"mailto:hello@pobble.com\">\n hello@pobble.com\n </PobbleLink>\n </Alert>\n )}\n <div className={classes.content}>\n <div className={classes.head}>\n <PobbleAvatar name={studentName} className={classes.avatar} />\n <p>{studentName} will be retired from Pobble</p>\n </div>\n <ul className={classes.details}>\n <li>\n Date of birth: {studentDay}/{studentMonth}\n </li>\n <li>Groups: {groups || '-'}</li>\n <li>Works: {workCount}</li>\n </ul>\n <div\n className={classNames(classes.selection, {\n [classes.processing]: processing\n })}>\n <div className={classes.choice}>\n <FormRadio\n name=\"status\"\n id=\"retiringStudent\"\n onChange={() => this.setState({ status: 'retiring' })}\n checked={this.state.status === 'retiring'}\n />\n <label htmlFor=\"retiringStudent\">\n This is correct. {studentName} left the school.\n </label>\n </div>\n <div className={classes.choice}>\n <FormRadio\n name=\"status\"\n id=\"matchingStudent\"\n onChange={() => this.setState({ status: 'matching' })}\n checked={this.state.status === 'matching'}\n disabled={unmatchingStudents && !unmatchingStudents.length}\n />\n <label htmlFor=\"matchingStudent\">\n This is incorrect. {studentName} is still at the school.\n {unmatchingStudents &&\n !unmatchingStudents.length && (\n <strong> All students matched</strong>\n )}\n </label>\n </div>\n {this.state.status === 'matching' && (\n <Autocomplete\n inputProps={{\n id: 'students-autocomplete',\n className: classes.field,\n placeholder: 'Search for the matching pupil'\n }}\n wrapperStyle={{ position: 'relative' }}\n value={this.state.value}\n items={unmatchingStudents}\n getItemValue={item => item.full_name}\n onSelect={(value, item) =>\n this.setState({\n value,\n selectedStudent: item\n })\n }\n onChange={(event, value) =>\n this.setState({ value, selectedStudent: null })\n }\n renderMenu={children => (\n <div className={classes.menu}>{children}</div>\n )}\n renderItem={(item, isHighlighted) => (\n <div\n className={classNames(classes.item, {\n [classes.highlighted]: isHighlighted\n })}\n key={item.id}>\n {item.full_name}\n </div>\n )}\n />\n )}\n </div>\n </div>\n <ModalFooter className={classes.footer}>\n {this.state.status === 'retiring' && (\n <Button\n tall\n disabled={processing}\n action={() => onRetire(studentId, schoolId)}>\n {!processing ? 'Next' : 'Processing...'}\n </Button>\n )}\n {this.state.status === 'matching' && (\n <Button\n tall\n action={() =>\n onResolve(\n schoolId,\n studentId,\n this.state.selectedStudent.id\n ).then(() =>\n this.setState({\n status: 'retiring',\n value: '',\n selectedStudent: null\n })\n )\n }\n disabled={\n !(\n this.state.selectedStudent && this.state.selectedStudent.id\n ) || processing\n }>\n {!processing ? 'Next' : 'Processing...'}\n </Button>\n )}\n </ModalFooter>\n </div>\n )\n }\n}\n\nexport default injectSheet(styles)(Resolution)\n","import { connect } from 'react-redux'\nimport Resolution from './resolution'\nimport {\n getConflicts,\n getRefetchRequest,\n getResolveRequest,\n getRetireRequest\n} from '../../../../../../stores/conflict-resolution/conflict-resolution.selectors'\nimport {\n retireStudent,\n refetchConflicts,\n resolveConflict\n} from '../../../../../../stores/conflict-resolution/conflict-resolution.actions'\nimport { withMe } from 'pobble-components/dist/pobble-user'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapStateToProps = (state, { me, meRequest }) => {\n const conflicts = getConflicts(state)\n return {\n processing:\n getRefetchRequest(state).pending ||\n getResolveRequest(state).pending ||\n getRetireRequest(state).pending,\n schoolId:\n me &&\n !meRequest.pending &&\n me.account.teacher_type &&\n me.account.teacher_type.school &&\n me.account.teacher_type.school.id,\n remainingStudents: conflicts && conflicts.remaining,\n importedStudentsCount: conflicts && conflicts.imported_students_count,\n similarStudentResolved:\n conflicts &&\n conflicts.legacy_student &&\n conflicts.legacy_student.similar_resolved,\n studentId:\n conflicts && conflicts.legacy_student && conflicts.legacy_student.id,\n studentName:\n conflicts &&\n conflicts.legacy_student &&\n conflicts.legacy_student.full_name,\n studentDay:\n conflicts &&\n conflicts.legacy_student &&\n conflicts.legacy_student.student_type &&\n conflicts.legacy_student.student_type.dob_day &&\n conflicts.legacy_student.student_type.dob_day,\n studentMonth:\n conflicts &&\n conflicts.legacy_student &&\n conflicts.legacy_student.student_type &&\n conflicts.legacy_student.student_type.dob_month &&\n conflicts.legacy_student.student_type.dob_month,\n workCount:\n conflicts &&\n conflicts.legacy_student &&\n conflicts.legacy_student.student_type &&\n conflicts.legacy_student.student_type.all_works_count,\n groups:\n conflicts &&\n conflicts.legacy_student &&\n conflicts.legacy_student.student_type &&\n conflicts.legacy_student.student_type.groups &&\n conflicts.legacy_student.student_type.groups\n .map(group => group.title)\n .join(', '),\n unmatchingStudents:\n conflicts && conflicts.non_matched_pull_provider_students\n }\n}\n\nconst mapDispatchToProps = dispatch => ({\n onResolve: (schoolId, matchingStudentId, legacyStudentId) =>\n new Promise((resolve, reject) =>\n dispatch(resolveConflict(schoolId, matchingStudentId, legacyStudentId))\n .then(() => dispatch(refetchConflicts(schoolId)))\n .then(() => resolve())\n ).catch(errorHandler),\n onRetire: (studentId, schoolId) =>\n dispatch(retireStudent(studentId))\n .then(() => dispatch(refetchConflicts(schoolId)))\n .catch(errorHandler)\n})\n\nexport default withMe(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(Resolution)\n)\n","const styles = () => ({\n container: {\n padding: '20px'\n },\n footer: {\n display: 'flex',\n justifyContent: 'flex-end'\n }\n})\n\nexport default styles\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './conclusion.styles'\nimport { ModalFooter } from 'pobble-components/dist/modal'\nimport Button from 'pobble-components/dist/button'\n\nconst Conclusion = ({ classes, importedStudentsCount }) => (\n <>\n <div className={classes.container}>\n <p>\n We have now successfully linked Pobble to your MIS. There are{' '}\n <strong>{importedStudentsCount}</strong> pupil\n {importedStudentsCount > 1 ? 's' : ''} in your school.\n </p>\n </div>\n <ModalFooter className={classes.footer}>\n <Button tall href={'/dashboard'}>\n Done\n </Button>\n </ModalFooter>\n </>\n)\n\nexport default injectSheet(styles)(Conclusion)\n","import { connect } from 'react-redux'\nimport Conclusion from './conclusion'\nimport { getConflicts } from '../../../../../../stores/conflict-resolution/conflict-resolution.selectors'\n\nconst mapStateToProps = state => {\n const conflicts = getConflicts(state)\n return {\n importedStudentsCount: conflicts && conflicts.imported_students_count\n }\n}\n\nexport default connect(\n mapStateToProps,\n null\n)(Conclusion)\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './wizard.styles'\nimport { ModalHeader, ModalContent } from 'pobble-components/dist/modal'\nimport Introduction from './steps/introduction/introduction.container'\nimport Resolution from './steps/resolution/resolution.container'\nimport Conclusion from './steps/conclusion/conclusion.container'\n\nconst Wizard = ({\n classes,\n step,\n noMoreStudents,\n onIntroScreen,\n onResolutionScreen,\n onNextStep\n}) => {\n return (\n <div className={classes.container}>\n <ModalHeader className={classes.modalHeader}>\n We're connecting Pobble to your MIS\n </ModalHeader>\n <ModalContent legacy className={classes.modalContent}>\n <div className={classes.content}>\n {!noMoreStudents && (\n <>\n {onIntroScreen && <Introduction />}\n {onResolutionScreen && <Resolution />}\n </>\n )}\n {noMoreStudents && <Conclusion />}\n </div>\n </ModalContent>\n </div>\n )\n}\n\nexport default injectSheet(styles)(Wizard)\n","import { connect } from 'react-redux'\nimport Wizard from './wizard'\nimport {\n getConflicts,\n getCurrentStep\n} from '../../../../stores/conflict-resolution/conflict-resolution.selectors'\n\nconst mapStateToProps = state => {\n const conflicts = getConflicts(state)\n const step = getCurrentStep(state)\n return {\n step,\n onIntroScreen: step === 1,\n onResolutionScreen: step === 2,\n noMoreStudents: conflicts && conflicts.remaining === 0\n }\n}\n\nexport default connect(\n mapStateToProps,\n null\n)(Wizard)\n","import React, { Component } from 'react'\nimport styles from './conflict-resolution.styles'\nimport injectSheet from 'react-jss'\nimport Wizard from './wizard/wizard.container'\nimport Spinner from 'pobble-components/dist/spinner'\n\nclass ConflictResolution extends Component {\n componentDidMount() {\n const { schoolId, onMount } = this.props\n onMount(schoolId)\n }\n render() {\n const { classes, pending } = this.props\n return (\n <div className={classes.container}>\n {!pending && <Wizard />}\n {pending && <Spinner className={classes.spinner} />}\n </div>\n )\n }\n}\n\nexport default injectSheet(styles)(ConflictResolution)\n","import { connect } from 'react-redux'\nimport ConflictResolution from './conflict-resolution'\nimport { withMe } from 'pobble-components/dist/pobble-user'\nimport { fetchConflicts } from '../../../stores/conflict-resolution/conflict-resolution.actions'\nimport { getFetchRequest } from '../../../stores/conflict-resolution/conflict-resolution.selectors'\nimport { errorHandler } from 'pobble-components/dist/error-handler'\n\nconst mapStateToProps = (state, { me, meRequest }) => {\n return {\n schoolId:\n me &&\n !meRequest.pending &&\n me.account.teacher_type &&\n me.account.teacher_type.school &&\n me.account.teacher_type.school.id,\n pending: getFetchRequest(state).pending\n }\n}\n\nconst mapDispatchToProps = (dispatch, { match }) => ({\n onMount: schoolId => dispatch(fetchConflicts(schoolId)).catch(errorHandler)\n})\n\nexport default withMe(\n connect(\n mapStateToProps,\n mapDispatchToProps\n )(ConflictResolution)\n)\n","import React from 'react'\nimport injectSheet from 'react-jss'\nimport styles from './permission-warning.styles'\nimport { Modal, ModalContent } from 'pobble-components/dist/modal'\nimport PobbleLink from 'pobble-components/dist/pobble-link'\nimport Button from 'pobble-components/dist/button'\n\nconst PermissionWarning = ({ classes, action, ...props }) => {\n return (\n <Modal {...props} closeButton>\n <ModalContent className={classes.content}>\n <div className={classes.holder}>\n <p>\n Publishing writing on Pobble makes it fun and easy to regularly\n celebrate your young writers' achievements. You can find out more\n about publishing{' '}\n <PobbleLink\n target=\"_blank\"\n href=\"https://www.pobble.com/publishing\">\n here\n </PobbleLink>\n .\n </p>\n <p>\n Published writing will appear publicly on your school celebration\n page. We recommend you inform parents/carers that you intend to\n publish their child's work. You can find a pre-written letter to\n support you with this in our Knowledge Base.\n </p>\n <p>\n Remember, only teachers can publish work. You can disable publishing\n for any pupils in the 'My Pupils' area of your account or in an\n individual pupil's profile.\n </p>\n </div>\n <div className={classes.actions}>\n <Button tall simple action={props.requestClose}>\n Cancel\n </Button>\n <Button\n action={() => {\n props.requestClose()\n action && action()\n }}\n tall>\n Proceed\n </Button>\n </div>\n </ModalContent>\n </Modal>\n )\n}\n\nexport default injectSheet(styles)(PermissionWarning)\n","export default {\n content: {\n maxWidth: '460px',\n font: 'var(--body)',\n '& p': {\n margin: '20px 0 0',\n '&:first-child': {\n marginTop: '0'\n }\n }\n },\n holder: {\n padding: '40px 20px'\n },\n actions: {\n marginTop: '20px',\n display: 'flex',\n justifyContent: 'flex-end',\n '& > *:first-child': {\n marginRight: '10px'\n }\n }\n}\n","import React, { Fragment, createContext, useMemo, useState } from 'react'\nimport styles from './app.styles'\nimport injectSheet from 'react-jss'\nimport { BrowserRouter as Router, Route, Switch } from 'react-router-dom'\nimport Header from 'pobble-components/dist/pobble-header'\nimport Pupil from '../pages/pupil/pupil.container'\nimport AddPupils from '../pages/add-pupils/add-pupils'\nimport SchoolOverview from '../pages/school-overview/school-overview'\nimport ConflictResolution from '../pages/conflict-resolution/conflict-resolution.container'\nimport { UserProvider, UserInspector } from 'pobble-components/dist/pobble-user'\nimport EnvironmentLine from 'pobble-components/dist/environment-line'\nimport PageNotFound from 'pobble-components/dist/page-not-found'\nimport { SubscriptionProvider } from 'pobble-components/dist/subscriptions'\nimport PsermissionWarning from '../permission-warning/permission-warning'\nimport { ErrorBoundary } from 'pobble-components/dist/error-boundary'\n\nconst APP_PATH = process.env.REACT_APP_PATH || '/'\n\nexport const AppContext = createContext()\n\nconst App = ({ me, meError }) => {\n const [permissionWarning, setPermissionWarning] = useState({\n open: false,\n action: null\n })\n\n const contextValue = useMemo(\n () => {\n return {\n permissionWarning: ({ action }) =>\n setPermissionWarning({ open: true, action })\n }\n },\n [setPermissionWarning]\n )\n return (\n <AppContext.Provider value={contextValue}>\n <UserProvider\n fetchMe={() => (me ? Promise.resolve(me) : Promise.reject(meError))}>\n <SubscriptionProvider>\n <Router basename={APP_PATH}>\n <Fragment>\n <EnvironmentLine />\n <Header activePage=\"dashboard\" />\n <ErrorBoundary>\n <UserInspector schoolRequired>\n <Fragment>\n <Switch>\n <Route\n exact\n path=\"/(|groups)/\"\n component={SchoolOverview}\n />\n <Route path=\"/pupil/:pupilId\" component={Pupil} />\n <Route path=\"/add-pupils\" component={AddPupils} />\n <Route\n path=\"/conflict-resolution\"\n component={ConflictResolution}\n />\n <Route component={PageNotFound} />\n </Switch>\n </Fragment>\n </UserInspector>\n </ErrorBoundary>\n </Fragment>\n </Router>\n <PsermissionWarning\n action={permissionWarning.action}\n requestClose={() =>\n setPermissionWarning({ ...permissionWarning, open: false })\n }\n isOpen={permissionWarning.open}\n />\n </SubscriptionProvider>\n </UserProvider>\n </AppContext.Provider>\n )\n}\n\nexport default injectSheet(styles)(App)\n","import { createReducer } from 'pobble-components/dist/redux-helpers'\n\nlet defaultState = {\n opened: false,\n ids: []\n}\n\nconst SetAgeGroupDialogReducer = createReducer(defaultState, {\n 'PUPILS:DIALOG:SET_AGE_GROUP_OPEN': (state, { ids }) => ({\n ...state,\n opened: true,\n ids\n }),\n 'PUPILS:DIALOG:SET_AGE_GROUP_CLOSE': state => ({ ...defaultState })\n})\n\nexport default SetAgeGroupDialogReducer\n","import { createReducer } from 'pobble-components/dist/redux-helpers'\n\nlet defaultState = {\n opened: false,\n ids: []\n}\n\nconst RemoveFromGroup = createReducer(defaultState, {\n 'PUPILS:REMOVE_FROM_GROUP_DIALOG:OPEN': (state, { ids }) => ({\n ...defaultState,\n opened: true,\n ids\n }),\n 'PUPILS:REMOVE_FROM_GROUP_DIALOG:CLOSE': state => ({\n ...state,\n opened: false\n }),\n 'PUPILS_STORE:REMOVE_PUPIL_FROM_GROUP_REQUEST': state => ({\n ...state,\n opened: false\n })\n})\n\nexport default RemoveFromGroup\n","import { combineReducers } from 'redux'\nimport SetAgeGroupDialogReducer from './dialogs/set-age-group/set-age-group.reducer'\nimport RemoveFromGroupDialogReducer from './dialogs/remove-from-group/remove-from-group.reducer'\n\nconst PupilsReducer = combineReducers({\n setAgeGroupDialog: SetAgeGroupDialogReducer,\n removeFromGroupDialog: RemoveFromGroupDialogReducer\n})\n\nexport default PupilsReducer\n","import { combineReducers } from 'redux'\nimport {\n createReducer,\n createRequestReducer,\n createMappedRequestReducer\n} from 'pobble-components/dist/redux-helpers'\nimport { normalize, schema } from 'normalizr'\nimport dotProp from 'dot-prop-immutable'\n\nconst normalizePupils = data => {\n const pupil = new schema.Entity(\n 'pupils',\n {},\n { idAttribute: pupil => pupil.account.id }\n )\n return normalize(data, [pupil])\n}\n\nlet defaultState = null\n\nconst PupilsReducer = combineReducers({\n fetching: createRequestReducer('PUPILS_STORE:FETCHING', { pending: true }),\n updating: createMappedRequestReducer('PUPILS_STORE:UPDATE_PUPIL'),\n deleting: createMappedRequestReducer('PUPILS_STORE:RETIRE_PUPIL'),\n creating: createMappedRequestReducer('PUPILS_STORE:CREATE_PUPIL'),\n creatingBatch: createRequestReducer('PUPILS_STORE:CREATE_PUPIL_BATCH'),\n addingToGroup: createMappedRequestReducer('PUPILS_STORE:ADD_PUPIL_TO_GROUP'),\n incrementingAge: createMappedRequestReducer(\n 'PUPILS_STORE:INCREMENT_AGE_GROUP'\n ),\n removingFromGroup: createMappedRequestReducer(\n 'PUPILS_STORE:REMOVE_PUPIL_FROM_GROUP'\n ),\n pupils: createReducer(defaultState, {\n 'PUPILS_STORE:SET_PUPILS': (state, { pupils }) => normalizePupils(pupils),\n 'PUPILS_STORE:FETCHING_REQUEST_SUCCESS': (state, { response }) =>\n normalizePupils(response.data.school.student_types),\n 'PUPILS_STORE:UPDATE_PUPIL_REQUEST_SUCCESS': (state, { response }) => ({\n ...state,\n entities: {\n pupils: {\n ...state.entities.pupils,\n [response.data.account.id]: {\n ...state.entities.pupils[response.data.account.id],\n ...response.data.account.student_type\n }\n }\n }\n }),\n 'PUPILS_STORE:RETIRE_PUPIL_REQUEST_SUCCESS': (state, { params }) => ({\n ...state,\n result: state.result.filter(id => id !== params.id)\n }),\n 'PUPILS_STORE:ADD_PERMISSION_REQUEST_SUCCESS': (state, { params }) => ({\n ...state,\n entities: {\n pupils: {\n ...state.entities.pupils,\n [params.id]: {\n ...state.entities.pupils[params.id],\n policy: {\n ...state.entities.pupils[params.id].policy,\n can_publish: true\n }\n }\n }\n }\n }),\n 'PUPILS_STORE:REMOVE_PERMISSION_REQUEST_SUCCESS': (state, { params }) => ({\n ...state,\n entities: {\n pupils: {\n ...state.entities.pupils,\n [params.id]: {\n ...state.entities.pupils[params.id],\n policy: {\n ...state.entities.pupils[params.id].policy,\n can_publish: false\n }\n }\n }\n }\n }),\n 'PUPILS_STORE:ADD_PUPIL_TO_GROUP_REQUEST_SUCCESS': (\n state,\n { params, response }\n ) => ({\n ...state,\n entities: {\n pupils: {\n ...state.entities.pupils,\n [params.id]: {\n ...state.entities.pupils[params.id],\n groups: [\n ...state.entities.pupils[params.id].groups,\n params.groups[response.data.group.id]\n ]\n }\n }\n }\n }),\n 'PUPILS_STORE:REMOVE_PUPIL_FROM_GROUP_REQUEST_SUCCESS': (\n state,\n { params, response }\n ) => ({\n ...state,\n entities: {\n pupils: {\n ...state.entities.pupils,\n [params.id]: {\n ...state.entities.pupils[params.id],\n groups: state.entities.pupils[params.id].groups.filter(\n group => group.id !== params.groupId\n )\n }\n }\n }\n }),\n 'PUPILS_STORE:INCREMENT_AGE_GROUP_REQUEST_SUCCESS': (\n state,\n { params, response }\n ) =>\n dotProp.set(\n state,\n `entities.pupils.${params.id}.year_group`,\n () => response.data.account.student_type.year_group\n )\n })\n})\n\nexport default PupilsReducer\n","import { combineReducers } from 'redux'\nimport {\n createReducer,\n createRequestReducer\n} from 'pobble-components/dist/redux-helpers'\n\nconst PupilReducer = combineReducers({\n fetchRequest: createRequestReducer('PUPIL_STORE:FETCHING'),\n pupil: createReducer(null, {\n 'PUPIL_STORE:FETCHING_REQUEST_SUCCESS': (state, { response }) =>\n response.data\n })\n})\n\nexport default PupilReducer\n","import { combineReducers } from 'redux'\nimport {\n createReducer,\n createMappedRequestReducer,\n createRequestReducer\n} from 'pobble-components/dist/redux-helpers'\nimport { normalize, schema } from 'normalizr'\n\nconst normalizeGroups = groups => {\n const group = new schema.Entity('groups')\n return normalize(groups, [group])\n}\n\nconst PupilReducer = combineReducers({\n fetching: createMappedRequestReducer('PUPIL_PROFILE_STORE:FETCHING'),\n updating: createMappedRequestReducer('PUPIL_PROFILE_STORE:UPDATE_PUPIL'),\n addingPermission: createRequestReducer('PUPIL_PROFILE_STORE:ADD_PERMISSION'),\n removingPermission: createRequestReducer(\n 'PUPIL_PROFILE_STORE:REMOVE_PERMISSION'\n ),\n resettingPasscode: createMappedRequestReducer(\n 'PUPIL_PROFILE_STORE:RESET_PASSCODE'\n ),\n removingFromGroup: createMappedRequestReducer(\n 'PUPIL_PROFILE_STORE:REMOVE_PUPIL_FROM_GROUP'\n ),\n addingToGroup: createMappedRequestReducer(\n 'PUPIL_PROFILE_STORE:ADD_PUPIL_TO_GROUP'\n ),\n profile: createReducer(null, {\n 'PUPIL_PROFILE_STORE:FETCHING_REQUEST_SUCCESS': (state, { response }) =>\n response.data.account,\n 'PUPIL_PROFILE_STORE:UPDATE_PUPIL_REQUEST_SUCCESS': (state, { response }) =>\n response.data.account,\n 'PUPIL_PROFILE_STORE:RESET_PASSCODE_REQUEST_SUCCESS': (\n state,\n { response }\n ) => response.data.account,\n 'PUPIL_PROFILE_STORE:ADD_PERMISSION_REQUEST_SUCCESS': state => ({\n ...state,\n student_type: {\n ...state.student_type,\n policy: {\n ...state.student_type.policy,\n can_publish: true\n }\n }\n }),\n 'PUPIL_PROFILE_STORE:REMOVE_PERMISSION_REQUEST_SUCCESS': state => ({\n ...state,\n student_type: {\n ...state.student_type,\n policy: {\n ...state.student_type.policy,\n can_publish: false\n }\n }\n }),\n 'PUPIL_PROFILE_STORE:REFETCH_POLICY_REQUEST_SUCCESS': (\n state,\n { response }\n ) => ({\n ...state,\n student_type: {\n ...state.student_type,\n policy: response.data.account.student_type.policy\n }\n })\n }),\n groups: createReducer(null, {\n 'PUPIL_PROFILE_STORE:FETCHING_REQUEST_SUCCESS': (state, { response }) =>\n normalizeGroups(response.data.account.student_type.groups),\n 'PUPIL_PROFILE_STORE:ADD_PUPIL_TO_GROUP_REQUEST_SUCCESS': (\n state,\n { response, params }\n ) => ({\n ...state,\n entities: {\n groups: {\n ...state.entities.groups,\n [response.data.group.id]: response.data.group\n }\n },\n result: [...state.result, response.data.group.id]\n }),\n 'PUPIL_PROFILE_STORE:REMOVE_PUPIL_FROM_GROUP_REQUEST_SUCCESS': (\n state,\n { params }\n ) => {\n const groups = { ...state.entities.groups }\n delete groups[params.groupId]\n return {\n entities: {\n groups\n },\n result: state.result.filter(id => id !== params.groupId)\n }\n }\n })\n})\n\nexport default PupilReducer\n","import { combineReducers } from 'redux'\nimport {\n createReducer,\n createMappedRequestReducer\n} from 'pobble-components/dist/redux-helpers'\nimport { normalize, schema } from 'normalizr'\n\nconst normalizePermissionSlips = data => {\n const pemrission = new schema.Entity('permissions')\n return normalize(data, [pemrission])\n}\n\nconst PermissionsReducer = combineReducers({\n uploadingPermission: createMappedRequestReducer(\n 'PERMISSIONS_STORE:UPLOAD_PERMISSION'\n ),\n deletingPermission: createMappedRequestReducer(\n 'PERMISSIONS_STORE:DELETE_PERMISSION'\n ),\n permissions: createReducer(null, {\n 'PERMISSIONS_STORE:FETCHING_REQUEST_SUCCESS': (\n state,\n { params, response }\n ) => normalizePermissionSlips(response.data.permission_slips),\n 'PERMISSIONS_STORE:DELETE_PERMISSION_REQUEST_SUCCESS': (\n state,\n { params, response }\n ) => {\n const permissions = { ...state.entities.permissions }\n delete permissions[params.id]\n return {\n entities: { permissions },\n result: state.result.filter(id => id !== params.id)\n }\n },\n 'PERMISSIONS_STORE:UPLOAD_PERMISSION_REQUEST': (\n state,\n { params, response }\n ) => ({\n ...state,\n entities: {\n permissions: {\n ...state.entities.permissions,\n [params.id]: { file_name: params.file.name }\n }\n },\n result: [...state.result, params.id]\n }),\n 'PERMISSIONS_STORE:UPLOAD_PERMISSION_REQUEST_SUCCESS': (\n state,\n { params, response }\n ) => {\n const permissions = { ...state.entities.permissions }\n delete permissions[params.id]\n permissions[response.data.permission_slip.id] =\n response.data.permission_slip\n return {\n entities: { permissions },\n result: state.result.map(\n id => (id === params.id ? response.data.permission_slip.id : id)\n )\n }\n }\n })\n})\n\nexport default PermissionsReducer\n","import { combineReducers } from 'redux'\nimport {\n createRequestReducer,\n createReducer\n} from 'pobble-components/dist/redux-helpers'\nimport { schema, normalize } from 'normalizr'\n\nconst normalizeComments = data => {\n const comment = new schema.Entity('comments')\n return normalize(data, [comment])\n}\n\nconst CommentsReducer = combineReducers({\n fetchCommentsRequest: createRequestReducer('COMMENTS_STORE:FETCH'),\n pagination: createReducer(null, {\n 'COMMENTS_STORE:FETCH_REQUEST_SUCCESS': (state, { response }) =>\n response.data.account.comments_pagination\n }),\n comments: createReducer(null, {\n 'COMMENTS_STORE:FETCH_REQUEST_SUCCESS': (state, { response }) =>\n normalizeComments(response.data.account.comments)\n })\n})\n\nexport default CommentsReducer\n","import { combineReducers } from 'redux'\nimport {\n createRequestReducer,\n createReducer,\n createMappedRequestReducer\n} from 'pobble-components/dist/redux-helpers'\nimport { schema, normalize } from 'normalizr'\n\nconst normalizeWorks = data => {\n const work = new schema.Entity('works')\n return normalize(data, [work])\n}\n\nconst WorksReducer = combineReducers({\n fetchWorksRequest: createRequestReducer('WORKS_STORE:FETCH'),\n deletingWorkRequests: createMappedRequestReducer('WORKS_STORE:DELETE'),\n updatingWorkRequests: createMappedRequestReducer('WORKS_STORE:UPDATE'),\n pagination: createReducer(null, {\n 'WORKS_STORE:FETCH_REQUEST_SUCCESS': (state, { response }) =>\n response.data.account.student_type.works_pagination\n }),\n works: createReducer(null, {\n 'WORKS_STORE:FETCH_REQUEST_SUCCESS': (state, { response }) =>\n normalizeWorks(response.data.account.student_type.works),\n 'WORKS_STORE:UPDATE_REQUEST_SUCCESS': (state, { params }) => ({\n ...state,\n entities: {\n works: {\n ...state.entities.works,\n [params.id]: {\n ...state.entities.works[params.id],\n status:\n params.data.state === 'published' ? 'published' : 'unpublished'\n }\n }\n }\n })\n }),\n createAssessmentDialog: createReducer(\n { opened: false, selectedWorks: [] },\n {\n 'WORKS_STORE:CREATE_ASSESSMENT_DIALOG:OPEN': (state, { params }) => ({\n ...state,\n opened: true,\n selectedWorks: params.selectedWorks\n }),\n 'WORKS_STORE:CREATE_ASSESSMENT_DIALOG:CLOSE': state => ({\n ...state,\n opened: false\n })\n }\n )\n})\n\nexport default WorksReducer\n","import { combineReducers } from 'redux'\nimport {\n createRequestReducer,\n createReducer,\n createMappedRequestReducer\n} from 'pobble-components/dist/redux-helpers'\nimport { schema, normalize } from 'normalizr'\n\nconst normalizeAssessments = data => {\n const assessment = new schema.Entity('assessments')\n return normalize(data, [assessment])\n}\n\nconst AssessmentsReducer = combineReducers({\n fetchAssessmentsRequest: createRequestReducer('ASSESSMENT_STORE:FETCH'),\n deletingAssessmentRequests: createMappedRequestReducer(\n 'ASSESSMENT_STORE:DELETE'\n ),\n assessments: createReducer(null, {\n 'ASSESSMENT_STORE:FETCH_REQUEST_SUCCESS': (state, { response }) =>\n normalizeAssessments(response.data.account.student_type.assessment_files),\n 'ASSESSMENT_STORE:DELETE_REQUEST_SUCCESS': (state, { params }) => {\n const assessments = { ...state.entities.assessments }\n delete assessments[params.id]\n return {\n entities: { assessments },\n result: state.result.filter(id => id !== params.id)\n }\n }\n }),\n createAssessmentDialog: createReducer(\n { opened: false, selectedAssessments: [] },\n {\n 'ASSESSMENT_STORE:CREATE_ASSESSMENT_DIALOG:OPEN': (\n state,\n { params }\n ) => ({\n ...state,\n opened: true,\n selectedAssessments: params.selectedAssessments\n }),\n 'ASSESSMENT_STORE:CREATE_ASSESSMENT_DIALOG:CLOSE': state => ({\n ...state,\n opened: false\n })\n }\n ),\n invitationAssessmentDialog: createReducer(\n { opened: false },\n {\n 'ASSESSMENT_STORE:INVITATION_ASSESSMENT_DIALOG:OPEN': (\n state,\n { params }\n ) => ({\n ...state,\n opened: true,\n id: params.id\n }),\n 'ASSESSMENT_STORE:INVITATION_ASSESSMENT_DIALOG:CLOSE': state => ({\n ...state,\n opened: false\n })\n }\n )\n})\n\nexport default AssessmentsReducer\n","import { combineReducers } from 'redux'\nimport {\n createReducer,\n createRequestReducer,\n createMappedRequestReducer\n} from 'pobble-components/dist/redux-helpers'\nimport { normalize, schema } from 'normalizr'\n\nconst normalizeGroups = data => {\n const group = new schema.Entity('groups')\n return normalize(data, [group])\n}\n\nconst GroupsReducer = combineReducers({\n fetching: createRequestReducer('GROUPS_STORE:FETCHING', { pending: true }),\n creating: createRequestReducer('GROUPS_STORE:CREATE'),\n deleting: createMappedRequestReducer('GROUPS_STORE:DELETE'),\n updating: createMappedRequestReducer('GROUPS_STORE:UPDATE'),\n categories: createReducer(null, {\n 'GROUPS_STORE:FETCHING_REQUEST_SUCCESS': (state, { response }) =>\n response.data.school.group_categories\n }),\n groups: createReducer(\n {},\n {\n 'GROUPS_STORE:CREATE_REQUEST_SUCCESS': (state, { params, response }) => {\n const entities = { ...state.entities.groups }\n const group = response.data.group\n delete entities[params.id]\n const result = state.result.filter(id => id !== params.id)\n return {\n entities: {\n groups: {\n ...entities,\n [response.data.group.id]: group\n }\n },\n result: [response.data.group.id, ...result]\n }\n },\n 'GROUPS_STORE:FETCHING_REQUEST_SUCCESS': (state, { response }) =>\n normalizeGroups(response.data.school.groups),\n 'GROUPS_STORE:DELETE_REQUEST_SUCCESS': (state, { params }) => ({\n ...state,\n result: state.result.filter(id => id !== params.id)\n }),\n 'GROUPS_STORE:UPDATE_REQUEST_SUCCESS': (state, { params, response }) => ({\n ...state,\n entities: {\n groups: {\n ...state.entities.groups,\n [params.id]: response.data.group\n }\n }\n })\n }\n )\n})\n\nexport default GroupsReducer\n","import { createReducer } from 'pobble-components/dist/redux-helpers'\n\nlet defaultState = {\n opened: false\n}\n\nconst SetAgeGroupDialogReducer = createReducer(defaultState, {\n 'GROUPS:ADD_GROUP_DIALOG:OPEN': (state, { ids }) => ({\n ...state,\n opened: true\n }),\n 'GROUPS:ADD_GROUP_DIALOG:CLOSE': state => ({ ...state, opened: false }),\n 'GROUPS_STORE:CREATE_REQUEST_SUCCESS': state => ({ ...state, opened: false })\n})\n\nexport default SetAgeGroupDialogReducer\n","import { createReducer } from 'pobble-components/dist/redux-helpers'\n\nlet defaultState = {\n id: null,\n opened: false\n}\n\nconst UpdateGroupDialog = createReducer(defaultState, {\n 'GROUPS:UPDATE_GROUP_DIALOG:OPEN': (state, { id }) => ({\n ...state,\n opened: true,\n id\n }),\n 'GROUPS:UPDATE_GROUP_DIALOG:CLOSE': state => ({ ...state, opened: false }),\n 'GROUPS_STORE:UPDATE_REQUEST': state => ({ ...state, opened: false })\n})\n\nexport default UpdateGroupDialog\n","import { createReducer } from 'pobble-components/dist/redux-helpers'\n\nlet defaultState = {\n ids: [],\n opened: false\n}\n\nconst SetVisibilityDialog = createReducer(defaultState, {\n 'GROUPS:SET_VISIBILITY_DIALOG:OPEN': (state, { ids }) => ({\n ...state,\n opened: true,\n ids\n }),\n 'GROUPS:SET_VISIBILITY_DIALOG:CLOSE': state => ({ ...defaultState }),\n 'GROUPS_STORE:UPDATE_REQUEST': state => ({ ...defaultState })\n})\n\nexport default SetVisibilityDialog\n","import { combineReducers } from 'redux'\nimport { createReducer } from 'pobble-components/dist/redux-helpers'\nimport addGroupDialogReducer from '../dialogs/add-group/add-group.reducer'\nimport updateGroupDialogReducer from '../dialogs/update-group/update-group.reducer'\nimport setVisibilityDialogReducer from '../dialogs/set-visibility/set-visibility.reducer'\n\nconst sortDefaultState = {\n key: null,\n direction: null\n}\n\nconst GroupsComponentReducer = combineReducers({\n showSelected: createReducer(false, {\n 'GROUPS_COMPONENT:SHOW_SELECTED': state => true,\n 'GROUPS_COMPONENT:SHOW_ALL': state => false\n }),\n addGroupDialog: addGroupDialogReducer,\n updateGroupDialog: updateGroupDialogReducer,\n setVisibilityDialog: setVisibilityDialogReducer,\n selectedGroups: createReducer(\n {},\n {\n 'GROUPS_COMPONENT:SET_SELECT_STATUS': (state, { id, status }) => ({\n ...state,\n [id]: status\n }),\n 'GROUPS_COMPONENT:SET_SELECT_STATUSES': (state, { statuses }) => statuses,\n 'GROUPS_STORE:DELETE_REQUEST_SUCCESS': (state, { params }) => {\n const selectedGroups = { ...state }\n delete selectedGroups[params.id]\n return selectedGroups\n }\n }\n ),\n sortBy: createReducer(sortDefaultState, {\n 'GROUPS_COMPONENT:SET_SORT_KEY': (state, { key, direction }) => ({\n key,\n direction\n })\n })\n})\n\nexport default GroupsComponentReducer\n","import { createReducer } from 'pobble-components/dist/redux-helpers'\n\nconst VISIBLE_PUPILS = 20\nconst LOAD_MORE_STEP = 20\n\nconst cacheSelectedGroups = groups => {\n if (!Object.keys(groups).length) {\n localStorage.removeItem('dashboardSelectedGroups')\n } else {\n localStorage.setItem('dashboardSelectedGroups', JSON.stringify(groups))\n }\n return groups\n}\n\nconst groupsStorage = localStorage.getItem('dashboardSelectedGroups')\n\nlet defaultState = {\n showSelected: false,\n selectedPupils: {},\n sortBy: {\n key: null,\n direction: null\n },\n searchValue: '',\n selectedGroupsCategory: 'ALL',\n filterDialogOpened: false,\n selectedGroups: groupsStorage ? JSON.parse(groupsStorage) : {},\n selectedGroupsTemp: {},\n visiblePupils: VISIBLE_PUPILS,\n groupAction: false\n}\n\nconst PupilsComponentReducer = createReducer(defaultState, {\n 'PUPILS_COMPONENT:SET_SELECT_STATUS': (state, { id, status }) => ({\n ...state,\n selectedPupils: {\n ...state.selectedPupils,\n [id]: status\n }\n }),\n 'PUPILS_COMPONENT:SET_SELECT_STATUSES': (state, { statuses }) => ({\n ...state,\n selectedPupils: statuses\n }),\n 'PUPILS_COMPONENT:SET_SORT_KEY': (state, { key, direction }) => ({\n ...state,\n sortBy: { key, direction }\n }),\n 'PUPILS_COMPONENT:CHANGE_SEARCH_VALUE': (state, { value }) => ({\n ...state,\n searchValue: value,\n visiblePupils: VISIBLE_PUPILS\n }),\n 'PUPILS_COMPONENT:SHOW_FILTER_DIALOG': state => ({\n ...state,\n filterDialogOpened: true\n }),\n 'PUPILS_COMPONENT:HIDE_FILTER_DIALOG': state => ({\n ...state,\n filterDialogOpened: false\n }),\n 'PUPILS_COMPONENT:APPLY_GROUPS_FILTER': (state, { selectedGroups }) => ({\n ...state,\n selectedGroups: cacheSelectedGroups(selectedGroups),\n visiblePupils: VISIBLE_PUPILS,\n filterDialogOpened: false\n }),\n 'PUPILS_COMPONENT:RESET_FILTER': state => ({\n ...state,\n selectedGroups: cacheSelectedGroups({}),\n visiblePupils: VISIBLE_PUPILS\n }),\n 'GROUPS_STORE:DELETE_REQUEST': state => {\n return {\n ...defaultState,\n selectedGroups: cacheSelectedGroups({}),\n groupAction: false\n }\n },\n 'PUPILS_COMPONENT:LOAD_MORE': state => ({\n ...state,\n visiblePupils: state.visiblePupils + LOAD_MORE_STEP\n }),\n 'PUPILS_STORE:RETIRE_PUPIL_REQUEST_SUCCESS': (state, { params }) => {\n const selectedPupils = { ...state.selectedPupils }\n delete selectedPupils[params.id]\n return {\n ...state,\n selectedPupils\n }\n },\n 'PUPILS_COMPONENT:SHOW_SELECTED': state => ({ ...state, showSelected: true }),\n 'PUPILS_COMPONENT:UNSET_SHOW_SELECTED': state => ({\n ...state,\n showSelected: false\n }),\n 'PUPILS_COMPONENT:CHANGE_GROUP_CATEGORY': (state, { category }) => ({\n ...state,\n selectedGroupsCategory: category\n }),\n 'GROUPS_COMPONENT:GROUP_ACTION': (state, { id }) => ({\n ...state,\n selectedGroups: cacheSelectedGroups({ [id]: true }),\n groupAction: true\n })\n})\n\nexport default PupilsComponentReducer\n","import { combineReducers } from 'redux'\nimport {\n createReducer,\n createRequestReducer\n} from 'pobble-components/dist/redux-helpers'\n\nconst YearGroupsReducer = combineReducers({\n fetching: createRequestReducer('YEAR_GROUPS:FETCHING', { pending: true }),\n yearGroups: createReducer(null, {\n 'YEAR_GROUPS:FETCHING_REQUEST_SUCCESS': (state, { response }) =>\n response.data.year_groups\n })\n})\n\nexport default YearGroupsReducer\n","import { createReducer } from 'pobble-components/dist/redux-helpers'\n\nlet defaultState = {\n opened: false,\n ids: []\n}\n\nconst AddToGroupDialog = createReducer(defaultState, {\n 'ADD_TO_GROUP_DIALOG:OPEN': (state, { ids }) => ({\n ...defaultState,\n opened: true,\n ids\n }),\n 'ADD_TO_GROUP_DIALOG:CLOSE': state => ({ ...state, opened: false })\n})\n\nexport default AddToGroupDialog\n","import { combineReducers } from 'redux'\nimport {\n createReducer,\n createRequestReducer\n} from 'pobble-components/dist/redux-helpers'\n\nconst ConflictsReducer = combineReducers({\n fetchConflictsRequest: createRequestReducer('CONFLICTS_STORE:FETCHING'),\n refetchConflictsRequest: createRequestReducer('CONFLICTS_STORE:REFETCHING'),\n retireStudentRequest: createRequestReducer('CONFLICTS_STORE:RETIRE'),\n resolveConflictRequest: createRequestReducer('CONFLICTS_STORE:RESOLVE'),\n conflicts: createReducer(null, {\n 'CONFLICTS_STORE:FETCHING_REQUEST_SUCCESS': (state, { response }) =>\n response.data.data,\n 'CONFLICTS_STORE:REFETCHING_REQUEST_SUCCESS': (state, { response }) =>\n response.data.data\n }),\n step: createReducer(1, {\n 'CONFLICTS_STORE:SET_STEP_SUCCESS': (state, { step }) => step\n })\n})\n\nexport default ConflictsReducer\n","import { combineReducers } from 'redux'\nimport PupilsReducer from './components/pages/pupils/pupils.reducer'\nimport PupilsStoreReducer from './stores/pupils/pupils.reducer'\nimport PupilStoreReducer from './stores/pupil/pupil.reducer'\nimport PupilProfileReducer from './stores/profile/profile.reducer'\nimport PermissionsReducer from './stores/permissions/permissions.reducer'\nimport CommentsReducer from './stores/comments/comments.reducer'\nimport WorksReducer from './stores/works/works.reducer'\nimport AssessmentReducer from './stores/assessment/assessment.reducer'\nimport GroupsReducer from './stores/groups/groups.reducer'\nimport GroupsComponentReducer from './components/pages/groups/groups-component-redux/groups-component-redux.reducer'\nimport PupilsComponentReducer from './components/pupils-component/pupils-component-redux/pupils-component.reducer'\nimport YearGroupsReducer from './stores/year-groups/year-groups.reducer'\nimport AddToGroupDialogReducer from './components/add-to-group/add-to-group.reducer'\nimport ConflictsReducer from './stores/conflict-resolution/conflict-resolution.reducer'\n\nconst Reducer = combineReducers({\n Shared: combineReducers({\n AddToGroupDialog: AddToGroupDialogReducer\n }),\n PupilsComponent: PupilsComponentReducer,\n GroupsComponent: GroupsComponentReducer,\n Pupils: PupilsReducer,\n PupilStore: PupilStoreReducer,\n CommentsStore: CommentsReducer,\n WorksStore: WorksReducer,\n AssessmentStore: AssessmentReducer,\n PermissionsStore: PermissionsReducer,\n PupilsStore: PupilsStoreReducer,\n PupilProfileStore: PupilProfileReducer,\n GroupsStore: GroupsReducer,\n YearGroups: YearGroupsReducer,\n ConflictsStore: ConflictsReducer\n})\n\nexport default Reducer\n","import 'react-app-polyfill/ie11'\nimport 'react-app-polyfill/stable'\nimport 'pobble-components/dist/setup/sentry'\n\nimport React, { Fragment } from 'react'\nimport ReactDOM from 'react-dom'\nimport App from './components/app/app'\n\nimport { Provider } from 'react-redux'\nimport { createStore, applyMiddleware } from 'redux'\nimport thunk from 'redux-thunk'\nimport rootReducer from './reducer'\nimport { requestMiddleware } from 'pobble-components/dist/redux-helpers'\n\nimport 'normalize.css'\nimport { ConfirmationDialog } from 'pobble-components/dist/modal/confirmation-dialog'\nimport { ToastContainer } from 'pobble-components/dist/toast'\nimport { apiGetMe } from './common/api/profile'\nimport { PobbleStyles } from 'pobble-components/dist/styles'\n\nconst store = createStore(\n rootReducer,\n applyMiddleware(requestMiddleware, thunk)\n)\n\nconst render = ({ me, meError }) => {\n ReactDOM.render(\n <Provider store={store}>\n <PobbleStyles>\n <Fragment>\n <App me={me} meError={meError} />\n <ConfirmationDialog />\n <ToastContainer />\n </Fragment>\n </PobbleStyles>\n </Provider>,\n document.getElementById('root')\n )\n}\n\napiGetMe({\n include:\n 'account.timestamps,account.email_identity.email,account.subscriptions,account.subscription_policy,account.names,account.policy,account.teacher_type.school.names,account.finish_signup_status,account.avatar'\n}).then(res => render({ me: res }), e => render({ meError: e }))\n\n// Lazy load external tools\nsetTimeout(() => import('pobble-components/dist/setup/external-tools'), 1000)\n"],"sourceRoot":""}