{"version":3,"sources":["helpers/enums/index.ts","assets/images/tsl-logo-1.png","redux/notification/constants.ts","redux/notification/actions.ts","components/Loader.tsx","redux/appMenu/actions.ts","redux/class/actions.ts","redux/transcript/actions.ts","redux/topbarNotif/actions.ts","redux/irs/constants.ts","helpers/timeUtils.ts","redux/auth/constants.ts","helpers/api/Api.ts","helpers/api/index.ts","redux/class/types.ts","redux/irs/actions.ts","redux/currentQuiz/constants.ts","helpers/authUtils.ts","redux/appMenu/constants.ts","redux/profile/types.ts","redux/auth/actions.ts","pages/other/Error404.tsx","pages/calendar/EventInfoModal.tsx","pages/calendar/index.tsx","pages/auth/ForgetPassword.tsx","pages/auth/ResetPassword.tsx","routes/index.tsx","routes/Routes.tsx","App.tsx","serviceWorker.ts","redux/auth/reducers.ts","redux/appMenu/reducers.ts","redux/notification/reducers.ts","redux/currentQuiz/reducers.ts","redux/class/reducers.ts","redux/profile/reducers.ts","redux/topbarNotif/reducers.ts","redux/irs/reducers.ts","redux/transcript/reducers.ts","redux/reducers.ts","helpers/axios/constanst.ts","helpers/axios/CsrfAuthService.ts","redux/auth/saga.ts","redux/appMenu/utils.ts","redux/appMenu/saga.ts","redux/currentQuiz/saga.ts","redux/profile/saga.ts","redux/irs/saga.ts","redux/transcript/saga.ts","redux/class/saga.ts","redux/sagas.ts","helpers/secureLS/index.ts","helpers/secureLS/MyStorage.ts","redux/store.ts","index.tsx","helpers/config.ts","redux/transcript/constants.ts","redux/topbarNotif/types.ts","helpers/api/fetchJSON.ts","redux/profile/actions.ts","redux/currentQuiz/actions.ts"],"names":["RequestStatus","module","exports","SHOW_NOTIFICATION","HIDE_NOTIFICATION","showNotification","timeout","color","message","type","payload","hideNotification","PreLoaderWidget","className","role","Component","initMenu","INIT_MENU","initMenuSuccess","menuItems","INIT_MENU_SUCCESS","changeActiveMenuFromLocation","CHANGE_ACTIVE_MENU_FROM_LOCATION","changeActiveMenuFromLocationSuccess","activatedMenuItemIds","CHANGE_ACTIVE_MENU_FROM_LOCATION_SUCCESS","setCurrentClass","currentClass","SET_CURRENT_CLASS","setCurrentCourse","currentCourse","SET_CURRENT_COURSE","setCurrentCoursePart","currentCoursePart","SET_CURRENT_COURSE_PART","getMyGroups","GET_MY_GROUPS","getMyGroupsSuccess","data","GET_MY_GROUPS_SUCCESS","getMyGroupsFailed","error","GET_MY_GROUPS_FAILED","getTranscripts","GET_TRANSCRIPTS","getTranscriptsSuccess","GET_TRANSCRIPTS_SUCCESS","getTranscriptsFailed","GET_TRANSCRIPTS_FAILED","addMultiTopbarNotif","topbarNotifs","topbarNotifTypes","ADD_MULTI_TOPBAR_NOTIF","setTopbarNotifLoaded","isLoaded","SET_TOPBAR_NOTIF_LOADED","SET_CURRENT_STUDY_PLAN","GET_STUDY_PLAN","GET_STUDY_PLANS","GET_STUDY_PLANS_SUCCESS","GET_STUDY_PLANS_FAILED","CREATE_STUDY_PLAN","CREATE_STUDY_PLAN_SUCCESS","CREATE_STUDY_PLAN_FAILED","GET_STUDY_PLAN_COURSES","GET_STUDY_PLAN_COURSES_SUCCESS","GET_STUDY_PLAN_COURSES_FAILED","GET_COURSE_BATCHES","GET_COURSE_BATCHES_SUCCESS","GET_COURSE_BATCHES_FAILED","SUBMIT_STUDY_PLAN_COURSES","SUBMIT_STUDY_PLAN_COURSES_SUCCESS","SUBMIT_STUDY_PLAN_COURSES_FAILED","dayjs","extend","customParseFormat","dayjsLocalize","datetimeStringFromServer","LOGIN_USER","LOGIN_USER_SUCCESS","LOGIN_USER_FAILED","REGISTER_USER","REGISTER_USER_SUCCESS","REGISTER_USER_FAILED","LOGOUT_USER","FORGET_PASSWORD","FORGET_PASSWORD_SUCCESS","FORGET_PASSWORD_FAILED","UPDATE_PASSWORD","UPDATE_PASSWORD_SUCCESS","UPDATE_PASSWORD_FAILED","Api","baseUrl","defaultHeader","Accept","get","path","options","method","token","getToken","headers","Authorization","fetchJSON","post","put","delete","patch","this","ApiLearning","config","apiUrl","getStudyPlan","id","setCurrentStudyPlan","getStudyPlans","getStudyPlansSuccess","getStudyPlansFailed","getStudyPlanCourses","getStudyPlanCoursesSuccess","getStudyPlanCoursesFailed","createStudyPlan","onSuccess","createStudyPlanSuccess","createStudyPlanFailed","getCourseBatches","getCourseBatchesSuccess","getCourseBatchesFailed","submitStudyPlanCourses","added","removed","submitStudyPlanCoursesSuccess","submitStudyPlanCoursesFailed","REQUEST_QUIZ","SET_CURRENT_QUIZ","RESET_CURRENT_QUIZ","CHOOSE_ANSWER","SUBMIT_ANSWER","SUBMIT_ANSWER_SUCCESSFULL","isUserAuthenticated","isEmpty","tokenExpiringTimestamps","getTokenExpiration","unix","cookies","remove","getLoggedInUser","user","JSON","parse","token_expire","profileTypes","GET_PROFILE","GET_PROFILE_SUCESS","GET_PROFILE_ERROR","RESET_GET_PROFILE","loginUser","username","password","grant_type","loginUserSuccess","loginUserFailed","registerUserSuccess","registerUserFailed","logoutUser","history","forgetPassword","email","forgetPasswordSuccess","passwordResetStatus","forgetPasswordFailed","updatePassword","new_password","reset_id","updatePasswordSuccess","passwordUpdateStatus","updatePasswordFailed","Error404","pathname","useLocation","Container","Row","Col","xl","lg","src","logo","alt","width","to","EventInfoModal","props","toggle","selectedEvent","Modal","isOpen","ModalHeader","title","ModalBody","start","format","end","dangerouslySetInnerHTML","__html","description","ModalFooter","Button","onClick","apiUri","CalendarApp","useState","showCreateModal","setShowCreateModal","setSelectedEvent","currCalendarTitle","setCurrCalendarTitle","getAcademicCalendar","start_date","end_date","a","body","filter","gte","moment","toString","lte","stringify","result","map","v","i","start_time","toDate","end_time","backgroundColor","extendedProps","descripton","Fragment","xs","Card","CardBody","defaultView","plugins","BootstrapTheme","dayGridPlugin","interactionPlugin","timeGridPlugin","listPlugin","themeSystem","bootstrapFontAwesome","buttonText","today","month","week","day","list","prev","next","header","left","center","right","datesRender","info","view","contentHeight","eventClick","eventInfo","event","editable","selectable","events","fetchInfo","thisUri","ForgotPasswordWrapper","children","md","ForgotPasswordForm","dispatch","useDispatch","_forgetPassword","useCallback","onValidSubmit","values","InputGroup","InputGroupAddon","addonType","name","placeholder","value","required","FormGroup","ForgotPassword","useSelector","state","Auth","loading","isAuthenticated","isSubmitSuccess","code","Loader","height","Alert","style","marginTop","ResetPasswordWrapper","resetId","useParams","setLoading","setError","useEffect","getLinkStatus","UpdatePasswordForm","retypePassword","_updatePassword","length","alert","Label","for","ResetPassword","href","Login","React","lazy","Logout","Dashboard","ClassPage","ClassDetail","MataKuliahDetail","SubMatkulDetail","MateriPelajaranDetail","UjianPage","FeedbackUjianPage","Profile","TranskripPage","TranskripDetailPage","SurveyPage","SurveyDetailPage","PrayerTimes","IrsPage","IrsFormPage","IrsPlanPage","IrsPlanEditPage","Video","PrivateRoute","component","exact","render","rootRoute","disableFromMenu","disableFromMobileMenu","route","dashboardRoutes","icon","FeatherIcon","activeUserOnly","calendarAppRoutes","classRoutes","transcriptsRoutes","irsRoutes","create","profileRoutes","prayerTimesRoutes","surveyRoutes","authRoutes","Route","ForgetPassword","videoRoutes","flattenRoutes","routes","flatRoutes","forEach","item","push","authProtectedRoutes","flattenedAuthRoutes","flattenedPrivateRoutes","FullPageLayout","DashboardLayout","Loading","Spinner","size","Routes","index","key","fallback","FallbackComponent","eventId","stack","App","Boolean","window","location","hostname","match","initialState","action","AppMenu","INIT_STATE","show","notification","isLoading","isSubmitting","isSubmitted","canParticipate","class_id","course_id","course_part_id","title_id","time","time_open","time_close","category","finished_at","taken_at","questions","errMessage","currentQuiz","newQuestions","question_id","answer_id","courses","groups","profile","address","age","birth_date","Date","birth_place","city","city_id","country","phone_code","country_id","created_at","deleted_at","education_id","education_name","school_name","study_program","entry_level_id","gender","isCompleteDataProfile","job_id","job_name","marital_status","nip","phone","phone_country_code","status","is_verification_wa","Initial","undefined","Pending","Successful","Failed","topbarNotif","loadingCourse","loadingBatch","submitting","currentStudyPlan","studyPlans","planCourses","courseBatches","irs","ipk","transcripts","transcript","summary_score","course","rootReducer","combineReducers","Notification","CurrentQuiz","Class","ProfileReducer","TopbarNotif","ADD_TOPBAR_NOTIF","newData","element","bgColor","text","subText","GET_TOPBAR_NOTIF","Irs","IrsReducer","Transcript","TranscriptReducer","axClient","axios","baseURL","sanctumUrl","xsrfHeaderName","withCredentials","URL","then","res","login","logout","register","watchLoginUser","watchLogoutUser","watchRegisterUser","watchForgetPassword","watchUpdatePassword","authSaga","setSession","set","call","csrfService","getSanctum","response","getProfileSuccess","expire_token","fullname","takeEvery","all","fork","uuid","assignIdAndParent","parentId","active","initMenuAndItems","watchMenuInit","watchMenuChange","appMenuSaga","getActivatedMenuItemIds","matchingItems","menuItem","indexOf","assignIds","requestQuiz","submitAnswerFunc","watchRequestQuiz","watchSubmitAnswer","currentQuizSaga","resetCurrentQuiz","setCurrentQuiz","quiz_id","Error","add","console","log","select","waktuPengerjaan","diff","timer","answers","is_essay","submitAnswerSuccessfull","fetchMyProfile","watchFetchMyProfile","profileSaga","resetGetProfile","getProfileError","fetchStudyPlan","fetchStudyPlans","fetchStudyPlanCourses","fetchCourseBatches","watchFetchStudyPlan","watchFetchStudyPlans","watchCreateStudyPlan","watchFetchStudyPlanCourses","watchFetchCourseBatches","watchSubmitStudyPlanCourses","irsSaga","plans","plan","find","it","sortBy","desc","user_plan_study_id","period","semester","fetchTranscripts","watchFetchTranscripts","transcriptSaga","transcript_type","fetchMyGroups","watchFetchMyGroups","classSaga","rootSaga","getState","ls","SecureLS","encodingType","encryptionSecret","secureLSSecret","getItem","setItem","removeItem","sagaMiddleware","createSagaMiddleware","middlewares","persistConfig","storage","secureLS","whitelist","persistedReducer","persistReducer","reducers","composeEnhancers","compose","store","createStore","applyMiddleware","run","sagas","persistor","persistStore","configureStore","Sentry","dsn","integrations","TracingIntegrations","BrowserTracing","tracesSampleRate","ReactDOM","document","getElementById","navigator","serviceWorker","ready","registration","unregister","process","apiWpUrl","WP_API_BASE_URL","url","fetch","json","catch","getProfile","chooseAnswer","submitAnswer"],"mappings":"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","file":"static/js/main.e46f20c2.chunk.js","sourcesContent":["export enum RequestStatus {\n Initial,\n Pending,\n Successful,\n Failed,\n}\n","module.exports = __webpack_public_path__ + \"static/media/tsl-logo-1.041e872c.png\";","export const SHOW_NOTIFICATION = 'SHOW_NOTIFICATION';\nexport const HIDE_NOTIFICATION = 'HIDE_NOTIFICATION';\n","import { SHOW_NOTIFICATION, HIDE_NOTIFICATION } from './constants';\n\ninterface ShowNotificationParams {\n timeout?: number;\n color?: string;\n message: string;\n}\nexport const showNotification = ({ timeout, color, message }: ShowNotificationParams) => ({\n type: SHOW_NOTIFICATION,\n payload: {\n timeout,\n color,\n message,\n },\n});\n\nexport const hideNotification = () => ({\n type: HIDE_NOTIFICATION,\n});\n","import React, { Component } from 'react';\n\n/**\n * Renders the preloader\n */\nclass PreLoaderWidget extends Component {\n render() {\n return (\n
\n
\n
\n
\n
\n );\n }\n}\n\nexport default PreLoaderWidget;\n","import {\n INIT_MENU,\n INIT_MENU_SUCCESS,\n CHANGE_ACTIVE_MENU_FROM_LOCATION,\n CHANGE_ACTIVE_MENU_FROM_LOCATION_SUCCESS,\n} from './constants';\n\nexport const initMenu = () => ({\n type: INIT_MENU,\n payload: {},\n});\n\nexport const initMenuSuccess = (menuItems) => ({\n type: INIT_MENU_SUCCESS,\n payload: { menuItems },\n});\n\nexport const changeActiveMenuFromLocation = () => ({\n type: CHANGE_ACTIVE_MENU_FROM_LOCATION,\n payload: {},\n});\n\nexport const changeActiveMenuFromLocationSuccess = (activatedMenuItemIds) => ({\n type: CHANGE_ACTIVE_MENU_FROM_LOCATION_SUCCESS,\n payload: { activatedMenuItemIds },\n});\n","import {\n ClassActionTypes,\n GET_MY_GROUPS,\n GET_MY_GROUPS_FAILED,\n GET_MY_GROUPS_SUCCESS,\n SET_CURRENT_CLASS,\n SET_CURRENT_COURSE,\n SET_CURRENT_COURSE_PART,\n} from './types';\nimport { Kelas, Course, CoursePart } from 'helpers/interfaces';\n\nexport function setCurrentClass(currentClass: Kelas): ClassActionTypes {\n return {\n type: SET_CURRENT_CLASS,\n payload: currentClass,\n };\n}\nexport function setCurrentCourse(currentCourse: Course): ClassActionTypes {\n return {\n type: SET_CURRENT_COURSE,\n payload: currentCourse,\n };\n}\nexport function setCurrentCoursePart(currentCoursePart: CoursePart): ClassActionTypes {\n return {\n type: SET_CURRENT_COURSE_PART,\n payload: currentCoursePart,\n };\n}\n\nexport function getMyGroups() {\n return {\n type: GET_MY_GROUPS,\n };\n}\nexport function getMyGroupsSuccess(data) {\n return {\n type: GET_MY_GROUPS_SUCCESS,\n payload: data,\n };\n}\nexport function getMyGroupsFailed(error) {\n return {\n type: GET_MY_GROUPS_FAILED,\n payload: error,\n };\n}\n","import { GET_TRANSCRIPTS, GET_TRANSCRIPTS_FAILED, GET_TRANSCRIPTS_SUCCESS } from './constants';\nimport { ReduxAction } from 'redux/actions';\n\nexport interface RequestTranscript {\n transcript_type: boolean;\n}\n\nexport const getTranscripts = (payload: RequestTranscript): ReduxAction => ({\n type: GET_TRANSCRIPTS,\n payload,\n});\nexport const getTranscriptsSuccess = (data) => ({\n type: GET_TRANSCRIPTS_SUCCESS,\n payload: data,\n});\nexport const getTranscriptsFailed = (error) => ({\n type: GET_TRANSCRIPTS_FAILED,\n payload: error,\n});\n","import { TopbarNotifActionTypes, topbarNotifTypes } from './types';\n\nimport TopbarNotif from 'helpers/interfaces/TopbarNotif';\n\nexport const addTopbarNotif = (topbarNotif: TopbarNotif): TopbarNotifActionTypes => ({\n type: topbarNotifTypes.ADD_TOPBAR_NOTIF,\n payload: topbarNotif,\n});\n\nexport const addMultiTopbarNotif = (topbarNotifs: TopbarNotif[]): TopbarNotifActionTypes => ({\n type: topbarNotifTypes.ADD_MULTI_TOPBAR_NOTIF,\n payload: topbarNotifs,\n});\n\nexport const setTopbarNotifLoaded = (isLoaded: boolean): TopbarNotifActionTypes => ({\n type: topbarNotifTypes.SET_TOPBAR_NOTIF_LOADED,\n payload: isLoaded,\n});\n\nexport const getTopbarNotif = (): TopbarNotifActionTypes => ({\n type: topbarNotifTypes.GET_TOPBAR_NOTIF,\n});\n","export const SET_CURRENT_STUDY_PLAN = 'SET_CURRENT_STUDY_PLAN';\nexport const GET_STUDY_PLAN = 'GET_STUDY_PLAN';\nexport const GET_STUDY_PLANS = 'GET_STUDY_PLANS';\nexport const GET_STUDY_PLANS_SUCCESS = 'GET_STUDY_PLANS_SUCCESS';\nexport const GET_STUDY_PLANS_FAILED = 'GET_STUDY_PLANS_FAILED';\nexport const CREATE_STUDY_PLAN = 'CREATE_STUDY_PLAN';\nexport const CREATE_STUDY_PLAN_SUCCESS = 'CREATE_STUDY_PLAN_SUCCESS';\nexport const CREATE_STUDY_PLAN_FAILED = 'CREATE_STUDY_PLAN_FAILED';\nexport const GET_STUDY_PLAN_COURSES = 'GET_STUDY_PLAN_COURSES';\nexport const GET_STUDY_PLAN_COURSES_SUCCESS = 'GET_STUDY_PLAN_COURSES_SUCCESS';\nexport const GET_STUDY_PLAN_COURSES_FAILED = 'GET_STUDY_PLAN_COURSES_FAILED';\nexport const GET_COURSE_BATCHES = 'GET_COURSE_BATCHES';\nexport const GET_COURSE_BATCHES_SUCCESS = 'GET_COURSE_BATCHES_SUCCESS';\nexport const GET_COURSE_BATCHES_FAILED = 'GET_COURSE_BATCHES_FAILED';\nexport const SUBMIT_STUDY_PLAN_COURSES = 'SUBMIT_STUDY_PLAN_COURSES';\nexport const SUBMIT_STUDY_PLAN_COURSES_SUCCESS = 'SUBMIT_STUDY_PLAN_COURSES_SUCCESS';\nexport const SUBMIT_STUDY_PLAN_COURSES_FAILED = 'SUBMIT_STUDY_PLAN_COURSES_FAILED';\n","import dayjs from 'dayjs';\n\nimport customParseFormat from 'dayjs/plugin/customParseFormat';\ndayjs.extend(customParseFormat);\n\n// fungsi ini utk merubah datetime dari server menjadi local\n// misal di server jam 09:30:00\n// maka di browser user (misal di Irian Jaya +2) => jam 11:30:00\nexport const dayjsLocalize = (datetimeStringFromServer): any => {\n // assume server time is set to +07:00\n datetimeStringFromServer = datetimeStringFromServer + ' +07:00';\n return dayjs(datetimeStringFromServer, 'YYYY-MM-DD HH:mm:ss Z');\n};\n","/* AUTH */\nexport const LOGIN_USER = 'LOGIN_USER';\nexport const LOGIN_USER_SUCCESS = 'LOGIN_USER_SUCCESS';\nexport const LOGIN_USER_FAILED = 'LOGIN_USER_FAILED';\nexport const REGISTER_USER = 'REGISTER_USER';\nexport const REGISTER_USER_SUCCESS = 'REGISTER_USER_SUCCESS';\nexport const REGISTER_USER_FAILED = 'REGISTER_USER_FAILED';\nexport const LOGOUT_USER = 'LOGOUT_USER';\nexport const FORGET_PASSWORD = 'FORGET_PASSWORD';\nexport const FORGET_PASSWORD_SUCCESS = 'FORGET_PASSWORD_SUCCESS';\nexport const FORGET_PASSWORD_FAILED = 'FORGET_PASSWORD_FAILED';\nexport const UPDATE_PASSWORD = 'UPDATE_PASSWORD';\nexport const UPDATE_PASSWORD_SUCCESS = 'UPDATE_PASSWORD_SUCCESS';\nexport const UPDATE_PASSWORD_FAILED = 'UPDATE_PASSWORD_FAILED';\n","import { fetchJSON } from './fetchJSON';\nimport { getToken } from 'helpers/authUtils';\n\nexport class Api {\n private baseUrl: string;\n private defaultHeader: HeadersInit = {\n 'Content-Type': 'application/json',\n Accept: 'application/json',\n };\n\n constructor(baseUrl) {\n this.baseUrl = baseUrl;\n }\n\n get = (path: string, options: RequestInit = {}) => {\n delete options.method;\n const token = getToken();\n const headers = { ...this.defaultHeader, Authorization: 'Bearer ' + token, ...options.headers };\n\n return fetchJSON(this.baseUrl + path, {\n ...options,\n headers,\n method: 'GET',\n });\n };\n\n post = (path: string, options: RequestInit = {}) => {\n delete options.method;\n const token = getToken();\n const headers = { ...this.defaultHeader, Authorization: 'Bearer ' + token, ...options.headers };\n\n return fetchJSON(this.baseUrl + path, {\n ...options,\n headers,\n method: 'POST',\n });\n };\n\n put = (path: string, options: RequestInit = {}) => {\n delete options.method;\n const token = getToken();\n const headers = { ...this.defaultHeader, Authorization: 'Bearer ' + token, ...options.headers };\n\n return fetchJSON(this.baseUrl + path, {\n ...options,\n headers,\n method: 'PUT',\n });\n };\n\n delete = (path: string, options: RequestInit = {}) => {\n delete options.method;\n const token = getToken();\n const headers = { ...this.defaultHeader, Authorization: 'Bearer ' + token, ...options.headers };\n\n return fetchJSON(this.baseUrl + path, {\n ...options,\n headers,\n method: 'DELETE',\n });\n };\n\n patch = (path: string, options: RequestInit = {}) => {\n delete options.method;\n const token = getToken();\n const headers = { ...this.defaultHeader, Authorization: 'Bearer ' + token, ...options.headers };\n\n return fetchJSON(this.baseUrl + path, {\n ...options,\n headers,\n method: 'PATCH',\n });\n };\n}\n","import { Api } from './Api';\nimport config from 'helpers/config';\n\nexport * from './fetchJSON';\n\nconst ApiLearning = new Api(config.apiUrl);\n\nexport { ApiLearning };\n","import { Kelas, Course, CoursePart, Group } from 'helpers/interfaces';\n\nexport const SET_CURRENT_CLASS = 'SET_CURRENT_CLASS';\nexport const SET_CURRENT_COURSE = 'SET_CURRENT_COURSE';\nexport const SET_CURRENT_COURSE_PART = 'SET_CURRENT_COURSE_PART';\nexport const GET_MY_GROUPS = 'GET_MY_GROUPS';\nexport const GET_MY_GROUPS_SUCCESS = 'GET_MY_GROUPS_SUCCESS';\nexport const GET_MY_GROUPS_FAILED = 'GET_MY_GROUPS_FAILED';\n\nexport interface ClassState {\n currentClass: Kelas;\n currentCourse: Course;\n currentCoursePart: CoursePart;\n groups: Group[];\n loading: boolean;\n error: any;\n}\n\ninterface SetCurrentClassAction {\n type: typeof SET_CURRENT_CLASS;\n payload: Kelas;\n}\n\ninterface SetCurrentCourseAction {\n type: typeof SET_CURRENT_COURSE;\n payload: Course;\n}\n\ninterface SetCurrentCoursePartAction {\n type: typeof SET_CURRENT_COURSE_PART;\n payload: CoursePart;\n}\n\ninterface GetMyGroupsAction {\n type: typeof GET_MY_GROUPS;\n}\n\ninterface GetMyGroupsSuccessAction {\n type: typeof GET_MY_GROUPS_SUCCESS;\n payload: Group[];\n}\n\ninterface GetMyGroupsFailedAction {\n type: typeof GET_MY_GROUPS_FAILED;\n payload: any;\n}\n\nexport type ClassActionTypes =\n | SetCurrentClassAction\n | SetCurrentCourseAction\n | SetCurrentCoursePartAction\n | GetMyGroupsAction\n | GetMyGroupsSuccessAction\n | GetMyGroupsFailedAction;\n","import {\n SET_CURRENT_STUDY_PLAN,\n CREATE_STUDY_PLAN,\n CREATE_STUDY_PLAN_FAILED,\n CREATE_STUDY_PLAN_SUCCESS,\n GET_STUDY_PLAN,\n GET_STUDY_PLANS,\n GET_STUDY_PLANS_FAILED,\n GET_STUDY_PLANS_SUCCESS,\n GET_STUDY_PLAN_COURSES,\n GET_STUDY_PLAN_COURSES_FAILED,\n GET_STUDY_PLAN_COURSES_SUCCESS,\n GET_COURSE_BATCHES,\n GET_COURSE_BATCHES_FAILED,\n GET_COURSE_BATCHES_SUCCESS,\n SUBMIT_STUDY_PLAN_COURSES,\n SUBMIT_STUDY_PLAN_COURSES_SUCCESS,\n SUBMIT_STUDY_PLAN_COURSES_FAILED,\n} from './constants';\n\nexport const getStudyPlan = (id) => ({\n type: GET_STUDY_PLAN,\n payload: id,\n});\nexport const setCurrentStudyPlan = (data) => ({\n type: SET_CURRENT_STUDY_PLAN,\n payload: data,\n});\n\nexport const getStudyPlans = () => ({\n type: GET_STUDY_PLANS,\n});\nexport const getStudyPlansSuccess = (data) => ({\n type: GET_STUDY_PLANS_SUCCESS,\n payload: data,\n});\nexport const getStudyPlansFailed = (error) => ({\n type: GET_STUDY_PLANS_FAILED,\n payload: error,\n});\n\nexport const getStudyPlanCourses = (id) => ({\n type: GET_STUDY_PLAN_COURSES,\n payload: id,\n});\nexport const getStudyPlanCoursesSuccess = (data) => ({\n type: GET_STUDY_PLAN_COURSES_SUCCESS,\n payload: data,\n});\nexport const getStudyPlanCoursesFailed = (error) => ({\n type: GET_STUDY_PLAN_COURSES_FAILED,\n payload: error,\n});\n\nexport interface CreateStudyPlan {\n period: string;\n semester: number;\n adviser_id: string;\n}\nexport const createStudyPlan = (data: CreateStudyPlan, onSuccess) => ({\n type: CREATE_STUDY_PLAN,\n payload: data,\n onSuccess,\n});\nexport const createStudyPlanSuccess = (data) => ({\n type: CREATE_STUDY_PLAN_SUCCESS,\n payload: data,\n});\nexport const createStudyPlanFailed = (error) => ({\n type: CREATE_STUDY_PLAN_FAILED,\n payload: error,\n});\n\nexport interface RequestGetCourseBatches {\n period: string;\n semester: number;\n}\nexport const getCourseBatches = (data: RequestGetCourseBatches) => ({\n type: GET_COURSE_BATCHES,\n payload: data,\n});\nexport const getCourseBatchesSuccess = (data) => ({\n type: GET_COURSE_BATCHES_SUCCESS,\n payload: data,\n});\nexport const getCourseBatchesFailed = (error) => ({\n type: GET_COURSE_BATCHES_FAILED,\n payload: error,\n});\n\nexport interface RequestSubmitCourse {\n id?: string;\n course_id: string;\n credit: string;\n user_plan_study_id: string;\n}\nexport const submitStudyPlanCourses = (\n added: RequestSubmitCourse[],\n removed: RequestSubmitCourse[],\n onSuccess\n) => ({\n type: SUBMIT_STUDY_PLAN_COURSES,\n payload: {\n added: added,\n removed: removed,\n },\n onSuccess,\n});\nexport const submitStudyPlanCoursesSuccess = () => ({\n type: SUBMIT_STUDY_PLAN_COURSES_SUCCESS,\n});\nexport const submitStudyPlanCoursesFailed = (error) => ({\n type: SUBMIT_STUDY_PLAN_COURSES_FAILED,\n payload: error,\n});\n","export const REQUEST_QUIZ = 'REQUEST_QUIZ';\nexport const SET_CURRENT_QUIZ = 'SET_CURRENT_QUIZ';\nexport const RESET_CURRENT_QUIZ = 'RESET_CURRENT_QUIZ';\nexport const CHOOSE_ANSWER = 'CHOOSE_ANSWER';\nexport const SUBMIT_ANSWER = 'SUBMIT_ANSWER';\nexport const SUBMIT_ANSWER_SUCCESSFULL = 'SUBMIT_ANSWER_SUCCESSFULL';\n","import jwtDecode from 'jwt-decode';\nimport cookies from 'js-cookie';\nimport dayjs from 'dayjs';\nimport { isEmpty } from 'lodash';\n\nexport const isUserAuthenticated = () => {\n const token = getToken();\n if (isEmpty(token)) {\n return false;\n }\n\n const tokenExpiringTimestamps = getTokenExpiration();\n const tokenExpiringTime = dayjs.unix(tokenExpiringTimestamps);\n const currentTime = dayjs();\n\n if (tokenExpiringTime < currentTime) {\n cookies.remove('user');\n return false;\n }\n\n return true;\n};\n\ninterface User {\n id: string;\n nip: string;\n name: string;\n role: string;\n token: string;\n token_expire: number;\n}\n\nexport const getLoggedInUser = (): User => {\n const user = cookies.get('user');\n return isEmpty(user) ? {} : JSON.parse(user as string);\n};\n\nexport const getToken = (): string => {\n const user = getLoggedInUser();\n return user ? user.token : '';\n};\n\nexport const getTokenExpiration = (): number => {\n const user = getLoggedInUser();\n return user ? user.token_expire : 0;\n};\n","/* APP MENU */\nexport const INIT_MENU = 'INIT_MENU';\nexport const INIT_MENU_SUCCESS = 'INIT_MENU_SUCCESS';\nexport const CHANGE_ACTIVE_MENU_FROM_LOCATION = 'CHANGE_ACTIVE_MENU_FROM_LOCATION';\nexport const CHANGE_ACTIVE_MENU_FROM_LOCATION_SUCCESS = 'CHANGE_ACTIVE_MENU_FROM_LOCATION_SUCCESS';\n","import { Profile } from 'helpers/interfaces/user';\n\ninterface ProfileTypes {\n GET_PROFILE: 'GET_PROFILE';\n GET_PROFILE_SUCESS: 'GET_PROFILE_SUCCESS';\n GET_PROFILE_ERROR: 'GET_PROFILE_ERROR';\n RESET_GET_PROFILE: 'RESET_GET_PROFILE';\n}\n\nexport const profileTypes: ProfileTypes = {\n GET_PROFILE: 'GET_PROFILE',\n GET_PROFILE_SUCESS: 'GET_PROFILE_SUCCESS',\n GET_PROFILE_ERROR: 'GET_PROFILE_ERROR',\n RESET_GET_PROFILE: 'RESET_GET_PROFILE',\n};\n\ninterface GetProfileAction {\n type: typeof profileTypes.GET_PROFILE;\n}\n\ninterface GetProfileSuccessAction {\n type: typeof profileTypes.GET_PROFILE_SUCESS;\n payload: Profile;\n}\n\ninterface GetProfileErrorAction {\n type: typeof profileTypes.GET_PROFILE_ERROR;\n payload: Error;\n}\n\ninterface ResetGetProfileAction {\n type: typeof profileTypes.RESET_GET_PROFILE;\n}\n\nexport type ProfileActionTypes =\n | GetProfileAction\n | GetProfileSuccessAction\n | GetProfileErrorAction\n | ResetGetProfileAction;\n","import {\n LOGIN_USER,\n LOGIN_USER_SUCCESS,\n LOGIN_USER_FAILED,\n LOGOUT_USER,\n REGISTER_USER,\n REGISTER_USER_SUCCESS,\n REGISTER_USER_FAILED,\n FORGET_PASSWORD,\n FORGET_PASSWORD_SUCCESS,\n FORGET_PASSWORD_FAILED,\n UPDATE_PASSWORD,\n UPDATE_PASSWORD_SUCCESS,\n UPDATE_PASSWORD_FAILED,\n} from './constants';\n\nexport const loginUser = (username, password, grant_type) => ({\n type: LOGIN_USER,\n payload: { username, password, grant_type },\n});\n\nexport const loginUserSuccess = (user) => ({\n type: LOGIN_USER_SUCCESS,\n payload: user,\n});\n\nexport const loginUserFailed = (error) => ({\n type: LOGIN_USER_FAILED,\n payload: error,\n});\n\nexport const registerUser = (fullname, email, password) => ({\n type: REGISTER_USER,\n payload: { fullname, email, password },\n});\n\nexport const registerUserSuccess = (user) => ({\n type: REGISTER_USER_SUCCESS,\n payload: user,\n});\n\nexport const registerUserFailed = (error) => ({\n type: REGISTER_USER_FAILED,\n payload: error,\n});\n\nexport const logoutUser = (history) => ({\n type: LOGOUT_USER,\n payload: { history },\n});\n\nexport const forgetPassword = (email) => ({\n type: FORGET_PASSWORD,\n payload: { email },\n});\n\nexport const forgetPasswordSuccess = (passwordResetStatus) => ({\n type: FORGET_PASSWORD_SUCCESS,\n payload: passwordResetStatus,\n});\n\nexport const forgetPasswordFailed = (error) => ({\n type: FORGET_PASSWORD_FAILED,\n payload: error,\n});\n\nexport const updatePassword = (new_password, reset_id) => ({\n type: UPDATE_PASSWORD,\n payload: { new_password, reset_id },\n});\n\nexport const updatePasswordSuccess = (passwordUpdateStatus) => ({\n type: UPDATE_PASSWORD_SUCCESS,\n payload: passwordUpdateStatus,\n});\n\nexport const updatePasswordFailed = (error) => ({\n type: UPDATE_PASSWORD_FAILED,\n payload: error,\n});\n","import React from 'react';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { Container, Row, Col } from 'reactstrap';\n\nimport imgNotFound from 'assets/images/not-found.png';\nimport logo from 'assets/images/tsl-logo-1.png';\n\nconst Error404 = () => {\n const { pathname } = useLocation();\n\n return (\n
\n \n \n \n
\n
\n \"\"\n
\n
\n \n
\n\n \n \n

404 - Halaman tidak ditemukan

\n
{pathname}
\n

\n Halaman yg antum cari tidak ditemukan. Apakah URL yg diketik sudah benar?\n
\n Jika antum merasa ini adalah sebuah kesalahan / bug, silahkan hubungi tim support TSL.\n

\n\n \n Kembali ke Home\n \n \n
\n
\n
\n );\n};\n\nexport default Error404;\n","import React from 'react';\nimport { Button, Modal, ModalHeader, ModalBody, ModalFooter } from 'reactstrap';\nimport dayjs from 'dayjs';\nimport { dayjsLocalize } from 'helpers/timeUtils';\n\ninterface EventInfoModalProps {\n thisUri: string;\n apiUri: string;\n toggle: () => void;\n isOpen: boolean;\n selectedEvent;\n}\n\nconst EventInfoModal: React.FC = (props) => {\n const { toggle, selectedEvent } = props;\n\n return (\n \n
\n
\n {selectedEvent.title}\n
\n
\n \n
\n \n \n \n \n \n \n \n \n \n \n \n
Mulai : {dayjsLocalize(selectedEvent.start).format('DD MMMM YYYY HH:mm:ss')}
Berakhir : {dayjsLocalize(selectedEvent.end).format('DD MMMM YYYY HH:mm:ss')}
\n
\n

\n \n \n \n \n \n );\n};\n\nexport default EventInfoModal;\n","import React, { useState } from 'react';\nimport { Row, Col, Card, CardBody } from 'reactstrap';\n\n//import { EventInput } from '@fullcalendar/core';\nimport FullCalendar from '@fullcalendar/react';\nimport dayGridPlugin from '@fullcalendar/daygrid';\nimport interactionPlugin from '@fullcalendar/interaction';\nimport BootstrapTheme from '@fullcalendar/bootstrap';\nimport listPlugin from '@fullcalendar/list';\nimport timeGridPlugin from '@fullcalendar/timegrid';\n\nimport PageTitle from '../../components/PageTitle';\nimport { ApiLearning } from 'helpers/api';\nimport moment from 'moment';\nimport EventInfoModal from './EventInfoModal';\n\nconst thisUri = '/kalender';\nconst apiUri = '/academic-calendars';\n\nexport const CalendarApp: React.FC = () => {\n // const events: CalendarEvent[] = [\n // {\n // id: 1,\n // title: 'UAS',\n // start: new Date().setDate(new Date().getDate() + 1),\n // end: new Date().setDate(new Date().getDate() + 5),\n // className: 'bg-warning text-white',\n // extendedProps: {\n // description: 'Lorem Ipsum Dolor sit Amet',\n // },\n // },\n // {\n // id: 2,\n // title: 'Libur Nasional',\n // start: new Date().setDate(new Date().getDate() + 8),\n // end: new Date().setDate(new Date().getDate() + 9),\n // className: 'bg-danger text-white',\n // extendedProps: {\n // description: 'Lorem Ipsum Dolor sit Amet',\n // },\n // },\n // ];\n\n const [showCreateModal, setShowCreateModal] = useState(false);\n // const [eventData, setEventData] = useState([]);\n const [selectedEvent, setSelectedEvent] = useState({});\n const [currCalendarTitle, setCurrCalendarTitle] = useState('');\n\n const getAcademicCalendar = async (start_date, end_date) => {\n const uri = apiUri;\n const body = {\n filter: {\n start_date: {\n gte: moment(start_date).format('YYYY-MM-DD').toString(),\n },\n end_date: {\n lte: moment(end_date).format('YYYY-MM-DD').toString(),\n },\n },\n };\n const {\n data: { data },\n } = await ApiLearning.post(uri, { body: JSON.stringify(body) });\n\n const result = data.map((v, i) => ({\n id: v.id,\n title: v.title,\n description: v.description,\n start: moment(v.start_date + ' ' + v.start_time, 'YYYY-MM-DD HH:mm').toDate(),\n end: moment(v.end_date + ' ' + v.end_time, 'YYYY-MM-DD HH:mm').toDate(),\n className: 'text-white',\n backgroundColor: v.color,\n extendedProps: {\n descripton: v.description,\n },\n }));\n\n // console.log(result);\n return result;\n };\n\n const handleEventClick = (eventInfo: any) => {\n setShowCreateModal(true);\n const data = eventInfo.event;\n setSelectedEvent({\n id: data.id,\n title: data.title,\n description: data.extendedProps.description,\n start: data.start,\n end: data.end,\n color: data.backgroundColor,\n });\n };\n\n const getEvents = (fetchInfo: any) => {\n if (!showCreateModal) {\n return getAcademicCalendar(fetchInfo.start, fetchInfo.end);\n }\n };\n\n return (\n \n \n \n

Kalender Akademik

\n \n \n \n \n

{currCalendarTitle}

\n \n
\n \n \n \n \n {/* fullcalendar control */}\n ',\n }}\n header={{\n left: 'prev,next today',\n center: '',\n right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth',\n }}\n datesRender={(info) => {\n const view = info.view;\n setCurrCalendarTitle(view.title);\n }}\n contentHeight={'auto'}\n eventClick={handleEventClick}\n editable={true}\n // eventLimit={true} // allow \"more\" link when too many events\n selectable={true}\n // events={eventData}\n events={getEvents}\n />\n \n \n \n {/* toggleModal('eventInfo')}\n onNextClick={handleNextClick}\n onPrevClick={handlePrevClick}\n selectedDate={selectedDate}\n events={eventData}\n /> */}\n setShowCreateModal(!showCreateModal)}\n isOpen={showCreateModal}\n />\n \n \n );\n};\n\nexport default CalendarApp;\n","import React, { FunctionComponent, useState, useCallback } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Link, Redirect } from 'react-router-dom';\n\nimport {\n Container,\n Row,\n Col,\n Card,\n CardBody,\n Label,\n FormGroup,\n Button,\n Alert,\n InputGroup,\n InputGroupAddon,\n} from 'reactstrap';\nimport { isEmpty } from 'lodash';\nimport { AvForm, AvGroup, AvInput, AvFeedback } from 'availity-reactstrap-validation';\nimport { Mail, Lock } from 'react-feather';\n\nimport { forgetPassword } from 'redux/actions';\nimport { isUserAuthenticated } from 'helpers/authUtils';\nimport Loader from 'components/Loader';\nimport logo from 'assets/images/tsl-logo-1.png';\nimport { RootState } from 'redux/reducers';\n\ninterface ForgotPasswordWrapper {\n children: React.ReactNode;\n}\n\nconst ForgotPasswordWrapper: FunctionComponent = ({ children }) => (\n
\n \n \n \n \n \n \n {children}\n \n
\n \n
\n
\n
\n \n
\n\n \n \n

Tarbiyah Sunnah Learning 2020

\n \n
\n
\n
\n);\n\nconst ForgotPasswordForm = () => {\n const [email, setEmail] = useState('');\n const dispatch = useDispatch();\n const _forgetPassword = useCallback(\n (email) => {\n dispatch(forgetPassword(email));\n },\n [dispatch]\n );\n\n const handleValidSubmit = (event, values) => {\n _forgetPassword(values.email);\n };\n\n return (\n \n \n \n \n \n \n \n \n \n \n This field is invalid\n \n\n \n \n \n \n );\n};\n\nconst ForgotPassword: FunctionComponent = () => {\n const { loading, error, passwordResetStatus } = useSelector((state: RootState) => state.Auth);\n const isAuthenticated = isUserAuthenticated();\n const isSubmitSuccess = passwordResetStatus.code == 200;\n\n if (isAuthenticated) {\n return ;\n }\n\n return (\n \n \n {loading && }\n\n
\n \"\"\n
\n\n
Reset Password
\n {isSubmitSuccess ? (\n \n Kami telah mengirimkan instruksi reset password ke email antum. Silahkan dicek.\n \n ) : (\n <>\n

\n Masukkan email yg antum gunakan untuk mendaftar di bawah. Kami akan mengirimkan\n instruksi untuk reset password ke email tersebut.\n

\n\n {!isEmpty(error) && (\n \n
{error?.message}
\n
\n )}\n \n \n )}\n\n

\n Kembali ke{' '}\n \n Login\n \n

\n \n
\n );\n};\n\nexport default ForgotPassword;\n","import React, { FunctionComponent, useState, useCallback, useEffect } from 'react';\nimport { useSelector, useDispatch } from 'react-redux';\nimport { Link, Redirect, useParams } from 'react-router-dom';\n\nimport {\n Container,\n Row,\n Col,\n Card,\n CardBody,\n Label,\n FormGroup,\n Button,\n Alert,\n InputGroup,\n InputGroupAddon,\n} from 'reactstrap';\nimport { isEmpty } from 'lodash';\nimport { AvForm, AvGroup, AvInput, AvFeedback } from 'availity-reactstrap-validation';\nimport { Key, Lock } from 'react-feather';\n\nimport { updatePassword } from 'redux/actions';\nimport { isUserAuthenticated } from 'helpers/authUtils';\nimport Loader from 'components/Loader';\nimport logo from 'assets/images/tsl-logo-1.png';\nimport { RootState } from 'redux/reducers';\nimport { ApiLearning } from 'helpers/api';\n\ninterface ResetPasswordWrapper {\n children: React.ReactNode;\n}\n\nconst ResetPasswordWrapper: FunctionComponent = ({ children }) => {\n const { resetId } = useParams();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n\n async function getLinkStatus(id) {\n try {\n setLoading(true);\n const { data } = await ApiLearning.get(`/password/reset/${id}`);\n } catch (error) {\n setError(error.message);\n } finally {\n setLoading(false);\n }\n }\n\n useEffect(() => {\n getLinkStatus(resetId);\n }, []);\n\n return (\n
\n \n \n \n \n \n {loading && }\n {!isEmpty(error) ? (\n \n
{error}
\n \n ) : (\n {children}\n )}\n
\n
\n \n
\n\n \n \n

Tarbiyah Sunnah Learning 2020

\n \n
\n
\n
\n );\n};\n\nconst UpdatePasswordForm = () => {\n const { resetId } = useParams();\n const [password, setPassword] = useState('');\n const [retypePassword, setRetypePassword] = useState('');\n const dispatch = useDispatch();\n const _updatePassword = useCallback(\n (password) => {\n dispatch(updatePassword(password, resetId));\n },\n [dispatch]\n );\n\n const handleValidSubmit = (event, values) => {\n if (values.password.length < 6) {\n alert('Minimal panjang password adalah 6 karakter!');\n return;\n }\n if (values.password != values.retypePassword) {\n alert('Password yg diketik ulang tidak sesuai!');\n return;\n }\n _updatePassword(values.password);\n };\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n This field is invalid\n \n \n \n \n \n \n \n \n \n \n This field is invalid\n \n\n \n \n \n \n );\n};\n\nconst ResetPassword: FunctionComponent = () => {\n const { loading, error, passwordUpdateStatus } = useSelector((state: RootState) => state.Auth);\n const isAuthenticated = isUserAuthenticated();\n const isSubmitSuccess = passwordUpdateStatus.code == 200;\n\n if (isAuthenticated) {\n return ;\n }\n\n return (\n \n \n {loading && }\n\n
\n \"\"\n
\n\n
Reset Password
\n {isSubmitSuccess ? (\n <>\n \n Password berhasil diubah. Silahkan login ulang.\n \n \n \n \n \n ) : (\n <>\n

\n Silahkan masukkan password baru antum dibawah (minimal 6 karakter)\n

\n\n {!isEmpty(error) && (\n \n
{error?.message}
\n
\n )}\n \n \n )}\n \n
\n );\n};\n\nexport default ResetPassword;\n","/* eslint-disable react/display-name */\n\nimport React from 'react';\nimport { Redirect, RouteComponentProps, Route } from 'react-router-dom';\nimport * as FeatherIcon from 'react-feather';\nimport CalendarApp from 'pages/calendar';\n\nimport { isUserAuthenticated } from 'helpers/authUtils';\nimport ForgetPassword from 'pages/auth/ForgetPassword';\nimport ResetPassword from 'pages/auth/ResetPassword';\n\nconst Login = React.lazy(() => import('pages/auth/Login'));\nconst Logout = React.lazy(() => import('pages/auth/Logout'));\nconst Dashboard = React.lazy(() => import('pages/dashboard'));\nconst ClassPage = React.lazy(() => import('pages/class/index'));\nconst ClassDetail = React.lazy(() => import('pages/class/ClassDetail'));\nconst MataKuliahDetail = React.lazy(() => import('pages/class/MataKuliahDetail'));\nconst SubMatkulDetail = React.lazy(() => import('pages/class/SubMatkulDetail'));\nconst MateriPelajaranDetail = React.lazy(() => import('pages/class/MateriPelajaranDetail'));\nconst UjianPage = React.lazy(() => import('pages/class/UjianPage'));\nconst FeedbackUjianPage = React.lazy(() => import('pages/class/FeedbackUjianPage'));\nconst Profile = React.lazy(() => import('pages/profile/index'));\nconst SyahadahPage = React.lazy(() => import('pages/syahadah/index'));\nconst StudentCardPage = React.lazy(() => import('pages/studentCard/index'));\nconst TranskripPage = React.lazy(() => import('pages/transkrip'));\nconst TranskripDetailPage = React.lazy(() => import('pages/transkrip/TranskripDetailPage'));\nconst SurveyPage = React.lazy(() => import('pages/survey'));\nconst SurveyDetailPage = React.lazy(() => import('pages/survey/SurveyDetail'));\nconst PrayerTimes = React.lazy(() => import('pages/prayerTimes/index'));\nconst IrsPage = React.lazy(() => import('pages/irs/index'));\nconst IrsFormPage = React.lazy(() => import('pages/irs/IrsFormPage'));\nconst IrsPlanPage = React.lazy(() => import('pages/irs/IrsPlanPage'));\nconst IrsPlanEditPage = React.lazy(() => import('pages/irs/IrsPlanEditPage'));\nconst Video = React.lazy(() => import('pages/video'));\n\ninterface PageRoutes {\n path: string;\n name: string;\n header?: string;\n icon?: React.ComponentType;\n route?: typeof PrivateRoute | typeof Route;\n component?: React.LazyExoticComponent | React.FC;\n children?: PageRoutes[];\n exact: boolean;\n // will hide it + every child from AppMenu component (LeftSidebar) if true\n disableFromMobileMenu?: boolean;\n disableFromMenu?: boolean;\n activeUserOnly?: boolean;\n}\n\n// handle auth and authorization\nconst PrivateRoute = ({ component: Component, path, exact }) => (\n {\n if (isUserAuthenticated()) {\n // authorised so return component\n return ;\n }\n\n // not logged in so redirect to login page with the return url\n return ;\n }}\n />\n);\n\n// root routes\nconst rootRoute: PageRoutes = {\n name: 'Root',\n path: '/',\n exact: true,\n disableFromMenu: true,\n component: () => ,\n disableFromMobileMenu: true,\n route: PrivateRoute,\n};\n\n// dashboards\nconst dashboardRoutes: PageRoutes = {\n path: '/dashboard',\n name: 'Dashboard',\n icon: FeatherIcon.Home,\n header: 'Menu',\n component: Dashboard,\n route: PrivateRoute,\n exact: true,\n activeUserOnly: false,\n};\n\nconst calendarAppRoutes: PageRoutes = {\n path: '/kalender',\n name: 'Kalender akademik',\n icon: FeatherIcon.Calendar,\n component: CalendarApp,\n route: PrivateRoute,\n exact: true,\n disableFromMobileMenu: true,\n activeUserOnly: false,\n};\n\n// menu utama berarti ada Kelas & Angkatan, Kalender Akademik, Transkrip Nilai, E-Syahadah, E-Student Card, Profil\nconst classRoutes: PageRoutes = {\n path: '/kelas',\n name: 'Kelas',\n component: ClassPage,\n icon: () => ,\n route: PrivateRoute,\n exact: true,\n activeUserOnly: true,\n children: [\n {\n path: '/kelas/:id',\n name: 'Kelas Detail',\n component: ClassDetail,\n route: PrivateRoute,\n exact: true,\n disableFromMenu: true,\n children: [\n {\n path: '/kelas/:id/mata-kuliah/:mataKuliahId',\n name: 'Mata Kuliah Detail',\n component: MataKuliahDetail,\n route: PrivateRoute,\n exact: true,\n children: [\n {\n path: '/kelas/:id/mata-kuliah/:mataKuliahId/sub-matkul/:subMatkulId',\n name: 'Sub Mata Kuliah',\n component: SubMatkulDetail,\n route: PrivateRoute,\n exact: true,\n children: [\n {\n path:\n '/kelas/:id/mata-kuliah/:mataKuliahId/sub-matkul/:subMatkulId/materi/:materiId',\n name: 'Materi Pelajaran Detail',\n component: MateriPelajaranDetail,\n route: PrivateRoute,\n exact: true,\n },\n {\n path:\n '/kelas/:id/mata-kuliah/:mataKuliahId/sub-matkul/:subMatkulId/ujian/:ujianId',\n name: 'Ujian',\n component: UjianPage,\n route: PrivateRoute,\n exact: true,\n },\n {\n path:\n '/kelas/:id/mata-kuliah/:mataKuliahId/sub-matkul/:subMatkulId/ujian/:ujianId/hasil',\n name: 'Hasil Ujian',\n component: FeedbackUjianPage,\n route: PrivateRoute,\n exact: true,\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n};\n\nconst transcriptsRoutes: PageRoutes = {\n path: '/transkrip-nilai',\n name: 'Transkrip Nilai',\n component: TranskripPage,\n icon: FeatherIcon.Clipboard,\n route: PrivateRoute,\n exact: true,\n disableFromMobileMenu: true,\n activeUserOnly: true,\n children: [\n {\n path: '/transkrip-nilai/course/:id',\n name: 'Transkrip Detail',\n component: TranskripDetailPage,\n route: PrivateRoute,\n exact: true,\n disableFromMenu: true,\n },\n ],\n};\n\nconst irsRoutes: PageRoutes = {\n path: '/irs',\n name: 'Isian Rencana Studi',\n component: () => ,\n icon: () => ,\n route: PrivateRoute,\n exact: true,\n disableFromMobileMenu: true,\n activeUserOnly: true,\n children: [\n {\n path: '/irs/create',\n name: 'Create IRS',\n component: () => ,\n route: PrivateRoute,\n exact: true,\n disableFromMenu: true,\n },\n {\n path: '/irs/plan/:id',\n name: 'IRS Plan',\n component: IrsPlanPage,\n route: PrivateRoute,\n exact: true,\n disableFromMenu: true,\n },\n {\n path: '/irs/plan/:id/edit',\n name: 'Edit IRS Plan',\n component: () => ,\n route: PrivateRoute,\n exact: true,\n disableFromMenu: true,\n },\n ],\n};\n\n// const eStudentCardRoutes: PageRoutes = {\n// path: '/e-student-card',\n// name: 'E-Student Card',\n// component: StudentCardPage,\n// icon: () => ,\n// route: PrivateRoute,\n// exact: true,\n// activeUserOnly: true,\n// };\n\nconst profileRoutes = {\n path: '/profile',\n header: 'Pengaturan',\n name: 'Profil',\n component: Profile,\n icon: FeatherIcon.User,\n route: PrivateRoute,\n exact: true,\n activeUserOnly: false,\n};\n\nconst prayerTimesRoutes: PageRoutes = {\n path: '/prayer-times',\n name: 'Jadwal Shalat',\n component: PrayerTimes,\n icon: FeatherIcon.Clock,\n route: PrivateRoute,\n exact: true,\n activeUserOnly: false,\n};\n\nconst surveyRoutes: PageRoutes = {\n path: '/survey',\n name: 'Survey',\n component: SurveyPage,\n icon: () => ,\n route: PrivateRoute,\n exact: true,\n disableFromMenu: true,\n activeUserOnly: false,\n disableFromMobileMenu: true,\n children: [\n {\n path: '/survey/:id',\n name: 'Survey Detail',\n component: SurveyDetailPage,\n route: PrivateRoute,\n exact: true,\n disableFromMenu: true,\n },\n ],\n};\n\nconst authRoutes = {\n path: '/account',\n name: 'Auth',\n component: () =>
Authentication
,\n route: Route,\n exact: true,\n children: [\n {\n path: '/account/login',\n name: 'Login',\n component: Login,\n route: Route,\n exact: false,\n },\n {\n path: '/account/logout',\n name: 'Logout',\n component: Logout,\n route: Route,\n exact: false,\n },\n {\n path: '/account/forget-password',\n name: 'ForgetPassword',\n component: ForgetPassword,\n route: Route,\n exact: false,\n },\n {\n path: '/account/reset-password/:resetId',\n name: 'ResetPassword',\n component: ResetPassword,\n route: Route,\n exact: false,\n },\n ],\n};\n\nconst videoRoutes: PageRoutes = {\n path: '/video',\n name: 'Video',\n icon: FeatherIcon.Youtube,\n component: Video,\n route: PrivateRoute,\n exact: true,\n disableFromMenu: true,\n activeUserOnly: false,\n};\n\n// flatten the list of all nested routes\nconst flattenRoutes = (routes) => {\n let flatRoutes: Array = [];\n\n routes = routes || [];\n routes.forEach((item) => {\n flatRoutes.push(item);\n\n if (typeof item.children !== 'undefined') {\n flatRoutes = [...flatRoutes, ...flattenRoutes(item.children)];\n }\n });\n return flatRoutes;\n};\n\nconst allRoutes = [\n rootRoute,\n dashboardRoutes,\n calendarAppRoutes,\n classRoutes,\n transcriptsRoutes,\n irsRoutes,\n prayerTimesRoutes,\n videoRoutes,\n profileRoutes,\n authRoutes,\n surveyRoutes,\n];\n\nconst authProtectedRoutes = [\n rootRoute,\n dashboardRoutes,\n calendarAppRoutes,\n classRoutes,\n transcriptsRoutes,\n irsRoutes,\n prayerTimesRoutes,\n videoRoutes,\n profileRoutes,\n surveyRoutes,\n];\n\nconst flattenedAuthRoutes = flattenRoutes([authRoutes]);\nconst flattenedPrivateRoutes = flattenRoutes(authProtectedRoutes);\n\nexport { allRoutes, authProtectedRoutes, flattenedAuthRoutes, flattenedPrivateRoutes };\n","import Error404 from 'pages/other/Error404';\nimport React, { Suspense } from 'react';\nimport { BrowserRouter, Switch, Route } from 'react-router-dom';\n\nimport { flattenedAuthRoutes, flattenedPrivateRoutes } from './index';\nimport { Spinner } from 'reactstrap';\n\nconst FullPageLayout = React.lazy(() => import('layouts/FullPageLayout'));\nconst DashboardLayout = React.lazy(() => import('layouts/DashboardLayout'));\n\nconst Loading = () => (\n
\n \n

Loading, mohon menunggu ...

\n
\n);\n\nconst Routes = () => {\n return (\n \n \n {flattenedAuthRoutes.map((route, index) => {\n return (\n (\n }>\n \n \n \n \n )}\n />\n );\n })}\n {flattenedPrivateRoutes.map((route, index) => {\n return (\n (\n }>\n \n \n \n \n )}\n />\n );\n })}\n \n \n \n );\n};\n\nexport default Routes;\n","import React from 'react';\nimport Routes from 'routes/Routes';\nimport * as Sentry from '@sentry/react';\nimport dayjs from 'dayjs';\nimport { Alert } from 'reactstrap';\n\nimport 'assets/scss/theme.scss';\n\nconst FallbackComponent = ({ error, eventId }) => (\n
\n {error?.name == 'ChunkLoadError' ? (\n <>\n \n Aplikasi telah diupdate. Silahkan refresh browser anda dan coba lagi.\n
\n Time: {dayjs().format()}\n
\n \n ) : (\n <>\n Ooops, ada sedikit masalah!\n

\n Silahkan refresh browser dan coba lagi. Dan mohon pastikan koneksi\n internet anda sudah stabil.\n

\n

\n Jika kesalahan masih terjadi, silahkan hubungi Tim Support TSL dengan menyertakan info\n dibawah:\n

\n

\n

    \n
  • Time: {dayjs().format()}
  • \n
  • ID: {eventId}
  • \n
  • ErrorName: {error.name}
  • \n
  • ErrorMessage: {error.message}
  • \n
  • Stack: {error.stack}
  • \n
\n

\n \n )}\n
\n);\n\nconst App = () => (\n \n \n \n);\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read http://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(/^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/)\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister();\n });\n }\n}\n","import {\n LOGIN_USER,\n LOGIN_USER_SUCCESS,\n LOGIN_USER_FAILED,\n LOGOUT_USER,\n REGISTER_USER,\n REGISTER_USER_SUCCESS,\n REGISTER_USER_FAILED,\n FORGET_PASSWORD,\n FORGET_PASSWORD_SUCCESS,\n FORGET_PASSWORD_FAILED,\n UPDATE_PASSWORD,\n UPDATE_PASSWORD_SUCCESS,\n UPDATE_PASSWORD_FAILED,\n} from './constants';\n\nimport { getLoggedInUser } from 'helpers/authUtils';\n\ntype InitialState = {\n user: any;\n loading: boolean;\n error: any;\n passwordResetStatus: any;\n passwordUpdateStatus: any;\n};\n\nconst initialState: InitialState = {\n user: getLoggedInUser(),\n loading: false,\n error: {},\n passwordResetStatus: {},\n passwordUpdateStatus: {},\n};\n\nconst Auth = (state = initialState, action: any) => {\n switch (action.type) {\n case LOGIN_USER:\n return { ...state, loading: true, error: null };\n case LOGIN_USER_SUCCESS:\n return { ...state, user: action.payload, loading: false, error: null };\n case LOGIN_USER_FAILED:\n return { ...state, error: action.payload, loading: false };\n case REGISTER_USER:\n return { ...state, loading: true };\n case REGISTER_USER_SUCCESS:\n return { ...state, user: action.payload, loading: false, error: null };\n case REGISTER_USER_FAILED:\n return { ...state, error: action.payload, loading: false };\n case LOGOUT_USER:\n return { ...state, user: null };\n case FORGET_PASSWORD:\n return { ...state, passwordResetStatus: {}, loading: true, error: null };\n case FORGET_PASSWORD_SUCCESS:\n return { ...state, passwordResetStatus: action.payload, loading: false, error: null };\n case FORGET_PASSWORD_FAILED:\n return { ...state, error: action.payload, loading: false };\n case UPDATE_PASSWORD:\n return { ...state, passwordUpdateStatus: {}, loading: true, error: null };\n case UPDATE_PASSWORD_SUCCESS:\n return { ...state, passwordUpdateStatus: action.payload, loading: false, error: null };\n case UPDATE_PASSWORD_FAILED:\n return { ...state, error: action.payload, loading: false };\n default:\n return { ...state };\n }\n};\n\nexport default Auth;\n","import {\n INIT_MENU,\n INIT_MENU_SUCCESS,\n CHANGE_ACTIVE_MENU_FROM_LOCATION,\n CHANGE_ACTIVE_MENU_FROM_LOCATION_SUCCESS,\n} from './constants';\n\nconst AppMenu = (state = {}, action) => {\n switch (action.type) {\n case INIT_MENU:\n return action.payload;\n case INIT_MENU_SUCCESS:\n return { ...state, ...action.payload };\n case CHANGE_ACTIVE_MENU_FROM_LOCATION:\n return { ...state };\n case CHANGE_ACTIVE_MENU_FROM_LOCATION_SUCCESS:\n return { ...state, ...action.payload };\n default:\n return state;\n }\n};\n\nexport default AppMenu;\n","import { SHOW_NOTIFICATION, HIDE_NOTIFICATION } from './constants';\n\nconst INIT_STATE = {\n show: false,\n timeout: 4000,\n color: 'primary',\n message: '',\n};\n\nconst notification = (state = INIT_STATE, action) => {\n switch (action.type) {\n case SHOW_NOTIFICATION:\n return {\n ...state,\n show: true,\n timeout: action.payload.timeout || 4000,\n color: action.payload.color || 'primary',\n message: action.payload.message,\n };\n case HIDE_NOTIFICATION:\n return INIT_STATE;\n default:\n return state;\n }\n};\n\nexport default notification;\n","import {\n RESET_CURRENT_QUIZ,\n SET_CURRENT_QUIZ,\n CHOOSE_ANSWER,\n SUBMIT_ANSWER,\n SUBMIT_ANSWER_SUCCESSFULL,\n} from './constants';\nimport { CurrentQuiz } from '../../helpers/interfaces/kelas';\n\nconst INIT_STATE: CurrentQuiz = {\n isLoading: false,\n isSubmitting: false,\n isSubmitted: false,\n canParticipate: false,\n class_id: null,\n id: null,\n course_id: null,\n course_part_id: null,\n title_id: null,\n time: null,\n time_open: null,\n time_close: null,\n category: null,\n finished_at: null,\n taken_at: null,\n questions: [],\n errMessage: null,\n};\n\nconst currentQuiz = (state: CurrentQuiz = INIT_STATE, action): CurrentQuiz => {\n switch (action.type) {\n case SET_CURRENT_QUIZ:\n return {\n ...state,\n ...action.payload,\n };\n case CHOOSE_ANSWER:\n const newQuestions = state.questions!.map((v) => {\n if (v.id === action.payload.question_id) {\n v.answer_id = action.payload.answer_id;\n }\n return { ...v };\n });\n return {\n ...state,\n questions: newQuestions,\n };\n case SUBMIT_ANSWER:\n return {\n ...state,\n };\n case SUBMIT_ANSWER_SUCCESSFULL:\n return {\n ...INIT_STATE,\n isSubmitted: true,\n isSubmitting: false,\n isLoading: false,\n };\n case RESET_CURRENT_QUIZ:\n return INIT_STATE;\n default:\n return state;\n }\n};\n\nexport default currentQuiz;\n","import {\n SET_CURRENT_CLASS,\n ClassState,\n ClassActionTypes,\n SET_CURRENT_COURSE,\n SET_CURRENT_COURSE_PART,\n GET_MY_GROUPS,\n GET_MY_GROUPS_SUCCESS,\n GET_MY_GROUPS_FAILED,\n} from './types';\n\nconst initialState: ClassState = {\n currentClass: {\n id: '',\n name: '',\n courses: [],\n },\n currentCourse: {\n id: '',\n },\n currentCoursePart: {\n id: '',\n },\n groups: [],\n loading: false,\n error: null,\n};\n\nexport default function classReducer(state = initialState, action: ClassActionTypes): ClassState {\n switch (action.type) {\n case SET_CURRENT_CLASS:\n return { ...state, currentClass: action.payload };\n case SET_CURRENT_COURSE:\n return { ...state, currentCourse: action.payload };\n case SET_CURRENT_COURSE_PART:\n return { ...state, currentCoursePart: action.payload };\n case GET_MY_GROUPS:\n return { ...state, loading: true, error: null };\n case GET_MY_GROUPS_SUCCESS:\n return { ...state, loading: false, groups: action.payload };\n case GET_MY_GROUPS_FAILED:\n return { ...state, loading: false, error: action.payload };\n default:\n return state;\n }\n}\n","import { Profile } from 'helpers/interfaces/user';\nimport { ProfileActionTypes, profileTypes } from './types';\nimport { RequestStatus } from 'helpers/enums';\n\ninterface State {\n profile: Profile;\n status: RequestStatus;\n error?: Error;\n}\n\nconst initialState = {\n profile: {\n address: '',\n age: 0,\n birth_date: new Date(),\n birth_place: '',\n city: {\n id: 0,\n name: '',\n },\n city_id: 0,\n country: {\n id: 0,\n name: '',\n phone_code: '',\n },\n country_id: 0,\n created_at: '',\n deleted_at: null,\n education_id: 0,\n education_name: '',\n school_name: '',\n study_program: '',\n email: '',\n entry_level_id: null,\n gender: '',\n id: '',\n isCompleteDataProfile: false,\n job_id: 0,\n job_name: '',\n marital_status: '',\n name: '',\n nip: '',\n phone: '',\n phone_country_code: '',\n state: {\n id: 0,\n name: '',\n },\n status: 'inactive',\n is_verification_wa: false,\n },\n status: RequestStatus.Initial,\n error: undefined,\n};\n\nconst profile = (state: State = initialState, action: ProfileActionTypes): State => {\n switch (action.type) {\n case profileTypes.GET_PROFILE:\n return { ...state, status: RequestStatus.Pending };\n case profileTypes.GET_PROFILE_SUCESS:\n return { ...state, profile: action.payload, status: RequestStatus.Successful };\n case profileTypes.GET_PROFILE_ERROR:\n return { ...state, error: action.payload, status: RequestStatus.Failed };\n case profileTypes.RESET_GET_PROFILE:\n return { ...state, error: undefined, status: RequestStatus.Initial };\n default:\n return state;\n }\n};\n\nexport default profile;\n","import {\n topbarNotifTypes,\n TopbarNotifActionTypes,\n TopbarNotifState,\n TopbarNotifStateCapsule,\n} from './types';\n\n// import TopbarNotif from '../../helpers/interfaces/TopbarNotif';\n\n// const initialState: TopbarNotifState[] = [];\n\nconst initialState: TopbarNotifStateCapsule = {\n isLoaded: false,\n topbarNotif: [],\n};\n\nexport default function topbarNotifReducer(\n state = initialState,\n action: TopbarNotifActionTypes\n): TopbarNotifStateCapsule {\n switch (action.type) {\n case topbarNotifTypes.ADD_TOPBAR_NOTIF:\n return { ...state, topbarNotif: [...state.topbarNotif, action.payload] };\n case topbarNotifTypes.ADD_MULTI_TOPBAR_NOTIF:\n const newData: TopbarNotifState[] = [];\n action.payload.forEach((v) => {\n if (\n !(\n state.topbarNotif.filter((element) => {\n return element.id === v.id;\n }).length > 0\n )\n ) {\n newData.push({\n id: v.id,\n icon: 'uil uil-comment-message',\n bgColor: 'danger',\n text: v.text,\n subText: v.subText,\n });\n }\n });\n return { ...state, topbarNotif: [...state.topbarNotif, ...newData] };\n case topbarNotifTypes.SET_TOPBAR_NOTIF_LOADED:\n return { ...state, isLoaded: action.payload };\n case topbarNotifTypes.GET_TOPBAR_NOTIF:\n return state;\n default:\n return state;\n }\n}\n\n// export default function topbarNotifReducer(\n// state = initialState,\n// action: TopbarNotifActionTypes\n// ): TopbarNotifState[] {\n// switch (action.type) {\n// case topbarNotifTypes.ADD_TOPBAR_NOTIF:\n// return [...state, action.payload];\n// case topbarNotifTypes.ADD_MULTI_TOPBAR_NOTIF:\n// const newData: TopbarNotifState[] = [];\n// action.payload.forEach((v) => {\n// if (\n// !(\n// state.filter((element) => {\n// return element.id === v.id;\n// }).length > 0\n// )\n// ) {\n// newData.push({\n// id: v.id,\n// icon: 'uil uil-comment-message',\n// bgColor: 'danger',\n// text: v.text,\n// subText: v.subText,\n// });\n// }\n// });\n// return [...state, ...newData];\n// case topbarNotifTypes.GET_TOPBAR_NOTIF:\n// return state;\n// default:\n// return state;\n// }\n// }\n","import {\n GET_STUDY_PLAN,\n GET_STUDY_PLANS,\n GET_STUDY_PLANS_SUCCESS,\n GET_STUDY_PLANS_FAILED,\n GET_STUDY_PLAN_COURSES,\n GET_STUDY_PLAN_COURSES_SUCCESS,\n GET_STUDY_PLAN_COURSES_FAILED,\n CREATE_STUDY_PLAN,\n CREATE_STUDY_PLAN_SUCCESS,\n CREATE_STUDY_PLAN_FAILED,\n GET_COURSE_BATCHES,\n GET_COURSE_BATCHES_SUCCESS,\n GET_COURSE_BATCHES_FAILED,\n SET_CURRENT_STUDY_PLAN,\n SUBMIT_STUDY_PLAN_COURSES,\n SUBMIT_STUDY_PLAN_COURSES_SUCCESS,\n SUBMIT_STUDY_PLAN_COURSES_FAILED,\n} from './constants';\nimport { CourseBatch, StudyPlanCourse, StudyPlan, StudyPlans } from 'helpers/interfaces/studyPlan';\n\ntype InitialState = {\n loading: boolean;\n loadingCourse: boolean;\n loadingBatch: boolean;\n submitting: boolean;\n error: any;\n currentStudyPlan?: StudyPlan;\n studyPlans: StudyPlans;\n planCourses: StudyPlanCourse[];\n courseBatches: CourseBatch[];\n};\n\nconst INIT_STATE: InitialState = {\n loading: false,\n loadingCourse: false,\n loadingBatch: false,\n submitting: false,\n error: null,\n currentStudyPlan: undefined,\n studyPlans: [],\n planCourses: [],\n courseBatches: [],\n};\n\nconst irs = (state: InitialState = INIT_STATE, action) => {\n switch (action.type) {\n case GET_STUDY_PLAN:\n return { ...state, currentStudyPlan: undefined };\n case SET_CURRENT_STUDY_PLAN:\n return { ...state, currentStudyPlan: action.payload };\n case GET_STUDY_PLANS:\n return { ...state, loading: true, error: null };\n case GET_STUDY_PLANS_SUCCESS:\n return { ...state, loading: false, studyPlans: action.payload };\n case GET_STUDY_PLANS_FAILED:\n return { ...state, loading: false, error: action.payload };\n case GET_STUDY_PLAN_COURSES:\n return { ...state, loadingCourse: true, error: null, planCourses: [] };\n case GET_STUDY_PLAN_COURSES_SUCCESS:\n return { ...state, loadingCourse: false, planCourses: action.payload };\n case GET_STUDY_PLAN_COURSES_FAILED:\n return { ...state, loadingCourse: false, error: action.payload };\n case CREATE_STUDY_PLAN:\n return { ...state, submitting: true, error: null };\n case CREATE_STUDY_PLAN_SUCCESS:\n return { ...state, submitting: false };\n case CREATE_STUDY_PLAN_FAILED:\n return { ...state, submitting: false, error: action.payload };\n case GET_COURSE_BATCHES:\n return { ...state, loadingBatch: true, error: null, courseBatches: [] };\n case GET_COURSE_BATCHES_SUCCESS:\n return { ...state, loadingBatch: false, courseBatches: action.payload };\n case GET_COURSE_BATCHES_FAILED:\n return { ...state, loadingBatch: false, error: action.payload };\n case SUBMIT_STUDY_PLAN_COURSES:\n return { ...state, submitting: true, error: null };\n case SUBMIT_STUDY_PLAN_COURSES_SUCCESS:\n return { ...state, submitting: false };\n case SUBMIT_STUDY_PLAN_COURSES_FAILED:\n return { ...state, submitting: false, error: action.payload };\n default:\n return state;\n }\n};\n\nexport default irs;\n","import { GET_TRANSCRIPTS, GET_TRANSCRIPTS_SUCCESS, GET_TRANSCRIPTS_FAILED } from './constants';\nimport { UserIPK, Transcripts } from 'helpers/interfaces/transcript';\n\ntype InitialState = {\n loading: boolean;\n error: any;\n ipk?: UserIPK;\n transcripts: Transcripts;\n};\n\nconst INIT_STATE: InitialState = {\n loading: false,\n error: null,\n ipk: undefined,\n transcripts: [],\n};\n\nconst transcript = (state: InitialState = INIT_STATE, action) => {\n switch (action.type) {\n case GET_TRANSCRIPTS:\n return {\n ...state,\n loading: true,\n error: null,\n };\n case GET_TRANSCRIPTS_SUCCESS:\n return {\n ...state,\n loading: false,\n ipk: action.payload.summary_score,\n transcripts: action.payload.course,\n };\n case GET_TRANSCRIPTS_FAILED:\n return {\n ...state,\n loading: false,\n error: action.payload,\n };\n default:\n return state;\n }\n};\n\nexport default transcript;\n","import { combineReducers } from 'redux';\nimport Auth from './auth/reducers';\nimport AppMenu from './appMenu/reducers';\nimport Notification from './notification/reducers';\nimport CurrentQuiz from './currentQuiz/reducers';\nimport ClassReducer from './class/reducers';\nimport ProfileReducer from './profile/reducers';\nimport TopbarNotifReducer from './topbarNotif/reducers';\nimport IrsReducer from './irs/reducers';\nimport TranscriptReducer from './transcript/reducers';\n\nconst rootReducer = combineReducers({\n Auth,\n AppMenu,\n Notification,\n CurrentQuiz,\n Class: ClassReducer,\n Profile: ProfileReducer,\n TopbarNotif: TopbarNotifReducer,\n Irs: IrsReducer,\n Transcript: TranscriptReducer,\n});\n\nexport default rootReducer;\n\nexport type RootState = ReturnType;\n","import axios from 'axios';\nimport config from 'helpers/config';\n\nconst sanctumUrl = (apiUrl) => {\n const regExp = /(^|^[^:]+:\\/\\/|[^\\.]+\\.)(kampustsl|tslbelajarislam)\\.id/;\n const baseURL = apiUrl.match(regExp);\n\n if (baseURL === null) {\n return 'http://localhost';\n } else {\n return baseURL[0];\n }\n};\nconst axClient = axios.create({\n baseURL: sanctumUrl(config.apiUrl),\n xsrfHeaderName: 'X-XSRF-TOKEN',\n withCredentials: true,\n headers: {\n 'Content-type': 'application/json',\n Accept: 'application/json',\n },\n});\n\nexport default axClient;\n","import axClient from './constanst';\n\nclass CsrfAuthService {\n getSanctum(URL) {\n return axClient.get(`/${URL}`, { withCredentials: true }).then((res) => res);\n }\n}\n\nexport default new CsrfAuthService();\n","import cookies from 'js-cookie';\nimport { isEmpty } from 'lodash';\nimport { all, call, fork, put, takeEvery } from 'redux-saga/effects';\n\nimport { fetchJSON } from 'helpers/api';\nimport config from 'helpers/config';\nimport csrfService from 'helpers/axios/CsrfAuthService';\n\nimport {\n LOGIN_USER,\n LOGOUT_USER,\n REGISTER_USER,\n FORGET_PASSWORD,\n UPDATE_PASSWORD,\n} from 'redux/auth/constants';\nimport {\n loginUserSuccess,\n loginUserFailed,\n registerUserSuccess,\n registerUserFailed,\n forgetPasswordSuccess,\n forgetPasswordFailed,\n updatePasswordSuccess,\n updatePasswordFailed,\n} from 'redux/auth/actions';\nimport { getProfileSuccess } from 'redux/profile/actions';\n\nconst setSession = (user) => {\n if (isEmpty(user)) {\n cookies.remove('user', { path: '/' });\n } else {\n cookies.set('user', JSON.stringify(user), { path: '/' });\n }\n};\n\ntype LoginAction = {\n payload: {\n username: string;\n password: string;\n grant_type: string;\n };\n type: typeof LOGIN_USER;\n};\n\nfunction* login(action: LoginAction) {\n const { username, password, grant_type } = action.payload;\n const options = {\n body: JSON.stringify({ username, password, grant_type }),\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n };\n try {\n yield call(() => csrfService.getSanctum('sanctum/csrf-cookie'));\n const response = yield call(fetchJSON, `${config.apiUrl}/login-peserta`, options);\n const data = response.data;\n yield put(getProfileSuccess(data));\n const user = {\n id: data.id,\n nip: data.nip,\n name: data.name,\n role: data.role.name,\n token: data.token,\n token_expire: data.expire_token,\n };\n setSession(user);\n yield put(loginUserSuccess(response));\n } catch (error) {\n yield put(loginUserFailed(error));\n setSession({});\n }\n}\n\ntype LogoutAction = {\n type: typeof LOGOUT_USER;\n payload: {\n history: any;\n };\n};\n\nfunction* logout(action: LogoutAction) {\n const { history } = action.payload;\n try {\n setSession({});\n yield call(() => {\n history.push('/account/login');\n });\n } catch (error) {}\n}\n\ntype RegisterAction = {\n type: typeof REGISTER_USER;\n payload: {\n fullname: string;\n email: string;\n password: string;\n };\n};\n\nfunction* register(action: RegisterAction) {\n const { fullname, email, password } = action.payload;\n const options = {\n body: JSON.stringify({ fullname, email, password }),\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n };\n\n try {\n const response = yield call(fetchJSON, '/users/register', options);\n yield put(registerUserSuccess(response));\n } catch (error) {\n let message;\n switch (error.status) {\n case 500:\n message = 'Internal Server Error';\n break;\n case 401:\n message = 'Invalid credentials';\n break;\n default:\n message = error;\n }\n yield put(registerUserFailed(message));\n }\n}\n\ntype ForgetPasswordAction = {\n type: typeof FORGET_PASSWORD;\n payload: {\n email: string;\n };\n};\n\nfunction* forgetPassword(action: ForgetPasswordAction) {\n const { email } = action.payload;\n const options = {\n body: JSON.stringify({ email }),\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n };\n\n try {\n const response = yield call(fetchJSON, `${config.apiUrl}/password/reset`, options);\n yield put(forgetPasswordSuccess(response));\n } catch (error) {\n let message;\n switch (error.status) {\n case 500:\n message = 'Internal Server Error';\n break;\n case 401:\n message = 'Invalid credentials';\n break;\n default:\n message = error;\n }\n yield put(forgetPasswordFailed(message));\n }\n}\n\ntype UpdatePasswordAction = {\n type: typeof UPDATE_PASSWORD;\n payload: {\n new_password: string;\n reset_id: string;\n };\n};\n\nfunction* updatePassword(action: UpdatePasswordAction) {\n const { new_password, reset_id } = action.payload;\n const options = {\n body: JSON.stringify({ new_password }),\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n };\n\n try {\n const response = yield call(fetchJSON, `${config.apiUrl}/password/reset/${reset_id}`, options);\n yield put(updatePasswordSuccess(response));\n } catch (error) {\n let message;\n switch (error.status) {\n case 500:\n message = 'Internal Server Error';\n break;\n case 401:\n message = 'Invalid credentials';\n break;\n default:\n message = error;\n }\n yield put(updatePasswordFailed(message));\n }\n}\n\nexport function* watchLoginUser() {\n yield takeEvery(LOGIN_USER, login);\n}\n\nexport function* watchLogoutUser() {\n yield takeEvery(LOGOUT_USER, logout);\n}\n\nexport function* watchRegisterUser() {\n yield takeEvery(REGISTER_USER, register);\n}\n\nexport function* watchForgetPassword() {\n yield takeEvery(FORGET_PASSWORD, forgetPassword);\n}\n\nexport function* watchUpdatePassword() {\n yield takeEvery(UPDATE_PASSWORD, updatePassword);\n}\n\nfunction* authSaga() {\n yield all([\n fork(watchLoginUser),\n fork(watchLogoutUser),\n fork(watchRegisterUser),\n fork(watchForgetPassword),\n fork(watchUpdatePassword),\n ]);\n}\n\nexport default authSaga;\n","/**\n * Flatten the nested list of menu items\n */\nlet uuid = 1;\n\nconst assignIdAndParent = (menuItems, parentId?) => {\n menuItems = menuItems || [];\n menuItems.forEach((item) => {\n const id = item.id || uuid;\n uuid += 1;\n item.id = id;\n item.parentId = item.parentId || parentId;\n item.active = false;\n\n if (typeof item.children !== 'undefined') {\n assignIdAndParent(item.children, id);\n }\n });\n};\n\nexport default (menuItems) => {\n assignIdAndParent(menuItems);\n return menuItems;\n};\n","import { all, call, put, fork, takeEvery } from 'redux-saga/effects';\n\nimport { INIT_MENU, CHANGE_ACTIVE_MENU_FROM_LOCATION } from './constants';\nimport { authProtectedRoutes as routes } from 'routes';\nimport assignIds from './utils';\nimport { initMenuSuccess, changeActiveMenuFromLocationSuccess } from './actions';\n\n/**\n * Activate menu items from location\n * @param {*} menuItems\n */\nconst getActivatedMenuItemIds = (menuItems) => {\n let matchingItems: Array = [];\n for (const menuItem of menuItems) {\n if (window.location.pathname.indexOf(menuItem.path) === 0) {\n matchingItems.push(menuItem.id);\n }\n\n if (typeof menuItem.children !== 'undefined') {\n matchingItems = [...matchingItems, ...getActivatedMenuItemIds(menuItem.children)];\n }\n }\n return matchingItems;\n};\n\n/**\n * Initilizes the menu\n */\nfunction* initMenuAndItems() {\n try {\n const menuItems = assignIds(routes);\n yield put(initMenuSuccess(menuItems));\n } catch (error) {}\n}\n\n/**\n * change the active menu item based on location\n */\nfunction* changeActiveMenuFromLocation() {\n try {\n const menuItems = assignIds(routes);\n const activatedMenuItemIds = yield call(getActivatedMenuItemIds, menuItems);\n yield put(changeActiveMenuFromLocationSuccess(activatedMenuItemIds));\n } catch (error) {}\n}\n\n/**\n * Watchers\n */\nexport function* watchMenuInit() {\n yield takeEvery(INIT_MENU, initMenuAndItems);\n}\n\nexport function* watchMenuChange() {\n yield takeEvery(CHANGE_ACTIVE_MENU_FROM_LOCATION, changeActiveMenuFromLocation);\n}\n\nfunction* appMenuSaga() {\n yield all([fork(watchMenuInit), fork(watchMenuChange)]);\n}\n\nexport default appMenuSaga;\n","import { takeEvery, all, fork, call, put, select } from 'redux-saga/effects';\nimport { REQUEST_QUIZ, SUBMIT_ANSWER } from './constants';\nimport { RequestQuiz, setCurrentQuiz, submitAnswerSuccessfull, resetCurrentQuiz } from './actions';\nimport { ReduxAction } from 'redux/actions';\nimport { ApiLearning } from 'helpers/api';\nimport { CurrentQuiz } from '../../helpers/interfaces/kelas';\nimport dayjs from 'dayjs';\nimport { RootState } from '../reducers';\nimport { showNotification } from '../notification/actions';\n\nfunction* requestQuiz(action: ReduxAction) {\n try {\n yield put(resetCurrentQuiz());\n yield put(setCurrentQuiz({ isLoading: true }));\n\n const { class_id, course_part_id, quiz_id } = action.payload;\n const response = yield call(ApiLearning.post, '/quiz-requests/request', {\n body: JSON.stringify({ quiz_id, course_part_id }),\n });\n\n /** Ini sementara hingga response code nya bukan 200 lagi. Kondisi ini harus diganti suatu saat nanti. tidak bisa seperti ini terus. */\n if (\n response.data === 'User Sudah Pernah Melakukan Permintaan Quiz Atau Batas Waktu Sudah Habis'\n ) {\n throw new Error(response.data);\n }\n\n // transform data\n const data: CurrentQuiz = {\n ...response.data,\n finished_at: dayjs().add(response.data.time, 'second').format('YYYY-MM-DD HH:mm:ss'),\n taken_at: dayjs(),\n questions: response.data.questions.map((v) => {\n return {\n ...v,\n answer_id: null,\n };\n }),\n };\n\n yield put(\n setCurrentQuiz({\n isLoading: false,\n canParticipate: true,\n class_id,\n ...data,\n })\n );\n } catch (error) {\n console.log(error);\n yield put(\n setCurrentQuiz({ isLoading: false, canParticipate: false, errMessage: error.message })\n );\n }\n}\n\nfunction* submitAnswerFunc(action: ReduxAction) {\n try {\n const currentQuiz = yield select((state: RootState) => state.CurrentQuiz);\n\n if (currentQuiz.isSubmitting || currentQuiz.isSubmitted) return; // Prevent multiple dispatch\n\n yield put(setCurrentQuiz({ isLoading: true, isSubmitting: true }));\n\n // jika lebih dari maximum waktu quiz\n let waktuPengerjaan = dayjs().diff(dayjs(currentQuiz.taken_at), 'second');\n if (waktuPengerjaan > currentQuiz.time) waktuPengerjaan = currentQuiz.time;\n\n /** Send API to submit quiz here */\n const payload = {\n quiz_id: currentQuiz.id,\n timer: waktuPengerjaan,\n answers: currentQuiz.questions.map((v) => ({\n question_id: v.id,\n answer_id: v.answer_id,\n is_essay: v.is_essay,\n })),\n };\n\n yield call(ApiLearning.post, `/quiz-submissions/save`, {\n body: JSON.stringify(payload),\n });\n\n /** Reset Quiz */\n yield put(submitAnswerSuccessfull());\n yield put(\n showNotification({\n message: 'Jawaban berhasil disimpan',\n timeout: 5000,\n color: 'success',\n })\n );\n } catch (error) {\n console.log(error);\n yield put(setCurrentQuiz({ isLoading: false, isSubmitting: false, finished_at: null }));\n yield put(\n showNotification({\n message: 'Terdapat kesalahan disaat menyimpan jawaban',\n timeout: 5000,\n color: 'danger',\n })\n );\n }\n}\n\nexport function* watchRequestQuiz() {\n yield takeEvery(REQUEST_QUIZ, requestQuiz);\n}\n\nexport function* watchSubmitAnswer() {\n yield takeEvery(SUBMIT_ANSWER, submitAnswerFunc);\n}\n\nfunction* currentQuizSaga() {\n yield all([fork(watchRequestQuiz)]);\n yield all([fork(watchSubmitAnswer)]);\n}\n\nexport default currentQuizSaga;\n","import { takeEvery, all, fork, call, put } from 'redux-saga/effects';\nimport { ApiLearning } from 'helpers/api';\nimport { getProfileSuccess, getProfileError, resetGetProfile } from './actions';\nimport { profileTypes } from './types';\n\nfunction* fetchMyProfile() {\n yield put(resetGetProfile());\n try {\n const response = yield call(ApiLearning.get, '/me');\n\n yield put(getProfileSuccess(response.data));\n } catch (err) {\n yield put(getProfileError(err));\n }\n}\n\nfunction* watchFetchMyProfile() {\n yield takeEvery(profileTypes.GET_PROFILE, fetchMyProfile);\n}\n\nfunction* profileSaga() {\n yield all([fork(watchFetchMyProfile)]);\n}\n\nexport default profileSaga;\n","import { takeEvery, all, fork, call, put, select } from 'redux-saga/effects';\nimport { ApiLearning } from 'helpers/api';\nimport {\n CreateStudyPlan,\n RequestSubmitCourse,\n createStudyPlanFailed,\n createStudyPlanSuccess,\n getStudyPlanCoursesFailed,\n getStudyPlanCoursesSuccess,\n getStudyPlansFailed,\n getStudyPlansSuccess,\n getCourseBatchesFailed,\n getCourseBatchesSuccess,\n RequestGetCourseBatches,\n setCurrentStudyPlan,\n submitStudyPlanCoursesSuccess,\n submitStudyPlanCoursesFailed,\n} from './actions';\nimport {\n CREATE_STUDY_PLAN,\n GET_COURSE_BATCHES,\n GET_STUDY_PLAN,\n GET_STUDY_PLANS,\n GET_STUDY_PLAN_COURSES,\n SUBMIT_STUDY_PLAN_COURSES,\n} from './constants';\nimport { ReduxAction } from 'redux/actions';\nimport { RootState } from 'redux/reducers';\nimport { StudyPlans } from 'helpers/interfaces/studyPlan';\n\nfunction* fetchStudyPlan(action) {\n try {\n const id = action.payload;\n let plans: StudyPlans = yield select((state: RootState) => state.Irs.studyPlans);\n\n if (plans.length == 0) {\n // fetch from network if we have no previous data\n const response = yield call(ApiLearning.post, '/participants/plan-studies');\n yield put(getStudyPlansSuccess(response.data.data));\n plans = response.data.data;\n }\n\n const plan = plans.find((it) => it.id == id);\n if (plan) {\n yield put(setCurrentStudyPlan(plan));\n }\n } catch (err) {\n yield put(getStudyPlansFailed(err));\n }\n}\n\nfunction* fetchStudyPlans() {\n try {\n const body = {\n sortBy: 'semester',\n desc: 'desc',\n };\n const response = yield call(ApiLearning.post, '/participants/plan-studies', {\n body: JSON.stringify(body),\n });\n yield put(getStudyPlansSuccess(response.data.data));\n } catch (err) {\n yield put(getStudyPlansFailed(err));\n }\n}\n\nfunction* createStudyPlan(action: ReduxAction) {\n try {\n const response = yield call(ApiLearning.post, '/participants/plan-studies/save', {\n body: JSON.stringify(action.payload),\n });\n yield put(createStudyPlanSuccess(response.data));\n if (action.onSuccess) action.onSuccess();\n } catch (err) {\n yield put(createStudyPlanFailed(err));\n }\n}\n\nfunction* fetchStudyPlanCourses(action) {\n try {\n const body = {\n filter: {\n user_plan_study_id: action.payload,\n },\n };\n const response = yield call(ApiLearning.post, '/participants/plan-courses', {\n body: JSON.stringify(body),\n });\n yield put(getStudyPlanCoursesSuccess(response.data.data));\n } catch (err) {\n yield put(getStudyPlanCoursesFailed(err));\n }\n}\n\nfunction* fetchCourseBatches(action: ReduxAction) {\n try {\n const body = {\n filter: {\n period: action.payload.period,\n semester: action.payload.semester,\n },\n sortBy: 'course_package_id',\n };\n const response = yield call(ApiLearning.post, '/participants/course-batches', {\n body: JSON.stringify(body),\n });\n yield put(getCourseBatchesSuccess(response.data.data));\n } catch (err) {\n yield put(getCourseBatchesFailed(err));\n }\n}\n\nfunction* submitStudyPlanCourses(action: ReduxAction) {\n try {\n const { added, removed } = action.payload;\n yield all(\n added.map((course) =>\n call(ApiLearning.post, '/participants/plan-courses/save', {\n body: JSON.stringify(course),\n })\n )\n );\n yield all(\n removed.map((course) => call(ApiLearning.delete, `/participants/plan-courses/${course.id}`))\n );\n yield put(submitStudyPlanCoursesSuccess());\n if (action.onSuccess) action.onSuccess();\n } catch (err) {\n yield put(submitStudyPlanCoursesFailed(err));\n }\n}\n\nfunction* watchFetchStudyPlan() {\n yield takeEvery(GET_STUDY_PLAN, fetchStudyPlan);\n}\nfunction* watchFetchStudyPlans() {\n yield takeEvery(GET_STUDY_PLANS, fetchStudyPlans);\n}\nfunction* watchCreateStudyPlan() {\n yield takeEvery(CREATE_STUDY_PLAN, createStudyPlan);\n}\nfunction* watchFetchStudyPlanCourses() {\n yield takeEvery(GET_STUDY_PLAN_COURSES, fetchStudyPlanCourses);\n}\nfunction* watchFetchCourseBatches() {\n yield takeEvery(GET_COURSE_BATCHES, fetchCourseBatches);\n}\nfunction* watchSubmitStudyPlanCourses() {\n yield takeEvery(SUBMIT_STUDY_PLAN_COURSES, submitStudyPlanCourses);\n}\n\nfunction* irsSaga() {\n yield all([\n fork(watchFetchStudyPlan),\n fork(watchFetchStudyPlans),\n fork(watchCreateStudyPlan),\n fork(watchFetchStudyPlanCourses),\n fork(watchFetchCourseBatches),\n fork(watchSubmitStudyPlanCourses),\n ]);\n}\n\nexport default irsSaga;\n","import { takeEvery, all, fork, call, put } from 'redux-saga/effects';\nimport { ApiLearning } from 'helpers/api';\nimport { ReduxAction } from 'redux/actions';\nimport { getTranscriptsFailed, getTranscriptsSuccess, RequestTranscript } from './actions';\nimport { GET_TRANSCRIPTS } from './constants';\n\nfunction* fetchTranscripts(action: ReduxAction) {\n try {\n const { transcript_type } = action.payload;\n const response = yield call(ApiLearning.post, '/transcripts', {\n body: JSON.stringify({ transcript_type }),\n });\n yield put(getTranscriptsSuccess(response.data));\n } catch (err) {\n yield put(getTranscriptsFailed(err));\n }\n}\n\nfunction* watchFetchTranscripts() {\n yield takeEvery(GET_TRANSCRIPTS, fetchTranscripts);\n}\n\nfunction* transcriptSaga() {\n yield all([fork(watchFetchTranscripts)]);\n}\n\nexport default transcriptSaga;\n","import { takeEvery, all, fork, call, put } from 'redux-saga/effects';\nimport { ApiLearning } from 'helpers/api';\nimport { ReduxAction } from 'redux/actions';\nimport { GET_MY_GROUPS } from './types';\nimport { getMyGroupsFailed, getMyGroupsSuccess } from './actions';\n\nfunction* fetchMyGroups() {\n try {\n const response = yield call(ApiLearning.get, '/participants/my-group');\n yield put(getMyGroupsSuccess(response.data));\n } catch (err) {\n yield put(getMyGroupsFailed(err));\n }\n}\n\nfunction* watchFetchMyGroups() {\n yield takeEvery(GET_MY_GROUPS, fetchMyGroups);\n}\n\nfunction* classSaga() {\n yield all([fork(watchFetchMyGroups)]);\n}\n\nexport default classSaga;\n","import { all } from 'redux-saga/effects';\nimport authSaga from './auth/saga';\nimport appMenuSaga from './appMenu/saga';\nimport currentQuizSaga from './currentQuiz/saga';\nimport profileSaga from './profile/saga';\nimport irsSaga from './irs/saga';\nimport transcriptSaga from './transcript/saga';\nimport classSaga from './class/saga';\n\nexport default function* rootSaga(getState: any): any {\n yield all([\n authSaga(),\n appMenuSaga(),\n currentQuizSaga(),\n profileSaga(),\n irsSaga(),\n transcriptSaga(),\n classSaga(),\n ]);\n}\n","import MyStorage from './MyStorage';\n\nconst ls = new MyStorage();\n\nexport default ls;\n","import { WebStorage } from 'redux-persist';\nimport SecureLS from 'secure-ls';\nimport config from 'helpers/config';\n\nclass MyStorage implements WebStorage {\n private ls = new SecureLS({ encodingType: 'aes', encryptionSecret: config.secureLSSecret });\n\n getItem = async (key: string): Promise => {\n return this.ls.get(key);\n };\n\n setItem = async (key: string, item: string): Promise => {\n this.ls.set(key, item);\n };\n\n removeItem = async (key: string): Promise => {\n this.ls.remove(key);\n };\n}\n\nexport default MyStorage;\n","import { createStore, applyMiddleware, compose } from 'redux';\nimport createSagaMiddleware from 'redux-saga';\nimport reducers from './reducers';\nimport sagas from './sagas';\nimport { persistStore, persistReducer } from 'redux-persist';\nimport secureLS from '../helpers/secureLS';\n\nconst sagaMiddleware = createSagaMiddleware();\nconst middlewares = [sagaMiddleware];\n\nconst persistConfig = {\n key: 'tsl-pembelajaran',\n storage: secureLS,\n whitelist: ['CurrentQuiz', 'Class'],\n};\n\nconst persistedReducer = persistReducer(persistConfig, reducers);\n\nexport function configureStore(initialState: {} = {}) {\n const composeEnhancers =\n (window['__REDUX_DEVTOOLS_EXTENSION_COMPOSE__'] as typeof compose) || compose;\n\n const store = createStore(\n persistedReducer,\n initialState,\n composeEnhancers(applyMiddleware(...middlewares))\n );\n sagaMiddleware.run(sagas, store);\n\n const persistor = persistStore(store);\n\n return { store, persistor };\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from 'App';\nimport * as serviceWorker from './serviceWorker';\nimport * as Sentry from '@sentry/browser';\nimport { Integrations as TracingIntegrations } from '@sentry/tracing';\n\nimport { Provider } from 'react-redux';\nimport { configureStore } from 'redux/store';\nimport { PersistGate } from 'redux-persist/integration/react';\n\nconst { store, persistor } = configureStore();\n\nSentry.init({\n dsn: 'https://e8d781ce4c9646a1a825322075ddc9d9@sentry.kampustsl.id/3',\n // This enables automatic instrumentation (highly recommeneded), but is not\n // necessary for purely manual usage\n integrations: [new TracingIntegrations.BrowserTracing()],\n // To set a uniform sample rate\n tracesSampleRate: 1.0,\n});\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: http://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","export default {\n apiUrl: process.env.REACT_APP_API_BASE_URL || 'https://api.activetsl.id/api',\n apiWpUrl: process.env.WP_API_BASE_URL || 'https://tarbiyahsunnahlearning.or.id',\n secureLSSecret: process.env.REACT_APP_SECURE_LS_SECRET || '@ManhajSalaf26120',\n};\n","export const GET_TRANSCRIPTS = 'GET_TRANSCRIPTS';\nexport const GET_TRANSCRIPTS_SUCCESS = 'GET_TRANSCRIPTS_SUCCESS';\nexport const GET_TRANSCRIPTS_FAILED = 'GET_TRANSCRIPTS_FAILED';\n","import TopbarNotif from 'helpers/interfaces/TopbarNotif';\n\ninterface TopbarNotifTypes {\n ADD_TOPBAR_NOTIF: 'ADD_TOPBAR_NOTIF';\n ADD_MULTI_TOPBAR_NOTIF: 'ADD_MULTI_TOPBAR_NOTIF';\n GET_TOPBAR_NOTIF: 'GET_TOPBAR_NOTIF';\n SET_TOPBAR_NOTIF_LOADED: 'SET_TOPBAR_NOTIF_LOADED';\n}\n\nexport const topbarNotifTypes: TopbarNotifTypes = {\n ADD_TOPBAR_NOTIF: 'ADD_TOPBAR_NOTIF',\n ADD_MULTI_TOPBAR_NOTIF: 'ADD_MULTI_TOPBAR_NOTIF',\n GET_TOPBAR_NOTIF: 'GET_TOPBAR_NOTIF',\n SET_TOPBAR_NOTIF_LOADED: 'SET_TOPBAR_NOTIF_LOADED',\n};\n\nexport interface TopbarNotifState {\n id: number;\n icon: string;\n text: string;\n subText: string;\n bgColor: string;\n}\n\nexport interface TopbarNotifStateCapsule {\n isLoaded: boolean;\n topbarNotif: TopbarNotifState[];\n}\n\ninterface AddTopbarNotifAction {\n type: typeof topbarNotifTypes.ADD_TOPBAR_NOTIF;\n payload: TopbarNotif;\n}\n\ninterface AddMultipleTopbarNotifAction {\n type: typeof topbarNotifTypes.ADD_MULTI_TOPBAR_NOTIF;\n payload: TopbarNotif[];\n}\n\ninterface SetTopbarNotifLoadedAction {\n type: typeof topbarNotifTypes.SET_TOPBAR_NOTIF_LOADED;\n payload: boolean;\n}\n\ninterface GetTopbarNotifAction {\n type: typeof topbarNotifTypes.GET_TOPBAR_NOTIF;\n}\n\nexport type TopbarNotifActionTypes =\n | AddTopbarNotifAction\n | AddMultipleTopbarNotifAction\n | SetTopbarNotifLoadedAction\n | GetTopbarNotifAction;\n","export const fetchJSON = (url: string, options: RequestInit = {}) => {\n return fetch(url, options)\n .then((response) => {\n if (response.status !== 200) {\n throw response.json();\n }\n return response.json();\n })\n .then((json) => {\n return json;\n })\n .catch(async (error) => {\n const json = await error;\n throw json;\n });\n};\n","import { ProfileActionTypes, profileTypes } from './types';\nimport { Profile } from 'helpers/interfaces/user';\n\nexport const getProfile = (): ProfileActionTypes => ({\n type: profileTypes.GET_PROFILE,\n});\n\nexport const getProfileSuccess = (payload: Profile): ProfileActionTypes => ({\n type: profileTypes.GET_PROFILE_SUCESS,\n payload,\n});\n\nexport const getProfileError = (error: Error): ProfileActionTypes => ({\n type: profileTypes.GET_PROFILE_ERROR,\n payload: error,\n});\n\nexport const resetGetProfile = (): ProfileActionTypes => ({\n type: profileTypes.RESET_GET_PROFILE,\n});\n","import {\n SET_CURRENT_QUIZ,\n REQUEST_QUIZ,\n CHOOSE_ANSWER,\n SUBMIT_ANSWER,\n RESET_CURRENT_QUIZ,\n SUBMIT_ANSWER_SUCCESSFULL,\n} from './constants';\nimport { ReduxAction } from 'redux/actions';\nimport { CurrentQuiz } from 'helpers/interfaces';\n\nexport interface RequestQuiz {\n class_id: string;\n course_part_id: string;\n quiz_id: string;\n}\nexport const requestQuiz = (payload: RequestQuiz): ReduxAction => ({\n type: REQUEST_QUIZ,\n payload,\n});\n\nexport const setCurrentQuiz = (payload: CurrentQuiz): ReduxAction => ({\n type: SET_CURRENT_QUIZ,\n payload,\n});\n\nexport interface ChooseAnswer {\n question_id: string;\n answer_id: string;\n}\n\nexport const chooseAnswer = (payload: ChooseAnswer): ReduxAction => ({\n type: CHOOSE_ANSWER,\n payload,\n});\n\nexport const submitAnswer = (): ReduxAction => ({\n type: SUBMIT_ANSWER,\n payload: null,\n});\n\nexport const submitAnswerSuccessfull = (): ReduxAction => ({\n type: SUBMIT_ANSWER_SUCCESSFULL,\n payload: null,\n});\n\nexport const resetCurrentQuiz = (): ReduxAction => ({\n type: RESET_CURRENT_QUIZ,\n payload: null,\n});\n"],"sourceRoot":""}