{"version":3,"sources":["features/Bible/Chapters/actions/bibleChaptersFromApiActions.js","features/Bible/Chapters/actions/getBookChaptersFromStorageActions.js","features/Bible/Chapters/actions/getBookChaptersFromApiActions.js","features/Bible/Chapters/actions/viewFiltersBookChapterFromStorageActions.js","features/Bible/Chapters/actions/index.js","constants/services.js","common/entities/actions/entityListStorageActions.js","common/entities/actions/lastUpdatedEntityListSettingStorageActions.js","common/entities/actions/lastUploadedEntityListSettingStorageActions.js","common/entities/actions/entityListApiActions.js","common/entities/actions/getEntityActions.js","common/entities/actions/index.js","utils/routesHelper.js","common/entities/actions/addEntityActions.js","features/Bible/Versions/selectors/getBibleVersionsSelector.js","features/Bible/Versions/selectors/getBibleVersionBySelectedVersionIdSelector.js","services/api.js","common/entities/constants.js","reducers/viewFilters.js","features/Bible/Verses/actions/chapterVersesActions.js","features/Bible/Verses/actions/getChapterVersesFromStorageActions.js","features/Bible/Verses/actions/getChapterVersesFromApiActions.js","features/Bible/Verses/actions/bookVersesFromApiActions.js","features/Bible/Verses/actions/bibleVersesFromApiActions.js","features/Bible/Verses/actions/index.js","features/Bible/Books/actions/getBooksFromStorageActions.js","features/Bible/Books/actions/getBooksFromApiActions.js","features/Bible/Books/actions/viewFiltersBibleBookFromStorageActions.js","features/Bible/Books/actions/index.js","common/Root.js","features/Bible/Versions/actions/getBibleVersionsFromStorageActions.js","features/Bible/Versions/actions/getBibleVersionsFromApiActions.js","features/Bible/Versions/actions/getViewFiltersBibleVersionFromStorageActions.js","features/Bible/Versions/actions/index.js","assets/img/river.jpg","store/configureStore.js","features/auth/Login/actions/loginActions.js","features/auth/Login/actions/autoSignInActions.js","features/auth/Login/actions/signedInUsersStorageActions.js","features/auth/Login/actions/index.js","features/VerseOfTheDay/actions/verseOfTheDayActions.js","features/VerseOfTheDay/actions/verseOfTheDayListActions.js","features/VerseOfTheDay/actions/verseOfTheDayListStorageActions.js","features/VerseOfTheDay/actions/verseOfTheDayListFromApiActions.js","features/VerseOfTheDay/actions/verseOfTheDayFullVersesFromApiActions.js","features/VerseOfTheDay/actions/index.js","utils/dateHelper.js","features/Version/reducer.js","features/Home/reducer.js","features/auth/reducer.js","features/Bible/Versions/constants.js","features/Bible/Versions/reducer.js","features/Bible/Books/reducer.js","features/Bible/Chapters/reducer.js","features/Bible/Verses/reducer.js","features/VerseOfTheDay/reducer.js","features/BibleHistory/reducer.js","reducers/index.js","features/Settings/System/reducer.js","features/Settings/System/api.js","sagas/sagaHelper.js","services/apiHelper.js","services/apiResources.js","features/Version/sagas/getAppVersionFromApiSaga.js","features/Version/api.js","services/indexedDb.js","features/constants.js","features/Version/indexedDbStorage/saveAppVersionToLocalStoreDb.js","features/Version/indexedDbStorage/fetchAppVersionFromStorageService.js","features/Version/indexedDbStorage/deleteAppVersionFromStorageService.js","features/Version/indexedDbStorage/index.js","features/Version/sagas/getAppVersionFromStorageSaga.js","features/Version/sagas/updateAppVersionLocalStorageSaga.js","features/Version/sagas/index.js","features/Bible/Versions/sagas/getBibleVersionsSaga.js","features/Bible/Versions/schema.js","features/Bible/Versions/indexedDbStorage/saveViewFiltersBibleVersionToLocalStoreDb.js","features/Bible/constants.js","features/Bible/Versions/indexedDbStorage/fetchViewFiltersBibleVersionFromStorageService.js","features/Bible/Versions/indexedDbStorage/index.js","features/Bible/Versions/sagas/getBibleVersionsFromStorageSaga.js","features/Bible/Versions/indexedDbStorage/service.js","features/Bible/Versions/sagas/getBibleVersionsFromApiSaga.js","features/Bible/Versions/api.js","features/Bible/Versions/sagas/setBibleVersionSaga.js","features/Bible/Versions/sagas/updateBibleVersionsLocalStorageSaga.js","features/Bible/Versions/sagas/updateViewFiltersBibleVersionLocalStoreSaga.js","features/Bible/Versions/sagas/getViewFiltersBibleVersionFromStorageSaga.js","features/Bible/Versions/sagas/index.js","features/Bible/Books/sagas/getBooksSaga.js","features/Bible/Books/schema.js","features/Bible/Books/indexedDbStorage/saveViewFiltersBibleBookToLocalStoreDb.js","features/Bible/Books/indexedDbStorage/fetchViewFiltersBibleBookFromStorageService.js","features/Bible/Books/indexedDbStorage/index.js","features/Bible/Books/sagas/getBooksFromStorageSaga.js","features/Bible/Books/indexedDbStorage/service.js","features/Bible/Books/api.js","features/Bible/Books/sagas/getBooksFromApiSaga.js","features/Bible/Books/sagas/updateBooksLocalStorageSaga.js","features/Bible/Books/sagas/setBibleBookSaga.js","features/Bible/Books/sagas/updateViewFiltersBibleBookLocalStoreSaga.js","features/Bible/Books/sagas/getViewFiltersBibleBookFromStorageSaga.js","features/Bible/Chapters/schema.js","features/Bible/Chapters/bookChaptersApi.js","features/Bible/Chapters/bibleChaptersApi.js","features/Bible/Chapters/sagas/getBibleChaptersFromApiSaga.js","features/Bible/Chapters/sagas/getChaptersSaga.js","features/Bible/Chapters/indexedDbStorage/addChaptersToLocalStoreDb.js","features/Bible/Chapters/indexedDbStorage/loadChaptersByBookIdAndLangIdFromLocalStoreDb.js","features/Bible/Chapters/indexedDbStorage/fetchChaptersByBookIdAndLangIdFromStorageService.js","features/Bible/Chapters/indexedDbStorage/saveViewFiltersBookChapterToLocalStoreDb.js","features/Bible/Chapters/indexedDbStorage/fetchViewFiltersBookChapterFromStorageService.js","features/Bible/Chapters/indexedDbStorage/index.js","features/Bible/Chapters/sagas/getChaptersFromStorageSaga.js","features/Bible/Chapters/sagas/getChaptersFromApiSaga.js","features/Bible/Chapters/sagas/updateChaptersLocalStorageSaga.js","features/Bible/Chapters/sagas/setChapterSaga.js","features/Bible/Chapters/sagas/requestNextChapterSaga.js","features/Bible/Chapters/sagas/requestPrevChapterSaga.js","features/Bible/Chapters/sagas/updateViewFiltersBookChapterLocalStoreSaga.js","features/Bible/Chapters/sagas/getViewFiltersBookChapterFromStorageSaga.js","features/Bible/Chapters/sagas/index.js","features/VerseOfTheDay/schema.js","features/VerseOfTheDay/entity/getVerseOfTheDayListFromApi.js","features/VerseOfTheDay/api/verseOfTheDayListApi.js","features/VerseOfTheDay/metadata.js","features/HighlightedVerses/metadata.js","features/BibleHistory/metadata.js","common/entities/metadata.js","common/entities/indexedDbStorage/fetchAddEntityToStorageService.js","common/entities/indexedDbStorage/fetchEntityListFromStorageService.js","common/entities/indexedDbStorage/fetchLastUpdatedEntityListSettingFromStorageService.js","common/entities/indexedDbStorage/fetchLastAddedEntityFromStorageService.js","common/entities/indexedDbStorage/entityHelper.js","common/entities/indexedDbStorage/fetchEntitySettingFromStorageService.js","common/entities/indexedDbStorage/saveEntityListToStorageService.js","common/entities/indexedDbStorage/index.js","features/Bible/Verses/sagas/getVersesSaga.js","features/Bible/Verses/indexedDbStorage/addVersesToLocalStoreDb.js","features/Bible/Verses/indexedDbStorage/loadVersesByChapterIdAndVersionIdFromLocalStoreDb.js","features/Bible/Verses/schema.js","features/Bible/Verses/indexedDbStorage/fetchVersesByChapterIdAndVersionIdFromStorageService.js","features/Bible/Verses/indexedDbStorage/index.js","features/Bible/Verses/sagas/getVersesFromStorageSaga.js","features/Bible/Verses/chapterVersesApi.js","features/Bible/Verses/sagas/getVersesFromApiSaga.js","features/Bible/Verses/sagas/updateVersesLocalStorageSaga.js","features/Bible/Verses/bookVersesApi.js","features/Bible/Verses/sagas/getBookVersesFromApiSaga.js","features/Bible/Verses/bibleVersesApi.js","features/Bible/Verses/sagas/getBibleVersesFromApiSaga.js","features/Bible/Verses/sagas/index.js","features/Bible/Books/sagas/index.js","features/VerseOfTheDay/indexedDbStorage/saveVerseOfTheDayListToStorageService.js","features/VerseOfTheDay/indexedDbStorage/fetchVerseOfTheDayListFromStorageService.js","features/VerseOfTheDay/indexedDbStorage/fetchPersonalVerseOfTheDayByDateFromStorageService.js","features/VerseOfTheDay/indexedDbStorage/savePersonalVerseOfTheDayToStorageService.js","features/VerseOfTheDay/indexedDbStorage/fetchLastUpdatedVerseOfTheDayListSettingFromStorageService.js","features/VerseOfTheDay/indexedDbStorage/index.js","features/VerseOfTheDay/sagas/getPersonalVerseOfTheDayFromStorageSaga.js","features/VerseOfTheDay/sagas/getVerseOfTheDaySaga.js","features/VerseOfTheDay/sagas/saveVerseOfTheDayListToStorageSaga.js","features/VerseOfTheDay/sagas/generateVerseOfTheDaySaga.js","features/VerseOfTheDay/sagas/savePersonalVerseOfTheDayToStorageSaga.js","features/VerseOfTheDay/sagas/setVerseOfTheDayVersionSaga.js","features/VerseOfTheDay/sagas/index.js","features/auth/Login/sagas/loginSaga.js","features/auth/Login/api/loginApi.js","features/auth/SignOut/indexedDbStorage/deleteUserFromStorageService.js","features/auth/SignOut/indexedDbStorage/index.js","features/auth/Login/sagas/autoSignInSaga.js","features/auth/Login/api/autoSignInApi.js","features/auth/Login/indexedDbStorage/saveUserToStorageService.js","features/auth/Login/indexedDbStorage/fetchSignedInUsersFromStorageService.js","features/auth/Login/indexedDbStorage/index.js","features/auth/Login/sagas/getSignedInUsersFromStorageSaga.js","features/auth/Login/sagas/saveUserToStorageSaga.js","features/auth/Register/sagas/registerSaga.js","features/auth/Register/api/registerApi.js","features/auth/UpdateUserInfo/sagas/updateUserInfoSaga.js","features/auth/UpdateUserInfo/api/updateUserInfoApi.js","features/auth/SignOut/sagas/signOutSaga.js","features/auth/ChangePassword/sagas/changePasswordSaga.js","features/auth/ChangePassword/api/changePasswordApi.js","features/auth/ForgotPassword/sagas/forgotPasswordSaga.js","features/auth/ForgotPassword/api/forgotPasswordApi.js","features/auth/sagas/index.js","common/entities/api/entitiesApi.js","common/entities/sagas/addEntitySaga.js","common/entities/sagas/getEntityListSaga.js","common/entities/sagas/getEntityListFromStorageSaga.js","common/entities/sagas/getLastUpdatedEntityListSettingFromStorageSaga.js","common/entities/sagas/getEntityListFromApiSaga.js","common/entities/sagas/saveEntityListToStorageSaga.js","common/entities/sagas/syncEntityListToTheCloudSaga.js","services/storage/saveSettingsItemToStorageService.js","common/entities/sagas/syncEntityListFromTheCloudSaga.js","common/entities/sagas/index.js","features/BibleHistory/sagas/getBibleHistoryListTriggerSaga.js","features/BibleHistory/sagas/index.js","features/Settings/System/saga.js","sagas/index.js","store/configureStore.prod.js","assets/jss/CTBWebApp.js","assets/jss/components/drawerStyle.js","features/Home/DrawerListItem.js","features/Home/DrawerList.js","features/Home/Drawer.js","features/auth/Login/Header.js","features/auth/Register/Header.js","features/auth/UpdateUserInfo/Header.js","features/auth/ChangePassword/Header.js","features/auth/ForgotPassword/Header.js","features/Bible/Versions/ListButton.js","features/Bible/Versions/index.js","features/VerseOfTheDay/Header/Panel.js","features/VerseOfTheDay/Header/index.js","features/Bible/Books/ListButton.js","features/Bible/Books/selectors/getBookByBibleVersionAndBookIdSelector.js","features/Bible/Books/index.js","features/Bible/Chapters/ListButton.js","features/Bible/Chapters/selectors/getChaptersByBookIdAndBibleVersionSelector.js","features/Bible/Chapters/selectors/getChaptersByBibleVersionSelector.js","features/Bible/Chapters/selectors/getChapterByBibleVersionAndChapterIdSelector.js","features/Bible/Chapters/index.js","features/Bible/Header/Panel.js","features/Bible/Header/index.js","features/Bible/components/FavoriteVersesHeader.js","features/Home/components/TopicsHeader.js","features/Home/components/SettingsHeader.js","features/Home/components/CopyrightsHeader.js","features/Home/components/ReleaseNotesHeader.js","features/auth/SignInAccountMenu.js","features/auth/SignOutAccountMenu/Menu.js","features/auth/SignOutAccountMenu/index.js","features/BibleHistory/Header/Panel.js","features/BibleHistory/Header/index.js","features/Home/AppBar.js","common/components/SnackbarContentWrapper.js","common/components/MessageBox.js","common/components/MessageBanner.js","features/Home/Main/Panel.js","features/Home/Main/index.js","features/auth/Login/Panel.js","features/auth/Login/index.js","features/auth/Register/Panel.js","features/auth/Register/index.js","features/auth/UpdateUserInfo/Panel.js","utils/dataHelper.js","features/auth/UpdateUserInfo/index.js","features/auth/ChangePassword/Panel.js","features/auth/ChangePassword/index.js","features/auth/ForgotPassword/Panel.js","features/auth/ForgotPassword/index.js","features/VerseOfTheDay/Panel.js","features/VerseOfTheDay/selectors/getVerseOfTheDayListSelector.js","features/VerseOfTheDay/selectors/getVerseOfTheDaySelector.js","features/VerseOfTheDay/index.js","features/Bible/Verses/FavoriteWords.js","features/Bible/Verses/SearchWords.js","features/Bible/Verses/VerseOfTheDayWords.js","features/Bible/Verses/HighlightedWords.js","features/Bible/Verses/StyledVerse.js","features/Bible/Verses/VerseBox.js","features/Bible/Verses/VerseMenu.js","features/Bible/Verses/Verse.js","features/Bible/Verses/Panel.js","features/Bible/Verses/selector.js","features/Bible/Verses/index.js","features/BibleHistory/Item/Panel.js","features/BibleHistory/Item/index.js","features/BibleHistory/Panel.js","features/BibleHistory/index.js","features/Bible/components/FavoriteVerses.js","features/Home/components/Topics.js","features/Home/components/Settings.js","features/Home/components/Copyrights.js","features/Home/components/ReleaseNotes.js","features/Home/Analytics.js","features/Home/BaseMain.js","assets/jss/views/mainPageStyle.js","features/Home/HomePage.js","features/Home/index.js","common/containers/App.js","common/components/NotFound.js","common/Root.prod.js","serviceWorker.js","index.js","actions/index.js","features/Version/actions/appVersionFromApiActions.js","features/Version/actions/index.js","common/entities/actions/entityListActions.js","features/auth/Register/actions/registerActions.js","features/auth/Register/actions/index.js","features/auth/UpdateUserInfo/actions/updateUserInfoActions.js","features/auth/UpdateUserInfo/actions/index.js","features/Settings/System/actions.js","features/Bible/Chapters/selectors/getChaptersByBookIdSelector.js","utils/analytics.js","constants.js","features/auth/ChangePassword/actions/changePasswordActions.js","features/auth/ChangePassword/actions/index.js","features/auth/ForgotPassword/actions/forgotPasswordActions.js","features/auth/ForgotPassword/actions/index.js","features/Bible/Books/selectors/getBooksByBibleVersionSelector.js","features/Bible/Books/selectors/getBibleBooksSelector.js","actions/actionRequestTypes.js","features/Version/actions/appVersionFromStorageActions.js","features/auth/SignOut/actions/signOutActions.js","features/auth/SignOut/actions/index.js","features/Home/components/ChristTheSheperd.jpg","features/Settings/System/helper.js"],"names":["createRequestTypes","action","actions","LOAD_BIBLE_CHAPTERS_FROM_API","loadBibleChaptersFromApi","bibleVersionId","GET_BIBLE_CHAPTERS_FROM_API","getBibleChaptersFromApi","request","REQUEST","success","id","response","SUCCESS","failure","error","FAILURE","LOAD_BOOK_CHAPTERS_FROM_STORAGE","loadBookChaptersFromStorage","bookId","GET_BOOK_CHAPTERS_FROM_STORAGE","getBookChaptersFromStorage","LOAD_BOOK_CHAPTERS_FROM_API","loadBookChaptersFromApi","GET_BOOK_CHAPTERS_FROM_API","getBookChaptersFromApi","LOAD_VIEWFILTERS_BOOKCHAPTER_FROM_STORAGE","loadViewFiltersBookChapterFromStorage","GET_VIEWFILTERS_BOOKCHAPTER_FROM_STORAGE","getViewFiltersBookChapterFromStorage","UPDATE_VIEWFILTERS_BOOKCHAPTER_STORAGE","updateViewFiltersBookChapterStorage","chapterId","bibleChaptersFromApiActions","_bibleChaptersFromApiActions","getBookChaptersFromStorageActions","_getBookChaptersFromStorageActions","getBookChaptersFromApiActions","_getBookChaptersFromApiActions","viewFiltersBookChapterFromStorageActions","_viewFiltersBookChapterFromStorageActions","LOAD_BOOK_CHAPTERS","loadBookChapters","SET_BOOK_CHAPTER","setBookChapter","REQUEST_NEXT_CHAPTER","requestNextChapter","REQUEST_PREV_CHAPTER","requestPrevChapter","UPDATE_CHAPTERS_STORAGE","updateChaptersStorage","chapters","LOAD_ENTITY_LIST_FROM_STORAGE","entityName","loadEntityListFromStorage","filter","GET_ENTITY_LIST_FROM_STORAGE","GET_ENTITY_LIST_ACTION_TYPE","getEntityListFromStorage","SAVE_ENTITY_LIST_TO_STORAGE","saveEntityListToStorage","entityList","currentUtcTime","LOAD_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE","loadEntityListLastUpdatedSettingFromStorage","GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE","getLastUpdatedEntityListSettingFromStorage","LOAD_ENTITY_LIST_LASTUPLOADED_SETTING_FROM_STORAGE","loadEntityListLastUploadedSettingFromStorage","GET_ENTITY_LIST_LASTUPLOADED_SETTING_FROM_STORAGE","getLastUploadedEntityListSettingFromStorage","LOAD_ENTITY_LIST_FROM_API","loadEntityListFromApi","GET_ENTITY_LIST_FROM_API","getEntityListFromApi","GET_LASTADDED_ENTITY_ACTION_TYPE","getLastAddedEntity","GET_LASTADDED_ENTITY_FROM_STORAGE","getLastAddedEntityFromStorage","addEntityActions","_addEntityActions","entityListActions","_entityListActions","entityListStorageActions","_entityListStorageActions","lastUpdatedEntityListSettingStorageActions","_lastUpdatedEntityListSettingStorageActions","lastUploadedEntityListSettingStorageActions","_lastUploadedEntityListSettingStorageActions","entityListApiActions","_entityListApiActions","getEntityActions","_getEntityActions","SYNC_ENTITY_LIST_TO_THECLOUD","syncEntityListToTheCloud","SYNC_ENTITY_LIST_FROM_THECLOUD","syncEntityListFromTheCloud","activeRoute","routeName","window","location","href","indexOf","ADD_ENTITY_ACTION_TYPE","addEntity","payload","arguments","length","undefined","obj","ADD_ENTITY_STORAGE","addEntityStorage","ADD_ENTITY_API","addEntityApi","getBibleVersions","createSelector","state","_","values","entities","bibleVersions","getBibleVersionBySelectedVersionId","bibleVersion","selectedBibleVersion","versionId","getNextPageUrl","link","headers","get","nextLink","split","find","s","slice","API_POST","API_PUT","currentAuthToken","setToken","token","fetchHeaderOption","fetchHeader","Object","assign","fetchHeaderAutorizationOption","fetchHeaderAuthorization","fetchOptions","fetchMethod","fetchBody","options","method","bodyOption","body","callApiNormalizedResponse","endpoint","schema","fetch","then","json","_ref","ok","Promise","reject","camelizedJson","camelizeKeys","nextPageUrl","normalize","message","callApi","_ref2","Error","statusText","catch","console","log","VERSEOFTHEDAY","FAVORITEVERSES","HIGHLIGHTEDVERSES","BIBLEHISTORY","LOGIN","LoginActionTypes","AUTOSIGNIN","viewFilters","userLoggingIn","type","GET_CHAPTER_VERSES","getChapterVerses","LOAD_CHAPTER_VERSES_FROM_STORAGE","loadChapterVersesFromStorage","GET_CHAPTER_VERSES_FROM_STORAGE","getChapterVersesFromStorage","LOAD_CHAPTER_VERSES_FROM_API","loadChapterVersesFromApi","GET_CHAPTER_VERSES_FROM_API","getChapterVersesFromApi","LOAD_BOOK_VERSES_FROM_API","loadBookVersesFromApi","GET_BOOK_VERSES_FROM_API","getBookVersesFromApi","LOAD_BIBLE_VERSES_FROM_API","loadBibleVersesFromApi","GET_BIBLE_VERSES_FROM_API","getBibleVersesFromApi","chapterVersesActions","_chapterVersesActions","getChapterVersesFromStorageActions","_getChapterVersesFromStorageActions","getChapterVersesFromApiActions","_getChapterVersesFromApiActions","bookVersesFromApiActions","_bookVersesFromApiActions","bibleVersesFromApiActions","_bibleVersesFromApiActions","LOAD_CHAPTER_VERSES","loadChapterVerses","UPDATE_VERSES_STORAGE","updateVersesStorage","verses","DISPLAY_DOWNLOAD_BIBLE_OPTIONS","displayDownloadBibleOptions","LOAD_BIBLE_BOOKS_FROM_STORAGE","loadBibleBooksFromStorage","GET_BIBLE_BOOKS_FROM_STORAGE","getBibleBooksFromStorage","LOAD_BIBLE_BOOKS_FROM_API","loadBibleBooksFromApi","GET_BIBLE_BOOKS_FROM_API","getBibleBooksFromApi","LOAD_VIEWFILTERS_BIBLEBOOK_FROM_STORAGE","loadViewFiltersBibleBookFromStorage","GET_VIEWFILTERS_BIBLEBOOK_FROM_STORAGE","getViewFiltersBibleBookFromStorage","UPDATE_VIEWFILTERS_BIBLEBOOK_STORAGE","updateViewFiltersBibleBookStorage","getBooksFromStorageActions","_getBooksFromStorageActions","getBooksFromApiActions","_getBooksFromApiActions","viewFiltersBibleBookFromStorageActions","_viewFiltersBibleBookFromStorageActions","LOAD_BIBLE_BOOKS","loadBibleBooks","SET_BIBLE_BOOK","setBibleBook","skipSettingFirstChapter","UPDATE_BOOKS_STORAGE","updateBooksStorage","books","module","exports","require","LOAD_BIBLE_VERSIONS_FROM_STORAGE","loadBibleVersionsFromStorage","GET_BIBLE_VERSIONS_FROM_STORAGE","getBibleVersionsFromStorage","LOAD_BIBLE_VERSIONS_FROM_API","loadBibleVersionsFromApi","GET_BIBLE_VERSIONS_FROM_API","getBibleVersionsFromApi","LOAD_VIEWFILTERS_BIBLEVERSION_FROM_STORAGE","loadViewFiltersBibleVersionFromStorage","GET_VIEWFILTERS_BIBLEVERSION_FROM_STORAGE","getViewFiltersBibleVersionFromStorage","getBibleVersionsFromStorageActions","_getBibleVersionsFromStorageActions","getBibleVersionsFromApiActions","_getBibleVersionsFromApiActions","getViewFiltersBibleVersionFromStorageActions","_getViewFiltersBibleVersionFromStorageActions","LOAD_BIBLE_VERSIONS","loadBibleVersions","SET_BIBLE_VERSION","setBibleVersion","langId","UPDATE_BIBLE_VERSIONS_STORAGE","updateBibleVersionsStorage","UPDATE_VIEWFILTERS_BIBLEVERSION_STORAGE","updateViewFiltersBibleVersionStorage","SUBMIT_LOGIN_REQUEST","submitLoginRequest","encodedCredentials","shouldRememberUser","login","SUBMIT_AUTOSIGNIN_REQUEST","submitAutoSignInRequest","autoSignIn","LOAD_SIGNEDIN_USERS_FROM_STORAGE","loadSignedInUsersFromStorage","GET_SIGNEDIN_USERS_FROM_STORAGE","getSignedInUsersFromStorage","SAVE_USER_TO_STORAGE","saveUserToStorage","loggedInUser","loginActions","_loginActions","autoSignInActions","_autoSignInActions","signedInUsersStorageActions","_signedInUsersStorageActions","LOAD_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE","loadPersonalVerseOfTheDayFromStorage","date","GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE","getPersonalVerseOfTheDayFromStorage","SAVE_PERSONAL_VERSEOFTHEDAY_TO_STORAGE","savePersonalVerseOfTheDayToStorage","verseId","GET_VERSEOFTHEDAY","getVerseOfTheDay","GENERATE_VERSEOFTHEDAY","generateVerseOfTheDay","LOAD_VERSEOFTHEDAY_LIST_FROM_STORAGE","loadVerseOfTheDayListFromStorage","GET_VERSEOFTHEDAY_LIST_FROM_STORAGE","getVerseOfTheDayListFromStorage","SAVE_VERSEOFTHEDAY_LIST_TO_STORAGE","saveVerseOfTheDayListToStorage","GET_LASTUPDATED_VERSEOFTHEDAY_LIST_SETTING_FROM_STORAGE","getLastUpdatedVerseOfTheDayListSettingFromStorage","LOAD_VERSEOFTHEDAY_LIST_FROM_API","loadVerseOfTheDayListFromApi","LOAD_UPDATED_VERSEOFTHEDAY_LIST_FROM_API","loadUpdatedVerseOfTheDayListFromApi","modifiedSinceDateTimeUtc","GET_VERSEOFTHEDAY_LIST_FROM_API","getVerseOfTheDayListFromApi","verseOfTheDayActions","_verseOfTheDayActions","verseOfTheDayListStorageActions","_verseOfTheDayListStorageActions","verseOfTheDayListFromApiActions","_verseOfTheDayListFromApiActions","getCurrentDateTimeLtISO","currentDateTime","Date","dd","String","getDate","padStart","mm","getMonth","getFullYear","getHours","getMinutes","getSeconds","Math","round","getMilliseconds","getCurrentDateTimeLt","yyyy","hh","minutes","ss","ms","getCurrentDate","currentDate","getFormattedDate","prototype","addDays","days","this","valueOf","setDate","getDateCaptionFromDateTime","dateTime","formattedCurrentDate","yesterday","formattedYesterday","formattedDate","toLocaleDateString","weekday","day","month","year","getTimeCaptionFromDateTime","toLocaleTimeString","hour","minute","GET_APP_VERSION_FROM_API","ActionTypes","GET_APP_VERSION_FROM_STORAGE","FORCE_APP_RELOAD","CHANGE_PASSWORD","changePasswordActions","FORGOT_PASSWORD","forgotPasswordActions","REGISTER","registerActions","UPDATE_USER_INFO","updateUserInfoActions","initialState","isProcessing","RegisterActionTypes","UpdateUserInfoActionTypes","SIGNOUT_USER","SignOutActionTypes","isLoading","isLoadingSuccessful","canDisplayDownloadBibleOptions","items","GET_ENTITY_LIST","rootReducer","combineReducers","systemSettings","merge","settings","latestAppVersion","shouldDisplayNewVersionAvailable","shouldForceReload","webAppVersion","verseOfTheDay","vodVerses","map","vodVrs","verse","isVerseOfTheDay","verseText","verseOfTheDayText","vodVerseSchemaArray","Entity","idAttribute","normalizedvod","isHighlighted","highlightedText","normalizedVerse","result","highlightedVerses","highlightedVrs","highlightedVerseSchemaArray","normalized","appStatus","loggedinUser","encodedToken","bibleBook","bookChapter","chapterVerses","verseVersionId","bibleHistory","alertMessage","alertType","alertText","ALERT_TYPE_SUCCESS","errorMessage","ALERT_TYPE_ERROR","logMessages","msg","loadSystemSettings","APIURL","BASEURL","LOGLEVEL","fetchEntity","entity","apiFn","param1","param2","param3","put","call","settle","fn","_len","args","Array","_key","status","value","err","reason","endpointUrl","apiUrl","setApiUrl","apiServiceUrl","tokenResourceUrl","usersResourceUrl","entitiesResourceFilter","keys","key","join","getUrlFilter","entitiesResourceUrl","allVersesResourceUrl","fetchAppVersion","bind","appVersionFromApiActions","getAppVersionFromApi","appVersionResourceUrl","getApiUrl","loadAppVersionFromApi","select","validateAppVersion","process","appVersionFromStorageActions","loadAppVersionFromStorage","watchLoadAppVersionFromApi","take","VALIDATE_APP_VERSION","fork","indexedDb","Dexie","version","stores","verseOfTheDayMasterList","personalVerseOfTheDay","verseOfTheDayList","userSettings","SETTINGS_LASTUPDATED_ENTITYLIST_NAME","SETTINGS_LASTUPLOADED_ENTITYLIST_NAME","saveAppVersionToLocalStore","appVersion","settingName","settingValue","fetchAppVersionFromStorage","deleteAppVersionFromStorage","delete","saveAppVersionToLocalStoreDb","_saveAppVersionToLocalStoreDb","fetchAppVersionFromStorageService","_fetchAppVersionFromStorageService","getAppVersionFromStorage","loadAppVersion","watchLoadAppVersionFromStorage","LOAD_APP_VERSION_FROM_STORAGE","updateLocalStorage","watchUpdateAppVersionLocalStorage","UPDATE_APP_VERSION_STORAGE","watchAppVersionRequests","all","isEmpty","watchLoadBibleVersions","bibleVersionSchema","bibleVersionApiSchemaArray","bibleVersionStorageSchemaArray","saveViewFiltersBibleVersionToLocalStore","filterName","fetchViewFiltersBibleVersionFromStorage","saveViewFiltersBibleVersionToLocalStoreDb","_saveViewFiltersBibleVersionToLocalStoreDb","fetchViewFiltersBibleVersionFromStorageService","_fetchViewFiltersBibleVersionFromStorageService","addBibleVersionsToLocalStore","bibleVersionsList","bulkPut","lastKey","fetchBibleVersionsFromStorage","fetchBibleVersionsFromStorageService","toArray","watchLoadBibleVersionsFromStorage","fetchBibleVersions","bibleVersionsResourceUrl","watchLoadBibleVersionsFromApi","getBibleVersion","getBibleBook","getBookChapter","watchSetBibleVersion","bibleVersionsActions","bibleBooksActions","chaptersActions","watchUpdateBibleVersionsLocalStorage","watchUpdateViewFiltersBibleVersionLocalStorage","loadViewFiltersBibleVersion","watchLoadViewFiltersBibleVersionFromStorage","watchBibleVersionsRequests","getBibleBooksList","getBooksByBibleVersion","setFirstBook","bibleBooksList","firstBookId","watchLoadBibleBooks","appVersionActions","bibleBookSchema","bibleBookApiSchemaArray","bibleBookStorageSchemaArray","saveViewFiltersBibleBookToLocalStore","fetchViewFiltersBibleBookFromStorage","saveViewFiltersBibleBookToLocalStoreDb","_saveViewFiltersBibleBookToLocalStoreDb","fetchViewFiltersBibleBookFromStorageService","_fetchViewFiltersBibleBookFromStorageService","addBooksToLocalStore","booksList","fetchBooksFromStorage","where","equals","loadBooksFromLocalStore","watchLoadBibleBooksFromStorage","bibleBooksResourceUrl","fetchBibleBooks","fetchBibleBooksApi","resourceUrl","watchLoadBibleBooksFromApi","watchUpdateBibleBooksLocalStorage","getChaptersForCurrentBookId","getChaptersByBookId","setFirstChapter","chaptersForCurrentBookId","firstChapterId","watchSetBibleBook","watchUpdateViewFiltersBibleBookLocalStorage","loadViewFiltersBibleBook","watchLoadViewFiltersBibleBookFromStorage","chapterSchema","chapterApiSchemaArray","chapterStorageSchemaArray","chaptersResourceUrl","fetchBibleChapters","fetchBibleChaptersApi","loadChapters","watchLoadBibleChaptersFromApi","watchLoadChapters","addChaptersToLocalStore","chaptersList","loadChaptersByBookIdAndLangIdFromLocalStore","and","chapter","fetchChaptersByBookIdAndLangIdFromStorage","saveViewFiltersBookChapterToLocalStore","fetchViewFiltersBookChapterFromStorage","addChaptersToLocalStoreDb","_addChaptersToLocalStoreDb","fetchChaptersByBookIdAndLangIdFromStorageService","_fetchChaptersByBookIdAndLangIdFromStorageService","saveViewFiltersBookChapterToLocalStoreDb","_saveViewFiltersBookChapterToLocalStoreDb","fetchViewFiltersBookChapterFromStorageService","_fetchViewFiltersBookChapterFromStorageService","fetchBookChaptersFromStorage","watchLoadChaptersFromStorage","fetchBookChapters","fetchChaptersApi","watchLoadChaptersFromApi","watchUpdateChaptersLocalStorage","watchSetChapter","getBooks","getBibleBooks","watchRequestNextChapter","bibleBooks","lastChapterForCurrentBookId","nextChapterId","booksActions","watchRequestPrevChapter","firstChapterForCurrentBookId","prevChapterId","prevBibleBookId","watchUpdateViewFiltersBookChapterLocalStorage","loadViewFiltersBookChapter","watchLoadViewFiltersBookChapterFromStorage","watchChaptersRequests","verseOfTheDaySchema","verseOfTheDayApiSchemaArray","verseOfTheDayStorageSchemaArray","fetchVerseOfTheDayList","fetchUpdatedVerseOfTheDayList","fetchUpdatedVerseOfTheDayListApi","updatedVersesResourceUrl","modifiedDateTimeUtc","entitiesNames","storageTableName","apiTableName","filterByVersionId","shouldNormalizeApiResponse","apiSchemaArray","addApiData","getApiDataToAdd","addToStoragePayload","getLoadedEntities","getEntityListFilterForApi","userId","lastUpdatedDateTimeUtc","getEntityListFromApiResponse","apiResponse","data","newFields","selectedText","uncVerseText","sortByField","sortDirection","isGetEntitiesUserAuthenticationRequired","getUnsynchedEntitiesFilter","lastUploadedDateTimeLtISO","readDateTimeLt","operand","historyData","entityByName","apiEntityResourceName","apiResourceName","fetchAddEntityToStorage","table","fetchEntityListFromStorage","loadEntityListFromLocalStore","above","reverse","fetchLastUpdatedEntityListSettingFromStorage","loadLastUpdatedEntityListSettingFromLocalStore","lastUpdatedSetting","loadLastAddedEntityFromLocalStore","lastAddedEntity","getTableForEntityName","orderBy","last","fetchLastAddedEntityFromStorage","entityItem","fetchEntitySettingFromStorage","loadEntitySettingFromLocalStore","entitySetting","lastUpdatedUtcTime","fetchEntityListFromStorageService","_fetchEntityListFromStorageService","fetchLastUpdatedEntityListSettingFromStorageService","_fetchLastUpdatedEntityListSettingFromStorageService","fetchLastAddedEntityFromStorageService","_fetchLastAddedEntityFromStorageService","fetchEntitySettingFromStorageService","_fetchEntitySettingFromStorageService","saveEntityListToStorageService","_saveEntityListToStorageService","getLoggedinUser","loadVerses","shouldAddChapterToBibleHistory","addToBibleHistory","watchLoadChapterVerses","getEntityList","Routes","addVersesToLocalStore","versesList","loadVersesByChapterIdAndVersionIdFromLocalStore","verseSchema","verseApiSchemaArray","verseStorageSchemaArray","fetchVersesByChapterIdAndVersionIdFromStorage","addVersesToLocalStoreDb","_addVersesToLocalStoreDb","fetchVersesByChapterIdAndVersionIdFromStorageService","_fetchVersesByChapterIdAndVersionIdFromStorageService","fetchChapterVersesFromStorage","watchLoadChapterVersesFromStorage","chapterVersesResourceUrl","fetchChapterVerses","fetchChapterVersesApi","watchLoadChapterVersesFromApi","watchUpdateVersesLocalStorage","bookVersesResourceUrl","fetchBookVerses","fetchBookVersesApi","watchLoadBookVersesFromApi","versesResourceUrl","fetchBibleVerses","fetchBibleVersesApi","watchLoadBibleVersesFromApi","watchVersesRequests","watchBibleBooksRequests","fetchVerseOfTheDayListFromStorage","loadVerseOfTheDayListFromLocalStore","fetchPersonalVerseOfTheDayByDateFromStorage","loadPersonalVerseOfTheDayFromLocalStore","loadVerseOfTheDay","fetchLastUpdatedVerseOfTheDayListSettingFromStorage","saveVerseOfTheDayListToStorageService","_saveVerseOfTheDayListToStorageService","fetchPersonalVerseOfTheDayByDateFromStorageService","_fetchPersonalVerseOfTheDayByDateFromStorageService","savePersonalVerseOfTheDayToStorageService","_savePersonalVerseOfTheDayToStorageService","fetchPersonalVerseOfTheDayFromStorage","loadPersonalVerseOfTheDay","watchLoadPersonalVerseOfTheDayFromStorage","watchGetVerseOfTheDay","updateStorage","watchSaveVerseOfTheDayListToStorage","getVerseOfTheDayList","min","max","ceil","floor","random","watchGenerateVerseOfTheDay","watchSavePersonalVerseOfTheDayToStorage","watchSetVerseOfTheDayVersion","pathname","ROUTES_VERSEOFTHEDAY_PATHNAME","watchVerseOfTheDayRequests","fetchSubmitLoginRequest","watchSubmitLoginRequest","history","back","deleteUserFromStorage","deleteUserFromStorageService","_deleteUserFromStorageService","fetchSubmitAutoSignInRequest","loginDateTimeLt","JSON","stringify","currentDateTimeLt","watchSubmitAutoSignInRequest","signedInUsers","signedInUser","displayName","fetchSignedInUsersFromStorage","saveUserToStorageService","_saveUserToStorageService","fetchSignedInUsersFromStorageService","_fetchSignedInUsersFromStorageService","watchLoadSignedInUsersFromStorage","watchSaveUserToStorage","fetchSubmitRegisterRequest","register","newUser","submitRegisterRequest","watchSubmitRegisterRequest","SUBMIT_REGISTER_REQUEST","fetchSubmitUpdateUserInfoRequest","updateUserInfo","fetchSubmitUpdateUserInfoRequestApi","modifiedUser","updateUserInfoUrl","submitUpdateUserInfoRequest","watchSubmitUpdateUserInfoRequest","SUBMIT_UPDATE_USER_INFO_REQUEST","watchSignOutRequest","signOutActions","fetchSubmitChangePasswordRequest","changePassword","submitChangePassword","watchSubmitChangePasswordRequest","SUBMIT_CHANGE_PASSWORD_REQUEST","setAlertMessage","fetchSubmitForgotPasswordRequest","forgotPassword","submitForgotPassword","watchSubmitForgotPasswordRequest","SUBMIT_FORGOT_PASSWORD_REQUEST","watchAuthRequests","fetchSubmitAddEntityRequestApi","fetchSubmitAddEntityToStorageRequest","submitAddEntityStorageRequest","watchAddEntity","entityData","watchGetEntityList","loadEntities","watchLoadEntityListFromStorage","getVersionId","loadLastUpdatedEntityListSetting","watchLoadLastUpdatedEntityListSettingFromStorage","substr","loadUpdatedEntityListFromApi","fetchEntityList","fetchEntityListApi","fetchNormalizedEntityList","fetchNormalizedEntityListApi","entitySchemaArray","saveEntitiesToStorage","watchLoadEntityListFromApi","watchSaveEntityListToStorage","fetchLastUploadedEntityListSettingFromStorage","fetchSubmitAddEntityApiRequest","loadLastUploadedEntityListSetting","submitAddEntityApiRequest","watchSyncEntityListToTheCloud","lastUploadedDateTimeLt","getEntityListAction","addEntityToApiRequests","saveSettingsItemToStorage","watchSyncEntityListFromTheCloud","watchEntitiesRequests","loadChaptersByBookId","watchBibleHistoryListTrigger","historyList","requestedBooks","loadChaptersRequests","historyItem","includes","push","watchBibleHistoryRequests","bookChaptersActions","fetchSystemSettings","settingsSystemActions","fetchSystemSettingsRequest","watchLoadSystemSettingsRequest","root","configureStore","preloadedState","sagaMiddleware","createSagaMiddleware","store","createStore","applyMiddleware","runSaga","run","rootSaga","close","dispatch","END","primaryColor","warningColor","dangerColor","successColor","infoColor","grayColor","transition","hexToRgb","input","replace","test","first","second","toUpperCase","parseInt","boxShadow","primaryBoxShadow","defaultFont","fontFamily","fontWeight","lineHeight","drawerStyle","theme","drawerPaper","width","border","position","top","bottom","left","zIndex","breakpoints","up","height","down","display","visibility","overflowY","borderTop","textAlign","paddingRight","paddingLeft","transform","toolbar","mixins","drawerContainer","overflow","overflowScrolling","brand","padding","content","right","backgroundColor","brandLink","textTransform","fontSize","textDecoration","color","brandImage","maxHeight","marginLeft","marginRight","img","verticalAlign","background","backgroundSize","backgroundPosition","opacity","list","marginTop","paddingTop","paddingBottom","marginBottom","listStyle","item","itemLink","margin","borderRadius","itemIcon","float","itemText","whiteFont","purple","blue","green","orange","red","versionInfoItem","useStyles","makeStyles","styles","DrawerListItem","props","classes","routePathname","itemCaption","ItemIcon","React","createElement","NavLink","to","className","activeClassName","ListItem","button","classNames","Icon","ListItemText","primary","disableTypography","VerseOfTheDayIcon","SvgIcon","d","ReadingHistoryIcon","DrawerList","selectedRoute","setSelectedRoute","useState","List","MenuBookIcon","CopyrightIcon","DescriptionIcon","HomePageDrawer","useTheme","isMobileDrawerOpen","onHandleDrawerToggle","target","drawerBackground","style","backgroundImage","drawerImage","drawer","Hidden","smUp","implementation","Drawer","container","variant","anchor","direction","open","onClose","paper","ModalProps","keepMounted","onClick","xsDown","LoginHeader","Typography","RegisterHeader","UpdateUserInfoHeader","ChangePasswordHeader","BibleVersionsListButton","Component","render","selectedBibleVersionName","anchorBibleVersionEl","onHandleBibleVersionClick","onHandleBibleVersionClose","onHandleBibleVersionMenuItemClick","wrapper","Button","aria-owns","aria-haspopup","disabled","CircularProgress","size","buttonProgress","Menu","anchorEl","Boolean","MenuItem","event","langName","versionName","withStyles","alignItems","withTheme","BibleVersions","constructor","handleBibleVersionClick","setState","currentTarget","handleBibleVersionClose","handleBibleVersionMenuItemClick","componentDidMount","bibleVersionName","propTpes","PropTypes","array","isRequired","object","func","bool","withRouter","connect","mapStateToProps","ownProps","VerseOfTheDayPanelHeader","grow","number","flexGrow","VerseOfTheDayHeader","BibleBooksListButton","selectedBibleBookName","anchorBibleBookEl","onHandleBibleBookClick","onHandleBibleBookClose","onHandleBibleBookMenuItemClick","book","bookLangId","bookName","getBookByBibleVersionAndSelectedBookId","booksByBibleVersion","selectedBibleBook","getBookByBibleVersionAndBookId","getBookId","BibleBooks","handleBibleBookClick","handleBibleBookClose","handleBibleBookMenuItemClick","bibleBookName","ChaptersListButton","selectedChapterNumber","anchorChapterEl","onHandleChapterClick","onHandleChapterClose","onHandleChapterMenuItemClick","chapterLangId","chapterNumber","getChaptersByBookIdAndBibleVersion","chaptersByBookId","getChaptersByBibleVersion","bibleChapters","bibleVersionBySelectedVersionId","selectedLangId","getChapterByBibleVersionAndSelectedChapterId","chaptersByBookIdAndBibleVersion","selectedChapter","getChapterByBibleVersionAndChapterId","getChapterId","chaptersByBibleVersion","BookChapters","handleChapterClick","handleChapterClose","handleChapterMenuItemClick","BiblePanelHeader","BibleHeader","noWrap","SignInAccountMenu","signInAccountAnchorEl","onAccountMenuClose","isSignInAccountMenuOpen","getContentAnchorEl","anchorOrigin","vertical","horizontal","transformOrigin","component","Link","SignOutMenu","signOutAccountAnchorEl","onSignOutMenuClick","isSignOutAccountMenuOpen","signOutUser","signedInUserId","handleSignOutMenuClick","BibleHistoryPanelHeader","BibleHistoryHeader","appBar","menuButton","sectionDesktop","sectionMobile","loggedOut","fill","loggedIn","loggingIn","animation","from","AccountIcon","HomePageAppBar","isLoggedIn","userDisplayName","setSignInAccountAnchorEl","setSignOutAccountAnchorEl","handleAccountMenuClose","AppBar","Toolbar","IconButton","aria-label","MenuIcon","Route","path","ForgotPasswordHeader","FavoriteVersesHeader","TopicsHeader","SettingsHeader","CopyrightsHeader","ReleaseNotesHeader","edge","aria-controls","paragraph","LinearProgress","SignOutAccountMenu","variantIcon","CheckCircleIcon","warning","WarningIcon","ErrorIcon","info","InfoIcon","palette","dark","main","amber","icon","iconVariant","spacing","SnackbarContentWrapper","other","SnackbarContent","clsx","aria-describedby","CloseIcon","MessageBox","canDisplayMessageBox","onHandleClose","Snackbar","autoHideDuration","MessageBanner","bannerMessage","buttonCaption","Fragment","Paper","Grid","wrap","justify","Divider","CssBaseline","flexDirection","MainPanel","src","ChristTheSheperd","alt","align","Main","reload","Copyright","common","white","avatar","secondary","form","submit","ForgotPasswordLink","forwardRef","ref","RouterLink","innerRef","RegisterLink","LoginPanel","usernameFocused","setUsernameFocused","username","password","rememberMe","onUsernameChange","onPasswordChange","onRememberMeChange","onSubmitLoginClick","usernameInput","useEffect","focus","Container","maxWidth","Avatar","LockOutlinedIcon","onSubmit","noValidate","TextField","required","fullWidth","label","name","autoComplete","autoFocus","inputRef","onChange","FormControlLabel","control","Checkbox","checked","xs","ROUTES_FORGOTPASSWORD_PATHNAME","ROUTES_REGISTER_PATHNAME","Box","mt","setUsername","setPassword","setRememberMe","ROUTES_HOME_PATHNAME","preventDefault","btoa","EncodedCredentials","RegisterPanel","confirmPassword","firstname","lastname","email","isValidPassword","onConfirmPasswordChange","onFirstnameChange","onLastnameChange","onDisplayNameChange","onEmailChange","onSubmitRegisterClick","helperText","setConfirmPassword","setFirstname","setLastname","setDisplayName","setEmail","passwordErrorMessage","setPasswordErrorMessage","isFieldPopulated","isFilledPassword","value1","validatePassword","value2","isMatchingPasswords","isValidRequiredFields","errorMsg","match","CurrentDateTimeLt","Firstname","Lastname","DisplayName","Email","UpdateUserInfoPanel","firstnameFocused","setFirstnameFocused","onSubmitUpdateUserInfoClick","firstnameInput","compareChangedData","changedData","fieldName","currentValue","newValue","pageLoaded","setPageLoaded","getChangedData","getData","ChangePasswordPanel","passwordFocused","setPasswordFocused","onSubmitChangePasswordClick","passwordInput","submitChangePasswordRequest","initializeLoadingPage","queryParams","queryString","parse","search","dateTimeLt","ForgotPasswordPanel","onSubmitClick","submitForgotPasswordRequest","VerseOfTheDayPanel","verseNumber","fontStyle","m","verseReference","getVerseOfTheDayListState","getSelectedVerseOfTheDay","selectedVerseOfTheDay","VerseOfTheDay","handleSwipingLeft","handleSwipingRight","Swipeable","onSwipedLeft","onSwipedRight","string","FavoriteWords","text","highlight","favorite","SearchWords","VerseOfTheDayWords","styledTagsList","shouldProcessHighlightedText","trim","shouldProcessFavoriteText","shouldProcessSearchText","ProcessStylingVerse","tag","textToStyle","styleRegex","RegExp","escapeRegExp","part","i","elementStart","element","count","HighlightedWords","shouldProcessVerseOfTheDayText","StyledVerse","tagsList","AddStyledElementToTagsList","elementEnd","start","end","sort","a","b","comparison","PopulateStyledTagsList","lastStyledTagEnd","forEach","substring","j","internalElementEnd","styledTagStart","VerseBox","shouldStyleVerseOfTheDay","onHandleMenuOpenClick","onHandleMenuPointerDown","onPointerDown","AddToVerseOfTheDayListIcon","HighlightIcon","VerseMenu","menuAnchorEl","shouldDisplayAddToVerseOfTheDayListIcon","onAddEntity","onHandleMenuClose","menuOpen","menuId","menuCaption","handleAddToVerseOfTheDayList","whiteSpace","handleAddToHighlightedVerses","setAnchorEl","setSelectedText","getSelectedText","getSelection","toString","document","selection","createRange","handleMenuClose","VersesPanel","shouldDisplayDownloadBibleOptions","onHandleDownloadBookClick","downloadBookButtonCaption","Verse","getVersesByChapterId","getVersesByChapterIdAndBibleVersion","versesByChapterId","Verses","handleDownloadBookClick","handleDownloadBibleClick","onHandleDownloadBibleClick","profileName","minWidth","title","pos","cardContentArea","cardContentDescriptionArea","cardActionArea","btn","borderColor","BibleHistoryItemPanel","time","onHandleReadChapterClick","Card","CardContent","gutterBottom","handleReadChapterClick","BibleHistoryPanel","BibleHistoryItem","historyItems","FavoriteVerses","Topics","Settings","Copyrights","ReleaseNotes","Analytics","logPageView","componentDidUpdate","prevProps","pageTitle","getPageTitle","logEvent","page_path","page_title","ROUTES_LOGIN_PATHNAME","ROUTES_UPDATE_USER_INFO_PATHNAME","ROUTES_CHANGE_PASSWORD_PATHNAME","ROUTES_BIBLE_PATHNAME","ROUTES_READINGHISTORY_PATHNAME","ROUTES_FAVORITEVERSES_PATHNAME","ROUTES_TOPICS_PATHNAME","ROUTES_SETTINGS_PATHNAME","ROUTES_COPYRIGHTS_PATHNAME","ROUTES_RELEASENOTES_PATHNAME","HomePageMain","handlePwaInstall","event_category","event_label","handleOnlineEvent","indexedDB","onsuccess","transaction","objectStore","getAll","eventName","params","clear","addEventListener","matchMedia","matches","navigator","standalone","componentWillUnmount","removeEventListener","shouldDisplayAlertMessage","alertMessageText","onHandleMessageBoxClose","onHandleAppVersionUpdateClick","exact","Login","Register","UpdateUserInfo","ChangePassword","ForgotPassword","BibleHistory","mainPageStyle","mainPanel","HomePage","mobileDrawerOpen","setMobileDrawerOpen","handleDrawerToggle","Home","mobileMoreAnchorEl","handleMobileMenuClose","handleMobileMenuOpen","handleAppVersionUpdateClick","updateAppVersionStorage","forceAppReload","serviceWorker","forceSWupdate","handleMessageBoxClose","resetAlertMessage","loadSettingsRequest","App","listen","swUpdateReady","stop","NotFound","Root","Provider","Switch","isLocalhost","hostname","registerValidSW","swUrl","config","skipWaiting","getRegistration","swReg","registration","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","onSuccess","initGA","Router","basename","getElementById","Cypress","URL","origin","contentType","ready","unregister","checkValidServiceWorker","RESET_ALERT_MESSAGE","SET_ALERT_MESSAGE","ADD_LOG_MESSAGE","RESET_LOG_MESSAGES","_appVersionFromStorageActions","_appVersionFromApiActions","_registerActions","_updateUserInfoActions","LOAD_SETTINGS_REQUEST","GET_SETTINGS","getSettings","filteredChapters","c","measurementId","gtag","dataLayer","saveEventToIndexedDB","onupgradeneeded","db","objectStoreNames","contains","createObjectStore","keyPath","autoIncrement","add","timestamp","now","onLine","warn","_changePasswordActions","_forgotPasswordActions","base","reduce","acc","_signOutActions","baseUrl","logLevel"],"mappings":"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","file":"static/js/main.bd21a911.chunk.js","sourcesContent":["import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_BIBLE_CHAPTERS_FROM_API = 'LOAD_BIBLE_CHAPTERS_FROM_API';\r\nexport const loadBibleChaptersFromApi = (bibleVersionId) => action(LOAD_BIBLE_CHAPTERS_FROM_API, {bibleVersionId});\r\n\r\nexport const GET_BIBLE_CHAPTERS_FROM_API = createRequestTypes('GET_BIBLE_CHAPTERS_FROM_API');\r\n\r\nexport const getBibleChaptersFromApi = {\r\n request: () => action(GET_BIBLE_CHAPTERS_FROM_API.REQUEST),\r\n success: (id, response) => action(GET_BIBLE_CHAPTERS_FROM_API.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_BIBLE_CHAPTERS_FROM_API.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_BOOK_CHAPTERS_FROM_STORAGE = 'LOAD_BOOK_CHAPTERS_FROM_STORAGE';\r\nexport const loadBookChaptersFromStorage = (bibleVersionId, bookId) => action(LOAD_BOOK_CHAPTERS_FROM_STORAGE, {bibleVersionId, bookId});\r\n\r\nexport const GET_BOOK_CHAPTERS_FROM_STORAGE = createRequestTypes('GET_BOOK_CHAPTERS_FROM_STORAGE');\r\nexport const getBookChaptersFromStorage = {\r\n request: () => action(GET_BOOK_CHAPTERS_FROM_STORAGE.REQUEST),\r\n success: (id, response) => action(GET_BOOK_CHAPTERS_FROM_STORAGE.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_BOOK_CHAPTERS_FROM_STORAGE.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_BOOK_CHAPTERS_FROM_API = 'LOAD_BOOK_CHAPTERS_FROM_API';\r\nexport const loadBookChaptersFromApi = (bibleVersionId, bookId) => action(LOAD_BOOK_CHAPTERS_FROM_API, {bibleVersionId, bookId});\r\n\r\nexport const GET_BOOK_CHAPTERS_FROM_API = createRequestTypes('GET_BOOK_CHAPTERS_FROM_API');\r\nexport const getBookChaptersFromApi = {\r\n request: () => action(GET_BOOK_CHAPTERS_FROM_API.REQUEST),\r\n success: (id, response) => action(GET_BOOK_CHAPTERS_FROM_API.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_BOOK_CHAPTERS_FROM_API.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_VIEWFILTERS_BOOKCHAPTER_FROM_STORAGE = 'LOAD_VIEWFILTERS_BOOKCHAPTER_FROM_STORAGE';\r\nexport const loadViewFiltersBookChapterFromStorage = () => action(LOAD_VIEWFILTERS_BOOKCHAPTER_FROM_STORAGE);\r\n\r\nexport const GET_VIEWFILTERS_BOOKCHAPTER_FROM_STORAGE = createRequestTypes('GET_VIEWFILTERS_BOOKCHAPTER_FROM_STORAGE');\r\nexport const getViewFiltersBookChapterFromStorage = {\r\n request: () => action(GET_VIEWFILTERS_BOOKCHAPTER_FROM_STORAGE.REQUEST),\r\n success: (id, response) => action(GET_VIEWFILTERS_BOOKCHAPTER_FROM_STORAGE.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_VIEWFILTERS_BOOKCHAPTER_FROM_STORAGE.FAILURE, {error})\r\n}\r\n\r\nexport const UPDATE_VIEWFILTERS_BOOKCHAPTER_STORAGE = 'UPDATE_VIEWFILTERS_BOOKCHAPTER_STORAGE';\r\nexport const updateViewFiltersBookChapterStorage = (chapterId) => action(UPDATE_VIEWFILTERS_BOOKCHAPTER_STORAGE, {chapterId});","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nimport * as _bibleChaptersFromApiActions from './bibleChaptersFromApiActions';\r\nimport * as _getBookChaptersFromStorageActions from './getBookChaptersFromStorageActions';\r\nimport * as _getBookChaptersFromApiActions from './getBookChaptersFromApiActions';\r\nimport * as _viewFiltersBookChapterFromStorageActions from './viewFiltersBookChapterFromStorageActions';\r\n\r\nexport const bibleChaptersFromApiActions = _bibleChaptersFromApiActions;\r\nexport const getBookChaptersFromStorageActions = _getBookChaptersFromStorageActions;\r\nexport const getBookChaptersFromApiActions = _getBookChaptersFromApiActions;\r\nexport const viewFiltersBookChapterFromStorageActions = _viewFiltersBookChapterFromStorageActions;\r\n\r\nconst { action } = actions;\r\n\r\nexport const LOAD_BOOK_CHAPTERS = 'LOAD_BOOK_CHAPTERS';\r\nexport const loadBookChapters = (bibleVersionId, bookId) => action(LOAD_BOOK_CHAPTERS, {bibleVersionId, bookId});\r\n\r\nexport const SET_BOOK_CHAPTER = 'SET_BOOK_CHAPTER';\r\nexport const setBookChapter = chapterId => action(SET_BOOK_CHAPTER, {chapterId});\r\n\r\nexport const REQUEST_NEXT_CHAPTER = 'REQUEST_NEXT_CHAPTER';\r\nexport const requestNextChapter = () => action(REQUEST_NEXT_CHAPTER);\r\n\r\nexport const REQUEST_PREV_CHAPTER = 'REQUEST_PREV_CHAPTER';\r\nexport const requestPrevChapter = () => action(REQUEST_PREV_CHAPTER);\r\n\r\nexport const UPDATE_CHAPTERS_STORAGE = 'UPDATE_CHAPTERS_STORAGE';\r\nexport const updateChaptersStorage = (chapters) => action(UPDATE_CHAPTERS_STORAGE, {chapters});","export const SERVICE_ENDPOINT_TYPE_STORAGE = 'STORAGE';\r\nexport const SERVICE_ENDPOINT_TYPE_API = 'API';","import * as actions from '../../../actions/actionRequestTypes';\r\nimport * as services from '../../../constants/services';\r\nimport { GET_ENTITY_LIST_ACTION_TYPE } from './entityListActions';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_ENTITY_LIST_FROM_STORAGE = entityName => `LOAD_${entityName}_LIST_FROM_${services.SERVICE_ENDPOINT_TYPE_STORAGE}`;\r\nexport const loadEntityListFromStorage = (entityName, filter) => action(LOAD_ENTITY_LIST_FROM_STORAGE(entityName), filter);\r\n\r\nexport const GET_ENTITY_LIST_FROM_STORAGE = entityName => createRequestTypes(`${GET_ENTITY_LIST_ACTION_TYPE(entityName)}_FROM_${services.SERVICE_ENDPOINT_TYPE_STORAGE}`);\r\nexport const getEntityListFromStorage = {\r\n request: (entityName, filter) => action(GET_ENTITY_LIST_FROM_STORAGE(entityName).REQUEST, filter),\r\n success: (entityName, response) => action(GET_ENTITY_LIST_FROM_STORAGE(entityName).SUCCESS, {response}),\r\n failure: (entityName, error) => action(GET_ENTITY_LIST_FROM_STORAGE(entityName).FAILURE, {error})\r\n}\r\n\r\nexport const SAVE_ENTITY_LIST_TO_STORAGE = entityName => `SAVE_${entityName}_LIST_TO_${services.SERVICE_ENDPOINT_TYPE_STORAGE}`;\r\nexport const saveEntityListToStorage = (entityName, entityList, currentUtcTime) => action(SAVE_ENTITY_LIST_TO_STORAGE(entityName), {entityList, currentUtcTime});","import * as actions from '../../../actions/actionRequestTypes';\r\nimport * as services from '../../../constants/services';\r\nimport { GET_ENTITY_LIST_ACTION_TYPE } from './entityListActions';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE = entityName => `LOAD_${entityName}_LIST_LASTUPDATED_SETTING_FROM_${services.SERVICE_ENDPOINT_TYPE_STORAGE}`;\r\nexport const loadEntityListLastUpdatedSettingFromStorage = (entityName, filter) => action(LOAD_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE(entityName), filter);\r\n\r\nexport const GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE = entityName => createRequestTypes(`${GET_ENTITY_LIST_ACTION_TYPE(entityName)}_LASTUPDATED_SETTING_FROM_${services.SERVICE_ENDPOINT_TYPE_STORAGE}`);\r\nexport const getLastUpdatedEntityListSettingFromStorage = {\r\n request: (entityName, filter) => action(GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE(entityName).REQUEST, filter),\r\n success: (entityName, response) => action(GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE(entityName).SUCCESS, {response}),\r\n failure: (entityName, error) => action(GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE(entityName).FAILURE, {error})\r\n}","import * as actions from '../../../actions/actionRequestTypes';\r\nimport * as services from '../../../constants/services';\r\nimport { GET_ENTITY_LIST_ACTION_TYPE } from './entityListActions';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_ENTITY_LIST_LASTUPLOADED_SETTING_FROM_STORAGE = entityName => `LOAD_${entityName}_LIST_LASTUPLOADED_SETTING_FROM_${services.SERVICE_ENDPOINT_TYPE_STORAGE}`;\r\nexport const loadEntityListLastUploadedSettingFromStorage = (entityName, filter) => action(LOAD_ENTITY_LIST_LASTUPLOADED_SETTING_FROM_STORAGE(entityName), filter);\r\n\r\nexport const GET_ENTITY_LIST_LASTUPLOADED_SETTING_FROM_STORAGE = entityName => createRequestTypes(`${GET_ENTITY_LIST_ACTION_TYPE(entityName)}_LASTUPLOADED_SETTING_FROM_${services.SERVICE_ENDPOINT_TYPE_STORAGE}`);\r\nexport const getLastUploadedEntityListSettingFromStorage = {\r\n request: (entityName, filter) => action(GET_ENTITY_LIST_LASTUPLOADED_SETTING_FROM_STORAGE(entityName).REQUEST, filter),\r\n success: (entityName, response) => action(GET_ENTITY_LIST_LASTUPLOADED_SETTING_FROM_STORAGE(entityName).SUCCESS, {response}),\r\n failure: (entityName, error) => action(GET_ENTITY_LIST_LASTUPLOADED_SETTING_FROM_STORAGE(entityName).FAILURE, {error})\r\n}","import * as actions from '../../../actions/actionRequestTypes';\r\nimport * as services from '../../../constants/services';\r\nimport { GET_ENTITY_LIST_ACTION_TYPE } from './entityListActions';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_ENTITY_LIST_FROM_API = entityName => `LOAD_${entityName}_LIST_FROM_${services.SERVICE_ENDPOINT_TYPE_API}`;\r\nexport const loadEntityListFromApi = (entityName, filter) => action(LOAD_ENTITY_LIST_FROM_API(entityName), filter);\r\n\r\nexport const GET_ENTITY_LIST_FROM_API = entityName => createRequestTypes(`${GET_ENTITY_LIST_ACTION_TYPE(entityName)}_FROM_${services.SERVICE_ENDPOINT_TYPE_API}`);\r\nexport const getEntityListFromApi = {\r\n request: (entityName, filter) => action(GET_ENTITY_LIST_FROM_API(entityName).REQUEST, filter),\r\n success: (entityName, response) => action(GET_ENTITY_LIST_FROM_API(entityName).SUCCESS, {response}),\r\n failure: (entityName, error) => action(GET_ENTITY_LIST_FROM_API(entityName).FAILURE, {error})\r\n}","import * as actions from '../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const GET_LASTADDED_ENTITY_ACTION_TYPE = entityName => `GET_LASTADDED_${entityName}`;\r\nexport const getLastAddedEntity = (entityName) => {\r\n return action(GET_LASTADDED_ENTITY_ACTION_TYPE(entityName))\r\n};\r\n\r\nexport const GET_LASTADDED_ENTITY_FROM_STORAGE = entityName => createRequestTypes(`${GET_LASTADDED_ENTITY_ACTION_TYPE(entityName)}_FROM_STORAGE`);\r\nexport const getLastAddedEntityFromStorage = {\r\n request: (entityName) => action(GET_LASTADDED_ENTITY_FROM_STORAGE(entityName).REQUEST),\r\n success: (entityName, response) => action(GET_LASTADDED_ENTITY_FROM_STORAGE(entityName).SUCCESS, {response}),\r\n failure: (entityName, error) => action(GET_LASTADDED_ENTITY_FROM_STORAGE(entityName).FAILURE, {error})\r\n}","import * as actions from '../../../actions/actionRequestTypes';\r\n\r\nimport * as _addEntityActions from './addEntityActions';\r\nimport * as _entityListActions from './entityListActions';\r\nimport * as _entityListStorageActions from './entityListStorageActions';\r\nimport * as _lastUpdatedEntityListSettingStorageActions from './lastUpdatedEntityListSettingStorageActions';\r\nimport * as _lastUploadedEntityListSettingStorageActions from './lastUploadedEntityListSettingStorageActions';\r\nimport * as _entityListApiActions from './entityListApiActions';\r\nimport * as _getEntityActions from './getEntityActions';\r\n\r\nexport const addEntityActions = _addEntityActions;\r\nexport const entityListActions = _entityListActions;\r\nexport const entityListStorageActions = _entityListStorageActions;\r\nexport const lastUpdatedEntityListSettingStorageActions = _lastUpdatedEntityListSettingStorageActions;\r\nexport const lastUploadedEntityListSettingStorageActions = _lastUploadedEntityListSettingStorageActions;\r\nexport const entityListApiActions = _entityListApiActions;\r\nexport const getEntityActions = _getEntityActions;\r\n\r\nconst { action } = actions;\r\n\r\nexport const SYNC_ENTITY_LIST_TO_THECLOUD = entityName => `SYNC_${entityName}_LIST_TO_THECLOUD`;\r\nexport const syncEntityListToTheCloud = entityName => action(SYNC_ENTITY_LIST_TO_THECLOUD(entityName));\r\n\r\nexport const SYNC_ENTITY_LIST_FROM_THECLOUD = entityName => `SYNC_${entityName}_LIST_FROM_THECLOUD`;\r\nexport const syncEntityListFromTheCloud = (entityName, filter) => action(SYNC_ENTITY_LIST_FROM_THECLOUD(entityName), filter);","export const activeRoute = routeName => {\r\n return window.location.href.indexOf(routeName) > -1 ? true : false;\r\n}","import * as actions from '../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const ADD_ENTITY_ACTION_TYPE = entityName => `ADD_${entityName}`;\r\nexport const addEntity = (entityName, payload = {}) => {\r\n const obj = {}\r\n return action(ADD_ENTITY_ACTION_TYPE(entityName), {...obj, payload})\r\n};\r\n\r\nexport const ADD_ENTITY_STORAGE = entityName => createRequestTypes(`${ADD_ENTITY_ACTION_TYPE(entityName)}_STORAGE`);\r\nexport const addEntityStorage = {\r\n request: (entityName, payload) => action(ADD_ENTITY_STORAGE(entityName).REQUEST, payload),\r\n success: (entityName, response) => action(ADD_ENTITY_STORAGE(entityName).SUCCESS, {response}),\r\n failure: (entityName, error) => action(ADD_ENTITY_STORAGE(entityName).FAILURE, {error})\r\n}\r\n\r\nexport const ADD_ENTITY_API = entityName => createRequestTypes(`${ADD_ENTITY_ACTION_TYPE(entityName)}_API`);\r\nexport const addEntityApi = {\r\n request: (entityName, payload) => action(ADD_ENTITY_API(entityName).REQUEST, payload),\r\n success: (entityName, response) => action(ADD_ENTITY_API(entityName).SUCCESS, {response}),\r\n failure: (entityName, error) => action(ADD_ENTITY_API(entityName).FAILURE, {error})\r\n}","import { createSelector } from 'reselect';\r\nimport _ from 'lodash';\r\n\r\nconst getVersions = state => _.values(state.entities.bibleVersions);\r\n\r\nexport const getBibleVersions = createSelector(\r\n [getVersions],\r\n (bibleVersions) => {\r\n return bibleVersions;\r\n }\r\n)","import { createSelector } from 'reselect';\r\nimport { getBibleVersions } from './getBibleVersionsSelector';\r\n\r\nconst getSelectedBibleVersion = state => state.bibleVersion;\r\n\r\nexport const getBibleVersionBySelectedVersionId = createSelector(\r\n [getBibleVersions, getSelectedBibleVersion],\r\n (bibleVersions, selectedBibleVersion) => {\r\n const filteredBibleVersions = bibleVersions.filter(bibleVersion => bibleVersion.versionId === selectedBibleVersion.id);\r\n return filteredBibleVersions[0];\r\n }\r\n)","import { normalize } from 'normalizr';\r\nimport { camelizeKeys } from 'humps';\r\nimport 'isomorphic-fetch';\r\n//import configSettings from '../configSettings.json';\r\n\r\n// Extracts the next page URL from Github API response.\r\nfunction getNextPageUrl(response) {\r\n const link = response.headers.get('link')\r\n if (!link) {\r\n return null\r\n }\r\n\r\n const nextLink = link.split(',').find(s => s.indexOf('rel=\"next\"') > -1)\r\n if (!nextLink) {\r\n return null\r\n }\r\n\r\n return nextLink.split(';')[0].slice(1, -1)\r\n}\r\n\r\nexport const API_GET = 'GET'\r\nexport const API_POST = 'POST'\r\nexport const API_PUT = 'PUT'\r\nexport const API_DELETE = 'DELETE'\r\n\r\nlet currentAuthToken = null;\r\n\r\nexport const setToken = token => { currentAuthToken = token; }\r\n\r\nconst fetchHeaderAutorizationOption = () => {\r\n let fetchHeaderAuthorization = {}\r\n\r\n if (currentAuthToken) {\r\n fetchHeaderAuthorization = { 'Authorization': `bearer ${currentAuthToken}` }\r\n }\r\n\r\n return fetchHeaderAuthorization\r\n}\r\n\r\nconst fetchHeaderOption = () => {\r\n let fetchHeader = {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json'\r\n }\r\n\r\n fetchHeader = Object.assign(fetchHeader, fetchHeaderAutorizationOption())\r\n\r\n let headerOption = {\r\n headers: fetchHeader\r\n }\r\n\r\n return headerOption\r\n}\r\n\r\nconst fetchOptions = (fetchMethod, fetchBody) => {\r\n let options = {\r\n method: fetchMethod\r\n }\r\n\r\n options = Object.assign(options, fetchHeaderOption())\r\n\r\n if ((fetchMethod !== API_GET) && (fetchMethod !== API_DELETE)) {\r\n let bodyOption = {body: fetchBody}\r\n options = Object.assign(options, bodyOption)\r\n }\r\n\r\n return options\r\n}\r\n\r\nexport const callDeleteApi = (endpoint, fetchBody = '') => {\r\n const fetchMethod = API_DELETE;\r\n\r\n return fetch(endpoint, fetchOptions(fetchMethod, fetchBody))\r\n .then(response => {\r\n if (response.ok) {\r\n return {}\r\n } else {\r\n }\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n )\r\n .catch(error => console.log(`Error on fetch Delete - error= ${error}`))\r\n} \r\n\r\n// Fetches an API response and normalizes the result JSON according to schema.\r\n// This makes every API response have the same shape, regardless of how nested it was.\r\nexport const callApiNormalizedResponse = (endpoint, schema, fetchMethod = API_GET, fetchBody = '') => {\r\n return fetch(endpoint, fetchOptions(fetchMethod, fetchBody))\r\n .then(response => \r\n response.json().then(json => ({ json, response }))\r\n ).then(({ json, response }) => {\r\n if (!response.ok) {\r\n return Promise.reject(json)\r\n }\r\n\r\n const camelizedJson = camelizeKeys(json);\r\n const nextPageUrl = getNextPageUrl(response); \r\n\r\n const normalized = normalize(camelizedJson, schema);\r\n return {...normalized, nextPageUrl} \r\n })\r\n .then(\r\n response => ({response}),\r\n error => ({error: error.message})\r\n )\r\n}\r\n\r\nconst checkStatus = (response) => {\r\n if (response.ok) {\r\n return response;\r\n } else {\r\n const error = new Error(response.statusText);\r\n error.response = response;\r\n throw error;\r\n }\r\n}\r\n\r\nconst parseJSON = (response) => {\r\n return response.json();\r\n}\r\n\r\nexport const callApi = (endpoint, fetchMethod = API_GET, fetchBody = '') => {\r\n return fetch(endpoint, fetchOptions(fetchMethod, fetchBody))\r\n // .then(checkStatus)\r\n // .then(parseJSON)\r\n // .then(json => ({ json, response }))\r\n .then(response => \r\n response.json().then(json => ({ json, response }))\r\n )\r\n .then(({ json, response }) => {\r\n if (!response.ok) {\r\n const error = new Error(response.statusText);\r\n error.message = json;\r\n return Promise.reject(error)\r\n //return Promise.reject(json)\r\n }\r\n\r\n const camelizedJson = camelizeKeys(json); \r\n return {...camelizedJson} \r\n }) \r\n .then(\r\n response => ({response}),\r\n error => ({error: error.message})\r\n ) \r\n .catch(error => console.log(`Error on fetch - error= ${error}`))\r\n}\r\n\r\nexport const callDuplicateApi = (endpoint, fetchMethod = API_GET, fetchBody = '') => {\r\n return fetch(endpoint, fetchOptions(fetchMethod, fetchBody))\r\n .then(checkStatus)\r\n .then(parseJSON)\r\n .then(response => \r\n response.json().then(json => ({ json, response }))\r\n ).then(({ json, response }) => {\r\n if (!response.ok) {\r\n return Promise.reject(json)\r\n }\r\n\r\n const camelizedJson = camelizeKeys(json); \r\n return {...camelizedJson} \r\n })\r\n .catch(error => {\r\n console.log(`request failed ${error}`);\r\n }) \r\n .then(\r\n response => ({response}),\r\n error => ({error: error.message})\r\n ) \r\n}","export const VERSEOFTHEDAY = 'VerseOfTheDay';\r\nexport const FAVORITEVERSES = 'FavoriteVerses';\r\nexport const HIGHLIGHTEDVERSES = 'HighlightedVerses';\r\nexport const BIBLEHISTORY = 'BibleHistory';","import * as LoginActionTypes from '../features/auth/Login/actions';\r\n\r\nconst { LOGIN } = LoginActionTypes.loginActions;\r\nconst { AUTOSIGNIN } = LoginActionTypes.autoSignInActions;\r\n\r\nexport const viewFilters = (state = {userLoggingIn: false }, action) => {\r\n const { type } = action\r\n\r\n switch (type) {\r\n case LOGIN.REQUEST:\r\n case AUTOSIGNIN.REQUEST:\r\n return {\r\n ...state,\r\n userLoggingIn: true\r\n }\r\n case LOGIN.SUCCESS:\r\n case LOGIN.FAILURE:\r\n case AUTOSIGNIN.SUCCESS:\r\n case AUTOSIGNIN.FAILURE:\r\n return {\r\n ...state,\r\n userLoggingIn: false\r\n } \r\n default:\r\n return state;\r\n }\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const GET_CHAPTER_VERSES = createRequestTypes('GET_CHAPTER_VERSES');\r\n\r\nexport const getChapterVerses = {\r\n request: (bibleVersionId, bookId, chapterId) => action(GET_CHAPTER_VERSES.REQUEST, {bibleVersionId, bookId, chapterId}),\r\n success: (id, response) => action(GET_CHAPTER_VERSES.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_CHAPTER_VERSES.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_CHAPTER_VERSES_FROM_STORAGE = 'LOAD_CHAPTER_VERSES_FROM_STORAGE';\r\nexport const loadChapterVersesFromStorage = (bibleVersionId, bookId, chapterId) => action(LOAD_CHAPTER_VERSES_FROM_STORAGE, {bibleVersionId, bookId, chapterId});\r\n\r\nexport const GET_CHAPTER_VERSES_FROM_STORAGE = createRequestTypes('GET_CHAPTER_VERSES_FROM_STORAGE');\r\n\r\nexport const getChapterVersesFromStorage = {\r\n request: () => action(GET_CHAPTER_VERSES_FROM_STORAGE.REQUEST),\r\n success: (id, response) => action(GET_CHAPTER_VERSES_FROM_STORAGE.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_CHAPTER_VERSES_FROM_STORAGE.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_CHAPTER_VERSES_FROM_API = 'LOAD_CHAPTER_VERSES_FROM_API';\r\nexport const loadChapterVersesFromApi = (bibleVersionId, bookId, chapterId) => action(LOAD_CHAPTER_VERSES_FROM_API, {bibleVersionId, bookId, chapterId});\r\n\r\nexport const GET_CHAPTER_VERSES_FROM_API = createRequestTypes('GET_CHAPTER_VERSES_FROM_API');\r\n\r\nexport const getChapterVersesFromApi = {\r\n request: () => action(GET_CHAPTER_VERSES_FROM_API.REQUEST),\r\n success: (id, response) => action(GET_CHAPTER_VERSES_FROM_API.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_CHAPTER_VERSES_FROM_API.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_BOOK_VERSES_FROM_API = 'LOAD_BOOK_VERSES_FROM_API';\r\nexport const loadBookVersesFromApi = (bibleVersionId, bookId) => action(LOAD_BOOK_VERSES_FROM_API, {bibleVersionId, bookId});\r\n\r\nexport const GET_BOOK_VERSES_FROM_API = createRequestTypes('GET_BOOK_VERSES_FROM_API');\r\n\r\nexport const getBookVersesFromApi = {\r\n request: (bibleVersionId, bookId) => action(GET_BOOK_VERSES_FROM_API.REQUEST, {bibleVersionId, bookId}),\r\n success: (id, response) => action(GET_BOOK_VERSES_FROM_API.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_BOOK_VERSES_FROM_API.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_BIBLE_VERSES_FROM_API = 'LOAD_BIBLE_VERSES_FROM_API';\r\nexport const loadBibleVersesFromApi = (bibleVersionId) => action(LOAD_BIBLE_VERSES_FROM_API, {bibleVersionId});\r\n\r\nexport const GET_BIBLE_VERSES_FROM_API = createRequestTypes('GET_BIBLE_VERSES_FROM_API');\r\n\r\nexport const getBibleVersesFromApi = {\r\n request: (bibleVersionId) => action(GET_BIBLE_VERSES_FROM_API.REQUEST, {bibleVersionId}),\r\n success: (id, response) => action(GET_BIBLE_VERSES_FROM_API.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_BIBLE_VERSES_FROM_API.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nimport * as _chapterVersesActions from './chapterVersesActions';\r\nimport * as _getChapterVersesFromStorageActions from './getChapterVersesFromStorageActions';\r\nimport * as _getChapterVersesFromApiActions from './getChapterVersesFromApiActions';\r\nimport * as _bookVersesFromApiActions from './bookVersesFromApiActions';\r\nimport * as _bibleVersesFromApiActions from './bibleVersesFromApiActions';\r\n\r\nexport const chapterVersesActions = _chapterVersesActions;\r\nexport const getChapterVersesFromStorageActions = _getChapterVersesFromStorageActions;\r\nexport const getChapterVersesFromApiActions = _getChapterVersesFromApiActions;\r\nexport const bookVersesFromApiActions = _bookVersesFromApiActions;\r\nexport const bibleVersesFromApiActions = _bibleVersesFromApiActions;\r\n\r\nconst { action } = actions;\r\n\r\nexport const LOAD_CHAPTER_VERSES = 'LOAD_CHAPTER_VERSES';\r\nexport const loadChapterVerses = (bibleVersionId, bookId, chapterId) => action(LOAD_CHAPTER_VERSES, {bibleVersionId, bookId, chapterId});\r\n\r\nexport const UPDATE_VERSES_STORAGE = 'UPDATE_VERSES_STORAGE';\r\nexport const updateVersesStorage = (verses) => action(UPDATE_VERSES_STORAGE, {verses});\r\n\r\nexport const DISPLAY_DOWNLOAD_BIBLE_OPTIONS = 'DISPLAY_DOWNLOAD_BIBLE_OPTIONS';\r\nexport const displayDownloadBibleOptions = (bibleVersionId, bookId) => action(DISPLAY_DOWNLOAD_BIBLE_OPTIONS, {bibleVersionId, bookId});","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_BIBLE_BOOKS_FROM_STORAGE = 'LOAD_BIBLE_BOOKS_FROM_STORAGE';\r\nexport const loadBibleBooksFromStorage = (bibleVersionId) => action(LOAD_BIBLE_BOOKS_FROM_STORAGE, {bibleVersionId});\r\n\r\nexport const GET_BIBLE_BOOKS_FROM_STORAGE = createRequestTypes('GET_BIBLE_BOOKS_FROM_STORAGE');\r\nexport const getBibleBooksFromStorage = {\r\n request: () => action(GET_BIBLE_BOOKS_FROM_STORAGE.REQUEST),\r\n success: (id, response) => action(GET_BIBLE_BOOKS_FROM_STORAGE.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_BIBLE_BOOKS_FROM_STORAGE.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_BIBLE_BOOKS_FROM_API = 'LOAD_BIBLE_BOOKS_FROM_API';\r\nexport const loadBibleBooksFromApi = (bibleVersionId) => action(LOAD_BIBLE_BOOKS_FROM_API, {bibleVersionId});\r\n\r\nexport const GET_BIBLE_BOOKS_FROM_API = createRequestTypes('GET_BIBLE_BOOKS_FROM_API');\r\nexport const getBibleBooksFromApi = {\r\n request: () => action(GET_BIBLE_BOOKS_FROM_API.REQUEST),\r\n success: (id, response) => action(GET_BIBLE_BOOKS_FROM_API.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_BIBLE_BOOKS_FROM_API.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_VIEWFILTERS_BIBLEBOOK_FROM_STORAGE = 'LOAD_VIEWFILTERS_BIBLEBOOK_FROM_STORAGE';\r\nexport const loadViewFiltersBibleBookFromStorage = () => action(LOAD_VIEWFILTERS_BIBLEBOOK_FROM_STORAGE);\r\n\r\nexport const GET_VIEWFILTERS_BIBLEBOOK_FROM_STORAGE = createRequestTypes('GET_VIEWFILTERS_BIBLEBOOK_FROM_STORAGE');\r\nexport const getViewFiltersBibleBookFromStorage = {\r\n request: () => action(GET_VIEWFILTERS_BIBLEBOOK_FROM_STORAGE.REQUEST),\r\n success: (id, response) => action(GET_VIEWFILTERS_BIBLEBOOK_FROM_STORAGE.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_VIEWFILTERS_BIBLEBOOK_FROM_STORAGE.FAILURE, {error})\r\n}\r\n\r\nexport const UPDATE_VIEWFILTERS_BIBLEBOOK_STORAGE = 'UPDATE_VIEWFILTERS_BIBLEBOOK_STORAGE';\r\nexport const updateViewFiltersBibleBookStorage = (bookId) => action(UPDATE_VIEWFILTERS_BIBLEBOOK_STORAGE, {bookId});","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nimport * as _getBooksFromStorageActions from './getBooksFromStorageActions';\r\nimport * as _getBooksFromApiActions from './getBooksFromApiActions';\r\nimport * as _viewFiltersBibleBookFromStorageActions from './viewFiltersBibleBookFromStorageActions';\r\n\r\nexport const getBooksFromStorageActions = _getBooksFromStorageActions;\r\nexport const getBooksFromApiActions = _getBooksFromApiActions;\r\nexport const viewFiltersBibleBookFromStorageActions = _viewFiltersBibleBookFromStorageActions;\r\n\r\nconst { action } = actions;\r\n\r\nexport const LOAD_BIBLE_BOOKS = 'LOAD_BIBLE_BOOKS';\r\nexport const loadBibleBooks = (bibleVersionId) => action(LOAD_BIBLE_BOOKS, {bibleVersionId});\r\n\r\nexport const SET_BIBLE_BOOK = 'SET_BIBLE_BOOK';\r\nexport const setBibleBook = (bookId, skipSettingFirstChapter) => action(SET_BIBLE_BOOK, {bookId, skipSettingFirstChapter});\r\n\r\nexport const UPDATE_BOOKS_STORAGE = 'UPDATE_BOOKS_STORAGE';\r\nexport const updateBooksStorage = (books) => action(UPDATE_BOOKS_STORAGE, {books});","if (process.env.NODE_ENV === 'production') { \n module.exports = require('./Root.prod')\n} else { \n module.exports = require('./Root.dev')\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_BIBLE_VERSIONS_FROM_STORAGE = 'LOAD_BIBLE_VERSIONS_FROM_STORAGE';\r\nexport const loadBibleVersionsFromStorage = () => action(LOAD_BIBLE_VERSIONS_FROM_STORAGE);\r\n\r\nexport const GET_BIBLE_VERSIONS_FROM_STORAGE = createRequestTypes('GET_BIBLE_VERSIONS_FROM_STORAGE');\r\nexport const getBibleVersionsFromStorage = {\r\n request: () => action(GET_BIBLE_VERSIONS_FROM_STORAGE.REQUEST),\r\n success: (id, response) => action(GET_BIBLE_VERSIONS_FROM_STORAGE.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_BIBLE_VERSIONS_FROM_STORAGE.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_BIBLE_VERSIONS_FROM_API = 'LOAD_BIBLE_VERSIONS_FROM_API';\r\nexport const loadBibleVersionsFromApi = () => action(LOAD_BIBLE_VERSIONS_FROM_API);\r\n\r\nexport const GET_BIBLE_VERSIONS_FROM_API = createRequestTypes('GET_BIBLE_VERSIONS_FROM_API');\r\nexport const getBibleVersionsFromApi = {\r\n request: () => action(GET_BIBLE_VERSIONS_FROM_API.REQUEST),\r\n success: (id, response) => action(GET_BIBLE_VERSIONS_FROM_API.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_BIBLE_VERSIONS_FROM_API.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_VIEWFILTERS_BIBLEVERSION_FROM_STORAGE = 'LOAD_VIEWFILTERS_BIBLEVERSION_FROM_STORAGE';\r\nexport const loadViewFiltersBibleVersionFromStorage = () => action(LOAD_VIEWFILTERS_BIBLEVERSION_FROM_STORAGE);\r\n\r\nexport const GET_VIEWFILTERS_BIBLEVERSION_FROM_STORAGE = createRequestTypes('GET_VIEWFILTERS_BIBLEVERSION_FROM_STORAGE');\r\nexport const getViewFiltersBibleVersionFromStorage = {\r\n request: () => action(GET_VIEWFILTERS_BIBLEVERSION_FROM_STORAGE.REQUEST),\r\n success: (id, response) => action(GET_VIEWFILTERS_BIBLEVERSION_FROM_STORAGE.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_VIEWFILTERS_BIBLEVERSION_FROM_STORAGE.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nimport * as _getBibleVersionsFromStorageActions from './getBibleVersionsFromStorageActions';\r\nimport * as _getBibleVersionsFromApiActions from './getBibleVersionsFromApiActions';\r\nimport * as _getViewFiltersBibleVersionFromStorageActions from './getViewFiltersBibleVersionFromStorageActions';\r\n\r\nexport const getBibleVersionsFromStorageActions = _getBibleVersionsFromStorageActions;\r\nexport const getBibleVersionsFromApiActions = _getBibleVersionsFromApiActions;\r\nexport const getViewFiltersBibleVersionFromStorageActions = _getViewFiltersBibleVersionFromStorageActions;\r\n\r\nconst { action } = actions;\r\n\r\nexport const LOAD_BIBLE_VERSIONS = 'LOAD_BIBLE_VERSIONS';\r\nexport const loadBibleVersions = () => action(LOAD_BIBLE_VERSIONS);\r\n\r\nexport const SET_BIBLE_VERSION = 'SET_BIBLE_VERSION';\r\nexport const setBibleVersion = (versionId, langId) => action(SET_BIBLE_VERSION, {versionId, langId});\r\n\r\nexport const UPDATE_BIBLE_VERSIONS_STORAGE = 'UPDATE_BIBLE_VERSIONS_STORAGE';\r\nexport const updateBibleVersionsStorage = (bibleVersions) => action(UPDATE_BIBLE_VERSIONS_STORAGE, {bibleVersions});\r\n\r\nexport const UPDATE_VIEWFILTERS_BIBLEVERSION_STORAGE = 'UPDATE_VIEWFILTERS_BIBLEVERSION_STORAGE';\r\nexport const updateViewFiltersBibleVersionStorage = (bibleVersionId, langId) => action(UPDATE_VIEWFILTERS_BIBLEVERSION_STORAGE, {bibleVersionId, langId});","module.exports = __webpack_public_path__ + \"static/media/river.1f72f782.jpg\";","if (process.env.NODE_ENV === 'production') {\n module.exports = require('./configureStore.prod')\n} else {\n module.exports = require('./configureStore.dev')\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const SUBMIT_LOGIN_REQUEST = 'SUBMIT_LOGIN_REQUEST';\r\nexport const submitLoginRequest = (encodedCredentials, shouldRememberUser) => action(SUBMIT_LOGIN_REQUEST, {encodedCredentials, shouldRememberUser});\r\n\r\nexport const LOGIN = createRequestTypes('LOGIN');\r\nexport const login = {\r\n request: () => action(LOGIN.REQUEST),\r\n success: (id, response) => action(LOGIN.SUCCESS, {response}),\r\n failure: (id, error) => action(LOGIN.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const SUBMIT_AUTOSIGNIN_REQUEST = 'SUBMIT_AUTOSIGNIN_REQUEST';\r\nexport const submitAutoSignInRequest = () => action(SUBMIT_AUTOSIGNIN_REQUEST);\r\n\r\nexport const AUTOSIGNIN = createRequestTypes('AUTOSIGNIN');\r\nexport const autoSignIn = {\r\n request: () => action(AUTOSIGNIN.REQUEST),\r\n success: (id, response) => action(AUTOSIGNIN.SUCCESS, {response}),\r\n failure: (id, error) => action(AUTOSIGNIN.FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_SIGNEDIN_USERS_FROM_STORAGE = 'LOAD_SIGNEDIN_USERS_FROM_STORAGE';\r\nexport const loadSignedInUsersFromStorage = () => action(LOAD_SIGNEDIN_USERS_FROM_STORAGE);\r\n\r\nexport const GET_SIGNEDIN_USERS_FROM_STORAGE = createRequestTypes('GET_SIGNEDIN_USERS_FROM_STORAGE');\r\nexport const getSignedInUsersFromStorage = {\r\n request: () => action(GET_SIGNEDIN_USERS_FROM_STORAGE.REQUEST),\r\n success: (id, response) => action(GET_SIGNEDIN_USERS_FROM_STORAGE.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_SIGNEDIN_USERS_FROM_STORAGE.FAILURE, {error})\r\n}\r\n\r\nexport const SAVE_USER_TO_STORAGE = 'SAVE_USER_TO_STORAGE';\r\nexport const saveUserToStorage = (loggedInUser) => action(SAVE_USER_TO_STORAGE, {loggedInUser});","import * as _loginActions from './loginActions';\r\nimport * as _autoSignInActions from './autoSignInActions';\r\nimport * as _signedInUsersStorageActions from './signedInUsersStorageActions';\r\n\r\nexport const loginActions = _loginActions;\r\nexport const autoSignInActions = _autoSignInActions;\r\nexport const signedInUsersStorageActions = _signedInUsersStorageActions;","import * as actions from '../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE = 'LOAD_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE';\r\nexport const loadPersonalVerseOfTheDayFromStorage = (bibleVersionId, date) => action(LOAD_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE, {bibleVersionId, date});\r\n\r\nexport const GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE = createRequestTypes('GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE');\r\n\r\nexport const getPersonalVerseOfTheDayFromStorage = {\r\n request: () => action(GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE.REQUEST),\r\n success: (id, response) => action(GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE.FAILURE, {error})\r\n}\r\n\r\nexport const SAVE_PERSONAL_VERSEOFTHEDAY_TO_STORAGE = 'SAVE_PERSONAL_VERSEOFTHEDAY_TO_STORAGE';\r\nexport const savePersonalVerseOfTheDayToStorage = (date, verseId) => action(SAVE_PERSONAL_VERSEOFTHEDAY_TO_STORAGE, {date, verseId});\r\n\r\nexport const GET_VERSEOFTHEDAY = 'GET_VERSEOFTHEDAY';\r\nexport const getVerseOfTheDay = (bibleVersionId) => action(GET_VERSEOFTHEDAY, {bibleVersionId});\r\n\r\nexport const GENERATE_VERSEOFTHEDAY = createRequestTypes('GENERATE_VERSEOFTHEDAY');\r\nexport const generateVerseOfTheDay = {\r\n request: (date) => action(GENERATE_VERSEOFTHEDAY.REQUEST, {date}),\r\n success: (id, response) => action(GENERATE_VERSEOFTHEDAY.SUCCESS, {response}),\r\n failure: (id, error) => action(GENERATE_VERSEOFTHEDAY.FAILURE, {error})\r\n}","import * as actions from '../../../actions/actionRequestTypes';\r\nimport { VERSEOFTHEDAY } from '../../../common/entities/constants';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const GET_VERSEOFTHEDAY_LIST = createRequestTypes(`GET_${VERSEOFTHEDAY}_LIST`);\r\n\r\nexport const getVerseOfTheDayList = {\r\n request: (bibleVersionId) => action(GET_VERSEOFTHEDAY_LIST.REQUEST, {bibleVersionId}),\r\n success: (id, response) => action(GET_VERSEOFTHEDAY_LIST.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_VERSEOFTHEDAY_LIST.FAILURE, {error})\r\n}","import * as actions from '../../../actions/actionRequestTypes';\r\nimport { VERSEOFTHEDAY } from '../../../common/entities/constants';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_VERSEOFTHEDAY_LIST_FROM_STORAGE = `LOAD_${VERSEOFTHEDAY}_LIST_FROM_STORAGE`;\r\nexport const loadVerseOfTheDayListFromStorage = (bibleVersionId) => action(LOAD_VERSEOFTHEDAY_LIST_FROM_STORAGE, {bibleVersionId});\r\n\r\nexport const GET_VERSEOFTHEDAY_LIST_FROM_STORAGE = createRequestTypes(`GET_${VERSEOFTHEDAY}_LIST_FROM_STORAGE`);\r\nexport const getVerseOfTheDayListFromStorage = {\r\n request: () => action(GET_VERSEOFTHEDAY_LIST_FROM_STORAGE.REQUEST),\r\n success: (id, response) => action(GET_VERSEOFTHEDAY_LIST_FROM_STORAGE.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_VERSEOFTHEDAY_LIST_FROM_STORAGE.FAILURE, {error})\r\n}\r\n\r\nexport const SAVE_VERSEOFTHEDAY_LIST_TO_STORAGE = `SAVE_${VERSEOFTHEDAY}_LIST_TO_STORAGE`;\r\nexport const saveVerseOfTheDayListToStorage = (verses, currentUtcTime) => action(SAVE_VERSEOFTHEDAY_LIST_TO_STORAGE, {verses, currentUtcTime});\r\n\r\nexport const GET_LASTUPDATED_VERSEOFTHEDAY_LIST_SETTING_FROM_STORAGE = createRequestTypes(`GET_LASTUPDATED_${VERSEOFTHEDAY}_LIST_SETTING_FROM_STORAGE`);\r\n\r\nexport const getLastUpdatedVerseOfTheDayListSettingFromStorage = {\r\n request: () => action(GET_LASTUPDATED_VERSEOFTHEDAY_LIST_SETTING_FROM_STORAGE.REQUEST),\r\n success: (id, response) => action(GET_LASTUPDATED_VERSEOFTHEDAY_LIST_SETTING_FROM_STORAGE.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_LASTUPDATED_VERSEOFTHEDAY_LIST_SETTING_FROM_STORAGE.FAILURE, {error})\r\n}","import * as actions from '../../../actions/actionRequestTypes';\r\nimport { VERSEOFTHEDAY } from '../../../common/entities/constants';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_VERSEOFTHEDAY_LIST_FROM_API = `LOAD_${VERSEOFTHEDAY}_LIST_FROM_API`;\r\nexport const loadVerseOfTheDayListFromApi = (bibleVersionId) => action(LOAD_VERSEOFTHEDAY_LIST_FROM_API, {bibleVersionId});\r\n\r\nexport const LOAD_UPDATED_VERSEOFTHEDAY_LIST_FROM_API = `LOAD_UPDATED_${VERSEOFTHEDAY}_LIST_FROM_API`;\r\nexport const loadUpdatedVerseOfTheDayListFromApi = (bibleVersionId, modifiedSinceDateTimeUtc) => action(LOAD_UPDATED_VERSEOFTHEDAY_LIST_FROM_API, {bibleVersionId, modifiedSinceDateTimeUtc});\r\n\r\nexport const GET_VERSEOFTHEDAY_LIST_FROM_API = createRequestTypes(`GET_${VERSEOFTHEDAY}_LIST_FROM_API`);\r\n\r\nexport const getVerseOfTheDayListFromApi = {\r\n request: () => action(GET_VERSEOFTHEDAY_LIST_FROM_API.REQUEST),\r\n success: (id, response) => action(GET_VERSEOFTHEDAY_LIST_FROM_API.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_VERSEOFTHEDAY_LIST_FROM_API.FAILURE, {error})\r\n}","import * as actions from '../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_VERSEOFTHEDAY_FULL_VERSES_FROM_API = 'LOAD_VERSEOFTHEDAY_FULL_VERSES_FROM_API';\r\nexport const loadVerseOfTheDayFullVersesFromApi = (bibleVersionId) => action(LOAD_VERSEOFTHEDAY_FULL_VERSES_FROM_API, {bibleVersionId});\r\n\r\nexport const GET_VERSEOFTHEDAY_FULL_VERSES_FROM_API = createRequestTypes('GET_VERSEOFTHEDAY_FULL_VERSES_FROM_API');\r\n\r\nexport const getVerseOfTheDayFullVersesFromApi = {\r\n request: (bibleVersionId) => action(GET_VERSEOFTHEDAY_FULL_VERSES_FROM_API.REQUEST, {bibleVersionId}),\r\n success: (id, response) => action(GET_VERSEOFTHEDAY_FULL_VERSES_FROM_API.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_VERSEOFTHEDAY_FULL_VERSES_FROM_API.FAILURE, {error})\r\n}","import * as _verseOfTheDayActions from './verseOfTheDayActions';\r\nimport * as _verseOfTheDayListActions from './verseOfTheDayListActions';\r\nimport * as _verseOfTheDayListStorageActions from './verseOfTheDayListStorageActions';\r\nimport * as _verseOfTheDayListFromApiActions from './verseOfTheDayListFromApiActions';\r\nimport * as _verseOfTheDayFullVersesFromApiActions from './verseOfTheDayFullVersesFromApiActions';\r\n\r\nexport const verseOfTheDayActions = _verseOfTheDayActions;\r\n//export const verseOfTheDayListActions = _verseOfTheDayListActions;\r\nexport const verseOfTheDayListStorageActions = _verseOfTheDayListStorageActions;\r\nexport const verseOfTheDayListFromApiActions = _verseOfTheDayListFromApiActions;\r\n//export const verseOfTheDayFullVersesFromApiActions = _verseOfTheDayFullVersesFromApiActions;","export const getCurrentDateTimeLtISO = () => {\r\n const currentDateTime = new Date();\r\n const dd = String(currentDateTime.getDate()).padStart(2, '0');\r\n const mm = String(currentDateTime.getMonth() + 1).padStart(2, '0'); //January is 0!\r\n const yyyy = currentDateTime.getFullYear();\r\n const hh = String(currentDateTime.getHours()).padStart(2, '0');\r\n const minutes = String(currentDateTime.getMinutes()).padStart(2, '0');\r\n const ss = String(currentDateTime.getSeconds()).padStart(2, '0');\r\n const ms = String(Math.round(currentDateTime.getMilliseconds()/100)*100).padStart(3, '0');\r\n\r\n return `${yyyy}-${mm}-${dd}T${hh}:${minutes}:${ss}.${ms}`;\r\n}\r\n\r\nexport const getCurrentDateTimeLt = () => {\r\n const currentDateTime = new Date();\r\n const dd = String(currentDateTime.getDate()).padStart(2, '0');\r\n const mm = String(currentDateTime.getMonth() + 1).padStart(2, '0'); //January is 0!\r\n const yyyy = currentDateTime.getFullYear();\r\n const hh = String(currentDateTime.getHours()).padStart(2, '0');\r\n const minutes = String(currentDateTime.getMinutes()).padStart(2, '0');\r\n const ss = String(currentDateTime.getSeconds()).padStart(2, '0');\r\n const ms = String(currentDateTime.getMilliseconds()).padStart(3, '0');\r\n\r\n return new Date(`${yyyy}-${mm}-${dd}T${hh}:${minutes}:${ss}.${ms}Z`);\r\n}\r\n\r\nexport const getCurrentDate = () => {\r\n let currentDate = new Date(); \r\n return getFormattedDate(currentDate);\r\n}\r\n\r\nconst getFormattedDate = date => {\r\n let dd = String(date.getDate()).padStart(2, '0');\r\n let mm = String(date.getMonth() + 1).padStart(2, '0'); //January is 0!\r\n let yyyy = date.getFullYear(); \r\n\r\n return `${yyyy}-${mm}-${dd}`;\r\n}\r\n\r\nDate.prototype.addDays = function (days) {\r\n let date = new Date(this.valueOf());\r\n date.setDate(date.getDate() + days);\r\n return date;\r\n}\r\n\r\nexport const getDateCaptionFromDateTime = (dateTime) => {\r\n let currentDate = new Date();\r\n let formattedCurrentDate = getFormattedDate(currentDate);\r\n let yesterday = currentDate.addDays(-1);\r\n let formattedYesterday = getFormattedDate(yesterday);\r\n\r\n let date = new Date(dateTime);\r\n let formattedDate = getFormattedDate(date);\r\n \r\n // Should format as: Saturday, October 15, 2020\r\n return formattedDate === formattedCurrentDate \r\n ? 'Today' \r\n : formattedDate === formattedYesterday\r\n ? 'Yesterday' \r\n : date.toLocaleDateString(undefined, {\r\n weekday: 'long',\r\n day : 'numeric',\r\n month : 'long',\r\n year : 'numeric'\r\n });\r\n}\r\n\r\nexport const getTimeCaptionFromDateTime = (dateTime) => {\r\n let date = new Date(dateTime);\r\n return date.toLocaleTimeString(undefined, {\r\n hour: '2-digit',\r\n minute: '2-digit',\r\n });\r\n}\r\n\r\n","import * as ActionTypes from './actions';\r\n\r\nconst { GET_APP_VERSION_FROM_API } = ActionTypes.appVersionFromApiActions;\r\nconst { GET_APP_VERSION_FROM_STORAGE } = ActionTypes.appVersionFromStorageActions;\r\nconst { FORCE_APP_RELOAD } = ActionTypes;\r\n\r\nexport const settings = (state = {latestAppVersion: '', shouldDisplayNewVersionAvailable: false, shouldForceReload: false}, action) => { \r\n const { type } = action\r\n \r\n if (type === GET_APP_VERSION_FROM_API.SUCCESS) {\r\n return {\r\n ...state,\r\n latestAppVersion: action.response.webAppVersion\r\n }\r\n } else if (type === GET_APP_VERSION_FROM_STORAGE.SUCCESS) {\r\n return {\r\n ...state,\r\n shouldDisplayNewVersionAvailable: false\r\n }\r\n } else if (type === GET_APP_VERSION_FROM_STORAGE.FAILURE) {\r\n return {\r\n ...state,\r\n shouldDisplayNewVersionAvailable: true\r\n }\r\n } else if (type === FORCE_APP_RELOAD) {\r\n return {\r\n ...state,\r\n shouldForceReload: true\r\n }\r\n }\r\n\r\n return state\r\n}","import { changePasswordActions } from '../auth/ChangePassword/actions';\r\nimport { forgotPasswordActions } from '../auth/ForgotPassword/actions';\r\nimport { loginActions } from '../auth/Login/actions';\r\nimport { registerActions } from '../auth/Register/actions';\r\nimport { updateUserInfoActions } from '../auth/UpdateUserInfo/actions';\r\n\r\nconst { CHANGE_PASSWORD } = changePasswordActions;\r\nconst { FORGOT_PASSWORD } = forgotPasswordActions;\r\nconst { LOGIN } = loginActions;\r\nconst { REGISTER } = registerActions;\r\nconst { UPDATE_USER_INFO } = updateUserInfoActions;\r\n\r\nconst initialState = {isProcessing: false};\r\nexport const appStatus = (state = initialState, action) => {\r\n const { type } = action;\r\n\r\n switch(type) {\r\n case LOGIN.REQUEST:\r\n case REGISTER.REQUEST:\r\n case UPDATE_USER_INFO.REQUEST:\r\n case CHANGE_PASSWORD.REQUEST:\r\n case FORGOT_PASSWORD.REQUEST:\r\n return {\r\n ...state,\r\n isProcessing: true\r\n }\r\n case LOGIN.SUCCESS:\r\n case LOGIN.FAILURE:\r\n case REGISTER.SUCCESS:\r\n case REGISTER.FAILURE:\r\n case UPDATE_USER_INFO.SUCCESS:\r\n case UPDATE_USER_INFO.FAILURE:\r\n case CHANGE_PASSWORD.SUCCESS:\r\n case CHANGE_PASSWORD.FAILURE:\r\n case FORGOT_PASSWORD.SUCCESS:\r\n case FORGOT_PASSWORD.FAILURE:\r\n return {\r\n ...state,\r\n isProcessing: false\r\n }\r\n default:\r\n return state;\r\n }\r\n}","import * as LoginActionTypes from './Login/actions';\r\nimport * as RegisterActionTypes from './Register/actions';\r\nimport * as UpdateUserInfoActionTypes from './UpdateUserInfo/actions';\r\nimport * as SignOutActionTypes from './SignOut/actions';\r\nimport { setToken } from '../../services/api';\r\n\r\nconst { LOGIN } = LoginActionTypes.loginActions;\r\nconst { AUTOSIGNIN } = LoginActionTypes.autoSignInActions;\r\nconst { REGISTER } = RegisterActionTypes.registerActions;\r\nconst { UPDATE_USER_INFO } = UpdateUserInfoActionTypes.updateUserInfoActions;\r\nconst { SIGNOUT_USER } = SignOutActionTypes.signOutActions;\r\n\r\nexport const loggedinUser = (state = null, action) => { \r\n const { type } = action\r\n\r\n switch (type) {\r\n case LOGIN.SUCCESS:\r\n case REGISTER.SUCCESS:\r\n case UPDATE_USER_INFO.SUCCESS:\r\n case AUTOSIGNIN.SUCCESS:\r\n setToken(action.response.encodedToken);\r\n return { ...action.response };\r\n case SIGNOUT_USER:\r\n setToken(null);\r\n return null;\r\n default:\r\n return state;\r\n }\r\n}","export const DEFAULT_LANGID = 2;\r\nexport const DEFAULT_VERSIONID = 3;","import * as ActionTypes from './actions';\r\nimport { DEFAULT_VERSIONID, DEFAULT_LANGID } from './constants';\r\n\r\nconst { GET_BIBLE_VERSIONS_FROM_STORAGE } = ActionTypes.getBibleVersionsFromStorageActions;\r\nconst { GET_BIBLE_VERSIONS_FROM_API } = ActionTypes.getBibleVersionsFromApiActions;\r\nconst { GET_VIEWFILTERS_BIBLEVERSION_FROM_STORAGE } = ActionTypes.getViewFiltersBibleVersionFromStorageActions;\r\n\r\nexport const bibleVersion = (state = {id: DEFAULT_VERSIONID, langId: DEFAULT_LANGID, isLoading: false, isLoadingSuccessful: false}, action) => { \r\n const { type } = action\r\n\r\n if (type === ActionTypes.SET_BIBLE_VERSION) {\r\n return {\r\n ...state,\r\n id: action.versionId,\r\n langId: action.langId\r\n }\r\n } else if (type === GET_VIEWFILTERS_BIBLEVERSION_FROM_STORAGE.SUCCESS) {\r\n return {\r\n ...state,\r\n id: action.response.bibleVersion.versionId,\r\n langId: action.response.bibleVersion.langId\r\n }\r\n } else if ((type === GET_BIBLE_VERSIONS_FROM_STORAGE.REQUEST) || (type === GET_BIBLE_VERSIONS_FROM_API.REQUEST)) {\r\n return {\r\n ...state,\r\n isLoading: true\r\n }\r\n } else if ((type === GET_BIBLE_VERSIONS_FROM_STORAGE.SUCCESS) || (type === GET_BIBLE_VERSIONS_FROM_API.SUCCESS)) {\r\n return {\r\n ...state,\r\n isLoading: false,\r\n isLoadingSuccessful: true\r\n }\r\n } else if ((type === GET_BIBLE_VERSIONS_FROM_STORAGE.FAILURE) || (type === GET_BIBLE_VERSIONS_FROM_API.FAILURE)) {\r\n return {\r\n ...state,\r\n isLoading: false,\r\n isLoadingSuccessful: false\r\n }\r\n }\r\n\r\n return state\r\n}","import * as ActionTypes from './actions';\r\n\r\nconst { GET_BIBLE_BOOKS_FROM_STORAGE } = ActionTypes.getBooksFromStorageActions;\r\nconst { GET_BIBLE_BOOKS_FROM_API } = ActionTypes.getBooksFromApiActions;\r\nconst { GET_VIEWFILTERS_BIBLEBOOK_FROM_STORAGE } = ActionTypes.viewFiltersBibleBookFromStorageActions;\r\n\r\nexport const bibleBook = (state = {id: 0, isLoading: false, isLoadingSuccessful: false}, action) => { \r\n const { type, bookId } = action\r\n \r\n if (type === ActionTypes.SET_BIBLE_BOOK) {\r\n return {\r\n ...state,\r\n id: bookId\r\n }\r\n } else if (type === GET_VIEWFILTERS_BIBLEBOOK_FROM_STORAGE.SUCCESS) {\r\n return {\r\n ...state,\r\n id: action.response.bibleBook.bookId\r\n }\r\n } else if ((type === GET_BIBLE_BOOKS_FROM_STORAGE.REQUEST) || (type === GET_BIBLE_BOOKS_FROM_API.REQUEST)) {\r\n return {\r\n ...state,\r\n isLoading: true\r\n }\r\n } else if ((type === GET_BIBLE_BOOKS_FROM_STORAGE.SUCCESS) || (type === GET_BIBLE_BOOKS_FROM_API.SUCCESS)) {\r\n return {\r\n ...state,\r\n isLoading: false,\r\n isLoadingSuccessful: true\r\n }\r\n } else if ((type === GET_BIBLE_BOOKS_FROM_STORAGE.FAILURE) || (type === GET_BIBLE_BOOKS_FROM_API.FAILURE)) {\r\n return {\r\n ...state,\r\n isLoading: false,\r\n isLoadingSuccessful: false\r\n }\r\n }\r\n\r\n return state\r\n}","import * as ActionTypes from './actions';\r\n\r\nconst { GET_BOOK_CHAPTERS_FROM_STORAGE } = ActionTypes.getBookChaptersFromStorageActions;\r\nconst { GET_BOOK_CHAPTERS_FROM_API } = ActionTypes.getBookChaptersFromApiActions;\r\nconst { GET_BIBLE_CHAPTERS_FROM_API } = ActionTypes.bibleChaptersFromApiActions\r\nconst { GET_VIEWFILTERS_BOOKCHAPTER_FROM_STORAGE } = ActionTypes.viewFiltersBookChapterFromStorageActions;\r\n\r\nexport const bookChapter = (state = {id: 0, isLoading: false, isLoadingSuccessful: false}, action) => { \r\n const { type, chapterId } = action\r\n\r\n if (type === ActionTypes.SET_BOOK_CHAPTER) {\r\n return {\r\n ...state,\r\n id: chapterId\r\n }\r\n } else if (type === GET_VIEWFILTERS_BOOKCHAPTER_FROM_STORAGE.SUCCESS) {\r\n return {\r\n ...state,\r\n id: action.response.bookChapter.chapterId\r\n }\r\n } else if ((type === GET_BOOK_CHAPTERS_FROM_STORAGE.REQUEST) || (type === GET_BOOK_CHAPTERS_FROM_API.REQUEST) || (type === GET_BIBLE_CHAPTERS_FROM_API.REQUEST)) {\r\n return {\r\n ...state,\r\n isLoading: true\r\n }\r\n } else if ((type === GET_BOOK_CHAPTERS_FROM_STORAGE.SUCCESS) || (type === GET_BOOK_CHAPTERS_FROM_API.SUCCESS) || (type === GET_BIBLE_CHAPTERS_FROM_API.SUCCESS)) {\r\n return {\r\n ...state,\r\n isLoading: false,\r\n isLoadingSuccessful: true\r\n }\r\n } else if ((type === GET_BOOK_CHAPTERS_FROM_STORAGE.FAILURE) || (type === GET_BOOK_CHAPTERS_FROM_API.FAILURE) || (type === GET_BIBLE_CHAPTERS_FROM_API.FAILURE)) {\r\n return {\r\n ...state,\r\n isLoading: false,\r\n isLoadingSuccessful: false\r\n }\r\n }\r\n\r\n return state\r\n}","import * as ActionTypes from './actions';\r\n\r\nconst { GET_CHAPTER_VERSES_FROM_STORAGE } = ActionTypes.getChapterVersesFromStorageActions;\r\nconst { GET_CHAPTER_VERSES_FROM_API } = ActionTypes.getChapterVersesFromApiActions;\r\nconst { LOAD_BOOK_VERSES_FROM_API } = ActionTypes.bookVersesFromApiActions;\r\nconst { LOAD_BIBLE_VERSES_FROM_API } = ActionTypes.bibleVersesFromApiActions;\r\nconst { DISPLAY_DOWNLOAD_BIBLE_OPTIONS } = ActionTypes;\r\n\r\nconst initialState = {\r\n isLoading: false,\r\n isLoadingSuccessful: false,\r\n canDisplayDownloadBibleOptions: false\r\n}\r\n\r\nexport const chapterVerses = (state = initialState, action) => {\r\n const { type } = action\r\n\r\n switch (type) {\r\n case DISPLAY_DOWNLOAD_BIBLE_OPTIONS:\r\n return {\r\n ...state,\r\n canDisplayDownloadBibleOptions: true\r\n }\r\n case LOAD_BOOK_VERSES_FROM_API:\r\n case LOAD_BIBLE_VERSES_FROM_API:\r\n return {\r\n ...state,\r\n canDisplayDownloadBibleOptions: false\r\n }\r\n case GET_CHAPTER_VERSES_FROM_STORAGE.REQUEST:\r\n case GET_CHAPTER_VERSES_FROM_API.REQUEST:\r\n return {\r\n ...state,\r\n isLoading: true,\r\n canDisplayDownloadBibleOptions: false\r\n }\r\n case GET_CHAPTER_VERSES_FROM_STORAGE.SUCCESS:\r\n case GET_CHAPTER_VERSES_FROM_API.SUCCESS:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n isLoadingSuccessful: true\r\n }\r\n case GET_CHAPTER_VERSES_FROM_STORAGE.FAILURE:\r\n case GET_CHAPTER_VERSES_FROM_API.FAILURE:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n isLoadingSuccessful: false\r\n }\r\n default:\r\n return state;\r\n }\r\n}","import * as ActionTypes from './actions';\r\n\r\nconst { GET_VERSEOFTHEDAY, GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE, GENERATE_VERSEOFTHEDAY } = ActionTypes.verseOfTheDayActions;\r\n\r\nexport const verseOfTheDay = (state = {verseVersionId: 0, date: '', isLoading: false, isLoadingSuccessful: false}, action) => { \r\n const { type } = action\r\n\r\n switch (type) {\r\n case GET_VERSEOFTHEDAY:\r\n return {\r\n ...state,\r\n isLoading: true\r\n }\r\n case GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE.SUCCESS:\r\n case GENERATE_VERSEOFTHEDAY.SUCCESS:\r\n return {\r\n ...state,\r\n verseVersionId: `${action.response.verseOfTheDay.versionId}-${action.response.verseOfTheDay.verseId}`,\r\n date: action.response.date,\r\n isLoading: false,\r\n isLoadingSuccessful: true\r\n }\r\n case GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE.FAILURE:\r\n case GENERATE_VERSEOFTHEDAY.FAILURE:\r\n return {\r\n ...state,\r\n isLoading: false,\r\n isLoadingSuccessful: false\r\n }\r\n default:\r\n return state;\r\n }\r\n}","import { GET_ENTITY_LIST } from \"../../common/entities/actions/entityListActions\";\r\nimport { BIBLEHISTORY } from '../../common/entities/constants';\r\n\r\n\r\nconst initialState = {isLoading: false, isLoadingSuccessful: false, items: {}};\r\nexport const bibleHistory = (state = initialState, action) => {\r\n const { type } = action;\r\n\r\n switch (type) {\r\n case GET_ENTITY_LIST(BIBLEHISTORY).SUCCESS:\r\n if (action.response && action.response.length > 0)\r\n return {\r\n ...state,\r\n items: action.response\r\n }\r\n else\r\n return state;\r\n default:\r\n return state;\r\n }\r\n}","import { schema, normalize } from 'normalizr';\r\nimport merge from 'lodash/merge';\r\nimport _ from 'lodash';\r\nimport * as ActionTypes from '../actions';\r\nimport { bookVersesFromApiActions } from '../features/Bible/Verses/actions';\r\nimport { addEntityActions, entityListActions } from '../common/entities/actions';\r\nimport { HIGHLIGHTEDVERSES } from '../common/entities/constants';\r\nimport { combineReducers } from 'redux';\r\nimport { systemSettings } from '../features/Settings/System/reducer';\r\nimport { settings } from '../features/Version/reducer';\r\nimport { appStatus } from '../features/Home/reducer';\r\nimport { loggedinUser } from '../features/auth/reducer';\r\nimport { bibleVersion } from '../features/Bible/Versions/reducer';\r\nimport { bibleBook } from '../features/Bible/Books/reducer';\r\nimport { bookChapter } from '../features/Bible/Chapters/reducer';\r\nimport { chapterVerses } from '../features/Bible/Verses/reducer';\r\nimport { verseOfTheDay } from '../features/VerseOfTheDay/reducer';\r\nimport { bibleHistory } from '../features/BibleHistory/reducer';\r\nimport { ALERT_TYPE_SUCCESS, ALERT_TYPE_ERROR } from '../constants';\r\nimport { viewFilters } from './viewFilters';\r\n\r\nconst { ADD_ENTITY_STORAGE } = addEntityActions;\r\nconst { GET_ENTITY_LIST } = entityListActions;\r\n\r\n// Updates an entity cache in response to any action with response.entities.\r\nconst entities= (state = { bibleVersions:{}, books: {}, chapters: {}, verses: {}, verseOfTheDay: {} }, action) => {\r\n if (action.response && action.response.entities) {\r\n if (action.response.entities.verseOfTheDay) {\r\n const verseOfTheDayEntities = _.values(action.response.entities.verseOfTheDay);\r\n let vodVerses = verseOfTheDayEntities.map( vodVrs => {\r\n let verse = {verseId: vodVrs.verseId, versionId: vodVrs.versionId, isVerseOfTheDay: true};\r\n if (vodVrs.verseText) {\r\n verse = {...verse, verseOfTheDayText: vodVrs.verseText};\r\n }\r\n\r\n return verse;\r\n });\r\n\r\n const vodVerseSchema = new schema.Entity('verses', {}, {idAttribute: 'verseId'});\r\n const vodVerseSchemaArray = [ vodVerseSchema ];\r\n let normalizedvod = normalize(vodVerses, vodVerseSchemaArray);\r\n normalizedvod = {...normalizedvod}; \r\n state = merge({}, state, normalizedvod.entities);\r\n\r\n return {\r\n ...state,\r\n verseOfTheDay: action.response.entities.verseOfTheDay\r\n }\r\n }\r\n else {\r\n return merge({}, state, action.response.entities);\r\n } \r\n }\r\n\r\n const { type, response } = action; \r\n\r\n switch (type) {\r\n case ADD_ENTITY_STORAGE(HIGHLIGHTEDVERSES).SUCCESS: \r\n let verse = {verseId: response.verseId, versionId: response.versionId, isHighlighted: true};\r\n if (response.highlightedText) {\r\n verse = {...verse, highlightedText: response.highlightedText}; \r\n }\r\n \r\n let normalizedVerse = {[verse.verseId]: verse}\r\n const { verses } = state; \r\n const result = merge(verses, normalizedVerse)\r\n \r\n return {\r\n ...state,\r\n verses: result\r\n }\r\n case GET_ENTITY_LIST(HIGHLIGHTEDVERSES).SUCCESS:\r\n if (response && response.length > 0) {\r\n let highlightedVerses = response.map(highlightedVrs => {\r\n let verse = { verseId: highlightedVrs.verseId, versionId: highlightedVrs.versionId, isHighlighted: true };\r\n if (highlightedVrs.highlightedText) {\r\n verse = { ...verse, highlightedText: highlightedVrs.highlightedText };\r\n }\r\n\r\n return verse;\r\n });\r\n\r\n const highlightedVerseSchema = new schema.Entity('verses', {}, { idAttribute: 'verseId' });\r\n const highlightedVerseSchemaArray = [highlightedVerseSchema];\r\n let normalized = normalize(highlightedVerses, highlightedVerseSchemaArray);\r\n normalized = { ...normalized };\r\n return merge({}, state, normalized.entities);\r\n } else return state;\r\n \r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nconst alertMessage = (state = null, action) => { \r\n const { type, error } = action\r\n\r\n switch (type) {\r\n case ActionTypes.RESET_ALERT_MESSAGE:\r\n return null;\r\n case ActionTypes.SET_ALERT_MESSAGE:\r\n return {\r\n ...state,\r\n alertType: action.alertType,\r\n alertText: action.alertText\r\n }\r\n case bookVersesFromApiActions.GET_BOOK_VERSES_FROM_API.SUCCESS:\r\n return {\r\n ...state,\r\n alertType: ALERT_TYPE_SUCCESS,\r\n alertText: 'Verses saved to local storage successfully!'\r\n } \r\n default:\r\n if (error) {\r\n let errorMessage = 'Error encountered while processing request';\r\n if (typeof error === 'string') {\r\n errorMessage = error;\r\n }\r\n return {\r\n ...state,\r\n alertType: ALERT_TYPE_ERROR,\r\n alertText: errorMessage\r\n }\r\n }\r\n\r\n return state;\r\n }\r\n}\r\n\r\nconst logMessages = (state = [], action) => {\r\n const { type } = action;\r\n\r\n switch (type) {\r\n case ActionTypes.RESET_LOG_MESSAGES:\r\n return [];\r\n case ActionTypes.ADD_LOG_MESSAGE:\r\n return [\r\n ...state, action.msg \r\n ]; \r\n default:\r\n return state;\r\n }\r\n}\r\n\r\nconst rootReducer = combineReducers({\r\n systemSettings,\r\n settings,\r\n entities,\r\n appStatus,\r\n loggedinUser,\r\n viewFilters,\r\n bibleVersion,\r\n bibleBook,\r\n bookChapter,\r\n chapterVerses,\r\n verseOfTheDay,\r\n bibleHistory, \r\n alertMessage,\r\n logMessages,\r\n})\r\n\r\nexport default rootReducer","import * as ActionTypes from './actions';\r\nimport _ from 'lodash';\r\n\r\nexport const systemSettings = (state = null, action) => { \r\n const { type, response } = action;\r\n\r\n if (type === ActionTypes.GET_SETTINGS.SUCCESS) {\r\n return _.merge({}, state, response);\r\n }\r\n\r\n return state\r\n}","import { APIURL, BASEURL, LOGLEVEL } from './helper';\r\n\r\nexport const fetchSystemSettingsRequest = () => loadSystemSettings();\r\n\r\nconst loadSystemSettings = () => {\r\n return ({response: {\r\n 'apiUrl': `${APIURL}`,\r\n 'baseUrl': `${BASEURL}`,\r\n 'logLevel': `${LOGLEVEL}`\r\n }})\r\n\r\n // return fetch(`${BASEURL}config.json`)\r\n // .then((response) => response.json())\r\n // .then(\r\n // response => ({ response }),\r\n // error => ({ error: error.message || 'Something bad happened' })\r\n // )\r\n}","import { put, call } from 'redux-saga/effects';\r\n\r\n// resuable fetch Subroutine\r\n// entity : aircraftList | repo | starred | stargazers\r\n// apiFn : api.fetchAircraftList | api.fetchRepo | ...\r\n// id : login | fullName\r\n// url : next page url. If not provided will use pass it to apiFn\r\nexport const fetchEntity = function* (entity, apiFn, id, param1, param2, param3) {\r\n yield put (entity.request(id));\r\n const {response, error} = yield call(apiFn, id, param1, param2, param3);\r\n if (response) {\r\n yield put(entity.success(id, response));\r\n }\r\n else {\r\n yield put(entity.failure(id, error));\r\n }\r\n}\r\n\r\nexport const settle = (fn, ...args) =>\r\n call(function* () {\r\n try {\r\n return { status: \"fulfilled\", value: yield call(fn, ...args) };\r\n } catch (err) {\r\n return { status: \"rejected\", reason: err };\r\n }\r\n });","export const endpointUrl = (apiUrl, endpoint) => (endpoint.indexOf(apiUrl) === -1) ? apiUrl + endpoint : endpoint;","import { endpointUrl } from './apiHelper';\r\n\r\nlet apiUrl = null;\r\n\r\nexport const setApiUrl = apiServiceUrl => { apiUrl = apiServiceUrl; }\r\n\r\nconst TOKEN_RESOURCE = 'token';\r\nexport const tokenResourceUrl = () => endpointUrl(apiUrl, TOKEN_RESOURCE);\r\nexport const autoSignInResourceUrl = () => `${tokenResourceUrl()}/autoSignIn`;\r\nexport const forgotPasswordUrl = () => `${tokenResourceUrl()}/forgotPassword`;\r\n\r\n\r\nconst USERS_RESOURCE = 'users';\r\nexport const usersResourceUrl = () => endpointUrl(apiUrl, USERS_RESOURCE);\r\nexport const changePasswordUrl = () => `${usersResourceUrl()}/password`;\r\nexport const updateUserInfoUrl = userId => `${usersResourceUrl()}/${userId}`;\r\n\r\nconst ENTITIES_RESOURCE = 'entities';\r\nconst getUrlFilter = filter => {\r\n if (filter) {\r\n return Object.keys(filter).map(key => key + '=' + filter[key]).join('&')\r\n } else {\r\n return '';\r\n } \r\n};\r\nconst entitiesResourceFilter = filter => filter ? `?${getUrlFilter(filter)}` : '';\r\nexport const entitiesResourceUrl = (entityName, filter) => `${endpointUrl(apiUrl, ENTITIES_RESOURCE)}/${entityName}${entitiesResourceFilter(filter)}`;\r\n\r\nconst VERSEOFTHEDAY_RESOURCE = 'verseOfTheDay';\r\nconst verseOfTheDayResourceUrl = () => endpointUrl(apiUrl, VERSEOFTHEDAY_RESOURCE);\r\nexport const allVersesResourceUrl = (bibleVersionId) => { return `${verseOfTheDayResourceUrl()}?versionId=${bibleVersionId}` }\r\nexport const updatedVersesResourceUrl = (bibleVersionId, modifiedSinceDateTimeUtc) => { return `${allVersesResourceUrl(bibleVersionId)}&modifiedDateTimeUtc=${modifiedSinceDateTimeUtc}` }\r\n","import { take, call, fork, select, put } from 'redux-saga/effects';\r\nimport { VALIDATE_APP_VERSION, appVersionFromApiActions, appVersionFromStorageActions } from '../actions';\r\nimport { fetchAppVersionApi } from '../api';\r\nimport { fetchEntity } from '../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchAppVersion = fetchEntity.bind(null, appVersionFromApiActions.getAppVersionFromApi, fetchAppVersionApi);\r\n\r\nconst getApiUrl = state => state.systemSettings.apiUrl;\r\n\r\nfunction* loadAppVersionFromApi() {\r\n let apiUrl = yield select(getApiUrl);\r\n yield call(fetchAppVersion, apiUrl);\r\n}\r\n\r\nfunction* validateAppVersion(latestAppVersion) {\r\n if (latestAppVersion !== process.env.REACT_APP_VERSION) {\r\n yield put(appVersionFromStorageActions.loadAppVersionFromStorage(latestAppVersion));\r\n }\r\n}\r\n\r\nexport const watchLoadAppVersionFromApi = function* () {\r\n const { GET_APP_VERSION_FROM_API } = appVersionFromApiActions;\r\n\r\n while(true) {\r\n yield take(VALIDATE_APP_VERSION); \r\n yield fork(loadAppVersionFromApi);\r\n\r\n const action = yield take([GET_APP_VERSION_FROM_API.SUCCESS, GET_APP_VERSION_FROM_API.FAILURE]);\r\n if (action.type === GET_APP_VERSION_FROM_API.SUCCESS) {\r\n yield fork(validateAppVersion, action.response.webAppVersion); \r\n }\r\n }\r\n}","import { callApi } from '../../services/api';\r\nimport { endpointUrl } from '../../services/apiHelper';\r\n\r\nexport const APP_VERSION_RESOURCE = 'appVersion';\r\nexport const appVersionResourceUrl = apiUrl => endpointUrl(apiUrl, APP_VERSION_RESOURCE);\r\n\r\n// appVersion api services\r\nexport const fetchAppVersionApi = (apiUrl) => callApi(appVersionResourceUrl(apiUrl));","import Dexie from 'dexie';\r\n\r\nexport const indexedDb = new Dexie('ChristTheBelovedDb');\r\n\r\n// create stores\r\nindexedDb.version(1).stores({\r\n bibleVersions: 'versionId',\r\n books: 'bookLangId, langId', // might need bookId\r\n chapters: 'chapterLangId, langId, bookId',\r\n verses: 'verseVersionId, versionId, chapterId',\r\n viewFilters: 'filterName'\r\n});\r\nindexedDb.version(2).stores({\r\n verses: 'verseVersionId, versionId, chapterId, verseId',\r\n settings: 'settingName',\r\n verseOfTheDayMasterList: 'verseId',\r\n personalVerseOfTheDay: 'date, verseId'\r\n});\r\nindexedDb.version(3).stores({\r\n verseOfTheDayMasterList: null,\r\n verseOfTheDayList: 'verseVersionId, verseId, versionId'\r\n});\r\nindexedDb.version(4).stores({\r\n //verseOfTheDayMasterList: null,\r\n userSettings: '[settingName+userId], settingName',\r\n});\r\nindexedDb.version(5).stores({\r\n highlightedVerses: 'storageId, verseId, chapterId',\r\n});\r\nindexedDb.version(6).stores({\r\n bibleHistory: 'readDateTimeLt, chapterId, userId',\r\n});","export const SETTINGS_WEBAPPVERSION_NAME = 'webAppVersion';\r\nexport const SETTINGS_LASTUPDATED_VERSEOFTHEDAYLIST_NAME = 'lastUpdated_VerseOfTheDayList';\r\nexport const SETTINGS_LASTUPDATED_ENTITYLIST_NAME = (entityName, versionId) => versionId ? `lastUpdated_${entityName}List_versionId_${versionId}` : `lastUpdated_${entityName}List`;\r\nexport const SETTINGS_LASTUPLOADED_ENTITYLIST_NAME = (entityName, versionId) => versionId ? `lastUploaded_${entityName}List_versionId_${versionId}` : `lastUploaded_${entityName}List`;\r\n\r\nexport const USER_SETTINGS_SIGNEDIN_USERS = 'signedInUsers';","import { indexedDb } from '../../../services/indexedDb';\r\nimport { SETTINGS_WEBAPPVERSION_NAME } from '../../constants';\r\n\r\nexport const saveAppVersionToLocalStore = (appVersion) => {\r\n indexedDb.settings.put({settingName: SETTINGS_WEBAPPVERSION_NAME, settingValue: appVersion})\r\n .catch(error => {\r\n });\r\n}","import { indexedDb } from '../../../services/indexedDb';\r\nimport { SETTINGS_WEBAPPVERSION_NAME } from '../../constants';\r\n\r\nconst loadAppVersionFromLocalStore = () => {\r\n return indexedDb.settings.get(SETTINGS_WEBAPPVERSION_NAME); \r\n}\r\n\r\nexport const fetchAppVersionFromStorage = (latestAppVersion) => {\r\n return loadAppVersionFromLocalStore()\r\n .then(appVersion => {\r\n if (appVersion) { \r\n if (appVersion.settingValue !== latestAppVersion) {\r\n } else {\r\n const response = {};\r\n return { ...response, appVersion }\r\n } \r\n } else {\r\n //throw new Error('No webAppVersion found in local storage!');\r\n }\r\n })\r\n .catch(error => {\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n ); \r\n}","import { indexedDb } from '../../../services/indexedDb';\r\nimport { SETTINGS_WEBAPPVERSION_NAME } from '../../constants';\r\n\r\nexport const deleteAppVersionFromStorage = () => {\r\n indexedDb.settings.delete(SETTINGS_WEBAPPVERSION_NAME)\r\n .catch(error => {\r\n });\r\n}","import * as _saveAppVersionToLocalStoreDb from './saveAppVersionToLocalStoreDb';\r\nimport * as _fetchAppVersionFromStorageService from './fetchAppVersionFromStorageService';\r\nimport * as _deleteAppVersionFromStorageService from './deleteAppVersionFromStorageService';\r\n\r\nexport const saveAppVersionToLocalStoreDb = _saveAppVersionToLocalStoreDb;\r\nexport const fetchAppVersionFromStorageService = _fetchAppVersionFromStorageService;\r\nexport const deleteAppVersionFromStorageService = _deleteAppVersionFromStorageService;","import { take, call, fork } from 'redux-saga/effects';\r\nimport { appVersionFromStorageActions } from '../actions';\r\nimport { fetchAppVersionFromStorageService } from '../indexedDbStorage';\r\nimport { fetchEntity } from '../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchAppVersionFromStorage = fetchEntity.bind(null, appVersionFromStorageActions.getAppVersionFromStorage, fetchAppVersionFromStorageService.fetchAppVersionFromStorage);\r\n\r\nfunction* loadAppVersion(appVersion) {\r\n yield call(fetchAppVersionFromStorage, appVersion); \r\n}\r\n\r\nexport const watchLoadAppVersionFromStorage = function* () {\r\n const { GET_APP_VERSION_FROM_STORAGE } = appVersionFromStorageActions;\r\n \r\n while(true) {\r\n const {appVersion} = yield take(appVersionFromStorageActions.LOAD_APP_VERSION_FROM_STORAGE);\r\n yield fork(loadAppVersion, appVersion);\r\n \r\n const action = yield take([\r\n GET_APP_VERSION_FROM_STORAGE.SUCCESS, \r\n GET_APP_VERSION_FROM_STORAGE.FAILURE\r\n ]);\r\n \r\n if (action.type === GET_APP_VERSION_FROM_STORAGE.FAILURE) { \r\n } \r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { UPDATE_APP_VERSION_STORAGE } from '../actions/appVersionFromStorageActions';\r\nimport { saveAppVersionToLocalStoreDb } from '../indexedDbStorage';\r\n\r\nfunction* updateLocalStorage(appVersion) {\r\n yield call(saveAppVersionToLocalStoreDb.saveAppVersionToLocalStore, appVersion);\r\n}\r\n\r\nexport const watchUpdateAppVersionLocalStorage = function* () {\r\n while(true) {\r\n const {appVersion} = yield take(UPDATE_APP_VERSION_STORAGE);\r\n yield fork(updateLocalStorage, appVersion);\r\n }\r\n}","import { fork, all } from 'redux-saga/effects';\r\nimport { watchLoadAppVersionFromApi } from './getAppVersionFromApiSaga';\r\nimport { watchLoadAppVersionFromStorage } from './getAppVersionFromStorageSaga';\r\nimport { watchUpdateAppVersionLocalStorage } from './updateAppVersionLocalStorageSaga';\r\n\r\nexport const watchAppVersionRequests = function*() {\r\n yield all([ \r\n fork(watchLoadAppVersionFromApi),\r\n fork(watchLoadAppVersionFromStorage),\r\n fork(watchUpdateAppVersionLocalStorage) \r\n ])\r\n}","import { take, fork, select, put } from 'redux-saga/effects';\r\nimport _ from 'lodash';\r\nimport { LOAD_BIBLE_VERSIONS, getBibleVersionsFromStorageActions } from '../actions';\r\n\r\nconst getBibleVersions = (state) => state.entities.bibleVersions;\r\n\r\nfunction* loadBibleVersions() {\r\n let bibleVersions = yield select(getBibleVersions);\r\n\r\n if (_.isEmpty(bibleVersions)) { \r\n yield put(getBibleVersionsFromStorageActions.loadBibleVersionsFromStorage());\r\n }\r\n}\r\n\r\nexport const watchLoadBibleVersions = function* () {\r\n while(true) {\r\n yield take(LOAD_BIBLE_VERSIONS);\r\n yield fork(loadBibleVersions);\r\n }\r\n}","import { schema } from 'normalizr';\r\n\r\nconst bibleVersionSchema = new schema.Entity('bibleVersions', {}, {idAttribute: 'versionId'});\r\n\r\n// Schema for BibleVersions API response.\r\nexport const bibleVersionApiSchemaArray = { items: [ bibleVersionSchema ] };\r\n\r\nexport const bibleVersionStorageSchemaArray = [bibleVersionSchema];","import { indexedDb } from '../../../../services/indexedDb';\r\nimport { VIEWFILTERS_BIBLEVERSION_NAME } from '../../constants';\r\n\r\nexport const saveViewFiltersBibleVersionToLocalStore = (bibleVersionId, langId) => {\r\n indexedDb.viewFilters.put({filterName: VIEWFILTERS_BIBLEVERSION_NAME, versionId: bibleVersionId, langId: langId})\r\n .catch(error => {\r\n });\r\n}","export const VIEWFILTERS_BIBLEVERSION_NAME = 'bibleVersion';\r\nexport const VIEWFILTERS_BIBLEBOOK_NAME = 'bibleBook';\r\nexport const VIEWFILTERS_BOOKCHAPTER_NAME = 'bookChapter';","import { indexedDb } from '../../../../services/indexedDb';\r\nimport { VIEWFILTERS_BIBLEVERSION_NAME } from '../../constants';\r\n\r\nconst loadViewFiltersBibleVersionFromLocalStore = () => {\r\n return indexedDb.viewFilters.get(VIEWFILTERS_BIBLEVERSION_NAME); \r\n}\r\n\r\nexport const fetchViewFiltersBibleVersionFromStorage = () => {\r\n return loadViewFiltersBibleVersionFromLocalStore()\r\n .then(bibleVersion => {\r\n if (bibleVersion) { \r\n const response = {};\r\n return { ...response, bibleVersion }\r\n } else {\r\n }\r\n })\r\n .catch(error => {\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n ); \r\n}","import { indexedDb } from '../../../../services/indexedDb';\r\nimport _ from 'lodash';\r\nimport * as _saveViewFiltersBibleVersionToLocalStoreDb from './saveViewFiltersBibleVersionToLocalStoreDb';\r\nimport * as _fetchViewFiltersBibleVersionFromStorageService from './fetchViewFiltersBibleVersionFromStorageService';\r\n\r\nexport const saveViewFiltersBibleVersionToLocalStoreDb = _saveViewFiltersBibleVersionToLocalStoreDb;\r\nexport const fetchViewFiltersBibleVersionFromStorageService = _fetchViewFiltersBibleVersionFromStorageService;\r\n\r\nexport const addBibleVersionsToLocalStore = (bibleVersions) => {\r\n const bibleVersionsList = _.values(bibleVersions);\r\n indexedDb.bibleVersions.bulkPut(bibleVersionsList).then(function(lastKey) {\r\n });\r\n}\r\n\r\nexport const loadBibleVersionsFromLocalStore = () => {\r\n return indexedDb.bibleVersions.toArray();\r\n}","import { take, call, fork, put } from 'redux-saga/effects';\r\nimport { getBibleVersionsFromStorageActions, getBibleVersionsFromApiActions } from '../actions';\r\nimport { fetchBibleVersionsFromStorageService } from '../indexedDbStorage/service';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchBibleVersionsFromStorage = fetchEntity.bind(null, getBibleVersionsFromStorageActions.getBibleVersionsFromStorage, fetchBibleVersionsFromStorageService);\r\n\r\nfunction* loadBibleVersions() {\r\n yield call(fetchBibleVersionsFromStorage); \r\n}\r\n\r\nexport const watchLoadBibleVersionsFromStorage = function* () {\r\n const { GET_BIBLE_VERSIONS_FROM_STORAGE } = getBibleVersionsFromStorageActions;\r\n \r\n while(true) {\r\n yield take(getBibleVersionsFromStorageActions.LOAD_BIBLE_VERSIONS_FROM_STORAGE);\r\n yield fork(loadBibleVersions);\r\n \r\n const action = yield take([GET_BIBLE_VERSIONS_FROM_STORAGE.SUCCESS, GET_BIBLE_VERSIONS_FROM_STORAGE.FAILURE]);\r\n if (action.type === GET_BIBLE_VERSIONS_FROM_STORAGE.FAILURE) {\r\n yield put(getBibleVersionsFromApiActions.loadBibleVersionsFromApi());\r\n } \r\n }\r\n}","import { normalize } from 'normalizr';\r\nimport { bibleVersionStorageSchemaArray } from '../schema';\r\nimport { loadBibleVersionsFromLocalStore } from './index';\r\n\r\nexport const fetchBibleVersionsFromStorageService = () => {\r\n return loadBibleVersionsFromLocalStore()\r\n .then(bibleVersions => { \r\n if (bibleVersions.length > 0) {\r\n const normalized = normalize(bibleVersions, bibleVersionStorageSchemaArray);\r\n return {...normalized}\r\n }\r\n else {\r\n }\r\n })\r\n .catch(error => {\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n ); \r\n}","import { take, call, fork, select, put } from 'redux-saga/effects';\r\nimport { getBibleVersionsFromApiActions, updateBibleVersionsStorage } from '../actions';\r\nimport { fetchBibleVersionsApi } from '../api'\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchBibleVersions = fetchEntity.bind(null, getBibleVersionsFromApiActions.getBibleVersionsFromApi, fetchBibleVersionsApi);\r\n\r\nconst getApiUrl = state => state.systemSettings.apiUrl;\r\n\r\nfunction* loadBibleVersions() {\r\n let apiUrl = yield select(getApiUrl);\r\n yield call(fetchBibleVersions, apiUrl);\r\n}\r\n\r\nexport const watchLoadBibleVersionsFromApi = function* () {\r\n const { GET_BIBLE_VERSIONS_FROM_API } = getBibleVersionsFromApiActions;\r\n\r\n while(true) {\r\n yield take(getBibleVersionsFromApiActions.LOAD_BIBLE_VERSIONS_FROM_API);\r\n yield fork(loadBibleVersions);\r\n\r\n const action = yield take([GET_BIBLE_VERSIONS_FROM_API.SUCCESS, GET_BIBLE_VERSIONS_FROM_API.FAILURE]);\r\n if (action.type === GET_BIBLE_VERSIONS_FROM_API.SUCCESS) {\r\n const bibleVersions = action.response.entities.bibleVersions;\r\n yield put(updateBibleVersionsStorage(bibleVersions));\r\n }\r\n }\r\n}","import { callApiNormalizedResponse } from '../../../services/api';\r\nimport { endpointUrl } from '../../../services/apiHelper';\r\nimport { bibleVersionApiSchemaArray } from './schema';\r\n\r\nexport const BIBLEVERSIONS_RESOURCE = 'bibleVersions';\r\nconst bibleVersionsResourceUrl = apiUrl => endpointUrl(apiUrl, BIBLEVERSIONS_RESOURCE);\r\n\r\n// bibleVersions api services\r\nexport const fetchBibleVersionsApi = apiUrl => callApiNormalizedResponse(bibleVersionsResourceUrl(apiUrl), bibleVersionApiSchemaArray);","import { take, put, select, all } from 'redux-saga/effects';\r\nimport * as bibleVersionsActions from '../actions';\r\nimport * as bibleBooksActions from '../../Books/actions';\r\nimport * as chaptersActions from '../../Chapters/actions';\r\nimport { chapterVersesActions } from '../../Verses/actions';\r\n\r\nconst getBibleVersion = state => state.bibleVersion;\r\nconst getBibleBook = state => state.bibleBook;\r\nconst getBookChapter = state => state.bookChapter;\r\n\r\nexport const watchSetBibleVersion = function* () {\r\n while(true) {\r\n const {versionId, langId} = yield take(bibleVersionsActions.SET_BIBLE_VERSION);\r\n yield put(bibleVersionsActions.updateViewFiltersBibleVersionStorage(versionId, langId));\r\n\r\n let bibleVersion = yield select(getBibleVersion);\r\n let bibleBook = yield select(getBibleBook);\r\n let bookChapter = yield select(getBookChapter);\r\n \r\n yield all ([\r\n put(bibleBooksActions.loadBibleBooks(bibleVersion.id)),\r\n put(chaptersActions.loadBookChapters(bibleVersion.id, bibleBook.id)),\r\n put(chapterVersesActions.getChapterVerses.request(bibleVersion.id, bibleBook.id, bookChapter.id))\r\n ]);\r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { UPDATE_BIBLE_VERSIONS_STORAGE } from '../actions';\r\nimport { addBibleVersionsToLocalStore } from '../indexedDbStorage';\r\n\r\nfunction* updateLocalStorage(bibleVersions) {\r\n yield call(addBibleVersionsToLocalStore, bibleVersions);\r\n}\r\n\r\nexport const watchUpdateBibleVersionsLocalStorage = function* () {\r\n while(true) {\r\n const {bibleVersions} = yield take(UPDATE_BIBLE_VERSIONS_STORAGE);\r\n yield fork(updateLocalStorage, bibleVersions);\r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { UPDATE_VIEWFILTERS_BIBLEVERSION_STORAGE } from '../actions';\r\nimport { saveViewFiltersBibleVersionToLocalStoreDb } from '../indexedDbStorage';\r\n\r\nfunction* updateLocalStorage(bibleVersionId, langId) {\r\n yield call(saveViewFiltersBibleVersionToLocalStoreDb.saveViewFiltersBibleVersionToLocalStore, bibleVersionId, langId);\r\n}\r\n\r\nexport const watchUpdateViewFiltersBibleVersionLocalStorage = function* () {\r\n while(true) {\r\n const {bibleVersionId, langId} = yield take(UPDATE_VIEWFILTERS_BIBLEVERSION_STORAGE);\r\n yield fork(updateLocalStorage, bibleVersionId, langId);\r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { getViewFiltersBibleVersionFromStorageActions } from '../actions';\r\nimport { fetchViewFiltersBibleVersionFromStorageService } from '../indexedDbStorage';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchViewFiltersBibleVersionFromStorage = fetchEntity.bind(null, getViewFiltersBibleVersionFromStorageActions.getViewFiltersBibleVersionFromStorage, fetchViewFiltersBibleVersionFromStorageService.fetchViewFiltersBibleVersionFromStorage);\r\n\r\nfunction* loadViewFiltersBibleVersion() {\r\n yield call(fetchViewFiltersBibleVersionFromStorage); \r\n}\r\n\r\nexport const watchLoadViewFiltersBibleVersionFromStorage = function* () {\r\n while(true) {\r\n yield take(getViewFiltersBibleVersionFromStorageActions.LOAD_VIEWFILTERS_BIBLEVERSION_FROM_STORAGE);\r\n yield fork(loadViewFiltersBibleVersion); \r\n }\r\n}","import { fork, all } from 'redux-saga/effects';\r\nimport { watchLoadBibleVersions } from './getBibleVersionsSaga';\r\nimport { watchLoadBibleVersionsFromStorage } from './getBibleVersionsFromStorageSaga';\r\nimport { watchLoadBibleVersionsFromApi } from './getBibleVersionsFromApiSaga';\r\nimport { watchSetBibleVersion } from './setBibleVersionSaga';\r\nimport { watchUpdateBibleVersionsLocalStorage } from './updateBibleVersionsLocalStorageSaga';\r\nimport { watchUpdateViewFiltersBibleVersionLocalStorage } from './updateViewFiltersBibleVersionLocalStoreSaga';\r\nimport { watchLoadViewFiltersBibleVersionFromStorage } from './getViewFiltersBibleVersionFromStorageSaga';\r\n\r\nexport const watchBibleVersionsRequests = function*() {\r\n yield all([\r\n fork(watchLoadBibleVersions),\r\n fork(watchLoadBibleVersionsFromStorage),\r\n fork(watchLoadBibleVersionsFromApi),\r\n fork(watchUpdateBibleVersionsLocalStorage),\r\n fork(watchSetBibleVersion),\r\n fork(watchUpdateViewFiltersBibleVersionLocalStorage),\r\n fork(watchLoadViewFiltersBibleVersionFromStorage)\r\n ])\r\n}","import { take, call, fork, select, put } from 'redux-saga/effects';\r\nimport * as bibleBooksActions from '../actions';\r\nimport { getBooksFromStorageActions, getBooksFromApiActions } from '../actions';\r\nimport { getBooksByBibleVersion } from '../selectors/getBooksByBibleVersionSelector';\r\nimport * as appVersionActions from '../../../Version/actions';\r\n\r\nconst getBibleBooksList = (state) => getBooksByBibleVersion(state);\r\nconst getBibleBook = state => state.bibleBook;\r\n\r\nconst setFirstBook = function* () {\r\n let bibleBooksList = yield select(getBibleBooksList); \r\n\r\n if (bibleBooksList[0]) { \r\n const firstBookId = bibleBooksList[0].bookId;\r\n yield put(bibleBooksActions.setBibleBook(firstBookId));\r\n } \r\n}\r\n\r\nfunction* loadBibleBooks(bibleVersionId) {\r\n yield put(getBooksFromStorageActions.loadBibleBooksFromStorage(bibleVersionId));\r\n}\r\n\r\nexport const watchLoadBibleBooks = function* () {\r\n const { GET_BIBLE_BOOKS_FROM_STORAGE } = getBooksFromStorageActions;\r\n const { GET_BIBLE_BOOKS_FROM_API } = getBooksFromApiActions;\r\n\r\n while(true) {\r\n const {bibleVersionId} = yield take(bibleBooksActions.LOAD_BIBLE_BOOKS);\r\n yield put(appVersionActions.validateAppVersion());\r\n yield fork(loadBibleBooks, bibleVersionId);\r\n\r\n const action = yield take([\r\n GET_BIBLE_BOOKS_FROM_STORAGE.SUCCESS, \r\n GET_BIBLE_BOOKS_FROM_API.SUCCESS\r\n ]);\r\n\r\n if ((action.type === GET_BIBLE_BOOKS_FROM_STORAGE.SUCCESS) || (action.type === GET_BIBLE_BOOKS_FROM_API.SUCCESS)) {\r\n let bibleBook = yield select(getBibleBook); \r\n if (bibleBook.id === 0) {\r\n yield call(setFirstBook);\r\n }\r\n }\r\n }\r\n}","import { schema } from 'normalizr';\r\n\r\nconst bibleBookSchema = new schema.Entity('books', {}, {idAttribute: 'bookId'});\r\n\r\n// Schemas for Books API responses.\r\nexport const bibleBookApiSchemaArray = { items: [ bibleBookSchema ] };\r\n\r\nexport const bibleBookStorageSchemaArray = [ bibleBookSchema ];","import { indexedDb } from '../../../../services/indexedDb';\r\nimport { VIEWFILTERS_BIBLEBOOK_NAME } from '../../constants';\r\n\r\nexport const saveViewFiltersBibleBookToLocalStore = (bookId) => {\r\n indexedDb.viewFilters.put({filterName: VIEWFILTERS_BIBLEBOOK_NAME, bookId: bookId})\r\n .catch(error => {\r\n });\r\n}","import { indexedDb } from '../../../../services/indexedDb';\r\nimport { VIEWFILTERS_BIBLEBOOK_NAME } from '../../constants';\r\n\r\nconst loadViewFiltersBibleBookFromLocalStore = () => {\r\n return indexedDb.viewFilters.get(VIEWFILTERS_BIBLEBOOK_NAME); \r\n}\r\n\r\nexport const fetchViewFiltersBibleBookFromStorage = () => {\r\n return loadViewFiltersBibleBookFromLocalStore()\r\n .then(bibleBook => {\r\n if (bibleBook) { \r\n const response = {};\r\n return { ...response, bibleBook }\r\n } else {\r\n }\r\n })\r\n .catch(error => {\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n ); \r\n}","import { indexedDb } from '../../../../services/indexedDb';\r\nimport _ from 'lodash';\r\nimport * as _saveViewFiltersBibleBookToLocalStoreDb from './saveViewFiltersBibleBookToLocalStoreDb';\r\nimport * as _fetchViewFiltersBibleBookFromStorageService from './fetchViewFiltersBibleBookFromStorageService';\r\n\r\nexport const saveViewFiltersBibleBookToLocalStoreDb = _saveViewFiltersBibleBookToLocalStoreDb;\r\nexport const fetchViewFiltersBibleBookFromStorageService = _fetchViewFiltersBibleBookFromStorageService;\r\n\r\nexport const addBooksToLocalStore = (books) => {\r\n const booksList = _.values(books);\r\n indexedDb.books.bulkPut(booksList).then(lastKey => {\r\n });\r\n}\r\n\r\nexport const loadBooksFromLocalStore = (langId) => {\r\n return indexedDb.books.where('langId').equals(langId).toArray();\r\n}","import { take, call, fork, put, select } from 'redux-saga/effects';\r\nimport { getBooksFromStorageActions, getBooksFromApiActions } from '../actions';\r\nimport { fetchBooksFromStorageService } from '../indexedDbStorage/service';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\nimport { DEFAULT_LANGID } from '../../Versions/constants'\r\n\r\nconst getBibleVersion = state => state.bibleVersion;\r\n\r\n// bind Generators\r\nconst fetchBooksFromStorage = fetchEntity.bind(null, getBooksFromStorageActions.getBibleBooksFromStorage, fetchBooksFromStorageService);\r\n\r\nfunction* loadBibleBooks(bibleVersionId) {\r\n let bibleVersion = yield select(getBibleVersion);\r\n \r\n const langId = bibleVersion ? bibleVersion.langId : DEFAULT_LANGID;\r\n\r\n yield call(fetchBooksFromStorage, langId); \r\n}\r\n\r\nexport const watchLoadBibleBooksFromStorage = function* () {\r\n const { GET_BIBLE_BOOKS_FROM_STORAGE } = getBooksFromStorageActions;\r\n \r\n while(true) {\r\n const {bibleVersionId} = yield take(getBooksFromStorageActions.LOAD_BIBLE_BOOKS_FROM_STORAGE);\r\n yield fork(loadBibleBooks, bibleVersionId);\r\n \r\n const action = yield take([\r\n GET_BIBLE_BOOKS_FROM_STORAGE.SUCCESS, \r\n GET_BIBLE_BOOKS_FROM_STORAGE.FAILURE\r\n ]);\r\n \r\n if (action.type === GET_BIBLE_BOOKS_FROM_STORAGE.FAILURE) {\r\n yield put(getBooksFromApiActions.loadBibleBooksFromApi(bibleVersionId));\r\n } \r\n }\r\n}","import { normalize } from 'normalizr';\r\nimport { bibleBookStorageSchemaArray } from '../schema';\r\nimport { loadBooksFromLocalStore } from './index';\r\n\r\nexport const fetchBooksFromStorageService = (langId) => {\r\n return loadBooksFromLocalStore(langId)\r\n .then(books => { \r\n if (books.length > 0) {\r\n const normalized = normalize(books, bibleBookStorageSchemaArray);\r\n return {...normalized}\r\n }\r\n else {\r\n }\r\n })\r\n .catch(error => {\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n ); \r\n}","import { callApiNormalizedResponse } from '../../../services/api';\r\nimport { endpointUrl } from '../../../services/apiHelper';\r\nimport { bibleBookApiSchemaArray } from './schema';\r\n\r\nexport const BIBLEBOOKS_RESOURCE = 'books';\r\nexport const bibleBooksResourceUrl = apiUrl => endpointUrl(apiUrl, BIBLEBOOKS_RESOURCE);\r\nconst resourceUrl = (apiUrl, bibleVersionId) => { return `${bibleBooksResourceUrl(apiUrl)}?versionId=${bibleVersionId}` }\r\n\r\n// bibleBooks api services\r\nexport const fetchBibleBooksApi = (apiUrl, bibleVersionId) => callApiNormalizedResponse(resourceUrl(apiUrl, bibleVersionId), bibleBookApiSchemaArray);","import { take, call, fork, select, put } from 'redux-saga/effects';\r\nimport { getBooksFromApiActions, updateBooksStorage } from '../actions';\r\nimport { fetchBibleBooksApi } from '../api';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchBibleBooks = fetchEntity.bind(null, getBooksFromApiActions.getBibleBooksFromApi, fetchBibleBooksApi);\r\n\r\nconst getApiUrl = state => state.systemSettings.apiUrl;\r\n\r\nfunction* loadBibleBooks(bibleVersionId) {\r\n let apiUrl = yield select(getApiUrl);\r\n \r\n yield call(fetchBibleBooks, apiUrl, bibleVersionId);\r\n}\r\n\r\nexport const watchLoadBibleBooksFromApi = function* () {\r\n const { GET_BIBLE_BOOKS_FROM_API } = getBooksFromApiActions;\r\n\r\n while(true) {\r\n const {bibleVersionId} = yield take(getBooksFromApiActions.LOAD_BIBLE_BOOKS_FROM_API); \r\n yield fork(loadBibleBooks, bibleVersionId);\r\n\r\n const action = yield take([GET_BIBLE_BOOKS_FROM_API.SUCCESS, GET_BIBLE_BOOKS_FROM_API.FAILURE]);\r\n if (action.type === GET_BIBLE_BOOKS_FROM_API.SUCCESS) {\r\n const books = action.response.entities.books;\r\n yield put(updateBooksStorage(books));\r\n }\r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { UPDATE_BOOKS_STORAGE } from '../actions';\r\nimport { addBooksToLocalStore } from '../indexedDbStorage';\r\n\r\nfunction* updateLocalStorage(books) {\r\n yield call(addBooksToLocalStore, books);\r\n}\r\n\r\nexport const watchUpdateBibleBooksLocalStorage = function* () {\r\n while(true) {\r\n const {books} = yield take(UPDATE_BOOKS_STORAGE);\r\n yield fork(updateLocalStorage, books);\r\n }\r\n}","import { take, put, select, call } from 'redux-saga/effects';\r\nimport * as bibleBooksActions from '../actions';\r\nimport * as chaptersActions from '../../Chapters/actions';\r\nimport { getBookChaptersFromStorageActions, getBookChaptersFromApiActions, bibleChaptersFromApiActions } from '../../Chapters/actions';\r\nimport { getChaptersByBookId } from '../../Chapters/selectors/getChaptersByBookIdSelector';\r\n\r\nconst { GET_BOOK_CHAPTERS_FROM_STORAGE } = getBookChaptersFromStorageActions;\r\nconst { GET_BOOK_CHAPTERS_FROM_API } = getBookChaptersFromApiActions;\r\nconst { GET_BIBLE_CHAPTERS_FROM_API } = bibleChaptersFromApiActions;\r\n\r\nconst getBibleVersion = (state) => state.bibleVersion;\r\nconst getChaptersForCurrentBookId = state => getChaptersByBookId(state);\r\n\r\nconst setFirstChapter = function* () {\r\n let chaptersForCurrentBookId = yield select(getChaptersForCurrentBookId); \r\n if (!chaptersForCurrentBookId[0]) { \r\n yield take([\r\n GET_BOOK_CHAPTERS_FROM_STORAGE.SUCCESS, \r\n GET_BOOK_CHAPTERS_FROM_API.SUCCESS,\r\n GET_BIBLE_CHAPTERS_FROM_API.SUCCESS\r\n ]); \r\n chaptersForCurrentBookId = yield select(getChaptersForCurrentBookId);\r\n }\r\n\r\n if (chaptersForCurrentBookId[0]) {\r\n const firstChapterId = chaptersForCurrentBookId[0].chapterId;\r\n yield put(chaptersActions.setBookChapter(firstChapterId));\r\n } \r\n}\r\n\r\nexport const watchSetBibleBook = function* () {\r\n while(true) {\r\n const {bookId, skipSettingFirstChapter} = yield take(bibleBooksActions.SET_BIBLE_BOOK);\r\n yield put(bibleBooksActions.viewFiltersBibleBookFromStorageActions.updateViewFiltersBibleBookStorage(bookId));\r\n\r\n let bibleVersion = yield select(getBibleVersion);\r\n yield put(chaptersActions.loadBookChapters(bibleVersion.id, bookId));\r\n \r\n if (!skipSettingFirstChapter) {\r\n yield call(setFirstChapter);\r\n } \r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { viewFiltersBibleBookFromStorageActions } from '../actions';\r\nimport { saveViewFiltersBibleBookToLocalStoreDb } from '../indexedDbStorage';\r\n\r\nfunction* updateLocalStorage(bookId) {\r\n yield call(saveViewFiltersBibleBookToLocalStoreDb.saveViewFiltersBibleBookToLocalStore, bookId);\r\n}\r\n\r\nexport const watchUpdateViewFiltersBibleBookLocalStorage = function* () {\r\n while(true) {\r\n const {bookId} = yield take(viewFiltersBibleBookFromStorageActions.UPDATE_VIEWFILTERS_BIBLEBOOK_STORAGE);\r\n yield fork(updateLocalStorage, bookId);\r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { viewFiltersBibleBookFromStorageActions } from '../actions';\r\nimport { fetchViewFiltersBibleBookFromStorageService } from '../indexedDbStorage';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchViewFiltersBibleBookFromStorage = fetchEntity.bind(null, viewFiltersBibleBookFromStorageActions.getViewFiltersBibleBookFromStorage, fetchViewFiltersBibleBookFromStorageService.fetchViewFiltersBibleBookFromStorage);\r\n\r\nfunction* loadViewFiltersBibleBook() {\r\n yield call(fetchViewFiltersBibleBookFromStorage); \r\n}\r\n\r\nexport const watchLoadViewFiltersBibleBookFromStorage = function* () {\r\n while(true) {\r\n yield take(viewFiltersBibleBookFromStorageActions.LOAD_VIEWFILTERS_BIBLEBOOK_FROM_STORAGE);\r\n yield fork(loadViewFiltersBibleBook); \r\n }\r\n}","import { schema } from 'normalizr';\r\n\r\nconst chapterSchema = new schema.Entity('chapters', {}, {idAttribute: 'chapterId'});\r\n\r\n// Schema for Chapters API responses.\r\nexport const chapterApiSchemaArray = { items: [ chapterSchema ] };\r\n\r\nexport const chapterStorageSchemaArray = [ chapterSchema ];","import { callApiNormalizedResponse } from '../../../services/api';\r\nimport { bibleBooksResourceUrl } from '../Books/api';\r\nimport { chapterApiSchemaArray } from './schema';\r\n\r\nexport const CHAPTERS_RESOURCE = 'chapters';\r\nexport const chaptersResourceUrl = (apiUrl, bookId) => `${bibleBooksResourceUrl(apiUrl)}/${bookId}/${CHAPTERS_RESOURCE}`;\r\nconst resourceUrl = (apiUrl, bibleVersionId, bookId) => { return `${chaptersResourceUrl(apiUrl, bookId)}?versionId=${bibleVersionId}` }\r\n\r\n// chapters api services\r\nexport const fetchChaptersApi = (apiUrl, bibleVersionId, bookId) => callApiNormalizedResponse(resourceUrl(apiUrl, bibleVersionId, bookId), chapterApiSchemaArray);","import { callApiNormalizedResponse } from '../../../services/api';\r\nimport { endpointUrl } from '../../../services/apiHelper';\r\nimport { CHAPTERS_RESOURCE } from './bookChaptersApi';\r\nimport { chapterApiSchemaArray } from './schema';\r\n\r\nexport const chaptersResourceUrl = apiUrl => endpointUrl(apiUrl, CHAPTERS_RESOURCE);\r\nconst resourceUrl = (apiUrl, bibleVersionId) => { return `${chaptersResourceUrl(apiUrl)}?versionId=${bibleVersionId}` }\r\n\r\n// chapters api services\r\nexport const fetchBibleChaptersApi = (apiUrl, bibleVersionId) => callApiNormalizedResponse(resourceUrl(apiUrl, bibleVersionId), chapterApiSchemaArray);","import { take, call, fork, select, put } from 'redux-saga/effects';\r\nimport { bibleChaptersFromApiActions, updateChaptersStorage } from '../actions';\r\nimport { fetchBibleChaptersApi } from '../bibleChaptersApi';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchBibleChapters = fetchEntity.bind(null, bibleChaptersFromApiActions.getBibleChaptersFromApi, fetchBibleChaptersApi);\r\n\r\nconst getApiUrl = state => state.systemSettings.apiUrl;\r\n\r\nfunction* loadChapters(bibleVersionId) {\r\n let apiUrl = yield select(getApiUrl);\r\n \r\n yield call(fetchBibleChapters, apiUrl, bibleVersionId);\r\n}\r\n\r\nexport const watchLoadBibleChaptersFromApi = function* () {\r\n const { GET_BIBLE_CHAPTERS_FROM_API } = bibleChaptersFromApiActions;\r\n\r\n while(true) {\r\n const {bibleVersionId} = yield take(bibleChaptersFromApiActions.LOAD_BIBLE_CHAPTERS_FROM_API); \r\n yield fork(loadChapters, bibleVersionId);\r\n\r\n const action = yield take([GET_BIBLE_CHAPTERS_FROM_API.SUCCESS, GET_BIBLE_CHAPTERS_FROM_API.FAILURE]);\r\n if (action.type === GET_BIBLE_CHAPTERS_FROM_API.SUCCESS) {\r\n const chapters = action.response.entities.chapters;\r\n yield put(updateChaptersStorage(chapters));\r\n }\r\n }\r\n}","import { take, put, fork } from 'redux-saga/effects';\r\nimport * as chaptersActions from '../actions';\r\nimport { getBookChaptersFromStorageActions } from '../actions';\r\n\r\nfunction* loadBookChapters(bibleVersionId, bookId) {\r\n yield put(getBookChaptersFromStorageActions.loadBookChaptersFromStorage(bibleVersionId, bookId));\r\n}\r\n\r\nexport const watchLoadChapters = function* () {\r\n while(true) {\r\n const {bibleVersionId, bookId} = yield take(chaptersActions.LOAD_BOOK_CHAPTERS); \r\n yield fork(loadBookChapters, bibleVersionId, bookId);\r\n }\r\n}","import { indexedDb } from '../../../../services/indexedDb';\r\nimport _ from 'lodash';\r\n\r\nexport const addChaptersToLocalStore = (chapters) => {\r\n const chaptersList = _.values(chapters);\r\n indexedDb.chapters.bulkPut(chaptersList).then(lastKey => {\r\n })\r\n .catch(error => {\r\n });\r\n}","import { indexedDb } from '../../../../services/indexedDb';\r\n\r\nexport const loadChaptersByBookIdAndLangIdFromLocalStore = (langId, bookId) => {\r\n return indexedDb.chapters.where('bookId')\r\n .equals(bookId)\r\n .and(chapter => { return chapter.langId === langId; })\r\n .toArray();\r\n}","import { normalize } from 'normalizr';\r\nimport { chapterStorageSchemaArray } from '../schema';\r\nimport { loadChaptersByBookIdAndLangIdFromLocalStore } from './loadChaptersByBookIdAndLangIdFromLocalStoreDb';\r\n\r\nexport const fetchChaptersByBookIdAndLangIdFromStorage = (langId, bookId) => {\r\n return loadChaptersByBookIdAndLangIdFromLocalStore(langId, bookId)\r\n .then(chapters => { \r\n if (chapters.length > 0) {\r\n const normalized = normalize(chapters, chapterStorageSchemaArray);\r\n return {...normalized}\r\n }\r\n else {\r\n }\r\n })\r\n .catch(error => {\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n ); \r\n}","import { indexedDb } from '../../../../services/indexedDb';\r\nimport { VIEWFILTERS_BOOKCHAPTER_NAME } from '../../constants';\r\n\r\nexport const saveViewFiltersBookChapterToLocalStore = (chapterId) => {\r\n indexedDb.viewFilters.put({filterName: VIEWFILTERS_BOOKCHAPTER_NAME, chapterId: chapterId})\r\n .catch(error => {\r\n });\r\n}","import { indexedDb } from '../../../../services/indexedDb';\r\nimport { VIEWFILTERS_BOOKCHAPTER_NAME } from '../../constants';\r\n\r\nconst loadViewFiltersBookChapterFromLocalStore = () => {\r\n return indexedDb.viewFilters.get(VIEWFILTERS_BOOKCHAPTER_NAME); \r\n}\r\n\r\nexport const fetchViewFiltersBookChapterFromStorage = () => {\r\n return loadViewFiltersBookChapterFromLocalStore()\r\n .then(bookChapter => {\r\n if (bookChapter) { \r\n const response = {};\r\n return { ...response, bookChapter }\r\n } else {\r\n }\r\n })\r\n .catch(error => {\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n ); \r\n}","import * as _addChaptersToLocalStoreDb from './addChaptersToLocalStoreDb';\r\nimport * as _loadChaptersByBookIdAndLangIdFromLocalStoreDb from './loadChaptersByBookIdAndLangIdFromLocalStoreDb';\r\nimport * as _fetchChaptersByBookIdAndLangIdFromStorageService from './fetchChaptersByBookIdAndLangIdFromStorageService';\r\nimport * as _saveViewFiltersBookChapterToLocalStoreDb from './saveViewFiltersBookChapterToLocalStoreDb';\r\nimport * as _fetchViewFiltersBookChapterFromStorageService from './fetchViewFiltersBookChapterFromStorageService';\r\n\r\nexport const addChaptersToLocalStoreDb = _addChaptersToLocalStoreDb;\r\nexport const loadChaptersByBookIdAndLangIdFromLocalStoreDb = _loadChaptersByBookIdAndLangIdFromLocalStoreDb;\r\nexport const fetchChaptersByBookIdAndLangIdFromStorageService = _fetchChaptersByBookIdAndLangIdFromStorageService;\r\nexport const saveViewFiltersBookChapterToLocalStoreDb = _saveViewFiltersBookChapterToLocalStoreDb;\r\nexport const fetchViewFiltersBookChapterFromStorageService = _fetchViewFiltersBookChapterFromStorageService;","import { take, call, fork, put, select } from 'redux-saga/effects';\r\nimport { getBookChaptersFromStorageActions, bibleChaptersFromApiActions } from '../actions';\r\nimport { fetchChaptersByBookIdAndLangIdFromStorageService } from '../indexedDbStorage';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\nimport { DEFAULT_LANGID } from '../../Versions/constants';\r\n\r\nconst getBibleVersion = state => state.bibleVersion;\r\n\r\n// bind Generators\r\nconst fetchBookChaptersFromStorage = fetchEntity.bind(null, getBookChaptersFromStorageActions.getBookChaptersFromStorage, fetchChaptersByBookIdAndLangIdFromStorageService.fetchChaptersByBookIdAndLangIdFromStorage);\r\n\r\nfunction* loadBookChapters(bibleVersionId, bookId) {\r\n let bibleVersion = yield select(getBibleVersion);\r\n \r\n const langId = bibleVersion ? bibleVersion.langId : DEFAULT_LANGID;\r\n\r\n yield call(fetchBookChaptersFromStorage, langId, bookId); \r\n}\r\n\r\nexport const watchLoadChaptersFromStorage = function* () {\r\n const { GET_BOOK_CHAPTERS_FROM_STORAGE } = getBookChaptersFromStorageActions;\r\n \r\n while(true) {\r\n const {bibleVersionId, bookId} = yield take(getBookChaptersFromStorageActions.LOAD_BOOK_CHAPTERS_FROM_STORAGE);\r\n yield fork(loadBookChapters, bibleVersionId, bookId);\r\n \r\n const action = yield take([\r\n GET_BOOK_CHAPTERS_FROM_STORAGE.SUCCESS, \r\n GET_BOOK_CHAPTERS_FROM_STORAGE.FAILURE\r\n ]);\r\n \r\n if (action.type === GET_BOOK_CHAPTERS_FROM_STORAGE.FAILURE) {\r\n yield put(bibleChaptersFromApiActions.loadBibleChaptersFromApi(bibleVersionId));\r\n //yield put(getBookChaptersFromApiActions.loadBookChaptersFromApi(bibleVersionId, bookId));\r\n } \r\n }\r\n}","import { take, call, fork, select, put } from 'redux-saga/effects';\r\nimport { getBookChaptersFromApiActions, updateChaptersStorage } from '../actions';\r\nimport { fetchChaptersApi } from '../bookChaptersApi';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchBookChapters = fetchEntity.bind(null, getBookChaptersFromApiActions.getBookChaptersFromApi, fetchChaptersApi);\r\n\r\nconst getApiUrl = state => state.systemSettings.apiUrl;\r\n\r\nfunction* loadBookChapters(bibleVersionId, bookId) {\r\n let apiUrl = yield select(getApiUrl);\r\n \r\n yield call(fetchBookChapters, apiUrl, bibleVersionId, bookId);\r\n}\r\n\r\nexport const watchLoadChaptersFromApi = function* () {\r\n const { GET_BOOK_CHAPTERS_FROM_API } = getBookChaptersFromApiActions;\r\n\r\n while(true) {\r\n const {bibleVersionId, bookId} = yield take(getBookChaptersFromApiActions.LOAD_BOOK_CHAPTERS_FROM_API); \r\n yield fork(loadBookChapters, bibleVersionId, bookId);\r\n\r\n const action = yield take([GET_BOOK_CHAPTERS_FROM_API.SUCCESS, GET_BOOK_CHAPTERS_FROM_API.FAILURE]);\r\n if (action.type === GET_BOOK_CHAPTERS_FROM_API.SUCCESS) {\r\n const chapters = action.response.entities.chapters;\r\n yield put(updateChaptersStorage(chapters));\r\n }\r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { UPDATE_CHAPTERS_STORAGE } from '../actions';\r\nimport { addChaptersToLocalStoreDb } from '../indexedDbStorage';\r\n\r\nfunction* updateLocalStorage(chapters) {\r\n yield call(addChaptersToLocalStoreDb.addChaptersToLocalStore, chapters);\r\n}\r\n\r\nexport const watchUpdateChaptersLocalStorage = function* () {\r\n while(true) {\r\n const {chapters} = yield take(UPDATE_CHAPTERS_STORAGE);\r\n yield fork(updateLocalStorage, chapters);\r\n }\r\n}","import { take, put, select } from 'redux-saga/effects';\r\nimport * as chaptersActions from '../actions';\r\n//import * as versesActions from '../../Verses/actions';\r\nimport { chapterVersesActions } from '../../Verses/actions';\r\n\r\nconst getBibleVersion = state => state.bibleVersion;\r\nconst getBibleBook = state => state.bibleBook;\r\nconst getBookChapter = state => state.bookChapter;\r\n\r\nexport const watchSetChapter = function* () {\r\n while(true) {\r\n const {chapterId} = yield take(chaptersActions.SET_BOOK_CHAPTER);\r\n yield put(chaptersActions.viewFiltersBookChapterFromStorageActions.updateViewFiltersBookChapterStorage(chapterId));\r\n \r\n let bibleVersion = yield select(getBibleVersion);\r\n let bibleBook = yield select(getBibleBook);\r\n let bookChapter = yield select(getBookChapter);\r\n yield put(chapterVersesActions.getChapterVerses.request(bibleVersion.id, bibleBook.id, bookChapter.id));\r\n }\r\n}","import { take, put, select } from 'redux-saga/effects';\r\nimport * as booksActions from '../../Books/actions';\r\nimport * as chaptersActions from '../actions';\r\nimport { getBibleBooks } from '../../Books/selectors/getBibleBooksSelector';\r\nimport { getChaptersByBookId } from '../selectors/getChaptersByBookIdSelector';\r\n\r\nconst getBibleBook = state => state.bibleBook;\r\nconst getBookChapter = state => state.bookChapter;\r\nconst getChaptersForCurrentBookId = state => getChaptersByBookId(state);\r\nconst getBooks = state => getBibleBooks(state);\r\n\r\nexport const watchRequestNextChapter = function* () {\r\n while(true) {\r\n yield take(chaptersActions.REQUEST_NEXT_CHAPTER);\r\n let bibleBook = yield select(getBibleBook);\r\n let bookChapter = yield select(getBookChapter);\r\n const bibleBooks = yield select(getBooks);\r\n\r\n let chaptersForCurrentBookId = yield select(getChaptersForCurrentBookId);\r\n const lastChapterForCurrentBookId = chaptersForCurrentBookId[chaptersForCurrentBookId.length - 1];\r\n\r\n let nextChapterId = bookChapter.id;\r\n\r\n if (bookChapter.id < lastChapterForCurrentBookId.chapterId) {\r\n nextChapterId = bookChapter.id + 1;\r\n } else if (bibleBook.id < bibleBooks[bibleBooks.length - 1].bookId) {\r\n yield put(booksActions.setBibleBook(bibleBook.id + 1)); \r\n }\r\n \r\n if (nextChapterId !== bookChapter.id) {\r\n yield put(chaptersActions.setBookChapter(nextChapterId));\r\n } \r\n }\r\n}","import { take, put, select } from 'redux-saga/effects';\r\nimport * as booksActions from '../../Books/actions';\r\nimport * as chaptersActions from '../actions';\r\nimport { getBookChaptersFromStorageActions, getBookChaptersFromApiActions } from '../../Chapters/actions';\r\nimport { getBibleBooks } from '../../Books/selectors/getBibleBooksSelector';\r\nimport { getChaptersByBookId } from '../selectors/getChaptersByBookIdSelector';\r\n\r\nconst { GET_BOOK_CHAPTERS_FROM_STORAGE } = getBookChaptersFromStorageActions;\r\nconst { GET_BOOK_CHAPTERS_FROM_API } = getBookChaptersFromApiActions;\r\n\r\nconst getBibleBook = state => state.bibleBook;\r\nconst getBookChapter = state => state.bookChapter;\r\nconst getChaptersForCurrentBookId = state => getChaptersByBookId(state);\r\nconst getBooks = state => getBibleBooks(state);\r\n\r\nexport const watchRequestPrevChapter = function* () {\r\n while(true) { \r\n yield take(chaptersActions.REQUEST_PREV_CHAPTER);\r\n const bibleBook = yield select(getBibleBook);\r\n const bookChapter = yield select(getBookChapter);\r\n const bibleBooks = yield select(getBooks);\r\n\r\n let chaptersForCurrentBookId = yield select(getChaptersForCurrentBookId);\r\n const firstChapterForCurrentBookId = chaptersForCurrentBookId[0];\r\n\r\n let prevChapterId = bookChapter.id;\r\n\r\n if (bookChapter.id > firstChapterForCurrentBookId.chapterId) {\r\n prevChapterId = bookChapter.id - 1;\r\n } else if (bibleBook.id > bibleBooks[0].bookId) {\r\n const prevBibleBookId = bibleBook.id - 1;\r\n const skipSettingFirstChapter = true;\r\n yield put(booksActions.setBibleBook(prevBibleBookId, skipSettingFirstChapter));\r\n chaptersForCurrentBookId = yield select(getChaptersForCurrentBookId);\r\n\r\n if (!chaptersForCurrentBookId[chaptersForCurrentBookId.length - 1]) { \r\n yield take([\r\n GET_BOOK_CHAPTERS_FROM_STORAGE.SUCCESS, \r\n GET_BOOK_CHAPTERS_FROM_API.SUCCESS\r\n ]); \r\n chaptersForCurrentBookId = yield select(getChaptersForCurrentBookId);\r\n }\r\n \r\n if (chaptersForCurrentBookId[chaptersForCurrentBookId.length - 1]) {\r\n prevChapterId = chaptersForCurrentBookId[chaptersForCurrentBookId.length - 1].chapterId;\r\n } \r\n }\r\n \r\n if (prevChapterId !== bookChapter.id) {\r\n yield put(chaptersActions.setBookChapter(prevChapterId));\r\n }\r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { viewFiltersBookChapterFromStorageActions } from '../actions';\r\nimport { saveViewFiltersBookChapterToLocalStoreDb } from '../indexedDbStorage';\r\n\r\nfunction* updateLocalStorage(chapterId) {\r\n yield call(saveViewFiltersBookChapterToLocalStoreDb.saveViewFiltersBookChapterToLocalStore, chapterId);\r\n}\r\n\r\nexport const watchUpdateViewFiltersBookChapterLocalStorage = function* () {\r\n while(true) {\r\n const {chapterId} = yield take(viewFiltersBookChapterFromStorageActions.UPDATE_VIEWFILTERS_BOOKCHAPTER_STORAGE);\r\n yield fork(updateLocalStorage, chapterId);\r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { viewFiltersBookChapterFromStorageActions } from '../actions';\r\nimport { fetchViewFiltersBookChapterFromStorageService } from '../indexedDbStorage';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchViewFiltersBookChapterFromStorage = fetchEntity.bind(null, \r\n viewFiltersBookChapterFromStorageActions.getViewFiltersBookChapterFromStorage, \r\n fetchViewFiltersBookChapterFromStorageService.fetchViewFiltersBookChapterFromStorage);\r\n\r\nfunction* loadViewFiltersBookChapter() {\r\n yield call(fetchViewFiltersBookChapterFromStorage); \r\n}\r\n\r\nexport const watchLoadViewFiltersBookChapterFromStorage = function* () {\r\n while(true) {\r\n yield take(viewFiltersBookChapterFromStorageActions.LOAD_VIEWFILTERS_BOOKCHAPTER_FROM_STORAGE);\r\n yield fork(loadViewFiltersBookChapter); \r\n }\r\n}","import { fork, all } from 'redux-saga/effects';\r\nimport { watchLoadBibleChaptersFromApi } from './getBibleChaptersFromApiSaga';\r\nimport { watchLoadChapters } from './getChaptersSaga';\r\nimport { watchLoadChaptersFromStorage } from './getChaptersFromStorageSaga';\r\nimport { watchLoadChaptersFromApi } from './getChaptersFromApiSaga';\r\nimport { watchUpdateChaptersLocalStorage } from './updateChaptersLocalStorageSaga';\r\nimport { watchSetChapter } from './setChapterSaga';\r\nimport { watchRequestNextChapter } from './requestNextChapterSaga';\r\nimport { watchRequestPrevChapter } from './requestPrevChapterSaga';\r\nimport { watchUpdateViewFiltersBookChapterLocalStorage } from './updateViewFiltersBookChapterLocalStoreSaga';\r\nimport { watchLoadViewFiltersBookChapterFromStorage } from './getViewFiltersBookChapterFromStorageSaga';\r\n\r\nexport const watchChaptersRequests = function*() {\r\n yield all([\r\n fork(watchLoadBibleChaptersFromApi),\r\n fork(watchLoadChapters),\r\n fork(watchLoadChaptersFromStorage),\r\n fork(watchLoadChaptersFromApi),\r\n fork(watchUpdateChaptersLocalStorage),\r\n fork(watchSetChapter),\r\n fork(watchRequestNextChapter),\r\n fork(watchRequestPrevChapter),\r\n fork(watchUpdateViewFiltersBookChapterLocalStorage),\r\n fork(watchLoadViewFiltersBookChapterFromStorage) \r\n ])\r\n}","import { schema } from 'normalizr';\r\n\r\nconst verseOfTheDaySchema = new schema.Entity('verseOfTheDay', {}, {idAttribute: 'verseVersionId'});\r\n\r\n// Schema for verseOfTheDay list API responses.\r\nexport const verseOfTheDayApiSchemaArray = { items: [ verseOfTheDaySchema ] };\r\n\r\nexport const verseOfTheDayStorageSchemaArray = [ verseOfTheDaySchema ];","import { call } from 'redux-saga/effects';\r\nimport { verseOfTheDayListFromApiActions } from '../actions';\r\nimport { fetchVerseOfTheDayListApi, fetchUpdatedVerseOfTheDayListApi } from '../api/verseOfTheDayListApi';\r\nimport { fetchEntity } from '../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchVerseOfTheDayList = fetchEntity.bind(null, verseOfTheDayListFromApiActions.getVerseOfTheDayListFromApi, fetchVerseOfTheDayListApi);\r\nconst fetchUpdatedVerseOfTheDayList = fetchEntity.bind(null, verseOfTheDayListFromApiActions.getVerseOfTheDayListFromApi, fetchUpdatedVerseOfTheDayListApi);\r\n\r\nexport const getVerseOfTheDayListFromApi = function* (filter) {\r\n let bibleVersionId = filter['versionId'];\r\n let modifiedDateTimeUtc = filter['modifiedDateTimeUtc'];\r\n\r\n if (modifiedDateTimeUtc) {\r\n yield call(fetchUpdatedVerseOfTheDayList, bibleVersionId, modifiedDateTimeUtc);\r\n }\r\n else {\r\n yield call(fetchVerseOfTheDayList, bibleVersionId);\r\n } \r\n}","import { callApiNormalizedResponse } from '../../../services/api';\r\nimport { allVersesResourceUrl, updatedVersesResourceUrl } from '../../../services/apiResources';\r\nimport { verseOfTheDayApiSchemaArray } from '../schema';\r\n\r\n// verseOfTheDay api services\r\nexport const fetchVerseOfTheDayListApi = (bibleVersionId) => callApiNormalizedResponse(allVersesResourceUrl(bibleVersionId), verseOfTheDayApiSchemaArray);\r\nexport const fetchUpdatedVerseOfTheDayListApi = (bibleVersionId, modifiedSinceDateTimeUtc) => callApiNormalizedResponse(updatedVersesResourceUrl(bibleVersionId, modifiedSinceDateTimeUtc), verseOfTheDayApiSchemaArray);","import { call } from 'redux-saga/effects';\r\nimport { normalize } from 'normalizr';\r\nimport * as entitiesNames from '../../common/entities/constants';\r\nimport { getVerseOfTheDayListFromApi } from './entity/getVerseOfTheDayListFromApi';\r\nimport { verseOfTheDayApiSchemaArray, verseOfTheDayStorageSchemaArray } from './schema';\r\n\r\nexport const verseOfTheDay = {\r\n entityName: entitiesNames.VERSEOFTHEDAY,\r\n storageTableName: 'verseOfTheDayList',\r\n apiTableName: 'VerseOfTheDay',\r\n filterByVersionId: true, \r\n shouldNormalizeApiResponse: true,\r\n apiSchemaArray: verseOfTheDayApiSchemaArray,\r\n addApiData(payload) {\r\n return getApiDataToAdd(payload)\r\n },\r\n addToStoragePayload(payload) { \r\n const verseVersionId = payload.versionId ? `${payload.versionId}-${payload.verseId}` : `0-${payload.verseId}`;\r\n return {...{'verseVersionId': verseVersionId}, ...payload}\r\n },\r\n getLoadedEntities(entities) {\r\n const normalized = normalize(entities, verseOfTheDayStorageSchemaArray);\r\n return {...normalized}\r\n //return entities;\r\n },\r\n getEntityListFilterForApi(filter, userId, lastUpdatedDateTimeUtc) {\r\n if (lastUpdatedDateTimeUtc) {\r\n filter = {...filter, modifiedDateTimeUtc: lastUpdatedDateTimeUtc }\r\n }\r\n \r\n return filter;\r\n },\r\n getEntityListFromApi: function*(filter) { yield call(getVerseOfTheDayListFromApi, filter) },\r\n getEntityListFromApiResponse(apiResponse) {\r\n return apiResponse.entities.verseOfTheDay;\r\n } \r\n}\r\n\r\nconst getApiDataToAdd = data => {\r\n let newFields = {verseId: data.verseId};\r\n if (data.selectedText) {\r\n switch (data.versionId) {\r\n case 1:\r\n newFields = { ...newFields, versionId: data.versionId, uncVerseText: data.selectedText };\r\n break;\r\n default:\r\n newFields = { ...newFields, versionId: data.versionId, verseText: data.selectedText }\r\n }\r\n }\r\n return newFields;\r\n}","import * as entitiesNames from '../../common/entities/constants';\r\n\r\nexport const highlightedVerses = { \r\n entityName: entitiesNames.HIGHLIGHTEDVERSES,\r\n storageTableName: 'highlightedVerses',\r\n apiTableName: 'HighlightedVerses',\r\n addApiData(payload) {\r\n return getApiDataToAdd(payload)\r\n },\r\n addToStoragePayload(payload) { \r\n const storageId = payload.versionId ? `${payload.versionId}-${payload.verseId}` : `0-${payload.verseId}`;\r\n return {...{'storageId': storageId}, ...payload}\r\n },\r\n getLoadedEntities(entities) {\r\n return entities;\r\n }\r\n}\r\n\r\nconst getApiDataToAdd = data => {\r\n let newFields = {verseId: data.verseId};\r\n if (data.highlightedText) {\r\n switch (data.versionId) {\r\n case 1:\r\n newFields = { ...newFields, versionId: data.versionId, uncVerseText: data.highlightedText };\r\n break;\r\n default:\r\n newFields = { ...newFields, versionId: data.versionId, verseText: data.highlightedText }\r\n }\r\n }\r\n\r\n if (data.userId) {\r\n newFields = { ...newFields, userId: data.userId }\r\n }\r\n return newFields;\r\n}","import * as entitiesNames from '../../common/entities/constants';\r\n\r\nexport const bibleHistory = {\r\n entityName: entitiesNames.BIBLEHISTORY,\r\n storageTableName: 'bibleHistory',\r\n sortByField: 'readDateTimeLt',\r\n sortDirection: 'desc',\r\n apiTableName: 'UserChaptersReadHistory',\r\n filterByVersionId: false,\r\n shouldNormalizeApiResponse: false,\r\n isGetEntitiesUserAuthenticationRequired: true,\r\n //apiSchemaArray: verseOfTheDayApiSchemaArray,\r\n addApiData(payload) {\r\n return getApiDataToAdd(payload)\r\n },\r\n addToStoragePayload(payload) { \r\n return payload;\r\n },\r\n getLoadedEntities(entities) {\r\n return entities;\r\n },\r\n //getEntityListFromApi: function*(filter) { yield call(getVerseOfTheDayListFromApi, filter) } \r\n getUnsynchedEntitiesFilter(lastUploadedDateTimeLtISO) {\r\n let filter = lastUploadedDateTimeLtISO\r\n ? {\r\n readDateTimeLt: {\r\n operand: '>',\r\n value: lastUploadedDateTimeLtISO\r\n }\r\n }\r\n : null;\r\n return filter;\r\n },\r\n getEntityListFilterForApi(filter, userId, lastUpdatedDateTimeUtc) {\r\n filter = {...filter, userId: userId }\r\n if (lastUpdatedDateTimeUtc) {\r\n filter = {...filter, modifiedDateTimeUtc: lastUpdatedDateTimeUtc }\r\n }\r\n \r\n return filter;\r\n },\r\n getEntityListFromApiResponse(apiResponse) {\r\n return apiResponse.items;\r\n }\r\n}\r\n\r\nconst getApiDataToAdd = data => { \r\n const {bookId, ...historyData} = data;\r\n return historyData;\r\n}","import { verseOfTheDay } from '../../features/VerseOfTheDay/metadata';\r\nimport { highlightedVerses } from '../../features/HighlightedVerses/metadata';\r\nimport { bibleHistory } from './../../features/BibleHistory/metadata';\r\n\r\nexport const entities = [];\r\n\r\nexport const initializeEntities = () => {\r\n entities.push(verseOfTheDay);\r\n entities.push(highlightedVerses);\r\n entities.push(bibleHistory);\r\n}\r\n\r\nexport const entityByName = entityName => entities.find(entity => entity.entityName === entityName);\r\n\r\nexport const apiEntityResourceName = entityName => {\r\n let apiResourceName = entityName;\r\n const entity = entityByName(entityName);\r\n if (entity && entity.apiTableName) {\r\n apiResourceName = entity.apiTableName;\r\n }\r\n\r\n return apiResourceName;\r\n}","import { indexedDb } from '../../../services/indexedDb';\r\nimport { entityByName } from '../metadata';\r\n\r\nexport const fetchAddEntityToStorage = (entityName, payload) => {\r\n var table;\r\n const entity = entityByName(entityName);\r\n if (entity) {\r\n table = indexedDb.table(entity.storageTableName);\r\n\r\n return table.put(entity.addToStoragePayload(payload))\r\n .then(() => {\r\n return { ...payload }\r\n })\r\n .catch(error => {\r\n //throw error;\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n );\r\n } else {\r\n let error = 'Error adding entity to storage! Undefined entity';\r\n throw error;\r\n }\r\n}","import _ from 'lodash';\r\nimport { indexedDb } from '../../../services/indexedDb';\r\nimport { entityByName } from '../metadata';\r\n\r\nconst loadEntityListFromLocalStore = (entityName, filter) => {\r\n var table;\r\n const entity = entityByName(entityName);\r\n if (entity) {\r\n table = indexedDb.table(entity.storageTableName);\r\n }\r\n\r\n let entityList = table;\r\n\r\n if (filter && !_.isEmpty(filter)) {\r\n if (Object.values(filter)[0].operand) {\r\n if (Object.values(filter)[0].operand === '>') {\r\n entityList = entityList.where(Object.keys(filter)[0])\r\n .above(Object.values(filter)[0].value)\r\n } \r\n }\r\n else if (Object.values(filter)[0]) {\r\n entityList = entityList.where(Object.keys(filter)[0])\r\n .equals(Object.values(filter)[0])\r\n } \r\n }\r\n\r\n if (entity && entity.sortDirection && entity.sortDirection === 'desc') {\r\n entityList = entityList.reverse();\r\n }\r\n \r\n return entityList.toArray(); \r\n}\r\n\r\nexport const fetchEntityListFromStorage = (entityName, filter) => {\r\n return loadEntityListFromLocalStore(entityName, filter)\r\n .then(entities => { \r\n if (entities.length > 0) {\r\n const entity = entityByName(entityName);\r\n return entity && entity.getLoadedEntities ? entity.getLoadedEntities(entities) : entities; \r\n }\r\n else {\r\n //throw new Error('No verses found in local storage!');\r\n }\r\n })\r\n .catch(error => {\r\n //throw error;\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n ); \r\n}","import { indexedDb } from '../../../services/indexedDb';\r\nimport { SETTINGS_LASTUPDATED_ENTITYLIST_NAME } from '../../../features/constants';\r\n\r\nconst loadLastUpdatedEntityListSettingFromLocalStore = (entityName, versionId) => {\r\n return indexedDb.settings.get(SETTINGS_LASTUPDATED_ENTITYLIST_NAME(entityName, versionId));\r\n}\r\n\r\nexport const fetchLastUpdatedEntityListSettingFromStorage = (entityName, versionId) => {\r\n return loadLastUpdatedEntityListSettingFromLocalStore(entityName, versionId)\r\n .then(lastUpdatedSetting => {\r\n if (lastUpdatedSetting) { \r\n const response = {};\r\n return { ...response, lastUpdatedSetting }\r\n } else {\r\n }\r\n })\r\n .catch(error => {\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n ); \r\n}","import { getTableForEntityName } from './entityHelper';\r\n\r\nconst loadLastAddedEntityFromLocalStore = (entityName, filter) => {\r\n let lastAddedEntity = null;\r\n let table = getTableForEntityName(entityName);\r\n if (table) { \r\n lastAddedEntity = table.orderBy(filter).last();\r\n }\r\n\r\n return lastAddedEntity; \r\n}\r\n\r\nexport const fetchLastAddedEntityFromStorage = (entityName, filter) => {\r\n return loadLastAddedEntityFromLocalStore(entityName, filter)\r\n .then(entityItem => { \r\n return entityItem;\r\n })\r\n .catch(error => {\r\n //throw error;\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n );\r\n}","import { indexedDb } from '../../../services/indexedDb';\r\nimport { entityByName } from '../metadata';\r\n\r\nexport const getTableForEntityName = (entityName) => {\r\n let table = null;\r\n \r\n const entity = entityByName(entityName);\r\n if (entity) {\r\n table = indexedDb.table(entity.storageTableName);\r\n }\r\n\r\n return table;\r\n}","import { indexedDb } from '../../../services/indexedDb';\r\n\r\nconst loadEntitySettingFromLocalStore = (entityName, settingName) => {\r\n return indexedDb.settings.get(settingName);\r\n}\r\n\r\nexport const fetchEntitySettingFromStorage = (entityName, settingName) => {\r\n return loadEntitySettingFromLocalStore(entityName, settingName)\r\n .then(entitySetting => {\r\n if (entitySetting) { \r\n const response = {};\r\n return { ...response, entitySetting }\r\n } else {\r\n }\r\n })\r\n .catch(error => {\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n ); \r\n}","import _ from 'lodash';\r\nimport { indexedDb } from '../../../services/indexedDb';\r\nimport { entityByName } from '../metadata';\r\nimport { SETTINGS_LASTUPDATED_ENTITYLIST_NAME } from '../../../features/constants';\r\n\r\nexport const saveEntityListToStorage = (entityName, entityList, versionId, currentUtcTime) => {\r\n var table;\r\n const entity = entityByName(entityName);\r\n if (entity) {\r\n table = indexedDb.table(entity.storageTableName);\r\n }\r\n\r\n if (table) {\r\n const entities = _.values(entityList);\r\n table.bulkPut(entities)\r\n .then(lastKey => {\r\n })\r\n .catch(error => {\r\n });\r\n\r\n indexedDb.settings.put({ settingName: SETTINGS_LASTUPDATED_ENTITYLIST_NAME(entityName, versionId), lastUpdatedUtcTime: currentUtcTime })\r\n .catch(error => {\r\n });\r\n } \r\n}","import * as _fetchAddEntityToStorageService from './fetchAddEntityToStorageService';\r\nimport * as _fetchEntityListFromStorageService from './fetchEntityListFromStorageService';\r\nimport * as _fetchLastUpdatedEntityListSettingFromStorageService from './fetchLastUpdatedEntityListSettingFromStorageService';\r\nimport * as _fetchLastAddedEntityFromStorageService from './fetchLastAddedEntityFromStorageService';\r\nimport * as _fetchEntitySettingFromStorageService from './fetchEntitySettingFromStorageService';\r\nimport * as _saveEntityListToStorageService from './saveEntityListToStorageService';\r\n\r\nexport const fetchAddEntityToStorageService = _fetchAddEntityToStorageService;\r\nexport const fetchEntityListFromStorageService = _fetchEntityListFromStorageService;\r\nexport const fetchLastUpdatedEntityListSettingFromStorageService = _fetchLastUpdatedEntityListSettingFromStorageService;\r\nexport const fetchLastAddedEntityFromStorageService = _fetchLastAddedEntityFromStorageService;\r\nexport const fetchEntitySettingFromStorageService = _fetchEntitySettingFromStorageService;\r\nexport const saveEntityListToStorageService = _saveEntityListToStorageService;","import { take, put, fork, call, all, select } from 'redux-saga/effects';\r\nimport { chapterVersesActions } from '../actions';\r\nimport { getChapterVersesFromStorageActions } from '../actions';\r\nimport { addEntityActions, entityListActions, getEntityActions } from '../../../../common/entities/actions';\r\nimport * as entitiesNames from '../../../../common/entities/constants';\r\nimport { getCurrentDateTimeLtISO } from '../../../../utils/dateHelper';\r\nimport { activeRoute } from '../../../../utils/routesHelper';\r\nimport * as Routes from '../../../../constants';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\nimport { fetchLastAddedEntityFromStorageService } from '../../../../common/entities/indexedDbStorage';\r\n\r\n// bind Generators\r\nconst fetchLastAddedEntityFromStorage = fetchEntity.bind(null, getEntityActions.getLastAddedEntityFromStorage, fetchLastAddedEntityFromStorageService.fetchLastAddedEntityFromStorage);\r\n\r\nconst getLoggedinUser = state => state.loggedinUser;\r\n\r\nfunction* loadVerses(bibleVersionId, bookId, chapterId) {\r\n yield put(getChapterVersesFromStorageActions.loadChapterVersesFromStorage(bibleVersionId, bookId, chapterId));\r\n}\r\n\r\nfunction* shouldAddChapterToBibleHistory(chapterId) {\r\n const filterField = 'readDateTimeLt';\r\n yield call(fetchLastAddedEntityFromStorage, entitiesNames.BIBLEHISTORY, filterField);\r\n}\r\n\r\nfunction* addToBibleHistory(bookId, chapterId) {\r\n let newFields = { readDateTimeLt: getCurrentDateTimeLtISO(), bookId: bookId, chapterId: chapterId };\r\n\r\n let loggedinUser = yield select(getLoggedinUser);\r\n if (loggedinUser) {\r\n newFields = { ...newFields, userId: loggedinUser.userId }\r\n }\r\n yield put(addEntityActions.addEntity(entitiesNames.BIBLEHISTORY, newFields));\r\n}\r\n\r\nexport const watchLoadChapterVerses = function* () {\r\n const { GET_CHAPTER_VERSES } = chapterVersesActions;\r\n const { GET_LASTADDED_ENTITY_FROM_STORAGE } = getEntityActions;\r\n\r\n while(true) {\r\n const {bibleVersionId, bookId, chapterId} = yield take(GET_CHAPTER_VERSES.REQUEST); \r\n yield all([\r\n fork(loadVerses, bibleVersionId, bookId, chapterId),\r\n //put(entityListActions.getEntityList.request(entitiesNames.HIGHLIGHTEDVERSES, {chapterId: chapterId})),\r\n //put(entityListActions.getEntityList.request(entitiesNames.FAVORITEVERSES, {chapterId: chapterId})),\r\n put(entityListActions.getEntityList.request(entitiesNames.VERSEOFTHEDAY, {versionId: bibleVersionId}))\r\n ]); \r\n \r\n const action = yield take([GET_CHAPTER_VERSES.SUCCESS, GET_CHAPTER_VERSES.FAILURE]);\r\n if (action.type === GET_CHAPTER_VERSES.SUCCESS) {\r\n if (activeRoute(Routes.ROUTES_BIBLE_PATHNAME)) {\r\n yield fork(shouldAddChapterToBibleHistory, chapterId);\r\n\r\n const action = yield take([\r\n GET_LASTADDED_ENTITY_FROM_STORAGE(entitiesNames.BIBLEHISTORY).SUCCESS,\r\n GET_LASTADDED_ENTITY_FROM_STORAGE(entitiesNames.BIBLEHISTORY).FAILURE\r\n ]);\r\n \r\n if (action.type === GET_LASTADDED_ENTITY_FROM_STORAGE(entitiesNames.BIBLEHISTORY).SUCCESS) {\r\n if (action.response.chapterId && action.response.chapterId !== chapterId) {\r\n yield fork(addToBibleHistory, bookId, chapterId);\r\n }\r\n } else {\r\n yield fork(addToBibleHistory, bookId, chapterId);\r\n } \r\n }\r\n }\r\n }\r\n}","import { indexedDb } from '../../../../services/indexedDb';\r\nimport _ from 'lodash';\r\n\r\nexport const addVersesToLocalStore = (verses) => {\r\n const versesList = _.values(verses);\r\n indexedDb.verses.bulkPut(versesList).then(lastKey => {\r\n })\r\n .catch(error => {\r\n });\r\n}","import { indexedDb } from '../../../../services/indexedDb';\r\n\r\nexport const loadVersesByChapterIdAndVersionIdFromLocalStore = (versionId, chapterId) => {\r\n return indexedDb.verses.where('chapterId')\r\n .equals(chapterId)\r\n .and(verse => { return verse.versionId === versionId; })\r\n .toArray();\r\n}","import { schema } from 'normalizr';\r\n\r\nconst verseSchema = new schema.Entity('verses', {}, {idAttribute: 'verseId'});\r\n\r\n// Schema for Verses API responses.\r\nexport const verseApiSchemaArray = { items: [ verseSchema ] };\r\n\r\nexport const verseStorageSchemaArray = [ verseSchema ];","import { normalize } from 'normalizr';\r\nimport { verseStorageSchemaArray } from '../schema';\r\nimport { loadVersesByChapterIdAndVersionIdFromLocalStore } from './loadVersesByChapterIdAndVersionIdFromLocalStoreDb';\r\n\r\nexport const fetchVersesByChapterIdAndVersionIdFromStorage = (versionId, chapterId) => {\r\n return loadVersesByChapterIdAndVersionIdFromLocalStore(versionId, chapterId)\r\n .then(verses => { \r\n if (verses.length > 0) {\r\n const normalized = normalize(verses, verseStorageSchemaArray);\r\n return {...normalized}\r\n }\r\n else {\r\n //throw new Error('No verses found in local storage!');\r\n }\r\n })\r\n .catch(error => {\r\n //throw error;\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n ); \r\n}","import * as _addVersesToLocalStoreDb from './addVersesToLocalStoreDb';\r\nimport * as _loadVersesByChapterIdAndVersionIdFromLocalStoreDb from './loadVersesByChapterIdAndVersionIdFromLocalStoreDb';\r\nimport * as _fetchVersesByChapterIdAndVersionIdFromStorageService from './fetchVersesByChapterIdAndVersionIdFromStorageService';\r\n\r\nexport const addVersesToLocalStoreDb = _addVersesToLocalStoreDb;\r\nexport const loadVersesByChapterIdAndVersionIdFromLocalStoreDb = _loadVersesByChapterIdAndVersionIdFromLocalStoreDb;\r\nexport const fetchVersesByChapterIdAndVersionIdFromStorageService = _fetchVersesByChapterIdAndVersionIdFromStorageService;","import { take, call, fork, put } from 'redux-saga/effects';\r\nimport { chapterVersesActions, getChapterVersesFromStorageActions, getChapterVersesFromApiActions } from '../actions';\r\nimport { fetchVersesByChapterIdAndVersionIdFromStorageService } from '../indexedDbStorage';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchChapterVersesFromStorage = fetchEntity.bind(null, getChapterVersesFromStorageActions.getChapterVersesFromStorage, fetchVersesByChapterIdAndVersionIdFromStorageService.fetchVersesByChapterIdAndVersionIdFromStorage);\r\n\r\nfunction* loadVerses(bibleVersionId, chapterId) {\r\n yield call(fetchChapterVersesFromStorage, bibleVersionId, chapterId); \r\n}\r\n\r\nexport const watchLoadChapterVersesFromStorage = function* () {\r\n const { GET_CHAPTER_VERSES_FROM_STORAGE } = getChapterVersesFromStorageActions;\r\n \r\n while(true) {\r\n const {bibleVersionId, bookId, chapterId} = yield take(getChapterVersesFromStorageActions.LOAD_CHAPTER_VERSES_FROM_STORAGE);\r\n yield fork(loadVerses, bibleVersionId, chapterId);\r\n \r\n const action = yield take([\r\n GET_CHAPTER_VERSES_FROM_STORAGE.SUCCESS, \r\n GET_CHAPTER_VERSES_FROM_STORAGE.FAILURE\r\n ]);\r\n \r\n if (action.type === GET_CHAPTER_VERSES_FROM_STORAGE.FAILURE) {\r\n yield put(getChapterVersesFromApiActions.loadChapterVersesFromApi(bibleVersionId, bookId, chapterId));\r\n } else if (action.type === GET_CHAPTER_VERSES_FROM_STORAGE.SUCCESS) {\r\n yield put (chapterVersesActions.getChapterVerses.success('ChapterVerses', action.response));\r\n } \r\n }\r\n}","import { callApiNormalizedResponse } from '../../../services/api';\r\nimport { chaptersResourceUrl } from '../Chapters/bookChaptersApi';\r\nimport { verseApiSchemaArray } from './schema';\r\n\r\nexport const VERSES_RESOURCE = 'verses';\r\nexport const chapterVersesResourceUrl = (apiUrl, bookId, chapterId) => `${chaptersResourceUrl(apiUrl, bookId)}/${chapterId}/${VERSES_RESOURCE}`;\r\nconst resourceUrl = (apiUrl, bibleVersionId, bookId, chapterId) => { return `${chapterVersesResourceUrl(apiUrl, bookId, chapterId)}?versionId=${bibleVersionId}` }\r\n\r\n// verses api services\r\nexport const fetchChapterVersesApi = (apiUrl, bibleVersionId, bookId, chapterId) => callApiNormalizedResponse(resourceUrl(apiUrl, bibleVersionId, bookId, chapterId), verseApiSchemaArray);\r\n","import { take, call, fork, select, put } from 'redux-saga/effects';\r\nimport { chapterVersesActions, getChapterVersesFromApiActions, updateVersesStorage, displayDownloadBibleOptions } from '../actions';\r\nimport { fetchChapterVersesApi } from '../chapterVersesApi';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchChapterVerses = fetchEntity.bind(null, getChapterVersesFromApiActions.getChapterVersesFromApi, fetchChapterVersesApi);\r\n\r\nconst getApiUrl = state => state.systemSettings.apiUrl;\r\n\r\nfunction* loadVerses(bibleVersionId, bookId, chapterId) {\r\n let apiUrl = yield select(getApiUrl);\r\n \r\n yield call(fetchChapterVerses, apiUrl, bibleVersionId, bookId, chapterId);\r\n}\r\n\r\nexport const watchLoadChapterVersesFromApi = function* () {\r\n const { GET_CHAPTER_VERSES_FROM_API } = getChapterVersesFromApiActions;\r\n\r\n while(true) {\r\n const {bibleVersionId, bookId, chapterId} = yield take(getChapterVersesFromApiActions.LOAD_CHAPTER_VERSES_FROM_API); \r\n yield fork(loadVerses, bibleVersionId, bookId, chapterId);\r\n\r\n const action = yield take([GET_CHAPTER_VERSES_FROM_API.SUCCESS, GET_CHAPTER_VERSES_FROM_API.FAILURE]);\r\n if (action.type === GET_CHAPTER_VERSES_FROM_API.SUCCESS) {\r\n yield put(chapterVersesActions.getChapterVerses.success('ChapterVerses', action.response));\r\n yield put(displayDownloadBibleOptions(bibleVersionId, bookId));\r\n const verses = action.response.entities.verses;\r\n yield put(updateVersesStorage(verses));\r\n } else if (action.type === GET_CHAPTER_VERSES_FROM_API.FAILURE) {\r\n yield put(chapterVersesActions.getChapterVerses.failure());\r\n }\r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { UPDATE_VERSES_STORAGE } from '../actions';\r\nimport { addVersesToLocalStoreDb } from '../indexedDbStorage';\r\n\r\nfunction* updateLocalStorage(verses) {\r\n yield call(addVersesToLocalStoreDb.addVersesToLocalStore, verses);\r\n}\r\n\r\nexport const watchUpdateVersesLocalStorage = function* () {\r\n while(true) {\r\n const {verses} = yield take(UPDATE_VERSES_STORAGE);\r\n yield fork(updateLocalStorage, verses);\r\n }\r\n}","import { callApiNormalizedResponse } from '../../../services/api';\r\nimport { bibleBooksResourceUrl } from '../Books/api';\r\nimport { VERSES_RESOURCE } from './chapterVersesApi';\r\nimport { verseApiSchemaArray } from './schema';\r\n\r\nexport const bookVersesResourceUrl = (apiUrl, bookId) => `${bibleBooksResourceUrl(apiUrl)}/${bookId}/${VERSES_RESOURCE}`;\r\nconst resourceUrl = (apiUrl, bibleVersionId, bookId) => { return `${bookVersesResourceUrl(apiUrl, bookId)}?versionId=${bibleVersionId}` }\r\n\r\n// verses api services\r\nexport const fetchBookVersesApi = (apiUrl, bibleVersionId, bookId) => callApiNormalizedResponse(resourceUrl(apiUrl, bibleVersionId, bookId), verseApiSchemaArray);","import { take, call, fork, select, put } from 'redux-saga/effects';\r\nimport { bookVersesFromApiActions, updateVersesStorage } from '../actions';\r\nimport { fetchBookVersesApi } from '../bookVersesApi';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchBookVerses = fetchEntity.bind(null, bookVersesFromApiActions.getBookVersesFromApi, fetchBookVersesApi);\r\n\r\nconst getApiUrl = state => state.systemSettings.apiUrl;\r\n\r\nfunction* loadVerses(bibleVersionId, bookId) {\r\n let apiUrl = yield select(getApiUrl);\r\n \r\n yield call(fetchBookVerses, apiUrl, bibleVersionId, bookId);\r\n}\r\n\r\nexport const watchLoadBookVersesFromApi = function* () {\r\n const { GET_BOOK_VERSES_FROM_API } = bookVersesFromApiActions;\r\n\r\n while(true) {\r\n const {bibleVersionId, bookId} = yield take(bookVersesFromApiActions.LOAD_BOOK_VERSES_FROM_API); \r\n yield fork(loadVerses, bibleVersionId, bookId);\r\n\r\n const action = yield take([GET_BOOK_VERSES_FROM_API.SUCCESS, GET_BOOK_VERSES_FROM_API.FAILURE]);\r\n if (action.type === GET_BOOK_VERSES_FROM_API.SUCCESS) {\r\n const verses = action.response.entities.verses;\r\n yield put(updateVersesStorage(verses));\r\n }\r\n }\r\n}","import { callApiNormalizedResponse } from '../../../services/api';\r\nimport { endpointUrl } from '../../../services/apiHelper';\r\nimport { VERSES_RESOURCE } from './chapterVersesApi';\r\nimport { verseApiSchemaArray } from './schema';\r\n\r\nexport const versesResourceUrl = apiUrl => endpointUrl(apiUrl, VERSES_RESOURCE);\r\nconst resourceUrl = (apiUrl, bibleVersionId) => { return `${versesResourceUrl(apiUrl)}?versionId=${bibleVersionId}` }\r\n\r\n// verses api services\r\nexport const fetchBibleVersesApi = (apiUrl, bibleVersionId) => callApiNormalizedResponse(resourceUrl(apiUrl, bibleVersionId), verseApiSchemaArray);","import { take, call, fork, select, put } from 'redux-saga/effects';\r\nimport { bibleChaptersFromApiActions } from '../../Chapters/actions';\r\nimport { bibleVersesFromApiActions, updateVersesStorage } from '../actions';\r\nimport { fetchBibleVersesApi } from '../bibleVersesApi';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchBibleVerses = fetchEntity.bind(null, bibleVersesFromApiActions.getBibleVersesFromApi, fetchBibleVersesApi);\r\n\r\nconst getApiUrl = state => state.systemSettings.apiUrl;\r\n\r\nfunction* loadVerses(bibleVersionId) {\r\n let apiUrl = yield select(getApiUrl);\r\n \r\n yield call(fetchBibleVerses, apiUrl, bibleVersionId);\r\n}\r\n\r\nexport const watchLoadBibleVersesFromApi = function* () {\r\n const { GET_BIBLE_VERSES_FROM_API } = bibleVersesFromApiActions;\r\n\r\n while(true) {\r\n const {bibleVersionId} = yield take(bibleVersesFromApiActions.LOAD_BIBLE_VERSES_FROM_API);\r\n yield put(bibleChaptersFromApiActions.loadBibleChaptersFromApi(bibleVersionId)); \r\n yield fork(loadVerses, bibleVersionId);\r\n\r\n const action = yield take([GET_BIBLE_VERSES_FROM_API.SUCCESS, GET_BIBLE_VERSES_FROM_API.FAILURE]);\r\n if (action.type === GET_BIBLE_VERSES_FROM_API.SUCCESS) {\r\n const verses = action.response.entities.verses;\r\n yield put(updateVersesStorage(verses));\r\n }\r\n }\r\n}","import { fork, all } from 'redux-saga/effects';\r\nimport { watchLoadChapterVerses } from './getVersesSaga';\r\nimport { watchLoadChapterVersesFromStorage } from './getVersesFromStorageSaga';\r\nimport { watchLoadChapterVersesFromApi } from './getVersesFromApiSaga';\r\nimport { watchUpdateVersesLocalStorage } from './updateVersesLocalStorageSaga';\r\nimport { watchLoadBookVersesFromApi } from './getBookVersesFromApiSaga';\r\nimport { watchLoadBibleVersesFromApi } from './getBibleVersesFromApiSaga';\r\n\r\nexport const watchVersesRequests = function*() {\r\n yield all([\r\n fork(watchLoadChapterVerses),\r\n fork(watchLoadChapterVersesFromStorage),\r\n fork(watchLoadChapterVersesFromApi),\r\n fork(watchUpdateVersesLocalStorage),\r\n fork(watchLoadBookVersesFromApi),\r\n fork(watchLoadBibleVersesFromApi) \r\n ])\r\n}","import { fork, all } from 'redux-saga/effects';\r\nimport { watchLoadBibleBooks } from './getBooksSaga';\r\nimport { watchLoadBibleBooksFromStorage } from './getBooksFromStorageSaga';\r\nimport { watchLoadBibleBooksFromApi } from './getBooksFromApiSaga';\r\nimport { watchUpdateBibleBooksLocalStorage } from './updateBooksLocalStorageSaga';\r\nimport { watchSetBibleBook } from './setBibleBookSaga';\r\nimport { watchUpdateViewFiltersBibleBookLocalStorage } from './updateViewFiltersBibleBookLocalStoreSaga';\r\nimport { watchLoadViewFiltersBibleBookFromStorage } from './getViewFiltersBibleBookFromStorageSaga';\r\nimport { watchChaptersRequests } from '../../Chapters/sagas';\r\nimport { watchVersesRequests } from '../../Verses/sagas';\r\n\r\nexport const watchBibleBooksRequests = function*() {\r\n yield all([\r\n fork(watchLoadBibleBooks),\r\n fork(watchLoadBibleBooksFromStorage),\r\n fork(watchLoadBibleBooksFromApi),\r\n fork(watchUpdateBibleBooksLocalStorage),\r\n fork(watchSetBibleBook),\r\n fork(watchUpdateViewFiltersBibleBookLocalStorage),\r\n fork(watchLoadViewFiltersBibleBookFromStorage),\r\n fork(watchChaptersRequests),\r\n fork(watchVersesRequests)\r\n ])\r\n}","import { indexedDb } from '../../../services/indexedDb';\r\nimport _ from 'lodash';\r\nimport { SETTINGS_LASTUPDATED_VERSEOFTHEDAYLIST_NAME } from '../../constants';\r\n\r\nexport const saveVerseOfTheDayListToStorage = (verses, currentUtcTime) => {\r\n const versesList = _.values(verses);\r\n indexedDb.verseOfTheDayList.bulkPut(versesList).then(lastKey => {\r\n })\r\n .catch(error => {\r\n });\r\n\r\n indexedDb.settings.put({settingName: SETTINGS_LASTUPDATED_VERSEOFTHEDAYLIST_NAME, lastUpdatedUtcTime: currentUtcTime})\r\n .catch(error => {\r\n });\r\n}","import { indexedDb } from '../../../services/indexedDb';\r\nimport { normalize } from 'normalizr';\r\nimport { verseOfTheDayStorageSchemaArray } from '../schema';\r\n\r\nconst loadVerseOfTheDayListFromLocalStore = (versionId) => {\r\n return indexedDb.verseOfTheDayList.where('versionId')\r\n .equals(versionId)\r\n .toArray();\r\n}\r\n\r\nexport const fetchVerseOfTheDayListFromStorage = (versionId) => {\r\n return loadVerseOfTheDayListFromLocalStore(versionId)\r\n .then(verses => { \r\n if (verses.length > 0) {\r\n const normalized = normalize(verses, verseOfTheDayStorageSchemaArray);\r\n return {...normalized}\r\n }\r\n else {\r\n //throw new Error('No verses found in local storage!');\r\n }\r\n })\r\n .catch(error => {\r\n //throw error;\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n ); \r\n}","import { indexedDb } from '../../../services/indexedDb';\r\n\r\nconst loadPersonalVerseOfTheDayFromLocalStore = (date) => {\r\n return indexedDb.personalVerseOfTheDay.get(date);\r\n}\r\n\r\nconst loadVerseOfTheDay = (bibleVersionId, verseId) => {\r\n return indexedDb.verseOfTheDayList.get({verseId: verseId, versionId: bibleVersionId});\r\n}\r\n\r\nexport const fetchPersonalVerseOfTheDayByDateFromStorage = (bibleVersionId, date) => {\r\n return loadPersonalVerseOfTheDayFromLocalStore(date)\r\n .then(personalVerseOfTheDay => {\r\n if (personalVerseOfTheDay) {\r\n return loadVerseOfTheDay(bibleVersionId, personalVerseOfTheDay.verseId)\r\n } else {\r\n }\r\n })\r\n .then(verseOfTheDay => {\r\n if (verseOfTheDay) { \r\n const response = { verseOfTheDay };\r\n return { ...response, date }\r\n } else {\r\n }\r\n })\r\n .catch(error => {\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n ); \r\n}","import { indexedDb } from '../../../services/indexedDb';\r\n\r\nexport const savePersonalVerseOfTheDayToStorage = (date, verseId) => {\r\n indexedDb.personalVerseOfTheDay.put({date: date, verseId: verseId})\r\n .catch(error => {\r\n });\r\n}","import { indexedDb } from '../../../services/indexedDb';\r\nimport { SETTINGS_LASTUPDATED_VERSEOFTHEDAYLIST_NAME } from '../../constants';\r\n\r\nconst loadLastUpdatedVerseOfTheDayListSettingFromLocalStore = () => {\r\n return indexedDb.settings.get(SETTINGS_LASTUPDATED_VERSEOFTHEDAYLIST_NAME);\r\n}\r\n\r\nexport const fetchLastUpdatedVerseOfTheDayListSettingFromStorage = () => {\r\n return loadLastUpdatedVerseOfTheDayListSettingFromLocalStore()\r\n .then(lastUpdatedSetting => {\r\n if (lastUpdatedSetting) { \r\n const response = {};\r\n return { ...response, lastUpdatedSetting }\r\n } else {\r\n }\r\n })\r\n .catch(error => {\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n ); \r\n}","import * as _saveVerseOfTheDayListToStorageService from './saveVerseOfTheDayListToStorageService';\r\nimport * as _fetchVerseOfTheDayListFromStorageService from './fetchVerseOfTheDayListFromStorageService';\r\nimport * as _fetchPersonalVerseOfTheDayByDateFromStorageService from './fetchPersonalVerseOfTheDayByDateFromStorageService';\r\nimport * as _savePersonalVerseOfTheDayToStorageService from './savePersonalVerseOfTheDayToStorageService';\r\nimport * as _fetchLastUpdatedVerseOfTheDayListSettingFromStorageService from './fetchLastUpdatedVerseOfTheDayListSettingFromStorageService';\r\n\r\nexport const saveVerseOfTheDayListToStorageService = _saveVerseOfTheDayListToStorageService;\r\nexport const fetchVerseOfTheDayListFromStorageService = _fetchVerseOfTheDayListFromStorageService;\r\nexport const fetchPersonalVerseOfTheDayByDateFromStorageService = _fetchPersonalVerseOfTheDayByDateFromStorageService;\r\nexport const savePersonalVerseOfTheDayToStorageService = _savePersonalVerseOfTheDayToStorageService;\r\nexport const fetchLastUpdatedVerseOfTheDayListSettingFromStorageService = _fetchLastUpdatedVerseOfTheDayListSettingFromStorageService;","import { take, call, fork } from 'redux-saga/effects';\r\nimport { verseOfTheDayActions } from '../actions';\r\nimport { fetchPersonalVerseOfTheDayByDateFromStorageService } from '../indexedDbStorage';\r\nimport { fetchEntity } from '../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchPersonalVerseOfTheDayFromStorage = fetchEntity.bind(null, verseOfTheDayActions.getPersonalVerseOfTheDayFromStorage, fetchPersonalVerseOfTheDayByDateFromStorageService.fetchPersonalVerseOfTheDayByDateFromStorage);\r\n\r\nfunction* loadPersonalVerseOfTheDay(bibleVersionId, date) {\r\n yield call(fetchPersonalVerseOfTheDayFromStorage, bibleVersionId, date); \r\n}\r\n\r\nexport const watchLoadPersonalVerseOfTheDayFromStorage = function* () {\r\n const { LOAD_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE, GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE } = verseOfTheDayActions;\r\n \r\n while(true) {\r\n const {bibleVersionId, date} = yield take(LOAD_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE);\r\n yield fork(loadPersonalVerseOfTheDay, bibleVersionId, date);\r\n \r\n const action = yield take([\r\n GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE.SUCCESS, \r\n GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE.FAILURE\r\n ]);\r\n \r\n if (action.type === GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE.FAILURE) { \r\n } \r\n }\r\n}","import { take, put } from 'redux-saga/effects';\r\nimport { entityListActions } from '../../../common/entities/actions';\r\nimport * as entitiesNames from '../../../common/entities/constants';\r\nimport { verseOfTheDayActions } from '../actions';\r\nimport { getCurrentDate } from '../../../utils/dateHelper';\r\n\r\nexport const watchGetVerseOfTheDay = function* () {\r\n const { GET_ENTITY_LIST } = entityListActions;\r\n const { GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE } = verseOfTheDayActions; \r\n\r\n while(true) {\r\n const {bibleVersionId} = yield take(verseOfTheDayActions.GET_VERSEOFTHEDAY);\r\n yield put(entityListActions.getEntityList.request(entitiesNames.VERSEOFTHEDAY, {versionId: bibleVersionId})); \r\n \r\n const action = yield take([GET_ENTITY_LIST(entitiesNames.VERSEOFTHEDAY).SUCCESS, GET_ENTITY_LIST(entitiesNames.VERSEOFTHEDAY).FAILURE]);\r\n if (action.type === GET_ENTITY_LIST(entitiesNames.VERSEOFTHEDAY).SUCCESS) {\r\n let currentDate = getCurrentDate();\r\n yield put(verseOfTheDayActions.loadPersonalVerseOfTheDayFromStorage(bibleVersionId, currentDate));\r\n\r\n const action = yield take([GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE.SUCCESS, GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE.FAILURE]);\r\n if (action.type === GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE.FAILURE) {\r\n yield put(verseOfTheDayActions.generateVerseOfTheDay.request(currentDate)); \r\n } \r\n }\r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { verseOfTheDayListStorageActions } from '../actions';\r\nimport { saveVerseOfTheDayListToStorageService } from '../indexedDbStorage';\r\n\r\nfunction* updateStorage(verses, currentUtcTime) {\r\n yield call(saveVerseOfTheDayListToStorageService.saveVerseOfTheDayListToStorage, verses, currentUtcTime);\r\n}\r\n\r\nexport const watchSaveVerseOfTheDayListToStorage = function* () {\r\n while(true) {\r\n const {entityList, currentUtcTime} = yield take(verseOfTheDayListStorageActions.SAVE_VERSEOFTHEDAY_LIST_TO_STORAGE);\r\n if (entityList) {\r\n yield fork(updateStorage, entityList, currentUtcTime);\r\n } \r\n }\r\n}","import { take, fork, select, put } from 'redux-saga/effects';\r\nimport { verseOfTheDayActions } from '../actions';\r\nimport _ from 'lodash';\r\n\r\nconst getVerseOfTheDayList = (state) => _.values(state.entities.verseOfTheDay);\r\n\r\nfunction getRndInteger(min, max) {\r\n min = Math.ceil(min);\r\n max = Math.floor(max);\r\n return Math.floor(Math.random() * (max - min + 1) ) + min;\r\n }\r\n\r\nfunction* generateVerseOfTheDay(date) {\r\n let verseOfTheDayList = yield select(getVerseOfTheDayList);\r\n\r\n let verseIndex = getRndInteger(0, verseOfTheDayList.length - 1);\r\n let verseOfTheDay = verseOfTheDayList[verseIndex];\r\n\r\n if (verseOfTheDay) { \r\n yield put(verseOfTheDayActions.savePersonalVerseOfTheDayToStorage(date, verseOfTheDay.verseId));\r\n let response = { verseOfTheDay };\r\n response = { ...response, date }\r\n yield put(verseOfTheDayActions.generateVerseOfTheDay.success(verseOfTheDay.verseVersionId, response));\r\n //sync to server \r\n }\r\n else {\r\n yield put(verseOfTheDayActions.generateVerseOfTheDay.failure(null, { error: 'Error encountered while generating verse of the day!' }))\r\n } \r\n}\r\n\r\nexport const watchGenerateVerseOfTheDay = function* () {\r\n while(true) {\r\n const {date} = yield take(verseOfTheDayActions.GENERATE_VERSEOFTHEDAY.REQUEST);\r\n yield fork(generateVerseOfTheDay, date); \r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { verseOfTheDayActions } from '../actions';\r\nimport { savePersonalVerseOfTheDayToStorageService } from '../indexedDbStorage';\r\n\r\nfunction* updateStorage(date, verseId) {\r\n yield call(savePersonalVerseOfTheDayToStorageService.savePersonalVerseOfTheDayToStorage, date, verseId);\r\n}\r\n\r\nexport const watchSavePersonalVerseOfTheDayToStorage = function* () {\r\n while(true) {\r\n const {date, verseId} = yield take(verseOfTheDayActions.SAVE_PERSONAL_VERSEOFTHEDAY_TO_STORAGE);\r\n yield fork(updateStorage, date, verseId);\r\n }\r\n}","import { take, put } from 'redux-saga/effects';\r\nimport * as bibleVersionsActions from '../../Bible/Versions/actions';\r\nimport { verseOfTheDayActions } from '../actions';\r\nimport { ROUTES_VERSEOFTHEDAY_PATHNAME } from '../../../constants';\r\n\r\nexport const watchSetVerseOfTheDayVersion = function* () {\r\n while(true) {\r\n const {versionId} = yield take(bibleVersionsActions.SET_BIBLE_VERSION);\r\n if (window.location.pathname === ROUTES_VERSEOFTHEDAY_PATHNAME) { \r\n yield put(verseOfTheDayActions.getVerseOfTheDay(versionId));\r\n } \r\n }\r\n}","import { fork, all } from 'redux-saga/effects';\r\nimport { watchLoadPersonalVerseOfTheDayFromStorage } from './getPersonalVerseOfTheDayFromStorageSaga';\r\nimport { watchGetVerseOfTheDay } from './getVerseOfTheDaySaga';\r\n//import { watchGetVerseOfTheDayList } from './getVerseOfTheDayListSaga';\r\n//import { watchLoadVerseOfTheDayListFromStorage } from './getVerseOfTheDayListFromStorageSaga';\r\n//import { watchLoadVerseOfTheDayListFromApi } from './getVerseOfTheDayListFromApiSaga';\r\n//import { watchLoadUpdatedVerseOfTheDayListFromApi } from './getUpdatedVerseOfTheDayListFromApiSaga';\r\nimport { watchSaveVerseOfTheDayListToStorage } from './saveVerseOfTheDayListToStorageSaga';\r\nimport { watchGenerateVerseOfTheDay } from './generateVerseOfTheDaySaga';\r\nimport { watchSavePersonalVerseOfTheDayToStorage } from './savePersonalVerseOfTheDayToStorageSaga';\r\nimport { watchSetVerseOfTheDayVersion } from './setVerseOfTheDayVersionSaga';\r\n\r\nexport const watchVerseOfTheDayRequests = function*() {\r\n yield all([\r\n fork(watchGetVerseOfTheDay),\r\n //fork(watchGetVerseOfTheDayList),\r\n //fork(watchLoadVerseOfTheDayListFromStorage),\r\n //fork(watchLoadVerseOfTheDayListFromApi),\r\n //fork(watchLoadUpdatedVerseOfTheDayListFromApi),\r\n fork(watchLoadPersonalVerseOfTheDayFromStorage),\r\n fork(watchSaveVerseOfTheDayListToStorage),\r\n fork(watchGenerateVerseOfTheDay),\r\n fork(watchSavePersonalVerseOfTheDayToStorage),\r\n fork(watchSetVerseOfTheDayVersion) \r\n ])\r\n}","import { take, call, fork, put } from 'redux-saga/effects';\r\nimport { loginActions, signedInUsersStorageActions } from '../actions';\r\nimport { fetchSubmitLoginRequestApi } from '../api/loginApi';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchSubmitLoginRequest = fetchEntity.bind(null, loginActions.login, fetchSubmitLoginRequestApi);\r\n\r\nfunction* submitLoginRequest(encodedCredentials) {\r\n yield call(fetchSubmitLoginRequest, encodedCredentials);\r\n}\r\n\r\nexport const watchSubmitLoginRequest = function* () {\r\n while(true) {\r\n const {encodedCredentials, shouldRememberUser} = yield take(loginActions.SUBMIT_LOGIN_REQUEST);\r\n yield fork(submitLoginRequest, encodedCredentials);\r\n\r\n const action = yield take([loginActions.LOGIN.SUCCESS, loginActions.LOGIN.FAILURE]);\r\n if (action.type === loginActions.LOGIN.SUCCESS) {\r\n if (shouldRememberUser) {\r\n yield put(signedInUsersStorageActions.saveUserToStorage(action.response));\r\n }\r\n \r\n window.history.back(); \r\n }\r\n }\r\n}","import { callApi, API_POST } from '../../../../services/api';\r\nimport { tokenResourceUrl } from '../../../../services/apiResources';\r\n\r\n// login api service\r\nexport const fetchSubmitLoginRequestApi = (encodedCredentials) => callApi(tokenResourceUrl(), API_POST, encodedCredentials);","import { indexedDb } from '../../../../services/indexedDb';\r\nimport { USER_SETTINGS_SIGNEDIN_USERS } from '../../../constants';\r\n\r\nexport const deleteUserFromStorage = (userId) => {\r\n indexedDb.userSettings\r\n .delete([USER_SETTINGS_SIGNEDIN_USERS, userId])\r\n .catch(error => {\r\n });\r\n}","import * as _deleteUserFromStorageService from './deleteUserFromStorageService';\r\n\r\nexport const deleteUserFromStorageService = _deleteUserFromStorageService;","import { take, fork, call, put } from 'redux-saga/effects';\r\nimport _ from 'lodash';\r\nimport { autoSignInActions, signedInUsersStorageActions } from '../actions';\r\nimport { fetchSubmitAutoSignInRequestApi } from '../api/autoSignInApi';\r\nimport { deleteUserFromStorageService } from '../../SignOut/indexedDbStorage';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\nimport { setToken } from '../../../../services/api';\r\nimport { getCurrentDateTimeLt } from '../../../../utils/dateHelper';\r\n\r\n// bind Generators\r\nconst fetchSubmitAutoSignInRequest = fetchEntity.bind(null, autoSignInActions.autoSignIn, fetchSubmitAutoSignInRequestApi);\r\n\r\nconst { AUTOSIGNIN } = autoSignInActions;\r\n\r\nfunction* submitAutoSignInRequest(userId) {\r\n const loginDateTimeLt = getCurrentDateTimeLt(); \r\n yield fork(fetchSubmitAutoSignInRequest, JSON.stringify({currentDateTimeLt: loginDateTimeLt}));\r\n\r\n const action = yield take([AUTOSIGNIN.SUCCESS, AUTOSIGNIN.FAILURE]);\r\n if (action.type === AUTOSIGNIN.SUCCESS) {\r\n yield put(signedInUsersStorageActions.saveUserToStorage(action.response))\r\n } else if (action.type === AUTOSIGNIN.FAILURE) {\r\n yield call(deleteUserFromStorageService.deleteUserFromStorage, userId);\r\n setToken(null); \r\n }\r\n}\r\n\r\nexport const watchSubmitAutoSignInRequest = function* () {\r\n const { GET_SIGNEDIN_USERS_FROM_STORAGE } = signedInUsersStorageActions;\r\n\r\n while(true) {\r\n yield take(autoSignInActions.SUBMIT_AUTOSIGNIN_REQUEST);\r\n yield put(signedInUsersStorageActions.loadSignedInUsersFromStorage());\r\n\r\n const action = yield take([GET_SIGNEDIN_USERS_FROM_STORAGE.SUCCESS, GET_SIGNEDIN_USERS_FROM_STORAGE.FAILURE]);\r\n if (action.type === GET_SIGNEDIN_USERS_FROM_STORAGE.SUCCESS) {\r\n const signedInUsers = _.values(action.response);\r\n if (signedInUsers.length === 1) {\r\n const signedInUser = signedInUsers[0];\r\n setToken(signedInUser.token);\r\n yield fork(submitAutoSignInRequest, signedInUser.userId);\r\n } else { \r\n }\r\n }\r\n }\r\n}","import { callApi, API_POST } from '../../../../services/api';\r\nimport { autoSignInResourceUrl } from '../../../../services/apiResources';\r\n\r\n// autosignin api service\r\nexport const fetchSubmitAutoSignInRequestApi = loginDateTimeLt => callApi(autoSignInResourceUrl(), API_POST, loginDateTimeLt);","import { indexedDb } from '../../../../services/indexedDb';\r\nimport { USER_SETTINGS_SIGNEDIN_USERS } from '../../../constants';\r\n\r\nexport const saveUserToStorage = (userId, displayName, token) => {\r\n indexedDb.userSettings\r\n .put({\r\n settingName: USER_SETTINGS_SIGNEDIN_USERS,\r\n userId: userId,\r\n displayName: displayName,\r\n token: token\r\n })\r\n .catch(error => {\r\n });\r\n}","import { indexedDb } from '../../../../services/indexedDb';\r\nimport { USER_SETTINGS_SIGNEDIN_USERS } from '../../../constants';\r\n\r\nconst loadSignedInUsersFromLocalStore = () => {\r\n return indexedDb.userSettings.where('settingName')\r\n .equals(USER_SETTINGS_SIGNEDIN_USERS)\r\n .toArray();\r\n}\r\n\r\nexport const fetchSignedInUsersFromStorage = () => {\r\n return loadSignedInUsersFromLocalStore()\r\n .then(signedInUsers => { \r\n if (signedInUsers.length > 0) {\r\n return {...signedInUsers}\r\n }\r\n else {\r\n //throw new Error('No verses found in local storage!');\r\n }\r\n })\r\n .catch(error => {\r\n //throw error;\r\n })\r\n .then(\r\n response => ({ response }),\r\n error => ({ error: error.message })\r\n );\r\n}","import * as _saveUserToStorageService from './saveUserToStorageService';\r\nimport * as _fetchSignedInUsersFromStorageService from './fetchSignedInUsersFromStorageService';\r\n\r\nexport const saveUserToStorageService = _saveUserToStorageService;\r\nexport const fetchSignedInUsersFromStorageService = _fetchSignedInUsersFromStorageService;","import { take, call } from 'redux-saga/effects';\r\nimport { signedInUsersStorageActions } from '../actions';\r\nimport { fetchSignedInUsersFromStorageService } from '../indexedDbStorage';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchSignedInUsersFromStorage = fetchEntity.bind(null, signedInUsersStorageActions.getSignedInUsersFromStorage, fetchSignedInUsersFromStorageService.fetchSignedInUsersFromStorage);\r\n\r\nexport const watchLoadSignedInUsersFromStorage = function* () {\r\n while(true) {\r\n yield take(signedInUsersStorageActions.LOAD_SIGNEDIN_USERS_FROM_STORAGE);\r\n yield call(fetchSignedInUsersFromStorage);\r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { signedInUsersStorageActions } from '../actions';\r\nimport { saveUserToStorageService } from '../indexedDbStorage';\r\n\r\nfunction* updateStorage(userId, displayName, encodedToken) {\r\n yield call(saveUserToStorageService.saveUserToStorage, userId, displayName, encodedToken);\r\n}\r\n\r\nexport const watchSaveUserToStorage = function* () {\r\n while(true) {\r\n const {loggedInUser} = yield take(signedInUsersStorageActions.SAVE_USER_TO_STORAGE);\r\n if (loggedInUser) {\r\n yield fork(updateStorage, loggedInUser.userId, loggedInUser.displayName, loggedInUser.encodedToken);\r\n } \r\n }\r\n}","import { take, call, fork } from 'redux-saga/effects';\r\nimport { registerActions } from '../actions';\r\nimport { fetchSubmitRegisterRequestApi } from '../api/registerApi';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchSubmitRegisterRequest = fetchEntity.bind(null, registerActions.register, fetchSubmitRegisterRequestApi);\r\n\r\nfunction* submitRegisterRequest(newUser) {\r\n yield call(fetchSubmitRegisterRequest, newUser);\r\n}\r\n\r\nexport const watchSubmitRegisterRequest = function* () {\r\n while(true) {\r\n const {newUser} = yield take(registerActions.SUBMIT_REGISTER_REQUEST);\r\n yield fork(submitRegisterRequest, newUser);\r\n\r\n const action = yield take([registerActions.REGISTER.SUCCESS, registerActions.REGISTER.FAILURE]);\r\n if (action.type === registerActions.REGISTER.SUCCESS) {\r\n window.history.back();\r\n }\r\n }\r\n}","import { callApi, API_POST } from '../../../../services/api';\r\nimport { usersResourceUrl } from '../../../../services/apiResources';\r\n\r\n// register api service\r\nexport const fetchSubmitRegisterRequestApi = newUser => callApi(usersResourceUrl(), API_POST, newUser);","import { take, call, fork } from 'redux-saga/effects';\r\nimport { updateUserInfoActions } from '../actions';\r\nimport { fetchSubmitUpdateUserInfoRequestApi } from '../api/updateUserInfoApi';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchSubmitUpdateUserInfoRequest = fetchEntity.bind(null, updateUserInfoActions.updateUserInfo, fetchSubmitUpdateUserInfoRequestApi);\r\n\r\nfunction* submitUpdateUserInfoRequest(userId, modifiedUser) {\r\n yield call(fetchSubmitUpdateUserInfoRequest, userId, modifiedUser);\r\n}\r\n\r\nexport const watchSubmitUpdateUserInfoRequest = function* () {\r\n const { UPDATE_USER_INFO } = updateUserInfoActions;\r\n\r\n while(true) {\r\n const {userId, modifiedUser} = yield take(updateUserInfoActions.SUBMIT_UPDATE_USER_INFO_REQUEST);\r\n yield fork(submitUpdateUserInfoRequest, userId, modifiedUser);\r\n\r\n const action = yield take([UPDATE_USER_INFO.SUCCESS, UPDATE_USER_INFO.FAILURE]);\r\n if (action.type === UPDATE_USER_INFO.SUCCESS) {\r\n window.history.back();\r\n }\r\n }\r\n}","import { callApi, API_PUT } from '../../../../services/api';\r\nimport { updateUserInfoUrl } from '../../../../services/apiResources';\r\n\r\n// updateUserInfo api service\r\nexport const fetchSubmitUpdateUserInfoRequestApi = (userId, modifiedUser) => callApi(updateUserInfoUrl(userId), API_PUT, modifiedUser);","import { take, call, fork } from 'redux-saga/effects';\r\nimport { signOutActions } from '../actions';\r\nimport { deleteUserFromStorageService } from '../indexedDbStorage';\r\nimport * as Routes from '../../../../constants';\r\n\r\nfunction* updateStorage(userId) {\r\n yield call(deleteUserFromStorageService.deleteUserFromStorage, userId);\r\n}\r\n\r\nexport const watchSignOutRequest = function* () {\r\n while(true) {\r\n const {userId} = yield take(signOutActions.SIGNOUT_USER);\r\n yield fork(updateStorage, userId);\r\n\r\n if (window.location.pathname === Routes.ROUTES_UPDATE_USER_INFO_PATHNAME) {\r\n window.history.back();\r\n }\r\n }\r\n}","import { take, fork, call, put } from 'redux-saga/effects';\r\nimport { changePasswordActions } from '../actions';\r\nimport { fetchSubmitChangePasswordRequestApi } from '../api/changePasswordApi';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\nimport { setAlertMessage } from '../../../../actions';\r\nimport { ALERT_TYPE_SUCCESS } from '../../../../constants';\r\n\r\n// bind Generators\r\nconst fetchSubmitChangePasswordRequest = fetchEntity.bind(null, changePasswordActions.changePassword, fetchSubmitChangePasswordRequestApi);\r\n\r\nfunction* submitChangePassword(encodedCredentials) {\r\n yield call(fetchSubmitChangePasswordRequest, encodedCredentials);\r\n}\r\n\r\nexport const watchSubmitChangePasswordRequest = function* () {\r\n const { CHANGE_PASSWORD } = changePasswordActions;\r\n\r\n while(true) {\r\n const {encodedCredentials} = yield take(changePasswordActions.SUBMIT_CHANGE_PASSWORD_REQUEST);\r\n yield fork(submitChangePassword, encodedCredentials);\r\n\r\n const action = yield take([CHANGE_PASSWORD.SUCCESS, CHANGE_PASSWORD.FAILURE]);\r\n if (action.type === CHANGE_PASSWORD.SUCCESS) {\r\n yield put(setAlertMessage(ALERT_TYPE_SUCCESS, 'Password changed successfully!')); \r\n }\r\n }\r\n}","import { callApi, API_POST } from '../../../../services/api';\r\nimport { changePasswordUrl } from '../../../../services/apiResources';\r\n\r\n// change password api service\r\nexport const fetchSubmitChangePasswordRequestApi = encodedCredentials => callApi(changePasswordUrl(), API_POST, encodedCredentials);","import { take, fork, call, put } from 'redux-saga/effects';\r\nimport { forgotPasswordActions } from '../actions';\r\nimport { fetchSubmitForgotPasswordRequestApi } from '../api/forgotPasswordApi';\r\nimport { fetchEntity } from '../../../../sagas/sagaHelper';\r\nimport { setAlertMessage } from '../../../../actions';\r\nimport { ALERT_TYPE_SUCCESS } from '../../../../constants';\r\n\r\n// bind Generators\r\nconst fetchSubmitForgotPasswordRequest = fetchEntity.bind(null, forgotPasswordActions.forgotPassword, fetchSubmitForgotPasswordRequestApi);\r\n\r\nfunction* submitForgotPassword(encodedCredentials) {\r\n yield call(fetchSubmitForgotPasswordRequest, encodedCredentials);\r\n}\r\n\r\nexport const watchSubmitForgotPasswordRequest = function* () {\r\n const { FORGOT_PASSWORD } = forgotPasswordActions;\r\n\r\n while(true) {\r\n const {encodedCredentials} = yield take(forgotPasswordActions.SUBMIT_FORGOT_PASSWORD_REQUEST);\r\n yield fork(submitForgotPassword, encodedCredentials);\r\n\r\n const action = yield take([FORGOT_PASSWORD.SUCCESS, FORGOT_PASSWORD.FAILURE]);\r\n if (action.type === FORGOT_PASSWORD.SUCCESS) { \r\n yield put(setAlertMessage(ALERT_TYPE_SUCCESS, 'An email has been sent to email account on file!')); \r\n window.history.back(); \r\n }\r\n }\r\n}","import { callApi, API_POST } from '../../../../services/api';\r\nimport { forgotPasswordUrl } from '../../../../services/apiResources';\r\n\r\n// change password api service\r\nexport const fetchSubmitForgotPasswordRequestApi = encodedCredentials => callApi(forgotPasswordUrl(), API_POST, encodedCredentials);","import { fork, all, put } from 'redux-saga/effects';\r\nimport { watchSubmitLoginRequest } from '../Login/sagas/loginSaga';\r\nimport { watchSubmitAutoSignInRequest } from '../Login/sagas/autoSignInSaga';\r\nimport { watchLoadSignedInUsersFromStorage } from '../Login/sagas/getSignedInUsersFromStorageSaga';\r\nimport { watchSaveUserToStorage } from '../Login/sagas/saveUserToStorageSaga';\r\nimport { watchSubmitRegisterRequest } from '../Register/sagas/registerSaga';\r\nimport { watchSubmitUpdateUserInfoRequest } from '../UpdateUserInfo/sagas/updateUserInfoSaga';\r\nimport { watchSignOutRequest } from '../SignOut/sagas/signOutSaga';\r\nimport { watchSubmitChangePasswordRequest } from '../ChangePassword/sagas/changePasswordSaga';\r\nimport { watchSubmitForgotPasswordRequest } from '../ForgotPassword/sagas/forgotPasswordSaga';\r\nimport { autoSignInActions } from '../Login/actions';\r\n\r\nconst { submitAutoSignInRequest } = autoSignInActions;\r\n\r\nexport const watchAuthRequests = function*() {\r\n yield all([\r\n fork(watchSubmitLoginRequest),\r\n fork(watchSubmitAutoSignInRequest),\r\n fork(watchSubmitRegisterRequest),\r\n fork(watchSubmitUpdateUserInfoRequest), \r\n fork(watchSignOutRequest),\r\n fork(watchLoadSignedInUsersFromStorage),\r\n fork(watchSaveUserToStorage),\r\n fork(watchSubmitChangePasswordRequest),\r\n fork(watchSubmitForgotPasswordRequest),\r\n put(submitAutoSignInRequest()), \r\n ])\r\n}","import { callApi, callApiNormalizedResponse, API_POST } from '../../../services/api';\r\nimport { entitiesResourceUrl } from '../../../services/apiResources';\r\nimport { entityByName } from '../metadata';\r\n\r\n// entities api service\r\nexport const fetchSubmitAddEntityRequestApi = (entityName, payload) => {\r\n let apiTableName = entityName;\r\n const entity = entityByName(entityName);\r\n if (entity && entity.apiTableName) {\r\n apiTableName = entity.apiTableName;\r\n }\r\n return callApi(entitiesResourceUrl(apiTableName), API_POST, payload)\r\n};\r\n\r\n\r\nexport const fetchEntityListApi = (entityName, filter) => callApi(entitiesResourceUrl(entityName, filter));\r\nexport const fetchNormalizedEntityListApi = (entityName, filter, entitySchemaArray) => callApiNormalizedResponse(entitiesResourceUrl(entityName, filter), entitySchemaArray);","import { take, call, fork, select, put } from 'redux-saga/effects';\r\nimport { addEntityActions, syncEntityListToTheCloud } from '../actions';\r\nimport { entityByName } from '../metadata';\r\nimport { fetchAddEntityToStorage } from '../indexedDbStorage/fetchAddEntityToStorageService';\r\nimport { fetchSubmitAddEntityRequestApi } from '../api/entitiesApi';\r\nimport { fetchEntity } from '../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchSubmitAddEntityToStorageRequest = fetchEntity.bind(null, addEntityActions.addEntityStorage, fetchAddEntityToStorage);\r\nconst fetchSubmitAddEntityApiRequest = fetchEntity.bind(null, addEntityActions.addEntityApi, fetchSubmitAddEntityRequestApi);\r\n\r\nconst getLoggedinUser = state => state.loggedinUser;\r\n\r\nfunction* submitAddEntityApiRequest(entityName, payload) {\r\n yield call(fetchSubmitAddEntityApiRequest, entityName, JSON.stringify(payload));\r\n}\r\n\r\nfunction* submitAddEntityStorageRequest(entityName, payload) {\r\n yield call(fetchSubmitAddEntityToStorageRequest, entityName, payload);\r\n}\r\n\r\nexport const watchAddEntity = function* (entityName) {\r\n const ADD_ENTITY_STORAGE = addEntityActions.ADD_ENTITY_STORAGE(entityName);\r\n const ADD_ENTITY_API = addEntityActions.ADD_ENTITY_API(entityName); \r\n\r\n while(true) {\r\n const {payload} = yield take(addEntityActions.ADD_ENTITY_ACTION_TYPE(entityName));\r\n\r\n let loggedinUser = yield select(getLoggedinUser);\r\n const entity = entityByName(entityName);\r\n\r\n var entityData = payload;\r\n\r\n/* if (loggedinUser) {\r\n yield fork(submitAddEntityApiRequest, entityName, entity.addApiData(payload));\r\n\r\n const action = yield take([ADD_ENTITY_API.SUCCESS, ADD_ENTITY_API.FAILURE]);\r\n if (action.type === ADD_ENTITY_API.SUCCESS) {\r\n entityData = {...entityData, ...action.response};\r\n }\r\n } */ \r\n\r\n yield fork(submitAddEntityStorageRequest, entityName, entityData);\r\n\r\n const action = yield take([ADD_ENTITY_STORAGE.SUCCESS, ADD_ENTITY_STORAGE.FAILURE]);\r\n if (action.type === ADD_ENTITY_STORAGE.SUCCESS && loggedinUser) {\r\n yield put(syncEntityListToTheCloud(entityName));\r\n }\r\n \r\n //yield put(addEntityActions.addEntityApi.request(entityName, payload)); \r\n\r\n // save to storage using service or saga - ensure it includes datetime\r\n // put api request\r\n // it's possible api would fail and it would resync later\r\n\r\n // yield put(appVersionActions.validateAppVersion());\r\n // yield put(verseOfTheDayListActions.getVerseOfTheDayList.request(bibleVersionId)); \r\n \r\n // const action = yield take([GET_VERSEOFTHEDAY_LIST.SUCCESS, GET_VERSEOFTHEDAY_LIST.FAILURE]);\r\n // if (action.type === GET_VERSEOFTHEDAY_LIST.SUCCESS) {\r\n // let currentDate = getCurrentDate();\r\n // yield put(verseOfTheDayActions.loadPersonalVerseOfTheDayFromStorage(bibleVersionId, currentDate));\r\n\r\n // const action = yield take([GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE.SUCCESS, GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE.FAILURE]);\r\n // if (action.type === GET_PERSONAL_VERSEOFTHEDAY_FROM_STORAGE.FAILURE) {\r\n // yield put(verseOfTheDayActions.generateVerseOfTheDay.request(currentDate)); \r\n // } \r\n // }\r\n }\r\n}\r\n","import { take, put, select } from 'redux-saga/effects';\r\nimport { entityByName } from '../metadata';\r\nimport { entityListActions, entityListStorageActions, syncEntityListFromTheCloud } from '../actions';\r\n\r\nconst getLoggedinUser = state => state.loggedinUser;\r\n\r\nexport const watchGetEntityList = function* (entityName) {\r\n const GET_ENTITY_LIST = entityListActions.GET_ENTITY_LIST(entityName);\r\n const GET_ENTITY_LIST_FROM_STORAGE = entityListStorageActions.GET_ENTITY_LIST_FROM_STORAGE(entityName);\r\n const entity = entityByName(entityName);\r\n\r\n while(true) {\r\n const {type, ...filter} = yield take(GET_ENTITY_LIST.REQUEST);\r\n yield put(entityListStorageActions.loadEntityListFromStorage(entityName, filter));\r\n\r\n const action = yield take([\r\n GET_ENTITY_LIST_FROM_STORAGE.SUCCESS, \r\n GET_ENTITY_LIST_FROM_STORAGE.FAILURE\r\n ]);\r\n\r\n if (action.type === GET_ENTITY_LIST_FROM_STORAGE.FAILURE) {\r\n //yield put(entityListApiActions.loadEntityListFromApi(entityName, filter)); \r\n } else if (action.type === GET_ENTITY_LIST_FROM_STORAGE.SUCCESS) {\r\n yield put(entityListActions.getEntityList.success(entityName, action.response));\r\n //yield put(lastUpdatedEntityListSettingStorageActions.loadEntityListLastUpdatedSettingFromStorage(entityName, filter)); \r\n }\r\n \r\n let loggedinUser = yield select(getLoggedinUser);\r\n if (entity.isGetEntitiesUserAuthenticationRequired == null || \r\n !entity.isGetEntitiesUserAuthenticationRequired || \r\n (entity.isGetEntitiesUserAuthenticationRequired && loggedinUser)) {\r\n yield put(syncEntityListFromTheCloud(entityName, filter));\r\n } \r\n }\r\n}","import { take, fork, call } from 'redux-saga/effects';\r\n//import { entityByName } from '../metadata';\r\nimport { entityListStorageActions } from '../actions';\r\nimport { fetchEntityListFromStorageService } from '../indexedDbStorage';\r\nimport { fetchEntity } from '../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchEntityListFromStorage = fetchEntity.bind(null, entityListStorageActions.getEntityListFromStorage, fetchEntityListFromStorageService.fetchEntityListFromStorage);\r\n\r\nfunction* loadEntities(entityName, filter) {\r\n yield call(fetchEntityListFromStorage, entityName, filter); \r\n}\r\n\r\nexport const watchLoadEntityListFromStorage = function* (entityName) {\r\n while(true) {\r\n const {type, ...filter} = yield take(entityListStorageActions.LOAD_ENTITY_LIST_FROM_STORAGE(entityName));\r\n yield fork(loadEntities, entityName, filter); \r\n }\r\n}","import { take, fork, call, put, select } from 'redux-saga/effects';\r\nimport { entityByName } from '../metadata';\r\nimport { lastUpdatedEntityListSettingStorageActions, entityListApiActions } from '../actions';\r\nimport { fetchLastUpdatedEntityListSettingFromStorageService } from '../indexedDbStorage';\r\nimport { fetchEntity } from '../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchLastUpdatedEntityListSettingFromStorage = fetchEntity.bind(null, lastUpdatedEntityListSettingStorageActions.getLastUpdatedEntityListSettingFromStorage, fetchLastUpdatedEntityListSettingFromStorageService.fetchLastUpdatedEntityListSettingFromStorage);\r\n\r\nconst getVersionId = state => state.bibleVersion.id;\r\n\r\nfunction* loadLastUpdatedEntityListSetting(entityName) {\r\n const entity = entityByName(entityName);\r\n let versionId = entity.filterByVersionId ? yield select(getVersionId) : null;\r\n yield call(fetchLastUpdatedEntityListSettingFromStorage, entityName, versionId); \r\n}\r\n\r\nexport const watchLoadLastUpdatedEntityListSettingFromStorage = function* (entityName) {\r\n const { GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE } = lastUpdatedEntityListSettingStorageActions;\r\n\r\n while(true) {\r\n const {type, ...filter} = yield take(lastUpdatedEntityListSettingStorageActions.LOAD_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE(entityName));\r\n yield fork(loadLastUpdatedEntityListSetting, entityName);\r\n \r\n const action = yield take([\r\n GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE(entityName).SUCCESS, \r\n GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE(entityName).FAILURE\r\n ]);\r\n\r\n if (action.type === GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE(entityName).SUCCESS) {\r\n const lastUpdatedEntityListSetting = action.response.lastUpdatedSetting;\r\n let lastUpdatedUtcTime = lastUpdatedEntityListSetting.lastUpdatedUtcTime;\r\n lastUpdatedUtcTime = lastUpdatedUtcTime.substr(0, 19);\r\n yield put(entityListApiActions.loadUpdatedEntityListFromApi(entityName, filter, lastUpdatedUtcTime)); \r\n } else if (action.type === GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE(entityName).FAILURE) {\r\n yield put(entityListApiActions.loadEntityListFromApi(entityName, filter)); \r\n }\r\n }\r\n}","import { take, call, fork, put, } from 'redux-saga/effects';\r\nimport { entityByName, apiEntityResourceName } from '../metadata';\r\nimport { entityListActions, entityListApiActions, entityListStorageActions } from '../actions';\r\nimport { fetchEntityListApi, fetchNormalizedEntityListApi } from '../api/entitiesApi';\r\nimport { fetchEntity } from '../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchEntityList = fetchEntity.bind(null, entityListApiActions.getEntityListFromApi, fetchEntityListApi);\r\nconst fetchNormalizedEntityList = fetchEntity.bind(null, entityListApiActions.getEntityListFromApi, fetchNormalizedEntityListApi);\r\n\r\nfunction* loadEntities(entityName, filter) {\r\n const apiResourceName = apiEntityResourceName(entityName);\r\n const entity = entityByName(entityName);\r\n \r\n entity.getEntityListFromApi\r\n ? yield call(entity.getEntityListFromApi, filter)\r\n : entity.shouldNormalizeApiResponse\r\n ? yield call(fetchNormalizedEntityList, apiResourceName, filter, entity.apiSchemaArray)\r\n : yield call(fetchEntityList, apiResourceName, filter);\r\n}\r\n\r\nfunction* saveEntitiesToStorage(entityName, apiResponse) {\r\n const currentUtcTime = apiResponse.result ? apiResponse.result.currentUtcTime : apiResponse.currentUtcTime;\r\n const entity = entityByName(entityName);\r\n let entityList = null;\r\n if (entity) {\r\n entityList = entity.getEntityListFromApiResponse(apiResponse);\r\n } \r\n if (entityList) {\r\n yield put(entityListStorageActions.saveEntityListToStorage(entityName, entityList, currentUtcTime));\r\n }\r\n}\r\n\r\nexport const watchLoadEntityListFromApi = function* (entityName) {\r\n const apiResourceName = apiEntityResourceName(entityName);\r\n const GET_ENTITY_LIST_FROM_API = entityListApiActions.GET_ENTITY_LIST_FROM_API(apiResourceName);\r\n\r\n while(true) {\r\n const {type, ...filter} = yield take(entityListApiActions.LOAD_ENTITY_LIST_FROM_API(entityName));\r\n yield fork(loadEntities, entityName, filter);\r\n\r\n const action = yield take([\r\n GET_ENTITY_LIST_FROM_API.SUCCESS, \r\n GET_ENTITY_LIST_FROM_API.FAILURE\r\n ]);\r\n if (action.type === GET_ENTITY_LIST_FROM_API.SUCCESS) {\r\n yield put(entityListActions.getEntityList.success(entityName, action.response));\r\n yield fork(saveEntitiesToStorage, entityName, action.response);\r\n } \r\n else if (action.type === GET_ENTITY_LIST_FROM_API.FAILURE) {\r\n yield put(entityListActions.getEntityList.failure(entityName, action.error));\r\n }\r\n }\r\n}","import { take, call, fork, select } from 'redux-saga/effects';\r\nimport { entityListStorageActions } from '../actions';\r\nimport { entityByName } from '../metadata';\r\nimport { saveEntityListToStorageService } from '../indexedDbStorage';\r\n\r\nconst getVersionId = state => state.bibleVersion.id;\r\n\r\nfunction* updateStorage(entityName, entityList, currentUtcTime) {\r\n const entity = entityByName(entityName);\r\n let versionId = entity.filterByVersionId ? yield select(getVersionId) : null;\r\n yield call(saveEntityListToStorageService.saveEntityListToStorage, entityName, entityList, versionId, currentUtcTime);\r\n}\r\n\r\nexport const watchSaveEntityListToStorage = function* (entityName) {\r\n while(true) {\r\n const {entityList, currentUtcTime} = yield take(entityListStorageActions.SAVE_ENTITY_LIST_TO_STORAGE(entityName));\r\n if (entityList) {\r\n yield fork(updateStorage, entityName, entityList, currentUtcTime);\r\n } \r\n }\r\n}","import { take, fork, call, put, select } from 'redux-saga/effects';\r\nimport { SYNC_ENTITY_LIST_TO_THECLOUD, lastUploadedEntityListSettingStorageActions, entityListStorageActions, addEntityActions } from '../actions';\r\nimport { entityByName } from '../metadata';\r\nimport { SETTINGS_LASTUPLOADED_ENTITYLIST_NAME } from '../../../features/constants';\r\nimport { fetchEntitySettingFromStorageService } from '../indexedDbStorage';\r\nimport { fetchSubmitAddEntityRequestApi } from '../api/entitiesApi';\r\nimport { settle, fetchEntity } from '../../../sagas/sagaHelper';\r\nimport { saveSettingsItemToStorage } from '../../../services/storage/saveSettingsItemToStorageService';\r\nimport { getCurrentDateTimeLtISO } from '../../../utils/dateHelper';\r\n\r\n// bind Generators\r\nconst fetchLastUploadedEntityListSettingFromStorage = fetchEntity.bind(null, \r\n lastUploadedEntityListSettingStorageActions.getLastUploadedEntityListSettingFromStorage, \r\n fetchEntitySettingFromStorageService.fetchEntitySettingFromStorage);\r\n\r\nconst fetchSubmitAddEntityApiRequest = fetchEntity.bind(null, addEntityActions.addEntityApi, fetchSubmitAddEntityRequestApi);\r\n\r\nconst getLoggedinUser = state => state.loggedinUser;\r\n\r\nfunction* loadLastUploadedEntityListSetting(entityName) {\r\n yield call(fetchLastUploadedEntityListSettingFromStorage, entityName, SETTINGS_LASTUPLOADED_ENTITYLIST_NAME(entityName)); \r\n}\r\n\r\nfunction* submitAddEntityApiRequest(entityName, payload) {\r\n const ADD_ENTITY_API = addEntityActions.ADD_ENTITY_API(entityName);\r\n\r\n yield fork(fetchSubmitAddEntityApiRequest, entityName, JSON.stringify(payload));\r\n\r\n yield take([ADD_ENTITY_API.SUCCESS, ADD_ENTITY_API.FAILURE]);\r\n //const action = yield take([ADD_ENTITY_API.SUCCESS, ADD_ENTITY_API.FAILURE]);\r\n //if (action.type === ADD_ENTITY_API.SUCCESS) {\r\n //entityData = { ...entityData, ...action.response };\r\n //}\r\n}\r\n\r\nfunction* addEntityListToApi(entityName, entityList) {\r\n const entity = entityByName(entityName); \r\n let addEntityToApiRequests = entityList.map(entityItem => {\r\n return settle(submitAddEntityApiRequest, entityName, entity.addApiData(entityItem));\r\n });\r\n\r\n for (let request of addEntityToApiRequests) {\r\n yield request;\r\n }\r\n}\r\n\r\nexport const watchSyncEntityListToTheCloud = function* (entityName) {\r\n const GET_ENTITY_LIST_LASTUPLOADED_SETTING_FROM_STORAGE = lastUploadedEntityListSettingStorageActions.GET_ENTITY_LIST_LASTUPLOADED_SETTING_FROM_STORAGE(entityName);\r\n const GET_ENTITY_LIST_FROM_STORAGE = entityListStorageActions.GET_ENTITY_LIST_FROM_STORAGE(entityName);\r\n const entity = entityByName(entityName); \r\n\r\n while(true) {\r\n yield take(SYNC_ENTITY_LIST_TO_THECLOUD(entityName));\r\n yield fork(loadLastUploadedEntityListSetting, entityName); \r\n \r\n const action = yield take([\r\n GET_ENTITY_LIST_LASTUPLOADED_SETTING_FROM_STORAGE.SUCCESS, \r\n GET_ENTITY_LIST_LASTUPLOADED_SETTING_FROM_STORAGE.FAILURE\r\n ]);\r\n\r\n let lastUploadedDateTimeLt = null;\r\n if (action.type === GET_ENTITY_LIST_LASTUPLOADED_SETTING_FROM_STORAGE.SUCCESS) { \r\n lastUploadedDateTimeLt = action.response.entitySetting.lastUploadedDateTimeLt; \r\n }\r\n yield put(entityListStorageActions.loadEntityListFromStorage(entityName, entity.getUnsynchedEntitiesFilter(lastUploadedDateTimeLt)));\r\n \r\n const getEntityListAction = yield take([\r\n GET_ENTITY_LIST_FROM_STORAGE.SUCCESS, \r\n GET_ENTITY_LIST_FROM_STORAGE.FAILURE\r\n ]);\r\n\r\n if (getEntityListAction.type === GET_ENTITY_LIST_FROM_STORAGE.SUCCESS) {\r\n let entityList = getEntityListAction.response;\r\n let loggedinUser = yield select(getLoggedinUser);\r\n let addEntityToApiRequests = entityList.map(entityItem => {\r\n if (loggedinUser) {\r\n entityItem = { ...entityItem, userId: loggedinUser.userId }\r\n }\r\n return settle(submitAddEntityApiRequest, entityName, entity.addApiData(entityItem));\r\n });\r\n\r\n for (let request of addEntityToApiRequests) {\r\n yield request;\r\n }\r\n \r\n saveSettingsItemToStorage(SETTINGS_LASTUPLOADED_ENTITYLIST_NAME(entityName), { lastUploadedDateTimeLt: getCurrentDateTimeLtISO() });\r\n }\r\n\r\n // Possibly move sections of yield/take..yield/put into their own methods or Command files\r\n } \r\n}","import { indexedDb } from '../indexedDb';\r\n\r\nexport const saveSettingsItemToStorage = (settingName, data) => {\r\n indexedDb.settings.put({ settingName: settingName, ...data })\r\n .catch(error => {\r\n console.log(error);\r\n });\r\n}","import { take, fork, call, put, select } from 'redux-saga/effects';\r\nimport { SYNC_ENTITY_LIST_FROM_THECLOUD, lastUpdatedEntityListSettingStorageActions, entityListApiActions } from '../actions';\r\nimport { entityByName } from '../metadata';\r\nimport { SETTINGS_LASTUPDATED_ENTITYLIST_NAME } from '../../../features/constants';\r\nimport { fetchEntitySettingFromStorageService } from '../indexedDbStorage';\r\nimport { fetchEntity } from '../../../sagas/sagaHelper';\r\n\r\n// bind Generators\r\nconst fetchLastUpdatedEntityListSettingFromStorage = fetchEntity.bind(null, \r\n lastUpdatedEntityListSettingStorageActions.getLastUpdatedEntityListSettingFromStorage, \r\n fetchEntitySettingFromStorageService.fetchEntitySettingFromStorage);\r\n\r\nconst getLoggedinUser = state => state.loggedinUser;\r\nconst getVersionId = state => state.bibleVersion.id;\r\n\r\nfunction* loadLastUpdatedEntityListSetting(entityName) {\r\n const entity = entityByName(entityName);\r\n let versionId = entity.filterByVersionId ? yield select(getVersionId) : null;\r\n yield call(fetchLastUpdatedEntityListSettingFromStorage, entityName, SETTINGS_LASTUPDATED_ENTITYLIST_NAME(entityName, versionId)); \r\n}\r\n\r\nexport const watchSyncEntityListFromTheCloud = function* (entityName) {\r\n const GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE = lastUpdatedEntityListSettingStorageActions.GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE(entityName);\r\n const entity = entityByName(entityName);\r\n\r\n while(true) {\r\n const {type, ...filter} = yield take(SYNC_ENTITY_LIST_FROM_THECLOUD(entityName));\r\n yield fork(loadLastUpdatedEntityListSetting, entityName);\r\n\r\n const action = yield take([\r\n GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE.SUCCESS, \r\n GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE.FAILURE\r\n ]);\r\n\r\n let loggedinUser = yield select(getLoggedinUser);\r\n let lastUpdatedDateTimeUtc = null;\r\n if (action.type === GET_ENTITY_LIST_LASTUPDATED_SETTING_FROM_STORAGE.SUCCESS) {\r\n lastUpdatedDateTimeUtc = action.response.entitySetting.lastUpdatedUtcTime;\r\n lastUpdatedDateTimeUtc = lastUpdatedDateTimeUtc.substr(0, 19);\r\n }\r\n let userId = loggedinUser ? loggedinUser.userId : null;\r\n yield put(entityListApiActions.loadEntityListFromApi(entityName, entity.getEntityListFilterForApi(filter, userId, lastUpdatedDateTimeUtc)));\r\n }\r\n}","import { fork, all } from 'redux-saga/effects';\r\nimport { watchAddEntity } from './addEntitySaga';\r\nimport { watchGetEntityList } from './getEntityListSaga';\r\nimport { watchLoadEntityListFromStorage } from './getEntityListFromStorageSaga';\r\nimport { watchLoadLastUpdatedEntityListSettingFromStorage } from './getLastUpdatedEntityListSettingFromStorageSaga';\r\nimport { watchLoadEntityListFromApi } from './getEntityListFromApiSaga';\r\nimport { watchSaveEntityListToStorage } from './saveEntityListToStorageSaga';\r\nimport { watchSyncEntityListToTheCloud } from './syncEntityListToTheCloudSaga';\r\nimport { watchSyncEntityListFromTheCloud } from './syncEntityListFromTheCloudSaga';\r\n\r\nexport const watchEntitiesRequests = function*(entityName) {\r\n yield all([\r\n fork(watchAddEntity, entityName),\r\n fork(watchGetEntityList, entityName),\r\n fork(watchLoadEntityListFromStorage, entityName),\r\n fork(watchLoadLastUpdatedEntityListSettingFromStorage, entityName),\r\n fork(watchLoadEntityListFromApi, entityName),\r\n fork(watchSaveEntityListToStorage, entityName), \r\n fork(watchSyncEntityListToTheCloud, entityName),\r\n fork(watchSyncEntityListFromTheCloud, entityName), \r\n ])\r\n}","import { take, put, select } from 'redux-saga/effects';\r\nimport { entityListActions } from '../../../common/entities/actions';\r\nimport * as entitiesNames from '../../../common/entities/constants';\r\nimport { loadBookChapters } from '../../Bible/Chapters/actions';\r\nimport { getBookChaptersFromStorageActions } from '../../Bible/Chapters/actions';\r\nimport { settle } from '../../../sagas/sagaHelper';\r\n\r\nconst getBibleVersion = state => state.bibleVersion;\r\n\r\nfunction* loadChaptersByBookId(bibleVersionId, bookId) {\r\n yield put(loadBookChapters(bibleVersionId, bookId));\r\n\r\n const { GET_BOOK_CHAPTERS_FROM_STORAGE } = getBookChaptersFromStorageActions;\r\n\r\n yield take([\r\n GET_BOOK_CHAPTERS_FROM_STORAGE.SUCCESS, \r\n GET_BOOK_CHAPTERS_FROM_STORAGE.FAILURE\r\n ]);\r\n}\r\n\r\nexport const watchBibleHistoryListTrigger = function* () {\r\n const { GET_ENTITY_LIST } = entityListActions;\r\n\r\n while(true) {\r\n const action = yield take([\r\n GET_ENTITY_LIST(entitiesNames.BIBLEHISTORY).SUCCESS, \r\n GET_ENTITY_LIST(entitiesNames.BIBLEHISTORY).FAILURE\r\n ]);\r\n\r\n if (action.type === GET_ENTITY_LIST(entitiesNames.BIBLEHISTORY).SUCCESS) {\r\n let historyList = action.response.items ? action.response.items : action.response;\r\n let bibleVersion = yield select(getBibleVersion);\r\n let requestedBooks = [];\r\n \r\n let loadChaptersRequests = historyList.map(historyItem => {\r\n if (!requestedBooks.includes(historyItem.bookId)) {\r\n requestedBooks.push(historyItem.bookId);\r\n return settle(loadChaptersByBookId, bibleVersion.id, historyItem.bookId);\r\n }\r\n });\r\n\r\n for (let request of loadChaptersRequests) {\r\n yield request;\r\n }\r\n }\r\n }\r\n}\r\n","import { fork, all } from 'redux-saga/effects';\r\nimport { watchBibleHistoryListTrigger } from './getBibleHistoryListTriggerSaga';\r\n\r\nexport const watchBibleHistoryRequests = function*() {\r\n yield all([\r\n fork(watchBibleHistoryListTrigger), \r\n ]);\r\n}","import { take, call, fork, all, put, select } from 'redux-saga/effects';\r\nimport * as settingsSystemActions from './actions';\r\nimport { fetchSystemSettingsRequest } from './api';\r\nimport { fetchEntity } from '../../../sagas/sagaHelper';\r\nimport { setApiUrl } from '../../../services/apiResources';\r\nimport { watchAppVersionRequests } from '../../Version/sagas';\r\nimport { watchBibleVersionsRequests } from '../../Bible/Versions/sagas';\r\nimport { watchBibleBooksRequests } from '../../Bible/Books/sagas';\r\nimport { watchVerseOfTheDayRequests } from '../../VerseOfTheDay/sagas';\r\nimport { watchAuthRequests } from '../../auth/sagas';\r\nimport { watchEntitiesRequests } from '../../../common/entities/sagas';\r\nimport { watchBibleHistoryRequests } from '../../BibleHistory/sagas';\r\nimport * as appVersionActions from '../../Version/actions';\r\nimport * as bibleVersionsActions from '../../Bible/Versions/actions';\r\nimport * as bibleBooksActions from '../../Bible/Books/actions';\r\nimport * as bookChaptersActions from '../../Bible/Chapters/actions';\r\n//import { verseOfTheDayActions } from '../../VerseOfTheDay/actions';\r\n//import { ROUTES_BIBLE_PATHNAME } from '../../../constants';\r\nimport * as entitiesNames from '../../../common/entities/constants';\r\nimport { initializeEntities } from '../../../common/entities/metadata';\r\n\r\nconst { getViewFiltersBibleVersionFromStorageActions } = bibleVersionsActions;\r\nconst { viewFiltersBibleBookFromStorageActions } = bibleBooksActions;\r\nconst { viewFiltersBookChapterFromStorageActions } = bookChaptersActions;\r\n\r\nconst getBibleVersion = state => state.bibleVersion;\r\n\r\n// bind Generators\r\nconst fetchSystemSettings = fetchEntity.bind(null, settingsSystemActions.getSettings, fetchSystemSettingsRequest);\r\n\r\nfunction* loadSystemSettings() {\r\n initializeEntities();\r\n\r\n yield call(fetchSystemSettings);\r\n}\r\n\r\nfunction* setBibleVersion() {\r\n const { GET_BIBLE_VERSIONS_FROM_STORAGE } = bibleVersionsActions.getBibleVersionsFromStorageActions;\r\n const { GET_BIBLE_VERSIONS_FROM_API } = bibleVersionsActions.getBibleVersionsFromApiActions;\r\n\r\n const action = yield take([\r\n GET_BIBLE_VERSIONS_FROM_STORAGE.SUCCESS, \r\n GET_BIBLE_VERSIONS_FROM_API.SUCCESS\r\n ]);\r\n\r\n if ((action.type === GET_BIBLE_VERSIONS_FROM_STORAGE.SUCCESS) || (action.type === GET_BIBLE_VERSIONS_FROM_API.SUCCESS)) {\r\n let bibleVersion = yield select(getBibleVersion);\r\n //if (window.location.pathname === ROUTES_BIBLE_PATHNAME) { \r\n yield put(bibleVersionsActions.setBibleVersion(bibleVersion.id, bibleVersion.langId));\r\n //} \r\n }\r\n}\r\n\r\nexport const watchLoadSystemSettingsRequest = function* () {\r\n while(true) {\r\n yield take(settingsSystemActions.LOAD_SETTINGS_REQUEST);\r\n yield fork(loadSystemSettings); \r\n\r\n const action = yield take([settingsSystemActions.GET_SETTINGS.SUCCESS]); \r\n if (action.type === settingsSystemActions.GET_SETTINGS.SUCCESS) {\r\n yield call(setApiUrl, action.response.apiUrl);\r\n yield all([\r\n fork(watchEntitiesRequests, entitiesNames.VERSEOFTHEDAY),\r\n fork(watchEntitiesRequests, entitiesNames.FAVORITEVERSES),\r\n fork(watchEntitiesRequests, entitiesNames.HIGHLIGHTEDVERSES),\r\n fork(watchEntitiesRequests, entitiesNames.BIBLEHISTORY),\r\n fork(watchAuthRequests),\r\n fork(watchAppVersionRequests),\r\n put(appVersionActions.validateAppVersion()),\r\n fork(watchBibleVersionsRequests),\r\n fork(watchBibleBooksRequests),\r\n fork(watchBibleHistoryRequests),\r\n put(getViewFiltersBibleVersionFromStorageActions.loadViewFiltersBibleVersionFromStorage()),\r\n put(viewFiltersBibleBookFromStorageActions.loadViewFiltersBibleBookFromStorage()),\r\n put(viewFiltersBookChapterFromStorageActions.loadViewFiltersBookChapterFromStorage()),\r\n put(bibleVersionsActions.loadBibleVersions()),\r\n fork(setBibleVersion), \r\n fork(watchVerseOfTheDayRequests) \r\n ]);\r\n }\r\n }\r\n}","import { fork, all } from 'redux-saga/effects';\r\nimport { watchLoadSystemSettingsRequest } from '../features/Settings/System/saga';\r\n\r\nexport default function* root() {\r\n yield all([\r\n fork(watchLoadSystemSettingsRequest) \r\n ])\r\n}","import { createStore, applyMiddleware } from 'redux';\nimport createSagaMiddleware, { END } from 'redux-saga';\nimport rootReducer from '../reducers';\nimport rootSaga from '../sagas';\n\nconst configureStore = preloadedState => {\n const sagaMiddleware = createSagaMiddleware()\n const store = createStore (\n rootReducer,\n preloadedState,\n applyMiddleware(sagaMiddleware)\n )\n\n store.runSaga = sagaMiddleware.run(rootSaga);\n store.close = () => store.dispatch(END)\n return store\n}\n\nexport default configureStore","const drawerWidth = 240;\r\n\r\nconst primaryColor = [\"#9c27b0\", \"#ab47bc\", \"#8e24aa\", \"#af2cc5\"];\r\nconst warningColor = [\"#ff9800\", \"#ffa726\", \"#fb8c00\", \"#ffa21a\"];\r\nconst dangerColor = [\"#f44336\", \"#ef5350\", \"#e53935\", \"#f55a4e\"];\r\nconst successColor = [\"#4caf50\", \"#66bb6a\", \"#43a047\", \"#5cb860\"];\r\nconst infoColor = [\"#00acc1\", \"#26c6da\", \"#00acc1\", \"#00d3ee\"];\r\nconst roseColor = [\"#e91e63\", \"#ec407a\", \"#d81b60\", \"#eb3573\"];\r\nconst grayColor = [\r\n \"#999\",\r\n \"#777\",\r\n \"#3C4858\",\r\n \"#AAAAAA\",\r\n \"#D2D2D2\",\r\n \"#DDD\",\r\n \"#b4b4b4\",\r\n \"#555555\",\r\n \"#333\",\r\n \"#a9afbb\",\r\n \"#eee\",\r\n \"#e7e7e7\"\r\n];\r\nconst blackColor = \"#000\";\r\nconst whiteColor = \"#FFF\";\r\n\r\nconst container = {\r\n paddingRight: \"15px\",\r\n paddingLeft: \"15px\",\r\n marginRight: \"auto\",\r\n marginLeft: \"auto\"\r\n};\r\n\r\nconst transition = {\r\n transition: \"all 0.33s cubic-bezier(0.685, 0.0473, 0.346, 1)\"\r\n};\r\n\r\n// ##############################\r\n// // // Function that converts from hex color to rgb color\r\n// // // Example: input = #9c27b0 => output = 156, 39, 176\r\n// // // Example: input = 9c27b0 => output = 156, 39, 176\r\n// // // Example: input = #999 => output = 153, 153, 153\r\n// // // Example: input = 999 => output = 153, 153, 153\r\n// #############################\r\nconst hexToRgb = input => {\r\n input = input + \"\";\r\n input = input.replace(\"#\", \"\");\r\n let hexRegex = /[0-9A-Fa-f]/g;\r\n if (!hexRegex.test(input) || (input.length !== 3 && input.length !== 6)) {\r\n throw new Error(\"input is not a valid hex color.\");\r\n }\r\n if (input.length === 3) {\r\n let first = input[0];\r\n let second = input[1];\r\n let last = input[2];\r\n input = first + first + second + second + last + last;\r\n }\r\n input = input.toUpperCase();\r\n let first = input[0] + input[1];\r\n let second = input[2] + input[3];\r\n let last = input[4] + input[5];\r\n return (\r\n parseInt(first, 16) +\r\n \", \" +\r\n parseInt(second, 16) +\r\n \", \" +\r\n parseInt(last, 16)\r\n );\r\n};\r\n\r\nconst boxShadow = {\r\n boxShadow:\r\n \"0 10px 30px -12px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.42), 0 4px 25px 0px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.12), 0 8px 10px -5px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.2)\"\r\n};\r\n\r\nconst defaultBoxShadow = {\r\n border: \"0\",\r\n borderRadius: \"3px\",\r\n boxShadow:\r\n \"0 10px 20px -12px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.42), 0 3px 20px 0px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.12), 0 8px 10px -5px rgba(\" +\r\n hexToRgb(blackColor) +\r\n \", 0.2)\",\r\n padding: \"10px 0\",\r\n transition: \"all 150ms ease 0s\"\r\n};\r\n\r\nconst primaryBoxShadow = {\r\n boxShadow:\r\n \"0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.14), 0 7px 10px -5px rgba(\" +\r\n hexToRgb(primaryColor[0]) +\r\n \",.4)\"\r\n};\r\nconst infoBoxShadow = {\r\n boxShadow:\r\n \"0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.14), 0 7px 10px -5px rgba(\" +\r\n hexToRgb(infoColor[0]) +\r\n \",.4)\"\r\n};\r\nconst successBoxShadow = {\r\n boxShadow:\r\n \"0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.14), 0 7px 10px -5px rgba(\" +\r\n hexToRgb(successColor[0]) +\r\n \",.4)\"\r\n};\r\nconst warningBoxShadow = {\r\n boxShadow:\r\n \"0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.14), 0 7px 10px -5px rgba(\" +\r\n hexToRgb(warningColor[0]) +\r\n \",.4)\"\r\n};\r\nconst dangerBoxShadow = {\r\n boxShadow:\r\n \"0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.14), 0 7px 10px -5px rgba(\" +\r\n hexToRgb(dangerColor[0]) +\r\n \",.4)\"\r\n};\r\nconst roseBoxShadow = {\r\n boxShadow:\r\n \"0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.14), 0 7px 10px -5px rgba(\" +\r\n hexToRgb(roseColor[0]) +\r\n \",.4)\"\r\n};\r\n\r\nconst defaultFont = {\r\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\r\n fontWeight: \"300\",\r\n lineHeight: \"1.5em\"\r\n };\r\n\r\nexport {\r\n drawerWidth,\r\n hexToRgb,\r\n transition,\r\n container,\r\n boxShadow,\r\n defaultBoxShadow,\r\n defaultFont,\r\n primaryColor,\r\n warningColor,\r\n dangerColor,\r\n successColor,\r\n infoColor,\r\n roseColor,\r\n grayColor,\r\n blackColor,\r\n whiteColor,\r\n primaryBoxShadow,\r\n infoBoxShadow,\r\n successBoxShadow,\r\n warningBoxShadow,\r\n dangerBoxShadow,\r\n roseBoxShadow,\r\n}"," import {\r\n drawerWidth,\r\n hexToRgb,\r\n boxShadow,\r\n transition,\r\n defaultFont,\r\n grayColor,\r\n whiteColor,\r\n blackColor,\r\n dangerColor,\r\n warningColor,\r\n successColor,\r\n infoColor,\r\n primaryColor,\r\n primaryBoxShadow,\r\n} from '../CTBWebApp';\r\n\r\nconst drawerStyle = theme => ({\r\n drawerPaper: {\r\n width: drawerWidth,\r\n border: \"none\",\r\n position: \"fixed\",\r\n top: \"0\",\r\n bottom: \"0\",\r\n left: \"0\",\r\n zIndex: \"1\",\r\n ...boxShadow,\r\n [theme.breakpoints.up(\"sm\")]: {\r\n width: drawerWidth,\r\n position: \"fixed\",\r\n height: \"100%\",\r\n },\r\n [theme.breakpoints.down(\"xs\")]: {\r\n width: drawerWidth,\r\n ...boxShadow,\r\n position: \"fixed\",\r\n display: \"block\",\r\n top: \"0\",\r\n height: \"100vh\",\r\n //right: \"0\",\r\n left: \"auto\",\r\n zIndex: \"1032\",\r\n visibility: \"visible\",\r\n overflowY: \"visible\",\r\n borderTop: \"none\",\r\n textAlign: \"left\",\r\n paddingRight: \"0px\",\r\n paddingLeft: \"0\",\r\n transform: `translate3d(${drawerWidth}px, 0, 0)`,\r\n ...transition\r\n }\r\n },\r\n\r\n toolbar: theme.mixins.toolbar,\r\n \r\n drawerContainer: {\r\n position: \"relative\",\r\n height: \"calc(100vh - 75px)\",\r\n overflow: \"auto\",\r\n width: drawerWidth,\r\n zIndex: \"4\",\r\n overflowScrolling: \"touch\"\r\n },\r\n\r\n brand: {\r\n position: \"relative\",\r\n padding: \"12px 12px\",\r\n zIndex: \"4\",\r\n \"&:after\": {\r\n content: '\"\"',\r\n position: \"absolute\",\r\n bottom: \"0\",\r\n height: \"1px\",\r\n right: \"15px\",\r\n width: \"calc(100% - 30px)\",\r\n backgroundColor: \"rgba(\" + hexToRgb(grayColor[6]) + \", 0.3)\"\r\n }\r\n },\r\n brandLink: {\r\n ...defaultFont,\r\n textTransform: \"uppercase\",\r\n padding: \"5px 0\",\r\n display: \"block\",\r\n fontSize: \"18px\",\r\n textAlign: \"left\",\r\n fontWeight: \"400\",\r\n lineHeight: \"30px\",\r\n textDecoration: \"none\",\r\n backgroundColor: \"transparent\",\r\n \"&,&:hover\": {\r\n color: whiteColor\r\n }\r\n },\r\n brandImage: {\r\n width: \"30px\",\r\n display: \"inline-block\",\r\n maxHeight: \"30px\",\r\n marginLeft: \"10px\",\r\n marginRight: \"15px\"\r\n },\r\n img: {\r\n width: \"35px\",\r\n top: \"18px\",\r\n position: \"absolute\",\r\n verticalAlign: \"middle\",\r\n border: \"0\"\r\n },\r\n background: {\r\n position: \"absolute\",\r\n zIndex: \"1\",\r\n height: \"100%\",\r\n width: \"100%\",\r\n display: \"block\",\r\n top: \"0\",\r\n left: \"0\",\r\n backgroundSize: \"cover\",\r\n backgroundPosition: \"center center\",\r\n \"&:after\": {\r\n position: \"absolute\",\r\n zIndex: \"3\",\r\n width: \"100%\",\r\n height: \"100%\",\r\n content: '\"\"',\r\n display: \"block\",\r\n background: blackColor,\r\n opacity: \".8\"\r\n }\r\n },\r\n list: {\r\n marginTop: \"20px\",\r\n paddingLeft: \"0\",\r\n paddingTop: \"0\",\r\n paddingBottom: \"0\",\r\n marginBottom: \"0\",\r\n listStyle: \"none\",\r\n position: \"unset\"\r\n },\r\n item: {\r\n position: \"relative\",\r\n display: \"block\",\r\n textDecoration: \"none\",\r\n \"&:hover,&:focus,&:visited,&\": {\r\n color: whiteColor\r\n }\r\n },\r\n itemLink: {\r\n width: \"auto\",\r\n transition: \"all 300ms linear\",\r\n margin: \"10px 15px 0\",\r\n borderRadius: \"3px\",\r\n position: \"relative\",\r\n display: \"block\",\r\n padding: \"10px 15px\",\r\n backgroundColor: \"transparent\",\r\n ...defaultFont\r\n },\r\n itemIcon: {\r\n width: \"24px\",\r\n height: \"30px\",\r\n fontSize: \"24px\",\r\n lineHeight: \"30px\",\r\n float: \"left\",\r\n marginRight: \"15px\",\r\n textAlign: \"center\",\r\n verticalAlign: \"middle\",\r\n color: \"rgba(\" + hexToRgb(whiteColor) + \", 0.8)\"\r\n },\r\n itemText: {\r\n ...defaultFont,\r\n margin: \"0\",\r\n lineHeight: \"30px\",\r\n fontSize: \"14px\",\r\n color: whiteColor\r\n },\r\n whiteFont: {\r\n color: whiteColor\r\n },\r\n purple: {\r\n backgroundColor: primaryColor[0],\r\n ...primaryBoxShadow,\r\n \"&:hover,&:focus\": {\r\n backgroundColor: primaryColor[0],\r\n ...primaryBoxShadow\r\n }\r\n },\r\n blue: {\r\n backgroundColor: infoColor[0],\r\n boxShadow:\r\n \"0 12px 20px -10px rgba(\" +\r\n hexToRgb(infoColor[0]) +\r\n \",.28), 0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.12), 0 7px 8px -5px rgba(\" +\r\n hexToRgb(infoColor[0]) +\r\n \",.2)\",\r\n \"&:hover,&:focus\": {\r\n backgroundColor: infoColor[0],\r\n boxShadow:\r\n \"0 12px 20px -10px rgba(\" +\r\n hexToRgb(infoColor[0]) +\r\n \",.28), 0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.12), 0 7px 8px -5px rgba(\" +\r\n hexToRgb(infoColor[0]) +\r\n \",.2)\"\r\n }\r\n },\r\n green: {\r\n backgroundColor: successColor[0],\r\n boxShadow:\r\n \"0 12px 20px -10px rgba(\" +\r\n hexToRgb(successColor[0]) +\r\n \",.28), 0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.12), 0 7px 8px -5px rgba(\" +\r\n hexToRgb(successColor[0]) +\r\n \",.2)\",\r\n \"&:hover,&:focus\": {\r\n backgroundColor: successColor[0],\r\n boxShadow:\r\n \"0 12px 20px -10px rgba(\" +\r\n hexToRgb(successColor[0]) +\r\n \",.28), 0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.12), 0 7px 8px -5px rgba(\" +\r\n hexToRgb(successColor[0]) +\r\n \",.2)\"\r\n }\r\n },\r\n orange: {\r\n backgroundColor: warningColor[0],\r\n boxShadow:\r\n \"0 12px 20px -10px rgba(\" +\r\n hexToRgb(warningColor[0]) +\r\n \",.28), 0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.12), 0 7px 8px -5px rgba(\" +\r\n hexToRgb(warningColor[0]) +\r\n \",.2)\",\r\n \"&:hover,&:focus\": {\r\n backgroundColor: warningColor[0],\r\n boxShadow:\r\n \"0 12px 20px -10px rgba(\" +\r\n hexToRgb(warningColor[0]) +\r\n \",.28), 0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.12), 0 7px 8px -5px rgba(\" +\r\n hexToRgb(warningColor[0]) +\r\n \",.2)\"\r\n }\r\n },\r\n red: {\r\n backgroundColor: dangerColor[0],\r\n boxShadow:\r\n \"0 12px 20px -10px rgba(\" +\r\n hexToRgb(dangerColor[0]) +\r\n \",.28), 0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.12), 0 7px 8px -5px rgba(\" +\r\n hexToRgb(dangerColor[0]) +\r\n \",.2)\",\r\n \"&:hover,&:focus\": {\r\n backgroundColor: dangerColor[0],\r\n boxShadow:\r\n \"0 12px 20px -10px rgba(\" +\r\n hexToRgb(dangerColor[0]) +\r\n \",.28), 0 4px 20px 0 rgba(\" +\r\n hexToRgb(blackColor) +\r\n \",.12), 0 7px 8px -5px rgba(\" +\r\n hexToRgb(dangerColor[0]) +\r\n \",.2)\"\r\n }\r\n },\r\n versionInfoItem: {\r\n [theme.breakpoints.up(\"sm\")]: {\r\n position: \"absolute\",\r\n width: \"100%\",\r\n bottom: \"13px\"\r\n }\r\n }\r\n});\r\n\r\nexport default drawerStyle;","import React from 'react';\r\nimport classNames from \"classnames\";\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { NavLink } from 'react-router-dom';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\nimport Icon from \"@material-ui/core/Icon\";\r\nimport styles from '../../assets/jss/components/drawerStyle';\r\nimport { activeRoute } from '../../utils/routesHelper';\r\n\r\nconst useStyles = makeStyles(styles);\r\n\r\nconst DrawerListItem = props => {\r\n const classes = useStyles();\r\n const { routePathname, itemCaption } = props;\r\n const ItemIcon = props.itemIcon;\r\n\r\n const activeMenuColor = 'green';\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default DrawerListItem;","import React from 'react';\r\nimport classNames from \"classnames\";\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport List from '@material-ui/core/List';\r\nimport ListItem from '@material-ui/core/ListItem';\r\nimport ListItemText from '@material-ui/core/ListItemText';\r\n//import EventNoteIcon from '@material-ui/icons/EventNote';\r\nimport MenuBookIcon from '@material-ui/icons/MenuBook';\r\nimport CopyrightIcon from '@material-ui/icons/Copyright';\r\nimport DescriptionIcon from '@material-ui/icons/Description';\r\n//import AssignmentIcon from '@material-ui/icons/Assignment';\r\nimport * as Routes from '../../constants';\r\nimport styles from '../../assets/jss/components/drawerStyle';\r\n\r\nimport SvgIcon from '@material-ui/core/SvgIcon';\r\nimport DrawerListItem from './DrawerListItem';\r\n\r\nfunction VerseOfTheDayIcon(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nfunction ReadingHistoryIcon(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nfunction FeedbackIcon(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst useStyles = makeStyles(styles);\r\n\r\nconst DrawerList = props => {\r\n const classes = useStyles();\r\n const [selectedRoute, setSelectedRoute] = React.useState(null);\r\n\r\n const handleMenuItemClick = (event, path) => {\r\n setSelectedRoute(path);\r\n };\r\n\r\n /* const activeRoute = routeName => {\r\n return window.location.href.indexOf(routeName) > -1 ? true : false;\r\n } */\r\n\r\n const activeMenuColor = 'green';\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n {/* \r\n \r\n \r\n */}\r\n {/* \r\n \r\n \r\n */}\r\n {/* \r\n \r\n \r\n */}\r\n \r\n )\r\n}\r\n\r\nexport default DrawerList;","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { makeStyles, useTheme } from '@material-ui/core/styles';\r\nimport Hidden from '@material-ui/core/Hidden';\r\nimport Drawer from '@material-ui/core/Drawer';\r\nimport DrawerList from './DrawerList';\r\nimport styles from '../../assets/jss/components/drawerStyle';\r\nimport drawerImage from \"../../assets/img/river.jpg\";\r\n//import logo from \"../../assets/img/ettLogo.png\";\r\n\r\nexport const drawerWidth = 240;\r\n\r\nconst useStyles = makeStyles(styles);\r\n\r\nconst HomePageDrawer = props => {\r\n const classes = useStyles();\r\n const theme = useTheme();\r\n\r\n const { isMobileDrawerOpen, onHandleDrawerToggle } = props;\r\n\r\n const brand = (\r\n
\r\n \r\n{/*
\r\n \"logo\"\r\n
*/}\r\n Christ The Beloved\r\n \r\n
\r\n )\r\n\r\n const drawerBackground = (\r\n
\r\n );\r\n\r\n const drawer = (\r\n
\r\n \r\n
\r\n );\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n {brand}\r\n {drawer}\r\n {drawerBackground}\r\n
\r\n \r\n
\r\n \r\n \r\n {brand}\r\n {drawer}\r\n {drawerBackground}\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nHomePageDrawer.propTypes = {\r\n isMobileDrawerOpen: PropTypes.bool.isRequired,\r\n onHandleDrawerToggle: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default HomePageDrawer;","import React from 'react';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nconst LoginHeader = () => {\r\n return (\r\n \r\n Sign in\r\n \r\n );\r\n}\r\n\r\nexport default LoginHeader;","import React from 'react';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nconst RegisterHeader = () => {\r\n return (\r\n \r\n Register\r\n \r\n );\r\n}\r\n\r\nexport default RegisterHeader;","import React from 'react';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nconst UpdateUserInfoHeader = () => {\r\n return (\r\n \r\n View/Update Info\r\n \r\n );\r\n}\r\n\r\nexport default UpdateUserInfoHeader;","import React from 'react';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nconst ChangePasswordHeader = () => {\r\n return (\r\n \r\n Change Password\r\n \r\n );\r\n}\r\n\r\nexport default ChangePasswordHeader;","import React from 'react';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nconst LoginHeader = () => {\r\n return (\r\n \r\n Forgot Password\r\n \r\n );\r\n}\r\n\r\nexport default LoginHeader;","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { green } from '@material-ui/core/colors';\r\nimport Button from '@material-ui/core/Button';\r\nimport Menu from '@material-ui/core/Menu';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n wrapper: { \r\n position: 'relative',\r\n },\r\n buttonProgress: {\r\n color: green[500],\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n});\r\n\r\nclass BibleVersionsListButton extends Component {\r\n static propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n theme: PropTypes.object.isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n isLoadingSuccessful: PropTypes.bool.isRequired,\r\n bibleVersionsList: PropTypes.array.isRequired,\r\n selectedBibleVersionName: PropTypes.string.isRequired,\r\n onHandleBibleVersionClick: PropTypes.func.isRequired,\r\n onHandleBibleVersionClose: PropTypes.func.isRequired,\r\n onHandleBibleVersionMenuItemClick: PropTypes.func.isRequired\r\n }\r\n render() {\r\n const { classes } = this.props;\r\n const { isLoading, isLoadingSuccessful, bibleVersionsList, selectedBibleVersionName } = this.props;\r\n const { anchorBibleVersionEl, onHandleBibleVersionClick, onHandleBibleVersionClose, onHandleBibleVersionMenuItemClick } = this.props\r\n \r\n return (\r\n
\r\n \r\n {selectedBibleVersionName}\r\n \r\n {isLoading && }\r\n \r\n {bibleVersionsList.map(version => (\r\n onHandleBibleVersionMenuItemClick(event, version.versionId, version.langId)}>\r\n {version.langName} - {version.versionName}\r\n \r\n ))} \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withStyles(styles, { withTheme: true })(BibleVersionsListButton);","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport _ from 'lodash';\r\nimport BibleVersionsListButton from './ListButton';\r\nimport { loadBibleVersions, setBibleVersion } from './actions';\r\n\r\nclass BibleVersions extends Component {\r\n static propTpes = {\r\n bibleVersionsList: PropTypes.array.isRequired,\r\n selectedBibleVersion: PropTypes.object.isRequired,\r\n loadBibleVersions: PropTypes.func.isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n isLoadingSuccessful: PropTypes.bool.isRequired,\r\n setBibleVersion: PropTypes.func.isRequired\r\n }\r\n\r\n state = {\r\n anchorBibleVersionEl: null,\r\n };\r\n \r\n componentDidMount() {\r\n this.props.loadBibleVersions();\r\n }\r\n\r\n handleBibleVersionClick = event => {\r\n this.setState({ anchorBibleVersionEl: event.currentTarget });\r\n };\r\n\r\n handleBibleVersionClose = () => {\r\n this.setState({ anchorBibleVersionEl: null });\r\n };\r\n\r\n handleBibleVersionMenuItemClick = (event, versionId, langId) => {\r\n this.setState({ anchorBibleVersionEl: null });\r\n this.props.setBibleVersion(versionId, langId);\r\n }\r\n\r\n render() {\r\n const { isLoading, isLoadingSuccessful, selectedBibleVersion } = this.props;\r\n let bibleVersionName = \"\";\r\n\r\n if (isLoading) {\r\n bibleVersionName = \"Loading versions\";\r\n } else if (isLoadingSuccessful) {\r\n bibleVersionName = selectedBibleVersion ? `${selectedBibleVersion.langName} - ${selectedBibleVersion.versionName}` : \"Select Version\";\r\n } else {\r\n bibleVersionName = \"Version\";\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const {\r\n entities: { bibleVersions },\r\n bibleVersion\r\n } = state\r\n\r\n const bibleVersionsList = _.values(bibleVersions);\r\n const selectedBibleVersion = bibleVersions[bibleVersion.id];\r\n const isLoading = bibleVersion.isLoading;\r\n const isLoadingSuccessful = bibleVersion.isLoadingSuccessful;\r\n \r\n return {\r\n bibleVersionsList,\r\n selectedBibleVersion,\r\n isLoading,\r\n isLoadingSuccessful\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n loadBibleVersions,\r\n setBibleVersion\r\n })(BibleVersions));","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Typography } from '@material-ui/core';\r\nimport BibleVersions from '../../Bible/Versions';\r\n\r\nconst styles = {\r\n root: {\r\n display: 'flex' \r\n },\r\n grow: {\r\n flexGrow: 1,\r\n },\r\n}\r\n\r\nclass VerseOfTheDayPanelHeader extends Component {\r\n static propTpes = {\r\n classes: PropTypes.object.isRequired,\r\n bibleVersionId: PropTypes.number.isRequired\r\n }\r\n\r\n render() {\r\n const { classes } = this.props;\r\n \r\n\r\n return (\r\n
\r\n \r\n Verse Of The Day\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(VerseOfTheDayPanelHeader);\r\n\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport VerseOfTheDayPanelHeader from './Panel';\r\n\r\nclass VerseOfTheDayHeader extends Component {\r\n static propTpes = {\r\n bibleVersionId: PropTypes.number.isRequired\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => { \r\n const {\r\n bibleVersion\r\n } = state\r\n\r\n const bibleVersionId = bibleVersion.id;\r\n \r\n return {\r\n bibleVersionId\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n })(VerseOfTheDayHeader));","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { green } from '@material-ui/core/colors';\r\nimport Button from '@material-ui/core/Button';\r\nimport Menu from '@material-ui/core/Menu';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n wrapper: { \r\n position: 'relative',\r\n },\r\n buttonProgress: {\r\n color: green[500],\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n});\r\n\r\nclass BibleBooksListButton extends Component {\r\n static propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n theme: PropTypes.object.isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n isLoadingSuccessful: PropTypes.bool.isRequired,\r\n bibleBooksList: PropTypes.array.isRequired,\r\n selectedBibleBookName: PropTypes.string.isRequired,\r\n langId: PropTypes.number.isRequired,\r\n onHandleBibleBookClick: PropTypes.func.isRequired,\r\n onHandleBibleBookClose: PropTypes.func.isRequired,\r\n onHandleBibleBookMenuItemClick: PropTypes.func.isRequired\r\n }\r\n render() {\r\n const { classes } = this.props;\r\n const { isLoading, isLoadingSuccessful, bibleBooksList, selectedBibleBookName, langId } = this.props; \r\n const { anchorBibleBookEl, onHandleBibleBookClick, onHandleBibleBookClose, onHandleBibleBookMenuItemClick } = this.props \r\n \r\n return (\r\n
\r\n \r\n {isLoading && }\r\n \r\n {bibleBooksList.map(book => (\r\n onHandleBibleBookMenuItemClick(event, book.bookId)}>\r\n {book.bookName}\r\n \r\n ))} \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withStyles(styles, { withTheme: true })(BibleBooksListButton);","import { createSelector } from 'reselect';\r\nimport { getBooksByBibleVersion } from './getBooksByBibleVersionSelector';\r\n\r\nconst getSelectedBibleBook = state => state.bibleBook;\r\n\r\nexport const getBookByBibleVersionAndSelectedBookId = createSelector(\r\n [getBooksByBibleVersion, getSelectedBibleBook],\r\n (booksByBibleVersion, selectedBibleBook) => {\r\n const bibleBooks = booksByBibleVersion.filter(book => book.bookId === selectedBibleBook.id);\r\n return bibleBooks[0];\r\n }\r\n)\r\n\r\nconst getBookId = (state, bookId) => bookId;\r\n\r\nexport const getBookByBibleVersionAndBookId = createSelector(\r\n [getBooksByBibleVersion, getBookId],\r\n (booksByBibleVersion, bookId) => {\r\n return booksByBibleVersion.find(book => book.bookId === bookId);\r\n }\r\n)","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport BibleBooksListButton from './ListButton';\r\nimport { loadBibleBooks, setBibleBook } from './actions';\r\nimport { getBooksByBibleVersion } from './selectors/getBooksByBibleVersionSelector';\r\nimport { getBookByBibleVersionAndSelectedBookId } from './selectors/getBookByBibleVersionAndBookIdSelector';\r\n\r\nclass BibleBooks extends Component {\r\n static propTpes = {\r\n bibleBooksList: PropTypes.array.isRequired,\r\n selectedBibleBook: PropTypes.object.isRequired,\r\n langId: PropTypes.number.isRequired,\r\n bibleVersionId: PropTypes.number.isRequired,\r\n loadBibleBooks: PropTypes.func.isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n isLoadingSuccessful: PropTypes.bool.isRequired,\r\n setBibleBook: PropTypes.func.isRequired\r\n }\r\n\r\n state = {\r\n anchorBibleBookEl: null, \r\n };\r\n \r\n componentDidMount() {\r\n const { bibleVersionId, loadBibleBooks } = this.props \r\n loadBibleBooks(bibleVersionId);\r\n }\r\n\r\n handleBibleBookClick = event => {\r\n this.setState({ anchorBibleBookEl: event.currentTarget });\r\n };\r\n\r\n handleBibleBookClose = () => {\r\n this.setState({ anchorBibleBookEl: null });\r\n };\r\n\r\n handleBibleBookMenuItemClick = (event, bookId) => {\r\n this.setState({ anchorBibleBookEl: null });\r\n this.props.setBibleBook(bookId);\r\n }\r\n\r\n render() {\r\n const { isLoading, isLoadingSuccessful, selectedBibleBook, langId } = this.props;\r\n let bibleBookName = \"\";\r\n\r\n if (isLoading) {\r\n bibleBookName = \"Loading books\";\r\n } else if (isLoadingSuccessful) {\r\n bibleBookName = selectedBibleBook ? selectedBibleBook.bookName : \"Select Book\";\r\n } else {\r\n bibleBookName = \"Book\";\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => { \r\n const {\r\n bibleVersion,\r\n bibleBook\r\n } = state\r\n\r\n const bibleBooksList = getBooksByBibleVersion(state);\r\n const selectedBibleBook = getBookByBibleVersionAndSelectedBookId(state);\r\n const bibleVersionId = bibleVersion.id;\r\n const langId = bibleVersion.langId;\r\n const isLoading = bibleBook.isLoading;\r\n const isLoadingSuccessful = bibleBook.isLoadingSuccessful;\r\n \r\n return {\r\n bibleBooksList,\r\n selectedBibleBook,\r\n bibleVersionId,\r\n isLoading,\r\n isLoadingSuccessful,\r\n langId\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n loadBibleBooks,\r\n setBibleBook\r\n })(BibleBooks));","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { green } from '@material-ui/core/colors';\r\nimport Button from '@material-ui/core/Button';\r\nimport Menu from '@material-ui/core/Menu';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n wrapper: { \r\n position: 'relative',\r\n },\r\n buttonProgress: {\r\n color: green[500],\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n});\r\n\r\nclass ChaptersListButton extends Component {\r\n static propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n theme: PropTypes.object.isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n isLoadingSuccessful: PropTypes.bool.isRequired,\r\n chaptersList: PropTypes.array.isRequired,\r\n selectedChapterNumber: PropTypes.string.isRequired,\r\n onHandleChapterClick: PropTypes.func.isRequired,\r\n onHandleChapterClose: PropTypes.func.isRequired,\r\n onHandleChapterMenuItemClick: PropTypes.func.isRequired\r\n }\r\n render() {\r\n const { classes } = this.props;\r\n const { isLoading, isLoadingSuccessful, chaptersList, selectedChapterNumber } = this.props; \r\n const { anchorChapterEl, onHandleChapterClick, onHandleChapterClose, onHandleChapterMenuItemClick } = this.props\r\n \r\n return (\r\n
\r\n \r\n {selectedChapterNumber}\r\n \r\n {isLoading && }\r\n \r\n {chaptersList.map(chapter => (\r\n onHandleChapterMenuItemClick(event, chapter.chapterId)}>\r\n {chapter.chapterNumber}\r\n \r\n ))} \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withStyles(styles, { withTheme: true })(ChaptersListButton);","import { createSelector } from 'reselect';\r\nimport { getChaptersByBookId } from './getChaptersByBookIdSelector';\r\n\r\nconst getSelectedBibleVersion = state => state.bibleVersion;\r\n\r\nexport const getChaptersByBookIdAndBibleVersion = createSelector(\r\n [getChaptersByBookId, getSelectedBibleVersion],\r\n (chaptersByBookId, selectedBibleVersion) => {\r\n const filteredChapters = chaptersByBookId.filter(chapter => chapter.langId === selectedBibleVersion.langId); \r\n return filteredChapters;\r\n }\r\n)","import { createSelector } from 'reselect';\r\nimport _ from 'lodash';\r\nimport { getBibleVersionBySelectedVersionId } from '../../Versions/selectors/getBibleVersionBySelectedVersionIdSelector';\r\n\r\nconst getBibleChapters = state => _.values(state.entities.chapters);\r\n\r\nexport const getChaptersByBibleVersion = createSelector(\r\n [getBibleChapters, getBibleVersionBySelectedVersionId],\r\n (bibleChapters, bibleVersionBySelectedVersionId) => {\r\n const selectedLangId = bibleVersionBySelectedVersionId ? bibleVersionBySelectedVersionId.langId : 2;\r\n const filteredChapters = bibleChapters.filter(chapter => chapter.langId === selectedLangId);\r\n return filteredChapters;\r\n }\r\n)","import { createSelector } from 'reselect';\r\nimport { getChaptersByBookIdAndBibleVersion } from './getChaptersByBookIdAndBibleVersionSelector';\r\nimport { getChaptersByBibleVersion } from './getChaptersByBibleVersionSelector';\r\n\r\nconst getSelectedChapter = state => state.bookChapter;\r\n\r\nexport const getChapterByBibleVersionAndSelectedChapterId = createSelector(\r\n [getChaptersByBookIdAndBibleVersion, getSelectedChapter],\r\n (chaptersByBookIdAndBibleVersion, selectedChapter) => {\r\n const chapters = chaptersByBookIdAndBibleVersion.filter(chapter => chapter.chapterId === selectedChapter.id);\r\n return chapters[0];\r\n }\r\n)\r\n\r\nconst getChapterId = (state, chapterId) => chapterId;\r\n\r\nexport const getChapterByBibleVersionAndChapterId = createSelector(\r\n [getChaptersByBibleVersion, getChapterId],\r\n (chaptersByBibleVersion, chapterId) => {\r\n return chaptersByBibleVersion.find(chapter => chapter.chapterId === chapterId);\r\n }\r\n)","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport ChaptersListButton from './ListButton';\r\nimport { loadBookChapters, setBookChapter } from './actions';\r\nimport { getChaptersByBookIdAndBibleVersion } from './selectors/getChaptersByBookIdAndBibleVersionSelector';\r\nimport { getChapterByBibleVersionAndSelectedChapterId } from './selectors/getChapterByBibleVersionAndChapterIdSelector';\r\n\r\nclass BookChapters extends Component {\r\n static propTpes = {\r\n chaptersList: PropTypes.array.isRequired,\r\n selectedChapter: PropTypes.object.isRequired,\r\n bibleVersionId: PropTypes.number.isRequired,\r\n bookId: PropTypes.number.isRequired,\r\n loadBookChapters: PropTypes.func.isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n isLoadingSuccessful: PropTypes.bool.isRequired,\r\n setBookChapter: PropTypes.func.isRequired\r\n }\r\n\r\n state = {\r\n anchorChapterEl: null,\r\n };\r\n \r\n componentDidMount() {\r\n const { bibleVersionId, bookId } = this.props;\r\n if (bookId !== 0) {\r\n this.props.loadBookChapters(bibleVersionId, bookId);\r\n } \r\n }\r\n\r\n handleChapterClick = event => {\r\n this.setState({ anchorChapterEl: event.currentTarget });\r\n };\r\n\r\n handleChapterClose = () => {\r\n this.setState({ anchorChapterEl: null });\r\n };\r\n\r\n handleChapterMenuItemClick = (event, chapterId) => {\r\n this.setState({ anchorChapterEl: null });\r\n this.props.setBookChapter(chapterId);\r\n }\r\n\r\n render() {\r\n const { isLoading, isLoadingSuccessful, selectedChapter } = this.props;\r\n let chapterNumber = \"\";\r\n\r\n if (isLoading) {\r\n chapterNumber = \"Loading chapters\";\r\n } else if (isLoadingSuccessful) {\r\n chapterNumber = selectedChapter ? selectedChapter.chapterNumber : \"Select Chapter\";\r\n } else {\r\n chapterNumber = \"Chapter\";\r\n }\r\n \r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => { \r\n const {\r\n bibleVersion,\r\n bibleBook,\r\n bookChapter\r\n } = state\r\n\r\n const chaptersList = getChaptersByBookIdAndBibleVersion(state);\r\n const selectedChapter = getChapterByBibleVersionAndSelectedChapterId(state);\r\n const bibleVersionId = bibleVersion.id;\r\n const bookId = bibleBook.id;\r\n const isLoading = bookChapter.isLoading;\r\n const isLoadingSuccessful = bookChapter.isLoadingSuccessful;\r\n \r\n return {\r\n chaptersList,\r\n selectedChapter,\r\n bibleVersionId,\r\n bookId,\r\n isLoading,\r\n isLoadingSuccessful\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n loadBookChapters,\r\n setBookChapter\r\n })(BookChapters));","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport { Typography } from '@material-ui/core';\r\nimport BibleBooks from '../Books';\r\nimport BookChapters from '../Chapters';\r\nimport BibleVersions from '../Versions';\r\n\r\nconst styles = {\r\n root: {\r\n display: 'flex' \r\n },\r\n grow: {\r\n flexGrow: 1,\r\n },\r\n}\r\n\r\nclass BiblePanelHeader extends Component {\r\n static propTpes = {\r\n classes: PropTypes.object.isRequired,\r\n bibleVersionId: PropTypes.number.isRequired\r\n }\r\n\r\n render() {\r\n const { classes } = this.props;\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(BiblePanelHeader);\r\n\r\n","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport BiblePanelHeader from './Panel';\r\n\r\nclass BibleHeader extends Component {\r\n static propTpes = {\r\n bibleVersionId: PropTypes.number.isRequired\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => { \r\n const {\r\n bibleVersion\r\n } = state\r\n\r\n const bibleVersionId = bibleVersion.id;\r\n \r\n return {\r\n bibleVersionId\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n })(BibleHeader));","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nconst styles = {\r\n root: {\r\n flexGrow: 1,\r\n },\r\n grow: {\r\n flexGrow: 1,\r\n },\r\n };\r\n\r\nconst FavoriteVersesHeader = (props) => {\r\n const { classes } = props;\r\n return (\r\n
\r\n \r\n Favorite Verses\r\n \r\n
\r\n );\r\n}\r\n\r\nFavoriteVersesHeader.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n };\r\n\r\nexport default withStyles(styles)(FavoriteVersesHeader);","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nconst styles = {\r\n root: {\r\n flexGrow: 1,\r\n },\r\n grow: {\r\n flexGrow: 1,\r\n },\r\n };\r\n\r\nconst TopicsHeader = (props) => {\r\n const { classes } = props;\r\n return (\r\n
\r\n \r\n Topics\r\n \r\n
\r\n );\r\n}\r\n\r\nTopicsHeader.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n };\r\n\r\nexport default withStyles(styles)(TopicsHeader);","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nconst styles = {\r\n root: {\r\n flexGrow: 1,\r\n },\r\n grow: {\r\n flexGrow: 1,\r\n },\r\n };\r\n\r\nconst SettingsHeader = (props) => {\r\n const { classes } = props;\r\n return (\r\n
\r\n \r\n Settings\r\n \r\n
\r\n );\r\n}\r\n\r\nSettingsHeader.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n };\r\n\r\nexport default withStyles(styles)(SettingsHeader);","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nconst styles = {\r\n root: {\r\n flexGrow: 1,\r\n },\r\n grow: {\r\n flexGrow: 1,\r\n },\r\n };\r\n\r\nconst CopyrightsHeader = (props) => {\r\n const { classes } = props;\r\n return (\r\n
\r\n \r\n Copyrights\r\n \r\n
\r\n );\r\n}\r\n\r\nCopyrightsHeader.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n };\r\n\r\nexport default withStyles(styles)(CopyrightsHeader);","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\n\r\nconst styles = {\r\n root: {\r\n flexGrow: 1,\r\n },\r\n grow: {\r\n flexGrow: 1,\r\n },\r\n };\r\n\r\nconst ReleaseNotesHeader = (props) => {\r\n const { classes } = props;\r\n return (\r\n
\r\n \r\n Release Notes\r\n \r\n
\r\n );\r\n}\r\n\r\nReleaseNotesHeader.propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n };\r\n\r\nexport default withStyles(styles)(ReleaseNotesHeader);","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport Menu from '@material-ui/core/Menu';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport * as Routes from '../../constants';\r\n\r\nconst SignInAccountMenu = props => {\r\n const { signInAccountAnchorEl, onAccountMenuClose } = props;\r\n\r\n const isSignInAccountMenuOpen = Boolean(signInAccountAnchorEl);\r\n const signInAccountMenuId = 'signIn-account-menu';\r\n\r\n return (\r\n \r\n Sign in\r\n Register \r\n \r\n );\r\n}\r\n\r\nSignInAccountMenu.propTypes = {\r\n onAccountMenuClose: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default SignInAccountMenu;","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport Menu from '@material-ui/core/Menu';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport * as Routes from '../../../constants';\r\n\r\nconst SignOutMenu = props => {\r\n const { signOutAccountAnchorEl, onAccountMenuClose, onSignOutMenuClick } = props;\r\n\r\n const isSignOutAccountMenuOpen = Boolean(signOutAccountAnchorEl);\r\n const signOutAccountMenuId = 'signOut-account-menu';\r\n\r\n return (\r\n \r\n View/Update Info\r\n Change Password\r\n Sign Out\r\n \r\n );\r\n}\r\n\r\nSignOutMenu.propTypes = {\r\n onAccountMenuClose: PropTypes.func.isRequired,\r\n onSignOutMenuClick: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default SignOutMenu;","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport SignOutMenu from './Menu';\r\nimport { signOutActions } from '../SignOut/actions';\r\n\r\nconst { signOutUser } = signOutActions;\r\n\r\nconst SignOutAccountMenu = props => {\r\n const { signedInUserId, signOutAccountAnchorEl, onAccountMenuClose, signOutUser } = props;\r\n\r\n const handleSignOutMenuClick = () => {\r\n signOutUser(signedInUserId);\r\n onAccountMenuClose();\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nSignOutAccountMenu.propTypes = {\r\n signedInUserId: PropTypes.number.isRequired,\r\n onAccountMenuClose: PropTypes.func.isRequired,\r\n signOutUser: PropTypes.func.isRequired\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n const {\r\n loggedinUser\r\n } = state;\r\n \r\n const signedInUserId = loggedinUser ? loggedinUser.userId : 0;\r\n\r\n return {\r\n signedInUserId\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, {\r\n signOutUser \r\n})(SignOutAccountMenu);","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { Typography } from '@material-ui/core';\r\n\r\nconst styles = {\r\n root: {\r\n display: 'flex' \r\n },\r\n grow: {\r\n flexGrow: 1,\r\n },\r\n}\r\n\r\nconst useStyles = makeStyles(styles);\r\n\r\nconst BibleHistoryPanelHeader = props => {\r\n const classes = useStyles();\r\n\r\n return ( \r\n
\r\n \r\n Reading History\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default BibleHistoryPanelHeader;","import React from 'react';\r\nimport BibleHistoryPanelHeader from './Panel';\r\n\r\nconst BibleHistoryHeader = props => {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default BibleHistoryHeader;","import React, { useState } from 'react';\r\nimport { Route } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport AppBar from '@material-ui/core/AppBar';\r\nimport Toolbar from '@material-ui/core/Toolbar';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport MenuIcon from '@material-ui/icons/Menu';\r\nimport LinearProgress from '@material-ui/core/LinearProgress';\r\n//import AccountCircle from '@material-ui/icons/AccountCircle';\r\n//import MoreIcon from '@material-ui/icons/MoreVert';\r\nimport { drawerWidth } from './Drawer';\r\nimport * as Routes from '../../constants';\r\nimport LoginHeader from '../auth/Login/Header';\r\nimport RegisterHeader from '../auth/Register/Header';\r\nimport UpdateUserInfoHeader from '../auth/UpdateUserInfo/Header';\r\nimport ChangePasswordHeader from '../auth/ChangePassword/Header';\r\nimport ForgotPasswordHeader from '../auth/ForgotPassword/Header';\r\nimport VerseOfTheDayHeader from '../VerseOfTheDay/Header';\r\nimport BibleHeader from '../Bible/Header';\r\nimport FavoriteVersesHeader from '../Bible/components/FavoriteVersesHeader';\r\nimport TopicsHeader from './components/TopicsHeader';\r\nimport SettingsHeader from './components/SettingsHeader';\r\nimport CopyrightsHeader from './components/CopyrightsHeader';\r\nimport ReleaseNotesHeader from './components/ReleaseNotesHeader';\r\nimport SignInAccountMenu from '../auth/SignInAccountMenu';\r\nimport SignOutAccountMenu from '../auth/SignOutAccountMenu';\r\n\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nimport SvgIcon from '@material-ui/core/SvgIcon';\r\nimport BibleHistoryHeader from '../BibleHistory/Header';\r\nimport { AlternateEmail } from '@material-ui/icons';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n },\r\n appBar: {\r\n marginLeft: drawerWidth,\r\n background: \"#0d1e2d\",\r\n opacity: \".8\",\r\n [theme.breakpoints.up('sm')]: {\r\n width: `calc(100% - ${drawerWidth}px)`,\r\n },\r\n },\r\n menuButton: {\r\n marginRight: 20,\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'none',\r\n },\r\n },\r\n grow: {\r\n flexGrow: 1,\r\n },\r\n sectionDesktop: {\r\n display: 'none',\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'flex',\r\n }, \r\n },\r\n sectionMobile: {\r\n display: 'flex',\r\n [theme.breakpoints.up('sm')]: {\r\n display: 'none',\r\n },\r\n },\r\n loggedOut: {\r\n fill: '#FF0000', \r\n },\r\n loggedIn: {\r\n fill: '#00FF00', \r\n },\r\n loggingIn: {\r\n animation: '$userLoggingIn 1s infinite alternate'\r\n },\r\n '@keyframes userLoggingIn': {\r\n from : {\r\n fill: '#FF0000'\r\n },\r\n to : {\r\n fill: '#00FF00'\r\n }, \r\n },\r\n}));\r\n\r\nfunction AccountIcon(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst HomePageAppBar = props => {\r\n const classes = useStyles();\r\n const { isLoggedIn, userLoggingIn, userDisplayName, isProcessing, onHandleDrawerToggle } = props\r\n\r\n const [signInAccountAnchorEl, setSignInAccountAnchorEl] = useState(null);\r\n const [signOutAccountAnchorEl, setSignOutAccountAnchorEl] = useState(null);\r\n //const [mobileMoreAnchorEl, setMobileMoreAnchorEl] = useState(null);\r\n\r\n //const isMobileMenuOpen = Boolean(mobileMoreAnchorEl);\r\n\r\n const handleSignInAccountMenuOpen = event => {\r\n setSignInAccountAnchorEl(event.currentTarget);\r\n }\r\n\r\n const handleSignOutAccountMenuOpen = event => {\r\n setSignOutAccountAnchorEl(event.currentTarget);\r\n }\r\n\r\n //const handleMobileMenuOpen = event => {\r\n //setMobileMoreAnchorEl(event.currentTarget);\r\n //}\r\n\r\n const handleMobileMenuClose = () => {\r\n //setMobileMoreAnchorEl(null);\r\n }\r\n\r\n const handleAccountMenuClose = () => {\r\n setSignInAccountAnchorEl(null);\r\n setSignOutAccountAnchorEl(null);\r\n handleMobileMenuClose(); \r\n } \r\n\r\n // const mobileMenuId = 'more-menu-mobile';\r\n // const renderMobileMenu = (\r\n // \r\n // \r\n // \r\n // \r\n // \r\n //

Account

\r\n //
\r\n // \r\n // );\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n {userDisplayName} \r\n \r\n \r\n
\r\n {/*
\r\n \r\n \r\n \r\n {userDisplayName} \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
*/} \r\n
\r\n {isProcessing && } \r\n
\r\n \r\n \r\n {/* {renderMobileMenu} */}\r\n
\r\n );\r\n}\r\n\r\nHomePageAppBar.propTypes = {\r\n isLoggedIn: PropTypes.bool.isRequired,\r\n userLoggingIn: PropTypes.bool.isRequired,\r\n userDisplayName: PropTypes.string.isRequired,\r\n isProcessing: PropTypes.bool.isRequired,\r\n onHandleDrawerToggle: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default HomePageAppBar;","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport clsx from 'clsx';\r\nimport CheckCircleIcon from '@material-ui/icons/CheckCircle';\r\nimport ErrorIcon from '@material-ui/icons/Error';\r\nimport InfoIcon from '@material-ui/icons/Info';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { amber, green } from '@material-ui/core/colors';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport SnackbarContent from '@material-ui/core/SnackbarContent';\r\nimport WarningIcon from '@material-ui/icons/Warning';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { ALERT_TYPE_ERROR, ALERT_TYPE_INFO, ALERT_TYPE_SUCCESS, ALERT_TYPE_WARNING } from '../../constants';\r\n\r\nconst variantIcon = {\r\n success: CheckCircleIcon,\r\n warning: WarningIcon,\r\n error: ErrorIcon,\r\n info: InfoIcon,\r\n};\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n success: {\r\n backgroundColor: green[600],\r\n },\r\n error: {\r\n backgroundColor: theme.palette.error.dark,\r\n },\r\n info: {\r\n backgroundColor: theme.palette.primary.main,\r\n },\r\n warning: {\r\n backgroundColor: amber[700],\r\n },\r\n icon: {\r\n fontSize: 20,\r\n },\r\n iconVariant: {\r\n opacity: 0.9,\r\n marginRight: theme.spacing(1),\r\n },\r\n message: {\r\n display: 'flex',\r\n alignItems: 'center',\r\n },\r\n}));\r\n\r\nexport default function SnackbarContentWrapper(props) {\r\n const classes = useStyles();\r\n const { className, message, onClose, variant, ...other } = props;\r\n const Icon = variantIcon[variant];\r\n\r\n return (\r\n \r\n \r\n {message}\r\n \r\n }\r\n action={[\r\n \r\n \r\n ,\r\n ]}\r\n {...other}\r\n />\r\n );\r\n}\r\n\r\nSnackbarContentWrapper.propTypes = {\r\n className: PropTypes.string,\r\n message: PropTypes.string,\r\n onClose: PropTypes.func,\r\n variant: PropTypes.oneOf([ALERT_TYPE_ERROR, ALERT_TYPE_INFO, ALERT_TYPE_SUCCESS, ALERT_TYPE_WARNING]).isRequired,\r\n};","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport SnackbarContentWrapper from './SnackbarContentWrapper';\r\n\r\nexport default function MessageBox(props) {\r\n const { canDisplayMessageBox, message, variant, onHandleClose } = props;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nMessageBox.propTypes = {\r\n canDisplayMessageBox: PropTypes.bool,\r\n message: PropTypes.string,\r\n variant: PropTypes.oneOf(['error', 'info', 'success', 'warning']).isRequired,\r\n onHandleClose: PropTypes.func.isRequired\r\n };","import React from \"react\";\r\nimport { makeStyles } from \"@material-ui/styles\";\r\nimport Grid from \"@material-ui/core/Grid\";\r\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\r\nimport Paper from \"@material-ui/core/Paper\";\r\n//import Avatar from \"@material-ui/core/Avatar\";\r\nimport Divider from \"@material-ui/core/Divider\";\r\n//import SignalWifiOffIcon from \"@material-ui/icons/SignalWifiOff\";\r\nimport Typography from \"@material-ui/core/Typography\";\r\nimport Button from \"@material-ui/core/Button\";\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n paper: {\r\n padding: '20px 20px 3px', \r\n //padding: `${theme.spacing.unit * 2}px ${theme.spacing.unit}px ${theme.spacing.unit}px ${theme.spacing.unit * 2}px`\r\n }, \r\n /* avatar: {\r\n backgroundColor: theme.palette.primary.main\r\n } */\r\n}));\r\n\r\nfunction MessageBanner(props) {\r\n const classes = useStyles();\r\n const { bannerMessage, buttonCaption, onHandleClose } = props;\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {/* \r\n \r\n */}\r\n \r\n \r\n \r\n {bannerMessage}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default MessageBanner;","import React from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\n//import { Redirect } from 'react-router-dom';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport ChristTheSheperd from '../components/ChristTheSheperd.jpg';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n }, \r\n}));\r\n\r\nconst MainPanel = () => {\r\n const classes = useStyles();\r\n \r\n return ( \r\n
\r\n {/* */}\r\n {ChristTheSheperd}\r\n
\r\n \r\n Welcome to Christ The Beloved Bible App.
\r\n
\r\n \r\n You can use the side menu to read the bible, view Verse of the Day, and follow your reading history.
\r\n
\r\n \r\n We will be adding more features in the near future. Enjoy!
\r\n
\r\n
\r\n)\r\n }\r\n\r\nexport default MainPanel","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport MainPanel from './Panel';\r\n\r\nclass Main extends Component {\r\n static propTpes = {\r\n shouldForceReload: PropTypes.bool.isRequired\r\n }\r\n\r\n componentDidMount() {\r\n const { shouldForceReload } = this.props;\r\n if (shouldForceReload) {\r\n window.location.reload(true);\r\n } \r\n }\r\n \r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n ); \r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const {\r\n settings\r\n } = state\r\n \r\n const shouldForceReload = settings.shouldForceReload;\r\n \r\n return {\r\n shouldForceReload\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, { \r\n})(Main));","import React, { useState, useEffect } from 'react';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport Avatar from '@material-ui/core/Avatar';\r\nimport Button from '@material-ui/core/Button';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Link from '@material-ui/core/Link';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Box from '@material-ui/core/Box';\r\nimport LockOutlinedIcon from '@material-ui/icons/LockOutlined';\r\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\r\nimport Checkbox from '@material-ui/core/Checkbox';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Container from '@material-ui/core/Container';\r\nimport { ROUTES_FORGOTPASSWORD_PATHNAME, ROUTES_REGISTER_PATHNAME } from '../../../constants';\r\n\r\nfunction Copyright() {\r\n return ( \r\n \r\n {'Copyright © '}\r\n \r\n Christ The Beloved Bible App\r\n {' '}\r\n {new Date().getFullYear()}\r\n {'.'}\r\n \r\n );\r\n}\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n '@global': {\r\n body: {\r\n backgroundColor: theme.palette.common.white,\r\n },\r\n },\r\n paper: {\r\n marginTop: theme.spacing(8),\r\n display: 'flex', \r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n avatar: {\r\n margin: theme.spacing(1),\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n form: {\r\n width: '100%', // Fix IE 11 issue.\r\n marginTop: theme.spacing(1),\r\n },\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n }\r\n}));\r\n\r\nconst ForgotPasswordLink = React.forwardRef((props, ref) => );\r\nconst RegisterLink = React.forwardRef((props, ref) => );\r\n\r\nconst LoginPanel = props => {\r\n const classes = useStyles();\r\n const [ usernameFocused, setUsernameFocused] = useState(false);\r\n const { isProcessing, username, password, rememberMe } = props;\r\n const { onUsernameChange, onPasswordChange, onRememberMeChange, onSubmitLoginClick } = props;\r\n\r\n let usernameInput;\r\n\r\n const setFocus = () => {\r\n usernameInput.focus();\r\n setUsernameFocused(true);\r\n }\r\n\r\n useEffect(() => {\r\n if (!usernameFocused) {\r\n setFocus();\r\n } \r\n })\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n Sign in\r\n \r\n
\r\n {usernameInput = input;} } \r\n value={username}\r\n onChange={onUsernameChange}\r\n />\r\n \r\n }\r\n label=\"Remeber my signin on this device\"\r\n />\r\n \r\n Sign in\r\n \r\n \r\n \r\n \r\n Forgot password?\r\n \r\n \r\n \r\n \r\n {\"Don't have an account? Register\"}\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n Please sign in to ensure your data is synced to the cloud. This allows to protect against data loss and to have same user experience and data across devices you use.\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nLoginPanel.propTypes = {\r\n username: PropTypes.string.isRequired,\r\n password: PropTypes.string.isRequired,\r\n rememberMe: PropTypes.bool.isRequired,\r\n onUsernameChange: PropTypes.func.isRequired,\r\n onPasswordChange: PropTypes.func.isRequired,\r\n onRememberMeChange: PropTypes.func.isRequired,\r\n onSubmitLoginClick: PropTypes.func.isRequired\r\n}\r\n\r\nexport default LoginPanel;","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport LoginPanel from './Panel';\r\nimport { loginActions } from './actions';\r\nimport { ROUTES_HOME_PATHNAME } from '../../../constants';\r\nimport { getCurrentDateTimeLt } from '../../../utils/dateHelper';\r\n\r\nconst { submitLoginRequest } = loginActions;\r\n\r\nconst Login = (props) => {\r\n const [username, setUsername] = useState('');\r\n const [password, setPassword] = useState('');\r\n const [rememberMe, setRememberMe] = useState(false);\r\n\r\n const { isProcessing, loggedinUser } = props;\r\n\r\n useEffect(() => {\r\n if (loggedinUser) {\r\n props.history.push(ROUTES_HOME_PATHNAME);\r\n } \r\n })\r\n\r\n const handleUsernameChange = event => {\r\n setUsername(event.target.value);\r\n };\r\n\r\n const handlePasswordChange = event => {\r\n setPassword(event.target.value);\r\n };\r\n\r\n const handleRememberMeChange = event => {\r\n setRememberMe(event.target.checked);\r\n } \r\n\r\n const handleSubmitLoginClick = event => {\r\n event.preventDefault();\r\n let encodedCredentials = window.btoa(username + ':' + password);\r\n const loginDateTimeLt = getCurrentDateTimeLt();\r\n props.submitLoginRequest(JSON.stringify({EncodedCredentials: encodedCredentials, currentDateTimeLt: loginDateTimeLt}), rememberMe);\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nLogin.propTypes = {\r\n isProcessing: PropTypes.bool.isRequired,\r\n submitLoginRequest: PropTypes.func.isRequired\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n const {\r\n appStatus,\r\n loggedinUser \r\n } = state;\r\n\r\n const isProcessing = appStatus.isProcessing;\r\n return { \r\n isProcessing,\r\n loggedinUser\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n submitLoginRequest \r\n})(Login));","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Container from '@material-ui/core/Container';\r\nimport Box from '@material-ui/core/Box';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Button from '@material-ui/core/Button';\r\nimport TextField from '@material-ui/core/TextField';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n '@global': {\r\n body: {\r\n backgroundColor: theme.palette.common.white,\r\n },\r\n },\r\n paper: {\r\n marginTop: theme.spacing(8),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n form: {\r\n width: '100%', // Fix IE 11 issue.\r\n marginTop: theme.spacing(1),\r\n },\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n },\r\n}));\r\n\r\nconst RegisterPanel = props => {\r\n const classes = useStyles();\r\n const [ usernameFocused, setUsernameFocused] = useState(false);\r\n\r\n const { isProcessing, username, password, confirmPassword, \r\n firstname, lastname, displayName, email,\r\n isValidPassword } = props;\r\n\r\n const { onUsernameChange, onPasswordChange, onConfirmPasswordChange, \r\n onFirstnameChange, onLastnameChange, onDisplayNameChange, \r\n onEmailChange, onSubmitRegisterClick } = props;\r\n\r\n let usernameInput;\r\n\r\n const setFocus = () => {\r\n usernameInput.focus();\r\n setUsernameFocused(true);\r\n }\r\n\r\n useEffect(() => {\r\n if (!usernameFocused) {\r\n setFocus();\r\n } \r\n })\r\n\r\n return (\r\n \r\n \r\n
\r\n
\r\n {usernameInput = input;} } \r\n value={username}\r\n onChange={onUsernameChange}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Register\r\n \r\n \r\n
\r\n \r\n \r\n An email confirmation will be sent to the email address provided. Please check your junk email folder if you cannot find it.
\r\n Registration to Christ The Beloved Bible App ensures your data is synced to the cloud. This allows to have same user experience and data on multiple devices and to protect against data loss.\r\n
\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nRegisterPanel.propTypes = {\r\n isProcessing: PropTypes.bool.isRequired,\r\n username: PropTypes.string.isRequired,\r\n password: PropTypes.string.isRequired,\r\n confirmPassword: PropTypes.string.isRequired,\r\n firstname: PropTypes.string.isRequired,\r\n lastname: PropTypes.string.isRequired,\r\n displayName: PropTypes.string.isRequired,\r\n email: PropTypes.string.isRequired,\r\n isValidPassword: PropTypes.func.isRequired,\r\n onUsernameChange: PropTypes.func.isRequired,\r\n onPasswordChange: PropTypes.func.isRequired,\r\n onConfirmPasswordChange: PropTypes.func.isRequired,\r\n onFirstnameChange: PropTypes.func.isRequired,\r\n onLastnameChange: PropTypes.func.isRequired,\r\n onDisplayNameChange: PropTypes.func.isRequired,\r\n onEmailChange: PropTypes.func.isRequired,\r\n onSubmitRegisterClick: PropTypes.func.isRequired\r\n}\r\n\r\nexport default RegisterPanel;","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport RegisterPanel from './Panel';\r\nimport { registerActions } from './actions';\r\nimport { setAlertMessage } from '../../../actions';\r\nimport { ALERT_TYPE_ERROR } from '../../../constants';\r\nimport { getCurrentDateTimeLt } from '../../../utils/dateHelper';\r\n\r\nconst { submitRegisterRequest } = registerActions;\r\n\r\nconst Register = (props) => {\r\n const [username, setUsername] = useState('');\r\n const [password, setPassword] = useState('');\r\n const [confirmPassword, setConfirmPassword] = useState('');\r\n const [firstname, setFirstname] = useState('');\r\n const [lastname, setLastname] = useState('');\r\n const [displayName, setDisplayName] = useState('');\r\n const [email, setEmail] = useState('');\r\n const [passwordErrorMessage, setPasswordErrorMessage] = useState('');\r\n\r\n const { setAlertMessage, submitRegisterRequest } = props;\r\n\r\n const isFieldPopulated = (value) => {\r\n return value !== '';\r\n }\r\n \r\n const isMatchingPasswords = (value1, value2) => {\r\n if (value1 !== value2) {\r\n setPasswordErrorMessage('Password mismatch');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n const isFilledPassword = (value1) => {\r\n if (value1 === '') {\r\n setPasswordErrorMessage('Password cannot be empty');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n const validatePassword = (value1, value2) => {\r\n if (isFilledPassword(value1) && isMatchingPasswords(value1, value2)) {\r\n setPasswordErrorMessage('');\r\n }\r\n }\r\n\r\n const handleUsernameChange = event => {\r\n setUsername(event.target.value);\r\n };\r\n\r\n const handlePasswordChange = event => {\r\n setPassword(event.target.value);\r\n validatePassword(event.target.value, confirmPassword);\r\n };\r\n\r\n const handleConfirmPasswordChange = event => {\r\n setConfirmPassword(event.target.value);\r\n validatePassword(password, event.target.value);\r\n };\r\n\r\n const handleFirstnameChange = event => {\r\n setFirstname(event.target.value);\r\n };\r\n\r\n const handleLastnameChange = event => {\r\n setLastname(event.target.value);\r\n };\r\n\r\n const handleDisplayNameChange = event => {\r\n setDisplayName(event.target.value);\r\n };\r\n\r\n const handleEmailChange = event => {\r\n setEmail(event.target.value);\r\n };\r\n \r\n const handleSubmitRegisterClick = (event) => {\r\n event.preventDefault();\r\n if (isValidRequiredFields()) {\r\n let encodedCredentials = window.btoa(username + ':' + password);\r\n const currentDateTimeLt = getCurrentDateTimeLt();\r\n submitRegisterRequest(JSON.stringify({\r\n EncodedCredentials: encodedCredentials,\r\n CurrentDateTimeLt: currentDateTimeLt,\r\n Firstname: firstname,\r\n Lastname: lastname,\r\n DisplayName: displayName,\r\n Email: email\r\n }));\r\n }\r\n }\r\n\r\n const isValidPassword = () => {\r\n return (passwordErrorMessage === '');\r\n }\r\n\r\n const isValidUsername = () => {\r\n if (!isFieldPopulated(username)) {\r\n setAlertMessage(ALERT_TYPE_ERROR, 'Username cannot be empty');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n const isValidFirstname = () => {\r\n if (!isFieldPopulated(firstname)) {\r\n setAlertMessage(ALERT_TYPE_ERROR, 'First name cannot be empty');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n const isValidDisplayname = () => {\r\n if (!isFieldPopulated(displayName)) {\r\n setAlertMessage(ALERT_TYPE_ERROR, 'Display name cannot be empty');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n const isValidEmail = () => { \r\n var mailFormat = /^\\w+([.-]?\\w+)*@\\w+([.-]?\\w+)*(\\.\\w{2,3})+$/;\r\n if (!email.match(mailFormat)) {\r\n setAlertMessage(ALERT_TYPE_ERROR, 'Invalid Email');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n const isValidRequiredFields = () => { \r\n if (!isFilledPassword(password) || !isValidPassword()) {\r\n var errorMsg = passwordErrorMessage !== '' ? passwordErrorMessage : 'Password cannot be empty'\r\n setAlertMessage(ALERT_TYPE_ERROR, errorMsg);\r\n return false;\r\n } \r\n\r\n return isValidUsername()\r\n && isValidFirstname()\r\n && isValidDisplayname()\r\n && isValidEmail();\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nRegister.propTypes = {\r\n isProcessing: PropTypes.bool.isRequired,\r\n setAlertMessage: PropTypes.func.isRequired,\r\n submitRegisterRequest: PropTypes.func.isRequired\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n const {\r\n appStatus \r\n } = state;\r\n\r\n const isProcessing = appStatus.isProcessing;\r\n return { \r\n isProcessing\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n setAlertMessage,\r\n submitRegisterRequest \r\n})(Register));","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Container from '@material-ui/core/Container';\r\nimport Button from '@material-ui/core/Button';\r\nimport TextField from '@material-ui/core/TextField';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n '@global': {\r\n body: {\r\n backgroundColor: theme.palette.common.white,\r\n },\r\n },\r\n paper: {\r\n marginTop: theme.spacing(8),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n form: {\r\n width: '100%', // Fix IE 11 issue.\r\n marginTop: theme.spacing(1),\r\n },\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n },\r\n}));\r\n\r\nconst UpdateUserInfoPanel = props => {\r\n const classes = useStyles();\r\n const [ firstnameFocused, setFirstnameFocused] = useState(false);\r\n\r\n const { isProcessing, firstname, lastname, displayName, email } = props;\r\n\r\n const { onFirstnameChange, onLastnameChange, onDisplayNameChange, \r\n onEmailChange, onSubmitUpdateUserInfoClick } = props;\r\n\r\n let firstnameInput;\r\n\r\n const setFocus = () => {\r\n firstnameInput.focus();\r\n setFirstnameFocused(true);\r\n }\r\n\r\n useEffect(() => {\r\n if (!firstnameFocused) {\r\n setFocus();\r\n } \r\n })\r\n\r\n return (\r\n \r\n \r\n
\r\n
\r\n {firstnameInput = input;} } \r\n value={firstname}\r\n onChange={onFirstnameChange}\r\n />\r\n \r\n \r\n \r\n \r\n Update\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nUpdateUserInfoPanel.propTypes = {\r\n isProcessing: PropTypes.bool.isRequired,\r\n firstname: PropTypes.string.isRequired,\r\n lastname: PropTypes.string.isRequired,\r\n displayName: PropTypes.string.isRequired,\r\n email: PropTypes.string.isRequired,\r\n onFirstnameChange: PropTypes.func.isRequired,\r\n onLastnameChange: PropTypes.func.isRequired,\r\n onDisplayNameChange: PropTypes.func.isRequired,\r\n onEmailChange: PropTypes.func.isRequired,\r\n onSubmitUpdateUserInfoClick: PropTypes.func.isRequired\r\n}\r\n\r\nexport default UpdateUserInfoPanel;","export const compareChangedData = (changedData = {}, fieldName, currentValue, newValue) => {\r\n if (currentValue !== newValue) {\r\n return {...changedData, [fieldName]: newValue}\r\n }\r\n\r\n return changedData\r\n}\r\n\r\nexport const getData = (data = {}, key, value) => {\r\n return {...data, [key]: value}\r\n}\r\n\r\nexport const getSelectedText = () => {\r\n var text = \"\";\r\n if (typeof window.getSelection !== \"undefined\") {\r\n text = window.getSelection().toString();\r\n } else if (typeof document.selection !== \"undefined\" && document.selection.type === \"Text\") {\r\n text = document.selection.createRange().text;\r\n }\r\n return text;\r\n}","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport UpdateUserInfoPanel from './Panel';\r\nimport { updateUserInfoActions } from './actions';\r\nimport { setAlertMessage } from '../../../actions';\r\nimport { ALERT_TYPE_ERROR } from '../../../constants';\r\nimport { compareChangedData, getData } from '../../../utils/dataHelper';\r\nimport { getCurrentDateTimeLt } from '../../../utils/dateHelper';\r\n\r\nconst { submitUpdateUserInfoRequest } = updateUserInfoActions;\r\n\r\nconst UpdateUserInfo = (props) => {\r\n const [firstname, setFirstname] = useState('');\r\n const [lastname, setLastname] = useState('');\r\n const [displayName, setDisplayName] = useState('');\r\n const [email, setEmail] = useState('');\r\n const [pageLoaded, setPageLoaded] = useState(false);\r\n\r\n const { isProcessing, loggedinUser, setAlertMessage, submitUpdateUserInfoRequest } = props;\r\n\r\n const initializeLoadingPage = () => { \r\n if (loggedinUser) {\r\n setFirstname(loggedinUser.firstname);\r\n setLastname(loggedinUser.lastname);\r\n setDisplayName(loggedinUser.displayName);\r\n setEmail(loggedinUser.email);\r\n }\r\n setPageLoaded(true);\r\n }\r\n\r\n useEffect(() => {\r\n if (!pageLoaded) {\r\n initializeLoadingPage(); \r\n }\r\n })\r\n\r\n const isFieldPopulated = (value) => {\r\n return value !== '';\r\n }\r\n \r\n const handleFirstnameChange = event => {\r\n setFirstname(event.target.value);\r\n };\r\n\r\n const handleLastnameChange = event => {\r\n setLastname(event.target.value);\r\n };\r\n\r\n const handleDisplayNameChange = event => {\r\n setDisplayName(event.target.value);\r\n };\r\n\r\n const handleEmailChange = event => {\r\n setEmail(event.target.value);\r\n };\r\n\r\n const getChangedData = () => {\r\n let changedData = {};\r\n const currentDateTimeLt = getCurrentDateTimeLt();\r\n\r\n changedData = compareChangedData(changedData, 'Firstname', loggedinUser.firstname, firstname);\r\n changedData = compareChangedData(changedData, 'Lastname', loggedinUser.lastname, lastname);\r\n changedData = compareChangedData(changedData, 'DisplayName', loggedinUser.displayName, displayName);\r\n changedData = compareChangedData(changedData, 'Email', loggedinUser.email, email);\r\n changedData = getData(changedData, 'ModifiedDateTimeLt', currentDateTimeLt);\r\n\r\n return changedData;\r\n }\r\n \r\n const handleSubmitUpdateUserInfoClick = (event) => {\r\n event.preventDefault();\r\n\r\n if (isValidRequiredFields()) {\r\n submitUpdateUserInfoRequest(loggedinUser.userId, JSON.stringify(getChangedData()));\r\n }\r\n }\r\n\r\n const isValidFirstname = () => {\r\n if (!isFieldPopulated(firstname)) {\r\n setAlertMessage(ALERT_TYPE_ERROR, 'First name cannot be empty');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n const isValidDisplayname = () => {\r\n if (!isFieldPopulated(displayName)) {\r\n setAlertMessage(ALERT_TYPE_ERROR, 'Display name cannot be empty');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n const isValidEmail = () => { \r\n var mailFormat = /^\\w+([.-]?\\w+)*@\\w+([.-]?\\w+)*(\\.\\w{2,3})+$/;\r\n if (!email.match(mailFormat)) {\r\n setAlertMessage(ALERT_TYPE_ERROR, 'Invalid Email');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n const isValidRequiredFields = () => { \r\n return isValidFirstname()\r\n && isValidDisplayname()\r\n && isValidEmail();\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nUpdateUserInfo.propTypes = {\r\n isProcessing: PropTypes.bool.isRequired,\r\n loggedinUser: PropTypes.object.isRequired,\r\n setAlertMessage: PropTypes.func.isRequired,\r\n submitUpdateUserInfoRequest: PropTypes.func.isRequired\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n const {\r\n appStatus,\r\n loggedinUser, \r\n } = state;\r\n\r\n const isProcessing = appStatus.isProcessing;\r\n return { \r\n isProcessing,\r\n loggedinUser\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n setAlertMessage,\r\n submitUpdateUserInfoRequest \r\n})(UpdateUserInfo));","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Container from '@material-ui/core/Container';\r\nimport Button from '@material-ui/core/Button';\r\nimport TextField from '@material-ui/core/TextField';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n '@global': {\r\n body: {\r\n backgroundColor: theme.palette.common.white,\r\n },\r\n },\r\n paper: {\r\n marginTop: theme.spacing(8),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n form: {\r\n width: '100%', // Fix IE 11 issue.\r\n marginTop: theme.spacing(1),\r\n },\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n },\r\n}));\r\n\r\nconst ChangePasswordPanel = props => {\r\n const classes = useStyles();\r\n const [ passwordFocused, setPasswordFocused] = useState(false);\r\n\r\n const { isProcessing, password, confirmPassword, isValidPassword } = props;\r\n\r\n const { onPasswordChange, onConfirmPasswordChange, onSubmitChangePasswordClick } = props;\r\n\r\n let passwordInput;\r\n\r\n const setFocus = () => {\r\n passwordInput.focus();\r\n setPasswordFocused(true);\r\n }\r\n\r\n useEffect(() => {\r\n if (!passwordFocused) {\r\n setFocus();\r\n } \r\n })\r\n\r\n return (\r\n \r\n \r\n
\r\n
\r\n {passwordInput = input;} } \r\n value={password}\r\n error={!isValidPassword()}\r\n onChange={onPasswordChange} \r\n />\r\n \r\n \r\n Change Password\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nChangePasswordPanel.propTypes = {\r\n isProcessing: PropTypes.bool.isRequired,\r\n password: PropTypes.string.isRequired,\r\n confirmPassword: PropTypes.string.isRequired,\r\n isValidPassword: PropTypes.func.isRequired,\r\n onPasswordChange: PropTypes.func.isRequired,\r\n onConfirmPasswordChange: PropTypes.func.isRequired,\r\n onSubmitChangePasswordClick: PropTypes.func.isRequired\r\n}\r\n\r\nexport default ChangePasswordPanel;","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport queryString from 'query-string';\r\nimport ChangePasswordPanel from './Panel';\r\nimport { changePasswordActions } from './actions';\r\nimport { setAlertMessage } from '../../../actions';\r\nimport { ALERT_TYPE_ERROR } from '../../../constants';\r\nimport { getCurrentDateTimeLt } from '../../../utils/dateHelper';\r\nimport { setToken } from '../../../services/api';\r\n\r\nconst { submitChangePasswordRequest } = changePasswordActions;\r\n\r\nconst ChangePassword = props => { \r\n const [password, setPassword] = useState('');\r\n const [confirmPassword, setConfirmPassword] = useState('');\r\n const [passwordErrorMessage, setPasswordErrorMessage] = useState('');\r\n const [pageLoaded, setPageLoaded] = useState(false);\r\n\r\n const { isProcessing, setAlertMessage, submitChangePasswordRequest } = props;\r\n\r\n const initializeLoadingPage = () => { \r\n const queryParams = queryString.parse(props.location.search);\r\n\r\n if (queryParams && queryParams.key) {\r\n setToken(queryParams.key);\r\n }\r\n setPageLoaded(true);\r\n }\r\n\r\n useEffect(() => {\r\n if (!pageLoaded) {\r\n initializeLoadingPage(); \r\n }\r\n })\r\n\r\n const isMatchingPasswords = (value1, value2) => {\r\n if (value1 !== value2) {\r\n setPasswordErrorMessage('Password mismatch');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n const isFilledPassword = (value1) => {\r\n if (value1 === '') {\r\n setPasswordErrorMessage('Password cannot be empty');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n const validatePassword = (value1, value2) => {\r\n if (isFilledPassword(value1) && isMatchingPasswords(value1, value2)) {\r\n setPasswordErrorMessage('');\r\n }\r\n }\r\n\r\n const handlePasswordChange = event => {\r\n setPassword(event.target.value); \r\n validatePassword(event.target.value, confirmPassword);\r\n }\r\n\r\n const handleConfirmPasswordChange = event => {\r\n setConfirmPassword(event.target.value);\r\n validatePassword(password, event.target.value);\r\n }\r\n\r\n const handleSubmitChangePasswordClick = (event) => {\r\n event.preventDefault();\r\n if (isValidRequiredFields()) {\r\n let encodedCredentials = window.btoa('_:' + password);\r\n const dateTimeLt = getCurrentDateTimeLt();\r\n submitChangePasswordRequest(JSON.stringify({\r\n EncodedCredentials: encodedCredentials,\r\n currentDateTimeLt: dateTimeLt\r\n }));\r\n }\r\n }\r\n\r\n const isValidPassword = () => {\r\n return (passwordErrorMessage === '');\r\n }\r\n\r\n const isValidRequiredFields = () => { \r\n if (!isFilledPassword(password) || !isValidPassword()) {\r\n var errorMsg = passwordErrorMessage !== '' ? passwordErrorMessage : 'Password cannot be empty'\r\n setAlertMessage(ALERT_TYPE_ERROR, errorMsg);\r\n return false;\r\n } \r\n\r\n return true;\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nChangePassword.propTypes = {\r\n isProcessing: PropTypes.bool.isRequired,\r\n setAlertMessage: PropTypes.func.isRequired,\r\n submitChangePasswordRequest: PropTypes.func.isRequired\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n const {\r\n //loggedinUser,\r\n appStatus \r\n } = state;\r\n\r\n const isProcessing = appStatus.isProcessing;\r\n return { \r\n isProcessing\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n setAlertMessage,\r\n submitChangePasswordRequest \r\n})(ChangePassword));","import React, { useState, useEffect } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport Avatar from '@material-ui/core/Avatar';\r\nimport Button from '@material-ui/core/Button';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Box from '@material-ui/core/Box';\r\nimport LockOutlinedIcon from '@material-ui/icons/LockOutlined';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Container from '@material-ui/core/Container';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n '@global': {\r\n body: {\r\n backgroundColor: theme.palette.common.white,\r\n },\r\n },\r\n paper: {\r\n marginTop: theme.spacing(8),\r\n display: 'flex', \r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n avatar: {\r\n margin: theme.spacing(1),\r\n backgroundColor: theme.palette.secondary.main,\r\n },\r\n form: {\r\n width: '100%', // Fix IE 11 issue.\r\n marginTop: theme.spacing(1),\r\n },\r\n submit: {\r\n margin: theme.spacing(3, 0, 2),\r\n }\r\n}));\r\n\r\nconst ForgotPasswordPanel = props => {\r\n const classes = useStyles();\r\n const [ usernameFocused, setUsernameFocused] = useState(false);\r\n const { isProcessing, username } = props;\r\n const { onUsernameChange, onSubmitClick } = props;\r\n\r\n let usernameInput;\r\n\r\n const setFocus = () => {\r\n usernameInput.focus();\r\n setUsernameFocused(true);\r\n }\r\n\r\n useEffect(() => {\r\n if (!usernameFocused) {\r\n setFocus();\r\n } \r\n })\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n Password Recovery\r\n \r\n
\r\n {usernameInput = input;} } \r\n value={username}\r\n onChange={onUsernameChange}\r\n /> \r\n \r\n Submit\r\n \r\n \r\n
\r\n \r\n \r\n Please provide your username.
\r\n An email with a link to recover your password will be sent to the email address registered in your account. If you can't find the email, please check your junk email folder.\r\n
\r\n
\r\n
\r\n );\r\n}\r\n\r\nForgotPasswordPanel.propTypes = {\r\n username: PropTypes.string.isRequired,\r\n onUsernameChange: PropTypes.func.isRequired,\r\n onSubmitClick: PropTypes.func.isRequired\r\n}\r\n\r\nexport default ForgotPasswordPanel;","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport ForgotPasswordPanel from './Panel';\r\nimport { forgotPasswordActions } from './actions';\r\nimport { setAlertMessage } from '../../../actions';\r\nimport { ALERT_TYPE_ERROR } from '../../../constants';\r\nimport { getCurrentDateTimeLt } from '../../../utils/dateHelper';\r\n\r\nconst { submitForgotPasswordRequest } = forgotPasswordActions;\r\n\r\nconst ForgotPassword = (props) => {\r\n const [username, setUsername] = useState('');\r\n\r\n const { isProcessing, setAlertMessage, submitForgotPasswordRequest } = props;\r\n\r\n const isFieldPopulated = (value) => {\r\n return value !== '';\r\n }\r\n\r\n const isValidUsername = () => {\r\n if (!isFieldPopulated(username)) {\r\n setAlertMessage(ALERT_TYPE_ERROR, 'Username cannot be empty');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n const handleUsernameChange = event => {\r\n setUsername(event.target.value);\r\n };\r\n\r\n const handleSubmitForgotPasswordClick = event => {\r\n event.preventDefault();\r\n if (isValidUsername()) {\r\n let encodedCredentials = window.btoa(username + ':_');\r\n const currentDateTimeLt = getCurrentDateTimeLt();\r\n submitForgotPasswordRequest(JSON.stringify({ EncodedCredentials: encodedCredentials, currentDateTimeLt: currentDateTimeLt }));\r\n }\r\n }\r\n\r\n return (\r\n \r\n );\r\n}\r\n\r\nForgotPassword.propTypes = {\r\n isProcessing: PropTypes.bool.isRequired,\r\n submitForgotPasswordRequest: PropTypes.func.isRequired\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n const {\r\n appStatus \r\n } = state;\r\n\r\n const isProcessing = appStatus.isProcessing;\r\n return { \r\n isProcessing\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n setAlertMessage,\r\n submitForgotPasswordRequest \r\n})(ForgotPassword));","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { green } from '@material-ui/core/colors';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Box from '@material-ui/core/Box';\r\nimport ChristTheSheperd from '../Home/components/ChristTheSheperd.jpg';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n padding: '30px 20px',\r\n '& span': {\r\n //color: 'blue',\r\n },\r\n // paddingTop: theme.spacing(8),\r\n display: 'flex',\r\n flexDirection: 'column',\r\n alignItems: 'center',\r\n },\r\n wrapper: { \r\n position: 'relative',\r\n },\r\n buttonProgress: {\r\n color: green[500],\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n content: {\r\n marginTop: 20,\r\n },\r\n verseReference: {\r\n //color: 'blue', \r\n }\r\n});\r\n\r\nclass VerseOfTheDayPanel extends Component {\r\n static propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n isLoadingSuccessful: PropTypes.bool.isRequired,\r\n bibleVersionId: PropTypes.number.isRequired,\r\n bookName: PropTypes.string.isRequired,\r\n chapterNumber: PropTypes.string.isRequired,\r\n verseNumber: PropTypes.string.isRequired,\r\n verseText: PropTypes.string.isRequired,\r\n date: PropTypes.string.isRequired\r\n }\r\n\r\n render() {\r\n const { classes } = this.props;\r\n const { isLoading, verseText, bookName, chapterNumber, verseNumber } = this.props \r\n\r\n return ( \r\n
\r\n \r\n {ChristTheSheperd}\r\n \r\n {verseText}\r\n {verseText ?\r\n \r\n {bookName} {chapterNumber} : {verseNumber}\r\n \r\n : ''\r\n }\r\n \r\n \r\n {isLoading && }\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withStyles(styles)(VerseOfTheDayPanel);","import { createSelector } from 'reselect';\r\nimport _ from 'lodash';\r\n\r\nconst getVerseOfTheDayList = state => _.values(state.entities.verseOfTheDay);\r\n\r\nexport const getVerseOfTheDayListState = createSelector(\r\n [getVerseOfTheDayList],\r\n (verseOfTheDayList) => {\r\n return verseOfTheDayList;\r\n }\r\n)","import { createSelector } from 'reselect';\r\nimport { getVerseOfTheDayListState } from './getVerseOfTheDayListSelector';\r\nimport { getCurrentDate } from '../../../utils/dateHelper';\r\n\r\nconst getSelectedVerseOfTheDayState = state => state.verseOfTheDay;\r\n\r\nexport const getSelectedVerseOfTheDay = createSelector(\r\n [getVerseOfTheDayListState, getSelectedVerseOfTheDayState],\r\n (verseOfTheDayList, selectedVerseOfTheDay) => {\r\n var verseOfTheDay;\r\n let currentDate = getCurrentDate();\r\n\r\n if (selectedVerseOfTheDay && selectedVerseOfTheDay.date === currentDate) {\r\n const verseVersionId = selectedVerseOfTheDay.verseVersionId;\r\n verseOfTheDay = verseOfTheDayList.find(verse => `${verse.versionId}-${verse.verseId}` === verseVersionId);\r\n }\r\n \r\n return verseOfTheDay;\r\n }\r\n)","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { Swipeable } from 'react-swipeable';\r\nimport VerseOfTheDayPanel from './Panel';\r\nimport { verseOfTheDayActions } from './actions';\r\nimport { getSelectedVerseOfTheDay } from './selectors/getVerseOfTheDaySelector';\r\n//import { requestNextChapter, requestPrevChapter } from '../Chapters/actions';\r\n\r\nconst { getVerseOfTheDay } = verseOfTheDayActions;\r\n\r\nclass VerseOfTheDay extends Component {\r\n static propTpes = {\r\n isLoading: PropTypes.bool.isRequired,\r\n isLoadingSuccessful: PropTypes.bool.isRequired,\r\n bibleVersionId: PropTypes.number.isRequired,\r\n bookName: PropTypes.string.isRequired,\r\n chapterNumber: PropTypes.string.isRequired,\r\n verseNumber: PropTypes.string.isRequired,\r\n verseText: PropTypes.string.isRequired,\r\n date: PropTypes.string.isRequired,\r\n //requestNextChapter: PropTypes.func.isRequired,\r\n //requestPrevChapter: PropTypes.func.isRequired,\r\n getVerseOfTheDay: PropTypes.func.isRequired\r\n }\r\n\r\n componentDidMount() {\r\n const { bibleVersionId, date, getVerseOfTheDay } = this.props;\r\n getVerseOfTheDay(bibleVersionId);\r\n }\r\n \r\n handleSwipingLeft = event => {\r\n /* const { bibleVersionId, requestPrevChapter, requestNextChapter } = this.props;\r\n\r\n if (bibleVersionId === 1) {\r\n requestPrevChapter();\r\n } else {\r\n requestNextChapter();\r\n } */\r\n };\r\n\r\n handleSwipingRight = event => {\r\n /* const { bibleVersionId, requestPrevChapter, requestNextChapter } = this.props;\r\n \r\n if (bibleVersionId === 1) {\r\n requestNextChapter();\r\n } else {\r\n requestPrevChapter();\r\n } */\r\n };\r\n\r\n render() {\r\n const { isLoading, isLoadingSuccessful, bibleVersionId, verseText, bookName, chapterNumber, verseNumber, date } = this.props;\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n ); \r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const {\r\n bibleVersion,\r\n verseOfTheDay\r\n } = state\r\n \r\n const bibleVersionId = bibleVersion.id;\r\n const isLoading = verseOfTheDay.isLoading;\r\n const isLoadingSuccessful = verseOfTheDay.isLoadingSuccessful;\r\n const selectedVerseOfTheDay = getSelectedVerseOfTheDay(state); \r\n const verseText = selectedVerseOfTheDay ? selectedVerseOfTheDay.verseText : '';\r\n const verseNumber = selectedVerseOfTheDay ? selectedVerseOfTheDay.verseNumber : '';\r\n const bookName = selectedVerseOfTheDay ? selectedVerseOfTheDay.bookName : '';\r\n const chapterNumber = selectedVerseOfTheDay ? selectedVerseOfTheDay.chapterNumber : '';\r\n const date = verseOfTheDay.date; \r\n \r\n return {\r\n bibleVersionId,\r\n isLoading,\r\n isLoadingSuccessful,\r\n verseText,\r\n bookName,\r\n chapterNumber,\r\n verseNumber,\r\n date\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n getVerseOfTheDay\r\n})(VerseOfTheDay));","import React from 'react';\r\n\r\n\r\nconst FavoriteWords = ({ text = '', highlight = '', search = '', favorite = '', verseOfTheDay = '' }) => {\r\n return (\r\n \r\n {text}\r\n )\r\n}\r\n\r\nexport default FavoriteWords;","import React from 'react';\r\n\r\n\r\nconst SearchWords = ({ text = '', highlight = '', search = '', favorite = '', verseOfTheDay = '' }) => {\r\n return (\r\n \r\n {text}\r\n \r\n )\r\n}\r\n\r\nexport default SearchWords;","import React from 'react';\r\nimport _ from 'lodash';\r\nimport FavoriteWords from './FavoriteWords';\r\nimport HighlightedWords from './HighlightedWords';\r\nimport SearchWords from './SearchWords';\r\n\r\nconst VerseOfTheDayWords = ({ text = '', highlight = '', search = '', favorite = '', verseOfTheDay = '' }) => {\r\n const styledTagsList = [];\r\n \r\n const shouldProcessHighlightedText = highlight.trim() ? true : false;\r\n const shouldProcessFavoriteText = favorite.trim() ? true : false; \r\n const shouldProcessSearchText = search.trim() ? true : false;\r\n\r\n const ProcessStylingVerse = (tag, textToStyle) => { \r\n if (text.indexOf(textToStyle) >= 0) {\r\n const styleRegex = new RegExp(`(${_.escapeRegExp(textToStyle)})`, 'gi');\r\n const styleParts = text.split(styleRegex);\r\n\r\n styleParts.filter(part => part).map((part, i) => {\r\n var elementStart = text.indexOf(part);\r\n styleRegex.test(part) ? styledTagsList.push({element: tag, position: elementStart, count: i, text: part}) : styledTagsList.push({element: '', position: elementStart, count: i, text: part})\r\n });\r\n } \r\n }\r\n\r\n if (shouldProcessHighlightedText) {\r\n ProcessStylingVerse('', highlight); \r\n }\r\n\r\n if (shouldProcessFavoriteText) {\r\n ProcessStylingVerse('', favorite); \r\n } \r\n\r\n if (shouldProcessSearchText) {\r\n ProcessStylingVerse('', search); \r\n }\r\n\r\n return (\r\n \r\n {\r\n styledTagsList.length === 0 ? text\r\n : styledTagsList.map((tag, i) => {\r\n switch (tag.element) {\r\n case '' : return \r\n case '' : return \r\n case '' : return \r\n default: return {tag.text}\r\n }\r\n })\r\n }\r\n )\r\n}\r\n\r\nexport default VerseOfTheDayWords;","import React from 'react';\r\nimport _ from 'lodash';\r\nimport FavoriteWords from './FavoriteWords';\r\nimport VerseOfTheDayWords from './VerseOfTheDayWords';\r\nimport SearchWords from './SearchWords';\r\n\r\nconst HighlightedWords = ({ text = '', search = '', favorite = '', verseOfTheDay = '' }) => {\r\n const styledTagsList = [];\r\n \r\n const shouldProcessFavoriteText = favorite.trim() ? true : false;\r\n const shouldProcessVerseOfTheDayText = verseOfTheDay.trim() ? true : false;\r\n const shouldProcessSearchText = search.trim() ? true : false;\r\n\r\n const ProcessStylingVerse = (tag, textToStyle) => { \r\n if (text.indexOf(textToStyle) >= 0) {\r\n const styleRegex = new RegExp(`(${_.escapeRegExp(textToStyle)})`, 'gi');\r\n const styleParts = text.split(styleRegex);\r\n\r\n styleParts.filter(part => part).map((part, i) => {\r\n var elementStart = text.indexOf(part);\r\n styleRegex.test(part) ? styledTagsList.push({element: tag, position: elementStart, count: i, text: part}) : styledTagsList.push({element: '', position: elementStart, count: i, text: part})\r\n });\r\n } \r\n }\r\n\r\n if (shouldProcessFavoriteText) {\r\n ProcessStylingVerse('', favorite); \r\n }\r\n\r\n if (shouldProcessVerseOfTheDayText) {\r\n ProcessStylingVerse('', verseOfTheDay); \r\n }\r\n\r\n if (shouldProcessSearchText) {\r\n ProcessStylingVerse('', search); \r\n }\r\n\r\n return (\r\n \r\n {\r\n styledTagsList.length === 0 ? text\r\n : styledTagsList.map((tag, i) => {\r\n switch (tag.element) {\r\n case '' : return \r\n case '' : return \r\n case '' : return \r\n default: return {tag.text}\r\n }\r\n })\r\n }\r\n )\r\n}\r\n\r\nexport default HighlightedWords;","import React from 'react';\r\nimport HighlightedWords from './HighlightedWords';\r\nimport FavoriteWords from './FavoriteWords';\r\nimport VerseOfTheDayWords from './VerseOfTheDayWords';\r\nimport SearchWords from './SearchWords';\r\n\r\nconst StyledVerse = ({ text = '', highlight = '', search = '', favorite = '', verseOfTheDay = '' }) => {\r\n const styledTagsList = [];\r\n const tagsList = [];\r\n const shouldProcessHighlightedText = highlight.trim() ? true : false;\r\n const shouldProcessFavoriteText = favorite.trim() ? true : false;\r\n const shouldProcessVerseOfTheDayText = verseOfTheDay.trim() ? true : false;\r\n const shouldProcessSearchText = search.trim() ? true : false;\r\n\r\n const AddStyledElementToTagsList = (tag, textToStyle) => {\r\n var elementStart = text.indexOf(textToStyle);\r\n var elementEnd = elementStart + textToStyle.length;\r\n\r\n if (elementStart >= 0)\r\n tagsList.push({element: tag, start: elementStart, end: elementEnd, text: textToStyle});\r\n }\r\n\r\n const PopulateTagsListWithStyledElements = () => {\r\n if (shouldProcessHighlightedText) \r\n AddStyledElementToTagsList('', highlight);\r\n \r\n if (shouldProcessVerseOfTheDayText) \r\n AddStyledElementToTagsList('', verseOfTheDay);\r\n }\r\n\r\n const SortTagsList = () => {\r\n tagsList.sort((a, b) => {\r\n let comparison = 0;\r\n if (a.start > b.start) \r\n comparison = 1\r\n else if (a.start < b.start)\r\n comparison = -1;\r\n \r\n return comparison;\r\n })\r\n }\r\n\r\n const PopulateStyledTagsList = () => {\r\n var lastStyledTagEnd = 0;\r\n tagsList.forEach((tag, i) => {\r\n if (tag.start > lastStyledTagEnd) {\r\n styledTagsList.push({ element: '', start: lastStyledTagEnd, end: tag.start, text: text.substring(lastStyledTagEnd, tag.start) })\r\n }\r\n\r\n if (tag.end > lastStyledTagEnd) {\r\n var highlightedText = '';\r\n var favoriteText = '';\r\n var verseOfTheDayText = '';\r\n var searchedText = '';\r\n var j = i + 1;\r\n \r\n while ((j < tagsList.length) && (tagsList[j].start < tag.end)) {\r\n var internalElementEnd = tagsList[j].end < tag.end ? tagsList[j].end : tag.end\r\n switch (tagsList[j].element) {\r\n case '': { highlightedText = text.substring(tagsList[j].start, internalElementEnd) }\r\n case '': { }\r\n case '': { verseOfTheDayText = text.substring(tagsList[j].start, internalElementEnd) }\r\n case '': {}\r\n }\r\n\r\n j++;\r\n }\r\n\r\n var styledTagStart = tag.start < lastStyledTagEnd ? lastStyledTagEnd : tag.start; \r\n styledTagsList.push({ \r\n element: tag.element, \r\n start: styledTagStart, \r\n end: tag.end, \r\n text: text.substring(styledTagStart, tag.end),\r\n highlight: highlightedText, \r\n verseOfTheDay: verseOfTheDayText \r\n });\r\n\r\n lastStyledTagEnd = tag.end;\r\n } \r\n })\r\n\r\n if (lastStyledTagEnd > 0 && lastStyledTagEnd < text.length)\r\n styledTagsList.push({ \r\n element: '', \r\n start: lastStyledTagEnd, \r\n end: text.length, \r\n text: text.substring(lastStyledTagEnd, text.length) });\r\n }\r\n\r\n PopulateTagsListWithStyledElements(); \r\n SortTagsList(); \r\n PopulateStyledTagsList(); \r\n \r\n //console.log('tagsList:');\r\n //console.log(tagsList);\r\n \r\n //console.log('styledTagsList:');\r\n //console.log(styledTagsList);\r\n\r\n return (\r\n \r\n {\r\n styledTagsList.length === 0 ? text\r\n : styledTagsList.map((tag, i) => {\r\n switch (tag.element) {\r\n case '' : return \r\n case '' : return \r\n case '' : return \r\n case '' : return \r\n default: return {tag.text}\r\n }\r\n })\r\n }\r\n \r\n )\r\n}\r\n\r\nexport default StyledVerse;","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Box from '@material-ui/core/Box';\r\nimport StyledVerse from './StyledVerse';\r\n\r\nconst VerseBox = props => {\r\n const { verse, shouldStyleVerseOfTheDay, onHandleMenuOpenClick, onHandleMenuPointerDown } = props;\r\n \r\n let highlightedText = '';\r\n let verseOfTheDayText = '';\r\n\r\n if (verse.isHighlighted) {\r\n if (verse.highlightedText) {\r\n highlightedText = verse.highlightedText;\r\n } else {\r\n highlightedText = verse.verseText;\r\n }\r\n }\r\n\r\n if (shouldStyleVerseOfTheDay && verse.isVerseOfTheDay) {\r\n if (verse.verseOfTheDayText) {\r\n verseOfTheDayText = verse.verseOfTheDayText;\r\n } else {\r\n verseOfTheDayText = verse.verseText;\r\n }\r\n }\r\n\r\n return (\r\n \r\n {verse.verseNumber} \r\n \r\n );\r\n}\r\n\r\nVerseBox.propTypes = {\r\n verse: PropTypes.object.isRequired,\r\n shouldStyleVerseOfTheDay: PropTypes.bool.isRequired,\r\n onHandleMenuOpenClick: PropTypes.func.isRequired,\r\n onHandleMenuPointerDown: PropTypes.func.isRequired\r\n}\r\n\r\nexport default VerseBox;","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport Menu from '@material-ui/core/Menu';\r\nimport MenuItem from '@material-ui/core/MenuItem';\r\nimport SvgIcon from '@material-ui/core/SvgIcon';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport * as entitiesNames from '../../../common/entities/constants';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n '& svg': {\r\n margin: theme.spacing(0, 1),\r\n }, \r\n },\r\n }));\r\n\r\nfunction AddToVerseOfTheDayListIcon(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nfunction AddToFavoriteListIcon(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nfunction HighlightIcon(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst VerseMenu = props => {\r\n const classes = useStyles();\r\n\r\n const { menuAnchorEl, shouldDisplayAddToVerseOfTheDayListIcon, userId, chapterId, verseId, versionId, selectedText, onAddEntity, onHandleMenuClose } = props;\r\n\r\n const menuOpen = Boolean(menuAnchorEl);\r\n const menuId = menuOpen ? 'verse-menu' : undefined;\r\n\r\n const menuCaption = selectedText !== '' ? `\"${selectedText}\"` : 'full verse';\r\n\r\n const handleAddToVerseOfTheDayList = () => { \r\n let newFields = {chapterId: chapterId, verseId: verseId, versionId: versionId};\r\n \r\n if (selectedText !== \"\") {\r\n newFields = {...newFields, selectedText: selectedText}\r\n }\r\n \r\n onAddEntity(entitiesNames.VERSEOFTHEDAY, newFields);\r\n onHandleMenuClose();\r\n }\r\n\r\n const handleAddToFavoriteVerses = () => {\r\n let newFields = {VerseId: verseId};\r\n if (selectedText !== \"\") {\r\n switch (versionId) {\r\n case 1:\r\n newFields = {...newFields, VersionId: versionId, UncVerseText: selectedText};\r\n break;\r\n default:\r\n newFields = {...newFields, VersionId: versionId, VerseText: selectedText}\r\n } \r\n }\r\n onAddEntity(entitiesNames.FAVORITEVERSES, newFields);\r\n onHandleMenuClose();\r\n }\r\n\r\n const handleAddToHighlightedVerses = () => {\r\n let newFields = {chapterId: chapterId, verseId: verseId, versionId: versionId};\r\n\r\n if (selectedText !== \"\") {\r\n newFields = {...newFields, highlightedText: selectedText}\r\n }\r\n\r\n if (userId) {\r\n newFields = {...newFields, userId: userId}\r\n }\r\n\r\n onAddEntity(entitiesNames.HIGHLIGHTEDVERSES, newFields);\r\n onHandleMenuClose();\r\n }\r\n\r\n return (\r\n \r\n {shouldDisplayAddToVerseOfTheDayListIcon ? Add {menuCaption} to Verse of the Day list : ' '} \r\n {/* Add {menuCaption} to Favorites */} \r\n Highlight {menuCaption} \r\n \r\n );\r\n}\r\n\r\nVerseMenu.propTypes = {\r\n shouldDisplayAddToVerseOfTheDayListIcon: PropTypes.bool.isRequired,\r\n chapterId: PropTypes.number.isRequired,\r\n verseId: PropTypes.number.isRequired,\r\n versionId: PropTypes.number.isRequired,\r\n onAddEntity: PropTypes.func.isRequired,\r\n onHandleMenuClose: PropTypes.func.isRequired, \r\n}\r\n\r\nexport default VerseMenu;","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport VerseBox from './VerseBox';\r\nimport VerseMenu from './VerseMenu';\r\nimport { addEntity } from '../../../common/entities/actions/addEntityActions';\r\nimport { getSelectedText } from '../../../utils/dataHelper';\r\n\r\nconst Verse = props => {\r\n const [anchorEl, setAnchorEl] = React.useState(null);\r\n const [selectedText, setSelectedText] = React.useState(\"\");\r\n\r\n const { verse, shouldDisplayAddToVerseOfTheDayListIcon, shouldStyleVerseOfTheDay, userId, addEntity } = props;\r\n\r\n const handleMenuOpenClick = event => { \r\n setAnchorEl(event.currentTarget); \r\n };\r\n\r\n const handleMenuClose = () => {\r\n setAnchorEl(null);\r\n };\r\n\r\n const handleMenuPointerDown = event => {\r\n setSelectedText(getSelectedText());\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nVerse.propTypes = {\r\n verse: PropTypes.object.isRequired,\r\n shouldDisplayAddToVerseOfTheDayListIcon: PropTypes.bool.isRequired,\r\n shouldStyleVerseOfTheDay: PropTypes.bool.isRequired,\r\n addEntity: PropTypes.func.isRequired,\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n const {\r\n loggedinUser,\r\n //appStatus \r\n } = state;\r\n\r\n //const isProcessing = appStatus.isProcessing;\r\n const userId = loggedinUser ? loggedinUser.userId : null;\r\n return { \r\n userId\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n addEntity,\r\n //submitChangePasswordRequest \r\n})(Verse));","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\nimport { green } from '@material-ui/core/colors';\r\nimport Paper from '@material-ui/core/Paper';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Verse from './Verse';\r\nimport MessageBanner from '../../../common/components/MessageBanner';\r\n\r\nconst useStyles = makeStyles(theme => ({\r\n root: {\r\n padding: '30px 20px',\r\n },\r\n wrapper: { \r\n position: 'relative',\r\n },\r\n buttonProgress: {\r\n color: green[500],\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n marginTop: -12,\r\n marginLeft: -12,\r\n },\r\n}));\r\n\r\nconst VersesPanel = props => {\r\n const classes = useStyles();\r\n\r\n const { shouldDisplayDownloadBibleOptions, shouldDisplayAddToVerseOfTheDayListIcon, shouldStyleVerseOfTheDay,\r\n isLoading, bibleVersionId, versesList, selectedBibleBookName, onHandleDownloadBookClick } = props\r\n const downloadBookButtonCaption = `Download ${selectedBibleBookName}`;\r\n //const downloadBibleButtonCaption = `Download Bible`;\r\n\r\n return (\r\n
\r\n {(shouldDisplayDownloadBibleOptions\r\n ? \r\n : \r\n )}\r\n \r\n \r\n {versesList.map(verse => (\r\n \r\n ))}\r\n \r\n \r\n {isLoading && }\r\n
\r\n );\r\n}\r\n\r\nVersesPanel.propTypes = {\r\n shouldDisplayDownloadBibleOptions: PropTypes.bool.isRequired,\r\n shouldDisplayAddToVerseOfTheDayListIcon: PropTypes.bool.isRequired,\r\n shouldStyleVerseOfTheDay: PropTypes.bool.isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n isLoadingSuccessful: PropTypes.bool.isRequired,\r\n versesList: PropTypes.array.isRequired,\r\n bibleVersionId: PropTypes.number.isRequired,\r\n selectedBibleBookName: PropTypes.string.isRequired,\r\n onHandleDownloadBookClick: PropTypes.func.isRequired,\r\n onHandleDownloadBibleClick: PropTypes.func.isRequired\r\n}\r\n\r\nexport default VersesPanel;","import { createSelector } from 'reselect';\r\nimport _ from 'lodash';\r\n\r\nconst getVerses = state => _.values(state.entities.verses);\r\nconst getBibleVersion = state => state.bibleVersion;\r\nconst getSelectedChapter = state => state.bookChapter;\r\n\r\nexport const getVersesByChapterId = createSelector(\r\n [getVerses, getSelectedChapter],\r\n (verses, selectedChapter) => {\r\n const filteredVerses = verses.filter(verse => verse.chapterId === selectedChapter.id);\r\n return filteredVerses;\r\n }\r\n)\r\n\r\nexport const getVersesByChapterIdAndBibleVersion = createSelector(\r\n [getVersesByChapterId, getBibleVersion],\r\n (versesByChapterId, bibleVersion) => {\r\n const filteredVerses = versesByChapterId.filter(verse => verse.versionId === bibleVersion.id);\r\n return filteredVerses;\r\n }\r\n)","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\n//import Swipe from 'react-easy-swipe';\r\nimport { Swipeable } from 'react-swipeable';\r\nimport VersesPanel from './Panel';\r\nimport { getVersesByChapterIdAndBibleVersion } from './selector';\r\nimport { requestNextChapter, requestPrevChapter } from '../Chapters/actions';\r\nimport { chapterVersesActions, bookVersesFromApiActions, bibleVersesFromApiActions } from './actions';\r\nimport { getBookByBibleVersionAndSelectedBookId } from '../Books/selectors/getBookByBibleVersionAndBookIdSelector';\r\n\r\nconst { request: getChapterVerses } = chapterVersesActions.getChapterVerses;\r\nconst { loadBookVersesFromApi } = bookVersesFromApiActions;\r\nconst { loadBibleVersesFromApi } = bibleVersesFromApiActions;\r\n\r\nclass Verses extends Component {\r\n static propTpes = {\r\n versesList: PropTypes.array.isRequired,\r\n shouldDisplayAddToVerseOfTheDayListIcon: PropTypes.bool.isRequired,\r\n shouldStyleVerseOfTheDay: PropTypes.bool.isRequired,\r\n isLoading: PropTypes.bool.isRequired,\r\n isLoadingSuccessful: PropTypes.bool.isRequired,\r\n bibleVersionId: PropTypes.number.isRequired,\r\n bookId: PropTypes.number.isRequired,\r\n selectedBibleBook: PropTypes.object.isRequired,\r\n chapterId: PropTypes.number.isRequired,\r\n requestNextChapter: PropTypes.func.isRequired,\r\n requestPrevChapter: PropTypes.func.isRequired,\r\n getChapterVerses: PropTypes.func.isRequired,\r\n loadBookVersesFromApi: PropTypes.func.isRequired,\r\n loadBibleVersesFromApi: PropTypes.func.isRequired\r\n }\r\n\r\n componentDidMount() {\r\n const { isLoading, bibleVersionId, bookId, chapterId } = this.props;\r\n if ((!isLoading) && (bookId !== 0) && (chapterId !== 0)) { \r\n this.props.getChapterVerses(bibleVersionId, bookId, chapterId);\r\n } \r\n }\r\n \r\n handleSwipingLeft = event => {\r\n const { bibleVersionId, requestPrevChapter, requestNextChapter } = this.props;\r\n\r\n if (bibleVersionId === 1) {\r\n requestPrevChapter();\r\n } else {\r\n requestNextChapter();\r\n } \r\n };\r\n\r\n handleSwipingRight = event => {\r\n const { bibleVersionId, requestPrevChapter, requestNextChapter } = this.props;\r\n \r\n if (bibleVersionId === 1) {\r\n requestNextChapter();\r\n } else {\r\n requestPrevChapter();\r\n } \r\n };\r\n\r\n handleDownloadBookClick = (event) => {\r\n const { bibleVersionId, bookId } = this.props;\r\n if (bookId !== 0) { \r\n this.props.loadBookVersesFromApi(bibleVersionId, bookId);\r\n }\r\n }\r\n\r\n handleDownloadBibleClick = (event) => {\r\n const { bibleVersionId } = this.props;\r\n this.props.loadBibleVersesFromApi(bibleVersionId);\r\n }\r\n\r\n render() {\r\n const { shouldDisplayDownloadBibleOptions, shouldDisplayAddToVerseOfTheDayListIcon, shouldStyleVerseOfTheDay,\r\n isLoading, isLoadingSuccessful, selectedBibleBook } = this.props;\r\n let bibleBookName = \"\";\r\n\r\n if (isLoadingSuccessful) {\r\n bibleBookName = selectedBibleBook ? selectedBibleBook.bookName : \"Book\";\r\n } else {\r\n bibleBookName = \"Book\";\r\n } \r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n ); \r\n }\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n const {\r\n bibleVersion,\r\n bibleBook,\r\n bookChapter,\r\n chapterVerses,\r\n loggedinUser,\r\n } = state\r\n \r\n const bibleVersionId = bibleVersion.id;\r\n const bookId = bibleBook.id;\r\n const chapterId = bookChapter.id;\r\n const versesList = getVersesByChapterIdAndBibleVersion(state);\r\n const isLoading = chapterVerses.isLoading;\r\n const isLoadingSuccessful = chapterVerses.isLoadingSuccessful;\r\n const shouldDisplayDownloadBibleOptions = chapterVerses.canDisplayDownloadBibleOptions;\r\n const selectedBibleBook = getBookByBibleVersionAndSelectedBookId(state);\r\n const shouldDisplayAddToVerseOfTheDayListIcon = loggedinUser && loggedinUser.profileName === \"Admin\" ? true : false;\r\n const shouldStyleVerseOfTheDay = loggedinUser && loggedinUser.profileName === \"Admin\" ? true : false;\r\n \r\n return {\r\n bibleVersionId,\r\n bookId,\r\n chapterId,\r\n versesList,\r\n isLoading,\r\n isLoadingSuccessful, \r\n shouldDisplayDownloadBibleOptions,\r\n shouldDisplayAddToVerseOfTheDayListIcon,\r\n shouldStyleVerseOfTheDay,\r\n selectedBibleBook\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n requestNextChapter,\r\n requestPrevChapter,\r\n getChapterVerses,\r\n loadBookVersesFromApi,\r\n loadBibleVersesFromApi\r\n})(Verses));","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport { Link } from 'react-router-dom';\r\nimport Card from '@material-ui/core/Card';\r\nimport CardContent from '@material-ui/core/CardContent';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport SvgIcon from '@material-ui/core/SvgIcon';\r\nimport styles from '../../../assets/jss/components/drawerStyle';\r\nimport Button from '@material-ui/core/Button';\r\nimport * as Routes from '../../../constants';\r\n\r\n// const useStyles = makeStyles(styles);\r\n\r\nconst useStyles = makeStyles({\r\n root: {\r\n minWidth: 275,\r\n marginBottom: 12,\r\n },\r\n title: {\r\n fontSize: 14,\r\n },\r\n pos: {\r\n marginBottom: 12,\r\n },\r\n cardContentArea: {\r\n display: 'flex',\r\n },\r\n cardContentDescriptionArea: {\r\n flexGrow: 1,\r\n },\r\n cardActionArea: { \r\n position: \"relative\", \r\n width: 90, \r\n },\r\n btn: {\r\n borderRadius: 20,\r\n padding: '0.125rem 0.75rem',\r\n borderColor: '#becddc',\r\n fontSize: '0.75rem', \r\n position: \"absolute\", \r\n bottom: 0,\r\n right: 0,\r\n }\r\n});\r\n\r\nfunction ReadingHistoryIcon(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nconst BibleHistoryItemPanel = props => {\r\n const classes = useStyles();\r\n\r\n const { day, time, bookName, chapterId, chapterNumber, onHandleReadChapterClick } = props;\r\n\r\n return (\r\n \r\n \r\n
\r\n \r\n {day}\r\n \r\n \r\n {time}\r\n \r\n {/* \r\n \r\n */}\r\n \r\n {bookName} {chapterNumber}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )\r\n}\r\n\r\nBibleHistoryItemPanel.propTypes = {\r\n day: PropTypes.string.isRequired,\r\n time: PropTypes.string.isRequired,\r\n bookName: PropTypes.string.isRequired,\r\n chapterId: PropTypes.number.isRequired,\r\n chapterNumber: PropTypes.string.isRequired,\r\n onHandleReadChapterClick: PropTypes.func.isRequired,\r\n}\r\n\r\nexport default BibleHistoryItemPanel;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport BibleHistoryItemPanel from './Panel';\r\nimport { setBibleBook } from '../../Bible/Books/actions';\r\nimport { setBookChapter } from '../../Bible/Chapters/actions';\r\nimport { getBookByBibleVersionAndBookId } from '../../Bible/Books/selectors/getBookByBibleVersionAndBookIdSelector';\r\nimport { getChapterByBibleVersionAndChapterId } from '../../Bible/Chapters/selectors/getChapterByBibleVersionAndChapterIdSelector';\r\nimport { getDateCaptionFromDateTime, getTimeCaptionFromDateTime } from '../../../utils/dateHelper';\r\n\r\nconst BibleHistoryItem = props => {\r\n const { day, time, bookName, bookId, chapterId, chapterNumber, setBibleBook, setBookChapter } = props;\r\n\r\n const handleReadChapterClick = () => {\r\n setBibleBook(bookId, true);\r\n setBookChapter(chapterId);\r\n }\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nBibleHistoryItem.propTypes = {\r\n day: PropTypes.string.isRequired,\r\n time: PropTypes.string.isRequired,\r\n bookName: PropTypes.string.isRequired,\r\n bookId: PropTypes.number.isRequired,\r\n chapterId: PropTypes.number.isRequired,\r\n chapterNumber: PropTypes.string.isRequired,\r\n setBibleBook: PropTypes.func.isRequired,\r\n setBookChapter: PropTypes.func.isRequired,\r\n}\r\n\r\nconst mapStateToProps = (state, props) => {\r\n const { historyItem } = props\r\n\r\n const day = getDateCaptionFromDateTime(historyItem.readDateTimeLt);\r\n const time = getTimeCaptionFromDateTime(historyItem.readDateTimeLt);\r\n const book = getBookByBibleVersionAndBookId(state, historyItem.bookId);\r\n const bookId = historyItem.bookId;\r\n const bookName = book ? book.bookName : '';\r\n const chapterId = historyItem.chapterId;\r\n const chapter = getChapterByBibleVersionAndChapterId(state, historyItem.chapterId);\r\n const chapterNumber = chapter ? chapter.chapterNumber : '';\r\n\r\n return {\r\n day,\r\n time,\r\n bookName,\r\n bookId,\r\n chapterId,\r\n chapterNumber\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, {\r\n setBibleBook,\r\n setBookChapter \r\n})(BibleHistoryItem);","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport BibleHistoryItem from './Item';\r\n\r\nconst BibleHistoryPanel = props => {\r\n const { historyList } = props;\r\n\r\n return (\r\n
\r\n {historyList.map(historyItem => ())}\r\n
\r\n )\r\n}\r\n\r\nBibleHistoryPanel.propTypes = {\r\n historyList: PropTypes.array.isRequired,\r\n}\r\n\r\nexport default BibleHistoryPanel;\r\n","import React from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport _ from 'lodash';\r\nimport BibleHistoryPanel from './Panel';\r\nimport { entityListActions } from '../../common/entities/actions';\r\nimport * as entitiesNames from '../../common/entities/constants';\r\n\r\nconst { request: getEntityList } = entityListActions.getEntityList;\r\n\r\nconst BibleHistory = props => {\r\n const [pageLoaded, setPageLoaded] = React.useState(false);\r\n\r\n const { historyItems } = props;\r\n\r\n const initializeLoadingPage = () => { \r\n props.getEntityList(entitiesNames.BIBLEHISTORY);\r\n setPageLoaded(true);\r\n }\r\n\r\n React.useEffect(() => {\r\n if (!pageLoaded) {\r\n initializeLoadingPage(); \r\n }\r\n })\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nBibleHistory.propTypes = {\r\n historyItems: PropTypes.array.isRequired,\r\n getEntityList: PropTypes.func.isRequired,\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n const {\r\n bibleHistory,\r\n } = state\r\n\r\n const historyItems = _.values(bibleHistory.items);\r\n\r\n return {\r\n historyItems\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n getEntityList \r\n})(BibleHistory));","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst FavoriteVerses = () => (\r\n
\r\n \r\n Coming soon :)\r\n \r\n
\r\n)\r\n\r\nexport default FavoriteVerses","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst Topics = () => (\r\n
\r\n \r\n Coming soon :)\r\n \r\n
\r\n)\r\n\r\nexport default Topics","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst Settings = () => (\r\n
\r\n \r\n Coming soon :)\r\n \r\n
\r\n)\r\n\r\nexport default Settings","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst Copyrights = () => (\r\n
\r\n \r\n New King James\r\n \r\n \r\n Copyright and Usage Information\r\n \r\n \r\n The Holy Bible, New King James Version®. Copyright © 1982 by Thomas Nelson, Inc. All rights reserved.\r\n \r\n \r\n \"Scripture taken from the New King James Version. Copyright © 1982 by Thomas Nelson, Inc. Used by permission. All rights reserved.\"\r\n \r\n \r\nThe text of the New King James Version® (NKJV®) may be quoted or reprinted without prior written permission with the following qualifications:
\r\n\r\n(1) Up to and including 1,000 verses may be quoted in printed form as long as the verses quoted amount to less than 50% of a complete book of the Bible and make up less than 50% of the total work in which they are quoted; (2) all NKJV quotations must conform accurately to the NKJV text.\r\nAny use of the NKJV text must include a proper acknowledgment as follows:\r\n
\r\n
\r\n)\r\n\r\nexport default Copyrights","import React from 'react';\r\nimport Typography from '@material-ui/core/Typography';\r\n\r\nconst ReleaseNotes = () => (\r\n
\r\n \r\n 1.1.1\r\n \r\n \r\n- Fixed errors related to loading verse of the day for different bible versions
\r\n
\r\n \r\n 1.1.0\r\n \r\n \r\n- Improved User Interface
\r\n
\r\n \r\n 1.0.3\r\n \r\n \r\n- Added \"Reading History\" feature. Now, you will be able to see your reading history and go back and read any of those chapters. This would help for example during group bible study where you can go back later and follow on those readings.
\r\n- Improved checking if new version of web app is available
\r\n- Fixed displaying Verse Of The Day issue due to recent update
\r\n
\r\n \r\n 0.9.0\r\n \r\n \r\n- Verse of the Day admin improvements\r\n \r\n \r\n 0.8.2\r\n \r\n \r\n{/* - Added the ability to backup and sync bookmark and verse of the day automatically to the cloud and among devices. This requires registering for an online account.
*/}\r\n- Added the ability to register for an online account. It's safe, secure and free. This will enable in upcoming release to backup and sync bookmark and verse of the day automatically to the cloud and among devices.
\r\n- Service improvements.\r\n
\r\n \r\n 0.7.4\r\n \r\n \r\n- Added displaying Verse of the Day
\r\n- Improved checking if new version of web app is available\r\n
\r\n \r\n 0.6.0\r\n \r\n \r\n- Added the ability to download a bible book to local storage to improve performance and offline experience when a chapter is served from web service. \r\nThis helps the user to continue reading the downloaded book even when internet is not available.
\r\n
\r\n \r\n 0.5.0\r\n \r\n \r\n- Added the ability to update iOS web apps by displaying new version available message.
\r\n- Service performance improvements.\r\n
\r\n \r\n 0.4.1\r\n \r\n \r\n- Auto-bookmark bible version, book and chapter. Next time the app is opened, when clicking/tapping Bible, it will auto-display bookmarked bible and chapter.
\r\n- Store currently displayed chapter in local storage for improved offline experience and performance.\r\n
\r\n \r\n 0.3.1\r\n \r\n \r\n- Added Progressive Web App as an option where website can be stored as an app on the device.\r\n \r\n \r\n 0.2.0\r\n \r\n \r\n- Added New King James Version\r\n \r\n \r\n 0.1.3\r\n \r\n \r\n- Read King James Version Bible
\r\n- Read Smith & Van Dyke Arabic Bible\r\n
\r\n
\r\n)\r\n\r\nexport default ReleaseNotes","import { Component } from 'react';\r\nimport { withRouter } from 'react-router-dom';\r\nimport { logEvent } from '../../utils/analytics';\r\nimport { \r\n ROUTES_HOME_PATHNAME, \r\n ROUTES_LOGIN_PATHNAME,\r\n ROUTES_REGISTER_PATHNAME,\r\n ROUTES_UPDATE_USER_INFO_PATHNAME,\r\n ROUTES_CHANGE_PASSWORD_PATHNAME,\r\n ROUTES_FORGOTPASSWORD_PATHNAME, \r\n ROUTES_VERSEOFTHEDAY_PATHNAME,\r\n ROUTES_BIBLE_PATHNAME,\r\n ROUTES_READINGHISTORY_PATHNAME,\r\n ROUTES_FAVORITEVERSES_PATHNAME,\r\n ROUTES_TOPICS_PATHNAME,\r\n ROUTES_SETTINGS_PATHNAME,\r\n ROUTES_COPYRIGHTS_PATHNAME,\r\n ROUTES_RELEASENOTES_PATHNAME\r\n} from '../../constants';\r\n\r\nclass Analytics extends Component {\r\n componentDidMount() {\r\n this.logPageView(this.props.location);\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (this.props.location.pathname !== prevProps.location.pathname) {\r\n this.logPageView(this.props.location);\r\n }\r\n }\r\n\r\n logPageView(location) {\r\n const pageTitle = this.getPageTitle(location.pathname);\r\n\r\n document.title = pageTitle;\r\n\r\n logEvent('page_view', {\r\n page_path: location.pathname,\r\n page_title: pageTitle,\r\n });\r\n }\r\n\r\n getPageTitle(path) {\r\n // Define page titles based on routes\r\n const titles = {\r\n [ROUTES_HOME_PATHNAME]: 'Home Page',\r\n [ROUTES_LOGIN_PATHNAME]: 'Login Page',\r\n [ROUTES_REGISTER_PATHNAME]: 'Register Page',\r\n [ROUTES_UPDATE_USER_INFO_PATHNAME]: 'Update User Info Page',\r\n [ROUTES_CHANGE_PASSWORD_PATHNAME]: 'Change Password Page',\r\n [ROUTES_FORGOTPASSWORD_PATHNAME]: 'Forgot Password Page',\r\n [ROUTES_VERSEOFTHEDAY_PATHNAME]: 'Verse Of The Day Page',\r\n [ROUTES_BIBLE_PATHNAME]: 'Bible Page',\r\n [ROUTES_READINGHISTORY_PATHNAME]: 'Reading History Page',\r\n [ROUTES_FAVORITEVERSES_PATHNAME]: 'Favorite Verses Page',\r\n [ROUTES_TOPICS_PATHNAME]: 'Topics Page',\r\n [ROUTES_SETTINGS_PATHNAME]: 'Settings Page',\r\n [ROUTES_COPYRIGHTS_PATHNAME]: 'Copyrights Page', \r\n [ROUTES_RELEASENOTES_PATHNAME]: 'Release Notes Page',\r\n };\r\n\r\n return titles[path] || 'Christ The Beloved - Personal Bible App';\r\n }\r\n\r\n render() {\r\n return null; // This component does not render anything\r\n }\r\n}\r\n\r\nexport default withRouter(Analytics);\r\n","import React, { Component } from 'react';\r\nimport { Route } from 'react-router-dom';\r\nimport PropTypes from 'prop-types';\r\nimport { withStyles } from '@material-ui/core/styles';\r\nimport * as Routes from '../../constants';\r\nimport MessageBox from '../../common/components/MessageBox';\r\nimport MessageBanner from '../../common/components/MessageBanner';\r\nimport Main from './Main';\r\nimport Login from '../auth/Login';\r\nimport Register from '../auth/Register';\r\nimport UpdateUserInfo from '../auth/UpdateUserInfo';\r\nimport ChangePassword from '../auth/ChangePassword';\r\nimport ForgotPassword from '../auth/ForgotPassword';\r\nimport VerseOfTheDay from '../VerseOfTheDay';\r\nimport Verses from '../Bible/Verses';\r\nimport BibleHistory from '../BibleHistory';\r\nimport FavoriteVerses from '../Bible/components/FavoriteVerses';\r\nimport Topics from './components/Topics';\r\nimport Settings from './components/Settings';\r\nimport Copyrights from './components/Copyrights';\r\nimport ReleaseNotes from './components/ReleaseNotes';\r\nimport { logEvent } from '../../utils/analytics';\r\nimport Analytics from './Analytics';\r\n\r\nconst styles = theme => ({\r\n root: {\r\n display: 'flex',\r\n },\r\n toolbar: theme.mixins.toolbar,\r\n});\r\n\r\nclass HomePageMain extends Component {\r\n static propTypes = {\r\n classes: PropTypes.object.isRequired,\r\n theme: PropTypes.object.isRequired,\r\n shouldDisplayNewVersionAvailable: PropTypes.bool.isRequired, \r\n shouldDisplayAlertMessage: PropTypes.bool.isRequired,\r\n alertType: PropTypes.string.isRequired,\r\n alertMessageText: PropTypes.string.isRequired,\r\n onHandleMessageBoxClose: PropTypes.func.isRequired,\r\n onHandleAppVersionUpdateClick: PropTypes.func.isRequired\r\n }\r\n\r\n componentDidMount() {\r\n // Add event listener for when the PWA is installed\r\n window.addEventListener('appinstalled', this.handlePwaInstall);\r\n\r\n // Add event listener for when the app comes online\r\n window.addEventListener('online', this.handleOnlineEvent);\r\n\r\n // Check if running in standalone mode\r\n if (window.matchMedia('(display-mode: standalone)').matches || window.navigator.standalone) {\r\n logEvent('pwa_open', {\r\n event_category: 'PWA',\r\n event_label: 'Opened in Standalone Mode',\r\n });\r\n }\r\n }\r\n \r\n componentWillUnmount() {\r\n // Clean up event listener when component unmounts\r\n window.removeEventListener('appinstalled', this.handlePwaInstall);\r\n\r\n // Remove event listener when the component unmounts\r\n window.removeEventListener('online', this.handleOnlineEvent);\r\n }\r\n \r\n handlePwaInstall = () => {\r\n logEvent('pwa_installed', {\r\n event_category: 'PWA',\r\n event_label: 'App Installed',\r\n });\r\n };\r\n\r\n handleOnlineEvent = () => {\r\n const request = indexedDB.open('analyticsDB', 1);\r\n \r\n request.onsuccess = (event) => {\r\n let db = event.target.result;\r\n let transaction = db.transaction('events', 'readwrite');\r\n let store = transaction.objectStore('events');\r\n let getAll = store.getAll();\r\n \r\n getAll.onsuccess = () => {\r\n getAll.result.forEach((event) => {\r\n logEvent(event.eventName, event.params);\r\n });\r\n // Clear stored events after sending them to Google Analytics\r\n store.clear();\r\n };\r\n };\r\n };\r\n\r\n render() {\r\n const { classes } = this.props;\r\n const { shouldDisplayNewVersionAvailable, shouldDisplayAlertMessage, alertType, alertMessageText, \r\n onHandleMessageBoxClose, onHandleAppVersionUpdateClick } = this.props;\r\n \r\n return (\r\n
\r\n
\r\n{/* {(shouldDisplayNewVersionAvailable\r\n ? \r\n : \r\n )} */}\r\n onHandleMessageBoxClose(event, reason)} />\r\n\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default withStyles(styles, { withTheme: true })(HomePageMain);","import {\r\n drawerWidth,\r\n transition,\r\n container,\r\n} from '../CTBWebApp';\r\n\r\nconst mainPageStyle = theme => ({\r\n root: {\r\n //display: 'flex',\r\n position: \"relative\",\r\n top: \"0\",\r\n height: \"100vh\"\r\n },\r\n mainPanel: {\r\n [theme.breakpoints.up(\"sm\")]: {\r\n width: `calc(100% - ${drawerWidth}px)`\r\n },\r\n //flexGrow: 1,\r\n padding: theme.spacing(3),\r\n overflow: \"auto\",\r\n position: \"relative\",\r\n float: \"right\",\r\n ...transition,\r\n maxHeight: \"100%\",\r\n width: \"100%\",\r\n overflowScrolling: \"touch\"\r\n },\r\n});\r\n\r\nexport default mainPageStyle;","import React, { useState } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport HomePageAppBar from './AppBar';\r\nimport HomePageDrawer from './Drawer';\r\nimport HomePageMain from './BaseMain';\r\nimport styles from '../../assets/jss/views/mainPageStyle';\r\n\r\nconst useStyles = makeStyles(styles);\r\n\r\nconst HomePage = props => {\r\n const classes = useStyles();\r\n\r\n const [mobileDrawerOpen, setMobileDrawerOpen] = useState(false);\r\n const { isLoggedIn, userLoggingIn, userDisplayName, isProcessing, shouldDisplayNewVersionAvailable, shouldDisplayAlertMessage, \r\n alertType, alertMessageText, onHandleMessageBoxClose, onHandleAppVersionUpdateClick } = props;\r\n const handleDrawerToggle = () => {\r\n setMobileDrawerOpen(!mobileDrawerOpen);\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nHomePage.propTypes = {\r\n isLoggedIn: PropTypes.bool.isRequired,\r\n userLoggingIn: PropTypes.bool.isRequired,\r\n userDisplayName: PropTypes.string.isRequired,\r\n isProcessing: PropTypes.bool.isRequired,\r\n shouldDisplayNewVersionAvailable: PropTypes.bool.isRequired,\r\n shouldDisplayAlertMessage: PropTypes.bool.isRequired,\r\n alertType: PropTypes.string.isRequired,\r\n alertMessageText: PropTypes.string.isRequired,\r\n onHandleMessageBoxClose: PropTypes.func.isRequired,\r\n onHandleAppVersionUpdateClick: PropTypes.func.isRequired\r\n}\r\n\r\nexport default HomePage;","import React, { Component } from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport { connect } from 'react-redux';\r\nimport { withRouter } from 'react-router-dom';\r\nimport HomePage from './HomePage';\r\nimport { resetAlertMessage } from '../../actions';\r\nimport { loadSettingsRequest } from '../Settings/System/actions';\r\nimport { forceAppReload } from '../Version/actions';\r\nimport { updateAppVersionStorage } from '../Version/actions/appVersionFromStorageActions';\r\nimport { ROUTES_HOME_PATHNAME } from '../../constants';\r\nimport { viewFilters } from './../../reducers/viewFilters';\r\n\r\nclass Home extends Component {\r\n static propTpes = {\r\n isLoggedIn: PropTypes.bool.isRequired,\r\n userDisplayName: PropTypes.string.isRequired,\r\n isProcessing: PropTypes.bool.isRequired,\r\n loadSettingsRequest: PropTypes.func.isRequired,\r\n resetAlertMessage: PropTypes.func.isRequired,\r\n forceAppReload: PropTypes.func.isRequired,\r\n updateAppVersionStorage: PropTypes.func.isRequired,\r\n latestAppVersion: PropTypes.string.isRequired\r\n }\r\n\r\n state = {\r\n mobileMoreAnchorEl: null, \r\n };\r\n\r\n componentDidMount() { \r\n this.props.loadSettingsRequest();\r\n } \r\n\r\n handleMobileMenuClose = () => {\r\n this.setState({ mobileMoreAnchorEl: null })\r\n }\r\n\r\n handleMobileMenuOpen = event => {\r\n this.setState({ mobileMoreAnchorEl: event.currentTarget })\r\n }\r\n\r\n handleAppVersionUpdateClick = (event) => {\r\n event.preventDefault();\r\n\r\n const { latestAppVersion, updateAppVersionStorage, forceAppReload } = this.props;\r\n navigator.serviceWorker.forceSWupdate();\r\n updateAppVersionStorage(latestAppVersion);\r\n forceAppReload();\r\n\r\n if (window.location.pathname === ROUTES_HOME_PATHNAME) {\r\n window.location.reload(true);\r\n } else {\r\n this.props.history.push(ROUTES_HOME_PATHNAME);\r\n } \r\n }\r\n\r\n handleMessageBoxClose = (event, reason) => { \r\n if (reason === 'clickaway') {\r\n return;\r\n }\r\n\r\n this.props.resetAlertMessage();\r\n }\r\n\r\n render() {\r\n const { isLoggedIn, userLoggingIn, userDisplayName, isProcessing, shouldDisplayNewVersionAvailable, shouldDisplayAlertMessage, \r\n alertType, alertMessageText } = this.props;\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => { \r\n const {\r\n settings,\r\n viewFilters,\r\n loggedinUser,\r\n appStatus,\r\n alertMessage\r\n } = state\r\n\r\n const isLoggedIn = loggedinUser ? true : false;\r\n const userLoggingIn = viewFilters.userLoggingIn;\r\n const userDisplayName = loggedinUser ? loggedinUser.displayName : '';\r\n const isProcessing = appStatus.isProcessing;\r\n const shouldDisplayNewVersionAvailable = settings.shouldDisplayNewVersionAvailable;\r\n const shouldDisplayAlertMessage = alertMessage ? true : false;\r\n const alertMessageText = alertMessage ? alertMessage.alertText : '';\r\n const alertType = alertMessage ? alertMessage.alertType : 'info';\r\n const latestAppVersion = settings.latestAppVersion;\r\n \r\n return {\r\n isLoggedIn,\r\n userLoggingIn,\r\n userDisplayName,\r\n isProcessing,\r\n shouldDisplayNewVersionAvailable,\r\n shouldDisplayAlertMessage,\r\n alertType,\r\n alertMessageText,\r\n latestAppVersion \r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, {\r\n loadSettingsRequest,\r\n resetAlertMessage,\r\n forceAppReload,\r\n updateAppVersionStorage\r\n })(Home));","import React, { useState, useEffect } from 'react'\r\nimport Home from '../../features/Home'\r\n\r\nconst App = (props) => {\r\n const [pageLoaded, setPageLoaded] = useState(false);\r\n\r\n const initializeLoadingPage = () => {\r\n props.history.listen(() => {\r\n if (window.swUpdateReady) {\r\n window.swUpdateReady = false;\r\n console.log('swUpdateReady=false');\r\n window.stop();\r\n window.location.reload();\r\n }\r\n });\r\n\r\n setPageLoaded(true);\r\n }\r\n\r\n useEffect(() => {\r\n if (!pageLoaded) {\r\n initializeLoadingPage(); \r\n }\r\n })\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n}\r\n\r\nexport default App","import React from 'react';\r\n\r\nconst NotFound = () =>

Not found

\r\n\r\nexport default NotFound","import React from 'react'\r\nimport PropTypes from 'prop-types'\r\nimport { Provider } from 'react-redux'\r\nimport { Route, Switch } from 'react-router-dom'\r\nimport App from './containers/App';\r\nimport NotFound from './components/NotFound';\r\n\r\nconst Root = ({ store }) => (\r\n \r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n)\r\n\r\nRoot.propTypes = {\r\n store: PropTypes.object.isRequired,\r\n}\r\nexport default Root","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker.addEventListener('install', event => {\r\n navigator.serviceWorker.skipWaiting();\r\n });\r\n\r\n navigator.serviceWorker.getRegistration(swUrl)\r\n .then(swReg => {\r\n if (swReg) {\r\n navigator.serviceWorker.addEventListener('controllerchange', () => {\r\n window.swUpdateReady = true;\r\n console.log('swUpdateReady=true')\r\n });\r\n }\r\n });\r\n\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed. \r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function forceSWupdate() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.update().then(() => {\r\n\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport { render } from 'react-dom';\r\nimport { BrowserRouter as Router } from 'react-router-dom';\r\nimport Root from './common/Root';\r\nimport configureStore from './store/configureStore';\r\nimport { BASEURL } from './features/Settings/System/helper';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport { initGA } from './utils/analytics';\r\n\r\nconsole.log(`Version: ${process.env.REACT_APP_VERSION}`)\r\n\r\nconst store = configureStore()\r\n\r\n// initGA(process.env.REACT_APP_GA_MEASUREMENT_ID)\r\ninitGA('G-7G31TGP60S');\r\n\r\nrender(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n)\r\n\r\nif (window.Cypress) {\r\n window.store = store\r\n }\r\n\r\nserviceWorker.register();","import * as actions from './actionRequestTypes';\r\n\r\nconst { action } = actions;\r\n\r\nexport const RESET_ALERT_MESSAGE = 'RESET_ALERT_MESSAGE';\r\nexport const resetAlertMessage = () => action(RESET_ALERT_MESSAGE);\r\n\r\nexport const SET_ALERT_MESSAGE = 'SET_ALERT_MESSAGE';\r\nexport const setAlertMessage = (alertType, alertText) => action(SET_ALERT_MESSAGE, {alertType, alertText});\r\n\r\nexport const ADD_LOG_MESSAGE = 'ADD_LOG_MESSAGE';\r\nexport const addLogMessage = msg => action(ADD_LOG_MESSAGE, {msg});\r\n\r\nexport const RESET_LOG_MESSAGES = 'RESET_LOG_MESSAGES';\r\nexport const resetLogMessages = () => action(RESET_LOG_MESSAGES);\r\n\r\n","import * as actions from '../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const GET_APP_VERSION_FROM_API = createRequestTypes('GET_APP_VERSION_FROM_API');\r\nexport const getAppVersionFromApi = {\r\n request: () => action(GET_APP_VERSION_FROM_API.REQUEST),\r\n success: (id, response) => action(GET_APP_VERSION_FROM_API.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_APP_VERSION_FROM_API.FAILURE, {error})\r\n}","import * as actions from '../../../actions/actionRequestTypes';\r\n\r\nimport * as _appVersionFromStorageActions from './appVersionFromStorageActions';\r\nimport * as _appVersionFromApiActions from './appVersionFromApiActions';\r\n\r\nexport const appVersionFromStorageActions = _appVersionFromStorageActions;\r\nexport const appVersionFromApiActions = _appVersionFromApiActions;\r\n\r\nconst { action } = actions;\r\n\r\nexport const VALIDATE_APP_VERSION = 'VALIDATE_APP_VERSION';\r\nexport const validateAppVersion = () => action(VALIDATE_APP_VERSION);\r\n\r\nexport const FORCE_APP_RELOAD = 'FORCE_APP_RELOAD';\r\nexport const forceAppReload = () => action(FORCE_APP_RELOAD);","import * as actions from '../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const GET_ENTITY_LIST_ACTION_TYPE = entityName => `GET_${entityName}_LIST`;\r\n\r\nexport const GET_ENTITY_LIST = entityName => createRequestTypes(GET_ENTITY_LIST_ACTION_TYPE(entityName));\r\nexport const getEntityList = {\r\n request: (entityName, filter) => action(GET_ENTITY_LIST(entityName).REQUEST, filter),\r\n success: (entityName, response) => action(GET_ENTITY_LIST(entityName).SUCCESS, {response}),\r\n failure: (entityName, error) => action(GET_ENTITY_LIST(entityName).FAILURE, {error})\r\n}","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const SUBMIT_REGISTER_REQUEST = 'SUBMIT_REGISTER_REQUEST';\r\nexport const submitRegisterRequest = newUser => action(SUBMIT_REGISTER_REQUEST, {newUser});\r\n\r\nexport const REGISTER = createRequestTypes('REGISTER');\r\nexport const register = {\r\n request: () => action(REGISTER.REQUEST),\r\n success: (id, response) => action(REGISTER.SUCCESS, {response}),\r\n failure: (id, error) => action(REGISTER.FAILURE, {error})\r\n}","import * as _registerActions from './registerActions';\r\n\r\nexport const registerActions = _registerActions;","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const SUBMIT_UPDATE_USER_INFO_REQUEST = 'SUBMIT_UPDATE_USER_INFO_REQUEST';\r\nexport const submitUpdateUserInfoRequest = (userId, modifiedUser) => action(SUBMIT_UPDATE_USER_INFO_REQUEST, {userId, modifiedUser});\r\n\r\nexport const UPDATE_USER_INFO = createRequestTypes('UPDATE_USER_INFO');\r\nexport const updateUserInfo = {\r\n request: () => action(UPDATE_USER_INFO.REQUEST),\r\n success: (id, response) => action(UPDATE_USER_INFO.SUCCESS, {response}),\r\n failure: (id, error) => action(UPDATE_USER_INFO.FAILURE, {error})\r\n}","import * as _updateUserInfoActions from './updateUserInfoActions';\r\n\r\nexport const updateUserInfoActions = _updateUserInfoActions;","import * as actions from '../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_SETTINGS_REQUEST = 'LOAD_SETTINGS_REQUEST'\r\nexport const loadSettingsRequest = () => action(LOAD_SETTINGS_REQUEST)\r\n\r\nexport const GET_SETTINGS = createRequestTypes('GET_SETTINGS')\r\n\r\nexport const getSettings = {\r\n request: () => action(GET_SETTINGS.REQUEST),\r\n success: (id, response) => action(GET_SETTINGS.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_SETTINGS.FAILURE, {error})\r\n}","import { createSelector } from 'reselect';\r\nimport _ from 'lodash';\r\nimport orderBy from 'lodash/orderBy';\r\n\r\nconst getChapters = state => _.values(state.entities.chapters);\r\nconst getSelectedBibleBook = state => state.bibleBook;\r\n\r\nexport const getChaptersByBookId = createSelector(\r\n [getChapters, getSelectedBibleBook],\r\n (chapters, bibleBook) => {\r\n const filteredChapters = chapters.filter(chapter => chapter.bookId === bibleBook.id);\r\n return orderBy(filteredChapters, c => c.chapterId, ['asc']);\r\n }\r\n)","export const initGA = (measurementId) => {\r\n window.dataLayer = window.dataLayer || [];\r\n function gtag() { window.dataLayer.push(arguments); }\r\n gtag('js', new Date());\r\n gtag('config', measurementId);\r\n};\r\n\r\nconst saveEventToIndexedDB = (eventName, params) => {\r\n const request = indexedDB.open('analyticsDB', 1);\r\n \r\n request.onupgradeneeded = (event) => {\r\n let db = event.target.result;\r\n if (!db.objectStoreNames.contains('events')) {\r\n db.createObjectStore('events', { keyPath: 'id', autoIncrement: true });\r\n }\r\n };\r\n \r\n request.onsuccess = (event) => {\r\n let db = event.target.result;\r\n let transaction = db.transaction('events', 'readwrite');\r\n let store = transaction.objectStore('events');\r\n store.add({ eventName, params, timestamp: Date.now() });\r\n };\r\n};\r\n \r\nexport const logEvent = (eventName, params = {}) => {\r\n if (navigator.onLine) {\r\n if (window.gtag) {\r\n window.gtag('event', eventName, params);\r\n } else {\r\n console.warn('Google Analytics not initialized');\r\n }\r\n } else {\r\n saveEventToIndexedDB(eventName, params);\r\n }\r\n};","export const ROUTES_HOME_PATHNAME = '/';\r\nexport const ROUTES_LOGIN_PATHNAME = '/login';\r\nexport const ROUTES_REGISTER_PATHNAME = '/register';\r\nexport const ROUTES_UPDATE_USER_INFO_PATHNAME = '/updateUserInfo';\r\nexport const ROUTES_CHANGE_PASSWORD_PATHNAME = '/changePassword';\r\nexport const ROUTES_FORGOTPASSWORD_PATHNAME = '/forgotPassword';\r\nexport const ROUTES_VERSEOFTHEDAY_PATHNAME = '/verseoftheday';\r\nexport const ROUTES_BIBLE_PATHNAME = '/bible';\r\nexport const ROUTES_READINGHISTORY_PATHNAME = '/readingHistory';\r\nexport const ROUTES_FAVORITEVERSES_PATHNAME = '/favoriteVerses';\r\nexport const ROUTES_TOPICS_PATHNAME = '/topics';\r\nexport const ROUTES_SETTINGS_PATHNAME = '/settings';\r\nexport const ROUTES_FEEDBACK_PATHNAME = '/feedback';\r\nexport const ROUTES_REPORT_DEFECT_PATHNAME = '/reportDefect';\r\nexport const ROUTES_COPYRIGHTS_PATHNAME = '/copyrights';\r\nexport const ROUTES_RELEASENOTES_PATHNAME = '/releaseNotes';\r\n\r\nexport const ALERT_TYPE_ERROR = 'error';\r\nexport const ALERT_TYPE_INFO = 'info';\r\nexport const ALERT_TYPE_SUCCESS = 'success';\r\nexport const ALERT_TYPE_WARNING = 'warning';","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const SUBMIT_CHANGE_PASSWORD_REQUEST = 'SUBMIT_CHANGE_PASSWORD_REQUEST';\r\nexport const submitChangePasswordRequest = encodedCredentials => action(SUBMIT_CHANGE_PASSWORD_REQUEST, {encodedCredentials});\r\n\r\nexport const CHANGE_PASSWORD = createRequestTypes('CHANGE_PASSWORD');\r\nexport const changePassword = {\r\n request: () => action(CHANGE_PASSWORD.REQUEST),\r\n success: (id, response) => action(CHANGE_PASSWORD.SUCCESS, {response}),\r\n failure: (id, error) => action(CHANGE_PASSWORD.FAILURE, {error})\r\n}","import * as _changePasswordActions from './changePasswordActions';\r\n\r\nexport const changePasswordActions = _changePasswordActions;","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const SUBMIT_FORGOT_PASSWORD_REQUEST = 'SUBMIT_FORGOT_PASSWORD_REQUEST';\r\nexport const submitForgotPasswordRequest = (encodedCredentials) => action(SUBMIT_FORGOT_PASSWORD_REQUEST, {encodedCredentials});\r\n\r\nexport const FORGOT_PASSWORD = createRequestTypes('FORGOT_PASSWORD');\r\nexport const forgotPassword = {\r\n request: () => action(FORGOT_PASSWORD.REQUEST),\r\n success: (id, response) => action(FORGOT_PASSWORD.SUCCESS, {response}),\r\n failure: (id, error) => action(FORGOT_PASSWORD.FAILURE, {error})\r\n}","import * as _forgotPasswordActions from './forgotPasswordActions';\r\n\r\nexport const forgotPasswordActions = _forgotPasswordActions;","import { createSelector } from 'reselect';\r\nimport { getBibleBooks } from './getBibleBooksSelector';\r\nimport { getBibleVersionBySelectedVersionId } from '../../Versions/selectors/getBibleVersionBySelectedVersionIdSelector';\r\n\r\nexport const getBooksByBibleVersion = createSelector(\r\n [getBibleBooks, getBibleVersionBySelectedVersionId],\r\n (bibleBooks, bibleVersionBySelectedVersionId) => {\r\n const selectedLangId = bibleVersionBySelectedVersionId ? bibleVersionBySelectedVersionId.langId : 2;\r\n const filteredBooks = bibleBooks.filter(book => book.langId === selectedLangId);\r\n return filteredBooks;\r\n }\r\n)","import { createSelector } from 'reselect';\r\nimport _ from 'lodash';\r\n\r\nconst getBooks = state => _.values(state.entities.books);\r\n\r\nexport const getBibleBooks = createSelector(\r\n [getBooks],\r\n (bibleBooks) => {\r\n return bibleBooks;\r\n }\r\n)","export const REQUEST = 'REQUEST'\r\nexport const SUCCESS = 'SUCCESS'\r\nexport const FAILURE = 'FAILURE'\r\n\r\nexport const createRequestTypes = base => {\r\n return [REQUEST, SUCCESS, FAILURE].reduce((acc, type) => {\r\n acc[type] = `${base}_${type}`\r\n return acc\r\n }, {})\r\n}\r\n\r\nexport const action = (type, payload = {}) => {\r\n return {type, ...payload}\r\n}","import * as actions from '../../../actions/actionRequestTypes';\r\n\r\nconst { createRequestTypes, action } = actions;\r\n\r\nexport const LOAD_APP_VERSION_FROM_STORAGE = 'LOAD_APP_VERSION_FROM_STORAGE';\r\nexport const loadAppVersionFromStorage = (appVersion) => action(LOAD_APP_VERSION_FROM_STORAGE, {appVersion});\r\n\r\nexport const GET_APP_VERSION_FROM_STORAGE = createRequestTypes('GET_APP_VERSION_FROM_STORAGE');\r\nexport const getAppVersionFromStorage = {\r\n request: () => action(GET_APP_VERSION_FROM_STORAGE.REQUEST),\r\n success: (id, response) => action(GET_APP_VERSION_FROM_STORAGE.SUCCESS, {response}),\r\n failure: (id, error) => action(GET_APP_VERSION_FROM_STORAGE.FAILURE, {error})\r\n}\r\n\r\nexport const UPDATE_APP_VERSION_STORAGE = 'UPDATE_APP_VERSION_STORAGE';\r\nexport const updateAppVersionStorage = (appVersion) => action(UPDATE_APP_VERSION_STORAGE, {appVersion});","import * as actions from '../../../../actions/actionRequestTypes';\r\n\r\nconst { action } = actions;\r\n\r\nexport const SIGNOUT_USER = 'SIGNOUT_USER';\r\nexport const signOutUser = (userId) => action(SIGNOUT_USER, {userId});","import * as _signOutActions from './signOutActions';\r\n\r\nexport const signOutActions = _signOutActions;","module.exports = __webpack_public_path__ + \"static/media/ChristTheSheperd.b5601672.jpg\";","export const APIURL = window.apiUrl;\nexport const BASEURL = window.baseUrl;\nexport const LOGLEVEL = window.logLevel;\n"],"sourceRoot":""}