{"version":3,"sources":["components/CreditCalculator.module.scss","pages/errors/CommonError.module.scss","components/search/search-result/ResultNotFound.module.scss","components/saved-credits/NoSavedCredit.module.scss","pages/errors/Error404.module.scss","components/search/search-container/SearchContainer.module.scss","components/search/search-result/SearchResult.module.scss","components/credits/credit-details/CreditItemDetails.module.scss","components/credits/CreditItem.module.scss","common/ui/icons/building.svg","store/source-institution/sourceInstitutionSelector.js","common/ui/loading/FullPageSpinner.js","store/source-institution/sourceInstitutionAction.js","store/custom-url/urlSelector.js","common/ui/button/ContactButton.js","components/forms/institution-typeahead/InstitutionTypeahead.js","common/ui/icons/search-illustration.svg","components/forms/institution-typeahead/InstitutionSearch.js","components/forms/course-search-input/CourseSearchInput.js","store/search/searchSelector.js","store/search/searchAction.js","components/search/search-container/SearchContainer.js","common/ui/icons/fa-info-circle.svg","components/search/search-result/ResultNotFound.js","common/ui/card/Card.js","common/model/creditType.js","utils/creditUtils.js","components/credits/SubjectDetailList.js","store/credit-bookmark/creditBookmarkAction.js","components/credits/CreditItem.js","components/credits/CreditList.js","components/search/search-result/SearchResultTab.js","components/search/search-result/SearchResult.js","store/credit-arrangement/creditArrangementSelector.js","store/credit-bookmark/creditBookmarkSelector.js","utils/generalUtils.js","components/CreditCalculator.js","pages/Home.js","pages/errors/Error404.js","hooks/analytics/events.js","hooks/analytics/analytics.js","common/ui/button/GoToMainSite.js","components/layout/header/Header.js","common/ui/button/BackToResultButton.js","store/metadata/metadataSelector.js","components/credits/credit-details/CreditItemDetails.js","pages/CreditDetails.js","components/saved-credits/NoSavedCredit.js","components/saved-credits/SavedCreditItems.js","pages/SavedCredits.js","common/http/axiosClient.js","common/api/apiRoutes.js","pages/errors/CommonError.js","hoc/error-handler/WithErrorHandler.js","components/help/HelpInstruction.js","pages/Help.js","hooks/useWindowDimensions.js","hoc/window-dimensions/WithWindowDimensions.js","store/custom-url/urlAction.js","store/external-data/externalDataAction.js","App.js","utils/localStorage.js","store/source-institution/sourceInstitutionReducer.js","store/credit-arrangement/creditArrangementAction.js","store/credit-arrangement/creditArrangementReducer.js","store/credit-bookmark/creditBookmarkReducer.js","store/search/searchReducer.js","store/custom-url/urlReducer.js","store/metadata/metadataAction.js","store/metadata/metadataReducer.js","store/rootReducer.js","common/redux/redux-utils.js","store/external-data/externalDataSaga.js","store/custom-url/urlSaga.js","store/rootSaga.js","store/store.js","index.js","components/layout/header/Header.module.scss","components/search/search-result/SearchResultTab.module.scss","components/saved-credits/SavedCreditItems.module.scss","App.module.scss","components/help/HelpInstruction.module.scss"],"names":["module","exports","_desc","_g","getSourceInstitutionsMap","state","sourceInstitutionState","sourceInstitutions","getSelectedSourceInstitution","selectedInstitution","isFetchingSourceInstitutions","fetching","getRecentSourceInstitutions","createSelector","recentInstitutionIDs","sourceInstitutionsMap","map","recentInstitutionId","getSourceInstitutions","Object","keys","id","getSourceInstitutionsGroupedByCountry","institutionsMap","instGroupedByCountry","groupBy","forEach","countryName","sortBy","institution","displayName","toLowerCase","FullPageSpinner","style","width","height","display","justifyContent","alignItems","LoadingOutlined","Component","FETCH_SOURCE_INSTITUTIONS","FETCH_SOURCE_INSTITUTIONS_SUCCESS","FETCH_SOURCE_INSTITUTIONS_ERROR","SET_SELECTED_INSTITUTION","SET_RECENT_INSTITUTIONS","fetchSourceInstitutionsSuccess","type","setRecentInstitutions","institutionIDs","selectUrls","urlReducer","urls","connect","store","contactData","_","isEmpty","url","alt","target","rel","href","size","className","InstitutionTypeahead","props","prefix","iconStyle","i","exists","t","src","suffix","value","onClick","onClear","notFoundContent","notFoundContainerStyle","notFoundTitleStyle","padding","marginBottom","autoCompleteStyle","options","filterOption","dropdownStyle","dropdownClassName","onSelect","onChange","onBlur","onFocus","aria-label","placeholder","inputStyle","title","textAlign","color","cursor","margin","border","borderRadius","boxShadow","fontSize","_excluded","_extends","assign","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","SvgBuilding","_ref","svgRef","titleId","viewBox","xmlns","xmlnsXlink","ref","undefined","stroke","strokeWidth","fill","fillRule","transform","d","ForwardRef","Paragraph","isRecent","country","getOptions","query","recents","sources","q","r","s","count","countries","RECENT","reduce","result","institutions","filter","some","field","buildFilter","InstitutionSearch","isMobile","dispatch","useDispatch","useSelector","selected","useState","setQuery","searching","setSearching","values","setValues","select","useCallback","institutionID","option","name","label","children","identifier","includes","split","useEffect","rendered","mobile","items","recent","marginRight","position","top","recentIcon","defaultIcon","recentPath","defaultPath","ID","ellipsis","rows","expandable","marginLeft","toUpperCase","CourseSearchInput","classes","search","autocomplete","getSearchTab","searchState","searchTab","getSearchTerm","searchTerm","SET_SEARCH_TAB","SET_SEARCH_TERM","setSearchTab","creditType","setSearchTerm","SearchContainer","onCourseSearchInputChange","event","onSetSearchTerm","onCourseSearchInputClear","description","returnObjects","searchContainer","sm","span","md","lg","maxWidth","flexDirection","searchTitle","React","onSetSearchTab","SvgSearchIllustration","_path","ResultNotFound","resultNotFoundContainer","searchIllustrationIcon","notFoundText","notFoundDescription","getIsDefault","default","getIsZeroPadding","zeroPadding","Card","customHeadStyle","headStyle","backgroundColor","bodyStyle","cardStyle","borderColor","borderTopRightRadius","borderTopLeftRadius","borderBottomColor","CREDIT_TYPES","ARTICULATION","PRECEDENT","SUBJECT_TYPES","getTotalCreditPoints","creditItem","arrangements","total","arrangement","specified","unspecified","subjects","subject","creditPoints","isCreditItemExistsInBookmarks","creditBookMarks","sourceInstitutionID","creditItemID","isArticulation","SubjectDetailList","index","array","fontWeight","FETCH_CREDIT_BOOKMARKS","ADD_CREDIT_TO_BOOKMARK_ACTION","REMOVE_CREDIT_FROM_BOOKMARK_ACTION","addCreditToBookmark","timestamp","removeCreditFromBookmark","sortItemBlocksByCreditPointsTargetName","a","b","sumReducer","acc","curr","aTotal","bTotal","aName","course","bName","localeCompare","withRouter","isCreditArticulation","selectedSourceInstitution","creditBookmarks","itemBlocks","sort","metadataState","metadata","handleClick","clickedBlock","targetTagType","tagName","parentTagType","parentElement","stopPropagation","goToCreditItemDetails","history","push","addCreditItemToBookmark","removeCreditItemFromBookmark","getTargetSubjectContentMarkup","itemBlock","get","courseUrl","displayNameMarkup","targetSubjectRow","targetSubjectExternalLink","targetSubjectExternalLinkIcon","getSourceSubjectContentMarkup","credentials","data","unitName","topTitle","unitCode","cred","last","credential","getCohortContentMarkup","subjectType","cohorts","cohortRow","cohort","icon","AdditionalDetailsLabel","additionalDetailsLabel","guaranteedEntry","admissionCriteria","additionalDetails","infoFilledIcon","caption","getArticulationDetailsMarkupContent","creditItemExistsInBookmark","articulationDetailsMarkupContent","creditPointsContainer","join","rightContainer","heartIconContainer","placement","saveToolTipContent","heartIcon","heartIconOutline","getCricosCodeMarkup","cricosString","cricosCodes","bottomDescriptionNoMarginTop","itemExistsInBookmarks","mobileCreditItemDetailContainer","bottomDescription","mobileArrowDown","mobileHeart","sourceSideContainer","targetSideContainer","creditItemBlockFooter","ArticulationCreditList","groupedArticulations","articulationKeys","articulation","articulationKey","PrecedentCreditList","precedents","precedent","SvgFaInfoCircle","TabPane","SearchResultTab","numberOfArticulations","numberOfPrecedents","articulations","activeTab","resultNotFoundContent","articulationTooltipContent","precedentTooltipContent","articulationTooltips","precedentTooltips","isArray","overlayStyle","li","tabTooltipIcon","tabs","centered","defaultActiveKey","renderTabBar","DefaultTabBar","distanceFromTop","headerHeight","document","getElementById","offsetHeight","defaultTabBarStyle","zIndex","onTabChange","moreIcon","EllipsisOutlined","tab","iconPath","numberOfResults","tabpane","tabContentIntro","resultListContainer","rootTab","TabPaneTab","tabContent","tabBadge","SearchResult","tabKey","getFilteredArticulations","trim","sourceMatched","sourceSubjectMatched","displayCode","targetSubjectMatched","targetMatched","code","getFilteredPrecedents","getArticulationsGroupedBySourceCourse","articulationsMap","newArticulationsMap","credentialIssuerID","courseName","creditArrangements","filteredArticulations","filteredPrecedents","searchResultContainer","getCreditArrangementsMap","creditArrangementState","isFetchingCreditArrangements","getCreditBookmarks","creditBookmarkState","getTotalNumberOfCreditBookmarks","flatten","isApplicationFinishedLoadingSelector","urlsIsFetched","error","creditArrangementsIsFetched","metaDataIsFetched","CreditCalculator","componentDidUpdate","prevProps","recentSourceInstitutions","sourceInstitutionIDs","inst","filteredRecentInstitutionIDs","notFoundIcon","searchIconPath","creditCalculatorContainer","calculatorSearchContainer","applicationHasLoaded","searchDescription","creditArrangementsMap","Home","Helmet","Error404","errorMessageContainer","homeLink","to","AnalyticsEvent","_type","args","toString","JSON","stringify","ConversionEvent","_source","fire","func","window","analytics","isFunction","catch","console","log","e","emit","conversion","StartApplicationForm","endpoint","attributes","method","elements","action","htmlType","startApplicationBtn","drawerVisible","setDrawerVisible","onNavigationDrawerClosed","whitelabel","BrandLogo","GoToMainSite","brandingTextDivider","brandingTextContainer","drawerTitle","drawerClose","navbarLinkIconStyle","navDrawer","headerStyle","borderBottom","closable","onClose","visible","drawerNav","headerContainer","logoContainer","menuBtn","navContainer","navbarLink","totalNumberOfCreditBookmarks","offset","navbarLinkText","hidden","BackToResultButton","getMetadataTimestamp","metadataMap","CreditItemDetails","addCreditItemToBookmarks","onCreditItemAddedToBookmarks","removeCreditItemFromBookmarks","onCreditItemRemovedFromBookmarks","sourceInstitution","totalCreditPoints","isExistingCreditItemInBookmarks","FavouriteButton","saveCreditBtnContainer","saveCreditBtn","iconStyleOutline","creditItemDetailsContainer","creditPointstitle","creditDetailsContainer","mobileCreditDetails","conditionContainer","xs","conditionCol","conditionTitle","conditionList","getValidDatesMarkup","effectiveStart","effectiveEnd","validDateString","dayjs","format","articulationMainHeading","articulationHeadingBottomDescription","CreditBlockDetails","sourceDetails","targetDetails","eduProviderName","creditBlockDetailsContainer","CreditBlockBody","creditBlockLogo","creditBlockPointsCol","CreditBlockHeading","yearCompletedMin","yearCompletedMax","creditBlockHeadingCompletionCol","topHeading","OneOrMoreCredentialNames","ArticulationHeading","articulationHeadingContainer","arrowIconCol","arrowRight","arrowIconContainer","arrowIcon","arrowDown","getCourseCodeMarkup","cohortItem","additionalDetailsItem","foundArticulation","find","foundPrecedent","getPrecedentByID","CreditDetails","match","params","location","pathname","NoSavedCredit","SavedCreditItems","extractComparableSourceString","item","grouped","c","sortBySourceCourseName","aString","bString","groupByCreditType","creditItemsMap","creditItems","newCreditItems","transformBookmarksToSimpleCreditItemsMap","creditItemsFromBookmarks","creditItemFromBookmarks","transformBookmarksToCreditItemsMap","groupedIndex","currentIndex","info","isNil","simpleCreditItemsMap","marginTop","savedCreditContainer","groupedCreditContainer","sourceInstitutionLabel","mobileLineSeparator","savedItems","SavedCredits","axiosClient","axios","create","baseURL","getData","response","parsedData","resp","fileData","API","getExternalData","getUrls","CommonError","commonErrorContainer","commonErrorContent","logo","errorMessage","refreshMessage","WithErrorHandler","WrappedComponent","setError","interceptors","use","Promise","reject","component","Panel","HelpInstruction","expandIcon","isActive","sections","helpMainTitle","helpContainer","section","helpContent","helpContentTitle","heading","content","expandIconPosition","bordered","header","collapsePanelHeader","question","collapsePanelContent","answer","Help","getWindowDimensions","innerWidth","innerHeight","WithWindowDimensions","windowDimensions","setWindowDimensions","handleResize","addEventListener","removeEventListener","useWindowDimensions","FETCH_URLS","FETCH_URLS_SUCCESS","FETCH_URLS_ERROR","FETCH_URLS_PENDING","fetchUrlsSuccess","urlMap","FETCH_EXTERNAL_DATA","App","onFetchCreditBookmarks","onFetchCustomUrls","urlsFetching","onFetchExternalData","layoutRoot","skipToContent","ribbonContainer","ribbon","contentContainer","paddingTop","path","exact","render","credits","getLocalStorageSelectedInstitution","setLocalStorageSelectedInstitution","set","getLocalStorageRecentInstitutionIds","setLocalStorageRecentInstitutionIds","ids","getLocalStorageCreditBookmarks","setLocalStorageCreditBookmarks","initialState","updateRecentInsitutionIDs","cloneDeep","splice","pop","sourceInstitutionReducer","filteredSelectedInstitution","FETCH_CREDIT_ARRANGEMENTS","FETCH_CREDIT_ARRANGEMENTS_SUCCESS","FETCH_CREDIT_ARRANGEMENTS_ERROR","fetchCreditArrangementsSuccess","fetchCreditArrangementsError","creditArrangementReducer","creditBookmarkReducer","currentCreditBookmarks","existCreditItem","filteredCreditItems","searchReducer","FETCH_METADATA","FETCH_METADATA_SUCCESS","FETCH_METADATA_ERROR","fetchMetadataSuccess","metadataReducer","rootReducer","combineReducers","transformToEntityMap","element","fieldValue","doFetchExternalData","all","put","currentURLs","sortedInstitutionsByCountry","srcInstDataMap","sortedArticulations","getSortedArticulations","sortedPrecedents","getSortedPrecedents","orderBy","initialMap","clonedData","currentMapEntry","precedentsMap","newPrecedentsMap","transformPrecdentsToMap","externalDataSaga","takeLatest","getUrl","urlSaga","rootSaga","sagaMiddleware","createSagaMiddleware","middlewares","createStore","applyMiddleware","run","app","version","i18next","Backend","init","lng","fallbackLng","debug","backend","loadPath","process","err","ReactDOM"],"mappings":"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","file":"static/js/main.8b60f831.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"creditCalculatorContainer\":\"CreditCalculator_creditCalculatorContainer__2J_ql\",\"calculatorSearchContainer\":\"CreditCalculator_calculatorSearchContainer__vbjJO\",\"notFoundContent\":\"CreditCalculator_notFoundContent__nA0YP\",\"searchDescription\":\"CreditCalculator_searchDescription__AD4IS\",\"searchIllustrationIcon\":\"CreditCalculator_searchIllustrationIcon__i4j0M\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"commonErrorContainer\":\"CommonError_commonErrorContainer__oLWAd\",\"commonErrorContent\":\"CommonError_commonErrorContent__18F57\",\"logo\":\"CommonError_logo__HdiRj\",\"errorMessage\":\"CommonError_errorMessage__2gXW1\",\"refreshMessage\":\"CommonError_refreshMessage__2YRE3\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"resultNotFoundContainer\":\"ResultNotFound_resultNotFoundContainer__fk8Zh\",\"notFoundText\":\"ResultNotFound_notFoundText__XhJFG\",\"notFoundDescription\":\"ResultNotFound_notFoundDescription__1yWsW\",\"searchIllustrationIcon\":\"ResultNotFound_searchIllustrationIcon__O2O_4\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"title\":\"NoSavedCredit_title__3mK1_\",\"description\":\"NoSavedCredit_description__12Xsu\",\"heartIcon\":\"NoSavedCredit_heartIcon__3m1Dp\",\"homeLink\":\"NoSavedCredit_homeLink__1B1r9\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"errorMessageContainer\":\"Error404_errorMessageContainer__2sspn\",\"title\":\"Error404_title__3gvMK\",\"homeLink\":\"Error404_homeLink__1xA9j\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"searchContainer\":\"SearchContainer_searchContainer__kk4V8\",\"searchTitle\":\"SearchContainer_searchTitle__1I5JG\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"searchResultContainer\":\"SearchResult_searchResultContainer__Iuj_H\",\"courseSearchInputContainer\":\"SearchResult_courseSearchInputContainer__2ec61\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"creditItemDetailsContainer\":\"CreditItemDetails_creditItemDetailsContainer__22pPY\",\"navContainer\":\"CreditItemDetails_navContainer__mwDHQ\",\"mobileCreditDetails\":\"CreditItemDetails_mobileCreditDetails__W0aOP\",\"saveCreditBtnContainer\":\"CreditItemDetails_saveCreditBtnContainer__2--rv\",\"saveCreditBtn\":\"CreditItemDetails_saveCreditBtn__1HaJo\",\"iconStyleOutline\":\"CreditItemDetails_iconStyleOutline__1har4\",\"iconStyle\":\"CreditItemDetails_iconStyle__1uaTk\",\"creditPointsContainer\":\"CreditItemDetails_creditPointsContainer__v4jVf\",\"creditPointstitle\":\"CreditItemDetails_creditPointstitle__5c9ul\",\"creditPoints\":\"CreditItemDetails_creditPoints__11lte\",\"conditionContainer\":\"CreditItemDetails_conditionContainer__1VQEQ\",\"conditionCol\":\"CreditItemDetails_conditionCol__afGMA\",\"conditionTitle\":\"CreditItemDetails_conditionTitle__2_SPm\",\"conditionList\":\"CreditItemDetails_conditionList__25b5t\",\"creditBlockDetailsContainer\":\"CreditItemDetails_creditBlockDetailsContainer__2_k9S\",\"bottomDescription\":\"CreditItemDetails_bottomDescription__3Dnwz\",\"creditBlockPointsCol\":\"CreditItemDetails_creditBlockPointsCol__q-K_U\",\"creditBlockLogo\":\"CreditItemDetails_creditBlockLogo__3CpOc\",\"creditBlockHeadingCompletionCol\":\"CreditItemDetails_creditBlockHeadingCompletionCol__FpiNp\",\"topHeading\":\"CreditItemDetails_topHeading__1bvrV\",\"creditDetailsContainer\":\"CreditItemDetails_creditDetailsContainer__1FFBr\",\"articulationHeadingContainer\":\"CreditItemDetails_articulationHeadingContainer__3EtWo\",\"articulationMainHeading\":\"CreditItemDetails_articulationMainHeading__KP6yT\",\"articulationHeadingBottomDescription\":\"CreditItemDetails_articulationHeadingBottomDescription__1OYbh\",\"articulationHeadingCompletion\":\"CreditItemDetails_articulationHeadingCompletion__2YZaD\",\"arrowIconCol\":\"CreditItemDetails_arrowIconCol__1OBSb\",\"arrowDown\":\"CreditItemDetails_arrowDown__22JQq\",\"arrowRight\":\"CreditItemDetails_arrowRight__2rvyV\",\"arrowIconContainer\":\"CreditItemDetails_arrowIconContainer__2Hw0b\",\"arrowIcon\":\"CreditItemDetails_arrowIcon__1s0an\",\"cohortRow\":\"CreditItemDetails_cohortRow__2dJ-S\",\"cohortItem\":\"CreditItemDetails_cohortItem__3wrOe\",\"additionalDetailsItem\":\"CreditItemDetails_additionalDetailsItem__2sLAn\",\"infoFilledIcon\":\"CreditItemDetails_infoFilledIcon__3wXDb\",\"hidden\":\"CreditItemDetails_hidden__Pk4sn\",\"targetSubjectExternalLink\":\"CreditItemDetails_targetSubjectExternalLink__3FAOL\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"mobileCreditItemDetailContainer\":\"CreditItem_mobileCreditItemDetailContainer__32iv0\",\"mobileArrowDown\":\"CreditItem_mobileArrowDown__3wrKV\",\"mobileHeart\":\"CreditItem_mobileHeart__26CpB\",\"sourceSideContainer\":\"CreditItem_sourceSideContainer__3zkK5\",\"targetSideContainer\":\"CreditItem_targetSideContainer__3oyrw\",\"topTitle\":\"CreditItem_topTitle__10i5F\",\"bottomDescription\":\"CreditItem_bottomDescription__877bi\",\"bottomDescriptionNoMarginTop\":\"CreditItem_bottomDescriptionNoMarginTop__2phe0\",\"iconStyle\":\"CreditItem_iconStyle__2gemI\",\"heartIconContainer\":\"CreditItem_heartIconContainer__KWeud\",\"heartIcon\":\"CreditItem_heartIcon__3rPvS\",\"heartIconOutline\":\"CreditItem_heartIconOutline__3H9DK\",\"targetSubjectExternalLinkIcon\":\"CreditItem_targetSubjectExternalLinkIcon__faoOO\",\"creditPointsContainer\":\"CreditItem_creditPointsContainer__3XT8A\",\"creditPoints\":\"CreditItem_creditPoints__SU2nO\",\"inlineIcon\":\"CreditItem_inlineIcon__3ZgAV\",\"cohortRow\":\"CreditItem_cohortRow__2DLR1\",\"cohort\":\"CreditItem_cohort__2wNLQ\",\"additionalDetails\":\"CreditItem_additionalDetails__3AHtB\",\"infoFilledIcon\":\"CreditItem_infoFilledIcon__Ft-Sq\",\"caption\":\"CreditItem_caption__2BbQ1\",\"targetSubjectRow\":\"CreditItem_targetSubjectRow__13xis\",\"creditItemBlockFooter\":\"CreditItem_creditItemBlockFooter__1ljB1\",\"articulationDetailsMarkupContent\":\"CreditItem_articulationDetailsMarkupContent__Rjerl\",\"clearButton\":\"CreditItem_clearButton__14nh4\"};","var _desc, _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgBuilding(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"14px\",\n height: \"17px\",\n viewBox: \"0 0 14 17\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"building\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Screens\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"xl-landing-institutions-list\",\n transform: \"translate(-427.000000, -506.000000)\",\n fill: \"#637381\",\n fillRule: \"nonzero\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"dropdown\",\n transform: \"translate(405.000000, 337.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"building\",\n transform: \"translate(22.000000, 169.000000)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.2983871,15.9032258 L12.2016129,15.9032258 L12.2016129,2.46774194 C12.2016129,2.16489516 11.9561069,1.91935484 11.6532258,1.91935484 L7.54032258,1.91935484 L7.54032258,0.548387097 C7.54032258,0.245540323 7.29481653,0 6.99193548,0 L3.1875,0 C2.88465323,0 2.6391129,0.245540323 2.6391129,0.548387097 L2.6391129,1.91935484 L2.19354839,1.91935484 C1.89070161,1.91935484 1.64516129,2.16489516 1.64516129,2.46774194 L1.64516129,15.9032258 L0.548387097,15.9032258 C0.245540323,15.9032258 0,16.1487661 0,16.4516129 C0,16.7544597 0.245540323,17 0.548387097,17 L13.2983871,17 C13.6012681,17 13.8467742,16.7544597 13.8467742,16.4516129 C13.8467742,16.1487661 13.6012681,15.9032258 13.2983871,15.9032258 Z M3.7358871,1.09677419 L6.44354839,1.09677419 L6.44354839,1.91935484 L3.7358871,1.91935484 L3.7358871,1.09677419 Z M5.8266129,15.9032258 L5.8266129,13.5725806 L8.02016129,13.5725806 L8.02016129,15.9032258 L5.8266129,15.9032258 Z M9.11693548,15.9032258 L9.11693548,13.5725806 L9.35685484,13.5725806 C9.65973589,13.5725806 9.90524194,13.3270403 9.90524194,13.0241935 C9.90524194,12.7213468 9.65973589,12.4758065 9.35685484,12.4758065 C7.44935887,12.4758065 6.25668548,12.4758065 4.48991935,12.4758065 C4.18707258,12.4758065 3.94153226,12.7213468 3.94153226,13.0241935 C3.94153226,13.3270403 4.18707258,13.5725806 4.48991935,13.5725806 L4.72983871,13.5725806 L4.72983871,15.9032258 L2.74193548,15.9032258 L2.74193548,3.01612903 L11.1048387,3.01612903 L11.1048387,15.9032258 L9.11693548,15.9032258 Z M6.13508065,4.62701613 C6.13508065,4.9298629 5.88954032,5.17540323 5.58669355,5.17540323 L4.96975806,5.17540323 C4.66691129,5.17540323 4.42137097,4.9298629 4.42137097,4.62701613 C4.42137097,4.32416935 4.66691129,4.07862903 4.96975806,4.07862903 L5.58669355,4.07862903 C5.88954032,4.07862903 6.13508065,4.32416935 6.13508065,4.62701613 Z M9.39112903,4.62701613 C9.39112903,4.9298629 9.14562298,5.17540323 8.84274194,5.17540323 L8.22580645,5.17540323 C7.9229254,5.17540323 7.67741935,4.9298629 7.67741935,4.62701613 C7.67741935,4.32416935 7.9229254,4.07862903 8.22580645,4.07862903 L8.84274194,4.07862903 C9.14562298,4.07862903 9.39112903,4.32416935 9.39112903,4.62701613 Z M6.13508065,6.68346774 C6.13508065,6.98631452 5.88954032,7.23185484 5.58669355,7.23185484 L4.96975806,7.23185484 C4.66691129,7.23185484 4.42137097,6.98631452 4.42137097,6.68346774 C4.42137097,6.38062097 4.66691129,6.13508065 4.96975806,6.13508065 L5.58669355,6.13508065 C5.88954032,6.13508065 6.13508065,6.38062097 6.13508065,6.68346774 Z M9.39112903,6.68346774 C9.39112903,6.98631452 9.14562298,7.23185484 8.84274194,7.23185484 L8.22580645,7.23185484 C7.9229254,7.23185484 7.67741935,6.98631452 7.67741935,6.68346774 C7.67741935,6.38062097 7.9229254,6.13508065 8.22580645,6.13508065 L8.84274194,6.13508065 C9.14562298,6.13508065 9.39112903,6.38062097 9.39112903,6.68346774 Z M6.13508065,8.73991935 C6.13508065,9.04276613 5.88954032,9.28830645 5.58669355,9.28830645 L4.96975806,9.28830645 C4.66691129,9.28830645 4.42137097,9.04276613 4.42137097,8.73991935 C4.42137097,8.43707258 4.66691129,8.19153226 4.96975806,8.19153226 L5.58669355,8.19153226 C5.88954032,8.19153226 6.13508065,8.43707258 6.13508065,8.73991935 Z M9.39112903,8.73991935 C9.39112903,9.04276613 9.14562298,9.28830645 8.84274194,9.28830645 L8.22580645,9.28830645 C7.9229254,9.28830645 7.67741935,9.04276613 7.67741935,8.73991935 C7.67741935,8.43707258 7.9229254,8.19153226 8.22580645,8.19153226 L8.84274194,8.19153226 C9.14562298,8.19153226 9.39112903,8.43707258 9.39112903,8.73991935 Z M6.13508065,10.796371 C6.13508065,11.0992177 5.88954032,11.3447581 5.58669355,11.3447581 L4.96975806,11.3447581 C4.66691129,11.3447581 4.42137097,11.0992177 4.42137097,10.796371 C4.42137097,10.4935242 4.66691129,10.2479839 4.96975806,10.2479839 L5.58669355,10.2479839 C5.88954032,10.2479839 6.13508065,10.4935242 6.13508065,10.796371 Z M9.39112903,10.796371 C9.39112903,11.0992177 9.14562298,11.3447581 8.84274194,11.3447581 L8.22580645,11.3447581 C7.9229254,11.3447581 7.67741935,11.0992177 7.67741935,10.796371 C7.67741935,10.4935242 7.9229254,10.2479839 8.22580645,10.2479839 L8.84274194,10.2479839 C9.14562298,10.2479839 9.39112903,10.4935242 9.39112903,10.796371 Z\",\n id: \"Shape\"\n })))))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgBuilding);\nexport default __webpack_public_path__ + \"static/media/building.c8dd8618.svg\";\nexport { ForwardRef as ReactComponent };","import { createSelector } from \"reselect\";\nimport { groupBy, sortBy } from \"lodash\";\n\nexport const getSourceInstitutionsMap = (state) =>\n state.sourceInstitutionState.sourceInstitutions;\n\nexport const getSelectedSourceInstitution = (state) =>\n state.sourceInstitutionState.selectedInstitution;\n\nexport const isFetchingSourceInstitutions = (state) =>\n state.sourceInstitutionState.fetching;\n\nconst getRecentSourceInstitutionIds = (state) =>\n state.sourceInstitutionState.recentInstitutionIDs;\n\nexport const getRecentSourceInstitutions = createSelector(\n getSourceInstitutionsMap,\n getRecentSourceInstitutionIds,\n (sourceInstitutionsMap, recentInstitutionIDs) => {\n return recentInstitutionIDs.map(\n (recentInstitutionId) => sourceInstitutionsMap[recentInstitutionId]\n );\n }\n);\n\nexport const getSourceInstitutionById = (id) => {\n return createSelector(getSourceInstitutionsMap, (sourceInstitutionsMap) => {\n return sourceInstitutionsMap[id];\n });\n};\n\nexport const getSourceInstitutions = createSelector(\n getSourceInstitutionsMap,\n (sourceInstitutionsMap) => {\n return Object.keys(sourceInstitutionsMap).map(\n (id) => sourceInstitutionsMap[id]\n );\n }\n);\n\nexport const getSourceInstitutionsGroupedByCountry = createSelector(\n getSourceInstitutions,\n (sourceInstitutions) => {\n const institutionsMap = {};\n const instGroupedByCountry = groupBy(sourceInstitutions, \"countryName\");\n\n Object.keys(instGroupedByCountry).forEach((countryName) => {\n institutionsMap[countryName] = sortBy(instGroupedByCountry[countryName], [\n (institution) => {\n return (institution.displayName || \"\").toLowerCase();\n },\n ]);\n });\n\n return institutionsMap;\n }\n);\n","import { LoadingOutlined } from \"@ant-design/icons\";\n\nimport React, { Component } from \"react\";\n\nexport default class FullPageSpinner extends Component {\n render() {\n return (\n \n \n \n );\n }\n}\n","export const FETCH_SOURCE_INSTITUTIONS = \"FETCH_SOURCE_INSTITUTIONS\";\nexport const FETCH_SOURCE_INSTITUTIONS_SUCCESS =\n \"FETCH_SOURCE_INSTITUTIONS_SUCCESS\";\nexport const FETCH_SOURCE_INSTITUTIONS_ERROR =\n \"FETCH_SOURCE_INSTITUTIONS_ERROR\";\nexport const SET_SELECTED_INSTITUTION = \"SET_SELECTED_INSTITUTION\";\nexport const SET_RECENT_INSTITUTIONS = \"SET_RECENT_INSTITUTIONS\";\n\nexport const fetchSourceInstitutions = () => {\n return {\n type: FETCH_SOURCE_INSTITUTIONS,\n };\n};\n\nexport const fetchSourceInstitutionsSuccess = (sourceInstitutions) => {\n return {\n type: FETCH_SOURCE_INSTITUTIONS_SUCCESS,\n sourceInstitutions,\n };\n};\n\nexport const fetchSourceInstitutionsError = () => {\n return {\n type: FETCH_SOURCE_INSTITUTIONS_ERROR,\n };\n};\n\nexport const setSelectedInstitution = (institutionID) => {\n return {\n type: SET_SELECTED_INSTITUTION,\n institutionID,\n };\n};\n\nexport const setRecentInstitutions = (institutionIDs) => {\n return {\n type: SET_RECENT_INSTITUTIONS,\n institutionIDs,\n };\n};\n","export const selectUrls = (state) => {\n return state.urlReducer.urls;\n};\n","import React from \"react\";\nimport { Button, Spin } from \"antd\";\nimport { selectUrls } from \"store/custom-url/urlSelector\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\n\nconst ContactButton = ({ urls, style }) => {\n const contactButtonKey = \"contact\";\n const contactData = urls[contactButtonKey];\n if (_.isEmpty(urls) || _.isEmpty(contactData)) return ;\n\n const { url, alt } = contactData;\n\n return (\n \n \n \n );\n};\n\nconst mapStoreToProps = (store) => {\n return {\n urls: selectUrls(store),\n };\n};\n\nexport default connect(mapStoreToProps)(ContactButton);\n","import React from \"react\";\nimport { AutoComplete, Input } from \"antd\";\nimport { isEmpty } from \"lodash\";\nimport { Search, X } from \"react-feather\";\nimport i from \"i18next\";\nimport ContactButton from \"common/ui/button/ContactButton\";\n\nconst InstitutionTypeahead = (props) => {\n // TODO: replace prefix and suffix\n let prefix = ;\n\n if (i.exists(\"common.icons.institution-search-prefix\")) {\n prefix = (\n \n );\n }\n\n const suffix = !isEmpty(props.value) ? (\n {\n props.onClear();\n }}\n />\n ) : null;\n\n const notFoundContent = (\n
\n
\n {i.t(\"home.institutionSearch.notFoundContent.heading\")}\n
\n
\n {i.t(\"home.institutionSearch.notFoundContent.description\")}\n
\n \n \n
\n \n );\n\n return (\n
\n \n \n \n
\n );\n};\n\nexport default InstitutionTypeahead;\n\nconst autoCompleteStyle = {\n width: \"100%\",\n};\n\nconst inputStyle = {\n width: \"100%\",\n // borderRadius: 26,\n height: 52,\n textAlign: \"center\",\n};\n\nconst iconStyle = {\n color: \"#637381\",\n cursor: \"pointer\",\n margin: \"0px 18px\",\n};\n\nconst dropdownStyle = {\n border: \"1px solid #C4CDD5\",\n borderRadius: 3,\n boxShadow: \"0 0 10px 0 rgba(0,0,0,0.1)\",\n fontSize: 16,\n};\n\nconst notFoundContainerStyle = {\n padding: 32,\n color: \"#212B36\",\n};\n\nconst notFoundTitleStyle = {\n fontSize: 20,\n marginBottom: 20,\n};\n","var _desc, _g;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgSearchIllustration(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: \"80px\",\n height: \"80px\",\n viewBox: \"0 0 80 80\",\n xmlns: \"http://www.w3.org/2000/svg\",\n xmlnsXlink: \"http://www.w3.org/1999/xlink\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title === undefined ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, \"search-illustration\") : title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _desc || (_desc = /*#__PURE__*/React.createElement(\"desc\", null, \"Created with Sketch.\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n id: \"Screens\",\n stroke: \"none\",\n strokeWidth: 1,\n fill: \"none\",\n fillRule: \"evenodd\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"xl-landing-default\",\n transform: \"translate(-691.000000, -447.000000)\",\n fill: \"#cccccc\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"info\",\n transform: \"translate(405.000000, 447.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"search-illustration\",\n transform: \"translate(286.000000, 0.000000)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n id: \"Group-3\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.4509107,1.91721133 C13.3716078,1.91721133 1.91714161,13.3716776 1.91714161,27.4509804 C1.91714161,41.5302832 13.3716078,52.9847495 27.4509107,52.9847495 C41.5302135,52.9847495 52.9846797,41.5302832 52.9846797,27.4509804 C52.9846797,13.3716776 41.5302135,1.91721133 27.4509107,1.91721133 L27.4509107,1.91721133 Z M47.6431547,46.0266667 C47.1288192,46.5852723 46.5850283,47.1292375 46.0262484,47.6433987 L45.7588845,47.8894989 L51.1598431,53.2899346 L51.3987974,52.9540741 C51.615268,52.6499346 51.8543965,52.3663617 52.1097342,52.1111983 C52.3662919,51.8548148 52.6502135,51.6153377 52.9540044,51.39939 L53.2900392,51.1604357 L47.8892549,45.7591285 L47.6431547,46.0266667 Z M56.7319564,52.1155556 C55.4969237,52.1155556 54.3370109,52.5953813 53.4657255,53.4666667 C52.5933943,54.3384749 52.1130458,55.4982135 52.1130458,56.7320261 C52.1130458,57.8380828 52.5099085,58.9073638 53.2306057,59.7427451 L53.4756601,60.026841 L60.024854,53.4779956 L59.740061,53.2329412 C58.9025882,52.5124183 57.8341786,52.1155556 56.7319564,52.1155556 L56.7319564,52.1155556 Z M54.8412375,61.3727233 L70.1979259,76.7295861 C71.0704314,77.6022658 72.2303442,78.0827887 73.4639826,78.0827887 C74.6976209,78.0827887 75.8575338,77.6020915 76.7302135,76.7294118 C77.6025447,75.8576035 78.0828932,74.6978649 78.0828932,73.4640523 C78.0828932,72.2300654 77.6023704,71.0703268 76.7300392,70.1981699 L61.3728279,54.8413072 L54.8412375,61.3727233 Z M73.4639826,80 C71.7182745,80 70.076793,79.3199129 68.8419346,78.0850545 L52.1100828,61.3532026 C50.875573,60.1192157 50.1958344,58.4779085 50.1958344,56.7320261 C50.1958344,56.2820044 50.242719,55.8291939 50.3349194,55.3863181 L50.378841,55.1757734 L50.2103007,55.0420915 C50.1820654,55.0196078 50.1545272,54.9959041 50.1282092,54.9695861 L44.2814118,49.122963 L44.0393203,49.3073638 C39.2288627,52.9673203 33.4927407,54.9019608 27.4509107,54.9019608 C12.3143529,54.9019608 -6.97167756e-05,42.5873638 -6.97167756e-05,27.4509804 C-6.97167756e-05,12.3144227 12.3143529,0 27.4509107,0 C42.5874684,0 54.9018911,12.3144227 54.9018911,27.4509804 C54.9018911,33.4926362 52.9672505,39.2285839 49.3072941,44.0390414 L49.1230675,44.2813072 L54.9698649,50.1282789 C54.996183,50.1545969 55.0202353,50.1824837 55.0430675,50.2110675 L55.1765752,50.3787364 L55.3865969,50.3349891 C55.8294728,50.2427887 56.2822832,50.1960784 56.7319564,50.1960784 C58.4776645,50.1960784 60.119146,50.8759913 61.3540044,52.1108497 L78.0858562,68.8427015 C79.320366,70.0768627 80.0001046,71.7179956 80.0001046,73.4640523 C80.0001046,75.2101089 79.320366,76.8510675 78.0860305,78.0850545 C76.8511721,79.3199129 75.2096906,80 73.4639826,80 L73.4639826,80 Z\",\n id: \"Fill-1\"\n })), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.4509107,7.49455338 C16.4468148,7.49455338 7.49448366,16.4468845 7.49448366,27.4509804 C7.49448366,38.454902 16.4468148,47.4074074 27.4509107,47.4074074 C38.4550065,47.4074074 47.4073377,38.454902 47.4073377,27.4509804 C47.4073377,16.4468845 38.4550065,7.49455338 27.4509107,7.49455338 M27.4509107,49.3246187 C15.3897342,49.3246187 5.57727233,39.5121569 5.57727233,27.4509804 C5.57727233,15.3898039 15.3897342,5.57734205 27.4509107,5.57734205 C39.5120871,5.57734205 49.324549,15.3898039 49.324549,27.4509804 C49.324549,39.5121569 39.5120871,49.3246187 27.4509107,49.3246187\",\n id: \"Fill-4\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M15.6201656,38.1701961 C15.3329325,38.1701961 15.0631285,38.0433115 14.8802963,37.8219608 C12.4780305,34.9132026 11.1548061,31.2300654 11.1548061,27.4512418 C11.1546318,21.9202614 13.9244793,16.8128105 18.564305,13.7888453 C18.7206449,13.6868845 18.9012113,13.6330283 19.086658,13.6330283 C19.4125839,13.6330283 19.7130632,13.795817 19.8906667,14.0684096 C20.0306231,14.282963 20.0785534,14.5391721 20.0255686,14.7896296 C19.9729325,15.0402614 19.8256558,15.2551634 19.6111024,15.3949455 C15.5164619,18.0633551 13.0720174,22.5703704 13.0720174,27.4510675 C13.0720174,30.7854466 14.2392505,34.0349455 16.3586405,36.60122 C16.5217778,36.7986928 16.5981176,37.047756 16.5738911,37.3025708 C16.5494902,37.5573856 16.4274858,37.7877996 16.2298388,37.9507625 C16.056244,38.0943791 15.8453508,38.1701961 15.6201656,38.1701961\",\n id: \"Fill-6\"\n })))))));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgSearchIllustration);\nexport default __webpack_public_path__ + \"static/media/search-illustration.2e376f8b.svg\";\nexport { ForwardRef as ReactComponent };","import React, { useCallback, useEffect, useState } from \"react\";\nimport i from \"i18next\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport {\n getRecentSourceInstitutions,\n getSelectedSourceInstitution,\n getSourceInstitutionsGroupedByCountry,\n} from \"store/source-institution/sourceInstitutionSelector\";\nimport { setSelectedInstitution } from \"store/source-institution/sourceInstitutionAction\";\nimport InstitutionTypeahead from \"./InstitutionTypeahead\";\nimport { ReactComponent as Building } from \"common/ui/icons/building.svg\";\nimport { Clock } from \"react-feather\";\nimport { isEmpty, keys, reduce } from \"lodash\";\nimport { Typography } from \"antd\";\n\nconst { Paragraph } = Typography;\n\nconst buildFilter = (query) => (institution) => {\n if (!query) return true;\n if (!institution) return false;\n const fields = [institution.displayName, institution.countryName];\n return fields.some((field) => field.toLowerCase().indexOf(query) >= 0);\n};\n\nconst isRecent = (country) => country === \"RECENT\";\n\nconst getOptions = (query, recents, sources) => {\n const q = query?.toLowerCase() || \"\";\n const r = recents || [];\n const s = sources || {};\n\n let count = 0;\n const countries = isEmpty(r) ? s : { RECENT: r, ...s };\n const options = reduce(\n keys(countries),\n (result, country) => {\n const institutions = (countries[country] || []).filter(buildFilter(q));\n if (!isEmpty(institutions)) {\n result[country] = institutions;\n if (!isRecent(country)) {\n count += institutions.length;\n }\n }\n return result;\n },\n {},\n );\n\n return { options, count };\n};\n\nconst display = (options, mobile) => {\n const items = (institutions, recent = false) => {\n const style = {\n marginRight: 17,\n position: \"relative\",\n top: 3,\n color: \"#637381\",\n };\n\n let recentIcon = ;\n let defaultIcon = ;\n\n const recentPath = \"common.icons.institution-search-dropdown-item-recent\";\n\n const defaultPath = \"common.icons.institution-search-dropdown-item\";\n if (i.exists(recentPath)) {\n recentIcon = (\n \n );\n }\n if (i.exists(defaultPath)) {\n defaultIcon = (\n \n );\n }\n\n return institutions.map((institution) => {\n const value = (recent ? \"recent-\" : \"\") + institution?.ID;\n const label = (\n
\n {!mobile &&
{recent ? recentIcon : defaultIcon}
}\n
\n \n {institution?.displayName}\n {recent ? (\n \n {institution?.countryName}\n \n ) : null}\n \n
\n
\n );\n return { key: value, value, label };\n });\n };\n\n return keys(options).map((country) => {\n const institutions = options[country];\n return {\n key: country,\n label: {country.toUpperCase()},\n options: items(institutions, isRecent(country)),\n };\n });\n};\n\nconst InstitutionSearch = ({ isMobile }) => {\n // dispatch\n const dispatch = useDispatch();\n // redux\n const sources = useSelector((state) =>\n getSourceInstitutionsGroupedByCountry(state),\n );\n const recents = useSelector((state) => getRecentSourceInstitutions(state));\n const selected = useSelector((state) => getSelectedSourceInstitution(state));\n // state\n const [query, setQuery] = useState(\"\");\n const [searching, setSearching] = useState(false);\n const [values, setValues] = useState(getOptions(query, recents, sources));\n // actions\n const select = useCallback(\n (id) => dispatch(setSelectedInstitution(id)),\n [dispatch],\n );\n\n const onSelect = useCallback(\n (id, option) => {\n const name =\n option.label.props.children[1].props.children.props.children[0];\n const recent = id.includes(\"recent\");\n const identifier = recent ? id.split(\"-\")[1] : id;\n setQuery(name);\n select(identifier);\n },\n [select],\n );\n\n const onChange = useCallback(\n (value) => {\n if (searching) {\n setQuery(value);\n }\n },\n [searching],\n );\n\n const onBlur = useCallback(() => {\n const value = selected?.displayName || \"\";\n setQuery(value);\n setSearching(false);\n }, [selected]);\n\n const onFocus = useCallback(() => setSearching(true), []);\n\n const onClear = useCallback(() => {\n select(null);\n setQuery(\"\");\n }, [select]);\n\n // effects\n // update options etc if query, recents or sources changes.\n useEffect(\n () => setValues(getOptions(query, recents, sources)),\n [query, recents, sources],\n );\n\n const { options } = values;\n const rendered = display(options, isMobile);\n const value = searching ? query : selected?.displayName || \"\";\n\n return (\n \n );\n};\n\nexport default InstitutionSearch;\n","import React from \"react\";\nimport i from \"i18next\";\nimport { Input } from \"antd\";\nimport { BookOpen, X } from \"react-feather\";\nimport { isEmpty } from \"lodash\";\nimport classes from \"../SearchStyles.modules.scss\";\n\nconst CourseSearchInput = (props) => {\n let prefix = ;\n\n if (i.exists(\"common.icons.course-search-prefix\")) {\n prefix = (\n \n );\n }\n\n const suffix = !isEmpty(props.value) ? (\n \n ) : null;\n\n return (\n \n );\n};\n\nexport default CourseSearchInput;\n\nconst inputStyle = {\n width: \"100%\",\n // borderRadius: 26,\n height: 52,\n};\n\nconst iconStyle = {\n color: \"#637381\",\n cursor: \"pointer\",\n margin: \"0px 18px\",\n};\n","import { createSelector } from 'reselect';\n\nconst searchTabSelector = (state) => state.searchState.searchTab;\n\nconst searchTermSelector = (state) => state.searchState.searchTerm;\n\nexport const getSearchTab = createSelector(\n searchTabSelector,\n (searchTab) => searchTab\n);\n\nexport const getSearchTerm = createSelector(\n searchTermSelector,\n (searchTerm) => searchTerm\n);\n","export const SET_SEARCH_TAB = 'SET_CURRENT_SEARCH_TAB';\nexport const SET_SEARCH_TERM = 'SET_SEARCH_TERM';\n\nexport const setSearchTab = (creditType) => {\n return {\n type: SET_SEARCH_TAB,\n searchTab: creditType,\n };\n};\n\nexport const setSearchTerm = (searchTerm) => {\n return {\n type: SET_SEARCH_TERM,\n searchTerm,\n };\n};\n","import React from \"react\";\nimport { Row, Col } from \"antd\";\nimport classes from \"./SearchContainer.module.scss\";\nimport InstitutionSearch from \"components/forms/institution-typeahead/InstitutionSearch\";\nimport i from \"i18next\";\n\n// additional elements\nimport CourseSearchInput from \"components/forms/course-search-input/CourseSearchInput\";\nimport { getSearchTerm, getSearchTab } from \"store/search/searchSelector\";\nimport { setSearchTerm, setSearchTab } from \"store/search/searchAction\";\nimport { connect } from \"react-redux\";\n\nclass SearchContainer extends React.Component {\n render() {\n const { searchTerm } = this.props;\n\n const description =\n i.t(\"home.searchDescription\", {\n returnObjects: true,\n }) || [];\n return (\n \n \n \n \n \n {i.t(\"home.searchTitle\")}\n \n
\n {description.map((description) => (\n

{`${description} `}

\n ))}\n
\n \n\n \n \n \n \n );\n }\n\n onCourseSearchInputChange = (event) => {\n this.props.onSetSearchTerm(event.target.value);\n };\n\n onCourseSearchInputClear = () => {\n this.props.onSetSearchTerm(\"\");\n };\n}\n\nconst mapStateToProps = (state) => {\n return {\n searchTerm: getSearchTerm(state),\n searchTab: getSearchTab(state),\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n onSetSearchTerm: (searchTerm) => dispatch(setSearchTerm(searchTerm)),\n onSetSearchTab: (creditType) => dispatch(setSearchTab(creditType)),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SearchContainer);\n","var _path;\n\nvar _excluded = [\"title\", \"titleId\"];\n\nfunction _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport * as React from \"react\";\n\nfunction SvgFaInfoCircle(_ref, svgRef) {\n var title = _ref.title,\n titleId = _ref.titleId,\n props = _objectWithoutProperties(_ref, _excluded);\n\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 512 512\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z\"\n })));\n}\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(SvgFaInfoCircle);\nexport default __webpack_public_path__ + \"static/media/fa-info-circle.3f317f8b.svg\";\nexport { ForwardRef as ReactComponent };","import React from \"react\";\nimport { ReactComponent as SearchIllustration } from \"common/ui/icons/search-illustration.svg\";\nimport classes from \"./ResultNotFound.module.scss\";\nimport ContactButton from \"common/ui/button/ContactButton\";\n\nconst ResultNotFound = () => {\n return (\n
\n \n
\n No results found?\n
\n
\n

\n Use the tabs above to see more results or try different search terms.\n

\n

\n If you still can’t find any results, contact us to discuss your credit\n options.\n

\n \n
\n
\n );\n};\n\nexport default ResultNotFound;\n","import React from \"react\";\nimport { Card as AntCard } from \"antd\";\n\nconst Card = (props) => {\n const customHeadStyle = getIsDefault(props)\n ? headStyle\n : { ...headStyle, backgroundColor: \"#F8F9FA\" };\n\n const bodyStyle = getIsZeroPadding(props) ? { padding: 0 } : {};\n\n return (\n \n {props.children}\n \n );\n};\n\nconst getIsDefault = (props) => {\n return props.default !== undefined ? props.default : false;\n};\n\nconst getIsZeroPadding = (props) => {\n return props.zeroPadding !== undefined ? props.zeroPadding : false;\n};\n\nexport default Card;\n\nconst borderColor = \"#C4CDD5\";\nconst bordrerRadius = 6;\n\nconst cardStyle = {\n borderRadius: bordrerRadius,\n borderColor: borderColor,\n padding: 0,\n};\n\nconst headStyle = {\n borderTopRightRadius: 6,\n borderTopLeftRadius: 6,\n borderBottomColor: borderColor,\n};\n","export const CREDIT_TYPES = {\n ARTICULATION: \"ARTICULATION\",\n PRECEDENT: \"PRECEDENT\",\n};\n\nexport const ARTICULATION_TYPES = {\n INTERNAL: \"INTERNAL\",\n EXTERNAL: \"EXTERNAL\",\n OFFSHORE: \"OFFSHORE\",\n};\n\nexport const ARTICULATION_SUBTYPES = {\n DOMESTIC: \"DOMESTIC\",\n INTERNATIONAL: \"INTERNATIONAL\",\n};\n\nexport const SUBJECT_TYPES = {\n SOURCE: \"SOURCE\",\n TARGET: \"TARGET\",\n};\n","import { CREDIT_TYPES } from \"common/model/creditType\";\n\nexport const getTotalCreditPoints = (creditItem) => {\n if (!creditItem) {\n return 0;\n }\n if (creditItem.arrangements) {\n // Case for Articulation\n return creditItem.arrangements.reduce(\n (total, arrangement) =>\n total + arrangement.specified + arrangement.unspecified,\n 0,\n );\n } else if (creditItem.subjects) {\n // Case for Precedent\n return creditItem.subjects.reduce(\n (total, subject) => total + subject.creditPoints,\n 0,\n );\n }\n};\n\nexport const isCreditItemExistsInBookmarks = (\n creditBookMarks,\n sourceInstitutionID,\n creditItemID,\n creditType,\n) => {\n if (!creditBookMarks) {\n return false;\n }\n\n const creditItems = creditBookMarks[sourceInstitutionID] || [];\n return creditItems.some(\n (creditItem) =>\n creditItem.creditItemID === creditItemID &&\n creditItem.creditType === creditType,\n );\n};\n\nexport const isArticulation = (creditType) => {\n return CREDIT_TYPES.ARTICULATION === creditType;\n};\n\nexport const isPrecedent = (creditType) => {\n return CREDIT_TYPES.PRECEDENT === creditType;\n};\n","import React, { Fragment } from \"react\";\n\nconst SubjectDetailList = (props) => {\n const subjects = props.subjects || [];\n\n return subjects.map((subject, index, array) => {\n return (\n \n \n {subject.name}{\" \"}\n {subject.type === \"UNSPECIFIED\" ? null : (\n <>\n ·{\" \"}\n \n {subject.ID}\n \n \n )}\n \n {index < array.length - 1 && array.length !== 1 && (\n
\n AND\n
\n )}\n
\n );\n });\n};\n\nexport default SubjectDetailList;\n","export const FETCH_CREDIT_BOOKMARKS = 'FETCH_CREDIT_BOOKMARK';\nexport const ADD_CREDIT_TO_BOOKMARK_ACTION = 'ADD_CREDIT_TO_BOOKMARK_ACTION';\nexport const REMOVE_CREDIT_FROM_BOOKMARK_ACTION =\n 'REMOVE_CREDIT_FROM_BOOKMARK_ACTION';\n\nexport const fetchCreditBookmarks = () => {\n return {\n type: FETCH_CREDIT_BOOKMARKS,\n };\n};\n\nexport const addCreditToBookmark = (\n sourceInstitutionID,\n creditItemID,\n creditType,\n timestamp,\n) => {\n return {\n type: ADD_CREDIT_TO_BOOKMARK_ACTION,\n sourceInstitutionID,\n creditItemID,\n creditType,\n timestamp,\n };\n};\n\nexport const removeCreditFromBookmark = (\n sourceInstitutionID,\n creditItemID,\n creditType,\n) => {\n return {\n type: REMOVE_CREDIT_FROM_BOOKMARK_ACTION,\n sourceInstitutionID,\n creditItemID,\n creditType,\n };\n};\n","import React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport Card from \"common/ui/card/Card\";\nimport { Row, Col, Tooltip } from \"antd\";\nimport { ArrowRight, Heart, ArrowDown } from \"react-feather\";\nimport { withRouter } from \"react-router-dom\";\nimport i from \"i18next\";\n\nimport classes from \"./CreditItem.module.scss\";\nimport {\n getTotalCreditPoints,\n isCreditItemExistsInBookmarks,\n isArticulation,\n} from \"utils/creditUtils\";\nimport SubjectDetailList from \"./SubjectDetailList\";\nimport {\n addCreditToBookmark,\n removeCreditFromBookmark,\n} from \"store/credit-bookmark/creditBookmarkAction\";\nimport { SUBJECT_TYPES } from \"common/model/creditType\";\nimport { get, isEmpty } from \"lodash\";\n\nconst sortItemBlocksByCreditPointsTargetName = (a, b) => {\n const sumReducer = (acc, curr) => {\n return acc + curr.specified + curr.unspecified;\n };\n const aTotal = a.arrangements.reduce(sumReducer, 0);\n const bTotal = b.arrangements.reduce(sumReducer, 0);\n if (aTotal !== bTotal) {\n return bTotal - aTotal;\n } else {\n const aName = a.course && a.course.name ? a.course.name : \"\";\n const bName = b.course && b.course.name ? b.course.name : \"\";\n return aName.localeCompare(bName);\n }\n};\n\nconst CreditItem = (props) => {\n const creditType = props.creditType;\n const isCreditArticulation = isArticulation(creditType);\n const selectedSourceInstitution = props.selectedSourceInstitution || {};\n const creditBookmarks = props.creditBookmarks;\n const isMobile = props.isMobile;\n const unsortedItemBlocks = props.itemBlocks || [];\n const itemBlocks = unsortedItemBlocks.sort(\n sortItemBlocksByCreditPointsTargetName,\n );\n // for mobile\n\n const {\n metadata: { timestamp },\n } = useSelector((state) => state.metadataState);\n const dispatch = useDispatch();\n\n const handleClick = (event, clickedBlock) => {\n const targetTagType = event.target.tagName.toLowerCase();\n const parentTagType =\n event.target.parentElement &&\n event.target.parentElement.tagName.toLowerCase();\n const disableGoto = targetTagType === \"a\" || parentTagType === \"a\";\n if (disableGoto) {\n event.stopPropagation();\n } else {\n if (!isEmpty(clickedBlock) && clickedBlock.ID) {\n goToCreditItemDetails(clickedBlock.ID);\n } else {\n goToCreditItemDetails(clickedBlock.ID);\n }\n }\n };\n\n const goToCreditItemDetails = (creditItemID) => {\n props.history.push(`/details/${creditType.toLowerCase()}/${creditItemID}`);\n };\n\n const addCreditItemToBookmark = (creditItemID) => {\n //Add timestamp\n dispatch(\n addCreditToBookmark(\n selectedSourceInstitution.ID,\n creditItemID,\n creditType,\n timestamp,\n ),\n );\n };\n\n const removeCreditItemFromBookmark = (creditItemID) => {\n dispatch(\n removeCreditFromBookmark(\n selectedSourceInstitution.ID,\n creditItemID,\n creditType,\n ),\n );\n };\n\n const getTargetSubjectContentMarkup = (itemBlock) => {\n if (isCreditArticulation) {\n const displayName = get(itemBlock, \"course.name\", \"\");\n const courseUrl = get(itemBlock, \"course.url\", null);\n const displayNameMarkup = {displayName};\n return (\n
\n {courseUrl ? (\n \n \n {displayNameMarkup}\n \n \n \n ) : (\n displayNameMarkup\n )}\n
\n );\n }\n\n return ;\n };\n\n const getSourceSubjectContentMarkup = (itemBlock) => {\n if (isCreditArticulation) {\n // [ {itemBlocks[0]?.credentials[0]?.data?.unitCode}]\n // TODO need to add previous qual name for source\n if (itemBlock.credentials.length === 1) {\n const displayName = itemBlock.credentials[0].data.unitName;\n return (\n \n {displayName} [{itemBlock.credentials[0]?.data?.unitCode}]\n \n );\n } else {\n return (\n
\n {itemBlock.credentials.map((cred, i) => {\n const displayName = cred.data.unitName;\n const last = i === itemBlock.credentials.length - 1;\n return (\n
\n
\n {displayName}\n
\n {last ? null : (\n \n AND\n
\n )}\n
\n );\n })}\n \n );\n }\n }\n const subjects = itemBlock?.credentials?.map((credential) => ({\n ID: credential.data.unitCode,\n name: credential.data.unitName,\n }));\n return ;\n };\n\n const getCohortContentMarkup = (itemBlock, subjectType) => {\n if (!isCreditArticulation) {\n return null;\n }\n const cohorts =\n subjectType === SUBJECT_TYPES.SOURCE\n ? get(itemBlock, \"credentials[0].data.cohorts\", [])\n : get(itemBlock, \"course.cohorts\", []);\n if (cohorts.length === 0) {\n return null;\n }\n return (\n
\n For:\n {cohorts.map((cohort) => {\n const label = i.t(`common.cohorts.${cohort}.label`);\n const icon = i.t(`common.cohorts.${cohort}.icon`);\n const alt = i.t(`common.cohorts.${cohort}.alt`);\n const filter = i.t(`common.cohorts.${cohort}.filter`);\n if (!(label || icon || alt || filter)) {\n return null;\n }\n return (\n \n \n {label}\n
\n );\n })}\n \n );\n };\n\n const AdditionalDetailsLabel = ({ itemBlock }) => {\n const creditPoints = getTotalCreditPoints(itemBlock);\n let additionalDetailsLabel;\n if (\n itemBlock.guaranteedEntry &&\n !itemBlock.admissionCriteria &&\n creditPoints === 0\n ) {\n additionalDetailsLabel = \"Guaranteed entry only!\";\n } else if (!itemBlock.guaranteedEntry && itemBlock.admissionCriteria) {\n additionalDetailsLabel = \"Admission criteria applies\";\n }\n if (!additionalDetailsLabel) {\n return null;\n } else {\n return (\n
\n \n
\n {additionalDetailsLabel}\n
\n
\n );\n }\n };\n\n const getArticulationDetailsMarkupContent = (\n itemBlock,\n creditItemExistsInBookmark,\n ) => {\n const creditPoints = getTotalCreditPoints(itemBlock);\n\n return (\n
\n
\n {creditPoints > 0 && (\n \n {creditPoints}\n
\n Credit points\n
\n
\n )}\n
\n
\n
\n \n {creditItemExistsInBookmark ? \"Remove from saved\" : \"Save\"}\n \n }\n >\n \n !creditItemExistsInBookmark\n ? addCreditItemToBookmark(itemBlock.ID)\n : removeCreditItemFromBookmark(itemBlock.ID)\n }\n />\n \n
\n
\n \n );\n };\n\n const getCricosCodeMarkup = (itemBlock) => {\n const cricosCodes = get(itemBlock, \"course.cricosCodes\", []);\n if (cricosCodes.length === 0) {\n return null;\n }\n const cricosString = `CRICOS: ${itemBlock.course.cricosCodes.join(\", \")}`;\n return (\n \n {cricosString}\n \n );\n };\n\n if (isMobile) {\n return (\n
\n {itemBlocks.map((itemBlock, index) => {\n const itemExistsInBookmarks = isCreditItemExistsInBookmarks(\n creditBookmarks,\n selectedSourceInstitution.ID,\n itemBlock.ID,\n creditType,\n );\n return (\n
\n \n handleClick(event, itemBlock)}\n >\n
{getSourceSubjectContentMarkup(itemBlocks[0])}
\n \n {selectedSourceInstitution?.displayName}\n
\n {getCohortContentMarkup(itemBlock, SUBJECT_TYPES.SOURCE)}\n
\n \n
\n
{getTargetSubjectContentMarkup(itemBlock)}
\n \n {i.t(\"institution\")}\n
\n \n \n
\n \n !itemExistsInBookmarks\n ? addCreditItemToBookmark(itemBlock.ID)\n : removeCreditItemFromBookmark(itemBlock.ID)\n }\n />\n
\n \n \n \n );\n })}\n \n );\n }\n return (\n \n
\n \n \n
\n
\n {getSourceSubjectContentMarkup(itemBlocks[0])}\n
\n \n {selectedSourceInstitution?.displayName}\n
\n
\n {getCohortContentMarkup(itemBlocks[0], SUBJECT_TYPES.SOURCE)}\n
\n
\n \n \n {itemBlocks.map((itemBlock) => {\n const creditItemExistsInBookmark = isCreditItemExistsInBookmarks(\n creditBookmarks,\n selectedSourceInstitution.ID,\n itemBlock.ID,\n creditType,\n );\n return (\n \n \n \n \n \n {/* adding div here for easier reading */}\n
\n \n handleClick(event, itemBlock)}\n >\n {getTargetSubjectContentMarkup(itemBlock)}\n \n {i.t(\"institution\")}\n
\n {getCricosCodeMarkup(itemBlock)}\n \n \n {getArticulationDetailsMarkupContent(\n itemBlock,\n creditItemExistsInBookmark,\n )}\n \n \n
\n
\n {getCohortContentMarkup(\n itemBlock,\n SUBJECT_TYPES.TARGET,\n )}\n
\n \n
\n \n \n \n );\n })}\n \n \n \n
\n );\n};\n\nexport default withRouter(CreditItem);\n","import React from \"react\";\nimport CreditItem from \"./CreditItem\";\nimport { CREDIT_TYPES } from \"common/model/creditType\";\n\nexport const ArticulationCreditList = (props) => {\n const groupedArticulations = props.groupedArticulations || {};\n const articulationKeys = Object.keys(groupedArticulations) || [];\n const creditBookmarks = props.creditBookmarks;\n // const articulations = props.articulations || [];\n // console.log(articulationKeys);\n // console.log(groupedArticulations);\n const isMobile = props.isMobile;\n if (isMobile) {\n return articulationKeys.map((articulation) => {\n return (\n \n );\n });\n }\n\n return articulationKeys.map((articulationKey) => {\n return (\n \n \n \n );\n });\n};\n\nexport const PrecedentCreditList = (props) => {\n const precedents = props.precedents || [];\n const creditBookmarks = props.creditBookmarks;\n const isMobile = props.isMobile;\n\n if (isMobile) {\n return precedents.map((precedent) => (\n \n ));\n }\n return precedents.map((precedent) => {\n return (\n
\n \n
\n );\n });\n};\n","import React from \"react\";\nimport { Tabs, Tooltip } from \"antd\";\nimport { isArray } from \"lodash\";\nimport i from \"i18next\";\nimport ResultNotFound from \"./ResultNotFound\";\nimport classes from \"./SearchResultTab.module.scss\";\nimport {\n ArticulationCreditList,\n PrecedentCreditList,\n} from \"components/credits/CreditList\";\nimport { CREDIT_TYPES } from \"common/model/creditType\";\nimport { StickyContainer, Sticky } from \"react-sticky\";\n\nimport { ReactComponent as Info } from \"common/ui/icons/fa-info-circle.svg\";\nimport { EllipsisOutlined } from \"@ant-design/icons\";\nconst { TabPane } = Tabs;\n\nconst SearchResultTab = (props) => {\n const {\n numberOfArticulations,\n numberOfPrecedents,\n groupedArticulations,\n articulations,\n precedents,\n selectedSourceInstitution,\n creditBookmarks,\n isMobile,\n activeTab,\n } = props;\n\n const resultNotFoundContent = (\n
\n \n
\n );\n\n const articulationTooltipContent = i.t(\n \"home.searchResultTab.viewArticulationsTab.tooltip\",\n {\n returnObjects: true,\n },\n );\n const precedentTooltipContent = i.t(\n \"home.searchResultTab.viewPrecedentsTab.tooltip\",\n {\n returnObjects: true,\n },\n );\n\n let articulationTooltips = null;\n let precedentTooltips = null;\n if (isArray(articulationTooltipContent)) {\n articulationTooltips = (\n \n {articulationTooltipContent.map((li, i) => (\n
{li}
\n ))}\n \n }\n placement=\"right\"\n >\n \n \n );\n }\n if (isArray(precedentTooltipContent)) {\n precedentTooltips = (\n \n {precedentTooltipContent.map((li, i) => (\n
{li}
\n ))}\n \n }\n placement=\"right\"\n >\n \n \n );\n }\n\n const renderTabBar = (props, DefaultTabBar) => {\n return (\n \n {({ style, distanceFromTop }) => {\n let top = 0;\n let width = undefined;\n // let backgroundColor = style.background || style.backgroundColor;\n let position = \"static\";\n const headerHeight =\n document.getElementById(\"custom-header\").offsetHeight;\n if (isMobile) {\n top = headerHeight;\n width = \"100vw\";\n if (distanceFromTop <= top) {\n position = \"fixed\";\n }\n } else {\n if (distanceFromTop <= top) {\n top += headerHeight;\n position = \"fixed\";\n width = style.width;\n }\n }\n const defaultTabBarStyle = {\n ...style,\n display: \"flex\",\n justifyContent: \"center\",\n margin: 0,\n zIndex: 1,\n backgroundColor: \"white\",\n position,\n top,\n width,\n };\n return ;\n }}\n \n );\n };\n\n const tabs = (\n }\n >\n \n }\n key={CREDIT_TYPES.ARTICULATION}\n className={classes.tabpane}\n >\n
\n \n {i.t(\"home.searchResultTab.viewArticulationsTab.description\")}\n {articulationTooltips}\n \n
\n {activeTab === CREDIT_TYPES.ARTICULATION && (\n <>\n {numberOfArticulations === 0 ? (\n resultNotFoundContent\n ) : (\n
\n \n
\n )}\n \n )}\n \n\n \n }\n key={CREDIT_TYPES.PRECEDENT}\n className={classes.tabpane}\n >\n
\n \n {i.t(\"home.searchResultTab.viewPrecedentsTab.description\")}\n {precedentTooltips}\n \n
\n {activeTab === CREDIT_TYPES.PRECEDENT && (\n <>\n {numberOfPrecedents === 0 ? (\n resultNotFoundContent\n ) : (\n
\n \n
\n )}\n \n )}\n \n \n );\n\n return (\n
\n {tabs}\n
\n );\n};\n\nexport default SearchResultTab;\n\nconst TabPaneTab = ({ title, numberOfResults, iconPath }) => {\n let prefix = null;\n if (i.exists(iconPath)) {\n prefix = (\n \n );\n }\n return (\n \n {prefix}\n {title}\n \n {numberOfResults}\n \n \n );\n};\n","import React from \"react\";\nimport { Row, Col } from \"antd\";\nimport { connect } from \"react-redux\";\nimport { get } from \"lodash\";\nimport SearchResultTab from \"./SearchResultTab\";\nimport { getSearchTerm, getSearchTab } from \"store/search/searchSelector\";\nimport { setSearchTerm, setSearchTab } from \"store/search/searchAction\";\nimport classes from \"./SearchResult.module.scss\";\n\nclass SearchResult extends React.Component {\n render() {\n const {\n selectedSourceInstitution,\n creditArrangements,\n creditBookmarks,\n isMobile,\n searchTab,\n } = this.props;\n\n const articulations = get(creditArrangements, \"articulations\", []);\n const precedents = get(creditArrangements, \"precedents\", []);\n\n const filteredArticulations = this.getFilteredArticulations(articulations);\n const filteredPrecedents = this.getFilteredPrecedents(precedents);\n\n const numberOfArticulations = filteredArticulations.length || 0;\n const numberOfPrecedents = filteredPrecedents.length || 0;\n const groupedArticulations = this.getArticulationsGroupedBySourceCourse(\n filteredArticulations,\n );\n\n return (\n
\n \n \n \n \n \n \n
\n );\n }\n\n onTabChange = (tabKey) => {\n this.props.onSetSearchTab(tabKey);\n };\n\n onCourseSearchInputChange = (event) => {\n this.props.onSetSearchTerm(event.target.value);\n };\n\n onCourseSearchInputClear = () => {\n this.props.onSetSearchTerm(\"\");\n };\n\n getFilteredArticulations = (articulations) => {\n const searchTerm = (this.props.searchTerm || \"\").trim().toLowerCase();\n const filteredArticulations = articulations.filter((articulation) => {\n const sourceMatched = articulation.arrangements.some((arrangement) => {\n const sourceSubjectMatched = articulation.credentials.some(\n (credential) => {\n const displayName = credential.data.unitName || \"\";\n const displayCode = credential.data.unitCode || \"\";\n return (\n displayName.toLowerCase().includes(searchTerm) ||\n displayCode.toLowerCase().includes(searchTerm)\n );\n },\n );\n const targetSubjectMatched = arrangement.subjects.some((subject) => {\n const displayName = subject.name || \"\";\n const displayCode = subject.ID || \"\";\n return (\n displayName.toLowerCase().includes(searchTerm) ||\n displayCode.toLowerCase().includes(searchTerm)\n );\n });\n // const articulationCricosMatched -\n\n return sourceSubjectMatched || targetSubjectMatched;\n });\n\n const targetMatched =\n articulation.course.name.includes(searchTerm) ||\n articulation.course.ID.includes(searchTerm) ||\n articulation.course.cricosCodes.some((code) =>\n code.toLowerCase().includes(searchTerm),\n );\n return sourceMatched || targetMatched;\n });\n return filteredArticulations;\n };\n\n getFilteredPrecedents = (precedents) => {\n const searchTerm = (this.props.searchTerm || \"\").trim().toLowerCase();\n\n const filteredPrecdents = precedents.filter((precedent) => {\n const sourceSubjectMatched = precedent.credentials.some((credential) => {\n const displayName = credential.data.unitName || \"\";\n const displayCode = credential.data.unitCode || \"\";\n return (\n displayName.toLowerCase().includes(searchTerm) ||\n displayCode.toLowerCase().includes(searchTerm)\n );\n });\n\n const targetSubjectMatched = precedent.subjects.some((subject) => {\n const displayName = subject.name || \"\";\n const displayCode = subject.ID || \"\";\n return (\n displayName.toLowerCase().includes(searchTerm) ||\n displayCode.toLowerCase().includes(searchTerm)\n );\n });\n\n return sourceSubjectMatched || targetSubjectMatched;\n });\n return filteredPrecdents;\n };\n\n getArticulationsGroupedBySourceCourse = (articulations) => {\n const articulationsMap = articulations.reduce(\n (articulationsMap, articulation) => {\n const newArticulationsMap = { ...articulationsMap };\n const credentialIssuerID =\n articulation.credentials[0].data.credentialIssuerID;\n const courseName = articulation.credentials[0].data.unitName;\n const key = `${credentialIssuerID} - ${courseName}`;\n const articulationKey = newArticulationsMap[key];\n if (articulationKey) {\n newArticulationsMap[key] = [...articulationKey, articulation];\n } else {\n newArticulationsMap[key] = [articulation];\n }\n return newArticulationsMap;\n },\n {},\n );\n return articulationsMap;\n };\n}\n\nconst mapStateToProps = (state) => {\n return {\n searchTerm: getSearchTerm(state),\n searchTab: getSearchTab(state),\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n onSetSearchTerm: (searchTerm) => dispatch(setSearchTerm(searchTerm)),\n onSetSearchTab: (creditType) => dispatch(setSearchTab(creditType)),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SearchResult);\n","import { createSelector } from \"reselect\";\n\nexport const getCreditArrangementsMap = (state) =>\n state.creditArrangementState.creditArrangements;\n\nexport const isFetchingCreditArrangements = (state) =>\n state.creditArrangementState.fetching;\n\nexport const getCreditArrangementsBySourceInsitutionId = (ID) => {\n return createSelector(getCreditArrangementsMap, (creditArrangementsMap) => {\n return creditArrangementsMap[ID];\n });\n};\n\nexport const getArticulationByID = (ID) => {\n return createSelector(getCreditArrangementsMap, (creditArrangementsMap) => {\n let foundArticulation;\n Object.keys(creditArrangementsMap).forEach((key) => {\n if (!foundArticulation) {\n foundArticulation = (\n creditArrangementsMap[key] || {}\n ).articulations.find((articulation) => articulation.ID === ID);\n }\n });\n return foundArticulation || {};\n });\n};\n\nexport const getPrecedentByID = (ID) => {\n return createSelector(getCreditArrangementsMap, (creditArrangementsMap) => {\n let foundPrecedent;\n Object.keys(creditArrangementsMap).forEach((key) => {\n if (!foundPrecedent) {\n foundPrecedent = (creditArrangementsMap[key] || {}).precedents.find(\n (precedent) => precedent.ID === ID\n );\n }\n });\n return foundPrecedent || {};\n });\n};\n","import { createSelector } from \"reselect\";\nimport { flatten } from \"lodash\";\n\nexport const getCreditBookmarks = (state) =>\n state.creditBookmarkState.creditBookmarks;\n\nexport const getTotalNumberOfCreditBookmarks = createSelector(\n // getCreditBookmarks,\n (state) => state,\n (state) => {\n const creditBookmarks = state.creditBookmarkState.creditBookmarks;\n //only count bookmarks exist in the datasource as well\n const sourceInstitutionsMap =\n state.sourceInstitutionState.sourceInstitutions;\n const bookmarks =\n flatten(\n (\n Object.keys(creditBookmarks).filter(\n (sourceInstitutionID) => sourceInstitutionsMap[sourceInstitutionID],\n ) || []\n ).map((sourceInstitutionID) => {\n return creditBookmarks[sourceInstitutionID];\n }),\n ) || [];\n\n return bookmarks.length;\n },\n);\n","export const isApplicationFinishedLoadingSelector = (state) => {\n if (!state) {\n return false;\n }\n const urlsIsFetched =\n // !_.isEmpty(state.urlReducer.urls) &&\n !state.urlReducer.fetching && !state.urlReducer.error;\n const creditArrangementsIsFetched =\n // !_.isEmpty(state.creditArrangementState.creditArrangements) &&\n !state.creditArrangementState.fetching;\n // &&\n // !state.creditArrangementState.error;\n const metaDataIsFetched =\n // !_.isEmpty(state.metadataState.metadata) &&\n !state.metadataState.fetching;\n // && !state.metadataState.error;\n return urlsIsFetched && creditArrangementsIsFetched && metaDataIsFetched;\n};\n","import React from \"react\";\nimport i from \"i18next\";\nimport { connect } from \"react-redux\";\nimport {\n isFetchingSourceInstitutions,\n getSelectedSourceInstitution,\n getRecentSourceInstitutions,\n getSourceInstitutions,\n} from \"store/source-institution/sourceInstitutionSelector\";\nimport { Row, Col } from \"antd\";\nimport FullPageSpinner from \"common/ui/loading/FullPageSpinner\";\nimport SearchContainer from \"./search/search-container/SearchContainer\";\nimport SearchResult from \"./search/search-result/SearchResult\";\nimport classes from \"./CreditCalculator.module.scss\";\nimport {\n getCreditArrangementsBySourceInsitutionId,\n isFetchingCreditArrangements,\n} from \"store/credit-arrangement/creditArrangementSelector\";\nimport _, { isEmpty } from \"lodash\";\nimport { getCreditBookmarks } from \"store/credit-bookmark/creditBookmarkSelector\";\nimport { setRecentInstitutions } from \"store/source-institution/sourceInstitutionAction\";\n\nimport { ReactComponent as SearchIllustration } from \"common/ui/icons/search-illustration.svg\";\nimport ContactButton from \"common/ui/button/ContactButton\";\nimport { isApplicationFinishedLoadingSelector } from \"utils/generalUtils\";\n\nclass CreditCalculator extends React.Component {\n componentDidUpdate = (prevProps) => {\n if (\n prevProps.isFetchingSourceInstitutions &&\n !this.props.isFetchingSourceInstitutions\n ) {\n const { recentSourceInstitutions, sourceInstitutions } = this.props;\n const sourceInstitutionIDs = sourceInstitutions.map((inst) => inst.ID);\n const filteredRecentInstitutionIDs = recentSourceInstitutions\n .filter((inst) => inst)\n .map((inst) => inst.ID)\n .filter((inst) => _.includes(sourceInstitutionIDs, inst));\n this.props.dispatch(setRecentInstitutions(filteredRecentInstitutionIDs));\n }\n };\n\n render() {\n let notFoundIcon = (\n \n );\n const searchIconPath = \"common.icons.search-empty\";\n if (i.exists(searchIconPath)) {\n notFoundIcon = (\n \n );\n }\n return (\n
\n
\n \n
\n\n {!this.props.applicationHasLoaded ? (\n \n ) : isEmpty(this.props.selectedSourceInstitution) ? (\n \n \n \n
\n {notFoundIcon}\n \n {i.t(\"home.isEmpty.prompt\")}\n \n \n
\n \n
\n ) : (\n \n )}\n
\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n const selectedSourceInstitution = getSelectedSourceInstitution(state);\n return {\n isFetchingSourceInstitutions: isFetchingSourceInstitutions(state),\n isFetchingCreditArrangements: isFetchingCreditArrangements(state),\n selectedSourceInstitution,\n recentSourceInstitutions: getRecentSourceInstitutions(state),\n sourceInstitutions: getSourceInstitutions(state),\n creditArrangements: getCreditArrangementsBySourceInsitutionId(\n selectedSourceInstitution.ID,\n )(state),\n creditBookmarks: getCreditBookmarks(state),\n applicationHasLoaded: isApplicationFinishedLoadingSelector(state),\n };\n};\n\nexport default connect(mapStateToProps)(CreditCalculator);\n","import React from \"react\";\nimport i from \"i18next\";\nimport { Helmet } from \"react-helmet\";\nimport CreditCalculator from \"components/CreditCalculator\";\n\nclass Home extends React.Component {\n render() {\n return (\n <>\n \n {`${i.t(\"appName\")}`}\n \n \n \n );\n }\n}\n\nexport default Home;\n","import React from 'react';\nimport { Link } from 'react-router-dom';\nimport classes from './Error404.module.scss';\n\nclass Error404 extends React.Component {\n render() {\n return (\n
\n
\n We can’t find the page you’re looking for\n
\n
\n Go to homepage\n
\n
\n );\n }\n}\n\nexport default Error404;\n","/**\n * The base type of all analytics events; defines the common interface.\n */\nclass AnalyticsEvent {\n constructor(type) {\n this._type = type\n }\n\n type = () => this._type\n args = () => ({})\n toString = () => `${this.type()} => ${JSON.stringify(this.args())}`\n}\n\n\n/**\n * Invoked upon user conversion.\n */\nexport const ANALYTICS_EVENT_CONVERSION = 'conversion';\n\nexport class ConversionEvent extends AnalyticsEvent {\n constructor(source) {\n super(ANALYTICS_EVENT_CONVERSION);\n this._source = source\n }\n\n args = () => ({ source: this._source })\n}\n\n/**\n * Invoked upon user submitted searches.\n */\nexport const ANALYTICS_EVENT_SEARCH = 'search';\n\nexport class SearchEvent extends AnalyticsEvent {\n constructor(scope, count, parameters) {\n super(ANALYTICS_EVENT_SEARCH);\n this._scope = scope;\n this._count = count;\n this._parameters = parameters;\n }\n\n args = () => ({ scope: this._scope, parameters: this._parameters, count: this._count });\n}","import _ from \"lodash\";\n\n/**\n * Internal API - not to be invoked directly.\n * Dispatches events to the global analytics function defined by the client.\n */\nconst fire = async(event, args) => {\n // Not cached in case this is initialised asynchronously\n const func = window.analytics;\n if (!_.isFunction(func)) {\n // Analytics code isn't loaded or is not in use.\n return;\n }\n // Intentionally not awaiting as analytics code should not block application logic,\n // but rather happen in the background on a best effort basis.\n func(event, args);\n};\n\n/**\n * Internal API - safe to be invoked directly.\n * Hooked into the code base to allow external analytics platforms to optionally capture analytics events.\n * Executes asynchronously in the background without awaiting completion of the invocation.\n *\n * @param event - string\n * The typename of the event.\n *\n * @param args - object\n * The parameters/payload of the event.\n */\nexport const emit = (event, args) => {\n try {\n fire(event, args).catch(console.log);\n } catch (e) {\n console.log(`Exception invoking analytics: ${event}. Exception: ${e}`);\n }\n};\n\n/**\n * Public API - safe to be invoked directly - preferred method for sending analytics events.\n * @see emit\n *\n * @param event - AnalyticsEvent\n * The AnalyticsEvent object encapsulating the event information.\n */\nexport const analytics = (event) => emit(event.type(), event.args())","import React from \"react\";\nimport { Spin } from \"antd\";\nimport { selectUrls } from \"store/custom-url/urlSelector\";\nimport { connect } from \"react-redux\";\nimport _ from \"lodash\";\n\nconst GoToMainSiteLink = ({ urls, style, children }) => {\n const GoToMainSiteLinkKey = \"contact\";\n const contactData = urls[GoToMainSiteLinkKey];\n if (_.isEmpty(urls) || _.isEmpty(contactData)) return ;\n\n const { url, alt } = contactData;\n\n return (\n \n {children}\n \n );\n};\n\nconst mapStoreToProps = (store) => {\n return {\n urls: selectUrls(store),\n };\n};\n\nexport default connect(mapStoreToProps)(GoToMainSiteLink);\n","import React, { useState } from \"react\";\nimport { Link, NavLink } from \"react-router-dom\";\nimport classes from \"./Header.module.scss\";\nimport { Button, Badge, Drawer, Row, Col } from \"antd\";\nimport { Menu, X } from \"react-feather\";\nimport { selectUrls } from \"store/custom-url/urlSelector\";\nimport { connect } from \"react-redux\";\nimport { ConversionEvent } from \"../../../hooks/analytics/events\";\nimport { analytics } from \"../../../hooks/analytics/analytics\";\nimport _ from \"lodash\";\nimport GoToMainSite from \"common/ui/button/GoToMainSite\";\nimport i from \"i18next\";\n\nconst conversion = (e) => {\n const event = new ConversionEvent(\"start-application-button\");\n analytics(event);\n};\n\n//TODO: include conversion attributes in form submission\nconst StartApplicationForm = ({\n endpoint,\n attributes = {},\n method = \"POST\",\n}) => {\n const elements = _.keys(attributes).map((key) => (\n \n ));\n return (\n
\n {_.isEmpty(elements) ? null : elements}\n \n Start an application\n \n \n );\n};\n\nconst Header = (props) => {\n const [drawerVisible, setDrawerVisible] = useState(false);\n\n const showNavigationDrawer = () => {\n setDrawerVisible(true);\n };\n\n const onNavigationDrawerClosed = () => {\n setDrawerVisible(false);\n };\n\n const whitelabel = props?.urls?.[\"application-btn\"] || {\n url: \"/\",\n alt: \"Home link\",\n };\n\n const BrandLogo = (\n
\n \n \n \n\n
\n \n Credit\n
calculator\n \n
\n );\n\n const drawerTitle = (\n
\n \n \n \n {BrandLogo}\n
\n );\n\n return (\n <>\n \n
    \n
  • \n \n Help\n \n
  • \n
  • \n \n
  • \n
\n \n\n \n \n \n
\n \n \n \n {BrandLogo}\n
\n
    \n
  • \n \n \n \n \n
    \n Saved\n
    \n \n
  • \n
  • \n \n \n
    \n Help\n
    \n \n
  • \n
  • \n \n
  • \n
\n \n
\n \n );\n};\n\nconst mapStoreToProps = (store) => {\n return {\n urls: selectUrls(store),\n };\n};\n\nexport default connect(mapStoreToProps)(Header);\n","import React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { ChevronLeft } from \"react-feather\";\n\nconst BackToResultButton = ({ isMobile }) => {\n return (\n \n \n \n \n {isMobile ? \"Back\" : \"Back to all results\"}\n \n );\n};\n\nexport default BackToResultButton;\n","import { createSelector } from 'reselect';\n\nexport const getMetadata = (state) => state.metadataState.metadata;\n\nexport const getMetadataTimestamp = createSelector(\n getMetadata,\n (metadataMap) => metadataMap.timestamp,\n);\n","import React, { Fragment } from \"react\";\nimport { connect } from \"react-redux\";\nimport i from \"i18next\";\nimport { Button, Row, Col } from \"antd\";\nimport { Heart, ArrowDown, ArrowRight } from \"react-feather\";\nimport Card from \"common/ui/card/Card\";\nimport {\n getArticulationByID,\n getPrecedentByID,\n isFetchingCreditArrangements,\n} from \"store/credit-arrangement/creditArrangementSelector\";\nimport { get } from \"lodash\";\nimport {\n isFetchingSourceInstitutions,\n getSourceInstitutionById,\n} from \"store/source-institution/sourceInstitutionSelector\";\nimport {\n getTotalCreditPoints,\n isCreditItemExistsInBookmarks,\n} from \"utils/creditUtils\";\nimport SubjectDetailList from \"../SubjectDetailList\";\nimport classes from \"./CreditItemDetails.module.scss\";\nimport {\n addCreditToBookmark,\n removeCreditFromBookmark,\n} from \"store/credit-bookmark/creditBookmarkAction\";\nimport { getCreditBookmarks } from \"store/credit-bookmark/creditBookmarkSelector\";\nimport { CREDIT_TYPES, SUBJECT_TYPES } from \"common/model/creditType\";\nimport BackToResultButton from \"common/ui/button/BackToResultButton\";\nimport { isEmpty } from \"lodash\";\nimport dayjs from \"dayjs\";\nimport { getMetadataTimestamp } from \"store/metadata/metadataSelector\";\nimport FullPageSpinner from \"common/ui/loading/FullPageSpinner\";\nimport { isApplicationFinishedLoadingSelector } from \"utils/generalUtils\";\n\nclass CreditItemDetails extends React.Component {\n render() {\n // if (\n // this.props.isFetchingSourceInstitutions ||\n // this.props.isFetchingCreditArrangements\n // ) {\n // return (\n // \n // );\n // }\n\n const {\n creditItem,\n sourceInstitution,\n isArticulation,\n creditBookmarks,\n isMobile,\n timestamp,\n } = this.props;\n\n const totalCreditPoints = getTotalCreditPoints(creditItem);\n const creditType = isArticulation\n ? CREDIT_TYPES.ARTICULATION\n : CREDIT_TYPES.PRECEDENT;\n\n const isExistingCreditItemInBookmarks = isCreditItemExistsInBookmarks(\n creditBookmarks,\n sourceInstitution && sourceInstitution.ID,\n creditItem && creditItem.ID,\n creditType,\n );\n\n const FavouriteButton = () => {\n if (!this.props.applicationHasLoaded) {\n return <>;\n }\n return (\n \n \n !isExistingCreditItemInBookmarks\n ? this.addCreditItemToBookmarks(\n sourceInstitution?.ID,\n creditItem?.ID,\n creditType,\n timestamp,\n )\n : this.removeCreditItemFromBookmarks(\n sourceInstitution?.ID,\n creditItem?.ID,\n creditType,\n )\n }\n >\n \n   \n {isExistingCreditItemInBookmarks\n ? isMobile\n ? \"Saved\"\n : \"Remove from saved\"\n : \"Save credit\"}\n \n \n );\n };\n\n return (\n
\n \n \n \n
\n
\n \n \n
\n
\n
You may receive
\n
\n {totalCreditPoints} credit points\n
\n
\n
\n \n
\n\n
\n \n \n \n
Credit detail
\n

You may receive {totalCreditPoints} credit points

\n

{i.t(\"details.description\")}

\n \n
\n {/*Make changes here */}\n \n \n \n
\n \n \n
\n \n {this.props.isArticulation\n ? i.t(\"details.optionalArticulationsTitle\")\n : i.t(\"details.optionalPrecedentsTitle\")}\n
\n \n \n
\n\n {!this.props.applicationHasLoaded ? (\n \n ) : (\n <>\n \n \n \n
\n {isArticulation ? (\n isMobile ? (\n \n \n \n
\n ) : (\n
\n \n }\n >\n \n \n
\n )\n ) : (\n
\n \n
\n )}\n \n \n
\n\n \n \n \n \n \n \n \n {i.t(\"details.conditions.title\")}\n \n
\n {i.t(\"details.conditions.description\")}\n
    \n {i\n .t(\"details.conditions.list\", {\n returnObjects: true,\n })\n .map((li) => (\n
  • {li}
  • \n ))}\n
\n
\n \n \n {getValidDatesMarkup(creditItem)}\n \n
\n \n \n
\n \n )}\n \n );\n }\n\n addCreditItemToBookmarks = (\n sourceInstitutionID,\n creditItemID,\n creditType,\n timestamp,\n ) => {\n this.props.onCreditItemAddedToBookmarks(\n sourceInstitutionID,\n creditItemID,\n creditType,\n timestamp,\n );\n };\n\n removeCreditItemFromBookmarks = (\n sourceInstitutionID,\n creditItemID,\n creditType,\n ) => {\n this.props.onCreditItemRemovedFromBookmarks(\n sourceInstitutionID,\n creditItemID,\n creditType,\n );\n };\n}\n\nconst getValidDatesMarkup = (itemBlock) => {\n const effectiveStart = get(\n itemBlock,\n \"arrangements[0].effectiveStartDate\",\n get(itemBlock, \"effectiveStartDate\", null),\n );\n const effectiveEnd = get(\n itemBlock,\n \"arrangements[0].effectiveEndDate\",\n get(itemBlock, \"effectiveEndDate\", null),\n );\n\n let validDateString = i.t(\"details.validDates.description\");\n if (effectiveEnd) {\n validDateString += ` between ${dayjs(effectiveStart).format(\n \"DD MMM YYYY\",\n )} and ${dayjs(effectiveEnd).format(\"DD MMM YYYY\")}`;\n } else {\n validDateString += ` from ${dayjs(effectiveStart).format(\n \"DD MMM YYYY\",\n )} onwards`;\n }\n\n // const effectiveFromString = dayjs(effectiveFrom).format(\"DD MMM YYYY\");\n // const effectiveEndString = dayjs(effectiveEnd).format(\"DD MMM YYYY\");\n return (\n \n
\n {i.t(\"details.validDates.title\")}\n
\n
{validDateString}
\n
\n );\n};\n\nconst getTargetSubjectContentMarkup = (itemBlock) => {\n const displayName = get(itemBlock, \"course.name\", \"\");\n const courseUrl = get(itemBlock, \"course.url\", null);\n const displayNameMarkup = {displayName};\n return (\n
\n {courseUrl ? (\n \n {displayNameMarkup}\n \n \n ) : (\n displayNameMarkup\n )}\n
\n );\n};\n\nconst getCricosCodeMarkup = (itemBlock) => {\n const cricosCodes = get(itemBlock, \"course.cricosCodes\", []);\n if (cricosCodes.length === 0) {\n return null;\n }\n const cricosString = `CRICOS Code${\n cricosCodes.length > 1 ? \"s\" : \"\"\n }: ${itemBlock.course.cricosCodes.join(\", \")}`;\n return (\n
\n {cricosString}\n
\n );\n};\n\nconst CreditBlockDetails = (props) => {\n const { creditItem, totalCreditPoints, sourceInstitution, isArticulation } =\n props;\n\n const sourceDetails = get(creditItem, \"credentials\", []).map(\n (credential) => ({\n ID: credential.data.unitCode,\n name: credential.data.unitName,\n }),\n );\n const targetDetails = isArticulation\n ? get(creditItem, \"arrangements[0].subjects\", [])\n : get(creditItem, \"subjects\", []);\n const eduProviderName = i.t(\"institution\");\n return (\n
\n \n )\n }\n >\n {\n \n }\n \n
\n );\n};\n\nconst CreditBlockBody = (props) => {\n const { targetDetails, totalCreditPoints, eduProviderName } = props;\n\n return (\n \n \n \n \n\n \n
\n \n
\n
\n {eduProviderName}\n
\n \n\n \n
{totalCreditPoints}
\n
\n Credit points\n
\n \n
\n );\n};\n\nconst CreditBlockHeading = (props) => {\n const { creditItem, sourceDetails, sourceInstitution, isArticulation } =\n props;\n return (\n \n \n
\n \n
\n
\n {get(sourceInstitution, \"displayName\", \"\")}\n
\n \n\n {!isArticulation &&\n creditItem.yearCompletedMin &&\n creditItem.yearCompletedMax && (\n \n
\n {`${creditItem.yearCompletedMin} - ${creditItem.yearCompletedMax}`}\n
\n
\n Completed\n
\n \n )}\n
\n );\n};\n\nconst OneOrMoreCredentialNames = ({ itemBlock }) => {\n if (isEmpty(itemBlock)) {\n return null;\n }\n if (itemBlock.credentials.length === 1) {\n const displayName = itemBlock.credentials[0].data.unitName;\n return (\n {displayName}\n );\n } else {\n return (\n
\n {itemBlock.credentials.map((cred, i) => {\n const displayName = cred.data.unitName;\n const last = i === itemBlock.credentials.length - 1;\n return (\n
\n
\n {displayName}\n
\n {last ? null : (\n \n AND\n
\n )}\n
\n );\n })}\n \n );\n }\n};\nconst ArticulationHeading = (props) => {\n const { creditItem, sourceInstitution } = props;\n\n return (\n
\n \n \n
\n \n
\n
\n {get(sourceInstitution, \"displayName\", \"\")}\n
\n {getCohortContentMarkup(creditItem, SUBJECT_TYPES.SOURCE)}\n \n\n \n
\n
\n \n
\n
\n\n
\n
\n \n
\n
\n \n\n \n {getTargetSubjectContentMarkup(creditItem)}\n
\n {i.t(\"institution\")}\n
\n {getCourseCodeMarkup(creditItem)}\n {getCricosCodeMarkup(creditItem)}\n {getCohortContentMarkup(creditItem, SUBJECT_TYPES.TARGET)}\n {getArticulationDetailsMarkupContent(creditItem)}\n \n
\n
\n );\n};\n\nconst getCourseCodeMarkup = (creditItem) => {\n return (\n {`Course Code: ${creditItem?.course?.ID}`}\n );\n};\n\nconst getCohortContentMarkup = (itemBlock, subjectType) => {\n const cohorts =\n subjectType === SUBJECT_TYPES.SOURCE\n ? get(itemBlock, \"credentials[0].data.cohorts\", [])\n : get(itemBlock, \"course.cohorts\", []);\n if (cohorts.length === 0) {\n return null;\n }\n return (\n
\n For:\n {cohorts.map((cohort) => {\n const label = i.t(`common.cohorts.${cohort}.label`);\n const icon = i.t(`common.cohorts.${cohort}.icon`);\n const alt = i.t(`common.cohorts.${cohort}.alt`);\n const filter = i.t(`common.cohorts.${cohort}.filter`);\n if (!(label || icon || alt || filter)) {\n return null;\n }\n return (\n
\n \n {label}\n
\n );\n })}\n
\n );\n};\n\nconst getArticulationDetailsMarkupContent = (creditItem) => {\n const creditPoints = getTotalCreditPoints(creditItem);\n let additionalDetailsLabel;\n if (\n creditItem.guaranteedEntry &&\n !creditItem.admissionCriteria &&\n creditPoints === 0\n ) {\n additionalDetailsLabel = \"Guaranteed entry only\";\n } else if (!creditItem.guaranteedEntry && creditItem.admissionCriteria) {\n additionalDetailsLabel = \"Admission criteria applies\";\n }\n if (!additionalDetailsLabel) {\n return null;\n }\n\n return (\n
\n \n {additionalDetailsLabel}\n
\n );\n};\n\nconst mapStateToProps = (state, props) => {\n const creditItemID = props.creditItemID;\n\n const creditItem = props.isArticulation\n ? getArticulationByID(creditItemID)(state)\n : getPrecedentByID(creditItemID)(state);\n const credentialIssuerID = get(\n creditItem,\n \"credentials[0].data.credentialIssuerID\",\n );\n\n return {\n creditItem,\n isFetchingSourceInstitutions: isFetchingSourceInstitutions(state),\n isFetchingCreditArrangements: isFetchingCreditArrangements(state),\n sourceInstitution: getSourceInstitutionById(credentialIssuerID)(state),\n creditBookmarks: getCreditBookmarks(state),\n timestamp: getMetadataTimestamp(state),\n applicationHasLoaded: isApplicationFinishedLoadingSelector(state),\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n onCreditItemAddedToBookmarks: (\n sourceInstitutionID,\n creditItemID,\n creditType,\n timestamp,\n ) =>\n dispatch(\n addCreditToBookmark(\n sourceInstitutionID,\n creditItemID,\n creditType,\n timestamp,\n ),\n ),\n onCreditItemRemovedFromBookmarks: (\n sourceInstitutionID,\n creditItemID,\n creditType,\n ) =>\n dispatch(\n removeCreditFromBookmark(sourceInstitutionID, creditItemID, creditType),\n ),\n };\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CreditItemDetails);\n","import React from \"react\";\nimport CreditItemDetails from \"components/credits/credit-details/CreditItemDetails\";\nimport { CREDIT_TYPES } from \"common/model/creditType\";\n\nclass CreditDetails extends React.Component {\n render() {\n const creditItemID = this.props.match.params.creditItemID;\n const isArticulation = this.props.location.pathname.includes(\n CREDIT_TYPES.ARTICULATION.toLowerCase(),\n );\n const isMobile = this.props.isMobile;\n\n return (\n \n );\n }\n}\n\nexport default CreditDetails;\n","import React from \"react\";\n// import { Link } from \"react-router-dom\";\nimport { Heart } from \"react-feather\";\nimport classes from \"./NoSavedCredit.module.scss\";\n\nconst NoSavedCredit = () => {\n return (\n <>\n
No saved credit
\n
\n To save a match for later, press the{\" \"}\n icon on a credit\n match.\n
\n
\n {/* Keep searching for credit */}\n
\n \n );\n};\n\nexport default NoSavedCredit;\n","import React from \"react\";\nimport { connect } from \"react-redux\";\nimport i from \"i18next\";\nimport { Row, Col } from \"antd\";\nimport { getCreditBookmarks } from \"store/credit-bookmark/creditBookmarkSelector\";\nimport {\n getCreditArrangementsMap,\n isFetchingCreditArrangements,\n} from \"store/credit-arrangement/creditArrangementSelector\";\nimport {\n isFetchingSourceInstitutions,\n getSourceInstitutionsMap,\n} from \"store/source-institution/sourceInstitutionSelector\";\nimport { isNil, isEmpty, get } from \"lodash\";\nimport {\n PrecedentCreditList,\n ArticulationCreditList,\n} from \"components/credits/CreditList\";\nimport NoSavedCredit from \"./NoSavedCredit\";\nimport classes from \"./SavedCreditItems.module.scss\";\nimport { isArticulation } from \"utils/creditUtils\";\nimport { CREDIT_TYPES } from \"common/model/creditType\";\nimport BackToResultButton from \"common/ui/button/BackToResultButton\";\nimport FullPageSpinner from \"common/ui/loading/FullPageSpinner\";\n\nimport { isApplicationFinishedLoadingSelector } from \"utils/generalUtils\";\n\nimport _ from \"lodash\";\n\nclass SavedCreditItems extends React.Component {\n extractComparableSourceString = (item) => {\n let credentials = [];\n if (item.grouped) {\n if (_.isArray(item.grouped) && !_.isEmpty(item.grouped)) {\n // because this is same across all items\n credentials = item.grouped[0] && item.grouped[0].credentials;\n }\n } else {\n credentials = item.credentials;\n }\n const extractedString = credentials\n .map((c) => {\n if (c.data) {\n return c.data.unitName || \"\";\n } else {\n return \"\";\n }\n })\n .join(\" \");\n return extractedString;\n };\n sortBySourceCourseName = (a, b) => {\n const aString = this.extractComparableSourceString(a);\n const bString = this.extractComparableSourceString(b);\n return aString.localeCompare(bString);\n };\n groupByCreditType = (creditItemsMap) => {\n const groupedCreditItems = Object.keys(creditItemsMap).reduce(\n (creditItems, institution) => {\n const newCreditItems = { ...creditItems };\n for (const creditItem of creditItemsMap[institution]) {\n if (creditItem.grouped) {\n newCreditItems.ARTICULATION = newCreditItems.ARTICULATION\n ? [\n ...newCreditItems.ARTICULATION,\n { ...creditItem, institutionID: institution },\n ]\n : [{ ...creditItem, institutionID: institution }];\n } else if (newCreditItems[\"PRECEDENT\"]) {\n newCreditItems[\"PRECEDENT\"] = [\n ...newCreditItems[\"PRECEDENT\"],\n { ...creditItem, institutionID: institution },\n ];\n } else {\n newCreditItems[\"PRECEDENT\"] = [\n { ...creditItem, institutionID: institution },\n ];\n }\n }\n return newCreditItems;\n },\n {},\n );\n return groupedCreditItems;\n };\n render() {\n // if (\n // this.props.isFetchingSourceInstitutions ||\n // this.props.isFetchingCreditArrangements\n // ) {\n // return (\n // \n // );\n // }\n\n const {\n creditBookmarks,\n creditArrangementsMap,\n sourceInstitutionsMap,\n isMobile,\n } = this.props;\n\n const creditItemsMap = this.transformBookmarksToCreditItemsMap(\n creditBookmarks,\n creditArrangementsMap,\n );\n // console.log(\"credit bookmarks\", creditBookmarks);\n // console.log(\"creditArrangementsMap\", creditArrangementsMap);\n\n // console.log(\"credit items map\", creditItemsMap);\n\n const simpleCreditItemsMap = this.transformBookmarksToSimpleCreditItemsMap(\n creditBookmarks,\n creditArrangementsMap,\n );\n // const hasMissingCredentials = !Object.keys(simpleCreditItemsMap).every(\n // (sourceInstitutionId) =>\n // _.isEmpty(creditArrangementsMap[sourceInstitutionId]),\n // );\n\n // console.log(\"simple credit items\", simpleCreditItemsMap);\n\n // const typeGroupedCreditsMap = this.groupByCreditType(creditItemsMap);\n if (isEmpty(creditBookmarks)) {\n return (\n <>\n \n \n \n
\n \n
\n \n
\n \n \n \n \n
\n \n
\n \n
\n \n \n );\n }\n\n return (\n
\n \n \n \n
\n
SAVED
\n {i\n .t(\"saved.description\", { returnObjects: true })\n .map((li, i) => (\n

{li}

\n ))}\n
\n \n
\n\n {!this.props.applicationHasLoaded ? (\n \n ) : (\n
\n \n \n \n
\n \n
\n {/* {hasMissingCredentials && (\n \n )} */}\n {isMobile\n ? (Object.keys(simpleCreditItemsMap) || [])\n .sort((a, b) => a.localeCompare(b))\n .map((sourceInstitutionID) => {\n const creditItems =\n creditItemsMap[sourceInstitutionID] || [];\n // console.log(\"credit items\", creditItemsMap);\n return (\n \n \n {sourceInstitutionID}\n
\n
\n <>\n {simpleCreditItemsMap[sourceInstitutionID]\n .error ? (\n
\n No credit items found for this institution!\n
\n ) : (\n creditItems\n .sort(this.sortBySourceCourseName)\n .map((creditItem, index) => {\n if (creditItem.grouped) {\n return (\n \n );\n }\n // console.log(index);\n // console.log(creditItems);\n return isArticulation(creditItem.type) ? (\n \n ) : (\n \n );\n })\n )}\n \n
\n );\n })\n : (\n Object.keys(simpleCreditItemsMap).sort((a, b) =>\n a.localeCompare(b),\n ) || []\n ).map((sourceInstitutionID) => {\n const creditItems =\n creditItemsMap[sourceInstitutionID] || [];\n return (\n \n \n {sourceInstitutionID}\n \n {simpleCreditItemsMap[sourceInstitutionID].error ? (\n
\n No credit items found for this institution!\n
\n ) : (\n
\n {creditItems\n .sort(this.sortBySourceCourseName)\n .map((creditItem, index) => {\n if (creditItem.grouped) {\n return (\n \n );\n }\n return isArticulation(creditItem.type) ? (\n \n ) : (\n \n );\n })}\n
\n )}\n \n );\n })}\n \n \n \n )}\n \n );\n }\n\n transformBookmarksToSimpleCreditItemsMap = (\n creditBookmarks,\n creditArrangementsMap,\n ) => {\n const creditItemsMap = {};\n Object.keys(creditBookmarks).forEach((sourceInstitutionID) => {\n const creditItems = [];\n const creditItemsFromBookmarks =\n creditBookmarks[sourceInstitutionID] || [];\n const creditArrangements = creditArrangementsMap[sourceInstitutionID];\n if (_.isEmpty(creditArrangements)) {\n // console.info(\"No credit arrangements\");\n //comment this out if you dont want to display anything\n // creditItemsMap[sourceInstitutionID] = {\n // type: \"ERROR\",\n // error: \"Not found\",\n // };\n } else {\n creditItemsFromBookmarks.forEach((creditItemFromBookmarks) => {\n if (isArticulation(creditItemFromBookmarks.creditType)) {\n const articulations = creditArrangements.articulations || [];\n const foundArticulation = articulations.find(\n (articulation) =>\n articulation.ID === creditItemFromBookmarks.creditItemID,\n );\n creditItems.push({\n ...foundArticulation,\n type: CREDIT_TYPES.ARTICULATION,\n });\n } else {\n const precedents = creditArrangements.precedents || [];\n const foundPrecedent = precedents.find(\n (precedent) =>\n precedent.ID === creditItemFromBookmarks.creditItemID,\n );\n creditItems.push({\n ...foundPrecedent,\n type: CREDIT_TYPES.PRECEDENT,\n });\n }\n });\n creditItemsMap[sourceInstitutionID] = creditItems;\n }\n });\n\n return creditItemsMap;\n };\n\n transformBookmarksToCreditItemsMap = (\n creditBookmarks,\n creditArrangementsMap,\n ) => {\n if (_.isEmpty(creditArrangementsMap)) {\n return [];\n }\n const creditItemsMap = {};\n Object.keys(creditBookmarks).forEach((sourceInstitutionID) => {\n const groupedIndex = {};\n let currentIndex = 0;\n const creditItems = [];\n const creditItemsFromBookmarks =\n creditBookmarks[sourceInstitutionID] || [];\n const creditArrangements = creditArrangementsMap[sourceInstitutionID];\n if (_.isEmpty(creditArrangements)) {\n // console.info(\"No credit arrangements\");\n return {};\n }\n creditItemsFromBookmarks.forEach((creditItemFromBookmarks) => {\n if (isArticulation(creditItemFromBookmarks.creditType)) {\n const articulations = creditArrangements.articulations || [];\n const foundArticulation = articulations.find(\n (articulation) =>\n articulation.ID === creditItemFromBookmarks.creditItemID,\n );\n // console.log(\"foundArticulation\", foundArticulation);\n\n if (!foundArticulation) {\n console.info(\"No found articulation\");\n return {};\n }\n //need to treat credentials as a whole - each credential should have the same issuer\n // foundArticulation.credentials.forEach((credential) => {\n const credentialIssuerID = get(\n foundArticulation.credentials[0],\n \"data.credentialIssuerID\",\n );\n // const courseName = get(credential, \"data.unitName\");\n let key = credentialIssuerID;\n // const key = credentialIssuerID + \"-\" + foundArticulation.ID;\n foundArticulation.credentials.forEach((credential) => {\n const courseName = get(credential, \"data.unitName\");\n key += \"-\" + courseName;\n });\n // console.log(\"key\", key);\n // console.log(\"groupedIndex\", groupedIndex);\n if (isNil(groupedIndex[key])) {\n // console.log(\"pushing to creditItems\");\n groupedIndex[key] = currentIndex;\n creditItems.push({ grouped: [foundArticulation] });\n } else {\n currentIndex = currentIndex - 1;\n const creditItem = creditItems[groupedIndex[key]];\n creditItem.grouped.push(foundArticulation);\n }\n currentIndex++;\n // });\n } else {\n const precedents = creditArrangements.precedents || [];\n const foundPrecedent = precedents.find(\n (precedent) =>\n precedent.ID === creditItemFromBookmarks.creditItemID,\n );\n creditItems.push(foundPrecedent);\n currentIndex++;\n }\n });\n creditItemsMap[sourceInstitutionID] = creditItems;\n });\n return creditItemsMap;\n };\n}\n\nconst mapStateToProps = (state) => {\n return {\n creditBookmarks: getCreditBookmarks(state),\n creditArrangementsMap: getCreditArrangementsMap(state),\n isFetchingSourceInstitutions: isFetchingSourceInstitutions(state),\n isFetchingCreditArrangements: isFetchingCreditArrangements(state),\n sourceInstitutionsMap: getSourceInstitutionsMap(state),\n applicationHasLoaded: isApplicationFinishedLoadingSelector(state),\n };\n};\n\nexport default connect(mapStateToProps)(SavedCreditItems);\n","import React from \"react\";\nimport i from \"i18next\";\nimport { Helmet } from \"react-helmet\";\nimport SavedCreditItems from \"components/saved-credits/SavedCreditItems\";\n\nclass SavedCredits extends React.Component {\n render() {\n return (\n <>\n \n {`Saved - ${i.t(\"appName\")}`}\n \n \n \n );\n }\n}\n\nexport default SavedCredits;\n","import axios from \"axios\";\nimport { API_BASE_URL } from \"common/api/apiRoutes\";\n\nexport const axiosClient = axios.create({ baseURL: API_BASE_URL });\n\nconst getData = async (url) => {\n if (!url) {\n console.error(\"No URL Provided!\");\n }\n try {\n const response = await axiosClient.get(url);\n const parsedData = response.data.resp.fileData;\n return parsedData;\n } catch (err) {\n console.error(\n \"error while fetching or parsing data. Reverting to fallback\",\n );\n }\n};\n\nexport const API = {\n getExternalData: async (url) => {\n const data = await getData(url);\n return {\n metadata: data.metadata,\n sourceInstitutions: data.sourceInstitutions,\n precedents: data.precedents,\n articulations: data.articulations,\n };\n },\n\n getUrls: async () => {\n const response = await axiosClient.get(\"config/urls.json\");\n return response.data;\n },\n};\n","export const API_BASE_URL = '';\n\nexport const getSourceInstituitonsRoute = (educationProviderId) => {\n return '/src-institutions?eduProviderId=' + educationProviderId;\n};\n\nexport const getCreditArrangementsRoute = (educationProviderId) => {\n return '/credit-arrangements?eduProviderId=' + educationProviderId;\n};\n","import React from \"react\";\nimport classes from \"./CommonError.module.scss\";\nimport i from \"i18next\";\nclass CommonError extends React.Component {\n render() {\n return (\n
\n
\n
\n \n
\n
\n Sorry, something went wrong.\n
\n
\n Try refreshing your page.\n
\n
\n
\n );\n }\n}\n\nexport default CommonError;\n","import React, { useState } from 'react';\nimport { axiosClient } from 'common/http/axiosClient';\nimport { Route } from 'react-router-dom';\nimport CommonError from 'pages/errors/CommonError';\n\nconst WithErrorHandler = (WrappedComponent) => {\n const HocComponent = (props) => {\n const [error, setError] = useState(false);\n\n axiosClient.interceptors.response.use(\n (response) => {\n setError(false);\n return response;\n },\n (error) => {\n setError(true);\n return Promise.reject(error);\n }\n );\n\n return (\n <>\n {error ? (\n \n ) : (\n \n )}\n \n );\n };\n return HocComponent;\n};\n\nexport default WithErrorHandler;\n","import React from \"react\";\nimport { Collapse, Row, Col } from \"antd\";\nimport i from \"i18next\";\nimport { ChevronDown, ChevronUp } from \"react-feather\";\nimport BackToResultButton from \"common/ui/button/BackToResultButton\";\nimport classes from \"./HelpInstruction.module.scss\";\n\nconst { Panel } = Collapse;\n\nconst HelpInstruction = () => {\n const expandIconPosition = \"right\";\n\n const expandIcon = ({ isActive }) => {\n return isActive ? (\n \n ) : (\n \n );\n };\n\n const sections = i.t(\"help.sections\", { returnObjects: true });\n\n const description = i.t(\"help.description\", { returnObjects: true }) || [];\n\n return (\n <>\n \n \n \n
\n {i.t(\"help.title\")}\n
\n {description.map((d, i) => (\n

{d}

\n ))}\n \n
\n \n \n \n
\n \n
\n \n
\n \n \n \n
\n {sections.map((section) => {\n return (\n
\n \n {section.heading}\n
\n
\n {section.content.map((content) => (\n \n \n {content.question}\n \n }\n >\n \n {content.answer}\n
\n \n \n ))}\n
\n \n );\n })}\n \n \n
\n \n );\n};\n\nexport default HelpInstruction;\n","import React from \"react\";\nimport i from \"i18next\";\nimport { Helmet } from \"react-helmet\";\nimport HelpInstruction from \"components/help/HelpInstruction\";\n\nclass Help extends React.Component {\n render() {\n return (\n <>\n \n {`Help - ${i.t(\"appName\")}`}\n \n \n \n );\n }\n}\n\nexport default Help;\n","import { useState, useEffect } from 'react';\n\nfunction getWindowDimensions() {\n const { innerWidth: width, innerHeight: height } = window;\n return {\n width,\n height,\n };\n}\n\nexport default function useWindowDimensions() {\n const [windowDimensions, setWindowDimensions] = useState(\n getWindowDimensions()\n );\n\n useEffect(() => {\n function handleResize() {\n setWindowDimensions(getWindowDimensions());\n }\n\n window.addEventListener('resize', handleResize);\n return () => window.removeEventListener('resize', handleResize);\n }, []);\n\n return windowDimensions;\n}\n","import React from 'react';\nimport useWindowDimensions from 'hooks/useWindowDimensions';\n\nconst WithWindowDimensions = (WrappedComponent) => {\n const HocComponent = (props) => {\n const { width, height } = useWindowDimensions();\n\n return ;\n };\n\n return HocComponent;\n};\n\nexport default WithWindowDimensions;\n","export const FETCH_URLS = \"FETCH_URLS\";\nexport const FETCH_URLS_SUCCESS = \"FETCH_URLS_SUCCESS\";\nexport const FETCH_URLS_ERROR = \"FETCH_URLS_ERROR\";\nexport const FETCH_URLS_PENDING = \"FETCH_URLS_PENDING\";\nexport const fetchUrls = () => {\n return {\n type: FETCH_URLS,\n };\n};\nexport const fetchUrlsSuccess = (urlMap) => {\n return {\n type: FETCH_URLS_SUCCESS,\n data: {\n urlMap: urlMap,\n },\n };\n};\n\nexport const fetchUrlsError = (error) => {\n return {\n type: FETCH_URLS_ERROR,\n data: {\n error: error,\n },\n };\n};\n\nexport const fetchUrlsPending = () => {\n return {\n type: FETCH_URLS_PENDING,\n };\n};\n","export const FETCH_EXTERNAL_DATA = 'FETCH_EXTERNAL_DATA';\n\n\nexport const fetchExternalData = () => {\n return {\n type: FETCH_EXTERNAL_DATA\n }\n}","import React from \"react\";\nimport { Row, Col, Affix } from \"antd\";\nimport { connect } from \"react-redux\";\nimport { Redirect, Route, Switch } from \"react-router-dom\";\nimport Home from \"pages/Home\";\nimport Error404 from \"pages/errors/Error404\";\nimport classes from \"./App.module.scss\";\nimport Header from \"components/layout/header/Header\";\nimport CreditDetails from \"pages/CreditDetails\";\nimport SavedCredits from \"pages/SavedCredits\";\nimport { fetchCreditBookmarks } from \"store/credit-bookmark/creditBookmarkAction\";\nimport { getTotalNumberOfCreditBookmarks } from \"store/credit-bookmark/creditBookmarkSelector\";\nimport WithErrorHandler from \"hoc/error-handler/WithErrorHandler\";\nimport \"styles/global.scss\";\nimport Help from \"pages/Help\";\nimport WithWindowDimensions from \"hoc/window-dimensions/WithWindowDimensions\";\nimport { fetchUrls } from \"store/custom-url/urlAction\";\nimport GoToMainSite from \"common/ui/button/GoToMainSite\";\nimport { fetchExternalData } from \"store/external-data/externalDataAction\";\nimport { HashLink as Link } from \"react-router-hash-link\";\n\nclass App extends React.Component {\n componentDidMount() {\n this.props.onFetchCreditBookmarks();\n this.props.onFetchCustomUrls();\n }\n componentDidUpdate(prevProps) {\n if (prevProps.urlsFetching && !this.props.urlsFetching) {\n this.props.onFetchExternalData();\n }\n }\n\n render() {\n const isMobile = this.props.width <= 767;\n /// if it is not fetching AND urls are not empty\n\n // let paddingTop = 0;\n // const customHeader = document.getElementById(\"custom-header\");\n // if (!isEmpty(customHeader)) {\n // paddingTop = customHeader.offsetHeight;\n // }\n\n return (\n
\n \n Skip to content\n \n {/*\n select the theme if needed */}\n {/* }>\n {process.env.IMPLEMENTATION && }\n */}\n\n \n
\n \n \n \n
\n Go to main site\n
\n \n
\n \n
\n
\n\n \n
\n \n }\n />\n }\n />\n (\n \n )}\n />\n (\n \n )}\n />\n (\n \n )}\n />\n \n \n \n
\n
\n \n );\n }\n}\n\nconst mapStateToProps = (state) => {\n return {\n totalNumberOfCreditBookmarks: getTotalNumberOfCreditBookmarks(state),\n urlsFetching: state.urlReducer.fetching,\n credits: state.creditArrangementState.creditArrangements,\n };\n};\n\nconst mapDispatchToProps = (dispatch) => {\n return {\n onFetchExternalData: () => dispatch(fetchExternalData()),\n onFetchCreditBookmarks: () => dispatch(fetchCreditBookmarks()),\n onFetchCustomUrls: () => dispatch(fetchUrls()),\n };\n};\n\nexport default WithErrorHandler(\n WithWindowDimensions(connect(mapStateToProps, mapDispatchToProps)(App)),\n);\n","import store from \"store\";\n\nexport const getLocalStorageSelectedInstitution = () => {\n return store.get(\"selected-source-institution\") || {};\n};\n\nexport const setLocalStorageSelectedInstitution = (institution) => {\n store.set(\"selected-source-institution\", institution);\n};\n\nexport const getLocalStorageRecentInstitutionIds = () => {\n return store.get(\"recent-institution-ids\") || [];\n};\n\nexport const setLocalStorageRecentInstitutionIds = (ids) => {\n store.set(\"recent-institution-ids\", ids);\n};\n\nexport const getLocalStorageCreditBookmarks = () => {\n return store.get(\"credit-bookmarks\") || {};\n};\n\nexport const setLocalStorageCreditBookmarks = (creditBookmarks) => {\n store.set(\"credit-bookmarks\", creditBookmarks);\n};\n\n// const resolveStorageKey = (key) => {\n// return `${process.env.IMPLEMENTATION}_${key}`;\n// };\n","import {\n FETCH_SOURCE_INSTITUTIONS,\n FETCH_SOURCE_INSTITUTIONS_SUCCESS,\n FETCH_SOURCE_INSTITUTIONS_ERROR,\n SET_SELECTED_INSTITUTION,\n SET_RECENT_INSTITUTIONS,\n} from \"./sourceInstitutionAction\";\nimport { cloneDeep } from \"lodash\";\nimport {\n getLocalStorageSelectedInstitution,\n getLocalStorageRecentInstitutionIds,\n setLocalStorageSelectedInstitution,\n setLocalStorageRecentInstitutionIds,\n} from \"utils/localStorage\";\n\nconst initialState = {\n sourceInstitutions: {},\n selectedInstitution: {},\n recentInstitutionIDs: [],\n fetching: false,\n error: false,\n};\n\nconst sourceInstitutionReducer = (state = initialState, action) => {\n switch (action.type) {\n case FETCH_SOURCE_INSTITUTIONS: {\n return {\n ...state,\n fetching: true,\n error: false,\n };\n }\n\n case FETCH_SOURCE_INSTITUTIONS_SUCCESS: {\n const { sourceInstitutions } = action;\n const selectedInstitution = getLocalStorageSelectedInstitution();\n let filteredSelectedInstitution = selectedInstitution;\n const recentInstitutionIDs = getLocalStorageRecentInstitutionIds();\n if (!sourceInstitutions.hasOwnProperty(selectedInstitution.ID)) {\n filteredSelectedInstitution = {};\n }\n let filteredRecentInstitutionIDs = recentInstitutionIDs.filter(\n (sourceInstitutionID) =>\n sourceInstitutions.hasOwnProperty(sourceInstitutionID),\n );\n return {\n ...state,\n fetching: false,\n error: false,\n sourceInstitutions: sourceInstitutions,\n selectedInstitution: filteredSelectedInstitution,\n recentInstitutionIDs: filteredRecentInstitutionIDs,\n };\n }\n\n case FETCH_SOURCE_INSTITUTIONS_ERROR: {\n return {\n ...state,\n fetching: false,\n error: true,\n };\n }\n\n case SET_SELECTED_INSTITUTION: {\n const institutionID = action.institutionID;\n const selectedInstitution = state.sourceInstitutions[institutionID];\n if (institutionID) {\n const recentInstitutionIDs = updateRecentInsitutionIDs(\n state,\n institutionID,\n );\n setLocalStorageSelectedInstitution(selectedInstitution);\n setLocalStorageRecentInstitutionIds(recentInstitutionIDs);\n\n return {\n ...state,\n selectedInstitution,\n recentInstitutionIDs,\n };\n } else {\n return {\n ...state,\n selectedInstitution: {},\n };\n }\n }\n\n case SET_RECENT_INSTITUTIONS: {\n const institutionIDs = action.institutionIDs;\n setLocalStorageRecentInstitutionIds(institutionIDs);\n return {\n ...state,\n recentInstitutionIDs: institutionIDs,\n };\n }\n\n default: {\n return state;\n }\n }\n};\n\nconst updateRecentInsitutionIDs = (state, institutionID) => {\n const recentInstitutionIDs = cloneDeep(state.recentInstitutionIDs);\n if (recentInstitutionIDs.indexOf(institutionID) < 0) {\n recentInstitutionIDs.splice(0, 0, institutionID);\n }\n\n if (recentInstitutionIDs.length > 3) {\n recentInstitutionIDs.pop();\n }\n return recentInstitutionIDs;\n};\n\nexport default sourceInstitutionReducer;\n","export const FETCH_CREDIT_ARRANGEMENTS = \"FETCH_CREDIT_ARRANGEMENTS\";\nexport const FETCH_CREDIT_ARRANGEMENTS_SUCCESS =\n \"FETCH_CREDIT_ARRANGEMENTS_SUCCESS\";\nexport const FETCH_CREDIT_ARRANGEMENTS_ERROR =\n \"FETCH_CREDIT_ARRANGEMENTS_ERROR\";\n\nexport const fetchCreditArrangements = () => {\n return {\n type: FETCH_CREDIT_ARRANGEMENTS,\n };\n};\n\nexport const fetchCreditArrangementsSuccess = (creditArrangements) => {\n return {\n type: FETCH_CREDIT_ARRANGEMENTS_SUCCESS,\n creditArrangements,\n };\n};\n\nexport const fetchCreditArrangementsError = () => {\n return {\n type: FETCH_CREDIT_ARRANGEMENTS_ERROR,\n };\n};\n","import {\n FETCH_CREDIT_ARRANGEMENTS,\n FETCH_CREDIT_ARRANGEMENTS_SUCCESS,\n FETCH_CREDIT_ARRANGEMENTS_ERROR,\n} from './creditArrangementAction';\n\nconst initialState = {\n creditArrangements: {},\n fetching: false,\n error: false,\n};\n\nconst creditArrangementReducer = (state = initialState, action) => {\n switch (action.type) {\n case FETCH_CREDIT_ARRANGEMENTS: {\n return {\n ...state,\n fetching: true,\n error: false,\n };\n }\n\n case FETCH_CREDIT_ARRANGEMENTS_SUCCESS: {\n return {\n ...state,\n fetching: false,\n error: false,\n creditArrangements: action.creditArrangements,\n };\n }\n\n case FETCH_CREDIT_ARRANGEMENTS_ERROR: {\n return {\n ...state,\n fetching: false,\n error: true,\n };\n }\n\n default: {\n return state;\n }\n }\n};\n\nexport default creditArrangementReducer;\n","import {\n ADD_CREDIT_TO_BOOKMARK_ACTION,\n REMOVE_CREDIT_FROM_BOOKMARK_ACTION,\n FETCH_CREDIT_BOOKMARKS,\n} from './creditBookmarkAction';\nimport { cloneDeep, isEmpty } from 'lodash';\nimport { isCreditItemExistsInBookmarks } from 'utils/creditUtils';\nimport {\n setLocalStorageCreditBookmarks,\n getLocalStorageCreditBookmarks,\n} from 'utils/localStorage';\n\nconst initialState = {\n creditBookmarks: {},\n};\n\nconst creditBookmarkReducer = (state = initialState, action) => {\n switch (action.type) {\n case ADD_CREDIT_TO_BOOKMARK_ACTION: {\n const sourceInstitutionID = action.sourceInstitutionID;\n const creditItemID = action.creditItemID;\n const creditType = action.creditType;\n const timestamp = action.timestamp;\n\n const currentCreditBookmarks = cloneDeep(state.creditBookmarks);\n const creditItems = currentCreditBookmarks[sourceInstitutionID];\n\n if (isEmpty(creditItems)) {\n currentCreditBookmarks[sourceInstitutionID] = [\n { creditItemID, creditType, timestamp },\n ];\n } else {\n const existCreditItem = isCreditItemExistsInBookmarks(\n currentCreditBookmarks,\n sourceInstitutionID,\n creditItemID,\n creditType,\n );\n\n if (!existCreditItem) {\n currentCreditBookmarks[sourceInstitutionID] = [\n ...creditItems,\n { creditItemID, creditType, timestamp },\n ];\n }\n }\n\n setLocalStorageCreditBookmarks(currentCreditBookmarks);\n return {\n creditBookmarks: currentCreditBookmarks,\n };\n }\n\n case REMOVE_CREDIT_FROM_BOOKMARK_ACTION: {\n const { sourceInstitutionID, creditItemID, creditType } = action;\n\n const currentCreditBookmarks = cloneDeep(state.creditBookmarks);\n const creditItems = currentCreditBookmarks[sourceInstitutionID];\n if (!isEmpty(creditItems)) {\n const existCreditItem = isCreditItemExistsInBookmarks(\n currentCreditBookmarks,\n sourceInstitutionID,\n creditItemID,\n creditType,\n );\n\n if (existCreditItem) {\n if (creditItems.length === 1) {\n delete currentCreditBookmarks[sourceInstitutionID];\n } else {\n const filteredCreditItems = creditItems.filter(\n (creditItem) =>\n creditItem.creditItemID !== creditItemID ||\n creditItem.creditType !== creditType,\n );\n currentCreditBookmarks[sourceInstitutionID] = [\n ...filteredCreditItems,\n ];\n }\n }\n }\n\n setLocalStorageCreditBookmarks(currentCreditBookmarks);\n return {\n creditBookmarks: currentCreditBookmarks,\n };\n }\n\n case FETCH_CREDIT_BOOKMARKS: {\n const creditBookmarks = getLocalStorageCreditBookmarks();\n return {\n creditBookmarks,\n };\n }\n\n default: {\n return state;\n }\n }\n};\n\nexport default creditBookmarkReducer;\n","import { CREDIT_TYPES } from \"common/model/creditType\";\nimport { SET_SEARCH_TAB, SET_SEARCH_TERM } from \"./searchAction\";\n\nconst initialState = {\n searchTab: CREDIT_TYPES.ARTICULATION,\n searchTerm: \"\",\n};\n\nconst searchReducer = (state = initialState, action) => {\n switch (action.type) {\n case SET_SEARCH_TAB: {\n return {\n ...state,\n searchTab: action.searchTab,\n };\n }\n\n case SET_SEARCH_TERM: {\n return {\n ...state,\n searchTerm: action.searchTerm,\n };\n }\n\n default: {\n return state;\n }\n }\n};\n\nexport default searchReducer;\n","import {\n // FETCH_URLS,\n FETCH_URLS_ERROR,\n FETCH_URLS_SUCCESS,\n FETCH_URLS_PENDING,\n} from \"./urlAction\";\n\nconst initialState = {\n urls: {},\n error: false,\n fetching: false,\n};\n\nexport const urlReducer = (state = initialState, action) => {\n switch (action.type) {\n // case FETCH_URLS:\n // return {\n // ...state,\n // };\n case FETCH_URLS_PENDING:\n return {\n ...state,\n fetching: true,\n };\n case FETCH_URLS_ERROR:\n return {\n ...state,\n urls: {},\n error: true,\n fetching: false,\n };\n case FETCH_URLS_SUCCESS:\n return {\n ...state,\n urls: {\n ...action.data.urlMap,\n },\n error: false,\n fetching: false,\n };\n default:\n return {\n ...state,\n };\n }\n};\n","export const FETCH_METADATA = 'FETCH_METADATA';\nexport const FETCH_METADATA_SUCCESS = 'FETCH_METADATA_SUCCESS';\nexport const FETCH_METADATA_ERROR = 'FETCH_METADATA_ERROR';\n\nexport const fetchMetadata = () => {\n return {\n type: FETCH_METADATA,\n };\n};\n\nexport const fetchMetadataSuccess = (metadata) => {\n return {\n type: FETCH_METADATA_SUCCESS,\n metadata,\n };\n};\n\nexport const fetchMetadataError = () => {\n return {\n type: FETCH_METADATA_ERROR,\n };\n};\n","import {\n FETCH_METADATA,\n FETCH_METADATA_SUCCESS,\n FETCH_METADATA_ERROR,\n} from './metadataAction';\n\nconst initialState = {\n metadata: {},\n fetching: false,\n error: false,\n};\n\nconst metadataReducer = (state = initialState, action) => {\n switch (action.type) {\n case FETCH_METADATA: {\n return {\n ...state,\n fetching: true,\n error: false,\n };\n }\n case FETCH_METADATA_SUCCESS: {\n return {\n ...state,\n fetching: false,\n error: false,\n metadata: action.metadata,\n };\n }\n case FETCH_METADATA_ERROR: {\n return {\n ...state,\n fetching: false,\n error: true,\n };\n }\n default: {\n return state;\n }\n }\n};\n\nexport default metadataReducer;\n","import { combineReducers } from 'redux';\nimport sourceInstitutionReducer from './source-institution/sourceInstitutionReducer';\nimport creditArrangementReducer from './credit-arrangement/creditArrangementReducer';\nimport creditBookmarkReducer from './credit-bookmark/creditBookmarkReducer';\nimport searchReducer from './search/searchReducer';\nimport { urlReducer } from './custom-url/urlReducer';\nimport metadataReducer from 'store/metadata/metadataReducer';\n\nconst rootReducer = combineReducers({\n metadataState: metadataReducer,\n sourceInstitutionState: sourceInstitutionReducer,\n creditArrangementState: creditArrangementReducer,\n creditBookmarkState: creditBookmarkReducer,\n searchState: searchReducer,\n urlReducer: urlReducer,\n});\n\nexport default rootReducer;\n","export const transformToEntityMap = (array, field) => {\n const map = {};\n (array || []).forEach((element) => {\n const fieldValue = element[field];\n if (fieldValue && !map[fieldValue]) {\n map[fieldValue] = element;\n }\n });\n return map;\n};\n","import { takeLatest, put, call, all, select } from \"redux-saga/effects\";\nimport { cloneDeep, orderBy, sortBy } from \"lodash\";\nimport { API } from \"common/http/axiosClient\";\nimport {\n fetchSourceInstitutionsSuccess,\n fetchSourceInstitutionsError,\n fetchSourceInstitutions,\n} from \"../source-institution/sourceInstitutionAction\";\nimport {\n fetchCreditArrangementsSuccess,\n fetchCreditArrangementsError,\n fetchCreditArrangements,\n} from \"../credit-arrangement/creditArrangementAction\";\nimport { getTotalCreditPoints } from \"utils/creditUtils\";\nimport { transformToEntityMap } from \"common/redux/redux-utils\";\nimport { FETCH_EXTERNAL_DATA } from \"store/external-data/externalDataAction\";\nimport {\n fetchMetadata,\n fetchMetadataError,\n fetchMetadataSuccess,\n} from \"store/metadata/metadataAction\";\nimport { selectUrls } from \"store/custom-url/urlSelector\";\n\nexport function* doFetchExternalData() {\n try {\n yield all([\n put(fetchMetadata()),\n put(fetchSourceInstitutions()),\n put(fetchCreditArrangements()),\n ]);\n const currentURLs = yield select(selectUrls);\n const { metadata, sourceInstitutions, articulations, precedents } =\n yield call(API.getExternalData, currentURLs.endpoint.url);\n const sortedInstitutionsByCountry = sortBy(\n sourceInstitutions,\n \"countryName\",\n );\n const srcInstDataMap = transformToEntityMap(\n sortedInstitutionsByCountry,\n \"ID\",\n );\n // Filter out guaranteed entry articulations for now\n // TODO: Remove this filter later\n const filteredArticulations = articulations.filter(\n (articulation) =>\n !(\n articulation.guaranteedEntry === true &&\n getTotalCreditPoints(articulation) === 0\n ),\n );\n const sortedArticulations = getSortedArticulations(filteredArticulations);\n const sortedPrecedents = getSortedPrecedents(precedents);\n const creditArrangementsMap = getCreditArrangementsMap({\n articulations: sortedArticulations,\n precedents: sortedPrecedents,\n });\n yield all([\n put(fetchMetadataSuccess(metadata)),\n put(fetchSourceInstitutionsSuccess(srcInstDataMap)),\n put(fetchCreditArrangementsSuccess(creditArrangementsMap)),\n ]);\n } catch (error) {\n yield all([\n put(fetchMetadataError()),\n put(fetchSourceInstitutionsError()),\n put(fetchCreditArrangementsError()),\n ]);\n }\n}\n\nexport function* doFetchCreditArrangments() {\n try {\n const { articulations, precedents } = yield call(API.getCreditArrangements);\n const sortedArticulations = getSortedArticulations(articulations);\n const sortedPrecedents = getSortedPrecedents(precedents);\n const creditArrangementsMap = getCreditArrangementsMap({\n articulations: sortedArticulations,\n precedents: sortedPrecedents,\n });\n yield put(fetchCreditArrangementsSuccess(creditArrangementsMap));\n } catch (error) {\n yield put(fetchCreditArrangementsError());\n }\n}\n\nfunction getSortedArticulations(articulations) {\n return orderBy(\n articulations,\n [\n (a) => {\n return a.credentials[0].unitName;\n },\n (b) => {\n return getTotalCreditPoints(b);\n },\n (c) => {\n return c.course.name;\n },\n ],\n [\"asc\", \"desc\", \"asc\"],\n );\n}\n\nfunction getSortedPrecedents(precedents) {\n return orderBy(\n precedents,\n [\n (a) => {\n return a.credentials\n .map(\n (credential) =>\n `${credential.data.unitName} ${credential.data.unitCode}`,\n )\n .join(\" \");\n },\n (b) => {\n return getTotalCreditPoints(b);\n },\n (c) => {\n return c.subjects\n .map((subject) => `${subject.name} ${subject.ID}`)\n .join(\" \");\n },\n ],\n [\"asc\", \"desc\", \"asc\"],\n );\n}\n\nfunction getCreditArrangementsMap(data) {\n const clonedData = cloneDeep(data);\n const articulationsMap = transformArticulationsToMap(\n clonedData.articulations,\n {},\n );\n const precedentsMap = transformPrecdentsToMap(\n clonedData.precedents,\n articulationsMap,\n );\n return precedentsMap;\n}\n\nfunction transformArticulationsToMap(articulations, initialMap) {\n const articulationsMap = articulations.reduce(\n (articulationsMap, articulation) => {\n const newArticulationsMap = { ...articulationsMap };\n const credentialIssuerID =\n articulation.credentials[0].data.credentialIssuerID;\n const currentMapEntry = newArticulationsMap[credentialIssuerID];\n if (currentMapEntry) {\n // If the map already has this issuerID\n newArticulationsMap[credentialIssuerID] = {\n ...currentMapEntry,\n articulations: [...currentMapEntry.articulations, articulation],\n };\n } else {\n // Otherwise make new entry in the map\n newArticulationsMap[credentialIssuerID] = {\n articulations: [articulation],\n precedents: [],\n };\n }\n return newArticulationsMap;\n },\n initialMap,\n );\n return articulationsMap;\n}\n\nfunction transformPrecdentsToMap(precedents, initialMap) {\n const precedentsMap = precedents.reduce((precedentsMap, precedent) => {\n const newPrecedentsMap = { ...precedentsMap };\n const credentialIssuerID = precedent.credentials[0].data.credentialIssuerID;\n const currentMapEntry = newPrecedentsMap[credentialIssuerID];\n if (currentMapEntry) {\n // If the map already has this issuerID\n newPrecedentsMap[credentialIssuerID] = {\n ...currentMapEntry,\n precedents: [...currentMapEntry.precedents, precedent],\n };\n } else {\n // Otherwise make new entry in the map\n newPrecedentsMap[credentialIssuerID] = {\n precedents: [precedent],\n articulations: [],\n };\n }\n return newPrecedentsMap;\n }, initialMap);\n return precedentsMap;\n}\n\nconst externalDataSaga = [takeLatest(FETCH_EXTERNAL_DATA, doFetchExternalData)];\n\nexport default externalDataSaga;\n","import { call, put, takeLatest } from \"@redux-saga/core/effects\";\nimport { API } from \"common/http/axiosClient\";\nimport {\n fetchUrlsPending,\n // fetchUrlsError,\n fetchUrlsSuccess,\n FETCH_URLS,\n} from \"./urlAction\";\n\nfunction* getUrl(action) {\n yield put(fetchUrlsPending());\n try {\n const urls = yield call(API.getUrls);\n yield put(fetchUrlsSuccess(urls));\n } catch (err) {\n // yield put(fetchUrlsError(err));\n yield put(fetchUrlsSuccess([{}]));\n }\n}\n\nconst urlSaga = [takeLatest(FETCH_URLS, getUrl)];\n\nexport default urlSaga;\n","import { all } from \"redux-saga/effects\";\nimport externalDataSaga from \"store/external-data/externalDataSaga\";\nimport urlSaga from \"./custom-url/urlSaga\";;\n\nexport default function* rootSaga() {\n yield all([...externalDataSaga, ...urlSaga]);\n}\n","import { createStore, compose, applyMiddleware } from 'redux';\nimport rootReducer from 'store/rootReducer';\nimport createSagaMiddleware from 'redux-saga';\nimport rootSaga from './rootSaga';\n\nconst sagaMiddleware = createSagaMiddleware();\n\nlet store;\n\nconst middlewares = [sagaMiddleware];\n\nif (process.env.NODE_ENV === 'development') {\n const reduxFreeze = require('redux-freeze');\n middlewares.push(reduxFreeze);\n\n const composeEnhancers =\n window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n\n store = createStore(\n rootReducer,\n composeEnhancers(applyMiddleware(...middlewares))\n );\n} else {\n store = createStore(rootReducer, applyMiddleware(...middlewares));\n}\n\nsagaMiddleware.run(rootSaga);\n\nexport default store;\n","import { version } from \"../package.json\";\nimport React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport App from \"App\";\nimport { Provider } from \"react-redux\";\nimport store from \"store/store\";\nimport { HashRouter } from \"react-router-dom\";\nimport ScrollToTop from \"react-router-scroll-top\";\n// import AuthWrapper from \"auth/AuthWrapper\";\n\nimport i18next from \"i18next\";\nimport Backend from \"i18next-xhr-backend\";\n\nimport \"./index.scss\";\n\nconst app = (\n \n \n \n \n {/* */}\n \n {/* */}\n \n \n \n);\n\n// const institutions = [\"uom\", \"vu\"];\ni18next.use(Backend).init(\n {\n lng: \"uom\", // change this to change the translation used\n fallbackLng: \"uom\", // prevent loading other locales than 'en'\n debug: true,\n backend: {\n loadPath: `${process.env.PUBLIC_URL}/config/translation.json`,\n },\n },\n function (err, t) {\n ReactDOM.render(app, document.getElementById(\"root\"));\n },\n);\n","// extracted by mini-css-extract-plugin\nmodule.exports = {\"headerContainer\":\"Header_headerContainer__3PVZz\",\"navContainer\":\"Header_navContainer__4RMeB\",\"brandLogoContainerContainer\":\"Header_brandLogoContainerContainer__3D7-d\",\"brandingTextDivider\":\"Header_brandingTextDivider__hHHmz\",\"brandingTextContainer\":\"Header_brandingTextContainer__2MV3w\",\"startApplicationBtn\":\"Header_startApplicationBtn__xEOcG\",\"navbarLink\":\"Header_navbarLink__1bAbb\",\"navbarLinkIconStyle\":\"Header_navbarLinkIconStyle__LoeE8\",\"logoContainer\":\"Header_logoContainer__1Ch4P\",\"menuBtn\":\"Header_menuBtn__3i_XT\",\"navDrawer\":\"Header_navDrawer__2KoJK\",\"drawerNav\":\"Header_drawerNav__onNR6\",\"drawerClose\":\"Header_drawerClose__1AeV6\",\"hidden\":\"Header_hidden__1YvOj\",\"navbarLinkText\":\"Header_navbarLinkText__1p4dS\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"rootTab\":\"SearchResultTab_rootTab__G8DR3\",\"tabContent\":\"SearchResultTab_tabContent__3xeId\",\"tabpane\":\"SearchResultTab_tabpane__2AwTP\",\"tabBadge\":\"SearchResultTab_tabBadge__3Y-hB\",\"resultListContainer\":\"SearchResultTab_resultListContainer__1v5IV\",\"resultNotFoundContainer\":\"SearchResultTab_resultNotFoundContainer__1kLXf\",\"tabContentIntro\":\"SearchResultTab_tabContentIntro__3cu3r\",\"tabTooltipIcon\":\"SearchResultTab_tabTooltipIcon__O5KRN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"savedCreditContainer\":\"SavedCreditItems_savedCreditContainer__h9Wts\",\"mobileLineSeparator\":\"SavedCreditItems_mobileLineSeparator__3iglw\",\"title\":\"SavedCreditItems_title__KQsPN\",\"navContainer\":\"SavedCreditItems_navContainer__1wHH5\",\"groupedCreditContainer\":\"SavedCreditItems_groupedCreditContainer__1JudW\",\"sourceInstitutionLabel\":\"SavedCreditItems_sourceInstitutionLabel__2Z5aw\",\"backLink\":\"SavedCreditItems_backLink__3W3ep\",\"backIcon\":\"SavedCreditItems_backIcon__2rTTp\",\"noSavedCreditContainer\":\"SavedCreditItems_noSavedCreditContainer__3Q8aN\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"layoutRoot\":\"App_layoutRoot__3FhXZ\",\"footerContainer\":\"App_footerContainer__zlfyd\",\"contentContainer\":\"App_contentContainer__3BvVB\",\"headerContainer\":\"App_headerContainer__3EsT6\",\"ribbonContainer\":\"App_ribbonContainer__3OSpf\",\"ribbon\":\"App_ribbon__2PBDH\",\"skipToContent\":\"App_skipToContent__1PZ_j\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"navContainer\":\"HelpInstruction_navContainer__1_u-P\",\"helpContainer\":\"HelpInstruction_helpContainer__ow3D_\",\"helpMainTitle\":\"HelpInstruction_helpMainTitle__1q5Rk\",\"helpContent\":\"HelpInstruction_helpContent__3FBzR\",\"helpContentTitle\":\"HelpInstruction_helpContentTitle__3Oe-N\",\"collapsePanelHeader\":\"HelpInstruction_collapsePanelHeader__iXf1a\",\"collapsePanelContent\":\"HelpInstruction_collapsePanelContent__2G10y\"};"],"sourceRoot":""}