{"version":3,"sources":["helpers/TypeChecks.ts","store/SearchJob/types.ts","store/MyPlan/types.ts","store/JobPathList/types.ts","store/Jobs/types.ts","store/Agreement/types.ts","helpers/DateHelper.ts","models/UnemploymentFundMembershipType.ts","store/Citizen/types.ts","models/JobPathModel.ts","helpers/CreateGuid.ts","models/SearchListModel.ts","store/Person/types.ts","models/Template/InputModel.ts","models/QueryFilter.ts","models/Template/DataTypes/NumberInput.ts","models/DashboardFilterModel.ts","models/Template/DataTypes/IntervalInput.ts","models/Template/DataTypes/TextInput.ts","helpers/CreateEmptyDataObjects.ts","models/CodeListEntryModel.ts","helpers/FormatStrings.ts","AzureAuth/authConfig.ts","store/Preparation/types.ts","store/Template/types.ts","components/Loader/Loader.tsx","components/Loader/index.ts","models/Template/JobMatchTemplateModel.ts","models/InterviewTypeIdentifier.ts","store/MyPlan/reducers.ts","store/Auth/types.ts","models/GeoPoint.ts","models/Template/DataTypes/TagInput.ts","store/Search/types.ts","models/ApiResponseEnumModel.ts","store/Print/types.ts","store/Errors/types.ts","store/DraftPlan/types.ts","images/PinnedJobsFull.svg","images/PinnedJobsTransparrent.svg","models/JobModel.ts","store/SearchJob/reducer.ts","images/times-close-icon.svg","index.tsx","models/InterviewParticipant.ts","store/Loader/types.ts","images/company-jobpath.svg","images/green-arrow-upwards.svg","images/add-plus-icon.svg","images/Logo_Jobportal_1.svg","images/green-circle-checkmark.svg","images/addTagIcon.svg","serviceWorker.ts","images/paper-clip.svg","images/Logo_Jobmatch_small.svg","images/question-mark-circle-icon.svg","images/megaphone.svg","images/filter-icon.svg","images/dsa-jobportal-logo.png","images/dsa-blob.svg","images/arrow-right.svg","images/dsa-kompas-logo.svg","images/dsa-last-step-image-2.png","videos/onboarding-step-one.mp4","videos/onboarding-step-two.mp4","videos/onboarding-step-three.mp4","videos/onboarding-step-four.mp4","videos/onboarding-step-five.mp4","videos/onboarding-step-six.mp4","videos/onboarding-intro.mp4","images/dsa-app-icon.png","images/dsa-app-content.png","routes.ts","store/Agreement/actions.ts","models/HttpMethodsEnum.ts","helpers/RequestHeaders.ts","AzureAuth/api.ts","AzureAuth/ApiInfo.ts","models/QueryObject.ts","helpers/UrlHelper.ts","store/SearchJob/actions.ts","models/ValuesAndAttributeName.ts","models/Location.ts","helpers/DSADataHelper.ts","store/Jobs/actions.ts","store/JobPathList/actions.ts","models/MyPlanModel.ts","store/Preparation/actions.ts","models/PersonGroupIdentifier.ts","helpers/ToastHelper.ts","store/Template/actions.ts","store/Citizen/actions.ts","models/TableOptionsModel.ts","store/DraftPlan/actions.ts","models/MeetingModel.ts","helpers/MeetingHelper.ts","store/MyPlan/actions.ts","models/JobSearchEntryModel.ts","helpers/TableHelper.ts","images/index.ts","components/GeneralTableItem/GeneralTableItem.tsx","helpers/ObjectHelper.ts","helpers/ListHelper.ts","components/GeneralListView/GeneralListView.tsx","components/Buttons/CloseButton/CloseButton.tsx","models/JobLogEntryModel.ts","components/RoundedCheckMark/RoundedCheckMark.tsx","components/JobLogModal/JobLogSource/JobLogSource.tsx","components/CalendarGeneral/CalendarGeneral.tsx","components/Dropdown/DropdownCalendar/DropdownCalendar.tsx","helpers/DownloadOrOpenBlob.ts","components/JobLogModal/JobLogApplyMethod/JobLogApplyMethod.tsx","components/InputFile/InputFile.tsx","components/ApplicationFile/ApplicationFile.tsx","helpers/CodeListHelper.ts","models/JobLogToJobMapModel.ts","store/Loader/actions.ts","helpers/SwalHelper.ts","store/Person/actions.ts","models/DFDGDocument.ts","helpers/CreateDocumentLoader.ts","components/Buttons/ButtonGeneral/ButtonGeneral.tsx","components/JobLogModal/JobLogDocuments/JobLogDocuments.tsx","components/JobLogModal/JobLogJobSearchStatus/JobLogJobSearchStatus.tsx","components/Buttons/CheckMarkButtonWithText/CheckMarkButtonWithText.tsx","components/JobLogModal/JobLogModal.tsx","components/Buttons/RadioButtonCustom/RadioButtonCustom.tsx","components/SearchListWithCheckboxes/SearchListWithCheckboxes.tsx","components/SearchAddress/SearchAddress.tsx","components/JobLogModal/JobLogDetails/JobLogDetails.tsx","components/popups/RemarkPopUp/RemarkPopUp.tsx","components/DsaButton/DsaButton.tsx","helpers/ImageHelper.ts","models/Agreement/AgreementCategoriesEnum.ts","helpers/RegexHelper.ts","components/ModalForShowJobDescription/ModalForShowJobDescription.tsx","components/ModalToDisplayCompany/ModalToDisplayCompany.tsx","components/JobLogItem/JobLogItem.tsx","components/ModalEmptyJobLog/ModalEmptyJobLog.tsx","scenes/MyPlanScene/MyPlanScene.tsx","helpers/ExportFiles.ts","components/Buttons/ExpandButton/ExpandButton.tsx","components/SearchList/SearchList.tsx","components/FilterJobSearch/FilterJobSearch.tsx","components/Dropdown/SearchFilterDropdown/SearchFilterDropdown.tsx","components/Dropdown/MoreMenu/MoreMenu.tsx","components/Buttons/CheckboxMobile/CheckboxMobile.tsx","components/MapView/MapView.tsx","components/MapView/helpers.ts","components/JobItem/JobItem.tsx","components/JobsList/JobsList.tsx","components/Input/SearchInputBox/SearchInputBox.tsx","components/SearchAndSortJobs/SearchAndSortJobs.tsx","models/AddressModel.ts","history.ts","scenes/SearchJobScene/SearchJobScene.tsx","i18n/translations.ts","models/OccupationOpportunityModel.ts","components/Tag/Tag.tsx","components/JobPath/JobPath.tsx","components/Lists/JobPathList/JobPathList.tsx","components/ModalForJobInJobPathView/ModalForJobInJobPathView.tsx","components/JobPathView/JobPathView.tsx","components/SweetAlertCustom/SweetAlertCustom.tsx","components/ModalForAddJobPathWizard/ModalForAddJobPathWizard.tsx","scenes/JobPathScene/JobPathScene.tsx","store/Print/actions.ts","components/Print/Print.tsx","scenes/FooterScene/FooterScene.tsx","components/ModalComponents/GeneralModalRightSide/GeneralModalRightSide.tsx","components/Buttons/RedirectToButton/RedirectToButton.tsx","AzureAuth/LoginButton/LoginButton.tsx","components/HeaderButtons/HeaderButtons.tsx","store/Errors/actions.ts","store/Search/actions.ts","components/Headline/Headline.tsx","components/MyPlanTextComponent/MyPlanTextComponent.tsx","components/ModalNewestMyPlan/ModalNewestMyPlan.tsx","AzureAuth/LogoutButton/LogoutButton.tsx","components/MobileBurgerMenuSettings/MobileBurgerMenuSettings.tsx","components/MobileBurgerMenu/MobileBurgerMenu.tsx","components/FilterMenu/FilterMenu.tsx","components/MobileHeaderButtons/MobileHeaderButtons.tsx","scenes/DSAOnboardingScene/DSAOnboardingScene.tsx","components/HeaderUpper/HeaderUpper.tsx","components/ModalToDisplayMyPlanText/ModalToDisplayMyPlanText.tsx","models/Template/DataResponseModel.ts","components/MyPlanJobsToPrint/MyPlanJobsToPrint.tsx","components/HeaderLower/HeaderLower.tsx","scenes/HeaderScene/HeaderScene.tsx","GuardedRoute.tsx","store/Auth/actions.ts","global/configuration.ts","i18n.ts","App.tsx","components/ModalGeoLocation/ModalGeoLocation.tsx","hooks.ts","AzureAuth/AuthWrapper.tsx","store/Citizen/reducer.ts","store/Errors/reducer.ts","store/JobPathList/reducer.ts","store/Jobs/reducer.ts","store/Language/types.ts","store/Language/reducers.ts","models/Agreement/TextAgreementModel.ts","models/Agreement/AgreementModel.ts","store/Agreement/reducer.ts","store/Auth/reducer.ts","store/Preparation/reducer.ts","store/Search/reducer.ts","store/Print/reducer.ts","helpers/TemplateHelper.ts","store/Template/reducer.ts","store/DraftPlan/reducer.ts","store/Dashboard/reducer.ts","store/Loader/reducer.ts","store/JobSearchRequirement/reducer.ts","store/Person/reducer.ts","store/index.ts","store/Dashboard/types.ts","store/JobSearchRequirement/types.ts","configureStore.ts","images/chevron-left.svg","images/chevron-right.svg","images/calendar-icon-2.svg","images/jobpath-images/map-pin-square.svg","images/jobpath-images/map-pin-triangle.svg","images/jobpath-images/map-pin-star.svg","images/jobpath-images/map-pin-line.svg","images/jobpath-images/map-pin-hexagon.svg","images/map-pin-profile.svg","images/map-pin-company.svg","images/remaining-jobpath-icon.svg","images/remaining-jobpath-icon-DSA.svg","images/jobpath-images/jobpath-square-border.svg","images/jobpath-images/jobpath-triangle-border.svg","images/jobpath-images/jobpath-star-border.svg","images/jobpath-images/jobpath-line-border.svg","images/jobpath-images/jobpath-hexagon-border.svg","images/jobpath-images/job-without-jobpath.svg","images/close-icon-searchbox.svg","images/red-arrow-downwards.svg","images/yellow-line-icon.svg","images/removeTagIcon.png","images/StatisticButton.svg","images/PersonButton.svg","images/agreementImg.svg","images/HelpButton.svg","images/CreateAgreementDsa.svg"],"names":["isEmptyOrUndefined","val","equals","val1","val2","doesArrayContainValue","arr","length","i","formatCollectionToString","prop","seperator","endOfStringSymbol","capitalizeFirstLetter","returnString","convertFirstLetterToUppercase","formatCollectionWithoutProp","isObjEmpty","obj","undefined","data","combineTwoStringsWithChecks","first","second","strToReturn","isFirstNotEmpty","isSecondNotEmpty","concat","UPDATE_REGION","UPDATE_FOREIGN_COUNTRY","UPDATE_WORKTIME_ARRAY","UPDATE_SINGLE_WORKTIME","UPDATE_TRANSPORT_TIME","UPDATE_FILTER_SORT_DROPDOWN","ADD_JOBFILTER_ID_ELEMENT_TO_EXPAND","REMOVE_JOBFILTER_ID_ELEMENT_TO_EXPAND","FETCH_ALL_REGIONS","FETCH_ALL_JOBTYPES","UPDATE_QUERYFILTERS","SET_IS_DONE_QUERY_UPDATING","UPDATE_DISTANCE","TOGGLE_INTIAL_FILTERS","TOGGLE_QUERYFILTER","SET_FILTER_OPTION_TYPE","SHOULD_FADE_JOBS_IN","INDEX_OF_JOB_IN_LIST_REMOVED","ADD_OCCUPATION_TO_TEMP_LIST","REMOVE_OCCUPATION_FROM_TEMP_LIST","RESET_ALL_OCCUPATIONS","SAVE_TEMP_OCCUPATIONS_TO_OCCUPATIONS_TO_DISPLAY_LIST","TRIGGER_CHECKED_ON_OCCUPATION","ADD_MUNICIPALITY_TO_TEMP_LIST","REMOVE_MUNICIPALITY_FROM_TEMP_LIST","RESET_ALL_MUNICIPALITIES","SAVE_TEMP_MUNICIPALITIES_TO_MUNICIPALITIES_TO_DISPLAY_LIST","TRIGGER_CHECKED_ON_MUNICIPALITY","ADD_JOBID_ON_HOVER","TOGGLE_CHOSEN_INDUSTRY","REMOVE_ALL_INDUSTRIES_FROM_TEMPLIST","SAVE_INDUSTRIES_FROM_TEMP_TO_DISPLAY_LIST","ADD_INDUSTRY_TO_TEMP_LIST","REMOVE_INDUSTRY_FROM_TEMP_LIST","SET_COMPANY_OCCUPATIONS","CLEAR_COMPANY_OCCUPATIONS","SET_IS_DONE_FETCHING_COMPANY_OCCUPATIONS","FETCH_COMPANY_OCCUPATIONS_ERROR","SET_ADDED_OR_PINNED_JOB","RESET_ALL_FILTERS","UPDATE_EMPLOYMENT_DURATION","SET_JOBNET_JOBTYPE","SET_JOBORDER_JOBTYPE","REMOVE_QUERYFILTER","ADD_QUERY_FILTER","UPDATE_QUERY_FILTER","CLEAR_ALL_SEARCH_JOB_DATA","SET_DSA_JOB_FILTER","SET_TEMP_DSA_JOB_FILTER","SET_WINDOW_INNERWIDTH","TOGGLE_DSA_OCCUPATIONS","TOGGLE_DSA_ACADEMIC_JOBS","ADD_MYPLAN_SUCCESS","ADD_MYPLAN_ERROR","BEGIN_ADD_MYPLAN","FETCH_NEWEST_MYPLAN_SUCCESS","FETCH_GET_NEWEST_MYPLAN_ERROR","BEGIN_FETCH_NEWEST_MYPLAN","GET_ALL_PLANS","IS_AGREEMENT_DONE","GET_ALL_PLANS_ERROR","IS_DONE_FETCHING_NEWEST_MY_PLAN","IS_MYPLAN_SAVED_SUCCESFULLY","SHOULD_SHOW_MYPLAN_DISCLAIMER","INTERVIEW_WITH_MORE_AUTHORITIES","PLAN_TYPE_CHOSEN","INTERVIEW_TYPE_CHOSEN","INTERVIEW_CONTACT_TYPE_CHOSEN","PARTICIPATION_TYPE_CHOSEN","SET_TEMP_JOBLOG_LIST","ADD_JOBPATH_TO_JOBLOG","COMPARE_AND_SET_JOBLOGS","CLEAR_TEMP_JOBLOG_LIST","SET_EARLIER_JOBPATHS_FROM_MEETINGS","SET_FULLPLAN_FORMATTED_STRING","CLEAR_FULLPLAN_FORMATTED_STRING","SET_FULLPLAN_FORMATTED_TEXT_FETCH_ERROR","SET_PLANDESCRIPTION_FORMATTED_STRING","CLEAR_PLANDESCRIPTION_FORMATTED_STRING","SET_AGREEMENTS_FORMATTED_STRING","CLEAR_AGREEMENTS_FORMATTED_STRING","SET_INTERVIEW_PARTICIPANT_BY_BOOKING","REMOVE_INTERVIEW_PARTICIPANT","UPDATE_INTERVIEW_PARTICIPANT","SET_INTERVIEW_PARTICIPANT","CLEAR_INTERVIEW_PARTICIPANTS","SET_PINNED_JOBS_IN_NEWEST_MY_PLAN_FROM_JOBPATH","SET_INTERVIEW_PARTICIPANTS","SET_JOBLOG_SCROLL","SET_ACTIVE_JOBLOG_FILTER","CHOSEN_MYPLAN_SORT_ITEM","CLEAR_ALL_MYPLAN_DATA","ADD_JOBPATH","ADD_REMAINING_JOBPATH","DELETE_JOBPATH","UPDATE_JOBPATH","SET_QUALIFICATIONLIST_DRAGANDDROP","SET_JOBPATHLIST_DRAGANDDROP","DELETE_JOBPATH_QUALIFICATION","IS_FILTER_CHOSEN","ADD_JOB_TO_JOBPATH","ADD_JOB_TO_FILTEREDJOBS","REMOVE_JOB_FROM_FILTEREDJOBS","REMOVE_JOB_FROM_JOBPATH","SET_JOBPATH_TO_DISPLAY","SET_JOBPATHS_TO_MYPLAN_JOBPATHS","IS_MYPLAN_JOBPATHS_ADDED_TO_JOBPATHS","SET_JOBPATH_JOB_CONFIRMED_HANDLED","SET_OCCUPATIONS_FROM_QUALIFICATIONS","SET_SIMILAR_QUALIFICATIONS","UPDATE_FILTERED_JOBS_JOBPATH","CLEAR_JOBPATH_DATA","SET_ALL_JOBPATHS_TO_FILTER_CHOSEN","SET_SHOULD_DISPLAY_ALL_JOBS","SET_PINNED_JOBS_FROM_NEWEST_MYPLAN","ADD_PINNED_JOB_TO_PINNEDJOBS","REMOVE_PINNED_JOB_FROM_PINNEDJOBS","ADD_PINNED_JOBS_TO_MYPLAN","CLEAR_PINNED_JOBS","SET_JOBPATHS_REMOVED","SET_JOBPATHS","ADD_JOBSEARCH_ENTRY_ID_TO_JOBPATHS","REMOVE_JOBSEARCH_ENTRY_ID_FROM_JOBPATH","CLEAR_ALL_JOBPATH_DATA","SET_JOBS","UPDATE_JOB_TITLE","FETCH_ALL_JOBS_SUCCESS","FETCH_ALL_JOBS_ERROR","FETCH_ALL_JOBS","FETCH_ALL_QUALIFICATIONS_SUCCESS","FETCH_ALL_QUALIFICATIONS_ERROR","FETCH_ALL_QUALIFICATIONS","FETCH_ALL_OCCUPATIONS_SUCCESS","FETCH_ALL_OCCUPATIONS_ERROR","FETCH_ALL_OCCUPATIONS","FETCH_ALL_INDUSTRIES_SUCCESS","FETCH_ALL_INDUSTRIES_ERROR","FETCH_ALL_INDUSTRIES","FETCH_ALL_MUNICIPALITIES_SUCCESS","FETCH_ALL_MUNICIPALITIES_ERROR","BEGIN_FETCH_ALL_MUNICIPALITIES","FETCH_ALL_FILTERED_JOBS_SUCCESS","FETCH_ALL_FILTERED_JOBS_ERROR","FETCH_ALL_FILTERED_JOBS","REMOVE_JOB_FROM_STATE","GET_FILTERED_JOBS_WITHOUT_JOBPAHTS","IS_DONE_FETCHING_FILTERED_JOBS","SET_JOBMODEL_TO_DISPLAY","CLEAR_JOBMODEL_TO_DISPLAY","SET_SINGLEJOBS_TO_DISPLAY","SET_FETCH_SINGLE_JOB_ERROR","IS_FETCHING_SINGLE_JOB_OR_COMPANY_OCCUPATIONS","IS_FETCHING_FILTERED_JOBS","SET_FILTERED_ALL_JOBS","CLEAR_ALL_JOB_DATA","SET_DISPLAY_LOADER","REMOVE_DATA_FROM_AGREEMENT","ADD_AGREEMENT","DELETE_AGREEMENT","UPDATE_AGREEMENT","ADD_AGREEMENT_ID_ELEMENT_TO_EXPAND","REMOVE_AGREEMENT_ID_ELEMENT_TO_EXPAND","CLEAR_DRAFT_AGREEMENT_TEMP","SET_DRAFT_AGREEMENT","IS_AGREEMENT_IN_TEMP_ARRAY","UPDATE_DRAFT_AGREEMENT_TEXT","SET_NEWEST_MY_PLAN_TEXT_AGREEMENTS","SET_QUALIFICATION_AGREEMENTS","ADD_QUALIFICATION_AGREEMENT","UPDATE_QUALIFICATION_AGREEMENT","REMOVE_QUALIFICATION_AGREEMENT","SET_ALL_QUALIFICATIONSAGREEMENTS_TO_DONE","SET_ALL_QUALIFICATIONSAGREEMENTS_TO_NOT_DONE","SET_QUALIFICATION_AGREEMENTS_ADDED_FROM_NEWEST_MYPLAN","CLEAR_QUALIFICATION_AGREEMENTS_ADDED_FROM_NEWEST_MYPLAN","REMOVE_NEWEST_MYPLAN_QUALIFICATION_AGREEMENT","SET_NEWEST_MY_PLAN_QUALIFICATION_AGREEMENTS","CLEAR_TEXT_AGREEMENTS","CLEAR_QUALIFICATION_AGREEMENTS","SET_SAVED_REMARK","DELETE_REMARKS","CLEAR_ALL_AGREEMENT_DATA","createLocaleDate","moment","Date","toDate","formatDateToWeek","date","locale","isoWeek","formatDateToDanishSignature","format","getUnixTime","unix","newDateWithoutTimestamp","toDateString","formatDate","d","month","getMonth","day","getDate","year","getFullYear","toString","dateThreeMonthsBack","subtract","convertToDayDateMonthYear","tempDate","monthName","convertTimestampToDateString","timestamp","UnemploymentFundMembershipType","GET_CITIZEN","SEARCH_CITIZEN","CLEAR_CITIZEN","UPDATE_TRAVEL_TIME_CITIZEN","IS_LOADING_CITIZEN","SET_JOBBAROMETER","SET_CITIZEN_UNEMPLOYMENT_FUND","SET_JOBSEARCH_DEFINITION_LIST","SET_CITIZEN_BOOKINGS","SET_CHOSEN_BOOKING","SET_EARLIEST_JOBSEARCH_DEFINITION","SET_CITIZEN_DATA_RESPONSE_ENUM","SET_DFDG_MYPLAN_VERSIONS","SET_DOCUMENT","CLEAR_DOCUMENT","SET_DOCUMENT_API_RESPONSE","POST_DATA_GROUP_TO_CITIZEN","SET_NEWEST_DATA_RESPONSE","CLEAR_ALL_CITIZEN_DATA","JobPathType","isJobPathSaved","jobPath","isSaved","JobPathModel","name","description","occupations","filteredOccupations","industries","jobs","companyJobs","qualifications","similarQualifications","qualificationsFromCV","dateCreated","isFilterChosen","filteredJobs","pinnedJobs","imageId","isActive","profession","workAreas","areaOfSpecializations","type","specializationKeywords","jobSearchEntries","id","dateDeleted","this","createGuid","Guid","create","toJSON","value","createEmptyGuid","createEmpty","SearchListModel","checked","SET_JOB_SEARCH_ENTRIES","SET_JOB_SEARCH_ENTRY","UPDATE_JOB_SEARCH_ENTRY","DELETE_JOB_SEARCH_ENTRY","UPDATE_JOB_SEARCH_ENTRIES_WITH_JOBPATH_ID","SET_JOBPATH_ID_ON_JOB_SEARCH_ENTRY","SET_PERSON_GEO_DATA","SET_SHOW_GEO_LOCATION_MODAL","SET_PERSON_MEMBER_SHIP","CLEAR_ALL_PERSON_DATA","ADD_DOCUMENT_TO_JOBLOG","REMOVE_DOCUMENT_ON_JOBLOG","CLEAR_TEMP_FILES","SET_HAS_JOBPATH_FILTERS","ValueType","InputDataType","InputModel","title","valueType","$type","QueryFilter","InputType","DashboardFilterModel","startDate","endDate","users","contactGroups","emptyJobPathModel","emptyRemainingJobPathModel","NormalJobPath","emptyDashboardFilterModel","CodeListEntryModel","identifier","codeListName","slice","toUpperCase","toLowerCase","AUTH_CONFIG","signUpSignIn","clientId","authority","knownAuthorities","redirectUri","postLogoutRedirectUri","domain_hint","MSAL_CONFIG","auth","navigateToLoginRequestUrl","cache","cacheLocation","storeAuthStateInCookie","system","iframeHashTimeout","loggerOptions","loggerCallback","level","message","containsPii","loginRequest","scopes","extraQueryParameters","loginRedirectRequest","redirectStartPage","silentLoginRequest","accessRedirectRequest","silentAccessRequest","SET_VIEW_FROM_LOWER_HEADER","SET_FILTERED_JOBSLOGS_FROM_JOBPATH","SET_JOBLOGS_WITHOUT_JOBPATH_ID","SET_IS_LOADING_DONUT_CHART","SET_IS_LOADING_STACKED_BAR_CHART","SET_LOADER","SET_JOBS_WITH_JOBPATH_OVERVIEW","SET_JOBS_WITHOUT_JOBPATH_OVERVIEW","CLEAR_ALL_PREPARATION_DATA","SET_VALUE_ON_TEMPLATE","REMOVE_VALUE_ON_TEMPLATE","IS_TEMPLATE_SAVED","BEGIN_SAVE_TEMPLATE","UPDATE_TEMPLATE_VALUE","SET_JOBMATCH_TEMPLATES","SET_HAS_BEEN_SCREENED","CLEAR_GUIDANCE_VALUES_ON_DATA_FIELDS","CLEAR_ALL_TEMPLATE_DATA","Loader","className","props","lowerBackDropOpacity","color","height","width","loadingText","React","JournalSystem","JobMatchTemplateModel","key","knowledgeSharingSystem","screeningDataGroup","guidanceDataGroup","hasEmploymentFund","hasJobLog","myPlanConfiguration","journalSystem","InterviewTypeIdentifier","JobLogFilter","myPlanJoblogTableNames","tableName","isSortable","options","largeTh","mediumTh","smallTh","myPlanJoblogTableNamesEmployeed","initialState","newestMyPlan","allPlans","shouldShowMyPlanDisclaimer","isDoneFetchingNewestMyPlan","saveMyPlanSuccess","beginAddMyPlan","interviewWithMoreAuthorities","planType","interviewType","interviewContactType","participationStatusType","tempJobLogList","earlierJobPaths","formattedFullPlan","formattedMyPlanFetchError","formattedAgreements","formattedPlanDescription","interviewParticipants","isSavingMyPlan","jobLogScrollTop","activeJobLogFilter","ALL","chosenMyPlanSort","sortMethod","tableHeader","reducer","state","action","actions","myPlan","textAgreements","map","agreement","agreementID","done","JointJobInterviewWithUnemploymentBenefitRecipient","findIndex","x","jobLogID","updatedJobLogArray","jobPathID","jobLogsFromCitizen","jobLogsFromMyPlan","tempJobLogs","joblog","index","myPlanJobLogIdx","j","tempInterviewParticipants","bookingParticipants","participant","tempBookingParticipant","InterviewParticipant","interviewParticipantName","interviewContactTypeIdentifier","interviewParticipantTypeIdentifier","externalAuthorityParticipantID","interviewParticipantIdentifier","updatedArr","jobPaths","tempJobPath","LoginSuccess","LogoutSuccess","LoginError","Initializing","Initialized","AcquiredIdTokenSuccess","AcquiredIdTokenError","AuthenticatedStateChanged","IS_AUTHENTICATED","GeoPoint","longitude","latitude","TagInput","inputType","tag","CLEAN_QUERY","START_SEARCH","FINISH_SEARCH","UPDATE_SELECTION","CLEAR_ALL_SEARCH_DATA","ApiResponseEnumModel","SHOULD_PRINT","SET_ELEMENT_TO_PRINT","CLEAR_PRINTED_ELEMENT","CLEAR_ALL_PRINT_DATA","SET_ERROR","RESET_ERROR","CLEAR_ALL_ERRORS","SET_DRAFT_PLAN","SET_DRAFT_PLANS","SET_DRAFT_PLAN_INTERVAL_ID","module","exports","SourceType","JobReducerDefaultState","filterIdExpandList","regions","foreignCountries","employmentDuration","setEmploymentDuration","workTimeArray","transportTime","chosenTransportTime","filterSortDropdown","chosenSortFilter","queryFilters","setQueryFilterDefaultState","isDoneQueryUpdating","distance","jobTypes","addedInitialFilters","filterOption","fadeJobsIn","removedIndexInJobList","hoveredId","tempOccupationList","occupationsToDisplay","tempMunicipalityList","municipalitiesToDisplay","industryDisplayList","tempIndustries","companyOccupations","isDoneFetchingCompanyOccupations","companyFetchError","addedOrPinnedJob","jobNetJobType","jobOrderJobType","dsaJobFilter","Profession","WorkAreas","AreaOfSpecialisation","Occupations","tempDSAJobFilter","windowInnerWidth","window","innerWidth","toggleDsaOccupations","toggleDsaAcademicJobs","employment","updatedWorkTimeArray","idToBeRemoved","updatedExpandedIdList","currentQueryFilters","removedOldValueFromQueryFilters","filter","qf","includes","filterType","newQueryFilters","push","updatedQueryFilters","shouldAdd","indexToRemove","find","splice","newJobTypes","q","findOccupation","conceptUriDa","findMunicipality","occupation","notExists","oc","queryFilter","municipality","isChecked","industry","newIndustries","temp","setRegionsDefaultState","tempRegions","region","employmentDurationArr","JOBNET","JOBORDER","store","configureStore","isProduction","process","NODE_ENV","pca","PublicClientApplication","ReactDOM","render","instance","currentVersion","version","isEnabled","isVerboseMode","loadingComponent","document","getElementById","serviceWorker","interviewParticipantContactTypeIdentifier","externalAuthorityParticipantId","Boolean","location","hostname","match","unregister","navigator","ready","then","registration","catch","error","console","JobmatchRoute","clearAllAgreementData","addQualificationAgreement","qualification","removeQualifcationAgreement","qualificationId","clearQualificationAgreements","clearTextAgreements","setSavedRemark","remark","deleteRemarks","setNewestMyPlanQualficationAgreements","qualificationAgreements","HttpMethods","setNewestMyPlanTextAgreements","setQualificationAgreements","startUpdateAgreement","isTemp","dispatch","getState","updateAgreement","handleShouldRemoveQualificationAgreement","qualificationID","qualificationIDCount","jobpath","handleQualificationAgreementsFromNewestPlan","newestPlanQualificationAgreements","newestMyPlanJobPaths","tempFilteredQualificationAgreements","citizen","cv","tempQualificationAgreements","tempAddedQualificationAgreements","requestHeader","token","requestHeaders","Headers","bearer","append","requestHeaderPDF","requestHeaderFormData","msalInstance","getToken","a","currentAccounts","getAllAccounts","account","acquireTokenSilent","resp","accessToken","InteractionRequiredAuthError","acquireTokenRedirect","getOptions","httpMethod","body","pdfHeader","errorMessage","method","headers","mode","GET","JSON","stringify","getOptionsFormData","baseUrl","apiInfo","endpoints","UtilityService","GetJobmatchConfiguration","JobService","GetAllQualifications","GetOccupationOpportunitiesByPostalCode","GetAllIndustries","GetFilteredJobs","GetViregoOrdersByOrgName","orgName","GetRegions","GetJobTypes","GetJobById","GetJobByIdViregoByOrgName","GetOccupationsFromQualifications","GetSimilarQualifcationsFromQualifications","GetSimilarQualifcationsFromQualification","GetJobBarometer","GetAllMunicipalities","GetSingleJobsToDisplay","GetAllCompanyOccupationsFromCVR","GetFilteredCompanies","MyPlanService","AddMyPlan","GetNewestPlan","GetAllPlans","GetEarlierJobPaths","GetMyPlanFormattedString","PostPinnedJobsToNewestMyPlan","SaveDraftMeeting","GetAllDraftMeetings","CitizenService","GetCitizenById","SearchCitizen","GetMyPlanVersions","GetCitizenBookingsByGuid","GetMyPlanPDF","PostDataResponse","GetDocumentFromJobLog","GetNewestDataResponse","Access","default","UserService","GetAllCitizenRelations","AddCitizenRelation","ManagementInformationService","GetChart","GetDataForDownload","GetUsers","PersonService","GetEntries","PostJobSearchEntry","PostJobSearchEntryWithJobPath","PostOtherEntry","PutJobSearchEntry","PutOtherEntry","DeleteJobSearchEntry","GetJobPathFilters","PutJobPathFilters","PutJobPathFiltersWithJob","DeleteJob","PinJobToJobPath","Document","GetPersonMembership","DSA_Members","UserRead","QueryObject","timeOfRequest","jobIdsToFilter","conceptUriDas","keywords","addPublicToUrl","url","isAuth","urls","split","clearAllSearchJobData","updateRegion","updateForeignCountry","foreignCountry","updateWorkTimeArray","updateSingleWorkTime","workTime","updateFilterSortDropdown","chosenFilter","addJobFilterIdElement","filterId","removeJobFilterIdElement","getAllRegions","UpdateQueryFilter","SetIsDoneQueryUpdating","isDone","UpdateDistance","toggleInitialFilters","isAdded","toggleQueryFilter","showAllJobs","setFilterOptionType","shouldFadeJobListIn","fadeIn","removedIndexOfJobInList","addOccupationToTempList","addMunicipalityToTempList","removeOccupationFromTempList","removeMunicipalityFromTempList","removeAllOccupationsFromTempList","removeAllMunicipalitiesFromTempList","saveOccupationsFromTempToDisplayList","saveMunicipalitiesFromTempToDisplayList","municipalities","triggerCheckedOnOccupations","triggerCheckedOnMunicipalities","addJobIdOnHover","ToggleIndustry","RemoveAllIndustriesFromTemplist","SaveIndustriesFromTempToDisplayList","AddIndustryToTempList","RemoveIndustryFromTempList","setCompanyOccupations","clearCompanyOccupations","setIsDoneFetchingCompanyOccupations","fetchCompanyOccupationsError","updateEmploymentDuration","setAddedOrPinnedJob","setJobNetJobType","isChosen","setJobOrderJobType","addQueryFilter","updateQueryFilter","removeQueryFilter","setDSAJobFilter","setTempDSAJobFilter","setWindowInnerWidth","setToggleDsaAcademicJobs","getAllRegionFromAPI","fetch","res","ok","json","resetAllFiltersInFilterJobSearch","setAllJobpathsToFilterChosen","ValuesAndAttributeName","values","attributeName","typeName","Location","maxDistance","dsaData","require","Results","orderResponseTimestamp","getTime","clearAllJobData","setDisplayLoader","load","getAllJobsError","setFilteredJobsSuccess","getAllQualificationsSuccess","getAllQualificationsError","getAllOccupationError","getAllIndustriesSuccess","getAllIndustriesError","getAllMunicipalitiesSuccess","getAllMunicipalitiesError","getFilteredJobsWithoutJobPath","setJobToDisplay","job","isFetchingSingleJobsOrCompanyOccupations","isFetching","isFetchingFilteredJobs","removeJobFromState","doneFetchingFilteredJobs","clearJobToDisplay","setSingleJobsToDisplay","fetchSingleJobError","responseFailed","setFilteredAllJobs","getAllJobsFromAPI_Jobcenter","geoLocation","queryObj","POST","getAllQualificationsFromAPI","getAllOccupationOppurtunitiesFromAPI","postalcode","o","pId","statusText","getAllMunicipalitiesFromAPI","getAllIndustriesFromAPI","getProfessionOccupations","occupationIds","ProfessionOccupations","occu","getAllProfessionOccupations","tempList","getAllAcademicOccupations","handleJobsFromQuery","queryObjectClone","queryResponses","tempJobPaths","isAllJobs","onlyQueryJobs","callback","jobPathList","jobIdsAdded","companyIdsAdded","personGeoData","person","searchJob","item","String","result","Response","isViregoOrder","jobPathId","updateJobPathFilteredJobs","jobPathIdx","EMPTY","addAndCheckQueryResponses","success","fetchJobsByQueryObject","queryObject","addConceptUriDas","qualificationsClone","qual","isMapped","checkQueryObjectFilters","requestTime","jobpathToUse","getOccupationsFromQualfications","qualificationsAndPostcalcode","postalCode","address","zipCode","setOccupationsFromQualifications","fetchSimilarQualifications","setSimilarQualifications","fetchSingleJobToDisplay","jobID","isCompany","cvr","fetchAllCompanyOccupations","fetchSingleJob","fetchJobsToDisplayFromIds","jobIDs","valuesAndAttributeName","clearAllJobPathData","addRemainingJobPath","UpdateJobPath","addPinnedJob","removePinnedJob","addPinnedJobsFromMyPlan","clearPinnedJobs","AddJobToJobPath","isShowingJobs","FormattedMyPlanEntities","setJobPathsEqualToMyPlan","isDraftMeeting","removeJobFromJobpath","jobId","removeJobFromFilteredJobsInJobpath","jobpathID","setJobPathToDisplay","clearJobPathData","setPinnedJobsFromNewestMyPlan","setJobPaths","startUpdateJobPath","startAddJobPath","newJobPath","startDeleteJobPath","qualificationCount","handleRemoveQualificationAgreementsFromJobpath","setJobPathStateByNewestPlanOrDraftPlan","jobPathsToFilter","activeJobPaths","myPlanMeeting","removedJobPaths","postPinnedJobIdsToNewestMyPlan","citizenGuid","jobIndex","pinnedJobIds","remainingJobPath","setTimeout","setPinnedJobsInNewestMyPlanJobPath","clearAllPreparationData","setViewToDisplayFromHeader","viewToDisplay","shouldDisplayLoader","isLoading","PersonCategoryIdentifier","MyPlanModel","joblogList","remarks","customData","jobLogList","ToastIcon","clearGuidanceValuesFromDataFields","clearAllCitizenData","setJobBaroMeter","getJobBarometerFromAPI","postDataGroupToCitizenService","dataGroup","response","TableButtonTypes","TopToast","toastIcon","swal","mixin","toast","icon","backdrop","position","showConfirmButton","timer","timerProgressBar","customClass","container","popup","SUCCESS","WARNING","header","content","postDraftMeeting","meeting","isAutoSave","fire","ERROR","MeetingModel","userID","timeStamp","citizenID","planTypeIdentifier","interviewWithmoreAuthorities","bookingID","createMeeting","combinedJobPaths","combineJobPathsForMyPlan","localAccountId","parse","savedRemark","dataResponse","chosenBooking","bookingIdentifier","jobAgreementsConfirmedHandled","companyAgreementsConfirmedHandled","c","jobPathsRemoved","clearAllMyPlanData","showMyPlanDisclaimer","saveMyPlanError","setInterviewWithMoreAuthorities","setPlanType","setInterviewType","setInterviewContactType","setParticipationType","participationType","setTempJobLogList","joblogs","compareAndSetJobLogs","clearTempJobLogList","setEarlierJobPathsFromMeetings","clearFullPlanFormattedString","clearPlanDescriptionFormattedString","clearAgreementsFormattedString","setMyPlanFormattedTextError","setJobLogScrollTop","scrollTop","setActiveJobLog","setChosenSortItem","addMyPlanToDB","SchultzFasit","interval","draftPlan","draftPlanIntervalID","clearInterval","intervalID","updateStateToNewestMyPlan","fetchEarlierJobPathsFromMeetings","fetchMyPlanFormattedString","templateKey","formattedMyPlanEntity","FullPlan","fullMyPlanFormatted","PlanDescription","planDescriptionFormatted","Agreements","agreementsFormatted","fetchFormattedMyPlan","personCategory","Aktivitetsparat","participants","bookings","bookingIdx","b","booking","clearMyPlanInterviewAndBookingData","JobApplicationSource","TableOptionsModel","calculateColumnSize","columnResult","listSize","isSmall","isMedium","isLarge","smallColumnResult","mediumColumnResult","largeColumnResult","handleThSize","handleTdSize","smallTd","mediumTd","largeTd","jobmatchIcon","AddPlusIcon","PinnedJobsFull","PinnedJobsTransparrent","greenCircleCheckbox","GeneralTableItem","handleShowDropdown","dropdownId","setState","dropDownIdsToShow","handleCloseDropdown","handleOnClicks","e","clickMethod","buttonType","tdData","dropDownId","stopPropagation","preventDefault","dropdown","onClick","handleDropdownItem","handleTdClassNames","classNames","usePin","constrainText","alignCenter","renderTooltip","tooltip","Tooltip","isFetchingTableData","style","marginTop","inlineStyle","tableData","tableSizeResults","TABLE_ROW","scope","usePinWithText","PIN","shouldDisplayPinLoader","src","isPinned","button","inspectBtn","OverlayTrigger","overlay","disabled","disable","INSPECT","faExternalLinkAlt","deleteBtn","DELETE","faTrash","btnRounded","checkbox","ADD_BUTTON_ROUNDED","updateBtn","UPDATE","faPen","eyeBtn","INSPECT_EYE","faEye","imageWithText","TEXT","textToWrap","text","NONE","combineObjectWithMultipleProps","combineWithOptionalProps","combinedString","optionalCombinedString","sortAlphabeticallyWithMultipleProps","ascending","list","optionalProps","sort","firstObj","secondObj","alphabeticallySort","GeneralListView","listScrollTop","virtualizedListRef","handleTableSizeResult","results","tableHeaders","rowRenderer","parent","columnIndex","rowIndex","displayPinLoader","sortedList","handleOnClick","getTableData","dropDownIdsForLoading","dropdownIdsForLoading","shouldDisplayDropdownLoader","displayDropdownLoader","handleSortIcon","chosenSortItem","faSortDown","faSortUp","faSort","handleSort","staticSort","specificSortItem","useCustomSortMethod","customSortMethod","handleSorting","handleClassNamesOnTableHeader","halfCell","onScroll","handleRetainScrollPosition","current","Grid","scrollToPosition","onScrollPresenceChange","params","vertical","classList","contains","remove","add","CellMeasurerCache","fixedWidth","defaultHeight","reduxSortItem","prevProps","updateScrollPosition","onScrollbarPresenceChange","ref","rowCount","deferredMeasurementCache","rowHeight","CloseButton","timesIcon","WeeklyWorkTime","JobSearchStatus","JobSource","JobApplyMethod","WorkTimeOfDay","RoundedCheckMark","faCheck","JobLogSource","handleSourceContentOnChange","property","Number","jobLog","jobApplicationSourceIdentifier","prevState","handleUpdateJobLog","keyword","connect","ChevronLeft","ChevronRight","CalendarGeneral","handleTileDisabled","tilesToDisable","conditionalOperator","dateToCompare","setTimeOnDate","event","todaysDate","setHours","getHours","setMinutes","getMinutes","setSeconds","getSeconds","handleCalendarOnChange","nextArrow","prevArrow","minDetail","next2Label","prev2Label","nextLabel","prevLabel","onChange","tileDisabled","CalendarIcon","XIcon","DropdownCalendar","dropdownRef","inputRef","cursor","handleDropdownClickedOutside","show","target","handleShowCalendar","inputValue","handleInputFieldDateOnChange","editDateOnInputField","dateValue","replaceDateString","isValidDateNumber","test","validDay","validMonth","selectionStart","isValidDate","convertCustomDateStringToDate","dateString","setSelectionRange","handleInputFieldDateToDisplay","yToDisplay","newVal","replace","addEventListener","removeEventListener","isMandatory","placeholder","pattern","Dropdown","DropdownToggle","handleCloseIcon","DropdownMenu","DropdownItem","BlobMimes","JobLogApplyMethod","handleApplyMethodContentOnChange","typeOfSubmission","submissionDate","tempDeadlineDate","submissionDeadlineDate","clearDates","isMobile","jobSearchStatus","NotSearched","InputFile","inputFileRef","clearValue","handleAddFile","accept","ApplicationFile","paperClip","file","documentType","downloadFile","handleDocumentIdentifier","faFileDownload","closeIcon","deleteFile","getDocumentCodeListTypeName","JobLogToJobMapModel","jobSearchEntryId","jobNetId","setLoader","shouldLoad","loadText","MySwal","withReactContent","showCustomSwal","customClasses","confirmButton","cancelButton","html","confirmButtonTxt","showCancelButton","cancelButtonTxt","confirmButtonText","cancelButtonText","reverseButtons","showCloseButton","closeButton","focusCancel","focusConfirm","setJobSearchEntries","setJobSearchEntry","updateJobSearchEntry","addDocumentToJobLog","joblogEntryIdentifier","sentToService","removeDocumentFromJobLog","jobLogDocumentIdentifier","removeInJobSearchEntries","removeDocumentInJobSearchEntries","clearTempFiles","updateJobSearchEntriesWithJobPathIDs","setPersonGeoData","geoData","setShowGeoLocationModal","setPersonMemberShip","setHasJobPathFilters","hasJobPathFilters","fetchJobSearchEntries","to","from","setMonth","toISOString","substr","batch","postJobSearchEntry","jobEntry","created","handleFilesOnSave","documentsFailed","jobLogToJob","confirm","putJobSearchEntry","PUT","deleteJobSearchEntry","jobSearchId","fetchJobPathFilters","updateJobPathFilters","putJobPathFilters","jobPathFilters","tempJobpath","addJobOnJobPathFilter","jobType","isPinnedJob","pinJobOnJobPathFilter","deleteJobOnJobPathFilter","isRemoved","uploadFile","formData","FormData","joblogDocumentIdentifier","doc","blob","myBlob","downloadURL","URL","createObjectURL","link","createElement","href","filedownloadName","extension","setAttribute","appendChild","click","removeChild","uploadDocumentToRedux","removeDocumentFromRedux","createdJobSearchEntryId","tempFiles","count","tempFile","isEmpty","fetchPersonMembership","NotAMember","DFDGDocument","status","lastModified","documentTypeCodeList","deleted","extensionTypeCodeList","tempIndex","GetDocumentExtensionTypeIdentifierCodeList","GetJoblogDocumentTypeIdentifierCodeList","InitializeCodeLists","xmltype","pdfType","CVType","JobEntryType","JobSearchType","getCodeListItem","splitTitle","join","createDocumentLoader","div","backgroundColor","opacity","top","left","zIndex","display","overflow","outline","loaderDiv","transform","fill","innerHTML","p","fontSize","fontFamily","fontWeight","innerText","ButtonGeneralType","downloadOrOpenBlob","filename","mime","blobWindow","Blob","msSaveBlob","blobURL","tempLink","download","revokeObjectURL","JobLogDocuments","addFile","files","size","activeCodeList","ArrayBuffer","documents","displayFileName","newWindow","open","marginLeft","PDF","combinedFilesCollection","bindActionCreators","JobLogJobSearchStatus","handleJobSearchStatusOnChange","CheckMarkButtonWithText","handleCheckBoxLabelClicked","currentTarget","nodeValue","checkBoxChanged","checkBoxClicked","checkBox","readOnly","showImage","jobPathLogo","input","setInputFirst","htmlFor","JobLogContentToDisplay","ButtonGeneral","handleButtonType","INFORMATION","background","borderColor","DANGER","TRANSPARENT","border","FLOATING","bind","additionalCssClassNames","RadioButtonCustom","radioChanged","SearchListWithCheckboxes","searchInput","createRef","wrapperRef","timeoutRef","scrollToElement","ele","isDropdownVisible","handleSearchChangeWithCheckboxes","inputOnChange","clearTimeout","loading","items","indexOf","selectedElementHandler","dataEntity","radioButton","checkboxButton","handleClickOutsideDropdown","triggerShow","outerElement","shouldAddTransitionFx","showSuggestions","inputHasFocus","hideSuggestions","isShowingInput","focus","Fragment","onFocus","onBlur","placeHolder","autoComplete","onMouseDown","displayFooter","resetFiltersClicked","saveFiltersClicked","Component","SearchAddress","dawaURI","handleAddressOnChange","searchVal","search","query","searchResults","handleAddressClicked","updateAddress","tekst","searchAddress","scrollIntoView","JobLogDetails","handleDetailContentOnChange","weeklyWorkTimeTypeIdentifier","hoursPerWeek","FULLTIME","jobPostingURL","baseType","companyName","companyAddressStreet","companyPostCodeIdentifier","companyTown","companyContactPerson","companyPhone","email","trim","companyEmail","isValid","companyCountry","handleSearchAddressToDisplay","handleSearchAddressChosen","adresse","vejnavn","husnr","postnr","supplerendebynavn","postnrnavn","isCompanyCountryDenmark","PARTTIME","isCompanyJob","isExistingItem","RemarkPopUp","handleRemarkOnChange","handleRemarkOnBlur","HandleClosePopup","closePopUp","handleDeleteRemarks","toLocaleLowerCase","autoFocus","buttonText","additionalClassNames","primaryButton","DsaButton","handleRemarkBtnClicked","displayRemarkPopUp","FaIconProp","srcString","JobLogModal","checkExistingJobLogData","jobSearchEntry","existingJobLog","handleContentToDisplay","isExitingItemNotEmpty","existingItem","contentToDisplay","Source","ApplyMethod","Documents","Details","scrollToSection","handlePrevious","pageCount","handleNext","handleSaveJobLog","mandatoryData","isJobLog","closeModal","handleDeleteJobLog","handleCloseModalWithSwal","staticItem","isEqual","shouldUpdate","displayLastPage","mandatoryDataNotFullfilled","Modal","dialogClassName","scrollable","onHide","Header","Body","Footer","Button","pointerEvents","isBefore","square","triangle","star","line","hexagon","company","remainingJobPathUnauth","squareWithBorder","triangleWithBorder","starWithBorder","lineWithBorder","hexagonWithBorder","jobsWithoutJobpath","jobPathImages","jobPathImagesObject","image","notChosenToJobpathImageObject","IsLoggedIn","msalContext","accounts","AgreementCategories","AgreementCategoryTitles","remainingJobPathImageObject","imagesObject","isValidGuid","guid","RegExp","ModalForShowJobDescription","redirectButtonClicked","jobToDisplay","displayWorkHours","displayStr","workHoursPerWeekMin","workHoursPerWeekMax","displayContactInformation","contactFirstname","contactLastname","contactPhone","contactEmail","getJobPathImage","jobpathId","context","redirectToDSAWithJob","encodeURIComponent","dangerouslySetInnerHTML","__html","jobFetchError","openModal","singleJobToDisplayFetchError","workHoursToDisplay","contactInformationToDisplayStr","contactInformationElement","jobAddressElement","buttons","closeOnClickOutside","Object","keys","workPlaceAddress","workPlaceCity","workPlacePostalCode","Title","jobPathTitle","personMembership","page","JOBINSPIRATION","PREPARATION","FOLLOWUP","AGREEMENTANDJOBSMODAL","toggleJobFromMyPlan","pinImage","JOBINSPIRATION_PREPARATION","MYPLAN","addJobToJobPath","occupationName","lastDateApplication","isExternal","presentation","DsaJobmatchLogo","contextType","MsalContext","fetchSingleJobsError","ModalToDisplayCompany","hasBeenCalled","fetchCompanyOccupationsCalled","fetchCompanyInfoFailed","element","companyLogo","shouldAddJob","shouldRemoveJob","removeJobFromJobPath","JOBPATH","shouldDisplayAllJobs","JobLogItem","combinedAddressString","deadlineString","createdString","jobPathImage","UnemployedMember","faPlusCircle","ModalEmptyJobLog","notPinnedJob","pinnedJob","MyPlanScene","handleAddressToDisplay","addressStreet","city","handleConvertJobSearchEntries","convertedJobSearchEntries","deadlineDate","createdDate","documentCount","jobPathName","getJobPathName","getJobPathImageId","handleConvertJobs","convertedJobs","deadline","handleFilteredJobLogs","ACTIVE","JOBLOG","handleShouldDisableInspectBtn","handleDataToDisplay","handleGetJobOrJoblog","tables","tdTitle","tdCompanyAndAddress","tdJobPath","tdDeadline","tdInspectJobLog","tdDeleteJobLog","tdSubmission","tdCreated","tdJobSearchStatus","tdDocumentCount","tdAddJobLog","useCheckbox","handleUpdateScrollPosition","shouldReset","tempJobLogScroll","jobIdx","companyIdx","NOT_ADVERTISED","ADVERTISED","companyJobId","contactPerson","handleAddOrUpdateJobLog","handleRemoveJob","handleInspectJobLog","handleInspectJob","showJobLogModal","chosenJobLog","startsWith","showJobModal","chosenJob","tempJob","handleCloseJobLogModal","handleJobLogFilter","filteredTableData","handleMyPlanJobLogSort","handleDownloadMyList","myListData","dataFromApi","fileName","workbook","Sheets","XLSX","json_to_sheet","skipHeader","SheetNames","excelBuffer","bookType","FileSaver","exportDataToXLSX","handleShowJobModal","flippedVal","handleCloseEmptyJobLogModal","showEmptyJobLogModal","handleAddEmptyJobLog","faDownload","showDisclaimerModal","templates","template","jobLogs","ExpandButton","idInNumberList","idOfElement","expandClicked","faChevronDown","addTagIcon","closeTagIcon","SearchList","FilterJob","useState","setResults","staticResults","setStaticResults","setLoading","setValue","numberOfShownResults","addMoreResults","similarItemsShownResults","addMoreSimilarResults","dropDownState","setDropdownState","firstTabShown","setTabShown","setTransition","useSelector","useRef","infoDiv","filterJobSearchDiv","scrollMode","block","inline","behavior","useRadioButton","displayItemsByDefault","handleTabClicked","handleItemClicked","closeOnClick","useEffect","displayWithoutCheckboxes","resultsFromStaticItems","staticItems","staticitem","similarItems","shouldDisplaySimilarItems","aria-labelledby","defaultValue","staticItemDescription","itemDescription","similarItem","SearchFilterDropdown","handleDropDownClicked","isClicked","handleCheckboxOnChange","handleCheckBoxOnChange","handlePlaceHolderTextToDisplay","callerType","types","closeFilterDropdown","inlineZIndexAndPos","Toggle","variant","itemArray","MoreMenu","handleMenuClicked","menuItemFunction","shouldCloseMenu","IconButton","aria-label","aria-controls","aria-haspopup","Menu","anchorEl","keepMounted","onClose","PaperProps","stylePopUp","menuItems","menuItem","MenuItem","menuItemText","menuItemHandler","CheckboxMobile","handleButtonClicked","buttonChanged","buttonClicked","FilterJobSearch","handleSetDSASearchListValues","professions","handleGetWorkAreas","handleGetAreaOfSpecialisation","workarea","PredefinedOccupations","ConceptUriDa","handleLocation","distanceToUpdate","fetchRegions","r","handleQueryFilters","handleRunQuery","dsaFilters","dsaFilterToQuery","displayLoader","emptyJobPathObj","tempKeywords","filteredAreaOfSpecializations","SpecializationKeywords","getSpecializedKeywordsByWorkArea","jobPathsFilterChosen","handleJobPathFilterChosenOnDistance","filterNotChosenCount","defaultDistanceForJobs","defaultDistanceForAllJobs","handleDistanceToShow","handleJobPathCheckBoxClicked","handleRegionCheckboxClicked","handleForeignCountriesCheckboxClicked","handleWorkTimeOnChange","newValues","handleWorkTimeOnChangeCommited","handleUpdateQueryFilterWithWorkTime","handleDistanceOnChange","newValue","shouldHandleRunQuery","handleDistanceOnComitted","handleSingleWorkTimeOnChange","worktimeToDisplay","worktimes","parseInt","handleJobTypeClicked","handleJobOpportunitiesClicked","queryFilterMin","queryFilterMax","handleFilterOption","option","sourceTypeIdOne","sourceTypeIdTwo","sourceTypeIdThree","handleFilterEllipsisVClicked","isFilterButtonClicked","handleResetFilters","Promise","resolve","shouldCloseMoreMenu","handleResetToCitizenFilters","updateSearchListItems","attribute","tempOccupations","industryToAdd","tempMunicipalities","m","searchListItem","resetFilterInSearchList","saveFiltersInSearchList","handleSaveDSAFilters","dsaFilter","unwantedAOS","aos","el","handleOccupationsChecked","handleMunicipalitiesChecked","handleIndustryCheckboxOnChange","handleDsaJobfilterCount","dsaCount","w","handleCheckedDSA","arrItem","filteredWorkAreas","academicProfession","workArea","sk","getSpecializedKeyWordsByProfession","Set","areaOfSpecialisation","k","specializationkeyword","has","Array","handleItemArrayToDisplay","localeCompare","handleGetCandidateOccupations","tempArr","handleExpandButtonClicked","filterIdList","handleEmploymentDurationOnChange","tempEmploy","handleDisplayJobPathNameWithJobsCount","displayAccordionDSA","Accordion","defaultActiveKey","DSA","Card","as","eventKey","Collapse","isNotAuth","handleToggleDsaOccupations","setToggleDsaOccupations","handleToggleAcademicJobs","handleGeographicFilterCount","jobOpportunities","menuItemPopUpStyle","dsaSearchListItem","allJobs","filteredAllJobs","MenuForFilterButton","disableFilterBtn","EmployedMember","ButtonGroup","ListGroup","GEOGRAPHY","regionName","DISTANCE","InputGroup","Append","Slider","valueLabelDisplay","max","onChangeCommitted","step","WORKTIME","min","OCCUPATION","M","MapView","mapRef","CURRENT_POSITION_LAYER_ID","JOB_SOURCE_ID","COMPANY_SOURCE_ID","PERSON_SOURCE_ID","JOBS_IN_JOBPATH_SOURCE_ID","NON_CLUSTERED_LAYER_ID","MAX_AUTO_ZOOM_LEVEL","CLUSTER_RADIUS","OPACITY","mapStyleLoaded","mapBounds","LngLatBounds","loadMapLayers","personAddress","personAddressDataUpdatedHandler","addPersonLayers","jobDataUpdatedHandler","addJobLayers","jobsInJobPath","jobsInJobpathDataUpdatedHandler","addJobsInJobpathLayers","companies","companyDataUpdatedHandler","addCompanyLayers","onPersonMouseMove","coords","lngLat","getCanvas","lat","lng","onPersonMouseUp","source","getSource","_data","geometry","coordinates","off","handleShouldFitBoundOnJobSearch","sourceId","pinnedAddedOrRemovedJob","setPinnedAddedOrRemovedJob","handleFitBounds","features","bounds","feature","extend","getSouthWest","getNorthEast","fitBounds","padding","shouldFitBounds","maxZoom","getZoom","minZoom","easeTo","zoom","center","initMap","shouldResize","resize","mapEvents","loadImages","loadImage","once","dragRotate","touchZoomRotate","disableRotation","symbols","symbol","hasImage","img","Image","onload","addImage","Map","on","queryRenderedFeatures","point","layers","clusterId","properties","cluster_id","getClusterExpansionZoom","err","pointCount","point_count","getClusterLeaves","clickedMarker","setHoverId","jobDescriptionPopUp","jobPopUpDescription","popupElement","points","f","maxHeight","marginBottom","subjects","listHeight","mapHeight","clientHeight","mapWidth","clientWidth","popupHeight","popupPadding","maxListHeight","middleOfPopup","unadjustedBottomPosition","y","adjustment","translateY","translateX","isCurrentlyShowingJobs","jobTitle","setData","zoomLevel","addSource","cluster","clusterRadius","Math","floor","clusterProperties","sumOfImageIds","maxOfImageIds","maxTravelTime","isStyleLoaded","getLayer","addLayer","paint","travelTimeLimit","Infinity","layout","images","isLoggedIn","pathId","travelTime","random","convertJobToGeoJson","updateSource","jobPathImgID","imageIdForJob","convertJobToJobpathImageID","convertJobPathToGeoJson","convertedCompanies","convertCompanyToGeoJson","convertedAddress","convertAddressToGeoJson","updatePersonAddress","clearPopup","JobItem","handleJobInspirationRemovePinnedJob","pinnedJobsInJobPath","indexOfJobInList","handleJobInspirationAddPinnedJob","handleToggleJobFromMyPlan","isPinJob","showCompany","showJob","isHover","showJobOrCompany","isDisplayingJobs","isCompanyJobAgreement","mouseLeaveEvent","mouseEnterEvent","displayCompanyAddress","handleJobItemLogoToDisplay","handleAddJobOrderJobScene","isAddedToMyPlan","handleJobPathNameToDisplay","jp","isJobPathOpen","faIcon","hoveredJobCSSClass","jobIdHovered","indexOfJobRemoved","onMouseEnter","onMouseLeave","enablePin","enableHover","JobsList","shouldDisplayJob","shouldAddJobToPlan","isFilteredJobs","shouldPinJobToPlan","calculateRowHeight","heightFromAutoSizer","divideHeight","virtualizeList","selected","shouldFadeJobsIn","SearchInputBox","handleInputFocus","handleInputBlur","handleKeyDownToSearch","handleSearchButtonClicked","onKeyDown","handleSearchOnChange","SearchAndSortJobs","handleSelectedDropdownChanged","searchJobBarClicked","jobSearchText","handleJobSearchOnChange","combinedJobs","valueInSearchBox","Item","highLightedJob","highlightedJob","AddressModel","streetName","number","floorIdentifier","suiteIdentifier","country","createBrowserHistory","jobpathSwal","Swal","SearchJobScene","indexOfJobInJobs","showModal","selectedJobFromMap","jobPathTitleForModal","redirectToSearchFilter","isDeepLink","handleQuery","handleFilteredJobPaths","handleClickedMarker","jobpathName","handleAddJobOrder","handleRemovePinnedJobFromNewestPlan","handleAddPinnedJobToNewestPlan","handleOnHoverJob","handlePinnedOrAddedJobInMapView","pinnedOrAddedJob","modalResponseError","handleDateSortingAsc","tempA","tempB","filterJobsOnChosenDropDown","notPinnedJobs","jobsToDisplay","occupationId","pin","handlePinnedJobs","handleShowJobs","jobsToReturn","displayAllJobs","handleRedirectToSearchFilter","sessionStorage","getItem","getElementsByClassName","jobToFetchByIdDeepLink","oldUrl","newUrl","pathname","SEARCHJOB","history","replaceState","hasAddedInitialFilters","onlyDisplayMap","sourceType","_Text","isDoneFetchingFilteredJobs","updateDistance","JobOpportunities","Tag","handleGoodOrBadOccupationsToDisplay","jobOppurtunities","LessGoodJobOppurtunities","GoodJobOppurtunities","LackOfLabour","Paradox","ComprehensiveLackOfLabour","tagIcon","shouldAddTag","greyOutClassEnabled","isValidTag","tagId","isOnCV","tagName","addOrRemoveTag","defaultProps","ownProps","JobPath","handleSearchedJobsAndMeetingsCountInJobPath","searchedCount","meetingsCount","potentialCount","Searched","Meeting","onJobPathClick","opportunity","joblogEntries","addIcon","JobPathList","isMaxJobpathsCreated","addNewJobpath","AddNewJobpath","jobPathElement","jobPathToShow","ModalForJobInJobPathView","JobPathView","deleteJobPathHandler","swal2","isConfirmed","onMobileDeleteJobpath","editJobPathHandler","edit","removeTag","DSAJobPath","updateJobPathTextHandler","handleJobpathJobClicked","showCompanyModal","showModalAddedJobs","handleCloseModal","handleRemoveJobFromJobPath","handleOccupationsToDisplay","n","forEach","candidateWorkArea","handleQualificationsToDisplay","tempQualifications","request","handleJobsInMapToDisplay","jobpathView","handleJobAgreementsInMap","handleMapMarkerClicked","jobsAddedToJobPath","substring","showModalMapJobs","chosenSortForSavedJobs","handlePinnedAddedOrRemovedJob","updateJobPathHandler","tempQualificationAgreement","qualificationPopoutVisible","occupationPopoutVisible","industryPopoutVisible","citizenAddress","shouldFitbounds","savedJobsSortList","updateName","onclick","switchViewButtons","switchView","updateButton","saveTempJobPath","when","mobileEditJobPath","faArrowLeft","onMobileBackArrowClick","jobBarometerUrl","jobBaroMeterUrl","sweetAlertNode","SweetAlertCustom","sweetAlertPopUpRef","handleClickOutsideSweetAlert","handleClearSweetAlert","buttonHandler","confirmButtonClicked","additionalConfirmButtonClicked","fadeOut","clear","subHeader","additionalConfirmButton","ModalForAddJobPathWizard","getEmptyJobPath","isUsedIcon","chooseJobpathType","JobPathScene","showJobPath","mobileEditJobpath","handleChooseJobPath","unmountComponentAtNode","sweetAlertPopup","addJobPathHandler","handleOpenAddJobPathModal","openAddJobpathModal","handleCancelAddJobPathModal","handleStopEdit","handleJobPathToDisplay","jobPathToDisplay","isNewestMyPlanFetched","isMyPlanJobpathsAdded","addJobPath","faPlus","searchedJobs","isMyPlanJobPathsAdded","preparation","clearAllPrintData","setShouldPrint","shouldPrint","setElementToPrint","clearPrintedElement","Print","print","FooterScene","moveTo","forward","goToIndex","currentIndexInRoutes","goForward","currUrl","currentUrl","goBack","assignCurrentUrl","updateMyPlan","KMDMomentum","shouldRedirect","navLinks","path","mobileNavLinks","isAuthenticated","backButton","navList","pathObject","statisticImg","personImg","agreementImg","helpImg","StyledBadge","withStyles","createStyles","badge","minWidth","Badge","GeneralModalRightSide","setShow","qualificationAgreementCount","agreementCount","reduce","acc","handleClose","handleShow","badgeContent","renderIcon","buttonCssClasses","headerText","children","RedirectToButton","redirectClicked","nameOfPage","LoginButton","useMsal","ssoSilent","loginRedirect","HeaderButtons","userClicked","showPopup","handleAccountName","idTokenClaims","given_name","family_name","handleRedirectToOnboarding","redirectToOnboarding","showProfileModal","ONBOARDING","rightSideButtons","QuestionMark","Megaphone","logoutRedirect","clearAllErrors","clearAllSearchData","Headline","t","i18n","MyPlanTextComponent","nextChar","iterator","charToReturn","companyAgreementIt","convertedCPR","citizenName","cpr","citizenCPR","fullName","confirmedHandled","ModalNewestMyPlan","showMyPlanModal","closeMyPlanModal","LogoutButton","additionalCssClass","logout","MobileBurgerMenuSettings","handleSaveDraftPlan","handleCloseMyPlanModal","handleShowMyPlanModal","MobileBurgerMenu","closeMenu","right","isOpen","openMenu","customBurgerIcon","customCrossIcon","FilterMenu","showModalForActivation","handleActivationButton","DSAStepToDisplay","MobileHeaderButtons","openBurgerMenu","openBurger","openFilterMenu","openFilter","closeBurgerMenu","closeFilterMenu","MAP","filterIcon","alt","faBars","HeaderUpper","resetDataToOriginalState","addDataFromMyPlan","clearAllData","clearAllTemplateData","backToSearchCitizen","showSwal","redirectToSearchCitizen","redirectToPrep","leftElement","dsaLogo","ModalToDisplayMyPlanText","isMyPlanTextToLong","myPlanHeaderTextToDisplay","fetchMyPlanTextFailed","formattedMyPlanTextError","DataResponseModel","dataGroupID","MyPlanJobsToPrint","fetchJobs","jobIds","HeaderLower","handleShowMyPlanClicked","jobPathsList","inputs","showMyPlanTextModal","handlePreparationChosenScene","preparationSceneChosen","midHeaderPreaparationisClicked","handlePrintMyPlan","myPlanElement","jobElement","myplanInnerHtml","jobInnerHtml","closeShowMyPlanText","handlePrintCV","cvToPrint","closeDraftMeetingModal","showDraftMeetingsModal","handleCopyToClipboard","range","createRange","selectNodeContents","sel","getSelection","removeAllRanges","addRange","execCommand","handleCopyPlan","handleJobLogModal","preparationSceneOptions","startNewPlan","shouldPrintModal","showingPrint","CV","cvStatusType","HeaderScene","GuardedRoute","exact","headerScene","routeName","footerScene","UpdateAccountStatus","payload","setIsAuthenticated","configuration","DSAOnboardingSteps","subTitle","subTitleSecond","ONE","TWO","THREE","FOUR","FIVE","SIX","SEVEN","DSAOnboardingScene","useHistory","chosenContent","setChosenContent","stepHistoryIds","setStepHistoryIds","handleNavigateContent","selectedItem","prevHistoryIds","dsaBlob","dsaCompass","stepList","handleDSAStepList","StepReview","StepOne","StepTwo","StepThree","StepFour","StepFive","StepSix","controls","light","dsaThumbnail","playing","config","attributes","controlsList","disablePictureInPicture","expirationDate","setFullYear","cookie","handleFinishOnboarding","finishIcon","resources","en","da","use","initReactI18next","init","keySeparator","interpolation","escapeValue","App","handleShowAppMessage","userAgent","handleCallApis","isAuthOnCallApis","isTablet","allowOutsideClick","DsaAppIcon","DsaAppContent","historyRedirect","hasUpdatedJobPathIDs","shouldUseApp","elementToPrint","displayingLoader","SEARCHJOB_BY_ID","LOADER","loader","ModalGeoLocation","handleSave","handleCancel","handleUpdateAddress","useAppSelector","AuthWrapper","useIsAuthenticated","showGeoModal","setShowGeoModal","ssoSilentAttempted","setssoSilentAttempted","useDispatch","showGeoLocationModal","handleGeoLocation","geolocation","getCurrentPosition","setPersonGeoLocation","handleResize","endsWith","handleRedirectPromise","CitizenReducerDefaultState","doneFetching","isLoadingCitizen","unemploymentFundName","jobSearchDefinitionList","dfdgMyPlanVersions","newestDataResponse","documentApiResponseEnum","DEFAULT","earliestJobSearchDefinition","citizenDataResponse","ErrorReducerDefaultState","qualificationList","idToCVRID","cvrId","companyIdsIndexToRemove","companyIdsAddedIndex","jobIdsIndexToRemove","jobIdsAddedIndex","language","TextAgreementModel","task","category","pageCategory","confirmedDate","agreementCategory","agreementPageCategory","AgreementReducerDefaultState","tempTextAgreements","agreementIdExpandList","draftTextAgreement","isTempAgreementInTempList","addedQualificationAgreements","newestMyPlanQualificationAgreements","initializing","initialized","idToken","PreparationDefaultState","filteredJobsLogsAndJobpath","jobLogsWithoutJobPathID","isLoadingDonutChart","isLoadingStackedBarChart","jobsInMapWithJobPaths","jobsInMapWithoutJobPaths","SearchDefaultState","templateInputIndexToRemove","inputID","valueToRemove","isTemplatedSaved","isSaving","hasBeenScreened","draftPlans","dashboards","dashboardFilter","dashboardUsers","dashboardsLoaded","filterOptions","checkAllUsers","checkAllContactGroups","setFakeMunicipalities","setFakeRegion","occupationsRequirement","municipalitiesRequirement","regionsRequirement","tempOccupationsRequirement","tempMunicipalitiesRequirement","tempRegionsRequirement","otherRequirementsText","healthLimitation","otherExpectations","RootState","combineReducers","isCreatedInTemp","findTempIndexToRemove","newTempArray","indexToUpdateTemp","tempStartArray","tempEndArray","indexToUpdate","startArray","endArray","tempAgreement","qualIdx","newestQualIdx","updatedArray","qualificationAgreement","tempQualiList","indexOfJobPath","jobPathToDelete","updatedJobPathList","jobPathInActive","updatedJobPathsArray","filterChosenFalseCount","jobpathIdx","companyIdsToFilter","remainingJobpathIndex","newestMyPlanRemainingJobPathIdx","jobsNotConfirmedHandled","companiesNotConfirmedHandled","newestMyPlanJobPathIdx","jobPathIndex","jobIndexToRemove","companyJobIndex","updatedCompanyArray","jobsIndexToRemove","companyIdxToRemove","jobpathIndex","jobSearchEntryIdx","isRemainingJobPath","remainingIndexToRemove","updatedJobs","updatedRemainingPinnedJobs","pinnedJobsIdx","updatedJobPathArr","pinnedJobIndex","jobFound","jobIdToUpdate","newArray","updatedFilteredAllJobsArr","updatedJobArr","errors","warning","MyPlanMeetingReducer","SearchJobReducer","screening","guidance","dashboard","item1","user","updatedUsersArr","jobSearchRequirement","resetType","tempJobSearchEntries","tempDocument","docIndex","tempFileindex","jobEntryID","middlewares","thunkMiddleware","middlewareEnhancer","applyMiddleware","enhancers","composeWithDevTools","createStore","rootReducer"],"mappings":"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","file":"static/js/main.76defcd4.chunk.js","sourcesContent":["import { convertFirstLetterToUppercase } from \"./FormatStrings\";\n\nexport const isEmptyOrUndefined = (val: any) => {\n if (\n val === null ||\n typeof val === null ||\n val === '' ||\n val === ' ' ||\n typeof val === 'undefined' ||\n val === 'undefined'\n ) {\n return true;\n }\n return false;\n};\n\n// Can probably be used later for agreement pop up bottom-.\nexport const isEllipsisActive = (\n element: any,\n id: number = 0,\n IdList: number[] = []\n): boolean => {\n let isEllipsisActive: boolean = false;\n if (IdList.includes(id)) {\n isEllipsisActive = true;\n } else if (!isEmptyOrUndefined(element)) {\n if (element.offsetWidth < element.scrollWidth) isEllipsisActive = true;\n } else isEllipsisActive = false;\n\n return isEllipsisActive;\n};\n\nexport function equals(val1: any, val2: any) {\n if (val1 === val2) {\n return true;\n }\n return false;\n}\n\nexport function displaySimpleDate(date: Date) {\n return date.toString().substring(0,10);\n}\n\nexport function doesArrayContainValue(arr: any, val: any) {\n if (arr?.length > 0)\n {\n for (let i = 0; i < arr.length; i++) {\n if (equals(arr[i], val)) {\n return true;\n }\n }\n }\n \n return false;\n}\n\n\nexport function formatCollectionToString(arr: any, prop: string, seperator: string, endOfStringSymbol: string, capitalizeFirstLetter?: boolean) {\n let returnString = \"\" as string;\n if (arr?.length > 0)\n {\n for(let i = 0; i < arr.length; i++) {\n if (arr[i] && arr[i][prop])\n {\n let val: string = capitalizeFirstLetter ? convertFirstLetterToUppercase(arr[i][prop]) : arr[i][prop];\n\n if(i == arr.length-1)\n returnString += val + endOfStringSymbol;\n else \n returnString += val + seperator;\n }\n }\n }\n return returnString;\n}\n\nexport function formatCollectionWithoutProp(arr: any, seperator: string, endOfStringSymbol: string, capitalizeFirstLetter?: boolean) {\n let returnString = \"\" as string;\n if (arr?.length > 0)\n {\n for(let i = 0; i < arr.length; i++) {\n if (arr[i])\n {\n let val: string = capitalizeFirstLetter ? convertFirstLetterToUppercase(arr[i]) : arr[i];\n\n if(i == arr.length-1)\n returnString += val + endOfStringSymbol;\n else \n returnString += val + seperator;\n }\n }\n }\n return returnString;\n}\n\nexport const isObjEmpty = (obj: any): boolean => {\n if(obj == undefined || obj == null) return true;\n \n for(let data in obj) {\n return false;\n } \n\n return true;\n}\n\nexport const combineTwoStringsWithChecks = (first: string | undefined, second: string | undefined): string => {\n let strToReturn: string = '';\n\n const isFirstNotEmpty = !isEmptyOrUndefined(first);\n const isSecondNotEmpty = !isEmptyOrUndefined(second);\n\n\n if(isFirstNotEmpty)\n strToReturn = strToReturn.concat(first!);\n\n if(isSecondNotEmpty)\n {\n if (isFirstNotEmpty)\n strToReturn = strToReturn.concat(' ' + second);\n else\n strToReturn = strToReturn.concat(second!);\n }\n \n if (!isFirstNotEmpty && !isSecondNotEmpty)\n strToReturn = '-';\n\n return strToReturn;\n}","import { RegionModel } from \"../../models/RegionModel\";\nimport { QueryFilter } from \"../../models/QueryFilter\";\nimport JobTypeModel from \"../../models/JobTypeModel\";\nimport OccupationOpportunityModel from \"../../models/OccupationOpportunityModel\";\nimport { SearchListModel } from \"../../models/SearchListModel\";\nimport JobModel from \"../../models/JobModel\";\nimport { MunicipalityModel } from \"../../models/MunicipalityModel\";\nimport IndustryModel from \"../../models/IndustryModel\";\nimport { FilterOptionTypesModel } from \"../../models/FilterOptionsModel\";\nimport DSAJobFilterModel from \"../../models/DSAJobFilterModel\";\n\nexport const UPDATE_REGION = 'UPDATE_REGION';\nexport const UPDATE_FOREIGN_COUNTRY = 'UPDATE_FOREIGN_COUNTRY';\nexport const UPDATE_WORKTIME_ARRAY = 'UPDATE_WORKTIME_ARRAY';\nexport const UPDATE_SINGLE_WORKTIME = 'UPDATE_SINGLE_WORKTIME';\nexport const UPDATE_TRANSPORT_TIME = 'UPDATE_TRANSPORT_TIME';\nexport const UPDATE_FILTER_SORT_DROPDOWN = 'UPDATE_FILTER_SORT_DROPDOWN';\n\n// Used for expanding filters\nexport const ADD_JOBFILTER_ID_ELEMENT_TO_EXPAND =\n 'ADD_JOBFILTER_ID_ELEMENT_TO_EXPAND';\nexport const REMOVE_JOBFILTER_ID_ELEMENT_TO_EXPAND =\n 'REMOVE_JOBFILTER_ID_ELEMENT_TO_EXPAND';\n\nexport const FETCH_ALL_REGIONS = \"FETCH_ALL_REGIONS\";\nexport const FETCH_ALL_JOBTYPES = \"FETCH_ALL_JOBTYPES\";\n\nexport const UPDATE_QUERYFILTERS = \"UPDATE_QUERYFILTERS\"\nexport const SET_IS_DONE_QUERY_UPDATING = \"SET_IS_DONE_QUERY_UPDATING\";\nexport const UPDATE_DISTANCE = \"UPDATE_DISTANCE\";\n\nexport const TOGGLE_INTIAL_FILTERS = \"TOGGLE_INTIAL_FILTERS\";\nexport const TOGGLE_QUERYFILTER = \"TOGGLE_QUERYFILTER\";\nexport const SET_FILTER_OPTION_TYPE = \"SET_FILTER_OPTION_TYPE\";\nexport const SHOULD_FADE_JOBS_IN = 'SHOULD_FADE_JOBS_IN';\nexport const INDEX_OF_JOB_IN_LIST_REMOVED = 'INDEX_OF_JOB_IN_LIST_REMOVED';\n\n// Filter searchlist actiontypes\n// occupations\nexport const ADD_OCCUPATION_TO_TEMP_LIST = 'ADD_OCCUPATION_TO_TEMP_LIST';\nexport const REMOVE_OCCUPATION_FROM_TEMP_LIST = 'REMOVE_OCCUPATION_FROM_TEMP_LIST';\nexport const RESET_ALL_OCCUPATIONS = 'RESET_ALL_OCCUPATIONS';\nexport const SAVE_TEMP_OCCUPATIONS_TO_OCCUPATIONS_TO_DISPLAY_LIST = 'SAVE_TEMP_OCCUPATIONS_TO_OCCUPATIONS_TO_DISPLAY_LIST';\nexport const TRIGGER_CHECKED_ON_OCCUPATION = 'TRIGGER_CHECKED_ON_OCCUPATION'\n\n// industries\n\n// municipalities\nexport const ADD_MUNICIPALITY_TO_TEMP_LIST = \"ADD_MUNICIPALITY_TO_TEMP_LIST\";\nexport const REMOVE_MUNICIPALITY_FROM_TEMP_LIST = \"REMOVE_MUNICIPALITY_FROM_TEMP_LIST\";\nexport const RESET_ALL_MUNICIPALITIES = \"RESET_ALL_MUNICIPALITIES\";\nexport const SAVE_TEMP_MUNICIPALITIES_TO_MUNICIPALITIES_TO_DISPLAY_LIST = \"SAVE_TEMP_MUNICIPALITIES_TO_MUNICIPALITIES_TO_DISPLAY_LIST\";\nexport const TRIGGER_CHECKED_ON_MUNICIPALITY = \"TRIGGER_CHECKED_ON_MUNICIPALITY\";\n\nexport const ADD_JOBID_ON_HOVER = \"ADD_JOBID_ON_HOVER\";\nexport const TOGGLE_CHOSEN_INDUSTRY = \"TOGGLE_CHOSEN_INDUSTRY\";\nexport const REMOVE_ALL_INDUSTRIES_FROM_TEMPLIST = \"REMOVE_ALL_INDUSTRIES_FROM_TEMPLIST\";\nexport const SAVE_INDUSTRIES_FROM_TEMP_TO_DISPLAY_LIST = \"SAVE_INDUSTRIES_FROM_TEMP_TO_DISPLAY_LIST\";\nexport const ADD_INDUSTRY_TO_TEMP_LIST = \"ADD_INDUSTRY_TO_TEMP_LIST\";\nexport const REMOVE_INDUSTRY_FROM_TEMP_LIST = \"REMOVE_INDUSTRY_FROM_TEMP_LIST\";\n\nexport const SET_COMPANY_OCCUPATIONS = \"SET_COMPANY_OCCUPATIONS\";\nexport const CLEAR_COMPANY_OCCUPATIONS = \"CLEAR_COMPANY_OCCUPATIONS\";\nexport const SET_IS_DONE_FETCHING_COMPANY_OCCUPATIONS = \"SET_IS_DONE_FETCHING_COMPANY_OCCUPATIONS\";\nexport const FETCH_COMPANY_OCCUPATIONS_ERROR = \"FETCH_COMPANY_OCCUPATIONS_ERROR\";\n\nexport const SET_ADDED_OR_PINNED_JOB = \"SET_ADDED_OR_PINNED_JOB\";\n\nexport const RESET_ALL_FILTERS = \"RESET_ALL_FILTERS\";\n\nexport const UPDATE_EMPLOYMENT_DURATION = \"UPDATE_EMPLOYMENT_DURATION\";\n\nexport const SET_JOBNET_JOBTYPE = \"SET_JOBNET_JOBTYPE\";\nexport const SET_JOBORDER_JOBTYPE = \"SET_JOBORDER_JOBTYPE\";\n\nexport const REMOVE_QUERYFILTER = \"REMOVE_QUERYFILTER\";\nexport const ADD_QUERY_FILTER = \"ADD_QUERY_FILTER\";\nexport const UPDATE_QUERY_FILTER = \"UPDATE_QUERY_FILTER\";\n\n// Clear All Search Job Data\nexport const CLEAR_ALL_SEARCH_JOB_DATA = \"CLEAR_ALL_SEARCH_JOB_DATA\";\n\nexport const SET_DSA_JOB_FILTER = \"SET_DSA_JOB_FILTER\";\nexport const SET_TEMP_DSA_JOB_FILTER = \"SET_TEMP_DSA_JOB_FILTER\";\n\nexport const SET_WINDOW_INNERWIDTH = \"SET_WINDOW_INNERWIDTH\";\n\nexport const TOGGLE_DSA_OCCUPATIONS = \"TOGGLE_DSA_OCCUPATIONS\";\nexport const TOGGLE_DSA_ACADEMIC_JOBS = \"TOGGLE_DSA_ACADEMIC_JOBS\";\n\n\ninterface SetChosenJobTypes {\n type: typeof SET_JOBNET_JOBTYPE | typeof SET_JOBORDER_JOBTYPE;\n data: boolean;\n}\n\ninterface AddOrRemoveFilterToExpand {\n type:\n | typeof ADD_JOBFILTER_ID_ELEMENT_TO_EXPAND\n | typeof REMOVE_JOBFILTER_ID_ELEMENT_TO_EXPAND;\n data: number;\n}\n\ninterface UpdateRegionOrForeignCountry {\n type: typeof UPDATE_FOREIGN_COUNTRY;\n data: [string, boolean];\n}\n\ninterface UpdateRegion {\n type: typeof UPDATE_REGION;\n data: RegionModel;\n}\n\ninterface UpdateWorkTimeArray {\n type: typeof UPDATE_WORKTIME_ARRAY;\n data: number[];\n}\n\ninterface UpdateSingleWorkTime {\n type: typeof UPDATE_SINGLE_WORKTIME;\n data: number;\n index: number;\n}\n\ninterface UpdateTransportTimeOrFilterSortDropdown {\n type: typeof UPDATE_TRANSPORT_TIME | typeof UPDATE_FILTER_SORT_DROPDOWN,\n data: string;\n}\n\ninterface GetAllRegions {\n type: typeof FETCH_ALL_REGIONS;\n data: RegionModel[];\n}\n\ninterface UpdateQueryFilters {\n type: typeof UPDATE_QUERYFILTERS;\n data: QueryFilter[];\n filterType: string;\n}\n\ninterface SetIsDoneQueryUpdating {\n type: typeof SET_IS_DONE_QUERY_UPDATING;\n data: boolean;\n}\n\ninterface UpdateDistance {\n type: typeof UPDATE_DISTANCE,\n data: number,\n}\n\ninterface GetAllJobTypes {\n type: typeof FETCH_ALL_JOBTYPES;\n data: JobTypeModel[];\n}\n\ninterface ToggleFilters {\n type: typeof TOGGLE_INTIAL_FILTERS,\n data: boolean;\n}\n\ninterface SetFilterOptionType {\n type: typeof SET_FILTER_OPTION_TYPE;\n data: FilterOptionTypesModel;\n}\n\ninterface ToggleQueryFilter {\n type: typeof TOGGLE_QUERYFILTER,\n data: QueryFilter,\n shouldAdd: boolean,\n showAllJobs: boolean,\n}\n\ninterface ShouldFadeJobsIn {\n type: typeof SHOULD_FADE_JOBS_IN;\n data: boolean;\n}\n\ninterface RemovedIndexOfJobInList {\n type: typeof INDEX_OF_JOB_IN_LIST_REMOVED;\n index: number;\n}\n\ninterface OccupationToTempList {\n type: typeof ADD_OCCUPATION_TO_TEMP_LIST | typeof REMOVE_OCCUPATION_FROM_TEMP_LIST;\n data: OccupationOpportunityModel;\n}\n\ninterface MunicipalitiesToTempList {\n type: typeof ADD_MUNICIPALITY_TO_TEMP_LIST | typeof REMOVE_MUNICIPALITY_FROM_TEMP_LIST;\n data: MunicipalityModel;\n}\n\ninterface RemoveAllTempOccupations {\n type: typeof RESET_ALL_OCCUPATIONS;\n}\n\ninterface RemoveAllMunicipalities {\n type: typeof RESET_ALL_MUNICIPALITIES;\n}\n\ninterface SaveTempOccupationsToDisplayList {\n type: typeof SAVE_TEMP_OCCUPATIONS_TO_OCCUPATIONS_TO_DISPLAY_LIST;\n data: SearchListModel[];\n}\n\ninterface SaveTempMunicipalitiesToDisplayList {\n type: typeof SAVE_TEMP_MUNICIPALITIES_TO_MUNICIPALITIES_TO_DISPLAY_LIST;\n data: SearchListModel[];\n}\n\ninterface TriggerCheckedOnOccupation {\n type: typeof TRIGGER_CHECKED_ON_OCCUPATION;\n data: SearchListModel;\n isChecked: boolean;\n}\n\ninterface TriggerCheckedOnMunicipality {\n type: typeof TRIGGER_CHECKED_ON_MUNICIPALITY;\n data: SearchListModel;\n isChecked: boolean;\n}\n\ninterface AddJobIdOnHover {\n type: typeof ADD_JOBID_ON_HOVER;\n data: string;\n}\n\ninterface ToggleIndustry {\n type: typeof TOGGLE_CHOSEN_INDUSTRY;\n data: IndustryModel;\n checked: boolean;\n}\n\ninterface RemoveAllIndustries {\n type: typeof REMOVE_ALL_INDUSTRIES_FROM_TEMPLIST;\n}\n\ninterface SaveIndustries {\n type: typeof SAVE_INDUSTRIES_FROM_TEMP_TO_DISPLAY_LIST;\n data: IndustryModel[];\n}\n\ninterface AddIndustryToTempList {\n type: typeof ADD_INDUSTRY_TO_TEMP_LIST;\n data: IndustryModel;\n}\n\ninterface RemoveIndustryFromTempList {\n type: typeof REMOVE_INDUSTRY_FROM_TEMP_LIST;\n data: IndustryModel;\n}\n\ninterface SetCompanyOccupations {\n type: typeof SET_COMPANY_OCCUPATIONS;\n data: OccupationOpportunityModel[];\n}\n\ninterface ClearCompanyOccupations {\n type: typeof CLEAR_COMPANY_OCCUPATIONS;\n}\n\ninterface SetIsDoneFetching {\n type: typeof SET_IS_DONE_FETCHING_COMPANY_OCCUPATIONS;\n data: boolean;\n}\n\ninterface FetchCompanyOccupationsError {\n type: typeof FETCH_COMPANY_OCCUPATIONS_ERROR;\n data: boolean;\n}\n\ninterface ClearAllSearchJobData {\n type: typeof CLEAR_ALL_SEARCH_JOB_DATA;\n}\n\ninterface ResetAllFilters {\n type: typeof RESET_ALL_FILTERS;\n}\n\ninterface UpdateUnemploymentDuration {\n type: typeof UPDATE_EMPLOYMENT_DURATION;\n data: {title: string, checked: boolean};\n}\n\ninterface AddedOrPinnedJob {\n type: typeof SET_ADDED_OR_PINNED_JOB; \n data: boolean;\n}\n\ninterface AddUpdateOrRemoveQueryFilter {\n type: typeof ADD_QUERY_FILTER | typeof REMOVE_QUERYFILTER | typeof UPDATE_QUERY_FILTER,\n data: QueryFilter\n}\n\ninterface SetDSAJobFilter {\n type: typeof SET_DSA_JOB_FILTER | typeof SET_TEMP_DSA_JOB_FILTER;\n data: DSAJobFilterModel;\n}\n\ninterface SetWindowInnerWidth {\n type: typeof SET_WINDOW_INNERWIDTH; \n data: number;\n}\n\ninterface ToggleDefaultDsaFilter {\n type: typeof TOGGLE_DSA_OCCUPATIONS | typeof TOGGLE_DSA_ACADEMIC_JOBS;\n data: boolean;\n}\n\nexport interface SearchJobActionDefaultState {\n filterIdExpandList: number[];\n regions: RegionModel[];\n foreignCountries: [string, boolean][];\n employmentDuration: {title: string, checked: boolean}[];\n workTimeArray: number[];\n transportTime: string[];\n chosenTransportTime: string;\n filterSortDropdown: string[];\n chosenSortFilter: string;\n queryFilters: QueryFilter[];\n isDoneQueryUpdating: boolean;\n distance: number;\n jobTypes: JobTypeModel[];\n addedInitialFilters: boolean;\n filterOption: FilterOptionTypesModel;\n fadeJobsIn: boolean;\n removedIndexInJobList: number;\n hoveredId: string;\n tempOccupationList: SearchListModel[];\n occupationsToDisplay: SearchListModel[];\n tempMunicipalityList: MunicipalityModel[];\n municipalitiesToDisplay: SearchListModel[];\n industryDisplayList: SearchListModel[];\n tempIndustries: SearchListModel[];\n companyOccupations: OccupationOpportunityModel[];\n isDoneFetchingCompanyOccupations: boolean;\n companyFetchError: boolean;\n addedOrPinnedJob: boolean;\n jobNetJobType: boolean;\n jobOrderJobType: boolean;\n dsaJobFilter: DSAJobFilterModel;\n tempDSAJobFilter: DSAJobFilterModel;\n windowInnerWidth: number;\n toggleDsaOccupations: boolean;\n toggleDsaAcademicJobs: boolean;\n}\n\nexport type SearchJobActionTypes =\n UpdateRegion |\n AddOrRemoveFilterToExpand |\n UpdateRegionOrForeignCountry |\n UpdateWorkTimeArray |\n UpdateSingleWorkTime |\n UpdateTransportTimeOrFilterSortDropdown |\n GetAllRegions |\n UpdateQueryFilters |\n SetIsDoneQueryUpdating |\n UpdateDistance |\n GetAllJobTypes |\n ToggleFilters |\n ToggleQueryFilter |\n ShouldFadeJobsIn |\n RemovedIndexOfJobInList |\n OccupationToTempList |\n RemoveAllTempOccupations |\n SaveTempOccupationsToDisplayList |\n TriggerCheckedOnOccupation |\n AddJobIdOnHover |\n MunicipalitiesToTempList |\n RemoveAllMunicipalities |\n SaveTempMunicipalitiesToDisplayList |\n TriggerCheckedOnMunicipality |\n AddJobIdOnHover |\n ToggleIndustry |\n RemoveAllIndustries |\n SaveIndustries |\n AddIndustryToTempList |\n RemoveIndustryFromTempList |\n SetCompanyOccupations |\n ClearCompanyOccupations |\n SetIsDoneFetching |\n FetchCompanyOccupationsError | \n ClearAllSearchJobData |\n ResetAllFilters |\n UpdateUnemploymentDuration | \n AddedOrPinnedJob |\n SetChosenJobTypes |\n SetFilterOptionType |\n AddUpdateOrRemoveQueryFilter | \n SetDSAJobFilter |\n SetWindowInnerWidth |\n ToggleDefaultDsaFilter;\n\n\n","import PlanModel from '../../models/MyPlanModel';\nimport { MeetingModel } from '../../models/MeetingModel';\nimport JobModel from '../../models/JobModel';\nimport { PlanTypeIdentifier } from '../../models/PlanTypeIdentifier';\nimport { InterviewTypeIdentifier } from '../../models/InterviewTypeIdentifier';\nimport { ParticipationStatusTypeIdentifier } from '../../models/ParticipationStatusTypeIdentifier';\nimport JobLogEntryModel from '../../models/JobLogEntryModel';\nimport { Guid } from 'guid-typescript';\nimport JobPathModel from '../../models/JobPathModel';\nimport { InterviewParticipant } from '../../models/InterviewParticipant';\nimport BookingParticipantTypeModel from '../../models/BookingParticipantTypeModel';\nimport { BookingModel } from '../../models/BookingModel';\nimport { InterviewContactTypeIdentifier } from '../../models/InterviewContactTypeIdentifier';\nimport TableSortItem from '../../models/TableSortItem';\nimport JobSearchEntryModel from '../../models/JobSearchEntryModel';\n\n//used for saving myplan\nexport const ADD_MYPLAN_SUCCESS = \"ADD_MYPLAN_SUCCESS\";\nexport const ADD_MYPLAN_ERROR = \"ADD_MYPLAN_ERROR\";\nexport const BEGIN_ADD_MYPLAN = \"BEGIN_ADD_MYPLAN\";\n\n//used for getting newest myplan\nexport const FETCH_NEWEST_MYPLAN_SUCCESS = \"FETCH_NEWEST_MYPLAN_SUCCESS\";\nexport const FETCH_GET_NEWEST_MYPLAN_ERROR = \"FETCH_GET_NEWEST_MYPLAN_ERROR\";\nexport const BEGIN_FETCH_NEWEST_MYPLAN = \"BEGIN_FETCH_NEWEST_MYPLAN\";\n\n\nexport const GET_ALL_PLANS = \"GET_ALL_PLANS\";\nexport const IS_AGREEMENT_DONE = 'IS_AGREEMENT_DONE';\n\nexport const GET_ALL_PLANS_ERROR = \"GET_ALL_PLANS_ERROR\";\n\nexport const IS_DONE_FETCHING_NEWEST_MY_PLAN = \"IS_DONE_FETCHING_NEWEST_MY_PLAN\";\n\nexport const IS_MYPLAN_SAVED_SUCCESFULLY = \"IS_MYPLAN_SAVED_SUCCESFULLY\";\n\nexport const SHOULD_SHOW_MYPLAN_DISCLAIMER = \"SHOULD_SHOW_MYPLAN_DISCLAIMER\";\n\n// Variables for myplan\nexport const INTERVIEW_WITH_MORE_AUTHORITIES = 'INTERVIEW_WITH_MORE_AUTHORITIES';\nexport const PLAN_TYPE_CHOSEN = 'PLAN_TYPE_CHOSEN';\nexport const INTERVIEW_TYPE_CHOSEN = 'INTERVIEW_TYPE_CHOSEN';\nexport const INTERVIEW_CONTACT_TYPE_CHOSEN = \"INTERVIEW_CONTACT_TYPE_CHOSEN\";\nexport const PARTICIPATION_TYPE_CHOSEN = 'PARTICIPATION_TYPE_CHOSEN';\nexport const SET_TEMP_JOBLOG_LIST = 'SET_TEMP_JOBLOG_LIST';\n\nexport const ADD_JOBPATH_TO_JOBLOG = 'ADD_JOBPATH_TO_JOBLOG';\nexport const UPDATE_JOBLOG_JOBPATH = 'UPDATE_JOBLOG_JOBPATH';\nexport const REMOVE_JOBPATH_FROM_JOBLOG = 'REMOVE_JOBPATH_FROM_JOBLOG';\nexport const COMPARE_AND_SET_JOBLOGS = 'COMPARE_AND_SET_JOBLOGS';\nexport const CLEAR_TEMP_JOBLOG_LIST = \"CLEAR_TEMP_JOBLOG_LIST\";\nexport const SET_EARLIER_JOBPATHS_FROM_MEETINGS = 'SET_EARLIER_JOBPATHS_FROM_MEETINGS';\n\nexport const SET_FULLPLAN_FORMATTED_STRING = \"SET_FULLPLAN_FORMATTED_STRING\";\nexport const CLEAR_FULLPLAN_FORMATTED_STRING = \"CLEAR_FULLPLAN_FORMATTED_STRING\";\nexport const SET_FULLPLAN_FORMATTED_TEXT_FETCH_ERROR = \"SET_FULLPLAN_FORMATTED_TEXT_FETCH_ERROR\";\n\nexport const SET_PLANDESCRIPTION_FORMATTED_STRING = \"SET_PLANDESCRIPTION_FORMATTED_STRING\";\nexport const CLEAR_PLANDESCRIPTION_FORMATTED_STRING = \"CLEAR_PLANDESCRIPTION_FORMATTED_STRING\";\nexport const SET_PLANDESCRIPTION_FORMATTED_TEXT_FETCH_ERROR = \"SET_PLANDESCRIPTION_FORMATTED_TEXT_FETCH_ERROR\";\n\nexport const SET_AGREEMENTS_FORMATTED_STRING = \"SET_AGREEMENTS_FORMATTED_STRING\";\nexport const CLEAR_AGREEMENTS_FORMATTED_STRING = \"CLEAR_AGREEMENTS_FORMATTED_STRING\";\nexport const SET_AGREEMENTS_FORMATTED_TEXT_FETCH_ERROR = \"SET_AGREEMENTS_FORMATTED_TEXT_FETCH_ERROR\";\n\nexport const SET_INTERVIEW_PARTICIPANT_BY_BOOKING = \"SET_INTERVIEW_PARTICIPANT_BY_BOOKING\";\nexport const REMOVE_INTERVIEW_PARTICIPANT = \"REMOVE_INTERVIEW_PARTICIPANT\";\nexport const UPDATE_INTERVIEW_PARTICIPANT = \"UPDATE_INTERVIEW_PARTICIPANT\";\nexport const SET_INTERVIEW_PARTICIPANT = \"SET_INTERVIEW_PARTICIPANT\";\nexport const CLEAR_INTERVIEW_PARTICIPANTS = \"CLEAR_INTERVIEW_PARTICIPANTS\";\n\nexport const SET_PINNED_JOBS_IN_NEWEST_MY_PLAN_FROM_JOBPATH = \"SET_PINNED_JOBS_IN_NEWEST_MY_PLAN_FROM_JOBPATH\";\nexport const SET_INTERVIEW_PARTICIPANTS = \"SET_INTERVIEW_PARTICIPANTS\";\n\nexport const SET_JOBLOG_SCROLL = \"SET_JOBLOG_SCROLL\";\nexport const SET_ACTIVE_JOBLOG_FILTER = \"SET_ACTIVE_JOBLOG_FILTER\";\n\nexport const CHOSEN_MYPLAN_SORT_ITEM = \"CHOSEN_MYPLAN_SORT_ITEM\";\n\n\n// Clear all MyPlan data\nexport const CLEAR_ALL_MYPLAN_DATA = \"CLEAR_ALL_MYPLAN_DATA\";\n\ninterface ShowDisclaimerOrMyPlanFetching {\n type: typeof SHOULD_SHOW_MYPLAN_DISCLAIMER | typeof IS_DONE_FETCHING_NEWEST_MY_PLAN | typeof IS_MYPLAN_SAVED_SUCCESFULLY;\n data: boolean;\n}\n\ninterface AddAndGetNewestMyPlan {\n type: typeof ADD_MYPLAN_SUCCESS | typeof FETCH_NEWEST_MYPLAN_SUCCESS;\n data: MeetingModel;\n}\n\ninterface MyPlanErrors {\n type: typeof FETCH_GET_NEWEST_MYPLAN_ERROR | typeof ADD_MYPLAN_ERROR;\n error: string;\n}\n\ninterface BeginFetchOrSaveMyPlan {\n type: typeof BEGIN_ADD_MYPLAN | typeof BEGIN_FETCH_NEWEST_MYPLAN;\n}\n\nexport interface GetAllPlans {\n type: typeof GET_ALL_PLANS;\n data: MeetingModel[];\n}\n\nexport interface GetAllPlansError {\n type: typeof GET_ALL_PLANS_ERROR,\n error: string,\n}\n\ninterface IsAssignmentDone {\n type: typeof IS_AGREEMENT_DONE;\n data: boolean;\n agreementID: number;\n}\n\ninterface InterviewsWithMoreAuthorities {\n type: typeof INTERVIEW_WITH_MORE_AUTHORITIES;\n data: boolean;\n}\n\ninterface PlanTypeChosen {\n type: typeof PLAN_TYPE_CHOSEN;\n data: PlanTypeIdentifier;\n}\n\ninterface InterviewTypeChosen {\n type: typeof INTERVIEW_TYPE_CHOSEN;\n data: InterviewTypeIdentifier;\n}\n\ninterface InterviewContactTypeChosen {\n type: typeof INTERVIEW_CONTACT_TYPE_CHOSEN; \n data: InterviewContactTypeIdentifier;\n}\n\ninterface ParticipationTypeChosen {\n type: typeof PARTICIPATION_TYPE_CHOSEN;\n data: ParticipationStatusTypeIdentifier;\n}\n\ninterface SetTempJobLogList {\n type: typeof SET_TEMP_JOBLOG_LIST;\n data: JobLogEntryModel[];\n}\n\ninterface AddRemoveOrUpdateJobPathInJobLog {\n type: typeof ADD_JOBPATH_TO_JOBLOG | typeof UPDATE_JOBLOG_JOBPATH | typeof REMOVE_JOBPATH_FROM_JOBLOG;\n jobPathID: Guid;\n jobLogID: Guid;\n}\n\ninterface CompareAndSetJoblogs {\n type: typeof COMPARE_AND_SET_JOBLOGS;\n jobLogsFromCitizen: JobLogEntryModel[];\n jobLogsFromMyPlan: JobLogEntryModel[];\n}\n\ninterface ClearTempJobLogList {\n type: typeof CLEAR_TEMP_JOBLOG_LIST;\n}\n\ninterface FetchEarlierJobPathsFromMeetings {\n type: typeof SET_EARLIER_JOBPATHS_FROM_MEETINGS;\n earlierJobPaths: JobPathModel[];\n}\n\ninterface SetMyPlanFormattedString {\n type: typeof SET_FULLPLAN_FORMATTED_STRING | typeof SET_PLANDESCRIPTION_FORMATTED_STRING | typeof SET_AGREEMENTS_FORMATTED_STRING;\n data: string;\n}\n\ninterface ClearMyPlanFormattedString {\n type: typeof CLEAR_FULLPLAN_FORMATTED_STRING | typeof CLEAR_PLANDESCRIPTION_FORMATTED_STRING | typeof CLEAR_AGREEMENTS_FORMATTED_STRING;\n}\n\ninterface SetMyPlanFormattedTextErrors {\n type: typeof SET_FULLPLAN_FORMATTED_TEXT_FETCH_ERROR | typeof SET_PLANDESCRIPTION_FORMATTED_TEXT_FETCH_ERROR | typeof SET_AGREEMENTS_FORMATTED_TEXT_FETCH_ERROR;\n data: boolean;\n}\n\ninterface SetInterviewParticipant {\n type: typeof SET_INTERVIEW_PARTICIPANT_BY_BOOKING; \n data: BookingModel;\n}\n\ninterface SetRemoveOrUpdateParticipant {\n type: typeof UPDATE_INTERVIEW_PARTICIPANT | typeof REMOVE_INTERVIEW_PARTICIPANT | typeof SET_INTERVIEW_PARTICIPANT;\n data: InterviewParticipant;\n}\n\ninterface SetPinnedJobsInNewestMyPlanFromJobPath {\n type: typeof SET_PINNED_JOBS_IN_NEWEST_MY_PLAN_FROM_JOBPATH; \n data: JobModel[]; \n jobPathID: Guid;\n}\n\ninterface SetInterviewParticipants {\n type: typeof SET_INTERVIEW_PARTICIPANTS; \n data: InterviewParticipant[];\n}\n\ninterface ClearInterviewParticipants {\n type: typeof CLEAR_INTERVIEW_PARTICIPANTS; \n}\n\ninterface ClearAllMyPlanData {\n type: typeof CLEAR_ALL_MYPLAN_DATA; \n}\n\ninterface SetJobLogScroll {\n type: typeof SET_JOBLOG_SCROLL;\n data: number;\n}\n\ninterface SetActiveJobLogFilter {\n type: typeof SET_ACTIVE_JOBLOG_FILTER;\n data: string;\n}\n\ninterface SetChosenSortItem {\n type: typeof CHOSEN_MYPLAN_SORT_ITEM;\n data: TableSortItem;\n}\n\nexport interface PlanSceneDefaultState {\n newestMyPlan: MeetingModel;\n allPlans: MeetingModel[];\n shouldShowMyPlanDisclaimer: boolean;\n isDoneFetchingNewestMyPlan: boolean;\n saveMyPlanSuccess: boolean;\n beginAddMyPlan: boolean;\n interviewWithMoreAuthorities: boolean;\n planType: PlanTypeIdentifier;\n interviewType: InterviewTypeIdentifier;\n interviewContactType: InterviewContactTypeIdentifier;\n participationStatusType: ParticipationStatusTypeIdentifier;\n tempJobLogList: JobLogEntryModel[];\n earlierJobPaths: JobPathModel[];\n formattedFullPlan: string;\n formattedPlanDescription: string;\n formattedAgreements: string;\n formattedMyPlanFetchError: boolean;\n interviewParticipants: InterviewParticipant[];\n isSavingMyPlan: boolean;\n jobLogScrollTop: number;\n activeJobLogFilter: string;\n chosenMyPlanSort: TableSortItem;\n}\n\n\n\nexport type PlanActionTypes =\n AddAndGetNewestMyPlan |\n GetAllPlans |\n GetAllPlansError |\n IsAssignmentDone |\n ShowDisclaimerOrMyPlanFetching |\n MyPlanErrors |\n BeginFetchOrSaveMyPlan |\n InterviewsWithMoreAuthorities |\n PlanTypeChosen |\n InterviewTypeChosen |\n ParticipationTypeChosen |\n SetTempJobLogList |\n AddRemoveOrUpdateJobPathInJobLog |\n CompareAndSetJoblogs |\n ClearTempJobLogList |\n FetchEarlierJobPathsFromMeetings |\n CompareAndSetJoblogs |\n SetMyPlanFormattedString |\n ClearMyPlanFormattedString |\n SetMyPlanFormattedTextErrors | \n ClearAllMyPlanData | \n SetInterviewParticipant | \n SetRemoveOrUpdateParticipant |\n InterviewContactTypeChosen |\n SetPinnedJobsInNewestMyPlanFromJobPath | \n ClearInterviewParticipants |\n SetInterviewParticipants |\n SetJobLogScroll |\n SetActiveJobLogFilter |\n SetChosenSortItem;\n","import JobPathModel from '../../models/JobPathModel';\nimport QualificationModel from '../../models/QualificationModel';\nimport JobModel from '../../models/JobModel';\nimport { Guid } from 'guid-typescript';\nimport OccupationOpportunityModel from '../../models/OccupationOpportunityModel';\nimport JobLogToJobMapModel from '../../models/JobLogToJobMapModel';\n\nexport const ADD_JOBPATH = 'ADD_JOBPATH';\nexport const ADD_REMAINING_JOBPATH = 'ADD_REMAINING_JOBPATH';\nexport const DELETE_JOBPATH = 'DELETE_JOBPATH';\nexport const UPDATE_JOBPATH = 'UPDATE_JOBPATH';\nexport const SET_QUALIFICATIONLIST_DRAGANDDROP =\n 'SET_QUALIFICATIONLIST_DRAGANDDROP';\nexport const SET_JOBPATHLIST_DRAGANDDROP = 'SET_JOBPATHLIST_DRAGANDDROP';\nexport const DELETE_JOBPATH_QUALIFICATION = 'DELETE_JOBPATH_QUALIFICATION';\nexport const IS_JOB_REQUIRED = 'IS_JOB_REQUIRED';\nexport const IS_FILTER_CHOSEN = 'IS_FILTER_CHOSEN';\n\nexport const ADD_JOB_TO_JOBPATH = \"ADD_JOB_TO_JOBPATH\";\nexport const ADD_JOB_TO_FILTEREDJOBS = \"ADD_JOB_TO_FILTEREDJOBS\";\nexport const REMOVE_JOB_FROM_FILTEREDJOBS = \"REMOVE_JOB_FROM_FILTEREDJOBS\";\nexport const REMOVE_JOB_FROM_JOBPATH = \"REMOVE_JOB_FROM_JOBPATH\";\n\nexport const SET_JOBPATH_TO_DISPLAY = 'SET_JOBPATH_TO_DISPLAY';\n\n// Set jobpathlist equal to newestmyplan jobpaths \nexport const SET_JOBPATHS_TO_MYPLAN_JOBPATHS = \"SET_JOBPATHS_TO_MYPLAN_JOBPATHS\";\nexport const IS_MYPLAN_JOBPATHS_ADDED_TO_JOBPATHS = 'IS_MYPLAN_JOBPATHS_ADDED_TO_JOBPATHS';\n\nexport const SET_JOBPATH_JOB_CONFIRMED_HANDLED = 'SET_JOBPATH_JOB_CONFIRMED_HANDLED';\n\nexport const SET_OCCUPATIONS_FROM_QUALIFICATIONS = 'FETCH_OCCUPATIONS_FROM_QUALIFICATIONS';\nexport const SET_SIMILAR_QUALIFICATIONS = 'SET_SIMILAR_QUALIFICATIONS';\nexport const UPDATE_FILTERED_JOBS_JOBPATH = 'UPDATE_FILTERED_JOBS_JOBPATH';\nexport const CLEAR_JOBPATH_DATA = 'CLEAR_JOBPATH_DATA';\n\nexport const SET_ALL_JOBPATHS_TO_FILTER_CHOSEN = \"SET_ALL_JOBPATHS_TO_FILTER_CHOSEN\";\n\nexport const SET_SHOULD_DISPLAY_ALL_JOBS = \"SET_SHOULD_DISPLAY_ALL_JOBS\";\n\nexport const SET_PINNED_JOBS_FROM_NEWEST_MYPLAN = \"SET_PINNED_JOBS_FROM_NEWEST_MYPLAN\";\n\n//Used to add and remove jobs from my plan\nexport const ADD_PINNED_JOB_TO_PINNEDJOBS = \"ADD_PINNED_JOB_TO_PINNEDJOBS\";\nexport const REMOVE_PINNED_JOB_FROM_PINNEDJOBS = \"REMOVE_PINNED_JOB_FROM_PINNEDJOBS\";\nexport const ADD_PINNED_JOBS_TO_MYPLAN = \"ADD_PINNED_JOBS_TO_MYPLAN\";\nexport const CLEAR_PINNED_JOBS = \"CLEAR_PINNED_JOBS\";\n\nexport const SET_JOBPATHS_REMOVED = \"SET_JOBPATHS_REMOVED\";\n\nexport const SET_JOBPATHS = \"SET_JOBPATHS\";\n\nexport const ADD_JOBSEARCH_ENTRY_ID_TO_JOBPATHS = \"ADD_JOBSEARCH_ENTRY_ID_TO_JOBPATHS\";\nexport const REMOVE_JOBSEARCH_ENTRY_ID_FROM_JOBPATH = \"REMOVE_JOBSEARCH_ENTRY_ID_FROM_JOBPATH\";\n\n\n// Clear All Jobpath Data\nexport const CLEAR_ALL_JOBPATH_DATA = \"CLEAR_ALL_JOBPATH_DATA\";\n\ninterface AddJobPathAction {\n type: typeof ADD_JOBPATH | typeof ADD_REMAINING_JOBPATH;\n data: JobPathModel;\n}\n\ninterface SetJobPaths {\n type: typeof SET_JOBPATHS;\n data: JobPathModel[];\n}\n\ninterface DeleteJobPathAction {\n type: typeof DELETE_JOBPATH;\n data: JobPathModel;\n}\n\ninterface UpdateJobpathAction {\n type: typeof UPDATE_JOBPATH;\n data: JobPathModel;\n}\n\ninterface SetQualificationList {\n type: typeof SET_QUALIFICATIONLIST_DRAGANDDROP;\n data: QualificationModel[];\n}\n\ninterface DeleteQualificationFromJobpath {\n type: typeof DELETE_JOBPATH_QUALIFICATION;\n data: QualificationModel;\n jobPath: JobPathModel;\n}\n\ninterface SetJobPathList {\n type: typeof SET_JOBPATHLIST_DRAGANDDROP;\n data: JobPathModel[];\n}\n\ninterface IsFilterChosen {\n type: typeof IS_FILTER_CHOSEN;\n isFilterChosen: boolean;\n jobPath: JobPathModel;\n}\n\ninterface SetJobpathsEqual {\n type: typeof SET_JOBPATHS_TO_MYPLAN_JOBPATHS;\n data: JobPathModel[];\n isDraftMeeting: boolean;\n newestMyPlanJobPaths: JobPathModel[];\n}\n\n\ninterface AddJobToJobPathAction {\n type: typeof ADD_JOB_TO_JOBPATH;\n data: JobModel;\n isShowingJobs: boolean;\n}\n\ninterface IsMyPlanJobPathsAddedToJobPaths {\n type: typeof IS_MYPLAN_JOBPATHS_ADDED_TO_JOBPATHS;\n data: boolean;\n}\n\ninterface RemoveJobFromJobpath {\n type: typeof REMOVE_JOB_FROM_JOBPATH;\n jobId: string;\n jobPathID: Guid;\n}\n\ninterface SetJobPathToDisplay {\n type: typeof SET_JOBPATH_TO_DISPLAY;\n data: Guid;\n}\n\ninterface SetOccupationsFromQualifications {\n type: typeof SET_OCCUPATIONS_FROM_QUALIFICATIONS;\n data: OccupationOpportunityModel[];\n jobpathID: Guid;\n}\n\ninterface SetSimiliarQualifications {\n type: typeof SET_SIMILAR_QUALIFICATIONS;\n data: QualificationModel[];\n jobpathID: Guid;\n}\n\ninterface UpdateFilteredJobsFromQuery {\n type: typeof UPDATE_FILTERED_JOBS_JOBPATH;\n data: JobModel[];\n jobPathID: Guid;\n}\n\ninterface AddOrRemoveJobFromFilteredJobs {\n type: typeof REMOVE_JOB_FROM_FILTEREDJOBS | typeof ADD_JOB_TO_FILTEREDJOBS;\n data: JobModel;\n}\n\ninterface ClearJobPathList {\n type: typeof CLEAR_JOBPATH_DATA;\n}\n\ninterface SetJobPathJobConfirmedHandled {\n type: typeof SET_JOBPATH_JOB_CONFIRMED_HANDLED;\n jobpathID: Guid;\n jobID: string;\n isCompanyJob: boolean;\n}\n\ninterface ClearAllJobPathData {\n type: typeof CLEAR_ALL_JOBPATH_DATA;\n}\n\ninterface SetAllJobPathsToFilterChosen {\n type: typeof SET_ALL_JOBPATHS_TO_FILTER_CHOSEN;\n}\n\ninterface SetShouldDisplayAllJobs {\n type: typeof SET_SHOULD_DISPLAY_ALL_JOBS;\n}\n\ninterface AddJobPinnedJobs {\n type: typeof ADD_PINNED_JOB_TO_PINNEDJOBS;\n data: JobModel;\n}\n\ninterface RemoveJobFromPinnedJobs {\n type: typeof REMOVE_PINNED_JOB_FROM_PINNEDJOBS;\n data: JobModel;\n}\n\ninterface AddPinnedJobsFromMyPlan {\n type: typeof ADD_PINNED_JOBS_TO_MYPLAN;\n data: JobModel[];\n}\n\ninterface SetPinnedJobsFromNewestMyPlan {\n type: typeof SET_PINNED_JOBS_FROM_NEWEST_MYPLAN; \n data: JobModel[];\n job: JobModel;\n}\n\ninterface ClearPinnedJobs {\n type: typeof CLEAR_PINNED_JOBS;\n}\n\ninterface SetJobPathsRemoved {\n type: typeof SET_JOBPATHS_REMOVED;\n data: JobPathModel[];\n}\n\ninterface SetJobPaths {\n type: typeof SET_JOBPATHS;\n data: JobPathModel[];\n}\n\ninterface AddJobSearchEntryIdToJobPaths {\n type: typeof ADD_JOBSEARCH_ENTRY_ID_TO_JOBPATHS;\n jobLogToJob: JobLogToJobMapModel;\n jobPathID: Guid;\n}\n\ninterface RemoveJobSearchEntryIdToJobPaths {\n type: typeof REMOVE_JOBSEARCH_ENTRY_ID_FROM_JOBPATH;\n jobSearchId: Guid;\n jobPathID: Guid;\n}\n\nexport interface JobPathSceneDefaultState {\n jobPaths: JobPathModel[];\n remainingJobPath: JobPathModel;\n qualificationList: QualificationModel[];\n isMyPlanJobPathsAdded: boolean;\n jobPathToDisplay: Guid;\n jobPathsRemoved: JobPathModel[];\n shouldDisplayAllJobs: boolean;\n pinnedJobs: JobModel[];\n jobIdsAdded: string[];\n companyIdsAdded: string[];\n jobAgreementsConfirmedHandled: JobModel[];\n companyAgreementsConfirmedHandled: JobModel[];\n}\n\nexport type JobPathActionTypes =\n | AddJobPathAction\n | DeleteJobPathAction\n | UpdateJobpathAction\n | SetQualificationList\n | SetJobPathList\n | DeleteQualificationFromJobpath\n | IsFilterChosen\n | AddJobToJobPathAction\n | SetJobpathsEqual\n | IsMyPlanJobPathsAddedToJobPaths\n | RemoveJobFromJobpath\n | SetJobPathToDisplay\n | SetOccupationsFromQualifications\n | SetSimiliarQualifications\n | UpdateFilteredJobsFromQuery\n | AddOrRemoveJobFromFilteredJobs\n | ClearJobPathList\n | SetJobPathJobConfirmedHandled\n | ClearAllJobPathData\n | SetAllJobPathsToFilterChosen\n | SetShouldDisplayAllJobs\n | AddJobPinnedJobs\n | RemoveJobFromPinnedJobs\n | AddPinnedJobsFromMyPlan\n | ClearPinnedJobs\n | SetPinnedJobsFromNewestMyPlan\n | SetJobPathsRemoved\n | SetJobPaths\n | AddJobSearchEntryIdToJobPaths\n | RemoveJobSearchEntryIdToJobPaths;\n","import JobSearchModel from '../../models/JobSearchModel';\nimport JobModel from '../../models/JobModel';\nimport QualificationModel from '../../models/QualificationModel';\nimport OccupationOpportunityModel from '../../models/OccupationOpportunityModel';\nimport { QueryObject } from \"../../models/QueryObject\";\nimport JobPathModel from '../../models/JobPathModel';\nimport { RegionModel } from '../../models/RegionModel';\nimport IndustryModel from '../../models/IndustryModel';\nimport { JobDisplayModel } from '../../models/JobDisplayModel';\nimport { MunicipalityModel } from '../../models/MunicipalityModel';\n\nexport const SET_JOBS = 'SET_JOBS';\nexport const UPDATE_JOB_TITLE = 'UPDATE_JOB_TITLE';\n\n//used for getting all jobs\nexport const FETCH_ALL_JOBS_SUCCESS = \"FETCH_ALL_JOBS_SUCCESS\";\nexport const FETCH_ALL_JOBS_ERROR = \"FETCH_ALL_JOBS_ERROR\";\nexport const FETCH_ALL_JOBS = \"FETCH_ALL_JOBS\";\n\n//used for getting all qualifications\nexport const FETCH_ALL_QUALIFICATIONS_SUCCESS = \"FETCH_ALL_QUALIFICATIONS_SUCCESS\";\nexport const FETCH_ALL_QUALIFICATIONS_ERROR = \"FETCH_ALL_QUALIFICATIONS_ERROR\";\nexport const FETCH_ALL_QUALIFICATIONS = \"FETCH_ALL_QUALIFICATIONS\";\n\n//used for getting all occupations\nexport const FETCH_ALL_OCCUPATIONS_SUCCESS = \"FETCH_ALL_OCCUPATIONS_SUCCESS\";\nexport const FETCH_ALL_OCCUPATIONS_ERROR = \"FETCH_ALL_OCCUPATIONS_ERROR\";\nexport const FETCH_ALL_OCCUPATIONS = \"FETCH_ALL_OCCUPATIONS\";\n\n//used for getting all occupations\nexport const FETCH_ALL_INDUSTRIES_SUCCESS = \"FETCH_ALL_INDUSTRIES_SUCCESS\";\nexport const FETCH_ALL_INDUSTRIES_ERROR = \"FETCH_ALL_INDUSTRIES_ERROR\";\nexport const FETCH_ALL_INDUSTRIES = \"FETCH_ALL_INDUSTRIES\";\n\n// used for getting all municipalities\nexport const FETCH_ALL_MUNICIPALITIES_SUCCESS = \"FETCH_ALL_MUNICIPALITIES_SUCCESS\";\nexport const FETCH_ALL_MUNICIPALITIES_ERROR = \"FETCH_ALL_MUNICIPALITIES_ERROR\";\nexport const BEGIN_FETCH_ALL_MUNICIPALITIES = \"BEGIN_FETCH_ALL_MUNICIPALITIES\";\n\n// Used for getting query filtered jobs\nexport const FETCH_ALL_FILTERED_JOBS_SUCCESS = \"FETCH_ALL_FILTERED_JOBS_SUCCESS\";\nexport const FETCH_ALL_FILTERED_JOBS_ERROR = \"FETCH_ALL_FILTERED_JOBS_ERROR\";\nexport const FETCH_ALL_FILTERED_JOBS = \"FETCH_ALL_FILTERED_JOBS\";\n\nexport const REMOVE_JOB_FROM_STATE = \"REMOVE_JOB_FROM_STATE\";\n\nexport const GET_FILTERED_JOBS_WITHOUT_JOBPAHTS = \"GET_FILTERED_JOBS_WITHOUT_JOBPAHTS\";\n\nexport const IS_DONE_FETCHING_FILTERED_JOBS = 'IS_DONE_FETCHING_FILTERED_JOBS';\n\n// JobModel To Display\nexport const SET_JOBMODEL_TO_DISPLAY = \"SET_JOBMODEL_TO_DISPLAY\";\nexport const CLEAR_JOBMODEL_TO_DISPLAY = \"CLEAR_JOBMODEL_TO_DISPLAY\";\nexport const SET_SINGLEJOBS_TO_DISPLAY = \"SET_SINGLEJOBS_TO_DISPLAY\";\nexport const SET_FETCH_SINGLE_JOB_ERROR = \"SET_FETCH_SINGLE_JOB_ERROR\";\n\nexport const IS_FETCHING_SINGLE_JOB_OR_COMPANY_OCCUPATIONS = \"IS_FETCHING_SINGLE_JOB_OR_COMPANY_OCCUPATIONS\";\nexport const IS_FETCHING_FILTERED_JOBS = \"IS_FETCHING_FILTERED_JOBS\";\n\nexport const SET_FILTERED_ALL_JOBS = \"SET_FILTERED_ALL_JOBS\";\n\n// Clear All Job Data \nexport const CLEAR_ALL_JOB_DATA = \"CLEAR_ALL_JOB_DATA\";\n\n// Handle Loader\nexport const SET_DISPLAY_LOADER = \"SET_DISPLAY_LOADER\";\n\n\ninterface GetFilteredAndAllJobsSuccess {\n type: typeof FETCH_ALL_JOBS_SUCCESS;\n data: JobModel[];\n}\ninterface GetFilteredAndAllJobsError {\n type: typeof FETCH_ALL_JOBS_ERROR | typeof FETCH_ALL_FILTERED_JOBS_ERROR;\n error: string;\n}\ninterface GetFilteredAndAllJobs {\n type: typeof FETCH_ALL_JOBS | typeof FETCH_ALL_FILTERED_JOBS;\n}\n\ninterface GetAllQualificationsSuccess {\n type: typeof FETCH_ALL_QUALIFICATIONS_SUCCESS;\n data: QualificationModel[];\n}\ninterface GetAllQualificationsError {\n type: typeof FETCH_ALL_QUALIFICATIONS_ERROR;\n error: string;\n}\ninterface GetAllQualifications {\n type: typeof FETCH_ALL_QUALIFICATIONS;\n}\n\ninterface GetAllOccupationsSuccess {\n type: typeof FETCH_ALL_OCCUPATIONS_SUCCESS;\n data: OccupationOpportunityModel[];\n}\ninterface GetAllOccupationsError {\n type: typeof FETCH_ALL_OCCUPATIONS_ERROR;\n error: string;\n}\ninterface GetAllOccupations {\n type: typeof FETCH_ALL_OCCUPATIONS;\n}\n\ninterface GetAllMunicipalitiesSuccess {\n type: typeof FETCH_ALL_MUNICIPALITIES_SUCCESS;\n data: MunicipalityModel[];\n}\ninterface GetAllMunicipalitiesError {\n type: typeof FETCH_ALL_MUNICIPALITIES_ERROR;\n error: string;\n}\ninterface GetAllMunicipalities {\n type: typeof BEGIN_FETCH_ALL_MUNICIPALITIES;\n}\n\n\ninterface GetAllIndustriesSuccess {\n type: typeof FETCH_ALL_INDUSTRIES_SUCCESS;\n data: IndustryModel[];\n}\ninterface GetAllIndustriesError {\n type: typeof FETCH_ALL_INDUSTRIES_ERROR;\n error: string;\n}\ninterface GetAllIndustries {\n type: typeof FETCH_ALL_INDUSTRIES;\n}\n\ninterface FetchOrDeleteJobs {\n type: typeof SET_JOBS;\n data: JobModel;\n}\n\ninterface UpdateJobSearchTitle {\n type: typeof UPDATE_JOB_TITLE;\n title: string;\n jobIdToUpdate: number;\n}\n\ninterface RemoveJobFromState {\n type: typeof REMOVE_JOB_FROM_STATE;\n data: JobModel;\n}\n\ninterface GetFilteredJobs {\n type: typeof FETCH_ALL_FILTERED_JOBS_SUCCESS;\n data: JobPathModel[];\n}\n\ninterface GetFilteredJobsWithoutJobPahts {\n type: typeof GET_FILTERED_JOBS_WITHOUT_JOBPAHTS;\n data: JobModel[];\n}\n\ninterface IsDoneFetching {\n type: typeof IS_DONE_FETCHING_FILTERED_JOBS;\n data: boolean;\n}\n\ninterface SetJobModelToDisplay {\n type: typeof SET_JOBMODEL_TO_DISPLAY;\n data: JobDisplayModel;\n}\n\ninterface ClearJobModelToDisplay {\n type: typeof CLEAR_JOBMODEL_TO_DISPLAY;\n}\n\ninterface SetJobDisplayModelList {\n type: typeof SET_SINGLEJOBS_TO_DISPLAY;\n data: JobDisplayModel[];\n}\n\ninterface IsFetchingJobsOrCompanyOccupations {\n type: typeof IS_FETCHING_SINGLE_JOB_OR_COMPANY_OCCUPATIONS | typeof IS_FETCHING_FILTERED_JOBS;\n isFetching: boolean;\n}\n\ninterface SetSingleJobFetchedError {\n type: typeof SET_FETCH_SINGLE_JOB_ERROR;\n data: boolean;\n}\n\ninterface ClearAllJobData {\n type: typeof CLEAR_ALL_JOB_DATA; \n}\n\ninterface SetFilteredAllJobs {\n type: typeof SET_FILTERED_ALL_JOBS;\n data: JobModel[]; \n}\n\ninterface SetDisplayLoader {\n type: typeof SET_DISPLAY_LOADER;\n data: boolean;\n}\n\nexport interface JobsActionsDefaultState {\n searchedJobs: JobModel[];\n allJobs: JobModel[];\n filteredAllJobs: JobModel[];\n filteredJobs: JobModel[];\n qualifications: QualificationModel[];\n occupations: OccupationOpportunityModel[];\n industries: IndustryModel[];\n regions: RegionModel[];\n municipality: MunicipalityModel[];\n isDoneFetchingFilteredJobs: boolean;\n jobToDisplay: JobDisplayModel;\n jobsToDisplay: JobDisplayModel[];\n isFetching: boolean;\n fetchSingleJobsError: boolean;\n displayLoader: boolean;\n}\n\nexport type JobsActionTypes =\n | FetchOrDeleteJobs\n | UpdateJobSearchTitle\n | GetFilteredAndAllJobsSuccess\n | GetFilteredAndAllJobsError\n | GetFilteredAndAllJobs\n | GetAllQualificationsSuccess\n | GetAllQualificationsError\n | GetAllQualifications\n | GetAllOccupationsSuccess\n | GetAllOccupationsError\n | GetAllOccupations\n | GetAllMunicipalitiesSuccess\n | GetAllMunicipalitiesError\n | GetAllMunicipalities\n | RemoveJobFromState\n | GetFilteredJobs\n | GetAllIndustriesSuccess\n | GetAllIndustriesError\n | GetAllIndustries\n | GetFilteredJobsWithoutJobPahts\n | IsDoneFetching\n | SetJobModelToDisplay\n | ClearJobModelToDisplay\n | SetJobDisplayModelList\n | GetAllMunicipalitiesSuccess\n | GetAllMunicipalitiesError\n | GetAllMunicipalities\n | IsFetchingJobsOrCompanyOccupations\n | SetSingleJobFetchedError\n | ClearAllJobData\n | SetFilteredAllJobs\n | SetDisplayLoader;\n","import { categoriesModel } from '../../models/CategoriesModel';\nimport TextAgreementModel from '../../models/Agreement/TextAgreementModel';\nimport QualificationAgreementModel from '../../models/Agreement/QualificationAgreementModel';\n\nexport const REMOVE_DATA_FROM_AGREEMENT = 'REMOVE_DATA_FROM_AGREEMENT';\n\nexport const ADD_AGREEMENT = 'ADD_AGREEMENT';\nexport const DELETE_AGREEMENT = 'DELETE_AGREEMENT';\nexport const UPDATE_AGREEMENT = 'UPDATE_AGREEMENT';\n\nexport const ADD_AGREEMENT_ID_ELEMENT_TO_EXPAND =\n 'ADD_AGREEMENT_ID_ELEMENT_TO_EXPAND';\nexport const REMOVE_AGREEMENT_ID_ELEMENT_TO_EXPAND =\n 'REMOVE_AGREEMENT_ID_ELEMENT_TO_EXPAND';\n\nexport const CLEAR_DRAFT_AGREEMENT_TEMP = 'CLEAR_DRAFT_AGREEMENT_TEMP';\nexport const SET_DRAFT_AGREEMENT = \"SET_DRAFT_AGREEMENT\";\nexport const IS_AGREEMENT_IN_TEMP_ARRAY = 'IS_AGREEMENT_IN_TEMP_ARRAY';\nexport const UPDATE_DRAFT_AGREEMENT_TEXT = \"UPDATE_DRAFT_AGREEMENT_TEXT\";\n\nexport const SET_NEWEST_MY_PLAN_TEXT_AGREEMENTS = 'SET_NEWEST_MY_PLAN_TEXT_AGREEMENTS';\nexport const SET_QUALIFICATION_AGREEMENTS = \"SET_QUALIFICATION_AGREEMENTS\";\n\nexport const ADD_QUALIFICATION_AGREEMENT = \"ADD_QUALIFICATION_AGREEMENT\";\nexport const UPDATE_QUALIFICATION_AGREEMENT = \"UPDATE_QUALIFICATION_AGREEMENT\";\nexport const REMOVE_QUALIFICATION_AGREEMENT = \"REMOVE_QUALIFICATION_AGREEMENT\";\nexport const SET_ALL_QUALIFICATIONSAGREEMENTS_TO_DONE = 'SET_ALL_QUALIFICATIONSAGREEMENTS_TO_DONE';\nexport const SET_ALL_QUALIFICATIONSAGREEMENTS_TO_NOT_DONE = 'SET_ALL_QUALIFICATIONSAGREEMENTS_TO_NOT_DONE';\nexport const SET_QUALIFICATION_AGREEMENTS_ADDED_FROM_NEWEST_MYPLAN = \"SET_QUALIFICATION_AGREEMENTS_ADDED_FROM_NEWEST_MYPLAN\";\nexport const CLEAR_QUALIFICATION_AGREEMENTS_ADDED_FROM_NEWEST_MYPLAN = \"CLEAR_QUALIFICATION_AGREEMENTS_ADDED_FROM_NEWEST_MYPLAN\";\nexport const REMOVE_NEWEST_MYPLAN_QUALIFICATION_AGREEMENT = \"REMOVE_NEWEST_MYPLAN_QUALIFICATION_AGREEMENT\";\n\nexport const SET_NEWEST_MY_PLAN_QUALIFICATION_AGREEMENTS = \"SET_NEWEST_MY_PLAN_QUALIFICATION_AGREEMENTS\";\n\n\nexport const CLEAR_TEXT_AGREEMENTS = \"CLEAR_TEXT_AGREEMENTS\";\nexport const CLEAR_QUALIFICATION_AGREEMENTS = \"CLEAR_QUALIFICATION_AGREEMENTS\";\n\n// Remarks\nexport const SET_DRAFT_REMARK = \"SET_DRAFT_REMARK\";\nexport const SET_SAVED_REMARK = \"SET_SAVED_REMARK\";\nexport const DELETE_REMARKS = \"DELETE_REMARKS\";\n\n// Clear All Data\nexport const CLEAR_ALL_AGREEMENT_DATA = \"CLEAR_ALL_AGREEMENT_DATA\";\n\ninterface AddUpdateOrDeleteAgreementAction {\n type:\n | typeof ADD_AGREEMENT\n | typeof UPDATE_AGREEMENT\n | typeof DELETE_AGREEMENT;\n data: TextAgreementModel;\n isTemp: boolean;\n}\n\ninterface UpdateAgreementAction {\n type: typeof UPDATE_AGREEMENT;\n data: TextAgreementModel;\n isTemp: boolean;\n}\n\ninterface RemoveAgreementAction {\n type: typeof REMOVE_DATA_FROM_AGREEMENT;\n data: TextAgreementModel;\n}\n\ninterface ClearDraftTempAgreement {\n type: typeof CLEAR_DRAFT_AGREEMENT_TEMP;\n}\n\ninterface AddOrRemoveAgreementToExpand {\n type:\n | typeof ADD_AGREEMENT_ID_ELEMENT_TO_EXPAND\n | typeof REMOVE_AGREEMENT_ID_ELEMENT_TO_EXPAND;\n data: number;\n}\n\ninterface IsTempAgreementInTempList {\n type: typeof IS_AGREEMENT_IN_TEMP_ARRAY;\n agreementCategory: string;\n agreementPageCategory: string;\n}\n\ninterface SetNewestMyPlanTextAgreements {\n type: typeof SET_NEWEST_MY_PLAN_TEXT_AGREEMENTS;\n data: TextAgreementModel[];\n}\n\ninterface SetQualificationAgreeements {\n type: typeof SET_QUALIFICATION_AGREEMENTS;\n data: QualificationAgreementModel[];\n}\n\ninterface AddQualificationAgreement {\n type: typeof ADD_QUALIFICATION_AGREEMENT;\n data: QualificationAgreementModel;\n}\n\ninterface RemoveQualificationAgreement {\n type: typeof REMOVE_QUALIFICATION_AGREEMENT | typeof REMOVE_NEWEST_MYPLAN_QUALIFICATION_AGREEMENT;\n qualificationId: number;\n}\n\ninterface SetAllQualificationsToDoneOrNotDone {\n type: typeof SET_ALL_QUALIFICATIONSAGREEMENTS_TO_DONE | typeof SET_ALL_QUALIFICATIONSAGREEMENTS_TO_NOT_DONE;\n}\n\ninterface UpdateQualificationAgreement {\n type: typeof UPDATE_QUALIFICATION_AGREEMENT;\n index: number;\n qualificationAgreement: QualificationAgreementModel;\n}\n\ninterface ClearAgreements {\n type: typeof CLEAR_QUALIFICATION_AGREEMENTS | typeof CLEAR_TEXT_AGREEMENTS;\n}\n\ninterface SetTempAndSavedRemark {\n type: typeof SET_DRAFT_REMARK | typeof SET_SAVED_REMARK;\n data: string;\n}\n\ninterface DeleteRemarks {\n type: typeof DELETE_REMARKS; \n}\n\ninterface SetDraftAgreement {\n type: typeof SET_DRAFT_AGREEMENT; \n data: TextAgreementModel;\n}\n\ninterface UpdateDraftAgreement {\n type: typeof UPDATE_DRAFT_AGREEMENT_TEXT;\n data: string; \n}\n\ninterface ClearAllAgreementData {\n type: typeof CLEAR_ALL_AGREEMENT_DATA; \n}\n\ninterface SetQualificationAgreementsAddedFromNewestMyPlan {\n type: typeof SET_QUALIFICATION_AGREEMENTS_ADDED_FROM_NEWEST_MYPLAN; \n data: QualificationAgreementModel[];\n}\n\ninterface SetNewestMyPlanQualificationAgreements {\n type: typeof SET_NEWEST_MY_PLAN_QUALIFICATION_AGREEMENTS;\n data: QualificationAgreementModel[];\n}\n\ninterface ClearAddedQualificationAgreements {\n type: typeof CLEAR_QUALIFICATION_AGREEMENTS_ADDED_FROM_NEWEST_MYPLAN;\n}\n\nexport interface AgreementActionsDefaultState {\n textAgreements: TextAgreementModel[];\n qualificationAgreements: QualificationAgreementModel[];\n addedQualificationAgreements: QualificationAgreementModel[];\n newestMyPlanQualificationAgreements: QualificationAgreementModel[];\n tempTextAgreements: TextAgreementModel[];\n agreementIdExpandList: number[];\n draftTextAgreement: TextAgreementModel;\n isTempAgreementInTempList: boolean;\n savedRemark: string;\n}\n\nexport type AgreementActionTypes =\n | AddUpdateOrDeleteAgreementAction\n | UpdateAgreementAction\n | RemoveAgreementAction\n | AddOrRemoveAgreementToExpand\n | ClearDraftTempAgreement\n | IsTempAgreementInTempList\n | SetNewestMyPlanTextAgreements\n | SetQualificationAgreeements\n | AddQualificationAgreement\n | RemoveQualificationAgreement\n | UpdateQualificationAgreement\n | ClearAgreements\n | SetAllQualificationsToDoneOrNotDone\n | SetTempAndSavedRemark\n | DeleteRemarks\n | SetDraftAgreement\n | UpdateDraftAgreement\n | ClearAllAgreementData\n | SetQualificationAgreementsAddedFromNewestMyPlan\n | ClearAddedQualificationAgreements\n | SetNewestMyPlanQualificationAgreements;\n","import moment from \"moment\";\nimport { isEmptyOrUndefined } from \"./TypeChecks\";\n\nexport const createLocaleDate = (): Date => {\n return moment(new Date()).toDate();\n}\n\nexport const formatDateToDanishSignatureWithWeek = (date: Date | undefined): string => {\n if (!isEmptyOrUndefined(date))\n return `${moment(date).format('DD/MM-YYYY')} (uge ${moment(date, 'YYYY-MM-DD').locale('da').week()})`;\n else \n return '';\n}\n\nexport const formatDateToWeek = (date: Date | undefined): string => {\n // using isoWeek because ISO week date system is an effectively leap week calender system.\n if (!isEmptyOrUndefined(date))\n return `uge ${moment(date, 'YYYY-MM-DD')?.locale('da')?.isoWeek()}`\n else\n return ''\n}\n\nexport const formatDateToDanishSignature = (date: Date | undefined): string => {\n if (!isEmptyOrUndefined(date))\n return moment(date).format('DD/MM-YYYY');\n else \n return '';\n}\n\nexport const formatDateToDanishSignatureOnlyHyphen = (date: Date): string => {\n return moment(date).format('DD-MM-YYYY');\n}\n\nexport const formatDateWithTimeToDanishSignature = (date: Date): string => {\n // setting hours to +2 since json converts the date to not locale time so it's 2 hours behind. \n // date?.setHours(date?.getHours() + 2);\n return moment(date).format('DD/MM-YYYY HH:mm:ss');\n}\n\nexport const getUnixTime = (): number => {\n return moment().unix();\n}\n\n// Great to check on dates to avoid time to be a factor on the predicate.\nexport const newDateWithoutTimestamp = (date: Date): Date => {\n return new Date(new Date(date)?.toDateString());\n}\n\nexport const formatDate = (date: Date): string => {\n let d = new Date(date),\n month = '' + (d.getMonth() + 1),\n day = '' + d.getDate(),\n year = d.getFullYear();\n \n if (month.length < 2) month = '0' + month;\n if (day.length < 2) day = '0' + day;\n return [day + '-' + month + '-' + year].toString();\n };\n \n export const reverseDate = (dateToReverse: string): string => {\n let dateString = dateToReverse;\n dateString = dateString.split('-').reverse().join('-');\n return dateString;\n };\n \n export const handleDateConvert = (date: Date | undefined): string => {\n if (!date) return '';\n return new Date(date).toLocaleDateString('da-DK', { year: 'numeric', month: 'short', day: 'numeric' });\n };\n \n export const timestampDateFormat = (dateNow: number): string => {\n return Intl.DateTimeFormat('da-DK', {\n year: '2-digit',\n hour: '2-digit',\n minute: '2-digit',\n second: '2-digit',\n }).format(dateNow);\n };\n\nexport const dateThreeMonthsBack = (): Date => {\n return moment().subtract(12, 'weeks').toDate();\n}\n\nexport const convertToDayDateMonthYear = (date: Date) => {\n const tempDate: Date = new Date(date);\n let months = [\"januar\", \"februar\", \"marts\", \"april\", \"maj\", \"juni\", \"juli\", \"august\", \"september\", \"oktober\", \"november\", \"december\"];\n let monthName=months[tempDate?.getMonth()];\n\n return tempDate?.getDate() + '.' + ' ' + monthName + ' ' + tempDate?.getFullYear();\n}\n\nexport const convertTimestampToDateString = (timestamp: number): string => {\n if(timestamp?.toString()?.length > 10)\n return moment(timestamp).format('DD/MM-YYYY');\n else \n return moment.unix(timestamp).format('DD/MM-YYYY');\n}","export enum UnemploymentFundMembershipType {\n NONE = -1,\n NotAMember = 0,\n UnemployedMember = 1,\n EmployedMember = 2\n} ","import CitizenModel from '../../models/CitizenModel';\nimport { Guid } from \"guid-typescript\";\nimport { JobSearchDefinition } from '../../models/JobSearchDefinition';\nimport { DFDG_MyPlanVersion } from '../../models/DFDG_MyPlanVersion';\nimport { BookingModel } from '../../models/BookingModel';\nimport DataResponseModel from '../../models/Template/DataResponseModel';\nimport { ApiResponseEnumModel } from '../../models/ApiResponseEnumModel';\nimport DocumentModel from '../../models/DocumentModel';\nexport const GET_CITIZEN = 'GET_CITIZEN';\nexport const SEARCH_CITIZEN = 'SEARCH_CITIZEN';\nexport const CLEAR_CITIZEN = 'CLEAR_CITIZEN';\nexport const UPDATE_TRAVEL_TIME_CITIZEN = 'UPDATE_TRAVEL_TIME_CITIZEN';\nexport const IS_LOADING_CITIZEN = 'IS_LOADING_CITIZEN';\nexport const SET_JOBBAROMETER = 'SET_JOBBAROMETER';\nexport const SET_CITIZEN_UNEMPLOYMENT_FUND = 'SET_CITIZEN_UNEMPLOYMENT_FUND';\nexport const SET_JOBSEARCH_DEFINITION_LIST = 'SET_JOBSEARCH_DEFINITION_LIST';\nexport const SET_CITIZEN_BOOKINGS = \"SET_CITIZEN_BOOKINGS\";\nexport const SET_CHOSEN_BOOKING = \"SET_CHOSEN_BOOKING\";\nexport const SET_EARLIEST_JOBSEARCH_DEFINITION = \"SET_EARLIEST_JOBSEARCH_DEFINITION\"\nexport const SET_CITIZEN_DATA_RESPONSE_ENUM = \"SET_CITIZEN_DATA_RESPONSE_ENUM\";\n\nexport const SET_DFDG_MYPLAN_VERSIONS = \"SET_DFDG_MYPLAN_VERSIONS\";\n\nexport const SET_DOCUMENT = \"SET_DOCUMENT\";\nexport const CLEAR_DOCUMENT = \"CLEAR_DOCUMENT\";\nexport const SET_DOCUMENT_API_RESPONSE = \"SET_DOCUMENT_API_RESPONSE\";\n\nexport const POST_DATA_GROUP_TO_CITIZEN = \"POST_DATA_GROUP_TO_CITIZEN\";\nexport const SET_NEWEST_DATA_RESPONSE = \"SET_NEWEST_DATA_RESPONSE\";\n\n// Clear All Citizen Data\nexport const CLEAR_ALL_CITIZEN_DATA = \"CLEAR_ALL_CITIZEN_DATA\";\n\ninterface GetCitizen {\n type: typeof GET_CITIZEN;\n data: CitizenModel;\n}\n\ninterface SearchCitizenCPR {\n type: typeof SEARCH_CITIZEN;\n data: Guid;\n}\n\ninterface ClearCitizen {\n type: typeof CLEAR_CITIZEN;\n}\n\ninterface UpdateCitizenTravelTime {\n type: typeof UPDATE_TRAVEL_TIME_CITIZEN;\n data: CitizenModel;\n}\n\ninterface SetJobBarometer {\n type: typeof SET_JOBBAROMETER;\n data: string;\n}\n\ninterface LoadingCitizen {\n type: typeof IS_LOADING_CITIZEN;\n data: boolean;\n}\n\ninterface CitizenUnemploymentFund {\n type: typeof SET_CITIZEN_UNEMPLOYMENT_FUND;\n data: string;\n}\n\ninterface SetEarliestJobSearchDefinition {\n type: typeof SET_EARLIEST_JOBSEARCH_DEFINITION; \n data: JobSearchDefinition;\n}\n\ninterface SetJobSearchDefinitionList {\n type: typeof SET_JOBSEARCH_DEFINITION_LIST;\n data: JobSearchDefinition[];\n}\n\ninterface SetDFDGMyPlanVersions {\n type: typeof SET_DFDG_MYPLAN_VERSIONS;\n data: DFDG_MyPlanVersion[];\n}\n\ninterface SetCitizenBookings {\n type: typeof SET_CITIZEN_BOOKINGS;\n data: BookingModel[];\n}\n\ninterface SetChosenBooking {\n type: typeof SET_CHOSEN_BOOKING;\n data: BookingModel;\n}\n\ninterface ClearAllCitizenData {\n type: typeof CLEAR_ALL_CITIZEN_DATA; \n}\n\ninterface SetDocuments {\n type: typeof SET_DOCUMENT; \n data: Blob; \n}\n\ninterface ClearDocument {\n type: typeof CLEAR_DOCUMENT; \n}\n\ninterface PostDataGroupToCitizen {\n type: typeof POST_DATA_GROUP_TO_CITIZEN;\n data: DataResponseModel;\n}\n\ninterface SetApiResponseEnum {\n type: typeof SET_DOCUMENT_API_RESPONSE | typeof SET_CITIZEN_DATA_RESPONSE_ENUM;\n data: ApiResponseEnumModel;\n}\n\ninterface SetNewestDataResponse {\n type: typeof SET_NEWEST_DATA_RESPONSE; \n data: DataResponseModel;\n}\n\nexport interface CitizenActionsDefaultState {\n citizen: CitizenModel;\n citizenID: Guid;\n doneFetching: boolean;\n jobBaroMeterUrl: string;\n isLoadingCitizen: boolean;\n unemploymentFundName: string;\n jobSearchDefinitionList: JobSearchDefinition[];\n dfdgMyPlanVersions: DFDG_MyPlanVersion[];\n bookings: BookingModel[];\n chosenBooking: BookingModel;\n document: Blob; \n dataResponse: DataResponseModel;\n newestDataResponse: DataResponseModel;\n documentApiResponseEnum: ApiResponseEnumModel;\n earliestJobSearchDefinition: JobSearchDefinition;\n citizenDataResponse: ApiResponseEnumModel;\n}\n\nexport type CitizenActionTypes =\n | GetCitizen\n | SearchCitizenCPR\n | ClearCitizen\n | UpdateCitizenTravelTime\n | SetJobBarometer\n | LoadingCitizen\n | CitizenUnemploymentFund\n | SetJobSearchDefinitionList\n | SetDFDGMyPlanVersions\n | SetCitizenBookings\n | SetChosenBooking\n | ClearAllCitizenData\n | SetDocuments\n | PostDataGroupToCitizen\n | SetApiResponseEnum\n | ClearDocument\n | SetNewestDataResponse\n | SetEarliestJobSearchDefinition;","import JobModel from './JobModel';\nimport QualificationModel from './QualificationModel';\nimport OccupationOpportunityModel from './OccupationOpportunityModel';\nimport IndustryModel from './IndustryModel';\nimport { Guid } from 'guid-typescript';\nimport { createGuid } from '../helpers/CreateGuid';\nimport JobLogToJobMapModel from './JobLogToJobMapModel';\n\nexport enum JobPathType {\n NormalJobPath = 1,\n DSAJobPath = 2,\n}\n\nexport class JobPathModel {\n id: Guid;\n name: string;\n description: string;\n occupations: OccupationOpportunityModel[];\n filteredOccupations: OccupationOpportunityModel[];\n industries: IndustryModel[];\n jobs: JobModel[];\n companyJobs: JobModel[];\n qualifications: QualificationModel[];\n similarQualifications: QualificationModel[];\n qualificationsFromCV: QualificationModel[];\n isFilterChosen: boolean;\n filteredJobs: JobModel[];\n imageId: number;\n isActive: boolean;\n pinnedJobs: JobModel[];\n dateCreated: Date;\n dateDeleted?: Date;\n profession: string;\n workAreas: string[];\n areaOfSpecializations: string[];\n type: JobPathType;\n specializationKeywords: string[];\n jobSearchEntries: JobLogToJobMapModel[];\n isSaved?: boolean;\n\n constructor(\n name: string,\n description: string,\n occupations: OccupationOpportunityModel[],\n filteredOccupations: OccupationOpportunityModel[],\n industries: IndustryModel[],\n jobs: JobModel[],\n companyJobs: JobModel[],\n qualifications: QualificationModel[],\n similarQualifications: QualificationModel[],\n qualificationsFromCV: QualificationModel[],\n dateCreated: Date,\n isFilterChosen: boolean,\n filteredJobs: JobModel[],\n pinnedJobs: JobModel[],\n imageId: number,\n isActive: boolean,\n profession: string,\n workAreas: string[],\n areaOfSpecializations: string[],\n type: JobPathType,\n specializationKeywords: string[],\n jobSearchEntries: JobLogToJobMapModel[],\n ) {\n this.id = createGuid();\n this.name = name;\n this.description = description;\n this.occupations = occupations;\n this.filteredOccupations = filteredOccupations;\n this.industries = industries;\n this.jobs = jobs;\n this.companyJobs = companyJobs;\n this.qualifications = qualifications;\n this.similarQualifications = similarQualifications;\n this.qualificationsFromCV = qualificationsFromCV;\n this.dateCreated = dateCreated;\n this.isFilterChosen = isFilterChosen;\n this.filteredJobs = filteredJobs;\n this.pinnedJobs = pinnedJobs;\n this.imageId = imageId;\n this.isActive = isActive;\n this.profession = profession;\n this.workAreas = workAreas;\n this.areaOfSpecializations = areaOfSpecializations;\n this.type = type;\n this.specializationKeywords = specializationKeywords;\n this.jobSearchEntries = jobSearchEntries;\n }\n}\n\nexport default JobPathModel;\n\nexport function isJobPathSaved(jobPath: JobPathModel): boolean {\n return jobPath?.isSaved === undefined || jobPath?.isSaved;\n}","import { Guid } from \"guid-typescript\";\n\nexport function createGuid(): Guid {\n let guid: Guid = Guid.create();\n return guid.toJSON().value;\n}\n\nexport function createEmptyGuid(): Guid {\n let guid: Guid = Guid.createEmpty();\n return guid.toJSON().value;\n}","export class SearchListModel {\n id: number | string;\n name: string;\n checked?: boolean;\n\n constructor(id: number | string, name: string, checked?: boolean) {\n this.id = id;\n this.name = name;\n this.checked = checked;\n }\n}","import { Guid } from \"guid-typescript\";\nimport { DFDGDocument } from \"../../models/DFDGDocument\";\nimport GeoPoint from \"../../models/GeoPoint\";\nimport JobModel from \"../../models/JobModel\";\nimport JobPathModel from \"../../models/JobPathModel\";\nimport JobSearchEntryModel from \"../../models/JobSearchEntryModel\";\nimport { UnemploymentFundMembershipType } from \"../../models/UnemploymentFundMembershipType\";\n\nexport const SET_JOB_SEARCH_ENTRIES = \"SET_JOB_SEARCH_ENTRIES\";\nexport const SET_JOB_SEARCH_ENTRY = \"SET_JOB_SEARCH_ENTRY\";\nexport const UPDATE_JOB_SEARCH_ENTRY = \"UPDATE_JOB_SEARCH_ENTRY\";\nexport const DELETE_JOB_SEARCH_ENTRY = \"DELETE_JOB_SEARCH_ENTRY\";\n\nexport const UPDATE_JOB_SEARCH_ENTRIES_WITH_JOBPATH_ID = \"UPDATE_JOB_SEARCH_ENTRIES_WITH_JOBPATH_ID\";\nexport const SET_JOBPATH_ID_ON_JOB_SEARCH_ENTRY = \"SET_JOBPATH_ID_ON_JOB_SEARCH_ENTRY\";\n\nexport const SET_PERSON_GEO_DATA = \"SET_PERSON_GEO_DATA\";\nexport const SET_SHOW_GEO_LOCATION_MODAL = \"SET_SHOW_GEO_LOCATION_MODAL\";\n\nexport const SET_PERSON_MEMBER_SHIP = \"SET_PERSON_MEMBER_SHIP\";\n\n// Clear All Data\nexport const CLEAR_ALL_PERSON_DATA = \"CLEAR_ALL_PERSON_DATA\";\n\n//documents\nexport const ADD_DOCUMENT_TO_JOBLOG = 'ADD_DOCUMENT_TO_JOBLOG';\nexport const REMOVE_DOCUMENT_ON_JOBLOG = 'REMOVE_DOCUMENT_ON_JOBLOG';\nexport const CLEAR_TEMP_FILES = 'CLEAR_TEMP_FILES';\n\nexport const SET_HAS_JOBPATH_FILTERS = 'SET_HAS_JOBPATH_FILTERS';\n\ninterface ClearAllPersonData {\n type: typeof CLEAR_ALL_PERSON_DATA; \n}\n\ninterface SetJobSearchEntries {\n type: typeof SET_JOB_SEARCH_ENTRIES;\n data: JobSearchEntryModel[];\n}\n\ninterface SetUpdateOrDeleteJobSearchEntry {\n type: typeof SET_JOB_SEARCH_ENTRY | typeof UPDATE_JOB_SEARCH_ENTRY | typeof DELETE_JOB_SEARCH_ENTRY;\n data: JobSearchEntryModel;\n}\n\ninterface AddDocumentToJobLog {\n type: typeof ADD_DOCUMENT_TO_JOBLOG;\n joblogEntryIdentifier: Guid;\n document: DFDGDocument;\n file: File;\n sentToService: boolean;\n}\n\ninterface RemoveDocumentOnJoblog {\n type: typeof REMOVE_DOCUMENT_ON_JOBLOG;\n joblogEntryIdentifier: Guid;\n jobLogDocumentIdentifier: Guid;\n document: DFDGDocument;\n removeDocumentInJobSearchEntries: boolean;\n}\n\ninterface UpdateJobSearchEntriesWithJobPath {\n type: typeof UPDATE_JOB_SEARCH_ENTRIES_WITH_JOBPATH_ID;\n data: JobPathModel[];\n}\n\ninterface SetJobPathIDOnJobSearchEntry {\n type: typeof SET_JOBPATH_ID_ON_JOB_SEARCH_ENTRY;\n jobPathID: Guid;\n jobEntryID: Guid;\n}\n\ninterface ClearTempList {\n type: typeof CLEAR_TEMP_FILES;\n}\n\ninterface SetPersonGeoData {\n type: typeof SET_PERSON_GEO_DATA;\n data: GeoPoint;\n}\n\ninterface SetPersonMembership {\n type: typeof SET_PERSON_MEMBER_SHIP;\n data: UnemploymentFundMembershipType;\n}\n\ninterface SetHasJobPathFilters {\n type: typeof SET_HAS_JOBPATH_FILTERS;\n hasJobPathFilters: boolean;\n}\n\ninterface SetShowGeoLocationModal {\n type: typeof SET_SHOW_GEO_LOCATION_MODAL;\n data: boolean;\n}\n\nexport interface PersonDefaultState {\n jobSearchEntries: JobSearchEntryModel[];\n tempFiles: DFDGDocument[];\n hasUpdatedJobPathIDs: boolean;\n personGeoData: GeoPoint | null;\n showGeoLocationModal: boolean;\n personMembership: UnemploymentFundMembershipType;\n hasJobPathFilters: boolean | null;\n}\n\nexport type PersonActionTypes =\n | ClearAllPersonData\n | SetJobSearchEntries\n | SetUpdateOrDeleteJobSearchEntry\n | AddDocumentToJobLog\n | RemoveDocumentOnJoblog\n | ClearTempList\n | UpdateJobSearchEntriesWithJobPath\n | SetJobPathIDOnJobSearchEntry\n | SetPersonGeoData\n | SetPersonMembership\n | SetHasJobPathFilters\n | SetShowGeoLocationModal;\n","import { Guid } from \"guid-typescript\";\n\nexport enum ValueType {\n date, number, text, tag, interval\n}\n\nexport enum InputDataType {\n TagInput = \"MBModels.InputData.TagInput, MBModels\",\n NumberInput = \"MBModels.InputData.NumberInput, MBModels\",\n DateInput = \"MBModels.InputData.DateInput, MBModels\",\n TextInput = \"MBModels.InputData.TextInput, MBModels\",\n IntervalInput = \"MBModels.InputData.IntervalInput, MBModels\",\n}\n\nexport abstract class InputModel {\n id: Guid;\n title: string;\n valueType: ValueType;\n abstract value: T;\n $type: InputDataType; \n description: string;\n\n constructor(id: Guid, title: string, valueType: ValueType, $type: InputDataType, description: string) {\n this.id = id;\n this.title = title;\n this.valueType = valueType;\n this.$type = $type;\n this.description = description;\n }\n\n}\n\nexport default InputModel;\n","export class QueryFilter {\n type: string;\n value: string;\n\n constructor(type: string, value: string){\n this.type = type;\n this.value = value;\n }\n}","import { Guid } from \"guid-typescript\";\nimport InputModel, { InputDataType } from \"../InputModel\";\nimport { ValueType } from \"../InputModel\";\n\n\nexport enum InputType {\n box, slider\n}\n\nexport class NumberInput extends InputModel{\n value: number = 0;\n inputType: InputType;\n\n constructor(id: Guid, title: string, inputType: InputType, description: string) {\n super(id, title, ValueType.number, InputDataType.NumberInput, description);\n this.inputType = inputType;\n }\n\n getValue(): number {\n return this.value;\n }\n\n setValue(value: number): void {\n this.value = value;\n }\n}\n\nexport default NumberInput;\n","import { Guid } from \"guid-typescript\";\n\nexport default class DashboardFilterModel {\n startDate: Date; \n endDate: Date; \n users: Guid[];\n contactGroups: number[];\n\n constructor(startDate: Date, endDate: Date, users: Guid[], contactGroups: number[]) {\n this.startDate = startDate; \n this.endDate = endDate;\n this.users = users; \n this.contactGroups = contactGroups;\n }\n}","import { Guid } from \"guid-typescript\";\nimport InputModel, { InputDataType } from \"../InputModel\";\nimport { ValueType } from \"../InputModel\";\n\nexport class IntervalInput extends InputModel{\n value: number[] = [];\n\n constructor(id: Guid, title: string, description: string) {\n super(id, title, ValueType.interval, InputDataType.IntervalInput, description);\n }\n\n getValue(): number[] {\n return this.value;\n }\n\n setValue(value: number[]): void {\n this.value = value;\n }\n}\n\nexport default IntervalInput;\n","import { Guid } from \"guid-typescript\";\nimport InputModel, { InputDataType } from \"../InputModel\";\nimport { ValueType } from \"../InputModel\";\n\nexport class TextInput extends InputModel{\n value: string = \"\";\n multiLine: boolean;\n\n constructor(id: Guid, title: string, multiLine: boolean, description: string) {\n super(id, title, ValueType.text, InputDataType.TextInput, description);\n this.multiLine = multiLine;\n }\n\n getValue(): string {\n return this.value;\n }\n\n setValue(value: string): void {\n this.value = value;\n }\n}\n\nexport default TextInput;\n","import { Guid } from \"guid-typescript\";\nimport { BookingModel } from \"../models/BookingModel\";\nimport BookingParticipantTypeModel from \"../models/BookingParticipantTypeModel\";\nimport CodeListEntryModel from \"../models/CodeListEntryModel\";\nimport DashboardFilterModel from \"../models/DashboardFilterModel\";\nimport { DashboardModel } from \"../models/DashboardModel\";\nimport { InterviewParticipant } from \"../models/InterviewParticipant\";\nimport JobPathModel, { JobPathType } from \"../models/JobPathModel\";\nimport JobSearchEntryModel from \"../models/JobSearchEntryModel\";\nimport MyPlanConfigurationModel from \"../models/MyPlanConfigurationModel\";\nimport IntervalInput from \"../models/Template/DataTypes/IntervalInput\";\nimport NumberInput, { InputType as NumberQuestionType } from \"../models/Template/DataTypes/NumberInput\";\nimport TagInput, { InputType, InputType as TagQuestionInputType } from \"../models/Template/DataTypes/TagInput\";\nimport TextInput from \"../models/Template/DataTypes/TextInput\";\nimport JobMatchTemplateModel, { JournalSystem } from \"../models/Template/JobMatchTemplateModel\";\nimport TemplateModel from \"../models/Template/TemplateModel\";\nimport DataGroup from \"../models/Template/TemplateModel\";\nimport { createEmptyGuid, createGuid } from \"./CreateGuid\";\nimport { createLocaleDate, dateThreeMonthsBack } from \"./DateHelper\";\n\nexport const fakeTemplateData = () => {\n const screening1 = new TagInput(createGuid(), 'Ansættelsesviklår', [\"Almindelige vilkår\", \"Egnet til efterlønnere og seniorer\", \"Egnet til førtidspensionister\", \"Fleksjob\", \"Handicap ingen hindring\",\n \"Hotjob\", \"Job med løntilskud\", \"Rotationsjob\", \"Virksomhedspraktik\"], TagQuestionInputType.checkbox, '');\n const screening2 = new NumberInput(createGuid(), \"Transporttid\", NumberQuestionType.box, 'Maximal rejsetid pr. dag (til og fra arbejde)');\n const screening3 = new TagInput(createGuid(), \"Transportmetode\", [\"Offentlig transportmiddel\", \"Kørsel i egen bil\"], TagQuestionInputType.checkbox, 'Transportering i dit land');\n let screening4 = new IntervalInput(createGuid(), 'Arbejdstid', 'Timer pr. uge');\n screening4.setValue([1, 40]);\n const screening5 = new TagInput(createGuid(), \"Ansættelsesvarighed\", [\"Fastansættelse\", \"Tidsbegrænset\"], TagQuestionInputType.checkbox, '');\n\n const screeningInput: DataGroup = {id: createGuid(), inputs: [], title: 'Screening'};\n screeningInput.inputs.push(screening1);\n screeningInput.inputs.push(screening2);\n screeningInput.inputs.push(screening3);\n screeningInput.inputs.push(screening4);\n screeningInput.inputs.push(screening5);\n\n const guidance1 = new TagInput(createGuid(), ' ', [\"Repatriering: Du er vejledt om muligheden for repatriering efter repatrieringsloven, og at du kan rette henvendelse til Dansk Flygtningehjælp for rådgivning.\",\n \"Rådighed og sanktioner: Til samtalen er du vejledt om pligten til at stå til rådighed for arbejdsmarkedet og deltage i den beskæftigelsesrettede indsats og mulige økonomiske sanktioner, hvis du ikke overholder dette. Vi har gennemgået pjecen, du har fået den udleveret og jeg har orienteret dig om, at den også vil blive sendt til din e-Boks.\",\n \"Oplysningspligt: Du er blevet vejledt om Persondataforordningen og dine rettigheder ift. at få indsigt i og gøre indsigelse mod behandlingen af dine personoplysninger.\"], TagQuestionInputType.checkbox, '');\n const guidance2 = new TextInput(createGuid(), 'Kommentarer', true, '');\n\n\n const guidanceInput: TemplateModel = {id: createGuid(), inputs: [], title: 'Vejledning'};\n guidanceInput.inputs.push(guidance1);\n guidanceInput.inputs.push(guidance2);\n\n\n const template: JobMatchTemplateModel = new JobMatchTemplateModel('jobparat', JournalSystem.KMDMomentum, screeningInput, guidanceInput, true, true, new MyPlanConfigurationModel(''));\n return template;\n}\n\n\nexport const fakeEmptyBookingObjData = (): BookingModel => {\n let bookingParticipant1 = new BookingParticipantTypeModel('Rudolf Stejner Hansen', 'test123doublehashingfunction', new CodeListEntryModel(1, 'A-kassekonsulent', 'A-kassekonsulent', ''), 'rudolf@gmail.com');\n\n const emptyBookingObj: BookingModel = new BookingModel(createEmptyGuid(), 'Test booking for Jobsamtale', new Date(), null, new CodeListEntryModel(7, 'Jobsamtale', 'Jobsamtale', ''),\n new CodeListEntryModel(1, 'Personlig kontakt', 'Personlig kontakt (med borgeren)', ''), new CodeListEntryModel(2, 'Fælles møde', 'Borgeren indkaldes til fælles møde', ''), '', [bookingParticipant1]);\n\n return emptyBookingObj;\n}\n\nexport const fakeBookingsData = (): BookingModel[] => {\n let bookingParticipant1 = new BookingParticipantTypeModel('Rudolf Stejner Hansen', 'test123doublehashingfunction', new CodeListEntryModel(1, 'A-kassekonsulent', 'A-kassekonsulent', ''), 'rudolf@gmail.com');\n\n const bookingObj1: BookingModel = new BookingModel(createGuid(), 'Test booking for Jobsamtale', new Date(), null, new CodeListEntryModel(7, 'Jobsamtale', 'Jobsamtale', ''),\n new CodeListEntryModel(1, 'Personlig kontakt', 'Personlig kontakt (med borgeren)', ''), new CodeListEntryModel(2, 'Fælles møde', 'Borgeren indkaldes til fælles møde', ''), '', [bookingParticipant1]);\n\n const bookingObj2: BookingModel = new BookingModel(createGuid(), 'Test booking for Fælles Jobsamtale', new Date(), null, new CodeListEntryModel(17, 'Fælles Jobsamtale med dagpengemodtager', 'Fælles Jobsamtale med dagpengemodtager', ''),\n new CodeListEntryModel(8, 'Videokonference/-møde', 'Videokonference/-møde', ''), new CodeListEntryModel(2, 'Fælles møde', 'Borgeren indkaldes til fælles møde', ''), '', [bookingParticipant1]);\n\n return [bookingObj1, bookingObj2];\n}\n\nexport const emptyInterviewParticipant = () => {\n return new InterviewParticipant(createGuid(), '', emptyCodeList(), emptyCodeList(), '');\n}\n\nexport const emptyCodeList = (): CodeListEntryModel => {\n return new CodeListEntryModel(-1, '', '', '');\n}\n\nexport const emptyJobPathModel = (imageId: number, type: JobPathType): JobPathModel => {\n return new JobPathModel('', '', [], [], [], [], [], [], [], [], createLocaleDate(), true, [], [], imageId, true, '', [], [], type, [], []);\n}\n\nexport const emptyRemainingJobPathModel = (): JobPathModel => {\n return new JobPathModel('Øvrige', '', [], [], [], [], [], [], [], [], createLocaleDate(), false, [], [], 9999, true, '', [], [], JobPathType.NormalJobPath, [], []);\n}\n\nexport const emptyDashboardFilterModel = (): DashboardFilterModel => {\n return new DashboardFilterModel(dateThreeMonthsBack(), new Date(), [], []);\n}\n\nexport const emptyDashboardModel = (): DashboardModel => {\n return new DashboardModel(-1, '', [], []);\n}\n\nexport const fakeJobSearchEntries = (): JobSearchEntryModel[] => {\n const data: JobSearchEntryModel[] = require('../data/JobSearchEntryData.json');\n\n return data;\n}","export default class CodeListEntryModel {\n identifier: number;\n name: string;\n description: string;\n codeListName: string;\n\n constructor(identifier: number, name: string, description: string, codeListName: string) {\n this.identifier = identifier;\n this.name = name;\n this.description = description;\n this.codeListName = codeListName;\n }\n}","import { isEmptyOrUndefined } from \"./TypeChecks\";\n\nexport function formatCPR(cpr: string): string {\n return cpr.slice(0, 6) + \"-\" + cpr.slice(6);\n}\n\n\nexport function createElipse(value: string, index: number) {\n if (value.length > index)\n return value.substr(0, index) + '...';\n else\n return value;\n}\n\nexport function convertFirstLetterToUppercase(value: string): string {\n let convertedToUppercase: string = value?.slice(0, 1)?.toUpperCase() + value?.slice(1, value?.length)?.toLowerCase();\n return convertedToUppercase;\n}","import { Configuration, LogLevel, RedirectRequest, SilentRequest, SsoSilentRequest } from \"@azure/msal-browser\";\n\n// **AUTHCONFIG USED FOR PROD**\nconst AUTH_CONFIG = {\n signUpSignIn: \"B2C_1A_SIGNUP_SIGNIN_ACCESS_DSA_MEDLEM\",\n clientId: \"04ac86b9-dea6-4ceb-abfb-273737017913\",\n authority: 'https://marselisborgit.b2clogin.com/marselisborgit.onmicrosoft.com/B2C_1A_SIGNUP_SIGNIN_ACCESS_DSA_MEDLEM',\n knownAuthorities: ['marselisborgit.b2clogin.com'],\n redirectUri: 'https://jobportal.dsa.dk',\n postLogoutRedirectUri: 'https://jobportal.dsa.dk',\n domain_hint: 'DSA_medlem'\n};\n\n// **AUTHCONFIG USED FOR TEST**\n// const AUTH_CONFIG = {\n// signUpSignIn: \"B2C_1A_SIGNUP_SIGNIN_ACCESS_DSA_medlemtest\",\n// clientId: \"04ac86b9-dea6-4ceb-abfb-273737017913\",\n// authority: 'https://marselisborgit.b2clogin.com/marselisborgit.onmicrosoft.com/B2C_1A_SIGNUP_SIGNIN_ACCESS_DSA_medlemtest',\n// knownAuthorities: ['marselisborgit.b2clogin.com'],\n// redirectUri: 'https://jobportal.marselisborg.org',\n// postLogoutRedirectUri: 'https://jobportal.marselisborg.org',\n// domain_hint: 'DSA_medlemtest'\n// };\n\n// **AUTHCONFIG PROD USED FOR LOCALHOST**\n// const AUTH_CONFIG = {\n// signUpSignIn: \"B2C_1A_SIGNUP_SIGNIN_ACCESS_DSA_MEDLEM\",\n// clientId: \"04ac86b9-dea6-4ceb-abfb-273737017913\",\n// authority: 'https://marselisborgit.b2clogin.com/marselisborgit.onmicrosoft.com/B2C_1A_SIGNUP_SIGNIN_ACCESS_DSA_MEDLEM',\n// knownAuthorities: ['marselisborgit.b2clogin.com'],\n// redirectUri: 'http://localhost:3000',\n// postLogoutRedirectUri: 'http://localhost:3000',\n// domain_hint: 'DSA_medlem'\n// };\n\n// **AUTHCONFIG USED FOR LOCALHOST**\n// const AUTH_CONFIG = {\n// signUpSignIn: \"B2C_1A_signup_signin_access_DSA_medlemtest\",\n// clientId: \"04ac86b9-dea6-4ceb-abfb-273737017913\",\n// authority: 'https://marselisborgit.b2clogin.com/marselisborgit.onmicrosoft.com/B2C_1A_signup_signin_access_DSA_medlemtest',\n// knownAuthorities: ['marselisborgit.b2clogin.com'],\n// redirectUri: 'http://localhost:3000',\n// postLogoutRedirectUri: 'http://localhost:3000',\n// domain_hint: 'DSA_medlemtest'\n// };\n\n\nexport const MSAL_CONFIG: Configuration = {\n auth: {\n clientId: AUTH_CONFIG.clientId,\n redirectUri: AUTH_CONFIG.redirectUri,\n authority: AUTH_CONFIG.authority,\n knownAuthorities: AUTH_CONFIG.knownAuthorities,\n postLogoutRedirectUri: AUTH_CONFIG.postLogoutRedirectUri,\n navigateToLoginRequestUrl: true,\n },\n cache: {\n cacheLocation: \"sessionStorage\", // This configures where your cache will be stored\n storeAuthStateInCookie: false, // Set this to \"true\" if you are having issues on IE11 or Edge\n },\n system: {\n iframeHashTimeout: 10000,\n loggerOptions: {\n loggerCallback: (level:any, message: any, containsPii: any) => {\n if (containsPii) {\t\n return;\t\n }\t\n // switch (level) {\t\n // case LogLevel.Error:\t\n // console.error(message);\t\n // return;\t\n // case LogLevel.Info:\t\n // console.info(message);\t\n // return;\t\n // case LogLevel.Verbose:\t\n // console.debug(message);\t\n // return;\t\n // case LogLevel.Warning:\t\n // console.warn(message);\t\n // return;\t\n // }\n }\n }\n }\n}\n\nexport const loginRequest:RedirectRequest = {\n scopes: [],\n extraQueryParameters: {domain_hint: AUTH_CONFIG.domain_hint}\n};\n\nexport const loginRedirectRequest: RedirectRequest = {\n ...loginRequest,\n scopes:[\"https://marselisborgit.onmicrosoft.com/access.read/access.dsa.read\" ],\n redirectStartPage: AUTH_CONFIG.redirectUri,\n extraQueryParameters: {domain_hint: AUTH_CONFIG.domain_hint}\n};\n\nexport const silentLoginRequest: SsoSilentRequest = {\n redirectUri: AUTH_CONFIG.redirectUri,\n scopes:[],\n};\n\nexport const silentTokenRequest: SilentRequest = {\n scopes:[\"https://marselisborgit.onmicrosoft.com/access.read/access.dsa.read\"],\n};\n\n\nexport const accessRedirectRequest: RedirectRequest = {\n scopes: []\n};\n\nexport const silentAccessRequest: SilentRequest = {\n scopes: [\"offline_access\"]// scopes: [\"openid\", \"virego.read\"]\n};","import JobLogEntryModel from \"../../models/JobLogEntryModel\";\nimport JobPathModel from \"../../models/JobPathModel\";\nimport JobModel from \"../../models/JobModel\";\n\nexport const SET_VIEW_FROM_LOWER_HEADER = 'SET_VIEW_FROM_LOWER_HEADER';\n\nexport const SET_FILTERED_JOBSLOGS_FROM_JOBPATH = 'SET_FILTERED_JOBSLOGS_FROM_JOBPATH';\nexport const SET_JOBLOGS_WITHOUT_JOBPATH_ID = 'SET_JOBLOGS_WITHOUT_JOBPATH_ID';\n\nexport const SET_IS_LOADING_DONUT_CHART = 'SET_IS_LOADING_DONUT_CHART';\nexport const SET_IS_LOADING_STACKED_BAR_CHART = 'SET_IS_LOADING_STACKED_BAR_CHART';\n\nexport const SET_STACKED_BAR_CHART_DATA = 'SET_STACKED_BAR_CHART_DATA';\n\nexport const SET_LOADER = 'SET_LOADER';\n\nexport const SET_JOBS_WITH_JOBPATH_OVERVIEW = 'SET_JOBS_WITH_JOBPATH_OVERVIEW';\nexport const SET_JOBS_WITHOUT_JOBPATH_OVERVIEW = 'SET_JOBS_WITHOUT_JOBPATH_OVERVIEW';\n\n// Clear all Preparation Data\nexport const CLEAR_ALL_PREPARATION_DATA = \"CLEAR_ALL_PREPARATION_DATA\";\n\ninterface SetViewFromHeader {\n type: typeof SET_VIEW_FROM_LOWER_HEADER;\n data: string;\n}\n\ninterface SetIsLoadingChartsOrLoader {\n type: typeof SET_IS_LOADING_DONUT_CHART | typeof SET_IS_LOADING_STACKED_BAR_CHART | typeof SET_LOADER;\n isLoading: boolean;\n}\n\ninterface SetFilteredJoblogsFromJobpath {\n type: typeof SET_FILTERED_JOBSLOGS_FROM_JOBPATH;\n data: [JobLogEntryModel[], JobPathModel][];\n}\n\ninterface SetJoblogsWithOutJobPath {\n type: typeof SET_JOBLOGS_WITHOUT_JOBPATH_ID;\n data: JobLogEntryModel[];\n}\n\ninterface SetJobsInMapOverview {\n type: typeof SET_JOBS_WITH_JOBPATH_OVERVIEW | typeof SET_JOBS_WITHOUT_JOBPATH_OVERVIEW;\n data: JobModel[];\n}\n\ninterface ClearAllPreparationData {\n type: typeof CLEAR_ALL_PREPARATION_DATA; \n}\n\nexport interface DefaultPreparationActionState {\n viewToDisplay: string;\n filteredJobsLogsAndJobpath: [JobLogEntryModel[], JobPathModel][];\n jobLogsWithoutJobPathID: JobLogEntryModel[];\n isLoadingDonutChart: boolean;\n isLoadingStackedBarChart: boolean;\n displayLoader: boolean;\n jobsInMapWithJobPaths: JobModel[];\n jobsInMapWithoutJobPaths: JobModel[];\n}\n\nexport type PreparationActionTypes =\n SetViewFromHeader |\n SetFilteredJoblogsFromJobpath |\n SetJoblogsWithOutJobPath |\n SetIsLoadingChartsOrLoader |\n SetJobsInMapOverview | \n ClearAllPreparationData;","import { Guid } from \"guid-typescript\";\nimport InputModel from \"../../models/Template/InputModel\";\nimport JobMatchTemplateModel from \"../../models/Template/JobMatchTemplateModel\";\nimport DataGroup from \"../../models/Template/TemplateModel\";\n\nexport const SET_VALUE_ON_TEMPLATE = \"SET_VALUE_ON_TEMPLATE\";\nexport const REMOVE_VALUE_ON_TEMPLATE = \"REMOVE_VALUE_ON_TEMPLATE\";\n\nexport const IS_TEMPLATE_SAVED = \"IS_TEMPLATE_SAVED\";\nexport const BEGIN_SAVE_TEMPLATE = \"BEGIN_SAVE_TEMPLATE\";\n\nexport const UPDATE_TEMPLATE_VALUE = \"UPDATE_TEMPLATE_VALUE\";\n\nexport const SET_JOBMATCH_TEMPLATES = \"SET_JOBMATCH_TEMPLATES\";\n\nexport const SET_HAS_BEEN_SCREENED = \"SET_HAS_BEEN_SCREENED\";\n\nexport const CLEAR_GUIDANCE_VALUES_ON_DATA_FIELDS = \"CLEAR_GUIDANCE_VALUES_ON_DATA_FIELDS\";\n\n// Clear all template data \nexport const CLEAR_ALL_TEMPLATE_DATA = \"CLEAR_ALL_TEMPLATE_DATA\";\n\n\ninterface SetValueOnTemplateData {\n type: typeof SET_VALUE_ON_TEMPLATE;\n data: InputModel;\n template: DataGroup;\n}\n\ninterface RemoveValuesFromTemplateData {\n type: typeof REMOVE_VALUE_ON_TEMPLATE; \n valueToRemove: string; \n data: InputModel; \n template: DataGroup;\n}\n\ninterface UpdateValueOnTemplate {\n type: typeof UPDATE_TEMPLATE_VALUE; \n data: InputModel;\n template: DataGroup;\n}\n\ninterface SetIsTemplateSavedOrIsSaving {\n type: typeof IS_TEMPLATE_SAVED | typeof BEGIN_SAVE_TEMPLATE; \n data: boolean;\n}\n\ninterface ClearAllTemplateData {\n type: typeof CLEAR_ALL_TEMPLATE_DATA;\n}\n\ninterface SetJobMatchTemplates {\n type: typeof SET_JOBMATCH_TEMPLATES; \n data: JobMatchTemplateModel; \n}\n\ninterface HasBeenScreened {\n type: typeof SET_HAS_BEEN_SCREENED; \n screening: DataGroup;\n}\n\ninterface ClearGuidanceTemplateDataValueFields {\n type: typeof CLEAR_GUIDANCE_VALUES_ON_DATA_FIELDS; \n}\n\nexport interface TemplateDefaultState {\n templates: JobMatchTemplateModel;\n isTemplatedSaved: boolean; \n isSaving: boolean;\n hasBeenScreened: boolean;\n}\n\nexport type TemplateActionTypes =\n | SetValueOnTemplateData\n | RemoveValuesFromTemplateData\n | SetIsTemplateSavedOrIsSaving\n | ClearAllTemplateData\n | UpdateValueOnTemplate\n | SetJobMatchTemplates\n | HasBeenScreened\n | ClearGuidanceTemplateDataValueFields;","import * as React from 'react';\nimport './Loader.scss';\n\nimport ReactLoading from 'react-loading';\n\n\ninterface State {\n \n}\n\ninterface Props {\n loadingText: string;\n lowerBackDropOpacity?: boolean;\n}\n\n\nclass Loader extends React.Component {\n \n\n render() {\n return (\n
\n \n

{this.props.loadingText}\n .\n .\n .\n

\n
\n );\n }\n}\n\nexport default Loader;","export { default } from './Loader';\n","import MyPlanConfigurationModel from \"../MyPlanConfigurationModel\";\nimport DataGroup from \"./TemplateModel\";\n\n// Fagsystem enum\nexport enum JournalSystem {\n KMDMomentum = \"KMDMomentum\",\n SchultzFasit = \"SchultzFasit\"\n}\n\nexport default class JobMatchTemplateModel {\n key: string; \n journalSystem: JournalSystem;\n screeningDataGroup: DataGroup;\n guidanceDataGroup: DataGroup;\n hasEmploymentFund: boolean;\n hasJobLog: boolean;\n myPlanConfiguration: MyPlanConfigurationModel;\n\n constructor(key: string, knowledgeSharingSystem: JournalSystem, screeningDataGroup: DataGroup, guidanceDataGroup: DataGroup,\n hasEmploymentFund: boolean, hasJobLog: boolean, myPlanConfiguration: MyPlanConfigurationModel) {\n this.key = key;\n this.journalSystem = knowledgeSharingSystem;\n this.screeningDataGroup = screeningDataGroup;\n this.guidanceDataGroup = guidanceDataGroup;\n this.hasEmploymentFund = hasEmploymentFund;\n this.hasJobLog = hasJobLog;\n this.myPlanConfiguration = myPlanConfiguration;\n }\n}","export enum InterviewTypeIdentifier {\n NONE = -1,\n FollowupInterview = 4,\n FlexjobFollowupInterview = 5,\n JobInterview = 7,\n InformationMeeting = 9,\n CVInterview = 10,\n OtherInterview = 12,\n InformationMeetingWithoutAttendance = 13,\n AvailabilityInterview = 15,\n ConversationAboutTheContractAccordingToTheIntegrationAct = 16,\n JointJobInterviewWithUnemploymentBenefitRecipient = 17,\n ConversationInRehabilitationTeam = 18\n}\n\nexport const interviewTypeIdentifierAsStrings = (interviewType: InterviewTypeIdentifier): string => {\n let strToReturn: string = '';\n switch (interviewType) {\n case InterviewTypeIdentifier.FollowupInterview:\n strToReturn = \"Opfølgningssamtale\";\n break;\n\n case InterviewTypeIdentifier.FlexjobFollowupInterview:\n strToReturn = \"Fleksjobopfølgningssamtale\";\n break;\n\n case InterviewTypeIdentifier.JobInterview:\n strToReturn = \"Jobsamtale\";\n break;\n\n case InterviewTypeIdentifier.InformationMeeting:\n strToReturn = \"Informationsmøde\";\n break;\n\n case InterviewTypeIdentifier.CVInterview:\n strToReturn = \"CV samtale\";\n break;\n\n case InterviewTypeIdentifier.OtherInterview:\n strToReturn = \"Anden samtale\";\n break;\n\n case InterviewTypeIdentifier.InformationMeetingWithoutAttendance:\n strToReturn = \"Informationsmøde uden mødepligt\";\n break;\n\n case InterviewTypeIdentifier.AvailabilityInterview:\n strToReturn = \"Rådighedssamtale\";\n break;\n\n case InterviewTypeIdentifier.ConversationAboutTheContractAccordingToTheIntegrationAct:\n strToReturn = \"Samtale om kontrakten efter integrationsloven\";\n break;\n\n case InterviewTypeIdentifier.JointJobInterviewWithUnemploymentBenefitRecipient:\n strToReturn = \"Fælles Jobsamtale med dagpengemodtager\";\n break;\n\n case InterviewTypeIdentifier.ConversationInRehabilitationTeam:\n strToReturn = \"Samtale i rehabiliteringsteam\";\n break;\n\n default:\n break;\n }\n\n return strToReturn;\n}","import * as actions from './types';\nimport { MeetingModel } from '../../models/MeetingModel';\nimport JobLogEntryModel from '../../models/JobLogEntryModel';\nimport JobPathModel from '../../models/JobPathModel';\nimport { InterviewParticipant } from '../../models/InterviewParticipant';\nimport { createGuid } from '../../helpers/CreateGuid';\nimport { InterviewTypeIdentifier } from '../../models/InterviewTypeIdentifier';\nimport { ITableHeaderModel } from '../../models/Interfaces/ITableHeaderModel';\nimport { fakeJobSearchEntries } from '../../helpers/CreateEmptyDataObjects';\n\nexport enum JobLogFilter {\n ALL = \"All\",\n ACTIVE = \"Active\",\n JOBLOG = \"Joblog\"\n}\n\nexport const myPlanJoblogTableNames: ITableHeaderModel[] = [\n {id: 1, tableName: \"Titel\", props: [\"title\"], isSortable: true},\n {id: 2, tableName: \"Virksomhed\", props: [\"companyName\"], isSortable: true, options: {largeTh: true}},\n {id: 3, tableName: \"Søgefilter\", props: [\"jobPathName\"], isSortable: true},\n {id: 4, tableName: \"Frist\", props: [\"deadlineDate\"], isSortable: true},\n {id: 5, tableName: \"Søgt\", props: [\"submissionDate\"], isSortable: true},\n {id: 6, tableName: \"Oprettet\", props: [\"createdDate\"], isSortable: true},\n {id: 7, tableName: \"Status \", props: [\"jobSearchStatus\"], isSortable: true},\n {id: 8, tableName: \"Dokumenter\", props: [\"documentCount\"], isSortable: true},\n {id: 9, tableName: \"Joblog\", props: [], isSortable: false, options: {mediumTh: true}},\n {id: 10, tableName: \"\", props: [], isSortable: false, options: {smallTh: true}},\n {id: 11, tableName: \"\", props: [], isSortable: false, options: {smallTh: true}},\n];\n\nexport const myPlanJoblogTableNamesEmployeed: ITableHeaderModel[] = [\n {id: 1, tableName: \"Titel\", props: [\"title\"], isSortable: true},\n {id: 2, tableName: \"Virksomhed\", props: [\"companyName\"], isSortable: true, options: {largeTh: true}},\n {id: 3, tableName: \"Søgefilter\", props: [\"jobPathName\"], isSortable: true},\n {id: 4, tableName: \"Frist\", props: [\"deadlineDate\"], isSortable: true},\n {id: 5, tableName: \"\", props: [], isSortable: false, options: {smallTh: true}},\n {id: 6, tableName: \"\", props: [], isSortable: false, options: {smallTh: true}},\n];\n\nexport const initialState: actions.PlanSceneDefaultState = {\n newestMyPlan: {} as MeetingModel,\n allPlans: [] as MeetingModel[],\n shouldShowMyPlanDisclaimer: false,\n isDoneFetchingNewestMyPlan: false,\n saveMyPlanSuccess: false,\n beginAddMyPlan: true,\n interviewWithMoreAuthorities: false,\n planType: -1,\n interviewType: -1,\n interviewContactType: -1,\n participationStatusType: -1,\n tempJobLogList: [] as JobLogEntryModel[],\n earlierJobPaths: [] as JobPathModel[],\n formattedFullPlan: '',\n formattedMyPlanFetchError: false,\n formattedAgreements: '',\n formattedPlanDescription: '',\n interviewParticipants: [],\n isSavingMyPlan: false,\n jobLogScrollTop: 0,\n activeJobLogFilter: JobLogFilter.ALL,\n chosenMyPlanSort: { sortMethod: 'desc', tableHeader: myPlanJoblogTableNames[1] },\n};\n\nconst reducer = (\n state = initialState,\n action: actions.PlanActionTypes\n): actions.PlanSceneDefaultState => {\n switch (action.type) {\n case actions.ADD_MYPLAN_SUCCESS: {\n return {\n ...state,\n newestMyPlan: action.data,\n beginAddMyPlan: false,\n saveMyPlanSuccess: true,\n isSavingMyPlan: false,\n interviewWithMoreAuthorities: false,\n planType: -1,\n interviewType: -1,\n interviewContactType: -1,\n participationStatusType: -1,\n interviewParticipants: [],\n };\n }\n\n case actions.ADD_MYPLAN_ERROR: {\n return {\n ...state,\n beginAddMyPlan: false,\n saveMyPlanSuccess: false,\n isSavingMyPlan: false,\n }\n\n }\n case actions.BEGIN_ADD_MYPLAN: {\n return {\n ...state,\n beginAddMyPlan: true,\n saveMyPlanSuccess: false,\n isSavingMyPlan: true,\n }\n }\n\n case actions.FETCH_NEWEST_MYPLAN_SUCCESS: {\n return {\n ...state,\n newestMyPlan: action.data,\n isDoneFetchingNewestMyPlan: true,\n };\n }\n case actions.GET_ALL_PLANS: {\n return {\n ...state,\n allPlans: action.data,\n }\n }\n case actions.IS_AGREEMENT_DONE: {\n return {\n ...state,\n newestMyPlan: {\n ...state.newestMyPlan,\n myPlan: {\n ...state.newestMyPlan.myPlan,\n textAgreements: state.newestMyPlan.myPlan.textAgreements.map((agreement) =>\n agreement.id === action.agreementID\n ? { ...agreement, done: action.data }\n : agreement\n ),\n }\n }\n }\n }\n\n case actions.SHOULD_SHOW_MYPLAN_DISCLAIMER: {\n return {\n ...state,\n shouldShowMyPlanDisclaimer: action.data,\n }\n }\n\n case actions.IS_DONE_FETCHING_NEWEST_MY_PLAN: {\n return {\n ...state,\n isDoneFetchingNewestMyPlan: action.data,\n }\n }\n\n case actions.IS_MYPLAN_SAVED_SUCCESFULLY: {\n return {\n ...state,\n saveMyPlanSuccess: action.data,\n }\n }\n\n case actions.INTERVIEW_WITH_MORE_AUTHORITIES: {\n return {\n ...state,\n interviewWithMoreAuthorities: action.data,\n }\n }\n\n case actions.PLAN_TYPE_CHOSEN: {\n return {\n ...state,\n planType: action.data,\n }\n }\n\n case actions.INTERVIEW_TYPE_CHOSEN: {\n if(action.data != InterviewTypeIdentifier.JointJobInterviewWithUnemploymentBenefitRecipient)\n {\n return {\n ...state,\n interviewType: action.data,\n participationStatusType: -1,\n }\n } \n else \n {\n return {\n ...state,\n interviewType: action.data,\n }\n }\n }\n\n case actions.INTERVIEW_CONTACT_TYPE_CHOSEN: {\n return {\n ...state,\n interviewContactType: action.data,\n }\n }\n\n case actions.PARTICIPATION_TYPE_CHOSEN: {\n return {\n ...state,\n participationStatusType: action.data,\n }\n }\n\n case actions.SET_TEMP_JOBLOG_LIST: {\n return {\n ...state,\n tempJobLogList: action.data,\n }\n }\n\n case actions.ADD_JOBPATH_TO_JOBLOG: {\n const findIndex = state.tempJobLogList.findIndex(x => x.id === action.jobLogID);\n if (findIndex > -1) {\n const updatedJobLogArray = [\n ...state.tempJobLogList.slice(0, findIndex),\n {\n ...state.tempJobLogList[findIndex],\n jobPathID: action.jobPathID\n },\n ...state.tempJobLogList.slice(findIndex + 1),\n ];\n\n return {\n ...state,\n tempJobLogList: updatedJobLogArray,\n }\n }\n else {\n return state;\n }\n\n }\n\n case actions.COMPARE_AND_SET_JOBLOGS: {\n if (action.jobLogsFromCitizen?.length > 0 && action.jobLogsFromMyPlan?.length > 0)\n {\n let tempJobLogs: JobLogEntryModel[] = [];\n\n tempJobLogs = action.jobLogsFromCitizen.map((joblog, index) => {\n const myPlanJobLogIdx: number = action.jobLogsFromMyPlan.findIndex(j => j?.id === joblog?.id);\n if (myPlanJobLogIdx > -1)\n {\n let tempJobLog: JobLogEntryModel = {\n ...joblog,\n jobPathID: action.jobLogsFromMyPlan[myPlanJobLogIdx]?.jobPathID,\n }\n\n return tempJobLog;\n }\n else \n return joblog;\n });\n\n return {\n ...state,\n tempJobLogList: tempJobLogs,\n }\n }\n else \n return state;\n }\n\n case actions.CLEAR_TEMP_JOBLOG_LIST: {\n return {\n ...state,\n tempJobLogList: [],\n }\n }\n\n case actions.SET_EARLIER_JOBPATHS_FROM_MEETINGS: {\n return {\n ...state,\n earlierJobPaths: action.earlierJobPaths,\n }\n }\n\n case actions.SET_FULLPLAN_FORMATTED_STRING: {\n return {\n ...state,\n formattedFullPlan: action.data,\n }\n }\n\n case actions.SET_PLANDESCRIPTION_FORMATTED_STRING: {\n return {\n ...state,\n formattedPlanDescription: action.data,\n }\n }\n\n case actions.SET_AGREEMENTS_FORMATTED_STRING: {\n return {\n ...state,\n formattedAgreements: action.data,\n }\n }\n\n case actions.CLEAR_FULLPLAN_FORMATTED_STRING: {\n return {\n ...state,\n formattedFullPlan: '',\n }\n }\n\n case actions.CLEAR_PLANDESCRIPTION_FORMATTED_STRING: {\n return {\n ...state,\n formattedPlanDescription: '',\n }\n }\n\n case actions.CLEAR_AGREEMENTS_FORMATTED_STRING: {\n return {\n ...state,\n formattedAgreements: '',\n }\n }\n\n case actions.SET_FULLPLAN_FORMATTED_TEXT_FETCH_ERROR: {\n return {\n ...state,\n formattedMyPlanFetchError: action.data,\n }\n }\n\n case actions.CLEAR_ALL_MYPLAN_DATA: {\n return initialState; \n }\n\n case actions.SET_INTERVIEW_PARTICIPANT_BY_BOOKING: {\n let tempInterviewParticipants: InterviewParticipant[] = [];\n\n if(action.data && action.data.bookingParticipants && action.data.bookingParticipants.length > 0)\n { \n action.data.bookingParticipants.map((participant) => {\n let tempBookingParticipant = new InterviewParticipant(createGuid(), participant.interviewParticipantName, action.data.interviewContactTypeIdentifier, participant.interviewParticipantTypeIdentifier, participant.externalAuthorityParticipantID);\n tempInterviewParticipants = [...tempInterviewParticipants,tempBookingParticipant];\n });\n }\n\n return {\n ...state,\n interviewParticipants: tempInterviewParticipants,\n }\n }\n\n case actions.REMOVE_INTERVIEW_PARTICIPANT: {\n const findIndex = state.interviewParticipants.findIndex(x => x.interviewParticipantIdentifier == action.data.interviewParticipantIdentifier);\n\n if(findIndex > -1)\n {\n const updatedArr = [\n ...state.interviewParticipants.slice(0, findIndex),\n ...state.interviewParticipants.slice(findIndex + 1)\n ];\n\n return {\n ...state,\n interviewParticipants: updatedArr,\n }\n } \n else {\n return state;\n }\n }\n\n case actions.UPDATE_INTERVIEW_PARTICIPANT: {\n const findIndex = state.interviewParticipants.findIndex(x => x.interviewParticipantIdentifier == action.data.interviewParticipantIdentifier);\n\n if(findIndex > -1)\n {\n const updatedArr = [\n ...state.interviewParticipants.slice(0, findIndex),\n action.data,\n ...state.interviewParticipants.slice(findIndex + 1)\n ];\n\n return {\n ...state,\n interviewParticipants: updatedArr,\n }\n } \n else {\n return state;\n }\n }\n\n case actions.SET_INTERVIEW_PARTICIPANT: {\n return {\n ...state,\n interviewParticipants: [...state.interviewParticipants, action.data]\n }\n }\n\n case actions.SET_PINNED_JOBS_IN_NEWEST_MY_PLAN_FROM_JOBPATH: {\n if(state.newestMyPlan && state.newestMyPlan.myPlan && state.newestMyPlan.myPlan.jobPaths && state.newestMyPlan.myPlan.jobPaths.length > 0)\n {\n const index = state.newestMyPlan.myPlan.jobPaths.findIndex(j => j.id == action.jobPathID); \n if(index > -1) \n {\n let tempJobPath = {...state.newestMyPlan.myPlan.jobPaths[index]};\n \n tempJobPath.pinnedJobs = action.data;\n\n return {\n ...state,\n newestMyPlan: {\n ...state.newestMyPlan,\n myPlan: {\n ...state.newestMyPlan.myPlan,\n jobPaths: [...state.newestMyPlan.myPlan.jobPaths.slice(0, index), tempJobPath, ...state.newestMyPlan.myPlan.jobPaths.slice(index + 1)]\n }\n }\n }\n }\n }\n else {\n return state;\n }\n }\n\n case actions.CLEAR_INTERVIEW_PARTICIPANTS: {\n return {\n ...state,\n interviewParticipants: [],\n }\n }\n\n case actions.SET_INTERVIEW_PARTICIPANTS: {\n return {\n ...state,\n interviewParticipants: action.data,\n }\n }\n\n case actions.SET_JOBLOG_SCROLL: {\n return {\n ...state,\n jobLogScrollTop: action.data,\n }\n }\n\n case actions.SET_ACTIVE_JOBLOG_FILTER: {\n return {\n ...state,\n activeJobLogFilter: action.data,\n }\n }\n\n default:\n return state;\n }\n};\n\nexport { reducer as MyPlanMeetingReducer };\n","import { AccountInfo, AuthError } from \"@azure/msal-browser\";\n\nexport const LoginSuccess = 'LoginSuccess';\nexport const LogoutSuccess = 'LogoutSuccess';\nexport const LoginError = 'LoginError';\nexport const LoginFailed = 'LoginFailed';\nexport const Initializing = 'Initializing';\nexport const Initialized = 'Initialized';\nexport const AquiredAccessTokenSuccess = 'AquiredAccessTokenSuccess';\nexport const AcquiredAccessTokenError = 'AcquiredAccessTokenError';\nexport const AcquiredIdTokenSuccess = 'AcquiredIdTokenSuccess';\nexport const AcquiredIdTokenError = 'AcquiredIdTokenError';\nexport const AuthenticatedStateChanged = 'AuthenticatedStateChanged';\n\nexport const IS_AUTHENTICATED = \"IS_AUTHENTICATED\";\n\n\nexport interface AuthDefaultState {\n initializing: boolean;\n initialized: boolean;\n idToken: string | null;\n state : boolean;\n account: AccountInfo | null;\n isAuthenticated: boolean;\n}\n\ninterface LoginSuccess{\n type: typeof LoginSuccess,\n payload: AccountInfo |null\n}\n\ninterface LogoutSuccess {\n type: typeof LogoutSuccess,\n}\n\ninterface LoginError{\n type: typeof LoginError,\n payload: AuthError\n}\n\ninterface LogoutFailed{\n type: typeof LoginFailed,\n}\n\ninterface Initializing {\n type: typeof Initializing,\n}\n\ninterface Initialized {\n type: typeof Initialized,\n}\n\ninterface AquiredAccessTokenSuccess {\n type: typeof AquiredAccessTokenSuccess,\n payload: string\n}\n\ninterface AquiredAccessTokenError {\n type: typeof AcquiredAccessTokenError,\n payload: string\n}\n\ninterface AquiredIdTokenSuccess {\n type: typeof AcquiredIdTokenSuccess,\n payload: string\n}\n\ninterface AquiredIdTokenError {\n type: typeof AcquiredIdTokenError,\n payload: AuthError\n}\n\ninterface AuthendicationAction {\n type: typeof AuthenticatedStateChanged,\n payload: boolean\n}\n\ninterface IsAuthenticated {\n type: typeof IS_AUTHENTICATED;\n data: boolean;\n}\n\nexport type AuthActionType =\n| LoginSuccess\n| LogoutSuccess\n| Initializing\n| Initialized\n| AquiredAccessTokenSuccess\n| AquiredAccessTokenError\n| AquiredIdTokenSuccess\n| AquiredIdTokenError\n| LoginError\n| LogoutFailed\n| AuthendicationAction\n| IsAuthenticated;","export class GeoPoint {\n longitude: number;\n latitude: number;\n\n constructor(\n longitude: number,\n latitude: number,\n ) {\n this.longitude = longitude;\n this.latitude = latitude;\n }\n\n\n}\nexport default GeoPoint;\n","import { Guid } from \"guid-typescript\";\nimport InputModel, { InputDataType } from \"../InputModel\";\nimport { ValueType } from \"../InputModel\";\n\nexport enum InputType {\n radio, dropdown, checkbox\n}\n\nexport class TagInput extends InputModel{\n value: string[] = [];\n options: string[];\n inputType: InputType;\n\n constructor(id: Guid, title: string, options: string[], inputType: InputType, description: string) {\n super(id, title, ValueType.tag, InputDataType.TagInput, description);\n\n this.options = options;\n this.inputType = inputType;\n }\n\n getValue(): string[] {\n return this.value;\n }\n\n setValue(value: string[]): void {\n this.value = value;\n }\n}\n\nexport default TagInput;\n","import QualificationModel from \"../../models/QualificationModel\";\n\nexport const CLEAN_QUERY = 'CLEAN_QUERY';\nexport const START_SEARCH = 'START_SEARCH';\nexport const FINISH_SEARCH = 'FINISH_SEARCH';\nexport const UPDATE_SELECTION = 'UPDATE_SELECTION';\n\n// Clear all Search Data \nexport const CLEAR_ALL_SEARCH_DATA = \"CLEAR_ALL_SEARCH_DATA\";\n\n\ninterface CleanQueryAction{\n type: typeof CLEAN_QUERY;\n}\n\ninterface StartSearchAction{\n type: typeof START_SEARCH;\n loading: boolean;\n value: string;\n}\n\ninterface FinishSearchAction{\n type: typeof FINISH_SEARCH;\n loading: boolean;\n result: QualificationModel[];\n}\n\ninterface UpdateSearchAction{\n type: typeof UPDATE_SELECTION;\n value: string;\n}\n\ninterface ClearAllSearchData {\n type: typeof CLEAR_ALL_SEARCH_DATA;\n}\n\n\n\n export interface SearchDefaultState {\n loading: boolean,\n results: QualificationModel[],\n value: string,\n }\n\nexport type SearchActionTypes = \n| CleanQueryAction\n| StartSearchAction\n| FinishSearchAction\n| UpdateSearchAction\n| ClearAllSearchData;","export enum ApiResponseEnumModel {\n DEFAULT,\n SUCCESS,\n ERROR\n}","export const SHOULD_PRINT = 'SHOULD_PRINT';\nexport const SET_ELEMENT_TO_PRINT = 'SET_ELEMENT_TO_PRINT';\nexport const CLEAR_PRINTED_ELEMENT = 'CLEAR_PRINTED_ELEMENT';\n\n// Clear All Print Data\nexport const CLEAR_ALL_PRINT_DATA = \"CLEAR_ALL_PRINT_DATA\";\n\n\ninterface ShouldPrint {\n type: typeof SHOULD_PRINT;\n data: boolean;\n}\n\ninterface ElementToPrint {\n type: typeof SET_ELEMENT_TO_PRINT;\n data: string;\n}\n\ninterface ClearPrintedElement {\n type: typeof CLEAR_PRINTED_ELEMENT;\n}\n\ninterface ClearAllPrintData {\n type: typeof CLEAR_ALL_PRINT_DATA; \n}\n\nexport interface PrintDefaultState {\n shouldPrint: boolean;\n elementToPrint: string;\n}\n\nexport type PrintActionTypes =\n | ShouldPrint\n | ElementToPrint\n | ClearPrintedElement\n | ClearAllPrintData;\n","export const SET_ERROR = 'SET_ERROR';\n\nexport const RESET_ERROR = 'RESET_ERROR';\n\n// Clear all Errors\nexport const CLEAR_ALL_ERRORS = \"CLEAR_ALL_ERRORS\";\n\ninterface SetError {\n type: typeof SET_ERROR,\n error: string\n}\n\ninterface ErrorReset {\n type: typeof RESET_ERROR;\n error: string;\n}\n\ninterface ClearAllErrors {\n type: typeof CLEAR_ALL_ERRORS; \n}\n\nexport interface ErrorActionsDefaultState {\n error: string[]\n}\n\nexport type ErrorActionTypes = ErrorReset | SetError | ClearAllErrors;\n","import { DraftMeeting } from \"../../models/DraftMeeting\";\n\nexport const SET_DRAFT_PLAN = 'SET_DRAFT_PLAN';\nexport const SET_DRAFT_PLANS = 'SET_DRAFT_PLANS';\nexport const SET_DRAFT_PLAN_INTERVAL_ID = \"SET_DRAFT_PLAN_INTERVAL_ID\";\n\ninterface SetDraftPlan {\n type: typeof SET_DRAFT_PLAN;\n data: DraftMeeting;\n}\n\ninterface SetDraftPlans {\n type: typeof SET_DRAFT_PLANS;\n data: DraftMeeting[];\n}\n\ninterface SetDraftPlanIntervalID {\n type: typeof SET_DRAFT_PLAN_INTERVAL_ID;\n data: NodeJS.Timeout;\n}\n\nexport interface DefaultDraftPlanActionState {\n draftPlans: DraftMeeting[];\n draftPlanIntervalID: NodeJS.Timeout;\n}\n\nexport type DraftPlanActionTypes =\n| SetDraftPlan\n| SetDraftPlans\n| SetDraftPlanIntervalID;","module.exports = __webpack_public_path__ + \"static/media/PinnedJobsFull.2fa982ed.svg\";","module.exports = __webpack_public_path__ + \"static/media/PinnedJobsTransparrent.07d46a88.svg\";","import { GeoPoint } from './GeoPoint';\nimport { Guid } from 'guid-typescript';\nimport { FilterOptionTypesModel } from './FilterOptionsModel';\n\nexport enum SourceType {\n JOBNET = 1,\n JOBORDER = 2\n}\n\nexport class JobModel {\n id: string;\n title: string;\n presentation: string;\n location: GeoPoint\n companyName: string;\n occupationId: string;\n deadline: Date;\n url: string;\n jobPathId: Guid;\n imageId: number;\n sourcetypename: string;\n isPinnedJob?: boolean;\n municipalityCode: number;\n dateCreated: Date;\n isOpenJob: boolean; \n distance: number; \n workPlaceCity: string;\n workPlaceAddress: string;\n workPlacePostalCode: string;\n cvr: number;\n sourceType: SourceType;\n filterOption: FilterOptionTypesModel;\n companyJobId: string;\n isViregoOrder?: boolean;\n\n //used to check whether or not an agreement is handled during the jobmatch session\n confirmedHandled: boolean;\n confirmedHandledDate: Date | null;\n\n\n constructor(\n id: string,\n presentation: string,\n location: GeoPoint,\n title: string,\n companyName: string,\n occupationId: string,\n deadline: Date,\n url: string,\n sourcetypename: string,\n jobPathId: Guid,\n imageId: number,\n isPinnedJob: boolean,\n municipalityCode: number,\n dateCreated: Date,\n isOpenJob: boolean,\n distance: number,\n workPlaceCity: string,\n workPlaceAddress: string,\n workPlacePostalCode: string,\n cvr: number,\n sourceType: SourceType,\n filterOption: FilterOptionTypesModel,\n companyJobId: string,\n\n //used to check whether or not an agreement is handled during the jobmatch session\n confirmedHandled: boolean = false,\n confirmedHandledDate: Date | null = null,\n ) {\n this.id = id;\n this.presentation = presentation;\n this.location = new GeoPoint(location.longitude, location.latitude);\n this.title = title;\n this.companyName = companyName;\n this.occupationId = occupationId;\n this.deadline = deadline;\n this.url = url;\n this.sourcetypename = sourcetypename;\n this.jobPathId = jobPathId;\n this.imageId = imageId;\n this.isPinnedJob = isPinnedJob;\n this.municipalityCode = municipalityCode;\n this.dateCreated = dateCreated;\n this.isOpenJob = isOpenJob;\n this.distance = distance;\n this.workPlaceCity = workPlaceCity;\n this.workPlaceAddress = workPlaceAddress;\n this.workPlacePostalCode = workPlacePostalCode;\n this.cvr = cvr;\n this.sourceType = sourceType;\n this.filterOption = filterOption;\n this.companyJobId = companyJobId;\n\n //used to check whether or not an agreement is handled during the jobmatch session\n this.confirmedHandled = confirmedHandled;\n this.confirmedHandledDate = confirmedHandledDate;\n }\n\n}\n\nexport function parseJobFromApiToList(apiOutPut: JobModel[]): JobModel[] {\n let jobList: JobModel[];\n jobList = apiOutPut;\n\n return jobList;\n}\n\nexport default JobModel;\n","import { SearchJobActionDefaultState, SearchJobActionTypes } from \"./types\";\nimport * as actions from \"./types\";\nimport { RegionModel } from \"../../models/RegionModel\";\nimport { equals, isEmptyOrUndefined } from \"../../helpers/TypeChecks\";\nimport { QueryFilter } from \"../../models/QueryFilter\";\nimport OccupationOpportunityModel from \"../../models/OccupationOpportunityModel\";\nimport { SearchListModel } from \"../../models/SearchListModel\";\nimport { MunicipalityModel } from \"../../models/MunicipalityModel\";\nimport { SourceType } from \"../../models/JobModel\";\n\nexport const JobReducerDefaultState: SearchJobActionDefaultState = {\n filterIdExpandList: [] as number[],\n regions: [],\n foreignCountries: setForeignCountriesDefaultState(),\n employmentDuration: setEmploymentDuration(),\n workTimeArray: setWorkTimeDefaultState(),\n transportTime: setTransportTimeDefaultState(),\n chosenTransportTime: '',\n filterSortDropdown: setFilterSortDropdownDefaultState(),\n chosenSortFilter: setChosenFilterDefaultState(),\n queryFilters: setQueryFilterDefaultState(),\n isDoneQueryUpdating: false,\n distance: setDistanceDefaultState(),\n jobTypes: [],\n addedInitialFilters: false,\n filterOption: 'jobs',\n fadeJobsIn: false,\n removedIndexInJobList: 0,\n hoveredId: \"\",\n tempOccupationList: [] as OccupationOpportunityModel[],\n occupationsToDisplay: [] as SearchListModel[],\n tempMunicipalityList: [] as MunicipalityModel[],\n municipalitiesToDisplay: [] as SearchListModel[],\n industryDisplayList: [] as SearchListModel[],\n tempIndustries: [] as SearchListModel[],\n companyOccupations: [] as OccupationOpportunityModel[],\n isDoneFetchingCompanyOccupations: false as boolean,\n companyFetchError: false as boolean,\n addedOrPinnedJob: false,\n jobNetJobType: true,\n jobOrderJobType: true,\n dsaJobFilter: { Profession: new SearchListModel('', ''), WorkAreas: [], AreaOfSpecialisation: [], Occupations: [] },\n tempDSAJobFilter: { Profession: new SearchListModel('', ''), WorkAreas: [], AreaOfSpecialisation: [], Occupations: [] },\n windowInnerWidth: window.innerWidth,\n toggleDsaOccupations: true,\n toggleDsaAcademicJobs: false,\n}\n\nconst reducer = (\n state = JobReducerDefaultState,\n action: SearchJobActionTypes\n): SearchJobActionDefaultState => {\n switch (action.type) {\n case actions.UPDATE_REGION: {\n const findIndex = state.regions.findIndex(x => x === action.data);\n if (action.data.checked) {\n action.data.checked = false;\n } else {\n action.data.checked = true;\n }\n\n const updatedArr: RegionModel[] = [\n ...state.regions.slice(0, findIndex),\n action.data,\n ...state.regions.slice(findIndex + 1),\n ];\n\n return {\n ...state,\n regions: updatedArr,\n }\n }\n\n case actions.UPDATE_EMPLOYMENT_DURATION: {\n const findIndex = state.employmentDuration.findIndex(employment => employment.title === action.data.title);\n if(findIndex > -1)\n {\n const updatedArr = [\n ...state.employmentDuration.slice(0, findIndex),\n action.data,\n ...state.employmentDuration.slice(findIndex + 1),\n ];\n\n return {\n ...state,\n employmentDuration: updatedArr,\n }\n } else {\n return state;\n }\n }\n\n case actions.UPDATE_FOREIGN_COUNTRY: {\n const findIndex = state.foreignCountries.findIndex(x => x === action.data);\n if (action.data[1]) {\n action.data[1] = false;\n } else {\n action.data[1] = true;\n }\n\n const updatedArr: [string, boolean][] = [\n ...state.foreignCountries.slice(0, findIndex),\n action.data,\n ...state.foreignCountries.slice(findIndex + 1),\n ];\n\n return {\n ...state,\n foreignCountries: updatedArr,\n }\n }\n\n case actions.UPDATE_WORKTIME_ARRAY: {\n return {\n ...state,\n workTimeArray: action.data,\n }\n }\n\n case actions.UPDATE_SINGLE_WORKTIME: {\n const updatedWorkTimeArray: number[] = [\n ...state.workTimeArray.slice(0, action.index),\n action.data,\n ...state.workTimeArray.slice(action.index + 1),\n ];\n\n return {\n ...state,\n workTimeArray: updatedWorkTimeArray,\n }\n }\n\n case actions.UPDATE_TRANSPORT_TIME: {\n return {\n ...state,\n chosenTransportTime: action.data,\n }\n }\n\n case actions.UPDATE_FILTER_SORT_DROPDOWN: {\n return {\n ...state,\n chosenSortFilter: action.data,\n }\n }\n\n case actions.ADD_JOBFILTER_ID_ELEMENT_TO_EXPAND: {\n return {\n ...state,\n filterIdExpandList: [...state.filterIdExpandList, action.data],\n };\n }\n case actions.REMOVE_JOBFILTER_ID_ELEMENT_TO_EXPAND: {\n const idToBeRemoved = state.filterIdExpandList.findIndex(\n (x) => x === action.data\n );\n\n if (idToBeRemoved > -1) {\n const updatedExpandedIdList = [\n ...state.filterIdExpandList.slice(0, idToBeRemoved),\n ...state.filterIdExpandList.slice(idToBeRemoved + 1),\n ];\n return {\n ...state,\n filterIdExpandList: updatedExpandedIdList,\n };\n } else {\n return {\n ...state,\n };\n }\n }\n case actions.FETCH_ALL_REGIONS: {\n return {\n ...state,\n regions: action.data\n }\n }\n case actions.UPDATE_QUERYFILTERS: {\n let currentQueryFilters = [...state.queryFilters];\n\n let removedOldValueFromQueryFilters = currentQueryFilters.filter(qf => !qf.type.includes(action.filterType))\n let newQueryFilters = action.data;\n\n for (let i = 0; i < newQueryFilters.length; i++) {\n removedOldValueFromQueryFilters.push(newQueryFilters[i]);\n }\n\n return {\n ...state,\n queryFilters: removedOldValueFromQueryFilters,\n isDoneQueryUpdating: true,\n }\n }\n case actions.SET_IS_DONE_QUERY_UPDATING: {\n return {\n ...state,\n isDoneQueryUpdating: action.data,\n }\n }\n case actions.UPDATE_DISTANCE: {\n return {\n ...state,\n distance: action.data,\n }\n }\n case actions.FETCH_ALL_JOBTYPES: {\n return {\n ...state,\n jobTypes: action.data,\n }\n }\n case actions.ADD_QUERY_FILTER: {\n return {\n ...state,\n queryFilters: [...state.queryFilters, action.data],\n }\n }\n case actions.TOGGLE_INTIAL_FILTERS: {\n return {\n ...state,\n addedInitialFilters: action.data,\n }\n }\n case actions.TOGGLE_QUERYFILTER: {\n let updatedQueryFilters = [...state.queryFilters];\n\n if (action.shouldAdd)\n {\n updatedQueryFilters = [...updatedQueryFilters, action.data];\n }\n else if (equals(action.data.type, \"status\")) {\n let indexToRemove = updatedQueryFilters.findIndex(x => equals(x.type, action.data.type));\n if(indexToRemove > -1)\n updatedQueryFilters = [...updatedQueryFilters.slice(0, indexToRemove), action.data, ...updatedQueryFilters.slice(indexToRemove + 1)];\n\n }\n else if (equals(action.data.type, \"multisearch\")) {\n let qf = updatedQueryFilters.find(x => equals(x.type, \"multisearch\"));\n\n if (qf)\n qf.value = action.data.value;\n else\n updatedQueryFilters.push(new QueryFilter(\"multisearch\", action.data.value));\n }\n else {\n for (let i = 0; i < updatedQueryFilters.length; i++) {\n let qf = updatedQueryFilters[i];\n if ((qf.type.includes(action.data.type) && qf.value == action.data.value))\n updatedQueryFilters.splice(i, 1);\n }\n }\n\n let newJobTypes = [...state.jobTypes];\n if (action.data.type.includes(\"jobtypeid\")) {\n for (let i = 0; i < newJobTypes.length; i++) {\n if (equals(newJobTypes[i].id.toString(), action.data.value.toString())) {\n newJobTypes[i].checked = action.shouldAdd;\n break;\n }\n\n }\n }\n return {\n ...state,\n queryFilters: updatedQueryFilters,\n jobTypes: newJobTypes,\n isDoneQueryUpdating: true,\n }\n }\n\n case actions.UPDATE_QUERY_FILTER: {\n const index: number = state.queryFilters?.findIndex(q => q?.type === action.data?.type);\n\n if (index > -1)\n {\n return {\n ...state,\n queryFilters: [\n ...state.queryFilters.slice(0, index),\n action.data,\n ...state.queryFilters.slice(index + 1),\n ]\n }\n }\n else \n return state;\n }\n\n case actions.SET_FILTER_OPTION_TYPE: {\n return {\n ...state,\n filterOption: action.data,\n }\n }\n\n case actions.SHOULD_FADE_JOBS_IN: {\n return {\n ...state,\n fadeJobsIn: action.data,\n }\n }\n\n case actions.INDEX_OF_JOB_IN_LIST_REMOVED: {\n return {\n ...state,\n removedIndexInJobList: action.index,\n }\n }\n\n case actions.ADD_OCCUPATION_TO_TEMP_LIST: {\n const findOccupation = state.tempOccupationList.find(x => x.id === action.data.conceptUriDa);\n if (findOccupation === undefined) {\n return {\n ...state,\n tempOccupationList: [...state.tempOccupationList, action.data],\n }\n }\n else {\n return state;\n }\n }\n\n case actions.REMOVE_OCCUPATION_FROM_TEMP_LIST: {\n const findIndex = state.tempOccupationList.findIndex(x => x.id === action.data.id);\n if (findIndex > -1) {\n const updatedArr = [\n ...state.tempOccupationList.slice(0, findIndex),\n ...state.tempOccupationList.slice(findIndex + 1),\n ];\n\n return {\n ...state,\n tempOccupationList: updatedArr,\n }\n } else {\n return state;\n }\n }\n\n case actions.ADD_MUNICIPALITY_TO_TEMP_LIST: {\n const findMunicipality = state.tempMunicipalityList.find(x => x.id === action.data.id);\n if (findMunicipality === undefined) {\n return {\n ...state,\n tempMunicipalityList: [...state.tempMunicipalityList, action.data],\n }\n }\n else {\n return state;\n }\n }\n\n case actions.REMOVE_MUNICIPALITY_FROM_TEMP_LIST: {\n const findIndex = state.tempMunicipalityList.findIndex(x => x.id === action.data.id);\n if (findIndex > -1) {\n const updatedArr = [\n ...state.tempMunicipalityList.slice(0, findIndex),\n ...state.tempMunicipalityList.slice(findIndex + 1),\n ];\n\n return {\n ...state,\n tempMunicipalityList: updatedArr,\n }\n } else {\n return state;\n }\n }\n\n case actions.RESET_ALL_OCCUPATIONS: {\n let queryFilters = [...state.queryFilters];\n let updatedQueryFilters = queryFilters.filter(qf => !equals(qf.type, \"occupationid\"));\n\n return {\n ...state,\n tempOccupationList: [],\n occupationsToDisplay: [],\n queryFilters: updatedQueryFilters,\n isDoneQueryUpdating: true,\n }\n }\n\n case actions.RESET_ALL_MUNICIPALITIES: {\n let queryFilters = [...state.queryFilters];\n let updatedQueryFilters = queryFilters.filter(qf => !equals(qf.type, \"municipalityid\"));\n return {\n ...state,\n tempMunicipalityList: [],\n municipalitiesToDisplay: [],\n queryFilters: updatedQueryFilters,\n isDoneQueryUpdating: true,\n }\n }\n\n case actions.REMOVE_ALL_INDUSTRIES_FROM_TEMPLIST: {\n return {\n ...state,\n tempIndustries: [],\n industryDisplayList: [],\n isDoneQueryUpdating: true,\n }\n }\n\n case actions.SAVE_TEMP_OCCUPATIONS_TO_OCCUPATIONS_TO_DISPLAY_LIST: {\n let updatedQueryFilters = [...state.queryFilters];\n for (let i = 0; i < action.data.length; i++) {\n let occupation = action.data[i];\n let notExists = isEmptyOrUndefined(updatedQueryFilters.find(oc => equals(oc.value, occupation?.id)))\n if (occupation.checked && notExists) {\n let queryFilter: QueryFilter = new QueryFilter(\"occupationid\", action.data[i]?.id?.toString());\n updatedQueryFilters.push(queryFilter)\n }\n }\n\n return {\n ...state,\n occupationsToDisplay: action.data,\n queryFilters: updatedQueryFilters,\n isDoneQueryUpdating: true,\n }\n }\n\n case actions.SAVE_TEMP_MUNICIPALITIES_TO_MUNICIPALITIES_TO_DISPLAY_LIST: {\n let updatedQueryFilters = [...state.queryFilters];\n for (let i = 0; i < action.data.length; i++) {\n let municipality = action.data[i];\n let notExists = isEmptyOrUndefined(updatedQueryFilters.find(oc => equals(oc.value, municipality?.id?.toString())))\n if (municipality.checked && notExists) {\n let queryFilter: QueryFilter = new QueryFilter(\"municipalityid\", action.data[i]?.id?.toString());\n updatedQueryFilters.push(queryFilter)\n }\n }\n\n return {\n ...state,\n municipalitiesToDisplay: action.data,\n queryFilters: updatedQueryFilters,\n isDoneQueryUpdating: true,\n }\n }\n\n case actions.ADD_JOBID_ON_HOVER: {\n return {\n ...state,\n hoveredId: action.data,\n }\n }\n\n case actions.TRIGGER_CHECKED_ON_OCCUPATION: {\n let updatedQueryFilters = [...state.queryFilters];\n let isToAdd = true;\n\n\n if (!action.isChecked) {\n for (let i = 0; i < updatedQueryFilters.length; i++) {\n let qf = updatedQueryFilters[i];\n\n if (equals(qf.value, action.data?.id?.toString()) && !action.isChecked) {\n updatedQueryFilters.splice(i, 1);\n }\n }\n\n }\n else if (action.isChecked) {\n let queryFilter: QueryFilter = new QueryFilter(\"occupationid\", action.data?.id?.toString());\n updatedQueryFilters.push(queryFilter)\n }\n\n\n\n return {\n ...state,\n occupationsToDisplay: state.occupationsToDisplay.map(occupation =>\n occupation.id === action.data?.id\n ? { ...occupation, checked: action.isChecked }\n : occupation\n ),\n queryFilters: updatedQueryFilters,\n isDoneQueryUpdating: true,\n }\n }\n\n case actions.TRIGGER_CHECKED_ON_MUNICIPALITY: {\n let updatedQueryFilters = [...state.queryFilters];\n let isToAdd = true;\n\n\n if (!action.isChecked) {\n for (let i = 0; i < updatedQueryFilters.length; i++) {\n let qf = updatedQueryFilters[i];\n\n if (equals(qf.value, action.data.id.toString()) && !action.isChecked) {\n updatedQueryFilters.splice(i, 1);\n }\n }\n\n }\n else if (action.isChecked) {\n let queryFilter: QueryFilter = new QueryFilter(\"municipalityid\", action.data?.id?.toString());\n updatedQueryFilters.push(queryFilter)\n }\n\n\n\n return {\n ...state,\n municipalitiesToDisplay: state.municipalitiesToDisplay.map(municipality =>\n municipality.id === action.data?.id\n ? { ...municipality, checked: action.isChecked }\n : municipality\n ),\n queryFilters: updatedQueryFilters,\n isDoneQueryUpdating: true,\n }\n }\n case actions.TOGGLE_CHOSEN_INDUSTRY: {\n\n return {\n ...state,\n industryDisplayList: state.industryDisplayList.map(industry =>\n industry.id === action.data?.id\n ? { ...industry, checked: action.checked }\n : industry\n ),\n isDoneQueryUpdating: true,\n }\n }\n\n case actions.SAVE_INDUSTRIES_FROM_TEMP_TO_DISPLAY_LIST: {\n let tempIndustries = [...state.tempIndustries];\n let newIndustries = action.data;\n tempIndustries = newIndustries;\n return {\n ...state,\n industryDisplayList: tempIndustries,\n isDoneQueryUpdating: true,\n }\n }\n\n case actions.REMOVE_INDUSTRY_FROM_TEMP_LIST: {\n let temp = [...state.tempIndustries];\n let industry = action.data;\n let index = temp.findIndex(i => i.id == industry.id);\n if (index > -1)\n temp.splice(index, 1);\n\n return {\n ...state,\n tempIndustries: temp,\n isDoneQueryUpdating: true,\n }\n }\n\n case actions.ADD_INDUSTRY_TO_TEMP_LIST: {\n let temp = [...state.tempIndustries];\n temp.push(action.data);\n return {\n ...state,\n tempIndustries: temp,\n }\n }\n\n case actions.SET_COMPANY_OCCUPATIONS: {\n return {\n ...state,\n companyOccupations: action.data,\n }\n }\n\n case actions.CLEAR_COMPANY_OCCUPATIONS: {\n // setting is done fetching company occupations to false here, to reset the boolean to false when we remove the data from company occupations.\n return {\n ...state,\n companyOccupations: [],\n isDoneFetchingCompanyOccupations: false,\n companyFetchError: false,\n }\n }\n\n case actions.SET_IS_DONE_FETCHING_COMPANY_OCCUPATIONS: {\n return {\n ...state,\n isDoneFetchingCompanyOccupations: action.data,\n }\n }\n\n case actions.FETCH_COMPANY_OCCUPATIONS_ERROR: {\n return {\n ...state,\n companyFetchError: action.data,\n }\n } \n\n case actions.SET_ADDED_OR_PINNED_JOB: {\n return {\n ...state,\n addedOrPinnedJob: action.data,\n }\n }\n\n case actions.SET_JOBNET_JOBTYPE: {\n return {\n ...state,\n jobNetJobType: action.data,\n }\n }\n\n case actions.SET_JOBORDER_JOBTYPE: {\n return {\n ...state,\n jobOrderJobType: action.data,\n }\n }\n\n case actions.REMOVE_QUERYFILTER: {\n const findIndex = state.queryFilters.findIndex(x => x.type == action.data.type && x.value == action.data.value);\n if(findIndex > -1)\n {\n const updatedArr = [\n ...state.queryFilters.slice(0, findIndex),\n ...state.queryFilters.slice(findIndex + 1)\n ];\n\n return {\n ...state,\n queryFilters: updatedArr,\n }\n } else {\n return state;\n }\n }\n\n case actions.CLEAR_ALL_SEARCH_JOB_DATA: {\n return JobReducerDefaultState;\n }\n\n case actions.RESET_ALL_FILTERS: {\n return {\n ...state,\n distance: setDistanceDefaultState(),\n queryFilters: setQueryFilterDefaultState(),\n regions: setRegionsDefaultState(state.regions),\n foreignCountries: setForeignCountriesDefaultState(),\n workTimeArray: setWorkTimeDefaultState(),\n transportTime: setTransportTimeDefaultState(),\n chosenTransportTime: '',\n filterSortDropdown: setFilterSortDropdownDefaultState(),\n chosenSortFilter: setChosenFilterDefaultState(),\n industryDisplayList: [] as SearchListModel[],\n tempIndustries: [] as SearchListModel[],\n municipalitiesToDisplay: [] as SearchListModel[],\n tempMunicipalityList: [] as MunicipalityModel[],\n occupationsToDisplay: [] as SearchListModel[],\n tempOccupationList: [] as OccupationOpportunityModel[],\n addedInitialFilters: false,\n employmentDuration: setEmploymentDuration(),\n addedOrPinnedJob: false,\n dsaJobFilter: { Profession: new SearchListModel('', ''), WorkAreas: [], AreaOfSpecialisation: [], Occupations: [] },\n tempDSAJobFilter: { Profession: new SearchListModel('', ''), WorkAreas: [], AreaOfSpecialisation: [], Occupations: [] },\n filterOption: \"jobs\",\n }\n }\n\n case actions.SET_DSA_JOB_FILTER: {\n return {\n ...state,\n dsaJobFilter: action.data,\n }\n }\n\n case actions.SET_TEMP_DSA_JOB_FILTER: {\n return {\n ...state,\n tempDSAJobFilter: action.data,\n }\n }\n\n case actions.SET_WINDOW_INNERWIDTH: {\n return {\n ...state,\n windowInnerWidth: action.data,\n }\n }\n\n case actions.TOGGLE_DSA_OCCUPATIONS: {\n return {\n ...state,\n toggleDsaOccupations: action.data,\n }\n }\n\n case actions.TOGGLE_DSA_ACADEMIC_JOBS: {\n return {\n ...state,\n toggleDsaAcademicJobs: action.data,\n }\n }\n\n default:\n return state;\n }\n}\n\nfunction setRegionsDefaultState(regions: RegionModel[]): RegionModel[] {\n let tempRegions: RegionModel[] = [];\n if(regions && regions.length > 0)\n {\n tempRegions = regions.map((region: RegionModel) => {region.checked = false; return region;});\n }\n return tempRegions;\n}\n\nfunction setForeignCountriesDefaultState(): [string, boolean][] {\n return [['Grønland', false], ['Norge', false], ['Sverige', false]];\n}\n\nfunction setEmploymentDuration(): {title: string, checked: boolean}[] {\n const permanentEmployment: {title: string, checked: boolean} = {title: 'Fastansættelse', checked: false};\n const temporaryEmployment: {title: string, checked: boolean} = {title: 'Tidsbegrænset', checked: false}; \n let employmentDurationArr: {title: string, checked: boolean}[] = [];\n employmentDurationArr.push(permanentEmployment); \n employmentDurationArr.push(temporaryEmployment);\n\n return employmentDurationArr;\n}\n\nfunction setWorkTimeDefaultState(): number[] {\n return [1, 40];\n}\n\nfunction setTransportTimeDefaultState(): string[] {\n return ['90 minutter', '60 minutter', '30 minutter', '15 minutter'];\n}\n\nfunction setFilterSortDropdownDefaultState(): string[] {\n return ['Afstand', 'Søgefilter', 'Deadline', 'Oprettelsesdato', 'Stillingsbetegnelse'];\n}\n\nfunction setChosenFilterDefaultState(): string {\n return 'Afstand';\n}\n\nfunction setQueryFilterDefaultState(): QueryFilter[] {\n return [new QueryFilter(\"status\", \"true\"), new QueryFilter(\"sourcetypeid\", SourceType.JOBNET.toString()), new QueryFilter(\"sourcetypeid\", SourceType.JOBORDER.toString())];\n}\n\nfunction setDistanceDefaultState(): number {\n return 500;\n}\n\nexport { reducer as SearchJobReducer };","module.exports = __webpack_public_path__ + \"static/media/times-close-icon.2a5f7669.svg\";","import './scss/styles.scss';\nimport './index.scss';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport * as serviceWorker from './serviceWorker';\nimport { Provider } from 'react-redux';\nimport configureStore from './configureStore';\nimport CacheBuster from 'react-cache-buster';\nimport { version } from '../package.json';\nimport Loader from './components/Loader';\nimport { MsalProvider } from \"@azure/msal-react\";\nimport { PublicClientApplication } from \"@azure/msal-browser\";\nimport { MSAL_CONFIG } from './AzureAuth/authConfig';\nimport { AuthWrapper } from './AzureAuth/AuthWrapper';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from './store/AppActions';\n\nconst initialState: any = {};\nexport const store = configureStore(initialState);\nexport type AppDispatch = ThunkDispatch;\n\nconst isProduction = process?.env?.NODE_ENV === 'production';\n\nconst pca = new PublicClientApplication(MSAL_CONFIG);\n\nReactDOM.render(\n \n \n \n }>\n \n \n \n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","import { Guid } from \"guid-typescript\";\nimport CodeListEntryModel from \"./CodeListEntryModel\";\n\nexport class InterviewParticipant {\n interviewParticipantIdentifier: Guid;\n interviewParticipantName: string;\n interviewParticipantContactTypeIdentifier: CodeListEntryModel;\n interviewParticipantTypeIdentifier: CodeListEntryModel;\n externalAuthorityParticipantId: string;\n\n\n constructor(interviewParticipantIdentifier: Guid, interviewParticipantName: string, interviewParticipantContactTypeIdentifier: CodeListEntryModel,\n interviewParticipantTypeIdentifier: CodeListEntryModel, externalAuthorityParticipantId: string) {\n this.interviewParticipantIdentifier = interviewParticipantIdentifier;\n this.interviewParticipantName = interviewParticipantName;\n this.interviewParticipantContactTypeIdentifier = interviewParticipantContactTypeIdentifier;\n this.interviewParticipantTypeIdentifier = interviewParticipantTypeIdentifier;\n this.externalAuthorityParticipantId = externalAuthorityParticipantId;\n }\n}","export const SET_LOADER = \"SET_LOADER\";\n\ninterface SetDisplayLoader {\n type: typeof SET_LOADER;\n shouldLoad: boolean;\n loadText: string;\n lowerBackDropOpacity?: boolean\n}\n\nexport interface LoaderActionDefaultState {\n displayingLoader: boolean;\n loadText: string;\n lowerBackDropOpacity: boolean;\n}\n\nexport type LoaderActionTypes = \n| SetDisplayLoader;","module.exports = __webpack_public_path__ + \"static/media/company-jobpath.347eaed1.svg\";","module.exports = __webpack_public_path__ + \"static/media/green-arrow-upwards.f16fbcaf.svg\";","module.exports = __webpack_public_path__ + \"static/media/add-plus-icon.f1354d11.svg\";","module.exports = __webpack_public_path__ + \"static/media/Logo_Jobportal_1.f74935d7.svg\";","module.exports = __webpack_public_path__ + \"static/media/green-circle-checkmark.e2c7f2d4.svg\";","module.exports = __webpack_public_path__ + \"static/media/addTagIcon.8fb926b0.svg\";","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then((registration) => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch((error) => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' },\n })\n .then((response) => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null &&\n contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then((registration) => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then((registration) => {\n registration.unregister();\n })\n .catch((error) => {\n console.error(error.message);\n });\n }\n}\n","module.exports = __webpack_public_path__ + \"static/media/paper-clip.7e55cf3c.svg\";","module.exports = __webpack_public_path__ + \"static/media/Logo_Jobmatch_small.89fd8047.svg\";","module.exports = __webpack_public_path__ + \"static/media/question-mark-circle-icon.6d7cf17d.svg\";","module.exports = __webpack_public_path__ + \"static/media/megaphone.47b28d18.svg\";","module.exports = __webpack_public_path__ + \"static/media/filter-icon.bfc29aec.svg\";","module.exports = __webpack_public_path__ + \"static/media/dsa-jobportal-logo.cb5e3f53.png\";","module.exports = __webpack_public_path__ + \"static/media/dsa-blob.ec3a711a.svg\";","module.exports = __webpack_public_path__ + \"static/media/arrow-right.bb320086.svg\";","module.exports = __webpack_public_path__ + \"static/media/dsa-kompas-logo.e7f1b73d.svg\";","module.exports = __webpack_public_path__ + \"static/media/dsa-last-step-image-2.68e6a5d6.png\";","module.exports = __webpack_public_path__ + \"static/media/onboarding-step-one.e91d27b1.mp4\";","module.exports = __webpack_public_path__ + \"static/media/onboarding-step-two.4cec01ed.mp4\";","module.exports = __webpack_public_path__ + \"static/media/onboarding-step-three.21172829.mp4\";","module.exports = __webpack_public_path__ + \"static/media/onboarding-step-four.0b9251a5.mp4\";","module.exports = __webpack_public_path__ + \"static/media/onboarding-step-five.32927c2a.mp4\";","module.exports = __webpack_public_path__ + \"static/media/onboarding-step-six.b5a6577f.mp4\";","module.exports = __webpack_public_path__ + \"static/media/onboarding-intro.06b41122.mp4\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/dsa-app-content.6efe66df.png\";","export enum JobmatchRoute {\n ONBOARDING = '/onboarding',\n\n JOBPATH = '/jobpath',\n\n SEARCHJOB = '/',\n\n SEARCHJOB_BY_ID = '/job/:jobid',\n\n MYPLAN = '/minliste',\n\n MAP = '/map',\n\n LOADER = '/loader'\n}","import { AgreementActionTypes } from './types';\nimport * as actions from './types';\nimport { Dispatch } from 'react';\nimport { AppState } from '..';\nimport TextAgreementModel from '../../models/Agreement/TextAgreementModel';\nimport QualificationAgreementModel from '../../models/Agreement/QualificationAgreementModel';\nimport JobPathModel from '../../models/JobPathModel';\n\nexport const clearAllAgreementData = (): AgreementActionTypes => ({\n type: actions.CLEAR_ALL_AGREEMENT_DATA\n});\n\nexport const clearDraftAgreementTemp = (): AgreementActionTypes => ({\n type: actions.CLEAR_DRAFT_AGREEMENT_TEMP,\n});\n\nexport const setDraftAgreeement = (agreement: TextAgreementModel): AgreementActionTypes => ({\n type: actions.SET_DRAFT_AGREEMENT,\n data: agreement,\n});\n\nexport const updateDraftAgreeement = (value: string): AgreementActionTypes => ({\n type: actions.UPDATE_DRAFT_AGREEMENT_TEXT,\n data: value,\n});\n\nexport const addQualificationAgreement = (qualification: QualificationAgreementModel): AgreementActionTypes => ({\n type: actions.ADD_QUALIFICATION_AGREEMENT,\n data: qualification,\n});\n\nexport const removeQualifcationAgreement = (qualificationId: number): AgreementActionTypes => ({\n type: actions.REMOVE_QUALIFICATION_AGREEMENT,\n qualificationId: qualificationId,\n});\n\nexport const removeNewestMyPlanQualifcationAgreement = (qualificationId: number): AgreementActionTypes => ({\n type: actions.REMOVE_NEWEST_MYPLAN_QUALIFICATION_AGREEMENT,\n qualificationId: qualificationId,\n});\n\nexport const updateQualifcationAgreement = (index: number, qualificationAgreement: QualificationAgreementModel): AgreementActionTypes => ({\n type: actions.UPDATE_QUALIFICATION_AGREEMENT,\n index: index,\n qualificationAgreement: qualificationAgreement,\n});\n\nexport const clearQualificationAgreements = (): AgreementActionTypes => ({\n type: actions.CLEAR_QUALIFICATION_AGREEMENTS,\n});\n\nexport const clearTextAgreements = (): AgreementActionTypes => ({\n type: actions.CLEAR_TEXT_AGREEMENTS,\n});\n\nexport const setSavedRemark = (remark: string): AgreementActionTypes => ({\n type: actions.SET_SAVED_REMARK,\n data: remark,\n});\n\nexport const deleteRemarks = (): AgreementActionTypes => ({\n type: actions.DELETE_REMARKS,\n});\n\nexport const setNewestMyPlanQualficationAgreements = (qualificationAgreements: QualificationAgreementModel[]): AgreementActionTypes => ({\n type: actions.SET_NEWEST_MY_PLAN_QUALIFICATION_AGREEMENTS,\n data: qualificationAgreements,\n});\n\nexport const isTempAgreementInTempArr = (\n agreementCategory: string,\n agreementPageCategory: string\n): AgreementActionTypes => ({\n type: actions.IS_AGREEMENT_IN_TEMP_ARRAY,\n agreementCategory: agreementCategory,\n agreementPageCategory: agreementPageCategory,\n});\n\nexport const addAgreementIdElement = (\n agreementId: number\n): AgreementActionTypes => ({\n type: actions.ADD_AGREEMENT_ID_ELEMENT_TO_EXPAND,\n data: agreementId,\n});\n\nexport const removeAgreementIdElement = (\n agreementId: number\n): AgreementActionTypes => ({\n type: actions.REMOVE_AGREEMENT_ID_ELEMENT_TO_EXPAND,\n data: agreementId,\n});\n\nexport const removeDataFromAgreement = (\n agreement: TextAgreementModel\n): AgreementActionTypes => ({\n type: actions.REMOVE_DATA_FROM_AGREEMENT,\n data: agreement,\n});\n\nexport function addAgreement(\n newAgreement: TextAgreementModel,\n isTemp: boolean\n): AgreementActionTypes {\n return {\n type: actions.ADD_AGREEMENT,\n data: newAgreement,\n isTemp: isTemp,\n };\n}\n\nexport function deleteAgreement(\n agreement: TextAgreementModel,\n isTemp: boolean\n): AgreementActionTypes {\n return {\n type: actions.DELETE_AGREEMENT,\n data: agreement,\n isTemp: isTemp,\n };\n}\n\nexport function updateAgreement(\n agreement: TextAgreementModel,\n isTemp: boolean\n): AgreementActionTypes {\n return {\n type: actions.UPDATE_AGREEMENT,\n data: agreement,\n isTemp: isTemp,\n };\n}\n\nexport const setNewestMyPlanTextAgreements = (textAgreements: TextAgreementModel[]): AgreementActionTypes => ({\n type: actions.SET_NEWEST_MY_PLAN_TEXT_AGREEMENTS,\n data: textAgreements,\n});\n\nexport const setQualificationAgreements = (qualificationAgreements: QualificationAgreementModel[]): AgreementActionTypes => ({\n type: actions.SET_QUALIFICATION_AGREEMENTS,\n data: qualificationAgreements,\n});\n\nexport const setAllQualificationAgreementsToDone = (): AgreementActionTypes => ({\n type: actions.SET_ALL_QUALIFICATIONSAGREEMENTS_TO_DONE\n});\n\nexport const setAllQualificationAgreementsToNotDone = (): AgreementActionTypes => ({\n type: actions.SET_ALL_QUALIFICATIONSAGREEMENTS_TO_NOT_DONE\n});\n\nexport const setQualificationAgreementsAddedFromNewestMyPlan = (qualificationAgreements: QualificationAgreementModel[]): AgreementActionTypes => ({\n type: actions.SET_QUALIFICATION_AGREEMENTS_ADDED_FROM_NEWEST_MYPLAN,\n data: qualificationAgreements,\n});\n\nexport const clearQualificationAgreementsAddedFromNewestMyPlan = (): AgreementActionTypes => ({\n type: actions.CLEAR_QUALIFICATION_AGREEMENTS_ADDED_FROM_NEWEST_MYPLAN,\n});\n\n\nexport const startUpdateAgreement = (\n agreement: TextAgreementModel,\n isTemp: boolean\n) => {\n return (\n dispatch: Dispatch,\n getState: () => AppState\n ) => {\n dispatch(updateAgreement(agreement, isTemp));\n };\n};\n\nexport const startAddAgreement = (\n agreement: TextAgreementModel,\n isTemp: boolean\n) => {\n return (\n dispatch: Dispatch,\n getState: () => AppState\n ) => {\n if (!isTemp) {\n dispatch(addAgreement(agreement, isTemp));\n dispatch(removeDataFromAgreement(agreement));\n } else {\n dispatch(addAgreement(agreement, isTemp));\n }\n };\n};\n\nexport const startDeleteAgreement = (\n agreement: TextAgreementModel,\n isTemp: boolean\n) => {\n return (\n dispatch: Dispatch,\n getState: () => AppState\n ) => {\n dispatch(deleteAgreement(agreement, isTemp));\n };\n};\n\nexport const handleRemoveQualificationAgreementsFromJobpath = (jobPath: JobPathModel) => {\n return (\n dispatch: Dispatch,\n getState: () => AppState\n ) => {\n const qualificationAgreements: QualificationAgreementModel[] = getState()?.agreement?.qualificationAgreements;\n if(qualificationAgreements && qualificationAgreements.length > 0 && jobPath?.qualifications?.length > 0)\n { \n const jobPaths: JobPathModel[] = getState()?.jobPathList?.jobPaths?.filter(j => j.id !== jobPath.id);\n if(jobPaths && jobPaths.length > 0)\n {\n jobPath.qualifications && jobPath.qualifications.map((qualification) => {\n const index = qualificationAgreements?.findIndex(x => x.id === qualification.id);\n if (index > -1)\n {\n let qualificationCount: number = 0;\n jobPaths.map((jobpath) => {\n qualificationCount += jobpath?.qualifications?.filter(q => q.id === qualification.id).length;\n });\n\n if(qualificationCount === 0)\n dispatch(removeQualifcationAgreement(qualification.id));\n }\n });\n }\n else \n {\n dispatch(clearQualificationAgreements());\n }\n }\n };\n};\n\nexport const handleShouldRemoveQualificationAgreement = (qualificationID: number, jobPaths: JobPathModel[]) => {\n return (\n dispatch: Dispatch,\n getState: () => AppState\n ) => {\n let qualificationIDCount: number = 0;\n jobPaths?.map((jobpath) => {\n jobpath.qualifications?.map((qualification) => {\n if (qualification.id === qualificationID)\n qualificationIDCount++;\n });\n });\n\n if (qualificationIDCount === 1)\n {\n dispatch(removeQualifcationAgreement(qualificationID));\n dispatch(removeNewestMyPlanQualifcationAgreement(qualificationID));\n }\n }\n}\n\n\nexport const handleQualificationAgreementsFromNewestPlan = (newestPlanQualificationAgreements: QualificationAgreementModel[], newestMyPlanJobPaths: JobPathModel[]) => {\n return (\n dispatch: Dispatch,\n getState: () => AppState\n ) => {\n let tempFilteredQualificationAgreements: QualificationAgreementModel[] = [];\n\n // filtering away qualificationagreements which is not relevant anymore because jobpath with the qualification was deleted.\n if (newestMyPlanJobPaths && newestMyPlanJobPaths.length > 0)\n {\n newestMyPlanJobPaths.map((jobpath) => {\n if(jobpath?.qualifications?.length > 0)\n {\n jobpath.qualifications.map((qualification) => {\n const index = newestPlanQualificationAgreements.findIndex(q => q.id === qualification.id);\n if (index > -1)\n {\n tempFilteredQualificationAgreements = [...tempFilteredQualificationAgreements, newestPlanQualificationAgreements[index]];\n }\n });\n }\n });\n }\n\n if (tempFilteredQualificationAgreements && tempFilteredQualificationAgreements.length > 0)\n {\n if (getState()?.citizen?.citizen?.cv?.qualifications?.length > 0) {\n let tempQualificationAgreements: QualificationAgreementModel[] = [];\n let tempAddedQualificationAgreements: QualificationAgreementModel[] = [];\n tempFilteredQualificationAgreements.map((qualification) => {\n if (getState().citizen.citizen.cv.qualifications.findIndex(x => x.id === qualification.id) === -1) {\n // adding qualifications which isn't added to citizen cv qualifications yet.\n tempQualificationAgreements = [...tempQualificationAgreements, qualification];\n } else {\n // qualification agreement added since last meeting, to display as done.\n tempAddedQualificationAgreements = [...tempAddedQualificationAgreements, qualification];\n }\n });\n\n dispatch(setQualificationAgreements(tempQualificationAgreements));\n dispatch(setNewestMyPlanQualficationAgreements(tempQualificationAgreements));\n dispatch(setQualificationAgreementsAddedFromNewestMyPlan(tempAddedQualificationAgreements));\n \n } else {\n dispatch(setQualificationAgreements(tempFilteredQualificationAgreements.filter(x => x.done === false)));\n dispatch(setNewestMyPlanQualficationAgreements(tempFilteredQualificationAgreements.filter(x => x.done === false)));\n }\n }\n }\n};\n","export enum HttpMethods {\n GET = 'GET',\n POST = 'POST',\n PUT = 'PUT',\n DELETE = 'DELETE'\n}\n\nexport default HttpMethods; ","\nexport const requestHeader = (token: string): Headers => {\n const requestHeaders = new Headers();\n const bearer = `Bearer ${(token)}`;\n requestHeaders.append('Content-Type', 'application/json; charset=UTF-8');\n requestHeaders.append('Authorization', bearer);\n return requestHeaders;\n};\n\nexport const requestHeaderPDF = (token: string): Headers => {\n const requestHeaders = new Headers();\n const bearer = `Bearer ${(token)}`;\n requestHeaders.append('Content-Type', 'application/pdf');\n requestHeaders.append('Authorization', bearer);\n return requestHeaders;\n};\n\n\n\nexport const requestHeaderFormData = (token: string): Headers => {\n const requestHeaders = new Headers();\n const bearer = `Bearer ${(token)}`;\n // requestHeaders.append('Content-Type', 'multipart/form-data; boundary=--------------------------522891277153252237875911');\n requestHeaders.append('Authorization', bearer);\n return requestHeaders;\n};\n\n","import { ScopeRequest } from '../models/ScopeRequest';\nimport { InteractionRequiredAuthError, AuthResponse } from 'msal';\nimport { requestHeader, requestHeaderFormData, requestHeaderPDF } from '../helpers/RequestHeaders';\nimport HttpMethods from \"../models/HttpMethodsEnum\";\nimport { AccountInfo, EndSessionRequest, PublicClientApplication } from '@azure/msal-browser';\nimport { accessRedirectRequest, MSAL_CONFIG, silentAccessRequest } from './authConfig';\nimport { AxiosRequestConfig } from 'axios';\n\nconst msalInstance = new PublicClientApplication(MSAL_CONFIG);\n// export function logout() {\n// let myMsalObj = new PublicClientApplication(MSAL_CONFIG);\n// try {\n// let currentAccounts = myMsalObj.getAllAccounts();\n// if(currentAccounts !== null && currentAccounts.length > 0){\n// const logOutRequest: EndSessionRequest = {\n// account: currentAccounts[0]\n// };\n// myMsalObj.logout(logOutRequest);\n// }\n// } catch (error) {\n// }\n// }\n\nasync function getToken(scopes: ScopeRequest) {\n try {\n let currentAccounts = msalInstance.getAllAccounts();\n if(currentAccounts !== null && currentAccounts.length > 0){\n silentAccessRequest.account = currentAccounts[0];\n silentAccessRequest.scopes = [...scopes.scopes];\n return await msalInstance.acquireTokenSilent(silentAccessRequest).then(resp => resp.accessToken);\n }\n return \"\";\n } catch (err) {\n if (err instanceof InteractionRequiredAuthError) {\n accessRedirectRequest.scopes = [...scopes.scopes];\n //might need all scopes instead of just the passed scopes, in that case we will need to send loginredirectrequest (authConfig.ts) instead\n msalInstance.acquireTokenRedirect(accessRedirectRequest).catch(console.error);\n } else {\n accessRedirectRequest.scopes = [...scopes.scopes];\n //might need all scopes instead of just the passed scopes, in that case we will need to send loginredirectrequest (authConfig.ts) instead\n msalInstance.acquireTokenRedirect(accessRedirectRequest).catch(console.error);\n }\n}\n}\n\n// async function getToken(scopes: ScopeRequest) {\n// let myMsalObj = new PublicClientApplication(MSAL_CONFIG);\n// try {\n// let currentAccounts = myMsalObj.getAllAccounts();\n// if(currentAccounts !== null && currentAccounts.length > 0){\n// silentAccessRequest.account = currentAccounts[0];\n// silentAccessRequest.scopes = [...scopes.scopes];\n// return await myMsalObj.acquireTokenSilent(silentAccessRequest).then(resp => resp.accessToken);\n// }\n// return \"\";\n// } catch (err) {\n// if (err instanceof InteractionRequiredAuthError) {\n// accessRedirectRequest.scopes = [...scopes.scopes];\n// //might need all scopes instead of just the passed scopes, in that case we will need to send loginredirectrequest (authConfig.ts) instead\n// myMsalObj.acquireTokenRedirect(accessRedirectRequest).catch(console.error);\n// } else {\n\n// }\n// }\n// }\n\nexport async function getOptions(httpMethod: HttpMethods, scopes: ScopeRequest, body?: any, pdfHeader?: boolean) {\n let token: any = \"\";\n try {\n token = await getToken(scopes);\n } catch (error) {\n if (error instanceof InteractionRequiredAuthError) {\n if (error.errorMessage) {\n }\n }\n }\n let options: RequestInit = {\n method: httpMethod,\n headers: pdfHeader !== undefined && pdfHeader ? requestHeaderPDF(token) : requestHeader(token),\n mode: 'cors',\n body: httpMethod === HttpMethods.GET ? null : JSON.stringify(body)\n };\n return options;\n}\n\nexport async function getOptionsFormData(httpMethod: HttpMethods, scopes: ScopeRequest, body?: any, pdfHeader?: boolean) {\n let token: any = \"\";\n try {\n token = await getToken(scopes);\n } catch (error) {\n if (error instanceof InteractionRequiredAuthError) {\n if (error.errorMessage) {\n }\n }\n }\n\n let options: RequestInit = {\n method: httpMethod,\n headers: requestHeaderFormData(token),\n mode: 'cors',\n body: httpMethod === HttpMethods.GET ? null : body\n };\n return options;\n}\n\nexport async function getOptionsAxios(httpMethod: HttpMethods, scopes: ScopeRequest, body?: any, pdfHeader?: boolean) {\n let token: any = \"\";\n try {\n token = await getToken(scopes);\n } catch (error) {\n if (error instanceof InteractionRequiredAuthError) {\n if (error.errorMessage) {\n }\n }\n }\n let options: AxiosRequestConfig = {\n method: httpMethod,\n headers: pdfHeader !== undefined && pdfHeader ? requestHeaderPDF(token) : requestHeader(token),\n data: httpMethod === HttpMethods.GET ? null : body,\n timeout: 3000,\n };\n return options;\n}\n","export const baseUrl: string = 'https://test-personaccess.marselisborg.org/api/';\n// export const baseUrl: string = 'http://localhost:3001/api/';\n\nexport const apiInfo = {\n endpoints: {\n UtilityService: {\n GetJobmatchConfiguration: baseUrl + \"configuration/jobmatch/\",\n },\n JobService: {\n GetAllQualifications: baseUrl + \"qualification\",\n GetOccupationOpportunitiesByPostalCode: baseUrl + \"taxonomi/getoccupations/\",\n GetAllIndustries: baseUrl + \"taxonomi/getindustries\",\n GetFilteredJobs: baseUrl + \"job/query\",\n GetViregoOrdersByOrgName: (orgName: string) => `${baseUrl}job/orders/${orgName}`,\n GetRegions: baseUrl + \"filterinformation/regions\",\n GetJobTypes: baseUrl + \"filterinformation/jobtypes\",\n GetJobById: baseUrl + \"job/getbyid/\",\n GetJobByIdViregoByOrgName: (orgName: string, id: string) => `${baseUrl}job/getbyidvirego/${orgName}/${id}`,\n GetOccupationsFromQualifications: baseUrl + \"suggestion/occupations\",\n GetSimilarQualifcationsFromQualifications: baseUrl + \"suggestion/qualifications\",\n GetSimilarQualifcationsFromQualification: baseUrl + \"suggestion/getSimilarQualifcationsFromQualification/\",\n GetJobBarometer: baseUrl + \"suggestion/jobbarometer\",\n GetAllMunicipalities: baseUrl + \"municipality\",\n GetSingleJobsToDisplay: baseUrl + \"job/singlejobs\",\n GetAllCompanyOccupationsFromCVR: baseUrl + \"job/getAllCompanyOccupationsFromCVR/\",\n GetFilteredCompanies: baseUrl + \"company\",\n },\n MyPlanService: {\n AddMyPlan: baseUrl + \"MyPlan/AddMyPlan\",\n GetNewestPlan: baseUrl + \"MyPlan/GetNewestPlan/\",\n GetAllPlans: baseUrl + \"MyPlan/GetAllPlansForCitizen/\",\n GetEarlierJobPaths: baseUrl + \"GetEarlierJobPaths/\",\n GetMyPlanFormattedString: baseUrl + \"getMyPlanFormattedString/\",\n PostPinnedJobsToNewestMyPlan: baseUrl + \"\",\n SaveDraftMeeting: baseUrl + \"myplan/SaveDraftMeeting/\",\n GetAllDraftMeetings: baseUrl + \"myplan/GetDraftMeetings/\",\n },\n CitizenService: {\n GetCitizenById: baseUrl + \"citizen/\",\n SearchCitizen: baseUrl + \"citizen/\",\n GetMyPlanVersions: baseUrl + \"citizen/\",\n GetCitizenBookingsByGuid: baseUrl + \"citizen/\",\n GetMyPlanPDF: baseUrl + \"citizen/\",\n PostDataResponse: baseUrl + \"citizen/\",\n GetDocumentFromJobLog: baseUrl + \"citizen/\",\n GetNewestDataResponse: baseUrl + \"citizen/\"\n },\n Access: {\n default: \"https://kube-access.marselisborg.org/access\"\n },\n UserService: {\n GetAllCitizenRelations: \"https://localhost:44361/api/ucrelation\",\n AddCitizenRelation: \"https://localhost:44361/api/ucrelation\",\n },\n ManagementInformationService: {\n GetChart: baseUrl + \"mis/chart/\",\n GetDataForDownload: baseUrl + \"mis/data/\",\n GetUsers: baseUrl + \"mis/users\",\n },\n PersonService: {\n GetEntries: baseUrl + \"joblog/\",\n PostJobSearchEntry: baseUrl + \"joblog\",\n PostJobSearchEntryWithJobPath: baseUrl + \"joblog/jobpathfilter/\",\n PostOtherEntry: baseUrl + \"joblog/\",\n PutJobSearchEntry: baseUrl + \"joblog\",\n PutOtherEntry: baseUrl + \"joblog\",\n DeleteJobSearchEntry: baseUrl + \"joblog/\",\n GetJobPathFilters: baseUrl + \"person/jobpathfilter\",\n PutJobPathFilters: baseUrl + \"person/jobpathfilter\",\n PutJobPathFiltersWithJob: baseUrl + \"person/jobpathfilter/\",\n DeleteJob: baseUrl + \"person/jobpathfilter/\",\n PinJobToJobPath: baseUrl + \"person/jobpathfilter/\",\n Document: baseUrl + \"document/\",\n GetPersonMembership: baseUrl + \"person/usertype\",\n }\n },\n scopes: {\n DSA_Members: {\n UserRead: { scopes: [\"https://marselisborgit.onmicrosoft.com/access.read/access.dsa.read\"] }\n }\n }\n}","import JobPathModel from \"./JobPathModel\";\nimport LocationModel from \"./LocationModel\";\nimport { Location } from \"./Location\";\nimport { QueryFilter } from \"./QueryFilter\";\nimport { RegionModel } from \"./RegionModel\";\nimport IndustryModel from \"./IndustryModel\";\n\nexport class QueryObject {\n jobPath: JobPathModel;\n location: Location;\n queryFilters: QueryFilter[];\n regions: RegionModel[];\n conceptUriDas: string[];\n timeOfRequest: Date;\n industries: IndustryModel[];\n jobIdsToFilter: string[];\n keywords: string[];\n \n\n constructor(jobPath: JobPathModel, location: Location, queryFilters: QueryFilter[], regions: RegionModel[], timeOfRequest: Date, jobIdsToFilter: string[], industries: IndustryModel[], conceptUriDas: string[], specializationKeywords: string[]) {\n this.jobPath = jobPath;\n this.location = location\n this.queryFilters = queryFilters;\n this.regions = regions;\n this.conceptUriDas = conceptUriDas;\n this.timeOfRequest = timeOfRequest;\n this.industries = industries;\n this.jobIdsToFilter = jobIdsToFilter;\n this.keywords = specializationKeywords;\n }\n}","export function getCVFromUrl(address: string) {\n switch(address){\n case \"/SEARCHCITIZEN\":\n return \"Søg borger\";\n case \"/followup\":\n return \"Opfølgning\";\n case \"/cv\":\n return \"CV\";\n case \"/jobpath\":\n return \"Jobspor\";\n case \"/searchjob\":\n return \"Jobsøgning\";\n case \"/plan\":\n return \"Opdateret plan\";\n\n }\n}\n\nexport const addPublicToUrl = (url: string, isAuth: boolean): string => {\n if (!isAuth)\n {\n const urls: string[] = url?.split('api/');\n return urls[0] + 'api/public/' + urls[1];\n }\n else \n return url;\n}","import * as actions from \"./types\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { AppState } from \"..\";\nimport { AppActions } from \"../AppActions\";\nimport { apiInfo } from \"../../AzureAuth/ApiInfo\";\nimport { RegionModel } from \"../../models/RegionModel\";\nimport { getOptions } from \"../../AzureAuth/api\";\nimport HttpMethods from \"../../models/HttpMethodsEnum\";\nimport { QueryFilter } from \"../../models/QueryFilter\";\nimport JobTypeModel from \"../../models/JobTypeModel\";\nimport OccupationOpportunityModel from \"../../models/OccupationOpportunityModel\";\nimport { SearchListModel } from \"../../models/SearchListModel\";\nimport { MunicipalityModel } from \"../../models/MunicipalityModel\";\nimport IndustryModel from \"../../models/IndustryModel\";\nimport { setAllJobpathsToFilterChosen } from \"../JobPathList/actions\";\nimport { FilterOptionTypesModel } from \"../../models/FilterOptionsModel\";\nimport { addPublicToUrl } from \"../../helpers/UrlHelper\";\nimport DSAJobFilterModel from \"../../models/DSAJobFilterModel\";\n\nexport const clearAllSearchJobData = (): actions.SearchJobActionTypes => ({\n type: actions.CLEAR_ALL_SEARCH_JOB_DATA,\n});\n\nexport const updateRegion = (region: RegionModel): actions.SearchJobActionTypes => ({\n type: actions.UPDATE_REGION,\n data: region,\n});\n\nexport const updateForeignCountry = (foreignCountry: [string, boolean]): actions.SearchJobActionTypes => ({\n type: actions.UPDATE_FOREIGN_COUNTRY,\n data: foreignCountry,\n});\n\nexport const updateWorkTimeArray = (workTimeArray: number[]): actions.SearchJobActionTypes => ({\n type: actions.UPDATE_WORKTIME_ARRAY,\n data: workTimeArray,\n});\n\nexport const updateSingleWorkTime = (workTime: number, index: number): actions.SearchJobActionTypes => ({\n type: actions.UPDATE_SINGLE_WORKTIME,\n data: workTime,\n index: index,\n});\n\nexport const updateTransportTime = (transportTime: string): actions.SearchJobActionTypes => ({\n type: actions.UPDATE_TRANSPORT_TIME,\n data: transportTime,\n});\n\nexport const updateFilterSortDropdown = (chosenFilter: string): actions.SearchJobActionTypes => ({\n type: actions.UPDATE_FILTER_SORT_DROPDOWN,\n data: chosenFilter,\n});\n\nexport const addJobFilterIdElement = (\n filterId: number\n): actions.SearchJobActionTypes => ({\n type: actions.ADD_JOBFILTER_ID_ELEMENT_TO_EXPAND,\n data: filterId,\n});\n\nexport const removeJobFilterIdElement = (\n filterId: number\n): actions.SearchJobActionTypes => ({\n type: actions.REMOVE_JOBFILTER_ID_ELEMENT_TO_EXPAND,\n data: filterId,\n});\n\nexport const getAllRegions = (regions: RegionModel[]): actions.SearchJobActionTypes => ({\n type: actions.FETCH_ALL_REGIONS,\n data: regions,\n})\n\nexport const UpdateQueryFilter = (queryFilters: QueryFilter[], filterType: string): actions.SearchJobActionTypes => ({\n type: actions.UPDATE_QUERYFILTERS,\n data: queryFilters,\n filterType: filterType,\n});\n\nexport const SetIsDoneQueryUpdating = (isDone: boolean): actions.SearchJobActionTypes => ({\n type: actions.SET_IS_DONE_QUERY_UPDATING,\n data: isDone,\n})\n\nexport const UpdateDistance = (distance: number): actions.SearchJobActionTypes => ({\n type: actions.UPDATE_DISTANCE,\n data: distance,\n})\n\nexport const getAllJobTypes = (jobTypes: JobTypeModel[]): actions.SearchJobActionTypes => ({\n type: actions.FETCH_ALL_JOBTYPES,\n data: jobTypes,\n});\n\nexport const toggleInitialFilters = (isAdded: boolean): actions.SearchJobActionTypes => ({\n type: actions.TOGGLE_INTIAL_FILTERS,\n data: isAdded,\n})\n\nexport const toggleQueryFilter = (queryFilter: QueryFilter, shouldAdd: boolean, showAllJobs: boolean = false): actions.SearchJobActionTypes => ({\n type: actions.TOGGLE_QUERYFILTER,\n data: queryFilter,\n shouldAdd: shouldAdd,\n showAllJobs: showAllJobs,\n});\n\nexport const setFilterOptionType = (filterOption: FilterOptionTypesModel): actions.SearchJobActionTypes => ({\n type: actions.SET_FILTER_OPTION_TYPE,\n data: filterOption,\n});\n\nexport const shouldFadeJobListIn = (fadeIn: boolean): actions.SearchJobActionTypes => ({\n type: actions.SHOULD_FADE_JOBS_IN,\n data: fadeIn,\n});\n\nexport const removedIndexOfJobInList = (index: number): actions.SearchJobActionTypes => ({\n type: actions.INDEX_OF_JOB_IN_LIST_REMOVED,\n index: index,\n});\n\nexport const addOccupationToTempList = (occupation: OccupationOpportunityModel): actions.SearchJobActionTypes => ({\n type: actions.ADD_OCCUPATION_TO_TEMP_LIST,\n data: occupation,\n});\n\nexport const addMunicipalityToTempList = (municipality: MunicipalityModel): actions.SearchJobActionTypes => ({\n type: actions.ADD_MUNICIPALITY_TO_TEMP_LIST,\n data: municipality,\n});\n\nexport const removeOccupationFromTempList = (occupation: OccupationOpportunityModel): actions.SearchJobActionTypes => ({\n type: actions.REMOVE_OCCUPATION_FROM_TEMP_LIST,\n data: occupation,\n});\n\nexport const removeMunicipalityFromTempList = (municipality: MunicipalityModel): actions.SearchJobActionTypes => ({\n type: actions.REMOVE_MUNICIPALITY_FROM_TEMP_LIST,\n data: municipality,\n});\n\nexport const removeAllOccupationsFromTempList = (): actions.SearchJobActionTypes => ({\n type: actions.RESET_ALL_OCCUPATIONS,\n});\n\nexport const removeAllMunicipalitiesFromTempList = (): actions.SearchJobActionTypes => ({\n type: actions.RESET_ALL_MUNICIPALITIES,\n});\n\nexport const saveOccupationsFromTempToDisplayList = (occupations: SearchListModel[]): actions.SearchJobActionTypes => ({\n type: actions.SAVE_TEMP_OCCUPATIONS_TO_OCCUPATIONS_TO_DISPLAY_LIST,\n data: occupations,\n});\n\nexport const saveMunicipalitiesFromTempToDisplayList = (municipalities: SearchListModel[]): actions.SearchJobActionTypes => ({\n type: actions.SAVE_TEMP_MUNICIPALITIES_TO_MUNICIPALITIES_TO_DISPLAY_LIST,\n data: municipalities,\n});\n\nexport const triggerCheckedOnOccupations = (occupation: SearchListModel, checked: boolean): actions.SearchJobActionTypes => ({\n type: actions.TRIGGER_CHECKED_ON_OCCUPATION,\n data: occupation,\n isChecked: checked,\n});\n\nexport const triggerCheckedOnMunicipalities = (municipality: SearchListModel, checked: boolean): actions.SearchJobActionTypes => ({\n type: actions.TRIGGER_CHECKED_ON_MUNICIPALITY,\n data: municipality,\n isChecked: checked,\n});\n\nexport const addJobIdOnHover = (id: string): actions.SearchJobActionTypes => ({\n type: actions.ADD_JOBID_ON_HOVER,\n data: id\n});\n\nexport const ToggleIndustry = (industry: IndustryModel, checked: boolean): actions.SearchJobActionTypes => ({\n type: actions.TOGGLE_CHOSEN_INDUSTRY,\n data: industry,\n checked: checked\n});\n\nexport const RemoveAllIndustriesFromTemplist = (): actions.SearchJobActionTypes => ({\n type: actions.REMOVE_ALL_INDUSTRIES_FROM_TEMPLIST,\n});\n\nexport const SaveIndustriesFromTempToDisplayList = (industries: IndustryModel[]): actions.SearchJobActionTypes => ({\n type: actions.SAVE_INDUSTRIES_FROM_TEMP_TO_DISPLAY_LIST,\n data: industries,\n});\n\nexport const AddIndustryToTempList = (industry: IndustryModel): actions.SearchJobActionTypes => ({\n type: actions.ADD_INDUSTRY_TO_TEMP_LIST,\n data: industry\n});\n\nexport const RemoveIndustryFromTempList = (industry: IndustryModel): actions.SearchJobActionTypes => ({\n type: actions.REMOVE_INDUSTRY_FROM_TEMP_LIST,\n data: industry\n});\n\nexport const setCompanyOccupations = (occupations: OccupationOpportunityModel[]): actions.SearchJobActionTypes => ({\n type: actions.SET_COMPANY_OCCUPATIONS,\n data: occupations,\n});\n\nexport const clearCompanyOccupations = (): actions.SearchJobActionTypes => ({\n type: actions.CLEAR_COMPANY_OCCUPATIONS,\n});\n\nexport const setIsDoneFetchingCompanyOccupations = (isDone: boolean): actions.SearchJobActionTypes => ({\n type: actions.SET_IS_DONE_FETCHING_COMPANY_OCCUPATIONS,\n data: isDone,\n});\n\nexport const fetchCompanyOccupationsError = (error: boolean): actions.SearchJobActionTypes => ({\n type: actions.FETCH_COMPANY_OCCUPATIONS_ERROR,\n data: error,\n});\n\nexport const resetAllFilters = (): actions.SearchJobActionTypes => ({\n type: actions.RESET_ALL_FILTERS,\n});\n\nexport const updateEmploymentDuration = (employment: {title: string, checked: boolean}): actions.SearchJobActionTypes => ({\n type: actions.UPDATE_EMPLOYMENT_DURATION,\n data: employment,\n});\n\nexport const setAddedOrPinnedJob = (addedOrPinnedJob: boolean): actions.SearchJobActionTypes => ({\n type: actions.SET_ADDED_OR_PINNED_JOB,\n data: addedOrPinnedJob,\n});\n\nexport const setJobNetJobType = (isChosen: boolean): actions.SearchJobActionTypes => ({\n type: actions.SET_JOBNET_JOBTYPE,\n data: isChosen,\n});\n\nexport const setJobOrderJobType = (isChosen: boolean): actions.SearchJobActionTypes => ({\n type: actions.SET_JOBORDER_JOBTYPE,\n data: isChosen,\n});\n\nexport const addQueryFilter = (queryFilter: QueryFilter): actions.SearchJobActionTypes => ({\n type: actions.ADD_QUERY_FILTER,\n data: queryFilter,\n});\n\nexport const updateQueryFilter = (queryFilter: QueryFilter): actions.SearchJobActionTypes => ({\n type: actions.UPDATE_QUERY_FILTER,\n data: queryFilter,\n});\n\nexport const removeQueryFilter = (queryFilter: QueryFilter): actions.SearchJobActionTypes => ({\n type: actions.REMOVE_QUERYFILTER,\n data: queryFilter,\n});\n\nexport const setDSAJobFilter = (data: DSAJobFilterModel): actions.SearchJobActionTypes => ({\n type: actions.SET_DSA_JOB_FILTER,\n data: {...data},\n});\n\nexport const setTempDSAJobFilter = (data: DSAJobFilterModel): actions.SearchJobActionTypes => ({\n type: actions.SET_TEMP_DSA_JOB_FILTER,\n data: {...data},\n});\n\nexport const setWindowInnerWidth = (width: number): actions.SearchJobActionTypes => ({\n type: actions.SET_WINDOW_INNERWIDTH,\n data: width,\n});\n\nexport const toggleDsaOccupations = (checked: boolean): actions.SearchJobActionTypes => ({\n type: actions.TOGGLE_DSA_OCCUPATIONS,\n data: checked\n});\n\nexport const setToggleDsaAcademicJobs = (checked: boolean): actions.SearchJobActionTypes => ({\n type: actions.TOGGLE_DSA_ACADEMIC_JOBS,\n data: checked,\n});\n\nexport const getAllRegionFromAPI = () => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const isAuth = getState().auth.account != null;\n const res = await fetch(addPublicToUrl(apiInfo.endpoints.JobService.GetRegions, isAuth), await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n let regions: RegionModel[] = await res.json();\n dispatch(getAllRegions(regions));\n } else {\n\n }\n } catch (error) {\n\n }\n }\n}\n\n\nexport const getAllJobTypesFromAPI = () => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const isAuth = getState().auth.account != null;\n const res = await fetch(addPublicToUrl(apiInfo.endpoints.JobService.GetJobTypes, isAuth), await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n let jobTypes: JobTypeModel[] = await res.json();\n jobTypes.forEach(jt => jt.checked = true);\n dispatch(getAllJobTypes(jobTypes));\n } else {\n\n }\n } catch (error) {\n\n }\n }\n}\n\nexport const resetAllFiltersInFilterJobSearch = () => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n dispatch(setAllJobpathsToFilterChosen());\n dispatch(resetAllFilters());\n } catch (error) {\n\n }\n }\n}","export class ValuesAndAttributeName {\n values: T[];\n attributeName: string;\n typeName: string; \n\n constructor(values: T[], attributeName: string, typeName: string) {\n this.values = values; \n this.attributeName = attributeName; \n this.typeName = typeName;\n }\n}","import NumberBox from \"../components/Template/TemplateComponents/NumberBox\";\n\nexport class Location {\n longitude: Number;\n latitude: Number;\n maxDistance: Number;\n\n constructor(longitude: Number, latitude: Number, maxDistance: Number) {\n this.longitude = longitude;\n this.latitude = latitude;\n this.maxDistance = maxDistance;\n }\n}","import DSADataModel from \"../models/DSADataModel\";\n\nexport const dsaData: DSADataModel[] = require('../data/DSATestData.json')?.Results;","import { AppActions } from '../AppActions';\nimport { Dispatch } from 'redux';\nimport { AppState } from '../index';\nimport { JobsActionTypes } from './types';\nimport * as actions from './types';\nimport JobModel from '../../models/JobModel';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { getOptions } from '../../AzureAuth/api';\nimport { apiInfo } from '../../AzureAuth/ApiInfo';\nimport HttpMethods from '../../models/HttpMethodsEnum';\nimport OccupationOpportunityModel from '../../models/OccupationOpportunityModel';\nimport { QueryObject } from '../../models/QueryObject';\nimport JobPathModel from '../../models/JobPathModel';\nimport { equals, isEmptyOrUndefined, isObjEmpty } from \"../../helpers/TypeChecks\";\nimport { RegionModel } from '../../models/RegionModel';\nimport CitizenModel from '../../models/CitizenModel';\nimport { updateJobPathFilteredJobs } from '../JobPathList/actions';\nimport { QueryFilter } from '../../models/QueryFilter';\nimport IndustryModel from '../../models/IndustryModel';\nimport QualificationModel from '../../models/QualificationModel';\nimport { setOccupationsFromQualifications, setSimilarQualifications } from \"../JobPathList/actions\";\nimport { Guid } from 'guid-typescript';\nimport { JobDisplayModel } from '../../models/JobDisplayModel';\nimport { MunicipalityModel } from '../../models/MunicipalityModel';\nimport { fetchCompanyOccupationsError, setCompanyOccupations, setIsDoneFetchingCompanyOccupations } from '../SearchJob/actions';\nimport { ValuesAndAttributeName } from '../../models/ValuesAndAttributeName';\nimport { Location } from '../../models/Location';\nimport { createLocaleDate } from '../../helpers/DateHelper';\nimport { SearchListModel } from '../../models/SearchListModel';\nimport { FilterOptionTypesModel } from '../../models/FilterOptionsModel';\nimport { addPublicToUrl } from '../../helpers/UrlHelper';\nimport GeoPoint from '../../models/GeoPoint';\nimport { dsaData } from '../../helpers/DSADataHelper';\nimport DSADataModel from '../../models/DSADataModel';\nimport { listenerCount } from 'process';\n\nlet orderResponseTimestamp: number = createLocaleDate()?.getTime();\n\nexport const clearAllJobData = (): JobsActionTypes => ({\n type: actions.CLEAR_ALL_JOB_DATA,\n});\n\nexport const setDisplayLoader = (load: boolean): JobsActionTypes => ({\n type: actions.SET_DISPLAY_LOADER,\n data: load,\n});\n\nexport const getAllJobsSuccess = (jobs: JobModel[]): JobsActionTypes => ({\n type: actions.FETCH_ALL_JOBS_SUCCESS,\n data: jobs\n});\n\nexport const getAllJobsError = (error: string): JobsActionTypes => ({\n type: actions.FETCH_ALL_JOBS_ERROR,\n error: error\n});\n\nexport const getAllJobs = (): JobsActionTypes => ({\n type: actions.FETCH_ALL_JOBS,\n});\n\nexport const setFilteredJobsSuccess = (jobPaths: JobPathModel[]): JobsActionTypes => ({\n type: actions.FETCH_ALL_FILTERED_JOBS_SUCCESS,\n data: jobPaths,\n});\n\nexport const getFilteredJobsError = (error: string): JobsActionTypes => ({\n type: actions.FETCH_ALL_FILTERED_JOBS_ERROR,\n error: error\n})\n\nexport const getFilteredJobs = (): JobsActionTypes => ({\n type: actions.FETCH_ALL_FILTERED_JOBS,\n})\n\n\nexport const getAllQualificationsSuccess = (qualifications: []): JobsActionTypes => ({\n type: actions.FETCH_ALL_QUALIFICATIONS_SUCCESS,\n data: qualifications\n})\n\nexport const getAllQualificationsError = (error: string): JobsActionTypes => ({\n type: actions.FETCH_ALL_QUALIFICATIONS_ERROR,\n error: error\n})\n\nexport const getAllQualifications = (): JobsActionTypes => ({\n type: actions.FETCH_ALL_QUALIFICATIONS,\n})\n\nexport const getAllOccupationSuccess = (occupations: OccupationOpportunityModel[]): JobsActionTypes => ({\n type: actions.FETCH_ALL_OCCUPATIONS_SUCCESS,\n data: occupations\n})\n\nexport const getAllOccupationError = (error: string): JobsActionTypes => ({\n type: actions.FETCH_ALL_OCCUPATIONS_ERROR,\n error: error\n})\n\nexport const getAllOccupation = (): JobsActionTypes => ({\n type: actions.FETCH_ALL_OCCUPATIONS,\n})\n\nexport const getAllIndustriesSuccess = (industries: IndustryModel[]): JobsActionTypes => ({\n type: actions.FETCH_ALL_INDUSTRIES_SUCCESS,\n data: industries\n})\n\nexport const getAllIndustriesError = (error: string): JobsActionTypes => ({\n type: actions.FETCH_ALL_INDUSTRIES_ERROR,\n error: error\n})\n\nexport const getAllIndustries = (): JobsActionTypes => ({\n type: actions.FETCH_ALL_INDUSTRIES,\n})\n\nexport const getAllMunicipalitiesSuccess = (municipalities: MunicipalityModel[]): JobsActionTypes => ({\n type: actions.FETCH_ALL_MUNICIPALITIES_SUCCESS,\n data: municipalities\n})\n\nexport const getAllMunicipalitiesError = (error: string): JobsActionTypes => ({\n type: actions.FETCH_ALL_MUNICIPALITIES_ERROR,\n error: error\n})\n\nexport const getAllMunicipalities = (): JobsActionTypes => ({\n type: actions.BEGIN_FETCH_ALL_MUNICIPALITIES,\n})\n\nexport const setJobs = (jobs: JobModel): JobsActionTypes => ({\n type: actions.SET_JOBS,\n data: jobs,\n});\n\nexport const getFilteredJobsWithoutJobPath = (jobs: JobModel[]): JobsActionTypes => ({\n type: actions.GET_FILTERED_JOBS_WITHOUT_JOBPAHTS,\n data: jobs\n});\n\nexport const setJobToDisplay = (job: JobDisplayModel): JobsActionTypes => ({\n type: actions.SET_JOBMODEL_TO_DISPLAY,\n data: job\n});\n\nexport const isFetchingSingleJobsOrCompanyOccupations = (isFetching: boolean): JobsActionTypes => ({\n type: actions.IS_FETCHING_SINGLE_JOB_OR_COMPANY_OCCUPATIONS,\n isFetching: isFetching,\n});\n\nexport const isFetchingFilteredJobs = (isFetching: boolean): JobsActionTypes => ({\n type: actions.IS_FETCHING_FILTERED_JOBS,\n isFetching: isFetching,\n});\n\nexport const updateSearchJobsTitle = (\n title: string,\n jobIdToUpdate: number\n): JobsActionTypes => ({\n type: actions.UPDATE_JOB_TITLE,\n title: title,\n jobIdToUpdate: jobIdToUpdate,\n});\n\nexport const removeJobFromState = (job: JobModel): JobsActionTypes => ({\n type: actions.REMOVE_JOB_FROM_STATE,\n data: job,\n});\n\nexport const doneFetchingFilteredJobs = (isDone: boolean): JobsActionTypes => ({\n type: actions.IS_DONE_FETCHING_FILTERED_JOBS,\n data: isDone,\n});\n\nexport const clearJobToDisplay = (): JobsActionTypes => ({\n type: actions.CLEAR_JOBMODEL_TO_DISPLAY\n});\n\nexport const setSingleJobsToDisplay = (jobs: JobDisplayModel[]): JobsActionTypes => ({\n type: actions.SET_SINGLEJOBS_TO_DISPLAY,\n data: jobs,\n});\n\nexport const fetchSingleJobError = (responseFailed: boolean): JobsActionTypes => ({\n type: actions.SET_FETCH_SINGLE_JOB_ERROR,\n data: responseFailed,\n});\n\nexport const setFilteredAllJobs = (jobs: JobModel[]): JobsActionTypes => ({\n type: actions.SET_FILTERED_ALL_JOBS,\n data: jobs,\n});\n\nexport const searchJobs = (query: string) => {\n return async (dispatch: Dispatch, getState: () => AppState) => {\n let url: string = '';\n url = '/data/Jobs/jobs.json'\n try {\n const res = await fetch(url, {\n method: 'GET',\n // headers: await requestHeader(getState(), null),\n mode: 'cors',\n cache: 'default',\n });\n const data = await res.json();\n data.title = 'Search Results';\n dispatch(setJobs(data));\n } catch (error) {\n // Error logging TODO\n }\n };\n}\n\n// Currently timeout due to logstash error\nexport const getAllJobsFromAPI_Jobcenter = () => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n dispatch(getAllJobs());\n try {\n let geoLocation: Location = new Location(9.5018, 56.2639, 500);\n if(getState().citizen && getState().citizen.citizen && getState().citizen.citizen.latitude && getState().citizen.citizen.longitude)\n {\n geoLocation.latitude = getState().citizen.citizen.latitude;\n geoLocation.longitude = getState().citizen.citizen.longitude;\n }\n const queryObj: QueryObject = new QueryObject({} as JobPathModel, geoLocation, [new QueryFilter('status', 'true')], [], createLocaleDate(), [], [], [], []);\n const isAuth = getState().auth.account != null;\n const res = await fetch(addPublicToUrl(apiInfo.endpoints.JobService.GetFilteredJobs, isAuth), await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, queryObj));\n if (res.ok) {\n const data: {timeOfRequest: Date, jobs: JobModel[]} = await res.json();\n dispatch(getAllJobsSuccess(data.jobs));\n } else {\n dispatch(getAllJobsError(\"Jobs could not be fetched from the API\"))\n }\n } catch (error) {\n dispatch(getAllJobsError(\"BIGERROR\"));\n }\n }\n}\n\nexport const getAllQualificationsFromAPI = () => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n dispatch(getAllQualifications())\n try {\n const isAuth = getState().auth.account != null;\n const res = await fetch(addPublicToUrl(apiInfo.endpoints.JobService.GetAllQualifications, isAuth), await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n dispatch(getAllQualificationsSuccess(await res.json()));\n } else {\n dispatch(getAllQualificationsError(\"Qualifications could not be fetched from the API\"))\n }\n } catch (error) {\n dispatch(getAllQualificationsError(\"BIGERROR\"));\n }\n }\n}\n\nexport const getAllOccupationOppurtunitiesFromAPI = (postalcode: string) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n dispatch(getAllOccupation())\n try {\n const isAuth = getState().auth.account != null;\n const res = await fetch(addPublicToUrl(apiInfo.endpoints.JobService.GetOccupationOpportunitiesByPostalCode, false) + postalcode, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n let data: OccupationOpportunityModel[] = [];\n data = await res.json();\n\n if (data && data?.length > 0)\n {\n data = data.filter(o => !isEmptyOrUndefined(o?.conceptUriDa))?.map((oc) => {\n oc.id = oc.pId;\n return oc;\n });\n }\n\n dispatch(getAllOccupationSuccess(data));\n } else {\n dispatch(getAllOccupationError(res.statusText));\n }\n } catch (error) {\n dispatch(getAllOccupationError(\"BIGERROR\"));\n }\n }\n}\n\nexport const getAllMunicipalitiesFromAPI = () => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n dispatch(getAllMunicipalities())\n try {\n const isAuth = getState().auth.account != null;\n const res = await fetch(addPublicToUrl(apiInfo.endpoints.JobService.GetAllMunicipalities, isAuth), await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n dispatch(getAllMunicipalitiesSuccess(await res.json()));\n } else {\n dispatch(getAllMunicipalitiesError(res.statusText));\n }\n } catch (error) {\n dispatch(getAllMunicipalitiesError(\"BIGERROR\"));\n }\n }\n}\n\nexport const getAllIndustriesFromAPI = () => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n dispatch(getAllIndustries())\n try {\n const isAuth = getState().auth.account != null;\n const res = await fetch(addPublicToUrl(apiInfo.endpoints.JobService.GetAllIndustries, isAuth), await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n dispatch(getAllIndustriesSuccess(await res.json()));\n } else {\n dispatch(getAllIndustriesError(res.statusText));\n }\n } catch (error) {\n dispatch(getAllIndustriesError(\"BIGERROR\"));\n }\n }\n}\n\nconst getProfessionOccupations = (value: string, occupationIds: string[]) => {\n const profession: DSADataModel | undefined = dsaData.find((x) => x?.Profession === value);\n if (profession)\n {\n profession?.ProfessionOccupations?.map((occu) => {\n if (!occupationIds?.includes(occu))\n occupationIds = [...occupationIds, occu];\n });\n }\n\n return occupationIds;\n}\n\nconst getAllProfessionOccupations = (): string[] => {\n let tempList: string[] = [];\n dsaData?.map((data) => {\n if (data?.ProfessionOccupations?.length > 0 && data?.Profession !== 'Akademiker')\n tempList = [...tempList, ...data.ProfessionOccupations];\n });\n return tempList;\n}\n\nconst getAllAcademicOccupations = (): string[] => {\n let tempList: string[] = [];\n dsaData?.map((data) => {\n if (data?.ProfessionOccupations?.length > 0 && data?.Profession === 'Akademiker')\n tempList = [...tempList, ...data.ProfessionOccupations];\n });\n\n return tempList;\n}\n\nconst handleJobsFromQuery = (queryObjectClone: QueryObject, jobpath: JobPathModel, queryResponses: number[], tempJobPaths: JobPathModel[], isAllJobs: boolean, onlyQueryJobs: boolean, callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n // Adding jobs already searched or job agreeded onto being searched to queryobject jobIdsToFilter.\n if(queryObjectClone.queryFilters && queryObjectClone.queryFilters.find(q => q.type === \"status\" && q.value === \"true\"))\n {\n if(getState().jobPathList && getState().jobPathList.jobIdsAdded && getState().jobPathList.jobIdsAdded.length > 0)\n queryObjectClone.jobIdsToFilter = getState().jobPathList.jobIdsAdded;\n }\n else\n {\n if(getState().jobPathList && getState().jobPathList.companyIdsAdded && getState().jobPathList.companyIdsAdded.length > 0)\n queryObjectClone.jobIdsToFilter = getState().jobPathList.companyIdsAdded;\n }\n \n const personGeoData: GeoPoint | null = getState().person.personGeoData;\n if (personGeoData != null)\n {\n queryObjectClone.location = {\n ...queryObjectClone.location,\n latitude: personGeoData?.latitude,\n longitude: personGeoData?.longitude\n };\n }\n\n if (getState()?.searchJob?.dsaJobFilter?.Occupations?.length > 0)\n queryObjectClone.conceptUriDas = getState()?.searchJob?.dsaJobFilter?.Occupations?.filter(x => x?.checked)?.map((item) => String(item?.id));\n\n\n if (queryObjectClone?.conceptUriDas?.length === 0 && (getState().searchJob.toggleDsaOccupations || getState().searchJob.toggleDsaAcademicJobs))\n {\n if (getState().searchJob.toggleDsaOccupations)\n queryObjectClone.conceptUriDas = getAllProfessionOccupations();\n\n if (getState().searchJob.toggleDsaAcademicJobs)\n queryObjectClone.conceptUriDas = [...queryObjectClone.conceptUriDas, ...getAllAcademicOccupations()];\n }\n\n if (queryObjectClone.jobPath?.profession?.toLowerCase() === 'psykoterapeut mpf' || getState().searchJob.dsaJobFilter?.Profession?.name?.toLowerCase() === 'psykoterapeut mpf' && getState().searchJob.dsaJobFilter?.Profession?.checked)\n {\n queryObjectClone.keywords = [...queryObjectClone.keywords, ...[\"Psykoterapeut\"]];\n\n if (queryObjectClone.jobPath?.profession?.toLowerCase() === 'psykoterapeut mpf')\n queryObjectClone.jobPath = {\n ...queryObjectClone.jobPath,\n specializationKeywords: [\"Psykoterapeut\"]\n }\n }\n\n let result: Response = new Response();\n const filterOption: FilterOptionTypesModel = getState().searchJob && getState().searchJob.filterOption;\n const isAuth = getState().auth.account != null;\n if (!onlyQueryJobs && filterOption === \"companies\")\n result = await fetch(addPublicToUrl(apiInfo.endpoints.JobService.GetFilteredCompanies, isAuth), await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, queryObjectClone));\n else if (!onlyQueryJobs && filterOption === \"orders\")\n result = await fetch(apiInfo.endpoints.JobService.GetViregoOrdersByOrgName(\"dsa\"), await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, queryObjectClone));\n else\n result = await fetch(addPublicToUrl(apiInfo.endpoints.JobService.GetFilteredJobs, isAuth), await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, queryObjectClone));\n\n if (result.ok)\n {\n \n const data: {jobs: JobModel[], timeOfRequest: Date} = await result.json();\n // return out of the method if the request was later than the order response timestamp, meaning we dont show old data from a request made earlier\n if (orderResponseTimestamp !== queryObjectClone?.timeOfRequest?.getTime())\n return;\n\n let jobs: JobModel[] = data.jobs;\n if (jobs?.length > 0 && filterOption === \"orders\")\n {\n jobs = jobs.map((job) => {\n job.isViregoOrder = true;\n\n return job;\n });\n }\n\n if (!isObjEmpty(jobpath))\n {\n if (jobs && jobs.length > 0)\n {\n if(isAllJobs)\n {\n dispatch(setFilteredAllJobs(jobs));\n }\n else if (tempJobPaths.length > 0)\n {\n if (jobs[0]?.jobPathId === jobpath?.id)\n {\n dispatch(updateJobPathFilteredJobs(jobpath?.id, jobs));\n const findIndex = tempJobPaths?.findIndex(x => x?.id === jobpath?.id);\n if (findIndex > -1)\n tempJobPaths[findIndex].filteredJobs = [...jobs];\n }\n else \n {\n // empty jobpath filteredjobs\n const jobPathIdx: number = tempJobPaths?.findIndex(j => j?.id === jobpath?.id);\n if (jobPathIdx > -1)\n tempJobPaths[jobPathIdx].filteredJobs = [];\n }\n\n dispatch(setFilteredJobsSuccess(tempJobPaths));\n }\n else\n {\n if (jobs[0].jobPathId === jobpath?.id)\n dispatch(updateJobPathFilteredJobs(jobpath?.id, jobs));\n else\n dispatch(getFilteredJobsWithoutJobPath(jobs));\n }\n }\n else if(jobpath?.id?.toString() == Guid.EMPTY || jobpath?.id == undefined)\n {\n dispatch(setFilteredAllJobs(jobs));\n }\n else\n {\n dispatch(updateJobPathFilteredJobs(jobpath?.id, jobs));\n const index = tempJobPaths?.findIndex(x => x?.id === jobpath?.id);\n if (index > -1)\n tempJobPaths[index].filteredJobs = [...jobs];\n \n dispatch(setFilteredJobsSuccess(tempJobPaths));\n \n if(isAllJobs)\n dispatch(setFilteredAllJobs([]));\n }\n }\n else\n dispatch(getFilteredJobsWithoutJobPath(jobs));\n \n dispatch(addAndCheckQueryResponses(queryResponses, tempJobPaths, (success) => {\n callback(success);\n }));\n }\n else\n {\n dispatch(addAndCheckQueryResponses(queryResponses, tempJobPaths, (success) => {\n callback(success);\n }));\n callback(false);\n }\n } catch (error) {\n dispatch(addAndCheckQueryResponses(queryResponses, tempJobPaths, (success) => {\n callback(success);\n }));\n dispatch(getFilteredJobsError(\"couldn't filter jobs from query\"));\n }\n }\n}\n\nconst addAndCheckQueryResponses = (queryResponses: number[], tempJobPaths: JobPathModel[], callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n queryResponses.push(0);\n if(queryResponses?.length === tempJobPaths?.length)\n {\n dispatch(doneFetchingFilteredJobs(true));\n dispatch(isFetchingFilteredJobs(false));\n callback(true);\n }\n }\n}\n\nexport const fetchJobsByQueryObject = (queryObject: QueryObject, jobPaths: JobPathModel[], isAllJobs: boolean, addConceptUriDas: boolean, onlyQueryJobs: boolean, callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n orderResponseTimestamp = queryObject?.timeOfRequest?.getTime();\n let queryResponses: number[] = [];\n \n let tempJobPaths = [...jobPaths];\n \n for (let i = 0; i < tempJobPaths?.length; i++) \n {\n let jobpath = {...tempJobPaths[i]};\n if (jobpath)\n {\n jobpath.filteredOccupations = [];\n jobpath.filteredJobs = [];\n jobpath.similarQualifications = [];\n }\n\n let queryObjectClone = { ...queryObject };\n queryObjectClone.jobPath = {...jobpath};\n \n if (isEmptyOrUndefined(queryObjectClone?.conceptUriDas))\n queryObjectClone.conceptUriDas = [];\n \n if (addConceptUriDas)\n {\n if (queryObjectClone?.jobPath?.occupations?.length > 0)\n queryObjectClone.conceptUriDas = [...queryObjectClone.conceptUriDas!, ...queryObjectClone?.jobPath?.occupations?.map(x => x.conceptUriDa)];\n \n queryObjectClone.conceptUriDas = getProfessionOccupations(queryObjectClone?.jobPath?.profession, queryObjectClone.conceptUriDas!);\n }\n \n if (queryObjectClone && queryObjectClone.jobPath && queryObjectClone.jobPath.qualifications)\n {\n let qualificationsClone = [...queryObjectClone.jobPath.qualifications]\n queryObject.jobPath.qualifications = qualificationsClone.filter(qual => qual.isMapped);\n }\n \n if (!getState().jobs.isFetching)\n dispatch(isFetchingFilteredJobs(true));\n\n dispatch(handleJobsFromQuery(queryObjectClone, jobpath, queryResponses, tempJobPaths, isAllJobs, onlyQueryJobs, (success) => {\n callback(success);\n }));\n }\n }\n }\n\n export const checkQueryObjectFilters = (jobPath: JobPathModel, regions: RegionModel[], citizen: CitizenModel, jobPaths: JobPathModel[], queryFilters: QueryFilter[], distance: number,\n occupations: string[], isAllJobs: boolean, requestTime: Date, addConceptUriDas: boolean, onlyQueryJobs: boolean, callback: (success: boolean) => void) => {\n let queryObject: QueryObject = {} as QueryObject;\n let jobpathToUse = { ...jobPath };\n \n if (jobPath && jobPath.isFilterChosen) {\n queryObject = {\n jobPath: jobpathToUse,\n location: {\n longitude: citizen && citizen.longitude != undefined ? citizen.longitude : 9.5018,\n latitude: citizen && citizen.latitude != undefined ? citizen.latitude : 56.2639,\n maxDistance: distance,\n },\n regions: regions.filter(region => equals(region.checked, true)),\n queryFilters: queryFilters,\n conceptUriDas: occupations,\n timeOfRequest: requestTime,\n jobIdsToFilter: [],\n industries: [],\n keywords: [],\n };\n } else {\n queryObject = {\n jobPath: jobpathToUse,\n location: {\n longitude: citizen && citizen.longitude != undefined ? citizen.longitude : 9.5018,\n latitude: citizen && citizen.latitude != undefined ? citizen.latitude : 56.2639,\n maxDistance: distance,\n },\n regions: regions.filter(region => equals(region.checked, true)),\n queryFilters: queryFilters,\n conceptUriDas: occupations,\n timeOfRequest: requestTime,\n jobIdsToFilter: [],\n industries: [],\n keywords: [],\n };\n }\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n dispatch(fetchJobsByQueryObject(queryObject, [jobpathToUse], isAllJobs, addConceptUriDas, onlyQueryJobs, (success) => {\n callback(success);\n }));\n }\n }\n\n\nexport const getOccupationsFromQualfications = (qualifications: QualificationModel[], jobPathID: Guid) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const qualificationsAndPostcalcode: { qualifications: QualificationModel[], postalCode: string } = { qualifications: qualifications, postalCode: getState().citizen.citizen && getState().citizen.citizen.address ? getState().citizen.citizen.address.zipCode : '0' };\n const isAuth = getState().auth.account != null;\n const res = await fetch(addPublicToUrl(apiInfo.endpoints.JobService.GetOccupationsFromQualifications, isAuth), await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, qualificationsAndPostcalcode));\n if (res.ok) {\n let data: OccupationOpportunityModel[] = [];\n data = await res.json();\n data = data.map((oc) => {oc.id = oc.pId; return oc;});\n dispatch(setOccupationsFromQualifications(data, jobPathID));\n } else {\n }\n } catch (error) {\n }\n }\n}\n\nexport const fetchSimilarQualifications = (qualifications: QualificationModel[], jobPathID: Guid) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const isAuth = getState().auth.account != null;\n const res = await fetch(addPublicToUrl(apiInfo.endpoints.JobService.GetSimilarQualifcationsFromQualifications, isAuth), await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, qualifications));\n if (res.ok) {\n dispatch(setSimilarQualifications(await res.json(), jobPathID));\n } else {\n }\n } catch (error) {\n }\n }\n}\n\nexport const fetchSingleJobToDisplay = (jobID: string, isCompany?: boolean, isViregoOrder?: boolean) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n // using isfetching to show a loader on the cursor both for singlejobs and singlejobs + company occupations\n dispatch(isFetchingSingleJobsOrCompanyOccupations(true));\n const isAuth = getState().auth.account != null;\n const res = await fetch(isViregoOrder ? apiInfo.endpoints.JobService.GetJobByIdViregoByOrgName('dsa', jobID) : addPublicToUrl(apiInfo.endpoints.JobService.GetJobById, isAuth) + jobID, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok)\n {\n const data: JobDisplayModel = await res.json();\n if (data.cvr && data.cvr.toString().length > 0 && isCompany !== undefined && isCompany) {\n // setting the loader to false in fetchAllCompanyOccupations, because its still loading when fetching that data\n dispatch(fetchAllCompanyOccupations(data.cvr));\n dispatch(setJobToDisplay(data));\n } else {\n // no CVR, therefore no need to fetch company occupations and settings the loader to false\n dispatch(setIsDoneFetchingCompanyOccupations(true));\n dispatch(setJobToDisplay(data));\n dispatch(isFetchingSingleJobsOrCompanyOccupations(false));\n }\n\n } else {\n dispatch(isFetchingSingleJobsOrCompanyOccupations(false));\n dispatch(fetchSingleJobError(true));\n }\n } catch (error) {\n dispatch(isFetchingSingleJobsOrCompanyOccupations(false));\n dispatch(fetchSingleJobError(true));\n }\n }\n}\n\nexport const fetchSingleJob = (jobID: string, options: {isCompany?: boolean, isViregoOrder?: boolean}, callback: (success: boolean, job?: JobDisplayModel) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const isAuth = getState().auth.account != null;\n const res = await fetch(options?.isViregoOrder ? addPublicToUrl(apiInfo.endpoints.JobService.GetJobByIdViregoByOrgName('dsa', jobID), isAuth) + jobID : addPublicToUrl(apiInfo.endpoints.JobService.GetJobById, isAuth) + jobID, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok)\n {\n const data: JobDisplayModel = await res.json();\n // if (data?.cvr?.toString()?.length > 0 && options?.isCompany !== undefined && options?.isCompany)\n // dispatch(fetchAllCompanyOccupations(data.cvr));\n\n callback(true, data);\n } else {\n callback(false);\n }\n } catch (error) {\n callback(false);\n }\n }\n}\n\nexport const fetchAllCompanyOccupations = (cvr: number) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const isAuth = getState().auth.account != null;\n const res = await fetch(addPublicToUrl(apiInfo.endpoints.JobService.GetAllCompanyOccupationsFromCVR, isAuth) + cvr, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n dispatch(setCompanyOccupations(await res.json()));\n dispatch(setIsDoneFetchingCompanyOccupations(true));\n dispatch(isFetchingSingleJobsOrCompanyOccupations(false));\n } else {\n dispatch(setIsDoneFetchingCompanyOccupations(true));\n dispatch(fetchCompanyOccupationsError(true));\n dispatch(isFetchingSingleJobsOrCompanyOccupations(false));\n }\n } catch (error) {\n dispatch(setIsDoneFetchingCompanyOccupations(true));\n dispatch(fetchCompanyOccupationsError(true));\n dispatch(isFetchingSingleJobsOrCompanyOccupations(false));\n }\n }\n}\n\nexport const fetchJobsToDisplayFromIds = (jobIDs: string[]) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n if (jobIDs?.length > 0)\n {\n try {\n const valuesAndAttributeName: ValuesAndAttributeName = new ValuesAndAttributeName(jobIDs, 'id', '');\n const isAuth = getState().auth.account != null;\n const res = await fetch(addPublicToUrl(apiInfo.endpoints.JobService.GetSingleJobsToDisplay, isAuth), await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, valuesAndAttributeName));\n if (res.ok) {\n const data: JobDisplayModel[] = await res.json();\n dispatch(setSingleJobsToDisplay(data));\n } else {\n dispatch(setSingleJobsToDisplay([]));\n }\n } catch (error) {\n dispatch(setSingleJobsToDisplay([]));\n }\n }\n else\n dispatch(setSingleJobsToDisplay([]));\n }\n}","import * as actions from './types';\nimport JobPathModel from '../../models/JobPathModel';\nimport { AppState } from '..';\nimport QualificationModel from '../../models/QualificationModel';\nimport JobModel from '../../models/JobModel';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../AppActions';\nimport { Guid } from 'guid-typescript';\nimport { fetchSimilarQualifications, getOccupationsFromQualfications } from \"../Jobs/actions\";\nimport OccupationOpportunityModel from '../../models/OccupationOpportunityModel';\nimport { apiInfo } from '../../AzureAuth/ApiInfo';\nimport { getOptions } from '../../AzureAuth/api';\nimport HttpMethods from '../../models/HttpMethodsEnum';\nimport { setPinnedJobsInNewestMyPlanJobPath } from '../MyPlan/actions';\nimport { removedIndexOfJobInList, shouldFadeJobListIn } from '../SearchJob/actions';\nimport { handleRemoveQualificationAgreementsFromJobpath} from '../Agreement/actions';\nimport JobLogToJobMapModel from '../../models/JobLogToJobMapModel';\n\nexport const clearAllJobPathData = (): actions.JobPathActionTypes => ({\n type: actions.CLEAR_ALL_JOBPATH_DATA,\n});\n\nexport function AddJobPath(newJobPath: JobPathModel): actions.JobPathActionTypes {\n return {\n type: actions.ADD_JOBPATH,\n data: newJobPath,\n };\n}\n\nexport const addRemainingJobPath = (jobPath: JobPathModel): actions.JobPathActionTypes => ({\n type: actions.ADD_REMAINING_JOBPATH,\n data: jobPath,\n});\n\nexport function DeleteJobPath(jobpath: JobPathModel): actions.JobPathActionTypes {\n return {\n type: actions.DELETE_JOBPATH,\n data: jobpath,\n };\n}\n\nexport function UpdateJobPath(jobpath: JobPathModel): actions.JobPathActionTypes {\n return {\n type: actions.UPDATE_JOBPATH,\n data: jobpath,\n };\n}\n\nexport const addPinnedJob = (job: JobModel): actions.JobPathActionTypes => ({\n type: actions.ADD_PINNED_JOB_TO_PINNEDJOBS,\n data: job,\n});\n\nexport const removePinnedJob = (job: JobModel): actions.JobPathActionTypes => ({\n type: actions.REMOVE_PINNED_JOB_FROM_PINNEDJOBS,\n data: job,\n});\n\nexport const addPinnedJobsFromMyPlan = (jobs: JobModel[]): actions.JobPathActionTypes => ({\n type: actions.ADD_PINNED_JOBS_TO_MYPLAN,\n data: jobs,\n});\n\nexport const clearPinnedJobs = (): actions.JobPathActionTypes => ({\n type: actions.CLEAR_PINNED_JOBS\n});\n\nexport const setRemovedJobPaths = (jobPaths: JobPathModel[]): actions.JobPathActionTypes => ({\n type: actions.SET_JOBPATHS_REMOVED,\n data: jobPaths,\n});\n\nexport const isFilterChosen = (isFilterChosen: boolean, jobPath: JobPathModel): actions.JobPathActionTypes => ({\n type: actions.IS_FILTER_CHOSEN,\n isFilterChosen: isFilterChosen,\n jobPath: jobPath,\n});\n\nexport const deleteQualificationFromJobPath = (\n data: QualificationModel,\n jobPath: JobPathModel\n): actions.JobPathActionTypes => ({\n type: actions.DELETE_JOBPATH_QUALIFICATION,\n data: data,\n jobPath: jobPath,\n});\n\nexport const setQualificationsDragAndDrop = (\n data: QualificationModel[]\n): actions.JobPathActionTypes => ({\n type: actions.SET_QUALIFICATIONLIST_DRAGANDDROP,\n data: data,\n});\n\nexport const setJobPathListDragAndDrop = (\n data: JobPathModel[]\n): actions.JobPathActionTypes => ({\n type: actions.SET_JOBPATHLIST_DRAGANDDROP,\n data: data,\n});\n\nexport function AddJobToJobPath(job: JobModel, isShowingJobs: boolean): actions.JobPathActionTypes {\n return {\n type: actions.ADD_JOB_TO_JOBPATH,\n data: job,\n isShowingJobs: isShowingJobs,\n };\n}\n\nexport const setJobPathsEqualToMyPlan = (jobPathList: JobPathModel[], isDraftMeeting: boolean, newestMyPlanJobPaths: JobPathModel[]): actions.JobPathActionTypes => ({\n type: actions.SET_JOBPATHS_TO_MYPLAN_JOBPATHS,\n data: jobPathList,\n isDraftMeeting: isDraftMeeting,\n newestMyPlanJobPaths: newestMyPlanJobPaths,\n});\n\nexport const isMyPlanJobPathsAddedToJobpaths = (isAdded: boolean): actions.JobPathActionTypes => ({\n type: actions.IS_MYPLAN_JOBPATHS_ADDED_TO_JOBPATHS,\n data: isAdded,\n});\n\nexport const removeJobFromJobpath = (jobId: string, jobPathId: Guid): actions.JobPathActionTypes => ({\n type: actions.REMOVE_JOB_FROM_JOBPATH,\n jobId: jobId,\n jobPathID: jobPathId,\n});\n\nexport const removeJobFromFilteredJobsInJobpath = (job: JobModel): actions.JobPathActionTypes => ({\n type: actions.REMOVE_JOB_FROM_FILTEREDJOBS,\n data: job,\n});\n\nexport const addJobToFilteredJobsInJobpath = (job: JobModel): actions.JobPathActionTypes => ({\n type: actions.ADD_JOB_TO_FILTEREDJOBS,\n data: job,\n});\n\n\nexport const setOccupationsFromQualifications = (occupations: OccupationOpportunityModel[], jobPathID: Guid): actions.JobPathActionTypes => ({\n type: actions.SET_OCCUPATIONS_FROM_QUALIFICATIONS,\n data: occupations,\n jobpathID: jobPathID,\n});\n\nexport const setSimilarQualifications = (qualifications: QualificationModel[], jobPathID: Guid): actions.JobPathActionTypes => ({\n type: actions.SET_SIMILAR_QUALIFICATIONS,\n data: qualifications,\n jobpathID: jobPathID,\n});\n\nexport const setJobPathToDisplay = (jobpathID: Guid): actions.JobPathActionTypes => ({\n type: actions.SET_JOBPATH_TO_DISPLAY,\n data: jobpathID,\n});\n\nexport const updateJobPathFilteredJobs = (jobpathID: Guid, filteredJobs: JobModel[]): actions.JobPathActionTypes => ({\n type: actions.UPDATE_FILTERED_JOBS_JOBPATH,\n data: filteredJobs,\n jobPathID: jobpathID,\n});\n\nexport const clearJobPathData = (): actions.JobPathActionTypes => ({\n type: actions.CLEAR_JOBPATH_DATA,\n});\n\nexport const setJobPathJobConfirmedHandled = (jobpathID: Guid, jobID: string, isCompanyJob: boolean): actions.JobPathActionTypes => ({\n type: actions.SET_JOBPATH_JOB_CONFIRMED_HANDLED,\n jobpathID: jobpathID,\n jobID: jobID,\n isCompanyJob: isCompanyJob\n});\n\nexport const setAllJobpathsToFilterChosen = (): actions.JobPathActionTypes => ({\n type: actions.SET_ALL_JOBPATHS_TO_FILTER_CHOSEN,\n});\n\nexport const setShouldDisplayAllJobs = (): actions.JobPathActionTypes => ({\n type: actions.SET_SHOULD_DISPLAY_ALL_JOBS,\n});\n\nexport const setPinnedJobsFromNewestMyPlan = (pinnedJobs: JobModel[], job: JobModel): actions.JobPathActionTypes => ({\n type: actions.SET_PINNED_JOBS_FROM_NEWEST_MYPLAN,\n data: pinnedJobs,\n job: job,\n});\n\nexport const setJobPaths = (data: JobPathModel[]): actions.JobPathActionTypes => ({\n type: actions.SET_JOBPATHS,\n data: data,\n});\n\nexport const addJobSearchIdToJobPath = (jobPathID: Guid, jobLogToJob: JobLogToJobMapModel): actions.JobPathActionTypes => ({\n type: actions.ADD_JOBSEARCH_ENTRY_ID_TO_JOBPATHS,\n jobPathID: jobPathID,\n jobLogToJob: jobLogToJob,\n});\n\nexport const removeJobSearchIdFromJobPath = (jobSearchId: Guid, jobPathID: Guid): actions.JobPathActionTypes => ({\n type: actions.REMOVE_JOBSEARCH_ENTRY_ID_FROM_JOBPATH,\n jobSearchId: jobSearchId,\n jobPathID: jobPathID,\n});\n\nexport const startUpdateJobPath = (jobPath: JobPathModel) => {\n return (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n dispatch(UpdateJobPath(jobPath));\n };\n};\n\nexport const startAddJobPath = (jobPath: JobPathModel) => {\n return (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n dispatch(AddJobPath(jobPath));\n };\n};\n\nexport const startDeleteJobPath = (jobPath: JobPathModel) => {\n return (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n dispatch(handleRemoveQualificationAgreementsFromJobpath(jobPath));\n dispatch(DeleteJobPath(jobPath));\n };\n};\n\nexport const setJobPathStateByNewestPlanOrDraftPlan = (jobPathsToFilter: JobPathModel[], isDraftMeeting: boolean) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n if(jobPathsToFilter && jobPathsToFilter.length > 0)\n {\n let activeJobPaths = jobPathsToFilter.filter(j => j.isActive);\n if(activeJobPaths && activeJobPaths.length > 0)\n {\n dispatch(setJobPathsEqualToMyPlan(activeJobPaths, isDraftMeeting, getState()?.myPlanMeeting?.newestMyPlan?.myPlan?.jobPaths));\n\n let pinnedJobs: JobModel[] = [];\n for(let i = 0; i < activeJobPaths.length; i++)\n {\n if(activeJobPaths[i].pinnedJobs && activeJobPaths[i].pinnedJobs.length > 0)\n {\n pinnedJobs = pinnedJobs.concat(activeJobPaths[i].pinnedJobs);\n }\n }\n dispatch(addPinnedJobsFromMyPlan(pinnedJobs));\n \n activeJobPaths.map((jobpath) => {\n if (jobpath.name !== 'Øvrige' && jobpath.qualifications && jobpath.qualifications.length > 0) {\n dispatch(getOccupationsFromQualfications(jobpath.qualifications, jobpath.id));\n dispatch(fetchSimilarQualifications(jobpath.qualifications, jobpath.id));\n }\n });\n }\n\n if (isDraftMeeting)\n {\n let removedJobPaths = jobPathsToFilter.filter(j => !j.isActive);\n if (removedJobPaths?.length > 0)\n { \n dispatch(setRemovedJobPaths(removedJobPaths));\n }\n }\n\n }\n \n };\n};\n\nexport const postPinnedJobIdsToNewestMyPlan = (citizenGuid: Guid, pinnedJobs: JobModel[], job: JobModel, jobIndex: number) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n //dispatch(first)\n try {\n let pinnedJobIds: string[] = [];\n if(pinnedJobs && pinnedJobs.length > 0)\n {\n pinnedJobIds = pinnedJobs.map(job => job.id); \n }\n\n if(job?.jobPathId?.toString() === Guid.EMPTY)\n job.jobPathId = getState()?.jobPathList?.remainingJobPath?.id;\n\n const res = await fetch(apiInfo.endpoints.MyPlanService.PostPinnedJobsToNewestMyPlan + citizenGuid + '/jobpath/' + job.jobPathId + '/pinnedjobs', await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, pinnedJobIds));\n if (res.ok) {\n dispatch(shouldFadeJobListIn(true));\n if(jobIndex > -1)\n {\n dispatch(removedIndexOfJobInList(jobIndex));\n }\n setTimeout(() => {\n dispatch(shouldFadeJobListIn(false));\n }, 400);\n dispatch(setPinnedJobsFromNewestMyPlan(pinnedJobs, job));\n dispatch(setPinnedJobsInNewestMyPlanJobPath(pinnedJobs, job.jobPathId));\n } else {\n // error\n }\n } catch (error) {\n //dispatch(error);\n }\n }\n}","import JobPathModel from './JobPathModel';\nimport TextAgreement from './Agreement/TextAgreementModel';\nimport JobModel from './JobModel';\nimport QualificationAgreementModel from './Agreement/QualificationAgreementModel';\nimport JobLogEntryModel from './JobLogEntryModel';\nimport DataResponseModel from './Template/DataResponseModel';\n\nexport enum FormattedMyPlanEntities\n{\n PlanDescription = 0,\n Agreements = 1,\n FullPlan = 2\n}\n\nexport class MyPlanModel {\n jobPaths: JobPathModel[];\n textAgreements: TextAgreement[];\n qualificationAgreements: QualificationAgreementModel[];\n jobLogList: JobLogEntryModel[];\n remarks: string;\n customData: DataResponseModel;\n\n constructor(jobPaths: JobPathModel[], textAgreements: TextAgreement[], qualificationAgreements: QualificationAgreementModel[], joblogList: JobLogEntryModel[], remarks: string, customData: DataResponseModel) {\n this.jobPaths = jobPaths;\n this.textAgreements = textAgreements;\n this.qualificationAgreements = qualificationAgreements;\n this.jobLogList = joblogList;\n this.remarks = remarks;\n this.customData = customData;\n }\n}\n\nexport default MyPlanModel;","import { ChartData } from \"chart.js\";\nimport JobLogEntryModel from \"../../models/JobLogEntryModel\";\nimport JobModel from \"../../models/JobModel\";\nimport JobPathModel from \"../../models/JobPathModel\";\nimport * as actions from \"./types\";\n\nexport const clearAllPreparationData = (): actions.PreparationActionTypes => ({\n type: actions.CLEAR_ALL_PREPARATION_DATA,\n});\n\nexport const setViewToDisplayFromHeader = (viewToDisplay: string): actions.PreparationActionTypes => ({\n type: actions.SET_VIEW_FROM_LOWER_HEADER,\n data: viewToDisplay,\n});\n\nexport const setFilteredJobLogsFromJobpath = (filteredJoblogsAndJobpath: [JobLogEntryModel[], JobPathModel][]): actions.PreparationActionTypes => ({\n type: actions.SET_FILTERED_JOBSLOGS_FROM_JOBPATH,\n data: filteredJoblogsAndJobpath,\n});\n\nexport const setJobLogsWithoutJobPathID = (remainingJoblogs: JobLogEntryModel[]): actions.PreparationActionTypes => ({\n type: actions.SET_JOBLOGS_WITHOUT_JOBPATH_ID,\n data: remainingJoblogs,\n});\n\nexport const setIsLoadingDonutChart = (isLoading: boolean): actions.PreparationActionTypes => ({\n type: actions.SET_IS_LOADING_DONUT_CHART,\n isLoading: isLoading,\n});\n\nexport const setIsLoadingStackedBarChart = (isLoading: boolean): actions.PreparationActionTypes => ({\n type: actions.SET_IS_LOADING_STACKED_BAR_CHART,\n isLoading: isLoading,\n});\n\nexport const shouldDisplayLoader = (isLoading: boolean): actions.PreparationActionTypes => ({\n type: actions.SET_LOADER,\n isLoading: isLoading,\n});\n\nexport const setJobsInMapWithJobPathOverview = (jobs: JobModel[]): actions.PreparationActionTypes => ({\n type: actions.SET_JOBS_WITH_JOBPATH_OVERVIEW,\n data: jobs,\n});\n\nexport const setJobsInMapWithoutJobPathOverview = (jobs: JobModel[]): actions.PreparationActionTypes => ({\n type: actions.SET_JOBS_WITHOUT_JOBPATH_OVERVIEW,\n data: jobs,\n});\n","export enum PersonCategoryIdentifier\n{\n Jobparat = 4,\n Aktivitetsparat = 5,\n Åbenlyst_uddannelsesparat = 6,\n Uddannelsesparat = 7,\n Ikke_visiteret = 8,\n Visitationskategori_1 = 9,\n Visitationskategori_2 = 10,\n Visitationskategori_3 = 11\n}","import swal from 'sweetalert2';\n\nexport enum ToastIcon {\n SUCCESS = \"success\",\n WARNING = \"warning\",\n ERROR = \"error\"\n}\n\nexport const TopToast = (toastIcon: ToastIcon) => swal.mixin({\n toast: true,\n icon: toastIcon,\n backdrop: false,\n position: 'top',\n showConfirmButton: false,\n timer: 2500,\n timerProgressBar: true,\n customClass: {\n container: 'swal-toast-container',\n icon: 'toast-icon',\n popup: toastIcon === ToastIcon.SUCCESS ? 'toast-popup' : toastIcon === ToastIcon.WARNING ? 'toast-popup toast-warning' : 'toast-popup toast-error',\n title: 'toast-title',\n header: 'toast-header',\n content: 'toast-content',\n }\n});","import { Guid } from \"guid-typescript\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { AppState } from \"..\";\nimport { getOptions } from \"../../AzureAuth/api\";\nimport { apiInfo } from \"../../AzureAuth/ApiInfo\";\nimport { createGuid } from \"../../helpers/CreateGuid\";\nimport { isObjEmpty } from \"../../helpers/TypeChecks\";\nimport CitizenModel from \"../../models/CitizenModel\";\nimport HttpMethods from \"../../models/HttpMethodsEnum\";\nimport TagInput, { InputType } from \"../../models/Template/DataTypes/TagInput\";\nimport InputModel, { InputDataType, ValueType } from \"../../models/Template/InputModel\";\nimport JobMatchTemplateModel from \"../../models/Template/JobMatchTemplateModel\";\nimport DataGroup from \"../../models/Template/TemplateModel\";\nimport { AppActions } from \"../AppActions\";\nimport * as actions from \"./types\";\n\nexport const clearAllTemplateData = (): actions.TemplateActionTypes => ({\n type: actions.CLEAR_ALL_TEMPLATE_DATA,\n});\n\nexport const setTemplateData = (jobMatchTemplates: JobMatchTemplateModel): actions.TemplateActionTypes => ({\n type: actions.SET_JOBMATCH_TEMPLATES,\n data: jobMatchTemplates\n});\n\nexport const setValuesOnTemplate = (template: DataGroup, input: InputModel): actions.TemplateActionTypes => ({\n type: actions.SET_VALUE_ON_TEMPLATE,\n data: input,\n template: template,\n});\n\nexport const updateValuesOnTemplateData = (template: DataGroup, input: InputModel): actions.TemplateActionTypes => ({\n type: actions.UPDATE_TEMPLATE_VALUE,\n data: input,\n template: template,\n});\n\nexport const removeValuesOnTemplate = (template: DataGroup, input: InputModel, valueToRemove: string): actions.TemplateActionTypes => ({\n type: actions.REMOVE_VALUE_ON_TEMPLATE,\n data: input,\n template: template,\n valueToRemove: valueToRemove\n});\n\nexport const setIsTemplateSaved = (isSaved: boolean): actions.TemplateActionTypes => ({\n type: actions.IS_TEMPLATE_SAVED,\n data: isSaved\n});\n\nexport const setIsSavingTemplate = (isSaving: boolean): actions.TemplateActionTypes => ({\n type: actions.BEGIN_SAVE_TEMPLATE,\n data: isSaving\n});\n\nexport const clearGuidanceValuesFromDataFields = (): actions.TemplateActionTypes => ({\n type: actions.CLEAR_GUIDANCE_VALUES_ON_DATA_FIELDS,\n});\n\nexport const setHasBeenScreened = (screening: DataGroup): actions.TemplateActionTypes => ({\n type: actions.SET_HAS_BEEN_SCREENED,\n screening: screening\n});\n\n\nexport const fetchTemplateFromUser = (citizen : CitizenModel, callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n //dispatch(first)\n let contactGroupId: number = -1; \n let personCategoryId: number = -1; \n\n if(citizen)\n {\n if(citizen.contactGroup)\n {\n contactGroupId = citizen.contactGroup.contactGroupIdentifier;\n }\n\n if(citizen.personCategory)\n {\n personCategoryId = citizen.personCategory.identifier;\n }\n }\n if(contactGroupId != -1)\n {\n try {\n const res = await fetch(apiInfo.endpoints.UtilityService.GetJobmatchConfiguration + \"contactgroup/\" + contactGroupId + \"/personcategory/\" + personCategoryId, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n const data: JobMatchTemplateModel = await res.json();\n if (data && !isObjEmpty(data))\n {\n let guidance = new DataGroup(createGuid(), [], 'Tilbud');\n let taginput = new TagInput(createGuid(), '', [\"DSA tilbud 1\", \"DSA tilbud 2\", \"DSA tilbud 3\", \"DSA tilbud 4\", \"DSA tilbud 5\", \"DSA tilbud 6\", \"DSA tilbud 7\"], InputType.checkbox, '');\n guidance.inputs = [\n taginput\n ];\n\n data.guidanceDataGroup = guidance;\n dispatch(setTemplateData(data));\n callback(true);\n \n // determines whether or not we should display Screening modal if it's empty.\n if(data.screeningDataGroup)\n {\n dispatch(setHasBeenScreened(data.screeningDataGroup));\n }\n }\n else\n callback(false);\n } \n else \n {\n callback(false);\n }\n } catch (error) {\n //dispatch(error);\n callback(false);\n }\n }\n else \n callback(false);\n\n }\n}\n\nexport const saveTemplate = (template: DataGroup) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n dispatch(setIsSavingTemplate(true));\n try {\n // const res = await fetch(apiInfo.endpoints.SAVETEMPLATE, await getOptions(HttpMethods.POST, apiInfo.scopes.TEMPLATE, template));\n const res: any = new Response;\n if (res.ok) {\n // setting timeout to make compentdidupdate catch up if success or error\n setTimeout(() => {\n dispatch(setIsTemplateSaved(false));\n dispatch(setIsSavingTemplate(false));\n }, 250);\n } else {\n // setting timeout to make compentdidupdate catch up if success or error\n setTimeout(() => {\n dispatch(setIsTemplateSaved(false));\n dispatch(setIsSavingTemplate(false));\n }, 250);\n }\n } catch (error) {\n // setting timeout to make compentdidupdate catch up if success or error\n setTimeout(() => {\n dispatch(setIsTemplateSaved(false));\n dispatch(setIsSavingTemplate(false));\n }, 250);\n }\n }\n}","import CitizenModel from '../../models/CitizenModel';\nimport { CitizenActionTypes } from './types';\nimport * as actions from './types';\nimport { AppActions } from '../AppActions';\nimport { AppState } from '../index';\nimport { Guid } from \"guid-typescript\";\nimport { _Text } from '../../i18n/translations';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { apiInfo } from '../../AzureAuth/ApiInfo';\nimport HttpMethods from \"../../models/HttpMethodsEnum\";\nimport { getOptions } from '../../AzureAuth/api';\nimport { setTempJobLogList } from '../MyPlan/actions';\nimport { JobSearchDefinition } from '../../models/JobSearchDefinition';\nimport { DFDG_MyPlanVersion } from '../../models/DFDG_MyPlanVersion';\nimport { BookingModel } from '../../models/BookingModel';\nimport DataGroup from '../../models/Template/TemplateModel';\nimport DataResponseModel from '../../models/Template/DataResponseModel';\nimport { ApiResponseEnumModel } from '../../models/ApiResponseEnumModel';\nimport { fetchTemplateFromUser } from '../Template/actions';\nimport { isEmptyOrUndefined } from '../../helpers/TypeChecks';\nimport { alphabeticallySort } from '../../helpers/ListHelper';\nimport { addPublicToUrl } from '../../helpers/UrlHelper';\n\nexport const clearAllCitizenData = (): actions.CitizenActionTypes => ({\n type: actions.CLEAR_ALL_CITIZEN_DATA,\n});\n\n\nexport const getCitizen = (citizen: CitizenModel): CitizenActionTypes => ({\n type: actions.GET_CITIZEN,\n data: citizen,\n});\n\nconst searchCitizen = (citizenID: Guid): CitizenActionTypes => ({\n type: actions.SEARCH_CITIZEN,\n data: citizenID,\n});\n\nexport const clearCitizen = (): CitizenActionTypes => ({\n type: actions.CLEAR_CITIZEN,\n});\n\nexport const UpdateCitizenTravelTime = (citizen: CitizenModel): CitizenActionTypes => ({\n type: actions.UPDATE_TRAVEL_TIME_CITIZEN,\n data: citizen,\n});\n\nexport const setJobBaroMeter = (url: string): actions.CitizenActionTypes => ({\n type: actions.SET_JOBBAROMETER,\n data: url\n});\n\nexport const loadingCitizenData = (isLoading: boolean): actions.CitizenActionTypes => ({\n type: actions.IS_LOADING_CITIZEN,\n data: isLoading\n});\n\nexport const setUnEmploymentFundName = (unemploymentName: string): actions.CitizenActionTypes => ({\n type: actions.SET_CITIZEN_UNEMPLOYMENT_FUND,\n data: unemploymentName\n});\n\nexport const setJobSearchDefinitionList = (list: JobSearchDefinition[]): actions.CitizenActionTypes => ({\n type: actions.SET_JOBSEARCH_DEFINITION_LIST,\n data: list\n});\n\nexport const setDFDGMyPlanVersions = (list: DFDG_MyPlanVersion[]): actions.CitizenActionTypes => ({\n type: actions.SET_DFDG_MYPLAN_VERSIONS,\n data: list\n});\n\nexport const setCitizenBookings = (bookings: BookingModel[]): actions.CitizenActionTypes => ({\n type: actions.SET_CITIZEN_BOOKINGS,\n data: bookings,\n});\n\nexport const setChosenBooking = (booking: BookingModel): actions.CitizenActionTypes => ({\n type: actions.SET_CHOSEN_BOOKING,\n data: booking,\n});\n\nexport const setDocumentFromJobLog = (document: Blob): actions.CitizenActionTypes => ({\n type: actions.SET_DOCUMENT,\n data: document,\n});\n\nexport const postDataGroupToCitizen = (response: DataResponseModel): actions.CitizenActionTypes => ({\n type: actions.POST_DATA_GROUP_TO_CITIZEN,\n data: response,\n});\n\nexport const setCitizenResponseEnum = (response: ApiResponseEnumModel): actions.CitizenActionTypes => ({\n type: actions.SET_CITIZEN_DATA_RESPONSE_ENUM,\n data: response,\n});\n\nexport const clearDocument = (): actions.CitizenActionTypes => ({\n type: actions.CLEAR_DOCUMENT,\n});\n\nexport const setDocumentResponseEnum = (response: ApiResponseEnumModel): actions.CitizenActionTypes => ({\n type: actions.SET_DOCUMENT_API_RESPONSE,\n data: response,\n});\n\nexport const setNewestDataResponse = (response: DataResponseModel): actions.CitizenActionTypes => ({\n type: actions.SET_NEWEST_DATA_RESPONSE,\n data: response,\n});\n\nexport const setEarliestJobSearchDefinition = (jobSearchDefinition: JobSearchDefinition): actions.CitizenActionTypes => ({\n type: actions.SET_EARLIEST_JOBSEARCH_DEFINITION,\n data: jobSearchDefinition,\n});\n\n\nexport const getCitizenByID = (citizenID: Guid) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const res = await fetch(apiInfo.endpoints.CitizenService.GetCitizenById + citizenID, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n const data: CitizenModel = await res.json();\n dispatch(fetchTemplateFromUser(data, (success: boolean) => {\n if (success)\n {\n dispatch(setCitizenResponseEnum(ApiResponseEnumModel.SUCCESS));\n dispatch(getCitizen(data));\n dispatch(loadingCitizenData(false));\n\n if (isEmptyOrUndefined(data.jobLog)) \n data.jobLog = [];\n \n // +new Date is an unary operator, which tries to convert the date to a number. Same as Number(new Date(());\n if (data.jobLog?.length > 0)\n data.jobLog = data.jobLog.slice().sort((a, b) => +new Date(b.jobSearched!) - +new Date(a.jobSearched!));\n \n dispatch(setTempJobLogList(data.jobLog));\n }\n else \n {\n dispatch(loadingCitizenData(false));\n dispatch(setCitizenResponseEnum(ApiResponseEnumModel.ERROR));\n }\n }));\n\n } else {\n dispatch(loadingCitizenData(false));\n dispatch(setCitizenResponseEnum(ApiResponseEnumModel.ERROR));\n }\n } catch (error) {\n dispatch(loadingCitizenData(false));\n dispatch(setCitizenResponseEnum(ApiResponseEnumModel.ERROR));\n }\n };\n};\n\nexport const searchCitizenByCPR = (cpr: string) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n //dispatch(first)\n try {\n dispatch(loadingCitizenData(true));\n\n const res = await fetch(apiInfo.endpoints.CitizenService.SearchCitizen, await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, cpr));\n if (res.ok) {\n const data = await res.json();\n dispatch(searchCitizen(data));\n dispatch(getCitizenByID(data));\n } else {\n //dispatch(error)\n dispatch(loadingCitizenData(false));\n }\n } catch (error) {\n //dispatch(error);\n dispatch(loadingCitizenData(false));\n }\n }\n}\n\nexport const getJobBarometerFromAPI = (citizen: CitizenModel) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const isAuth = getState().auth.account != null;\n const res = await fetch(addPublicToUrl(apiInfo.endpoints.JobService.GetJobBarometer, isAuth) + '?lat=' + citizen?.latitude + '&lon=' + citizen?.longitude, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n dispatch(setJobBaroMeter(await res.json()));\n } else {\n }\n } catch (error) {\n }\n }\n}\n\nexport const fetchDFDGMyPlanVersions = (citizenGuid: Guid) => {\n return async (\n dispatch: ThunkDispatch,\n ) => {\n try {\n const res = await fetch(apiInfo.endpoints.CitizenService.GetMyPlanVersions + citizenGuid + '/dfdg' + '/MyPlanVersions', await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n dispatch(setDFDGMyPlanVersions(await res.json()));\n } else {\n }\n } catch (error) {\n }\n }\n}\n\nexport const fetchCitizenBookings = (citizenGuid: Guid) => {\n return async (\n dispatch: ThunkDispatch,\n ) => {\n try {\n const res = await fetch(apiInfo.endpoints.CitizenService.GetCitizenBookingsByGuid + citizenGuid + '/bookings', await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n dispatch(setCitizenBookings(await res.json()));\n } else {\n }\n } catch (error) {\n }\n }\n}\n\n\nexport const fetchDocumentFromJobLog = (citizenGuid: Guid, documentGuid: Guid) => {\n return async (\n dispatch: ThunkDispatch,\n ) => {\n try {\n const res = await fetch(apiInfo.endpoints.CitizenService.GetDocumentFromJobLog + citizenGuid + '/document/' + documentGuid, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n dispatch(setDocumentFromJobLog(await res.blob()));\n dispatch(setDocumentResponseEnum(ApiResponseEnumModel.SUCCESS));\n } else {\n dispatch(setDocumentResponseEnum(ApiResponseEnumModel.ERROR));\n }\n } catch (error) {\n dispatch(setDocumentResponseEnum(ApiResponseEnumModel.ERROR));\n }\n }\n}\n\nexport const postDataGroupToCitizenService = (citizenGuid: Guid, dataGroup: DataGroup, callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch\n ) => {\n try {\n const res = await fetch(apiInfo.endpoints.CitizenService.PostDataResponse + citizenGuid + '/dataresponse', await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, dataGroup));\n if (res.ok) \n {\n const data: DataResponseModel = await res.json();\n dispatch(postDataGroupToCitizen(data));\n callback(true);\n } \n else \n {\n // error\n callback(false);\n }\n } catch (error) {\n callback(false);\n }\n }\n}\n\nexport const fetchNewestDataResponse = (citizenGuid: Guid, dataGroupID: Guid, callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch\n ) => {\n try {\n const res = await fetch(apiInfo.endpoints.CitizenService.GetNewestDataResponse + citizenGuid + '/dataresponse/' + dataGroupID + '/latest', await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) \n {\n const data: DataResponseModel = await res.json();\n dispatch(setNewestDataResponse(data));\n callback(true);\n } \n else \n {\n // error\n callback(false);\n }\n } catch (error) {\n callback(false);\n }\n }\n}\n\n","export enum TableButtonTypes {\n NONE,\n INSPECT,\n DELETE,\n UPDATE,\n ADD_BUTTON_ROUNDED,\n PIN,\n TEXT,\n TABLE_ROW,\n INSPECT_EYE\n}\n\nexport default class TableOptionsModel {\n value: string; \n options?: {\n textToWrap?: string[];\n usePin?: boolean;\n usePinWithText?: boolean;\n dropdown?: {\n id: number,\n values: string[],\n additionalClassNames?: string,\n style?: React.CSSProperties,\n useImg?: boolean,\n };\n progressbar?: boolean;\n tagItem?: boolean;\n checkbox?: {useCheckbox: boolean, checked: boolean};\n smallTd?: boolean;\n mediumTd?: boolean;\n largeTd?: boolean;\n alignCenter?: boolean;\n constrainText?: boolean;\n useLoader?: boolean;\n shrinkTable?: boolean;\n usePlusIconWithText?: boolean;\n useCheckMarkIconWithText?: boolean;\n tooltip?: string;\n button?: {\n inspectBtn?: boolean,\n deleteBtn?: boolean,\n updateBtn?: boolean,\n btnRounded?: boolean,\n eyeBtn?: boolean,\n disable?: boolean,\n };\n imageWithText?: any;\n }; \n\n constructor(\n value: string,\n options?: {\n textToWrap?: string[],\n usePin?: boolean,\n usePinWithText?: boolean,\n dropdown?: {\n id: number,\n values: string[],\n additionalClassNames?: string,\n style?: React.CSSProperties,\n useImg?: boolean,\n };\n progressbar?: boolean,\n tagItem?: boolean,\n checkbox?: {\n useCheckbox: boolean,\n checked: boolean\n },\n smallTd?: boolean,\n mediumTd?: boolean,\n largeTd?: boolean,\n alignCenter?: boolean,\n constrainText?: boolean,\n useLoader?: boolean,\n shrinkTable?: boolean,\n usePlusIconWithText?: boolean,\n useCheckMarkIconWithText?: boolean,\n tooltip?: string,\n button?: {\n inspectBtn?: boolean,\n deleteBtn?: boolean,\n updateBtn?: boolean,\n btnRounded?: boolean,\n eyeBtn?: boolean,\n disable?: boolean,\n },\n imageWithText?: any,\n }\n )\n {\n this.value = value;\n this.options = options;\n }\n}","import * as actions from \"./types\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { AppActions } from \"../AppActions\";\nimport { AppState } from \"..\";\nimport { apiInfo } from \"../../AzureAuth/ApiInfo\";\nimport { getOptions } from \"../../AzureAuth/api\";\nimport HttpMethods from \"../../models/HttpMethodsEnum\";\nimport { Guid } from \"guid-typescript\";\nimport { DraftMeeting } from \"../../models/DraftMeeting\";\nimport { ToastIcon, TopToast } from \"../../helpers/ToastHelper\";\nimport { createGuid } from \"../../helpers/CreateGuid\";\nimport { MeetingModel } from \"../../models/MeetingModel\";\n\n\nexport const setDraftMeetingAsDraftPlan = (draftPlan: DraftMeeting): actions.DraftPlanActionTypes => ({\n type: actions.SET_DRAFT_PLAN,\n data: draftPlan,\n});\n\nexport const setDraftPlans = (draftPlans: DraftMeeting[]): actions.DraftPlanActionTypes => ({\n type: actions.SET_DRAFT_PLANS,\n data: draftPlans,\n});\n\nexport const setDraftPlanIntervalID = (intervalID: NodeJS.Timeout): actions.DraftPlanActionTypes => ({\n type: actions.SET_DRAFT_PLAN_INTERVAL_ID,\n data: intervalID,\n});\n\nexport const postDraftMeeting = (meeting: MeetingModel, isAutoSave: boolean) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n //dispatch(first)\n try {\n const res = await fetch(apiInfo.endpoints.MyPlanService.SaveDraftMeeting + isAutoSave, await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, meeting));\n if (res.ok) {\n if (!isAutoSave)\n {\n TopToast(ToastIcon.SUCCESS).fire({\n title: 'Kladde blev gemt',\n timer: 2500,\n backdrop: false,\n });\n }\n }\n } catch (error) {\n if (!isAutoSave)\n {\n TopToast(ToastIcon.ERROR).fire({\n title: 'Fejl! Kladde blev ikke gemt',\n timer: 2500,\n backdrop: false,\n });\n }\n }\n }\n}\n\nexport const fetchAllDraftMeetings = (citizenID: Guid, callback: (success: boolean, data: DraftMeeting[]) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n //dispatch(first)\n try {\n const res = await fetch(apiInfo.endpoints.MyPlanService.GetAllDraftMeetings + citizenID, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) \n {\n const data: DraftMeeting[] = await res.json();\n let draftPlans: DraftMeeting[] = [];\n if(data?.length > 0)\n {\n data.map((plan) => {\n if (plan?.id?.toString() === Guid.EMPTY)\n plan.id = createGuid();\n plan.timeStamp = new Date(plan.timeStamp)\n\n draftPlans = [...draftPlans, plan];\n });\n }\n callback(true, draftPlans);\n dispatch(setDraftPlans(draftPlans));\n } \n else \n {\n callback(false, []);\n }\n } catch (error) {\n callback(false, []);\n }\n }\n}","import MyPlanModel from './MyPlanModel';\nimport { Guid } from \"guid-typescript\"\nimport { InterviewTypeIdentifier } from './InterviewTypeIdentifier';\nimport { PlanTypeIdentifier } from './PlanTypeIdentifier';\nimport { ParticipationStatusTypeIdentifier } from './ParticipationStatusTypeIdentifier';\nimport { InterviewParticipant } from './InterviewParticipant';\nimport { InterviewContactTypeIdentifier } from './InterviewContactTypeIdentifier';\n\nexport class MeetingModel {\n userID: Guid;\n timeStamp: Date;\n citizenID: Guid;\n myPlan: MyPlanModel;\n interviewType: InterviewTypeIdentifier;\n planTypeIdentifier: PlanTypeIdentifier;\n interviewContactType: InterviewContactTypeIdentifier;\n participationStatusType: ParticipationStatusTypeIdentifier;\n interviewWithmoreAuthorities: boolean;\n interviewParticipants: InterviewParticipant[];\n bookingID: Guid;\n\n constructor(userID: Guid, timeStamp: Date, myPlan: MyPlanModel, citizenID: Guid, interviewType: InterviewTypeIdentifier, planTypeIdentifier: PlanTypeIdentifier, interviewContactType: InterviewContactTypeIdentifier,\n participationStatusType: ParticipationStatusTypeIdentifier, interviewWithmoreAuthorities: boolean, interviewParticipants: InterviewParticipant[], bookingID: Guid) {\n this.userID = userID;\n this.timeStamp = timeStamp;\n this.myPlan = myPlan;\n this.citizenID = citizenID;\n this.interviewType = interviewType;\n this.planTypeIdentifier = planTypeIdentifier;\n this.interviewContactType = interviewContactType;\n this.participationStatusType = participationStatusType;\n this.interviewWithmoreAuthorities = interviewWithmoreAuthorities;\n this.interviewParticipants = interviewParticipants;\n this.bookingID = bookingID;\n }\n}\n","import JobPathModel from \"../models/JobPathModel\";\nimport {store} from \"../index\";\nimport { isEmptyOrUndefined } from \"./TypeChecks\";\nimport { MeetingModel } from \"../models/MeetingModel\";\nimport MyPlanModel from \"../models/MyPlanModel\";\nimport { Guid } from \"guid-typescript\";\nimport { createEmptyGuid } from \"./CreateGuid\";\nimport { AppState } from \"../store\";\nimport { DraftMeeting } from \"../models/DraftMeeting\";\nimport { createLocaleDate } from \"./DateHelper\";\nimport { cloneDeep } from \"lodash\";\nimport { emptyRemainingJobPathModel } from \"./CreateEmptyDataObjects\";\n\nexport const createDraftMeeting = (isAutoSave: boolean): DraftMeeting => {\n const state: AppState = store.getState();\n const userID = state.auth.account !== null && state.auth.account.localAccountId !== '' ? Guid.parse(state.auth.account.localAccountId).toJSON().value : createEmptyGuid();\n const meeting: MeetingModel = createMeeting();\n\n return new DraftMeeting(createLocaleDate(), state.citizen.citizenID, userID, isAutoSave, meeting);\n}\n\n\nexport const createMeeting = (): MeetingModel => {\n const state: AppState = {...store.getState()};\n\n const combinedJobPaths: JobPathModel[] = [...combineJobPathsForMyPlan(state)];\n const userID = state.auth.account !== null && state.auth.account.localAccountId !== '' ? Guid.parse(state.auth.account.localAccountId).toJSON().value : createEmptyGuid();\n\n return new MeetingModel(\n userID,\n createLocaleDate(),\n new MyPlanModel(combinedJobPaths, state.agreement.textAgreements, state.agreement.qualificationAgreements, state.myPlanMeeting.tempJobLogList, state.agreement.savedRemark, state.citizen.dataResponse),\n state.citizen.citizenID,\n state.myPlanMeeting.interviewType,\n state.myPlanMeeting.planType,\n state.myPlanMeeting.interviewContactType,\n state.myPlanMeeting.participationStatusType,\n state.myPlanMeeting.interviewWithMoreAuthorities,\n state.myPlanMeeting.interviewParticipants,\n state.citizen.chosenBooking?.bookingIdentifier\n );\n}\n\nconst combineJobPathsForMyPlan = (state: AppState): JobPathModel[] => {\n let remainingJobPath: JobPathModel = {...state.jobPathList.remainingJobPath};\n let jobPathList: JobPathModel[] = [...state.jobPathList.jobPaths, remainingJobPath];\n\n if(jobPathList && jobPathList.length > 0)\n {\n jobPathList = jobPathList.map((jobpath) => {\n \n if(jobpath)\n {\n let tempJobPath: JobPathModel = {...jobpath};\n\n // need to empty these arrays otherwice the api call fails with Http 413 error -> Payload to large...\n tempJobPath.filteredJobs = [];\n tempJobPath.filteredOccupations = [];\n tempJobPath.similarQualifications = [];\n\n if(state.jobPathList.jobAgreementsConfirmedHandled?.length > 0)\n {\n if(isEmptyOrUndefined(tempJobPath.jobs))\n tempJobPath.jobs = [];\n\n tempJobPath.jobs = tempJobPath.jobs.concat(state.jobPathList.jobAgreementsConfirmedHandled.filter(j => j.jobPathId === tempJobPath.id));\n }\n\n if(state.jobPathList.companyAgreementsConfirmedHandled?.length > 0)\n {\n if(isEmptyOrUndefined(tempJobPath.companyJobs))\n tempJobPath.companyJobs = [];\n\n tempJobPath.companyJobs = tempJobPath.companyJobs.concat(state.jobPathList.companyAgreementsConfirmedHandled.filter(c => c.jobPathId === tempJobPath.id));\n }\n\n return tempJobPath;\n }\n else \n return jobpath;\n });\n }\n\n if(state.jobPathList.jobPathsRemoved?.length > 0)\n jobPathList = jobPathList.concat(state.jobPathList.jobPathsRemoved);\n\n return jobPathList;\n}\n\nexport const getCleanMyPlan = (meeting: MeetingModel): MeetingModel => {\n let tempMeeting = cloneDeep(meeting);\n if (tempMeeting?.myPlan?.jobPaths?.length > 0)\n {\n tempMeeting.myPlan.jobPaths.map((j) => {\n j.jobs = [];\n j.companyJobs = [];\n });\n }\n\n if (tempMeeting?.myPlan?.qualificationAgreements?.length > 0)\n tempMeeting.myPlan.qualificationAgreements = [];\n\n if (tempMeeting?.myPlan?.textAgreements?.length > 0)\n tempMeeting.myPlan.textAgreements = [];\n\n return tempMeeting;\n}","import * as actions from './types';\nimport { AppState } from '..';\nimport { AppActions } from '../AppActions';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { MeetingModel } from '../../models/MeetingModel';\nimport { Guid } from \"guid-typescript\";\nimport { getOptions } from '../../AzureAuth/api';\nimport { apiInfo } from '../../AzureAuth/ApiInfo';\nimport HttpMethods from '../../models/HttpMethodsEnum';\nimport JobModel from '../../models/JobModel';\nimport { isEmptyOrUndefined } from '../../helpers/TypeChecks';\nimport { setNewestMyPlanTextAgreements, setSavedRemark, handleQualificationAgreementsFromNewestPlan } from \"../Agreement/actions\";\nimport { setJobPathStateByNewestPlanOrDraftPlan, addRemainingJobPath } from \"../JobPathList/actions\";\nimport { shouldDisplayLoader } from \"../../store/Preparation/actions\";\nimport { PlanTypeIdentifier } from '../../models/PlanTypeIdentifier';\nimport { InterviewTypeIdentifier } from '../../models/InterviewTypeIdentifier';\nimport { ParticipationStatusTypeIdentifier } from '../../models/ParticipationStatusTypeIdentifier';\nimport JobLogEntryModel from '../../models/JobLogEntryModel';\nimport JobPathModel from '../../models/JobPathModel';\nimport MyPlanModel, { FormattedMyPlanEntities } from '../../models/MyPlanModel';\nimport { JournalSystem } from '../../models/Template/JobMatchTemplateModel';\nimport { PersonCategoryIdentifier } from '../../models/PersonGroupIdentifier';\nimport { InterviewParticipant } from '../../models/InterviewParticipant';\nimport { BookingModel } from '../../models/BookingModel';\nimport { InterviewContactTypeIdentifier } from '../../models/InterviewContactTypeIdentifier';\nimport { emptyRemainingJobPathModel } from '../../helpers/CreateEmptyDataObjects';\nimport { clearGuidanceValuesFromDataFields } from '../Template/actions';\nimport { setChosenBooking } from '../Citizen/actions';\nimport { setDraftPlanIntervalID } from '../DraftPlan/actions';\nimport TableSortItem from '../../models/TableSortItem';\nimport JobSearchEntryModel from '../../models/JobSearchEntryModel';\nimport { getCleanMyPlan } from '../../helpers/MeetingHelper';\nimport { setDSAJobFilter, setTempDSAJobFilter } from '../SearchJob/actions';\nimport { SearchListModel } from '../../models/SearchListModel';\n\nexport const clearAllMyPlanData = (): actions.PlanActionTypes => ({\n type: actions.CLEAR_ALL_MYPLAN_DATA,\n});\n\nexport const showMyPlanDisclaimer = (data: boolean): actions.PlanActionTypes => ({\n type: actions.SHOULD_SHOW_MYPLAN_DISCLAIMER,\n data: data,\n});\n\nexport const saveNewestPlan = (data: MeetingModel): actions.PlanActionTypes => ({\n type: actions.ADD_MYPLAN_SUCCESS,\n data: data,\n});\n\nexport const saveMyPlanError = (error: string): actions.PlanActionTypes => ({\n type: actions.ADD_MYPLAN_ERROR,\n error: error,\n});\n\nexport const beginSaveMyPlan = (): actions.PlanActionTypes => ({\n type: actions.BEGIN_ADD_MYPLAN,\n});\n\nexport const getNewestMyPlan = (data: MeetingModel): actions.PlanActionTypes => ({\n type: actions.FETCH_NEWEST_MYPLAN_SUCCESS,\n data: data,\n});\n\nexport const getNewestMyPlanError = (error: string): actions.PlanActionTypes => ({\n type: actions.FETCH_GET_NEWEST_MYPLAN_ERROR,\n error: error,\n});\n\nexport const beginFetchNewestMyPlan = (): actions.PlanActionTypes => ({\n type: actions.BEGIN_FETCH_NEWEST_MYPLAN,\n});\n\nexport const getAllPlans = (data: MeetingModel[]): actions.PlanActionTypes => ({\n type: actions.GET_ALL_PLANS,\n data: data,\n})\n\nexport const getAllPlansError = (error: string): actions.PlanActionTypes => ({\n type: actions.GET_ALL_PLANS_ERROR,\n error: error,\n});\n\nexport const isAgreementDone = (isDone: boolean, agreementID: number): actions.PlanActionTypes => ({\n type: actions.IS_AGREEMENT_DONE,\n data: isDone,\n agreementID: agreementID,\n});\n\nexport const isDoneFetchingNewestMyPlan = (isDone: boolean): actions.PlanActionTypes => ({\n type: actions.IS_DONE_FETCHING_NEWEST_MY_PLAN,\n data: isDone,\n});\n\nexport const beginAddMyPlan = (): actions.PlanActionTypes => ({\n type: actions.BEGIN_ADD_MYPLAN,\n});\n\nexport const setisMyPlanSavedSucessfully = (success: boolean): actions.PlanActionTypes => ({\n type: actions.IS_MYPLAN_SAVED_SUCCESFULLY,\n data: success,\n});\n\nexport const clearInterviewParticipants = (): actions.PlanActionTypes => ({\n type: actions.CLEAR_INTERVIEW_PARTICIPANTS,\n});\n\nexport const setInterviewWithMoreAuthorities = (interviewWithMoreAuthorities: boolean): actions.PlanActionTypes => ({\n type: actions.INTERVIEW_WITH_MORE_AUTHORITIES,\n data: interviewWithMoreAuthorities\n});\n\nexport const setPlanType = (planType: PlanTypeIdentifier): actions.PlanActionTypes => ({\n type: actions.PLAN_TYPE_CHOSEN,\n data: planType\n});\n\nexport const setInterviewType = (interviewType: InterviewTypeIdentifier): actions.PlanActionTypes => ({\n type: actions.INTERVIEW_TYPE_CHOSEN,\n data: interviewType\n});\n\nexport const setInterviewContactType = (interviewContactType: InterviewContactTypeIdentifier): actions.PlanActionTypes => ({\n type: actions.INTERVIEW_CONTACT_TYPE_CHOSEN,\n data: interviewContactType\n});\n\nexport const setParticipationType = (participationType: ParticipationStatusTypeIdentifier): actions.PlanActionTypes => ({\n type: actions.PARTICIPATION_TYPE_CHOSEN,\n data: participationType\n});\n\nexport const setTempJobLogList = (joblogs: JobLogEntryModel[]): actions.PlanActionTypes => ({\n type: actions.SET_TEMP_JOBLOG_LIST,\n data: joblogs,\n});\n\nexport const addJobPathToJobLog = (jobpathID: Guid, jobLogId: Guid): actions.PlanActionTypes => ({\n type: actions.ADD_JOBPATH_TO_JOBLOG,\n jobPathID: jobpathID,\n jobLogID: jobLogId\n});\n\nexport const compareAndSetJobLogs = (jobLogsFromCitizen: JobLogEntryModel[], jobLogsFromMyPlan: JobLogEntryModel[]): actions.PlanActionTypes => ({\n type: actions.COMPARE_AND_SET_JOBLOGS,\n jobLogsFromCitizen: jobLogsFromCitizen,\n jobLogsFromMyPlan: jobLogsFromMyPlan,\n});\n\nexport const clearTempJobLogList = (): actions.PlanActionTypes => ({\n type: actions.CLEAR_TEMP_JOBLOG_LIST\n});\n\nexport const setEarlierJobPathsFromMeetings = (jobPaths: JobPathModel[]): actions.PlanActionTypes => ({\n type: actions.SET_EARLIER_JOBPATHS_FROM_MEETINGS,\n earlierJobPaths: jobPaths,\n});\n\nexport const setFullPlanFormattedString = (fullMyPlanFormatted: string): actions.PlanActionTypes => ({\n type: actions.SET_FULLPLAN_FORMATTED_STRING,\n data: fullMyPlanFormatted,\n});\n\nexport const setPlanDescriptionFormattedString = (planDescriptionFormatted: string): actions.PlanActionTypes => ({\n type: actions.SET_PLANDESCRIPTION_FORMATTED_STRING,\n data: planDescriptionFormatted,\n});\n\nexport const setAgreementsFormattedString = (agreementsFormatted: string): actions.PlanActionTypes => ({\n type: actions.SET_AGREEMENTS_FORMATTED_STRING,\n data: agreementsFormatted,\n});\n\nexport const clearFullPlanFormattedString = (): actions.PlanActionTypes => ({\n type: actions.CLEAR_FULLPLAN_FORMATTED_STRING,\n});\n\nexport const clearPlanDescriptionFormattedString = (): actions.PlanActionTypes => ({\n type: actions.CLEAR_PLANDESCRIPTION_FORMATTED_STRING,\n});\n\nexport const clearAgreementsFormattedString = (): actions.PlanActionTypes => ({\n type: actions.CLEAR_AGREEMENTS_FORMATTED_STRING,\n});\n\nexport const setMyPlanFormattedTextError = (responseFailed: boolean): actions.PlanActionTypes => ({\n type: actions.SET_FULLPLAN_FORMATTED_TEXT_FETCH_ERROR,\n data: responseFailed,\n});\n\nexport const setInterviewParticipantsByBooking = (booking: BookingModel): actions.PlanActionTypes => ({\n type: actions.SET_INTERVIEW_PARTICIPANT_BY_BOOKING,\n data: booking,\n});\n\nexport const removeInterviewParticipant = (participant: InterviewParticipant): actions.PlanActionTypes => ({\n type: actions.REMOVE_INTERVIEW_PARTICIPANT,\n data: participant,\n});\n\nexport const updateInterviewParticipant = (participant: InterviewParticipant): actions.PlanActionTypes => ({\n type: actions.UPDATE_INTERVIEW_PARTICIPANT,\n data: participant,\n});\n\nexport const setInterviewParticipant = (participant: InterviewParticipant): actions.PlanActionTypes => ({\n type: actions.SET_INTERVIEW_PARTICIPANT,\n data: participant,\n});\n\nexport const setPinnedJobsInNewestMyPlanJobPath = (pinnedJobs: JobModel[], jobPathID: Guid): actions.PlanActionTypes => ({\n type: actions.SET_PINNED_JOBS_IN_NEWEST_MY_PLAN_FROM_JOBPATH,\n data: pinnedJobs,\n jobPathID: jobPathID\n});\n\nexport const setInterviewParticipants = (participants: InterviewParticipant[]): actions.PlanActionTypes => ({\n type: actions.SET_INTERVIEW_PARTICIPANTS,\n data: participants,\n});\n\nexport const setJobLogScrollTop = (scrollTop: number): actions.PlanActionTypes => ({\n type: actions.SET_JOBLOG_SCROLL,\n data: scrollTop,\n});\n\nexport const setActiveJobLog = (filter: string): actions.PlanActionTypes => ({\n type: actions.SET_ACTIVE_JOBLOG_FILTER,\n data: filter,\n});\n\nexport const setChosenSortItem = (data: TableSortItem): actions.PlanActionTypes => ({\n type: actions.CHOSEN_MYPLAN_SORT_ITEM,\n data: data,\n});\n\nexport const addMyPlanToDB = (meeting: MeetingModel, knowledgeSharingSystem: JournalSystem, callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n dispatch(beginSaveMyPlan());\n\n let baseUrl: string = apiInfo.endpoints.MyPlanService.AddMyPlan;\n\n if (knowledgeSharingSystem === JournalSystem.SchultzFasit)\n baseUrl += '/facit';\n\n const res = await fetch(baseUrl, await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, meeting));\n if (res.ok) \n {\n // removing interval when adding my plan was a success\n const interval: NodeJS.Timeout = getState().draftPlan.draftPlanIntervalID;\n clearInterval(interval);\n\n dispatch(setDraftPlanIntervalID({} as NodeJS.Timeout));\n dispatch(saveNewestPlan(meeting));\n dispatch(updateStateToNewestMyPlan(meeting, false));\n dispatch(clearGuidanceValuesFromDataFields());\n callback(true);\n\n if (getState().citizen && getState().citizen.citizenID)\n dispatch(fetchEarlierJobPathsFromMeetings(getState().citizen.citizenID));\n } \n else \n {\n dispatch(saveMyPlanError('res not ok'));\n callback(false);\n }\n } catch (error) {\n dispatch(saveMyPlanError('add my plan failed'));\n callback(false);\n }\n };\n};\n\nexport const getNewestMyPlanFromCitizen = (citizenID: Guid) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n dispatch(beginFetchNewestMyPlan())\n try {\n const res = await fetch(apiInfo.endpoints.MyPlanService.GetNewestPlan + citizenID, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n const data: MeetingModel = getCleanMyPlan(await res.json());\n dispatch(getNewestMyPlan(data));\n dispatch(updateStateToNewestMyPlan(data, false));\n\n } else {\n dispatch(getNewestMyPlanError('res not ok'));\n dispatch(addRemainingJobPath(emptyRemainingJobPathModel()));\n setTimeout(() => {\n dispatch(shouldDisplayLoader(false));\n }, 1500);\n }\n } catch (error) {\n dispatch(getNewestMyPlanError('Get newest my plan failed'));\n dispatch(addRemainingJobPath(emptyRemainingJobPathModel()));\n setTimeout(() => {\n dispatch(shouldDisplayLoader(false));\n }, 1500);\n\n }\n }\n}\n\nexport const getAllPlansForCitizen = (userID: Guid) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n //dispatch(first)\n try {\n const res = await fetch(apiInfo.endpoints.MyPlanService.GetAllPlans + userID, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n dispatch(getAllPlans(await res.json()))\n } else {\n dispatch(getAllPlansError(\"My plans could not be fetched from the api\"))\n }\n } catch (error) {\n //dispatch(error);\n }\n }\n}\n\nexport const fetchEarlierJobPathsFromMeetings = (citizenID: Guid) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n //dispatch(first)\n try {\n const res = await fetch(apiInfo.endpoints.MyPlanService.GetEarlierJobPaths + citizenID, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) {\n dispatch(setEarlierJobPathsFromMeetings(await res.json()))\n } else {\n // error\n }\n } catch (error) {\n //dispatch(error);\n }\n }\n}\n\nexport const fetchMyPlanFormattedString = (myPlan: MyPlanModel, templateKey: string, formattedMyPlanEntity: FormattedMyPlanEntities) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n //dispatch(first)\n try {\n const res = await fetch(apiInfo.endpoints.MyPlanService.GetMyPlanFormattedString + templateKey + '/formattedentity/' + formattedMyPlanEntity, await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, myPlan));\n if (res.ok) {\n const data: string = await res.json();\n if(formattedMyPlanEntity == FormattedMyPlanEntities.FullPlan)\n {\n dispatch(setFullPlanFormattedString(data));\n } else if (formattedMyPlanEntity == FormattedMyPlanEntities.PlanDescription)\n {\n dispatch(setPlanDescriptionFormattedString(data));\n } else if (formattedMyPlanEntity == FormattedMyPlanEntities.Agreements) {\n dispatch(setAgreementsFormattedString(data));\n }\n } else {\n // error\n dispatch(setMyPlanFormattedTextError(true));\n }\n } catch (error) {\n //dispatch(error);\n dispatch(setMyPlanFormattedTextError(true));\n }\n }\n}\n\nexport const fetchFormattedMyPlan = (myPlan: MyPlanModel, templateKey: string, callback: (success: boolean, data: string) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n //dispatch(first)\n try {\n const res = await fetch(apiInfo.endpoints.MyPlanService.GetMyPlanFormattedString + templateKey + '/formattedentity/' + FormattedMyPlanEntities.FullPlan, await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, myPlan));\n if (res.ok) \n {\n const data: string = await res.json();\n callback(true, data);\n } \n else \n {\n // error\n callback(false, '');\n dispatch(setMyPlanFormattedTextError(true));\n }\n } catch (error) {\n //dispatch(error);\n callback(false, '');\n dispatch(setMyPlanFormattedTextError(true));\n }\n }\n}\n\nexport const updateStateToNewestMyPlan = (meeting: MeetingModel, isDraftMeeting: boolean) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => { \n dispatch(setTempDSAJobFilter({ Profession: new SearchListModel('', ''), WorkAreas: [], AreaOfSpecialisation: [], Occupations: [] }));\n dispatch(setDSAJobFilter({ Profession: new SearchListModel('', ''), WorkAreas: [], AreaOfSpecialisation: [], Occupations: [] }));\n if (!isEmptyOrUndefined(meeting.myPlan)) {\n\n // Check JobLogs\n if (getState().myPlanMeeting.tempJobLogList && getState().myPlanMeeting.tempJobLogList.length > 0) {\n if (meeting.myPlan.jobLogList && meeting.myPlan.jobLogList.length > 0) {\n // both joblogs from tempjobloglist in citizen and myplan therefore compare to set tempjoblogs\n dispatch(compareAndSetJobLogs(getState().myPlanMeeting.tempJobLogList, meeting.myPlan.jobLogList));\n }\n }\n\n // Add newestMyPlan jobpaths to redux state jobpaths\n if (meeting.myPlan.jobPaths && meeting.myPlan.jobPaths.length > 0) {\n dispatch(setJobPathStateByNewestPlanOrDraftPlan(meeting.myPlan.jobPaths, isDraftMeeting));\n } else {\n // add remainingjobpath\n dispatch(addRemainingJobPath(emptyRemainingJobPathModel()));\n }\n\n // Add textAgreements to redux state textAgreements\n if (meeting.myPlan.textAgreements && meeting.myPlan.textAgreements.length > 0) {\n // Draft meeting textagreements was already filtered when the meeting was ongoing therefore dont filter.\n if (isDraftMeeting)\n dispatch(setNewestMyPlanTextAgreements(meeting.myPlan.textAgreements));\n else \n dispatch(setNewestMyPlanTextAgreements(meeting.myPlan.textAgreements.filter(x => x.done === false)));\n }\n // Add qualificationAgreements to redux state qualificationAgreements\n if (meeting.myPlan.qualificationAgreements && meeting.myPlan.qualificationAgreements.length > 0) {\n dispatch(handleQualificationAgreementsFromNewestPlan(meeting.myPlan.qualificationAgreements, meeting.myPlan.jobPaths));\n }\n\n if(getState().citizen && getState().citizen.citizen && getState().citizen.citizen.personCategory && getState().citizen.citizen.personCategory.identifier == PersonCategoryIdentifier.Aktivitetsparat)\n {\n if(meeting.myPlan.remarks !== '')\n {\n dispatch(setSavedRemark(meeting.myPlan.remarks));\n }\n }\n else if (isDraftMeeting)\n {\n if(meeting.myPlan.remarks !== '')\n {\n dispatch(setSavedRemark(meeting.myPlan.remarks));\n }\n }\n\n // More specific stuff that needs to be inserted if it's draftmeeting\n if (isDraftMeeting)\n {\n dispatch(setInterviewType(meeting.interviewType));\n dispatch(setInterviewContactType(meeting.interviewContactType));\n dispatch(setPlanType(meeting.planTypeIdentifier));\n dispatch(setParticipationType(meeting.participationStatusType));\n dispatch(setInterviewWithMoreAuthorities(meeting.interviewWithmoreAuthorities));\n dispatch(setInterviewParticipants(meeting.interviewParticipants));\n\n if (meeting.bookingID && meeting.bookingID.toString() !== Guid.EMPTY && getState().citizen?.bookings?.length > 0)\n {\n const bookingIdx: number = getState().citizen?.bookings.findIndex(b => b.bookingIdentifier === meeting.bookingID);\n if (bookingIdx > -1)\n dispatch(setChosenBooking( getState().citizen?.bookings[bookingIdx]));\n }\n }\n }\n }\n}\n\nexport const clearMyPlanInterviewAndBookingData = () => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n dispatch(setInterviewWithMoreAuthorities(false));\n dispatch(setPlanType(-1));\n dispatch(setInterviewType(-1));\n dispatch(setInterviewContactType(-1));\n dispatch(setParticipationType(-1));\n dispatch(clearInterviewParticipants());\n }\n}","import { Guid } from \"guid-typescript\";\nimport CodeListEntryModel from \"./CodeListEntryModel\";\nimport CoreEntryBodyTypeModel from \"./CoreEntryBodyTypeModel\";\nimport { DFDGDocument } from \"./DFDGDocument\";\nimport SimpleIdentityModel from \"./SimpleIdentityModel\";\n\nexport const employmentAreaTypes = (): SimpleIdentityModel[] => {\n return [\n {id: 1, name: \"Nordjylland\"},\n {id: 2, name: \"Vestjylland\"},\n {id: 3, name: \"Østjylland\"},\n {id: 4, name: \"Sydjylland\"},\n {id: 5, name: \"Fyn\"},\n {id: 6, name: \"Sjælland\"},\n {id: 7, name: \"Hovedstaden\"},\n {id: 8, name: \"Bornholm\"},\n ];\n}\n\nexport const jobApplicationSourceTypes = (): SimpleIdentityModel[] => {\n return [\n {id: 1, name: \"Uopfordret\", keyword: \"notAdvertised\"},\n {id: 2, name: \"Opslået stilling\", keyword: \"advertised\"},\n {id: 3, name: \"Gennem netværk\", keyword: \"network\"},\n ];\n}\n\nexport enum JobApplicationSource {\n NOT_ADVERTISED = 1,\n ADVERTISED = 2,\n NETWORK = 3,\n}\n\nexport const joblogEntryTypeOfSubmissionTypes = (): SimpleIdentityModel[] => {\n return [\n {id: 1, name: \"Telefon\"},\n {id: 2, name: \"Personligt\"},\n {id: 8, name: \"Digitalt\"},\n ];\n}\n\nexport const weeklyWorkTimeTypes = (): SimpleIdentityModel[] => {\n return [\n {id: 1, name: \"Fuldtid\"},\n {id: 2, name: \"Deltid\"},\n ];\n}\n\nexport enum WeeklyWorkTime {\n FULLTIME = 1,\n PARTTIME = 2,\n}\n\nexport enum JobSearchStatus {\n NOT_APPLIED = 1,\n APPLIED = 2,\n CONVERSATION = 3\n}\n\nexport const jobSeekingStatusTypes = (): SimpleIdentityModel[] => {\n return [\n {id: 1, name: \"Ikke søgt\"},\n {id: 2, name: \"Søgt\"},\n {id: 3, name: \"\tSamtale\"},\n ];\n}\n\nexport const joblogEntryStatusTypes = (): SimpleIdentityModel[] => {\n return [\n {id: 1, name: \"Aktiv\"},\n {id: 2, name: \"Lukket\"},\n ];\n}\n\nexport default class JobSearchEntryModel {\n id: Guid;\n baseType: CoreEntryBodyTypeModel;\n companyArea?: CodeListEntryModel;\n jobnetJobPostingIdentifier?: string;\n jobApplicationSourceIdentifier?: CodeListEntryModel;\n typeOfSubmission?: CodeListEntryModel;\n typeOfSubmissionDescription?: string;\n submissionDate?: Date;\n submissionDeadlineDate?: Date;\n weeklyWorkTimeTypeIdentifier?: CodeListEntryModel;\n hoursPerWeek?: number;\n jobPostingURL?: string;\n jobSearchStatus: CodeListEntryModel;\n joblogEntryStatusTypeIdentifier: CodeListEntryModel;\n created?: Date;\n lastModified?: Date;\n jobPathID?: Guid;\n isCompanyJob?: boolean;\n documents: DFDGDocument[];\n jobNetId?: string;\n\n constructor(baseType: CoreEntryBodyTypeModel, jobSearchStatus: CodeListEntryModel, joblogEntryStatusTypeIdentifier: CodeListEntryModel, id: Guid, documents: DFDGDocument[]) {\n this.baseType = baseType;\n this.jobSearchStatus = jobSearchStatus;\n this.joblogEntryStatusTypeIdentifier = joblogEntryStatusTypeIdentifier;\n this.id = id;\n this.documents = documents;\n }\n}","import { ITableHeaderModel } from \"../models/Interfaces/ITableHeaderModel\";\nimport TableOptionsModel from \"../models/TableOptionsModel\";\n\nexport type TableColumnSizeTypes = { isSmall?: boolean, isMedium?: boolean, isLarge?: boolean };\nexport type TableColumnResultTypes = {smallColumnResult: number, mediumColumnResult: number, largeColumnResult: number};\n\nexport const calculateColumnSize = (options: TableColumnSizeTypes | null, columnResult: TableColumnResultTypes, listSize: number) => {\n let width: number = 100;\n const smallColumn: number = 3;\n const mediumColumn: number = 9;\n const largeColumn: number = 20;\n\n \n if (!options?.isSmall && !options?.isMedium && !options?.isLarge)\n {\n for (let i = 0; i < columnResult?.smallColumnResult; i++)\n {\n width -= smallColumn;\n }\n \n for (let i = 0; i < columnResult?.mediumColumnResult; i++)\n {\n width -= mediumColumn;\n }\n\n for (let i = 0; i < columnResult?.largeColumnResult; i++)\n {\n width -= largeColumn;\n }\n \n return {width: (width / (listSize - (columnResult?.smallColumnResult + columnResult?.mediumColumnResult + columnResult?.largeColumnResult)))?.toString() + '%'};\n }\n else if (options?.isLarge)\n return {width: largeColumn?.toString() + '%'}\n else if (options?.isMedium)\n return {width: mediumColumn?.toString() + '%'};\n else if (options?.isSmall)\n return {width: smallColumn?.toString() + '%'};\n}\n\nexport const handleThSize = (value: ITableHeaderModel): TableColumnSizeTypes | null => {\n if (value?.options?.smallTh === true)\n return {isSmall: true};\n else if (value?.options?.mediumTh)\n return {isMedium: true};\n else if (value?.options?.largeTh)\n return {isLarge: true};\n else \n return null;\n}\n\nexport const handleTdSize = (value: TableOptionsModel): TableColumnSizeTypes | null => {\n if (value?.options?.smallTd === true)\n return {isSmall: true};\n else if (value?.options?.mediumTd === true)\n return {isMedium: true};\n else if (value?.options?.largeTd === true)\n return {isLarge: true}\n else \n return null;\n}","import AddPlusIcon from './add-plus-icon.svg';\nimport PinnedJobsFull from './PinnedJobsFull.svg';\nimport PinnedJobsTransparrent from './PinnedJobsTransparrent.svg';\nexport const jobmatchIcon = {\n AddPlusIcon,\n PinnedJobsFull,\n PinnedJobsTransparrent\n};","import * as React from \"react\";\nimport TableOptionsModel, { TableButtonTypes } from \"../../models/TableOptionsModel\";\n// import DropdownGeneral from \"../Dropdown/DropdownGeneral\";\nimport ReactLoading from 'react-loading';\n// import StackedProgressBar from \"../StackedProgressBar\";\n// import TagItem from \"../TagItem\";\n// import SimpleIdentityModel from \"../../models/SimpleIdentityModel\";\n// import CheckMarkButtonWithText from \"../CheckMarkButtonWithText\";\nimport Skeleton from \"react-loading-skeleton\";\nimport { isEmptyOrUndefined, isObjEmpty } from \"../../helpers/TypeChecks\";\nimport { calculateColumnSize, handleTdSize, TableColumnResultTypes } from \"../../helpers/TableHelper\";\nimport { jobmatchIcon } from '../../images';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faTrash, faExternalLinkAlt, faPen, faEye } from '@fortawesome/free-solid-svg-icons';\nimport \"./GeneralTableItem.scss\";\nimport { OverlayTrigger, Tooltip } from \"react-bootstrap\";\n\nconst greenCircleCheckbox = require(\"../../images/green-circle-checkmark.svg\");\n\ninterface Props {\n tableData: TableOptionsModel[];\n onClick?: (buttonType: TableButtonTypes) => void;\n isPinned: boolean;\n handleDropdownItem?: (e: any, item: any, dropDownId?: number) => void;\n shouldDisplayPinLoader?: boolean;\n shouldDisplayDropdownLoader?: boolean;\n inlineStyle?: React.CSSProperties;\n isFetchingTableData?: boolean;\n dropDownIdsForLoading: number[];\n tableSizeResults: TableColumnResultTypes;\n}\n\ninterface State {\n dropDownIdsToShow: number[];\n}\n\nclass GeneralTableItem extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = {\n dropDownIdsToShow: [],\n };\n }\n\n handleShowDropdown = (dropdownId: number) => {\n this.setState({\n dropDownIdsToShow: [...this.state.dropDownIdsToShow, dropdownId],\n });\n }\n\n handleCloseDropdown = (index: number) => {\n if (index > -1)\n {\n this.setState({\n dropDownIdsToShow: [\n ...this.state.dropDownIdsToShow.slice(0, index),\n ...this.state.dropDownIdsToShow.slice(index + 1),\n ]\n });\n }\n }\n\n handleOnClicks = (e: React.MouseEvent | React.ChangeEvent, clickMethod: 'onClick' | 'handleDropdown' | 'displayDropdown', buttonType: TableButtonTypes, tdData: TableOptionsModel, data?: any, dropDownId?: number) => {\n if (e.stopPropagation) e.stopPropagation();\n\n e.preventDefault();\n // removing onclick for dropdowns and pin because it's to easy to click outside and that will trigger fetches, it's frustrating for the user.\n if (clickMethod === \"onClick\" && isEmptyOrUndefined(tdData?.options?.dropdown) && this.props.onClick)\n this.props.onClick(buttonType);\n else if (clickMethod === 'handleDropdown' && this.props.handleDropdownItem)\n this.props.handleDropdownItem(e, data, dropDownId);\n else if (clickMethod === 'displayDropdown')\n {\n const index: number = this.state.dropDownIdsToShow?.findIndex(x => x === data);\n if (index > -1)\n this.handleCloseDropdown(index);\n else \n this.handleShowDropdown(data);\n }\n }\n\n handleTdClassNames = (data: TableOptionsModel): string => {\n let classNames: string = \"general-list-view-filter-info column-item flex-align-center \";\n\n if (data?.options?.dropdown || data?.options?.usePin)\n classNames = classNames.concat('specific-padding');\n else if (data.options?.constrainText)\n classNames = classNames.concat('overflow-specific');\n else if (data.options?.alignCenter)\n classNames = classNames.concat('align-center');\n \n return classNames;\n }\n\n renderTooltip = (tooltip: string): JSX.Element => {\n return (\n tooltip?.length > 0\n ?\n \n {tooltip}\n \n :\n

\n )\n }\n\n render() {\n return (\n <>\n {this.props.isFetchingTableData ? \n :\n \n {this.props.tableData?.map((data: TableOptionsModel, index: number) => (\n \n this.handleOnClicks(e, 'onClick', TableButtonTypes.TABLE_ROW, data)} scope=\"col\">\n {data?.options?.usePin || data?.options?.usePinWithText\n ? \n \n \n {data?.options?.usePinWithText \n ?\n data?.value?.length > 0\n ?

this.handleOnClicks(e, 'onClick', TableButtonTypes.PIN, data)}>{data?.value}

\n :

-

\n : null}\n
\n : data?.options?.button?.inspectBtn\n ?\n data?.options?.tooltip && data?.options?.tooltip?.length > 0\n ? \n : \n :\n data?.options?.button?.deleteBtn\n ?\n data?.options?.tooltip && data?.options?.tooltip?.length > 0\n ? \n : \n :\n data?.options?.button?.btnRounded\n ?\n data?.options?.checkbox?.checked\n ?\n \n :\n \n :\n data?.options?.button?.updateBtn\n ?\n data?.options?.tooltip && data?.options?.tooltip?.length > 0\n ? \n : \n :\n data?.options?.button?.eyeBtn\n ?\n data?.options?.tooltip && data?.options?.tooltip?.length > 0\n ? \n : \n \n :\n data?.options?.imageWithText !== undefined\n ?\n \n

this.handleOnClicks(e, 'onClick', TableButtonTypes.TEXT, data)}> {data?.value ?? ''}

\n
\n :\n data?.options?.textToWrap !== undefined && data?.options?.textToWrap?.length > 0\n ?\n
\n {data?.options?.textToWrap.map((text) => (\n data?.options?.tooltip && data?.options?.tooltip?.length > 0\n ?

{text}

\n :

{text}

\n ))}\n
\n :\n // data?.options?.dropdown && !isObjEmpty(data?.options?.dropdown)\n // ?\n // <>\n // {this.props.dropDownIdsForLoading && this.props.dropDownIdsForLoading?.includes(data?.options?.dropdown?.id) && this.props.shouldDisplayDropdownLoader\n // ? \n //
\n // \n //
\n // : null}\n //
{}}>\n // this.handleOnClicks(e, 'handleDropdown', data, item, data?.options?.dropdown?.id)} onClick={(e) => this.handleOnClicks(e, 'displayDropdown', data, data?.options?.dropdown?.id)} \n // options={{additionalClassNames: data?.options?.dropdown?.additionalClassNames, style: data?.options?.dropdown?.style, useImg: data?.options?.dropdown?.useImg}} />\n //
\n // \n // : \n // data?.options?.tagItem \n // ?\n // \n // :\n // data?.options?.progressbar\n // ?\n // \n // : \n // data?.options?.checkbox?.useCheckbox\n // ? \n //
this.handleOnClicks(e, 'handleCheckBox', data)}>\n // this.handleOnClicks(e, 'handleCheckBox', data)} />\n //
\n // :\n // data?.options?.usePlusIconWithText\n // ?\n // \n // \n\n // {data?.value?.length > 0\n // ?

this.handleOnClicks(e, 'onClick', data)}>{data?.value}

\n // :

-

}\n //
\n // : data?.options?.useCheckMarkIconWithText\n // ?\n // \n // \n \n // {data?.value?.length > 0\n // ?

this.handleOnClicks(e, 'onClick', data)}>{data?.value}

\n // :

-

}\n //
\n // :\n data?.options?.tooltip && data?.options?.tooltip?.length > 0 && data?.value?.length > 0\n ?\n \n {data?.value?.length > 0\n ?

this.handleOnClicks(e, 'onClick', TableButtonTypes.NONE, data)}>{data?.value}

\n :

-

}\n
\n :\n data?.value?.length > 0\n ?

this.handleOnClicks(e, 'onClick', TableButtonTypes.TEXT, data)}>{data?.value}

\n :

-

}\n \n
\n ))}\n }\n \n );\n }\n}\n\nexport default GeneralTableItem;\n","import { combineTwoStringsWithChecks, isEmptyOrUndefined } from \"./TypeChecks\";\n\nexport const combineObjWithMultiplePropsGeneric = (obj: any, props: string[][]): any => {\n let strToReturn: any = '';\n \n for (let i = 0; i < props?.length; i++)\n {\n let combinedString = obj;\n for (let j = 0; j < props[i]?.length; j++)\n {\n if (!isEmptyOrUndefined(combinedString))\n combinedString = combinedString[props[i][j]];\n }\n\n if (!isEmptyOrUndefined(combinedString))\n strToReturn += i !== props?.length - 1 ? combinedString + ' ' : combinedString;\n }\n\n // setting it to null to avoid sort problems\n if (strToReturn === undefined)\n strToReturn = null;\n\n return strToReturn;\n}\n\nexport const combineObjectWithMultipleProps = (obj: any, props: string[], combineWithOptionalProps?: string[]): any => {\n let combinedString = obj;\n for (let i = 0; i < props?.length; i++)\n {\n if (!isEmptyOrUndefined(combinedString))\n combinedString = combinedString[props[i]];\n }\n\n if (combineWithOptionalProps && combineWithOptionalProps?.length > 0)\n {\n let optionalCombinedString = obj;\n\n for (let i = 0; i < combineWithOptionalProps?.length; i++)\n {\n if (!isEmptyOrUndefined(optionalCombinedString))\n optionalCombinedString = optionalCombinedString[combineWithOptionalProps[i]];\n }\n\n combinedString = combineTwoStringsWithChecks(combinedString, optionalCombinedString);\n }\n\n // setting it to null to avoid sort problems\n if (combinedString === undefined)\n combinedString = null;\n\n return combinedString;\n}\n\nexport const combineObjectWithProps = (obj: any, props: string[]): any => {\n let combinedString = obj;\n for (let i = 0; i < props?.length; i++)\n {\n if (!isEmptyOrUndefined(combinedString))\n combinedString = combinedString[props[i]];\n }\n \n // setting it to null to avoid sort problems\n if (combinedString === undefined)\n combinedString = null;\n\n return combinedString;\n}\n\nexport const isOfType = (value: any): value is T => {\n return true;\n}","import { combineObjectWithMultipleProps } from \"./ObjectHelper\";\n\nexport const alphabeticallySort = (ascending: boolean, a: any, b: any) => {\n // equal items sort equally\n if (a === b) {\n return 0;\n }\n // nulls sort after anything else\n else if (a === null) {\n return 1;\n }\n else if (b === null) {\n return -1;\n }\n else if (a === '-')\n {\n return 1;\n }\n else if (b === '-')\n {\n return -1;\n }\n // otherwise, if we're ascending, lowest sorts first\n else if (ascending) {\n return a < b ? -1 : 1;\n }\n // if descending, highest sorts first\n else { \n return a < b ? 1 : -1;\n }\n}\n\nexport const sortAlphabeticallyWithMultipleProps = (ascending: boolean, list: any[], props: string[], optionalProps?: string[]) => {\n return list?.slice()?.sort((a, b) => {\n const firstObj = combineObjectWithMultipleProps(a, props, optionalProps);\n const secondObj = combineObjectWithMultipleProps(b, props, optionalProps);\n return alphabeticallySort(ascending, firstObj, secondObj);\n });\n}\n\nexport const sortAlphabeticallyAscendingWithMultipleProps = (list: any[], props: string[], optionalProps?: string[]) => {\n return list?.slice()?.sort((a, b) => {\n const firstObj = combineObjectWithMultipleProps(a, props, optionalProps);\n const secondObj = combineObjectWithMultipleProps(b, props, optionalProps);\n if (firstObj < secondObj)\n return -1;\n else if (firstObj > secondObj)\n return 1;\n else \n return 0;\n });\n}\n\nexport const sortAlphabeticallyDescendingWithMultipleProps = (list: any[], props: string[], optionalProps?: string[]) => {\n const lel: string = '';\n lel.toString().toLowerCase()\n return list?.slice()?.sort((a, b) => {\n const firstObj = combineObjectWithMultipleProps(a, props, optionalProps)?.toString()?.toLowerCase();\n const secondObj = combineObjectWithMultipleProps(b, props, optionalProps)?.toString()?.toLowerCase();\n\n if (firstObj > secondObj)\n return -1;\n else if (firstObj < secondObj)\n return 1;\n else \n return 0;\n });\n}\n\nexport const sortAlphabeticallyAscendingWithProp = (list: any[], prop: string) => {\n return list?.slice()?.sort((a, b) => a[prop]?.toString()?.toLowerCase() < b[prop]?.toString()?.toLowerCase() ? -1 : a[prop]?.toString()?.toLowerCase() > b[prop]?.toString()?.toLowerCase() ? 1 : 0);\n}\n\nexport const sortAlphabeticallyDescendingWithProp = (list: any[], prop: string) => {\n return list?.slice()?.sort((a, b) => a[prop]?.toString()?.toLowerCase() > b[prop]?.toString()?.toLowerCase() ? -1 : a[prop]?.toString()?.toLowerCase() < b[prop]?.toString()?.toLowerCase() ? 1 : 0);\n}\n\nexport const sortAlphabeticallyAscending = (list: any[]) => {\n return list?.slice()?.sort((a, b) => a?.toString()?.toLowerCase() < b?.toString()?.toLowerCase() ? -1 : a?.toString()?.toLowerCase() > b?.toString()?.toLowerCase() ? 1 : 0);\n}\n\nexport const sortAlphabeticallyDescending = (list: any[]) => {\n return list?.slice()?.sort((a, b) => a?.toString()?.toLowerCase() > b?.toString()?.toLowerCase() ? -1 : a?.toString()?.toLowerCase() < b?.toString()?.toLowerCase() ? 1 : 0);\n}\n\nexport const displayValuesFromArrayWithCompare = (mainArr: any[], compareArr: any[], mainArrProp?: string, compareArrProp?: string ): any[] => {\n let filteredArr: any[] = [];\n if (compareArr && compareArr?.length > 0)\n {\n for (let i = 0; i < compareArr?.length; i++)\n {\n let value: any | undefined = undefined;\n \n if (mainArrProp || compareArrProp)\n {\n value = mainArr?.find((x) => {\n if (mainArrProp && compareArrProp && x?.[mainArrProp] === compareArr[i]?.[compareArrProp])\n return x;\n else if (mainArrProp && x?.[mainArrProp] === compareArr[i])\n return x;\n else if (compareArrProp && x === compareArr[i]?.[compareArrProp])\n return x; \n });\n }\n else \n value = mainArr?.find(x => x === compareArr[i]);\n \n if (value)\n filteredArr.push(value);\n }\n }\n\n return filteredArr;\n}\n\nexport const getLastElement = (arr: any[]) => {\n return arr[arr.length-1];\n}\n\nexport const getFirstElement = (arr: any[]) => {\n return arr[0];\n}\n\nexport const getAllElementsExcludeLast = (arr: any[]) => {\n return arr.splice(0,arr.length-1);\n}\n","import * as React from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faSort, faSortDown, faSortUp } from \"@fortawesome/free-solid-svg-icons\";\nimport TableSortItem from \"../../models/TableSortItem\";\nimport GeneralTableItem from \"../GeneralTableItem\";\nimport TableOptionsModel, { TableButtonTypes } from \"../../models/TableOptionsModel\";\nimport { AutoSizer, CellMeasurer, CellMeasurerCache, List, ScrollbarPresenceParams } from \"react-virtualized\";\nimport { isEmptyOrUndefined, isObjEmpty } from \"../../helpers/TypeChecks\";\nimport { ITableHeaderModel } from \"../../models/Interfaces/ITableHeaderModel\";\nimport { sortAlphabeticallyWithMultipleProps } from \"../../helpers/ListHelper\";\nimport { calculateColumnSize, handleThSize, TableColumnResultTypes, TableColumnSizeTypes } from \"../../helpers/TableHelper\";\nimport \"./GeneralListView.scss\";\n\ninterface Props {\n tableHeaders: ITableHeaderModel[];\n getTableData: (val: any) => TableOptionsModel[];\n list: any[];\n reduxSortItem?: TableSortItem;\n handleSorting?: (item: TableSortItem) => void;\n handleOnClick?: (item: any, buttonType: TableButtonTypes, scrollTop?: number) => void;\n displayPinLoader?: (item: any) => boolean;\n isPinned?: (item: any) => boolean;\n handleDropdownItem?: (e: any, item: any, data: any, dropDownId?: number) => void;\n isFetching?: boolean;\n displayDropdownLoader?: (item: any) => boolean;\n customSortMethod?: (sortMethod: 'asc' | 'desc') => any[];\n dropdownIdsForLoading?: number[];\n scrollTop?: number;\n updateScrollPosition?: (scrollTop: number, shouldReset?: boolean) => void;\n}\n\ninterface State {\n cache: CellMeasurerCache;\n sortedList: any[];\n chosenSortItem: TableSortItem;\n tableSizeResults: TableColumnResultTypes;\n}\n\nclass GeneralListView extends React.Component {\n private listScrollTop: number;\n private virtualizedListRef: React.RefObject;\n constructor(props: Props) {\n super(props);\n this.state = {\n cache: new CellMeasurerCache({ fixedWidth: true, defaultHeight: 60 }),\n sortedList: this.props.list,\n chosenSortItem: this.props.reduxSortItem ?? {} as TableSortItem,\n tableSizeResults: { mediumColumnResult: 0, smallColumnResult: 0, largeColumnResult: 0 },\n };\n\n this.listScrollTop = this.props.scrollTop ?? 0;\n this.virtualizedListRef = React.createRef();\n }\n\n componentDidMount() {\n this.listScrollTop = this.props.scrollTop ?? 0;\n\n this.handleRetainScrollPosition();\n\n // Sorting the list if the user had a chosensortitem.\n if (this.props.reduxSortItem && !isObjEmpty(this.props.reduxSortItem)) \n {\n this.setState({\n chosenSortItem: this.props.reduxSortItem\n });\n\n if (this.props.reduxSortItem?.tableHeader)\n this.handleSort(this.props.list, this.props.reduxSortItem.tableHeader, true, this.props.reduxSortItem);\n }\n\n if (this.props.list)\n {\n this.setState({\n tableSizeResults: this.handleTableSizeResult(),\n });\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n if (prevProps.list !== this.props.list)\n {\n if (isObjEmpty(this.state.chosenSortItem))\n {\n this.setState({\n sortedList: this.props.list,\n });\n }\n else\n this.handleSort(this.props.list, this.state.chosenSortItem?.tableHeader, true);\n\n this.setState({\n tableSizeResults: this.handleTableSizeResult(),\n });\n }\n\n if (prevProps.list?.length !== this.props.list?.length)\n {\n this.listScrollTop = 0;\n if (this.props.updateScrollPosition)\n this.props.updateScrollPosition(0, true);\n }\n\n if (prevProps.isFetching && !this.props.isFetching)\n this.handleRetainScrollPosition();\n }\n\n componentWillUnmount() {\n if (this.props.updateScrollPosition)\n this.props.updateScrollPosition(this.listScrollTop);\n }\n\n handleTableSizeResult = (): TableColumnResultTypes => {\n let results: TableColumnResultTypes = { smallColumnResult: 0, mediumColumnResult: 0, largeColumnResult: 0 };\n this.props.tableHeaders?.map(x => {\n const result: TableColumnSizeTypes | null = handleThSize(x);\n if (result?.isSmall)\n results.smallColumnResult++;\n else if (result?.isMedium)\n results.mediumColumnResult++; \n else if (result?.isLarge)\n results.largeColumnResult++;\n });\n\n return results;\n }\n\n rowRenderer = ({ index, parent, key, style }: { index: any, parent: any, key: any, style: any }) => {\n let html:JSX.Element;\n html =\n \n this.props.handleOnClick!(this.state.sortedList[index], buttonType, this.listScrollTop) : undefined} tableData={this.props.getTableData(this.state.sortedList[index])} isPinned={this.props.isPinned ? this.props.isPinned!(this.state.sortedList[index]) : false}\n handleDropdownItem={this.props.handleDropdownItem ? (e, item, dropDownId) => this.props.handleDropdownItem!(e, item, this.state.sortedList[index], dropDownId) : undefined} dropDownIdsForLoading={this.props.dropdownIdsForLoading ?? []}\n shouldDisplayDropdownLoader={this.props.displayDropdownLoader ? this.props.displayDropdownLoader(this.state.sortedList[index]) : false} />\n ;\n\n return (html);\n }\n\n handleSortIcon = (id: number): JSX.Element => {\n if (this.state.chosenSortItem?.tableHeader?.id === id)\n {\n if (this.state.chosenSortItem?.sortMethod === \"asc\")\n return \n else \n return \n }\n else \n return \n }\n\n handleSort = (list: any[], tableHeader: ITableHeaderModel, staticSort: boolean, specificSortItem?: TableSortItem) => {\n if (specificSortItem && !isObjEmpty(specificSortItem))\n {\n this.setState({\n sortedList: specificSortItem?.sortMethod === \"asc\"\n ? sortAlphabeticallyWithMultipleProps(true, this.state.sortedList, tableHeader?.props, tableHeader?.combineWithOptionalProps)\n : sortAlphabeticallyWithMultipleProps(false, this.state.sortedList, tableHeader?.props, tableHeader?.combineWithOptionalProps) \n });\n }\n else \n {\n if (this.state.chosenSortItem?.tableHeader?.id === tableHeader?.id)\n {\n const sortMethod: \"asc\" | \"desc\" = staticSort ? this.state.chosenSortItem?.sortMethod : this.state.chosenSortItem?.sortMethod === \"asc\" ? \"desc\" : \"asc\";\n this.setState({\n chosenSortItem: {\n ...this.state.chosenSortItem,\n sortMethod: sortMethod,\n },\n sortedList: tableHeader?.useCustomSortMethod && this.props.customSortMethod\n ? this.props.customSortMethod(sortMethod)\n : sortAlphabeticallyWithMultipleProps(sortMethod === 'asc', list, tableHeader?.props, tableHeader?.combineWithOptionalProps),\n }, () => {\n if (this.props.handleSorting !== undefined) {\n this.props.handleSorting(this.state.chosenSortItem);\n }\n });\n }\n else \n {\n this.setState({\n chosenSortItem: { tableHeader: tableHeader, sortMethod: 'asc' },\n sortedList: tableHeader?.useCustomSortMethod && this.props.customSortMethod\n ? this.props.customSortMethod('asc')\n : sortAlphabeticallyWithMultipleProps(true, list, tableHeader?.props, tableHeader?.combineWithOptionalProps),\n }, () => {\n if (this.props.handleSorting !== undefined) {\n this.props.handleSorting(this.state.chosenSortItem);\n }\n });\n }\n }\n }\n\n handleClassNamesOnTableHeader = (tableHeader: ITableHeaderModel) => {\n if (tableHeader?.tableName === '' || tableHeader?.options?.smallTh)\n return 'general-list-view-filter-box set-flex-on-small-th';\n else if (tableHeader?.options?.mediumTh)\n return 'general-list-view-filter-box set-flex-on-medium-th';\n else if (tableHeader?.options?.largeTh)\n return 'general-list-view-filter-box set-flex-on-large-th';\n else if (tableHeader?.options?.halfCell)\n return 'general-list-view-filter-box half-cell-th';\n else \n return 'general-list-view-filter-box';\n }\n\n onScroll = (scrollTop: number) => {\n if (!this.props.isFetching)\n this.listScrollTop = scrollTop;\n }\n\n handleRetainScrollPosition = () => {\n if (this.virtualizedListRef && this.virtualizedListRef?.current && this.virtualizedListRef?.current?.Grid?.state?.scrollTop !== this.listScrollTop)\n this.virtualizedListRef.current.scrollToPosition(this.listScrollTop);\n }\n\n onScrollPresenceChange = (params: ScrollbarPresenceParams) => {\n if (!params.vertical)\n {\n document.getElementById('scrollPresence')?.classList?.add('remove-scroll-padding');\n }\n else\n {\n let list = document.getElementById('scrollPresence')?.classList;\n if (!isEmptyOrUndefined(list))\n {\n let found = list?.contains('remove-scroll-padding');\n if (found)\n {\n document.getElementById('scrollPresence')?.classList?.remove('remove-scroll-padding');\n }\n }\n }\n }\n\n render() {\n return (\n
\n
\n \n \n
\n \n {this.props.tableHeaders?.map((val: ITableHeaderModel) => (\n \n ))}\n \n \n \n \n {({ height, width }) => (\n this.onScrollPresenceChange(e)}\n ref={this.virtualizedListRef}\n rowCount={this.props.isFetching ? 12 : this.state.sortedList?.length}\n height={height}\n width={width}\n deferredMeasurementCache={this.state.cache}\n rowHeight={this.state.cache?.defaultHeight}\n rowRenderer={({index, parent, key, style}) => this.rowRenderer({index, parent, key, style})}\n data={this.state.sortedList}\n onScroll={(params: any) => this.onScroll(params?.scrollTop)}\n />\n )}\n \n \n
this.handleSort(this.state.sortedList, val, false) : () => {}}>\n

{val?.tableName}

\n {val?.isSortable ? this.handleSortIcon(val.id) : null}\n
\n
\n
\n );\n }\n}\n\nexport default GeneralListView;\n","import * as React from 'react';\nimport './CloseButton.scss';\n\ninterface Props {\n onClick: (e: React.MouseEvent) => void;\n}\n \ninterface State {\n \n}\n \nclass CloseButton extends React.Component {\n constructor(props: Props) {\n super(props);\n // this.state = { : };\n }\n render() { \n const timesIcon = require('../../../images/times-close-icon.svg');\n\n return ( \n \n );\n }\n}\n \nexport default CloseButton;","import { Guid } from \"guid-typescript\";\nimport CompanyModel from \"./CompanyModel\";\nimport DocumentModel from \"./DocumentModel\";\n\nexport enum JobSearchStatus {\n NotSearched = 1,\n Searched = 2,\n Meeting = 3\n}\n\nexport enum JobSource {\n NotAdvertisedJob = 1,\n AdvertisedJob = 2,\n Network = 3\n}\n\nexport enum JobApplyMethod {\n Telephonic = 1,\n Personally = 2,\n Digital = 3\n}\n\nexport enum WorkTimeOfDay {\n FullTime = 1,\n PartTime = 2\n}\n\nexport default class JobLogEntryModel {\n id: Guid;\n // NB: occupationName is Title on JobLog\n occupationName: string;\n workTimeOfDay: WorkTimeOfDay;\n deadline?: Date;\n jobCreated?: Date;\n jobSearched?: Date;\n lastModified?: Date;\n documents: DocumentModel[];\n jobSearchStatus: JobSearchStatus;\n jobSource: JobSource;\n jobApplyMethod: JobApplyMethod;\n company: CompanyModel;\n url: string;\n jobPathID: Guid;\n\n constructor(id: Guid, occupationName: string, workTimeOfDay: WorkTimeOfDay, documents: DocumentModel[], jobSearchStatus: JobSearchStatus, jobSource: JobSource, jobApplyMethod: JobApplyMethod, company: CompanyModel, url: string, jobPathID: Guid, deadline?: Date, jobCreated?: Date, jobSearched?: Date, lastModified?: Date) {\n this.id = id;\n this.occupationName = occupationName;\n this.workTimeOfDay = workTimeOfDay;\n this.deadline = deadline;\n this.jobCreated = jobCreated;\n this.jobSearched = jobSearched;\n this.lastModified = lastModified;\n this.documents = documents;\n this.jobSearchStatus = jobSearchStatus;\n this.jobSource = jobSource;\n this.jobApplyMethod = jobApplyMethod;\n this.company = company;\n this.url = url;\n this.jobPathID = jobPathID;\n }\n}","import * as React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCheck } from '@fortawesome/free-solid-svg-icons';\nimport './RoundedCheckMark.scss';\n\ninterface Props { \n onClick: (e: React.MouseEvent) => void;\n text: string;\n isChecked: boolean;\n}\n\ninterface State { }\n\nclass RoundedCheckMark extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = { };\n }\n\n render() {\n\n return (\n \n );\n }\n}\n\nexport default RoundedCheckMark;","import * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { isObjEmpty } from \"../../../helpers/TypeChecks\";\nimport CodeListEntryModel from \"../../../models/CodeListEntryModel\";\nimport JobSearchEntryModel, { jobApplicationSourceTypes } from \"../../../models/JobSearchEntryModel\";\nimport SimpleIdentityModel from \"../../../models/SimpleIdentityModel\";\nimport { AppState } from \"../../../store\";\nimport RoundedCheckMark from \"../../RoundedCheckMark\";\nimport \"./JobLogSource.scss\";\n\ninterface OwnProps {\n\tjobLog: JobSearchEntryModel;\n\thandleUpdateJobLog: (data: JobSearchEntryModel) => void;\n\tisExistingItem: boolean;\n\tdisabled?: boolean;\n}\n\ninterface State {\n\tjobLog: JobSearchEntryModel;\n}\n\ninterface LinkStateProps {\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n});\n\ntype Props = OwnProps & LinkStateProps;\n\nclass JobLogSource extends React.Component {\n\tconstructor(props: Props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tjobLog: this.props.jobLog,\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tif (this.props.jobLog !== this.state.jobLog)\n\t\t{\n\t\t\tthis.setState({\n\t\t\t\tjobLog: this.props.jobLog,\n\t\t\t});\n\t\t}\n\t}\n\n\tcomponentDidUpdate(prevProps: Props, prevState: State) {\n\t\tif (prevProps.jobLog !== this.props.jobLog)\n\t\t{\n\t\t\tthis.setState({\n\t\t\t\tjobLog: this.props.jobLog,\n\t\t\t});\n\t\t}\n\n\t\tif (prevState.jobLog !== this.state.jobLog && this.state.jobLog !== this.props.jobLog)\n\t\t\tthis.props.handleUpdateJobLog(this.state.jobLog);\n\t}\n\n\tcomponentWillUnmount() {\n if (this.state.jobLog && !isObjEmpty(this.state.jobLog) && this.props.jobLog !== this.state.jobLog)\n this.props.handleUpdateJobLog(this.state.jobLog);\n\t}\n\n\thandleSourceContentOnChange = (e: React.MouseEvent, property: string, data?: any) => {\n\t\tconst val = Number((data as SimpleIdentityModel)?.id);\n\t\tif (this.state.jobLog?.jobApplicationSourceIdentifier?.identifier === val)\n\t\t{\n\t\t\tthis.setState({\n\t\t\t\tjobLog: {\n\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\tjobApplicationSourceIdentifier: undefined,\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\telse\n\t\t{\n\t\t\tthis.setState({\n\t\t\t\tjobLog: {\n\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\tjobApplicationSourceIdentifier: {\n\t\t\t\t\t\t...this.state.jobLog?.jobApplicationSourceIdentifier ?? {} as CodeListEntryModel,\n\t\t\t\t\t\tidentifier: val,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n \t\t

Hvordan fandt du jobbet?

\n\t\t\t\t
\n\t\t\t\t\t{jobApplicationSourceTypes()?.map((val) => (\n\t\t\t\t\t\t this.handleSourceContentOnChange(e, val?.keyword ?? '', val)} isChecked={this.state.jobLog?.jobApplicationSourceIdentifier?.identifier === val?.id} />\n\t\t\t\t\t))}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default connect(mapStateToProps)(JobLogSource);\n","import * as React from \"react\";\nimport Calendar, { CalendarTileProperties } from \"react-calendar\";\nimport { newDateWithoutTimestamp } from \"../../helpers/DateHelper\";\nimport \"./CalendarGeneral.scss\";\n\nconst ChevronLeft = require('../../images/chevron-left.svg');\nconst ChevronRight = require('../../images/chevron-right.svg');\n\nexport type TilesToDisableDatesTypes = { conditionalOperator: '>=' | '<=' | '==' | '<' | '>', date: Date | null };\n\ninterface Props {\n\thandleCalendarOnChange: (value: Date, event: React.ChangeEvent) => void;\n\tvalue: Date | Date[] | null | undefined;\n\ttilesToDisable?: TilesToDisableDatesTypes[];\n}\n\ninterface State {\n\n}\n\nclass CalendarGeneral extends React.Component {\n\tconstructor(props: Props) {\n\t\tsuper(props);\n\t\tthis.state = {};\n\t}\n\n\thandleTileDisabled = (date: Date): boolean => {\n\t\t// true will make tile disabled\n\n\t\tif (this.props.tilesToDisable && this.props.tilesToDisable?.length > 0)\n\t\t{\n\t\t\tfor (let i = 0; i < this.props.tilesToDisable.length; i++)\n\t\t\t{\n\t\t\t\tif (this.props.tilesToDisable[i]?.date !== null)\n\t\t\t\t{\n\t\t\t\t\tlet conditionalOperator = this.props.tilesToDisable[i]?.conditionalOperator;\n\t\t\t\t\tlet dateToCompare = newDateWithoutTimestamp(this.props.tilesToDisable[i]?.date!);\n\t\n\t\t\t\t\tif (conditionalOperator === '<' && date < dateToCompare)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\telse if (conditionalOperator === '>' && date > dateToCompare)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\telse if (conditionalOperator === '<=' && date <= dateToCompare)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\telse if (conditionalOperator === '>=' && date >= dateToCompare)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\telse if (conditionalOperator === '==' && date?.getTime() === dateToCompare?.getTime())\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse \n\t\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t\telse \n\t\t\treturn false; \n\t}\n\n\t// Setting time on date, because date is 00:00:00 and will eventually cause the backend to validate the date to go one day back\n\t// So for instance 07/01-2022 would be 06/01-2022 in the backend because of the time\n\tsetTimeOnDate = (date: Date, event: React.ChangeEvent) => {\n\t\tlet tempDate: Date = new Date(date);\n\t\tconst todaysDate: Date = new Date;\n\n\t\ttempDate.setHours(todaysDate?.getHours());\n\t\ttempDate.setMinutes(todaysDate?.getMinutes());\n\t\ttempDate.setSeconds(todaysDate?.getSeconds());\n\t\tthis.props.handleCalendarOnChange(tempDate, event);\n\t}\n\n\n\trender() {\n\n\n\t\tlet nextArrow = ;\n\t\tlet prevArrow = ;\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t) => this.setTimeOnDate(value, e)}\n\t\t\t\t\tvalue={typeof this.props.value === 'string' ? new Date(this.props.value) : this.props.value}\n\t\t\t\t\ttileDisabled={(props) => this.handleTileDisabled(props?.date)}\n\t\t\t\t/>\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default CalendarGeneral;","import * as React from 'react';\nimport { Dropdown } from 'react-bootstrap';\nimport DropdownItem from 'react-bootstrap/esm/DropdownItem';\nimport DropdownMenu from 'react-bootstrap/esm/DropdownMenu';\nimport DropdownToggle from 'react-bootstrap/esm/DropdownToggle';\nimport CalendarGeneral from '../../CalendarGeneral';\nimport { convertTimestampToDateString, formatDateToDanishSignature, newDateWithoutTimestamp } from '../../../helpers/DateHelper';\nimport { isEmptyOrUndefined } from '../../../helpers/TypeChecks';\nimport { TilesToDisableDatesTypes } from '../../CalendarGeneral/CalendarGeneral';\nimport './DropdownCalendar.scss';\n\nconst CalendarIcon = require('../../../images/calendar-icon-2.svg');\nconst XIcon = require('../../../images/times-close-icon.svg');\n\ninterface Props { \n title: string;\n value: Date | number | undefined;\n handleCalendarOnChange: (value: Date, event: React.ChangeEvent) => void;\n handleCloseIcon?: () => void;\n isMandatory?: boolean;\n disabled?: boolean;\n tilesToDisable?: TilesToDisableDatesTypes[];\n editDateOnInputField?: boolean;\n}\n\ninterface State { \n show: boolean;\n dateString: string; \n}\n\nclass DropdownCalendar extends React.Component {\n private dropdownRef: React.RefObject;\n private inputRef: React.RefObject;\n private cursor: number;\n\n constructor(props: Props) {\n super(props);\n this.state = {\n show: false,\n dateString: this.props.value !== undefined ? this.inputValue() : '',\n };\n\n this.dropdownRef = React.createRef();\n this.inputRef = React.createRef();\n this.cursor = 0;\n }\n\n componentDidMount() {\n document.addEventListener('mousedown', (e) => this.handleDropdownClickedOutside(e));\n\n const value: string = this.inputValue();\n if (value !== this.state.dateString)\n {\n this.setState({\n dateString: value,\n });\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n if (prevProps.value !== this.props.value)\n {\n const value: string = this.inputValue();\n if (value !== this.state.dateString)\n {\n this.setState({\n dateString: value,\n });\n }\n }\n }\n\n componentWillUnmount() {\n document.removeEventListener('mousedown', (e) => this.handleDropdownClickedOutside(e));\n }\n\n handleDropdownClickedOutside = (event: any) => {\n // Close dropdown if user clicks outside\n if (this.state.show && !this.dropdownRef?.current?.contains(event.target))\n this.handleShowCalendar(event);\n }\n\n handleShowCalendar = (event: React.MouseEvent) => {\n if (event.stopPropagation) \n event.stopPropagation();\n \n event.preventDefault();\n\n this.setState({\n show: !this.state.show,\n });\n }\n\n handleCalendarOnChange = (value: Date, event: React.ChangeEvent) => {\n this.props.handleCalendarOnChange(value, event);\n this.setState({\n show: false,\n });\n }\n\n inputValue = (): string => {\n return this.props.value ? (typeof this.props.value === 'number') ? convertTimestampToDateString(this.props.value) : formatDateToDanishSignature(this.props.value) : '';\n }\n\n handleInputFieldDateOnChange = (e: React.ChangeEvent) => {\n if (this.props.editDateOnInputField)\n {\n const regexForOnlyNumbers: RegExp = /^[0-9]+$/;\n let dateValue: string = this.replaceDateString(e?.target?.value);\n const isValidDateNumber: boolean = regexForOnlyNumbers.test(dateValue);\n \n if (isValidDateNumber && dateValue?.length <= 8 || !isValidDateNumber && dateValue?.length === 0)\n {\n const day: string = dateValue?.slice(0, 2);\n const month: string = dateValue?.slice(2, 4);\n const year: string = dateValue?.slice(4, 8);\n \n let validDay: boolean = true;\n let validMonth: boolean = true;\n \n if (day?.length > 0 && Number(day) > 31)\n validDay = false;\n if (month?.length > 0 && Number(month) > 12 || month?.length === 1 && Number(month) > 1)\n validMonth = false;\n \n if (validDay && validMonth)\n {\n if (e?.target?.selectionStart)\n {\n // checking if we are removing characters.\n if (e?.target?.selectionStart < this.cursor)\n {\n if (e?.target?.selectionStart > 9)\n this.cursor = e?.target?.selectionStart - 1;\n else \n this.cursor = e?.target?.selectionStart;\n }\n else \n {\n if (e?.target?.selectionStart > 2)\n this.cursor = e?.target?.selectionStart + 1;\n else \n this.cursor = e?.target?.selectionStart;\n }\n \n }\n \n // update state on the parent component\n if (this.isValidDate(dateValue))\n this.setTimeOnDate(this.convertCustomDateStringToDate(dateValue), e);\n \n this.setState({\n dateString: dateValue,\n }, () => {\n if (this.inputRef?.current)\n this.inputRef.current.setSelectionRange(this.cursor, this.cursor);\n });\n }\n else \n {\n // move cursor back so it stays behind the value we are trying to set\n if (e?.target?.selectionStart)\n this.cursor = e?.target?.selectionStart - 1;\n \n setTimeout(() => {\n if (this.inputRef?.current)\n this.inputRef.current.setSelectionRange(this.cursor, this.cursor);\n }, 50);\n }\n }\n }\n }\n\n handleInputFieldDateToDisplay = (): string => {\n const value = this.replaceDateString(this.state.dateString);\n if (value?.length > 0)\n {\n let strToReturn: string = '';\n const day: string = value?.slice(0, 2);\n const month: string = value?.slice(2, 4);\n const year: string = value?.slice(4, 8);\n\n\n if (day?.length > 0)\n {\n if (day.length === 1)\n strToReturn += day + 'd';\n else \n strToReturn += day;\n }\n else \n strToReturn += 'dd';\n\n if (month?.length > 0)\n {\n if (month.length === 1)\n strToReturn += '/' + month + 'm';\n else \n strToReturn += '/' + month;\n }\n else \n strToReturn += '/mm';\n\n\n if (year?.length > 0)\n {\n let yToDisplay = '';\n for (let i = 4; i > year.length; i--) {\n yToDisplay += 'å'; \n }\n\n strToReturn += '-' + year + yToDisplay;\n }\n else \n strToReturn += '-åååå';\n\n return strToReturn;\n }\n else \n return '';\n }\n\n convertCustomDateStringToDate = (dateString: string): Date => {\n const value = this.replaceDateString(dateString);\n const day: string = value?.slice(0, 2);\n const month: string = value?.slice(2, 4);\n const year: string = value?.slice(4, 8);\n return new Date(Number(year), Number(month) - 1, Number(day));\n }\n\n replaceDateString = (value: string): string => {\n let newVal: string = '';\n newVal = newVal.concat(value);\n return newVal?.replace('/', '')?.replace('-', '')?.replace(/d/g, \"\")?.replace(/m/g, \"\")?.replace(/å/g, \"\");;\n }\n\n \n\t// Setting time on date, because date is 00:00:00 and will eventually cause the backend to validate the date to go one day back\n\t// So for instance 07/01-2022 would be 06/01-2022 in the backend because of the time\n\tsetTimeOnDate = (date: Date, event: React.ChangeEvent) => {\n\t\tlet tempDate: Date = new Date(date);\n\t\tconst todaysDate: Date = new Date;\n\n\t\ttempDate.setHours(todaysDate?.getHours());\n\t\ttempDate.setMinutes(todaysDate?.getMinutes());\n\t\ttempDate.setSeconds(todaysDate?.getSeconds());\n\t\t\n\t\tthis.props.handleCalendarOnChange(tempDate, event);\n\t}\n\n handleTileDisabled = (date: Date): boolean => {\n // true will make tile disabled\n\n\t\tif (this.props.tilesToDisable && this.props.tilesToDisable?.length > 0)\n\t\t{\n\t\t\tfor (let i = 0; i < this.props.tilesToDisable.length; i++)\n\t\t\t{\n\t\t\t\tif (this.props.tilesToDisable[i]?.date !== null)\n\t\t\t\t{\n\t\t\t\t\tlet conditionalOperator = this.props.tilesToDisable[i]?.conditionalOperator;\n\t\t\t\t\tlet dateToCompare = newDateWithoutTimestamp(this.props.tilesToDisable[i]?.date!);\n\t\n\t\t\t\t\tif (conditionalOperator === '<' && date < dateToCompare)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\telse if (conditionalOperator === '>' && date > dateToCompare)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\telse if (conditionalOperator === '<=' && date <= dateToCompare)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\telse if (conditionalOperator === '>=' && date >= dateToCompare)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\telse if (conditionalOperator === '==' && date?.getTime() === dateToCompare?.getTime())\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\telse \n\t\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t}\n\t\telse \n\t\t\treturn false; \n\t}\n\n isValidDate = (dateString: string): boolean => {\n return this.replaceDateString(dateString)?.length === 8 && !this.handleTileDisabled(this.convertCustomDateStringToDate(dateString));\n }\n\n render() {\n return (\n
\n

{this.props.title ? this.props.title + ':' : ''}{this.props.isMandatory ? * : null}

\n this.handleInputFieldDateOnChange(e)} />\n {!this.props.disabled ? \n \n this.handleShowCalendar(e)} />\n {this.props.handleCloseIcon && !isEmptyOrUndefined(this.props.value) ? : null} \n \n \n \n this.handleCalendarOnChange(value, e)} tilesToDisable={this.props.tilesToDisable} />\n \n \n \n : null }\n
\n );\n }\n}\n\nexport default DropdownCalendar;","// Blob mimes is the same as Media type or Content type\nexport enum BlobMimes {\n OCTET = \"application/octet-stream\",\n PDF = \"application/pdf\"\n}\n\nexport const downloadOrOpenBlob = (data: Blob, filename: string, mime: BlobMimes, blobWindow: Window | null) => {\n // It is necessary to create a new blob object with mime-type explicitly set\n // otherwise only Chrome works like it should\n const blob = new Blob([data], {type: mime});\n if (typeof window.navigator.msSaveBlob !== 'undefined') {\n // IE doesn't allow using a blob object directly as link href.\n // Workaround for \"HTML7007: One or more blob URLs were\n // revoked by closing the blob for which they were created.\n // These URLs will no longer resolve as the data backing\n // the URL has been freed.\"\n window.navigator.msSaveBlob(blob, filename);\n return;\n }\n // Other Browsers\n const blobURL = window.URL.createObjectURL(blob);\n if(blobWindow != null)\n {\n blobWindow.location.href = blobURL;\n } \n else \n {\n const tempLink = document.createElement('a');\n tempLink.style.display = 'none';\n tempLink.href = blobURL;\n tempLink.setAttribute('download', filename);\n // Safari thinks _blank anchor are pop ups. We only want to set _blank\n // target if the browser does not support the HTML5 download attribute.\n // This allows you to download files in desktop safari if pop up blocking\n // is enabled.\n if (typeof tempLink.download === 'undefined') {\n tempLink.setAttribute('target', '_blank');\n }\n document.body.appendChild(tempLink);\n tempLink.click();\n document.body.removeChild(tempLink);\n }\n\n setTimeout(() => {\n // For Firefox it is necessary to delay revoking the ObjectURL\n window.URL.revokeObjectURL(blobURL);\n }, 100);\n}","import * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { isEmptyOrUndefined, isObjEmpty } from \"../../../helpers/TypeChecks\";\nimport CodeListEntryModel from \"../../../models/CodeListEntryModel\";\nimport JobSearchEntryModel, { joblogEntryTypeOfSubmissionTypes } from \"../../../models/JobSearchEntryModel\";\nimport SimpleIdentityModel from \"../../../models/SimpleIdentityModel\";\nimport { AppState } from \"../../../store\";\nimport { TilesToDisableDatesTypes } from \"../../CalendarGeneral/CalendarGeneral\";\nimport DropdownCalendar from \"../../Dropdown/DropdownCalendar\";\nimport RoundedCheckMark from \"../../RoundedCheckMark\";\nimport { JobSearchStatus } from '../../../models/JobLogEntryModel';\nimport \"./JobLogApplyMethod.scss\";\n\ninterface OwnProps {\n\tjobLog: JobSearchEntryModel;\n\thandleUpdateJobLog: (data: JobSearchEntryModel) => void;\n\tisExistingItem: boolean;\n\tdisabled?: boolean;\n\tisMobile: boolean;\n}\n\ninterface State {\n\tjobLog: JobSearchEntryModel;\n}\n\ninterface LinkStateProps {\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n});\n\ntype Props = OwnProps & LinkStateProps;\n\nclass JobLogApplyMethod extends React.Component {\n\tconstructor(props: Props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tjobLog: this.props.jobLog,\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tif (this.props.jobLog !== this.state.jobLog)\n\t\t{\n\t\t\tthis.setState({\n\t\t\t\tjobLog: this.props.jobLog,\n\t\t\t});\n\t\t}\n\t}\n\n\tcomponentDidUpdate(prevProps: Props, prevState: State) {\n\t\tif (prevProps.jobLog !== this.props.jobLog)\n\t\t{\n\t\t\tthis.setState({\n\t\t\t\tjobLog: this.props.jobLog,\n\t\t\t});\n\t\t}\n\n\t\tif (prevState.jobLog !== this.state.jobLog && this.state.jobLog !== this.props.jobLog)\n\t\t\tthis.props.handleUpdateJobLog(this.state.jobLog);\n\t}\n\n\thandleApplyMethodContentOnChange = (e: React.MouseEvent | React.ChangeEvent, property: string, data?: any) => {\n\t\tconst val = Number((data as SimpleIdentityModel)?.id);\n\n\t\tswitch (property) {\n\t\t\tcase 'typeOfSubmission':\n\t\t\t\tif (this.state.jobLog?.typeOfSubmission?.identifier === val)\n\t\t\t\t{\n\t\t\t\t\tthis.setState({\n\t\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\t\ttypeOfSubmission: undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.setState({\n\t\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\t\ttypeOfSubmission: {\n\t\t\t\t\t\t\t\t...this.state.jobLog?.typeOfSubmission ?? {} as CodeListEntryModel,\n\t\t\t\t\t\t\t\tidentifier: val,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'submissionDate':\n\t\t\t\tlet tempDate = new Date(data);\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tsubmissionDate: tempDate,\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'submissionDeadlineDate':\n\t\t\t\tlet tempDeadlineDate = new Date(data);\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tsubmissionDeadlineDate: tempDeadlineDate,\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\tclearDates = (property: string) => {\n\t\tswitch (property) {\n\t\t\tcase 'submissionDate':\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tsubmissionDate: undefined,\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'submissionDeadlineDate':\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tsubmissionDeadlineDate: undefined,\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\trender() {\n\t\t// const deadlineDate = new Date(this.state.jobLog?.submissionDeadlineDate ?? '');\n\t\t\n\t\tconst tilesToDisable: TilesToDisableDatesTypes[] = [\n\t\t\t{ date: new Date(), conditionalOperator: '>' },\n\t\t\t// { date: deadlineDate, conditionalOperator: '>'}\n\t\t]\n\n\t\treturn (\n\t\t\t
\n\t\t\t\t

Hvordan søger eller søgte du jobbet?

\n\t\t\t\t
\n\t\t\t\t\t{joblogEntryTypeOfSubmissionTypes()?.map((val) => (\n\t\t\t\t\t\t this.handleApplyMethodContentOnChange(e, 'typeOfSubmission', val)} isChecked={this.state.jobLog?.typeOfSubmission?.identifier === val?.id} />\n\t\t\t\t\t))}\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

Ansøgningsdato

\n\t\t\t\t\t\t this.clearDates('submissionDate')} title=\"\" value={this.state.jobLog?.submissionDate} tilesToDisable={tilesToDisable} handleCalendarOnChange={(date) => this.handleApplyMethodContentOnChange({} as any, 'submissionDate', date)} />\n\t\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t

Ansøgningsfrist

\n\t\t\t\t\t\t this.clearDates('submissionDeadlineDate')} title=\"\" value={this.state.jobLog?.submissionDeadlineDate} handleCalendarOnChange={(date) => this.handleApplyMethodContentOnChange({} as any, 'submissionDeadlineDate', date)} />\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default connect(mapStateToProps)(JobLogApplyMethod);\n","import * as React from 'react';\nimport './InputFile.scss';\n\ninterface Props { \n title: string;\n onChange: (e: React.ChangeEvent) => void;\n accept?: 'application/pdf';\n clearValue?: boolean;\n}\n\ninterface State { }\n\nclass InputFile extends React.Component {\n private inputFileRef: React.RefObject;\n constructor(props: Props) {\n super(props);\n this.state = { };\n this.inputFileRef = React.createRef();\n }\n\n componentDidUpdate(prevProps: Props) {\n if (this.props.clearValue !== undefined && !prevProps.clearValue && this.props.clearValue)\n this.clearValue();\n }\n\n clearValue = () => {\n if (this.inputFileRef?.current)\n this.inputFileRef.current.value = '';\n }\n\n handleAddFile = (e: any) => {\n this.props.onChange(e);\n if (this.inputFileRef && this.inputFileRef.current)\n {\n // resetting input.value to an empty string, to be able to add the same file over and over agian.\n this.inputFileRef.current.value = \"\";\n }\n\n }\n\n render() {\n\n return (\n \n );\n }\n}\n\nexport default InputFile;","import { faEye, faFileDownload } from '@fortawesome/free-solid-svg-icons';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport * as React from 'react';\nimport paperClip from '../../images/paper-clip.svg';\nimport closeIcon from '../../images/times-close-icon.svg';\nimport { DFDGDocument } from '../../models/DFDGDocument';\nimport FileModel from '../../models/FileModel';\nimport './ApplicationFile.scss';\n\ninterface Props {\n file: DFDGDocument;\n deleteFile: () => void;\n downloadFile: () => void;\n}\n\ninterface State { }\n\nclass ApplicationFile extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = { };\n\n }\n\n render() {\n\n return (\n
\n
\n
\n \n

{this.props.file?.documentType}

\n
\n
\n

{this.props.file?.title}

\n
\n \n
\n \n
\n );\n }\n}\n\nexport default ApplicationFile;","export const getDocumentCodeListTypeName =(val: string) => {\n switch(val)\n {\n case \"Ansøgning\":\n return \"Jobansøgninger\";\n\n default:\n return val;\n }\n}","import { Guid } from \"guid-typescript\";\n\nexport default class JobLogToJobMapModel {\n jobSearchEntryId: Guid;\n jobNetId: string;\n\n constructor(jobSearchEntryId: Guid, jobNetId: string) {\n this.jobSearchEntryId = jobSearchEntryId;\n this.jobNetId = jobNetId;\n }\n}","import * as actions from \"./types\";\n\nexport const setLoader = (shouldLoad: boolean, loadText: string, lowerBackDropOpacity?: boolean): actions.LoaderActionTypes => ({\n type: actions.SET_LOADER,\n shouldLoad: shouldLoad,\n loadText: loadText,\n lowerBackDropOpacity: lowerBackDropOpacity,\n});","import withReactContent from 'sweetalert2-react-content';\nimport swal, { SweetAlertCustomClass } from \"sweetalert2\";\nimport { isEmptyOrUndefined } from './TypeChecks';\n\nconst MySwal = withReactContent(swal);\n\nexport type SwalType = {\n title?: string;\n text?: string;\n html?: string | HTMLElement | JQuery;\n confirmButtonTxt?: string;\n cancelButtonTxt?: string;\n customClasses?: SweetAlertCustomClass;\n closeButton?: boolean;\n}\n\nexport const showCustomSwal = (data: SwalType, callback: (confirm: boolean) => void) => {\n const customClasses: SweetAlertCustomClass = {\n popup: 'swal-popup',\n container: 'swal-popup-customized-background',\n confirmButton: 'swal-customized-confirm swal-buttons',\n cancelButton: 'swal-customized-cancel swal-buttons',\n };\n // setting timeout to always show the swal no matter if the Toast is showing.\n // Its currently not possible to show multiple swals at the same time for good reason.\n setTimeout(() => {\n MySwal.fire({\n title: data?.title,\n text: data?.text,\n html: data?.html,\n showConfirmButton: !isEmptyOrUndefined(data?.confirmButtonTxt),\n showCancelButton: !isEmptyOrUndefined(data?.cancelButtonTxt),\n confirmButtonText: data?.confirmButtonTxt,\n cancelButtonText: data?.cancelButtonTxt,\n reverseButtons: true,\n showCloseButton: data?.closeButton,\n focusCancel: false,\n focusConfirm: false,\n customClass: {\n ...customClasses,\n ...data?.customClasses\n },\n }).then((results: any) => {\n if (results?.value) \n callback(true);\n else\n callback(false);\n });\n }, 50);\n}","import { RssFeed } from \"@material-ui/icons\";\nimport { Guid } from \"guid-typescript\";\nimport { batch } from \"react-redux\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { AppState } from \"..\";\nimport { getOptions, getOptionsFormData } from \"../../AzureAuth/api\";\nimport { apiInfo } from \"../../AzureAuth/ApiInfo\";\nimport { getDocumentCodeListTypeName } from \"../../helpers/CodeListHelper\";\nimport { emptyRemainingJobPathModel } from \"../../helpers/CreateEmptyDataObjects\";\nimport { createEmptyGuid } from \"../../helpers/CreateGuid\";\nimport { ToastIcon, TopToast } from \"../../helpers/ToastHelper\";\nimport { formatCollectionWithoutProp, isEmptyOrUndefined } from \"../../helpers/TypeChecks\";\nimport { DFDGDocument } from \"../../models/DFDGDocument\";\nimport GeoPoint from \"../../models/GeoPoint\";\nimport HttpMethods from \"../../models/HttpMethodsEnum\";\nimport JobLogToJobMapModel from \"../../models/JobLogToJobMapModel\";\nimport JobModel from \"../../models/JobModel\";\nimport JobPathModel, { isJobPathSaved, JobPathType } from \"../../models/JobPathModel\";\nimport JobSearchEntryModel from \"../../models/JobSearchEntryModel\";\nimport { UnemploymentFundMembershipType } from \"../../models/UnemploymentFundMembershipType\";\nimport { AppActions } from \"../AppActions\";\nimport { addJobSearchIdToJobPath, addPinnedJobsFromMyPlan, removeJobFromJobpath, removeJobSearchIdFromJobPath, setJobPaths } from \"../JobPathList/actions\";\nimport { setLoader } from \"../Loader/actions\";\nimport * as actions from \"./types\";\nimport { showCustomSwal } from \"../../helpers/SwalHelper\";\n\nexport const clearAllPrintData = (): actions.PersonActionTypes => ({\n type: actions.CLEAR_ALL_PERSON_DATA,\n});\n\nexport const setJobSearchEntries = (data: JobSearchEntryModel[]): actions.PersonActionTypes => ({\n type: actions.SET_JOB_SEARCH_ENTRIES,\n data: data,\n});\n\nexport const setJobSearchEntry = (data: JobSearchEntryModel): actions.PersonActionTypes => ({\n type: actions.SET_JOB_SEARCH_ENTRY,\n data: data,\n});\n\nexport const updateJobSearchEntry = (data: JobSearchEntryModel): actions.PersonActionTypes => ({\n type: actions.UPDATE_JOB_SEARCH_ENTRY,\n data: data,\n});\n\nexport const removeJobSearchEntry = (data: JobSearchEntryModel): actions.PersonActionTypes => ({\n type: actions.DELETE_JOB_SEARCH_ENTRY,\n data: data,\n});\n\nexport const addDocumentToJobLog = (joblogEntryIdentifier: Guid, document: DFDGDocument, file: File, sentToService?: boolean): actions.PersonActionTypes => ({\n type: actions.ADD_DOCUMENT_TO_JOBLOG,\n joblogEntryIdentifier: joblogEntryIdentifier,\n document: document,\n file: file,\n sentToService: sentToService!\n});\n\nexport const removeDocumentFromJobLog = (joblogEntryIdentifier: Guid, jobLogDocumentIdentifier: Guid, document: DFDGDocument, removeInJobSearchEntries: boolean): actions.PersonActionTypes => ({\n type: actions.REMOVE_DOCUMENT_ON_JOBLOG,\n joblogEntryIdentifier: joblogEntryIdentifier,\n jobLogDocumentIdentifier: jobLogDocumentIdentifier,\n document: document,\n removeDocumentInJobSearchEntries: removeInJobSearchEntries,\n});\n\nexport const clearTempFiles = (): actions.PersonActionTypes => ({\n type: actions.CLEAR_TEMP_FILES\n});\n\nexport const updateJobSearchEntriesWithJobPathIDs = (data: JobPathModel[]): actions.PersonActionTypes => ({\n type: actions.UPDATE_JOB_SEARCH_ENTRIES_WITH_JOBPATH_ID,\n data: data,\n});\n\nexport const setJobPathIDOnJobSearchEntry = (jobPathID: Guid, jobEntryID: Guid): actions.PersonActionTypes => ({\n type: actions.SET_JOBPATH_ID_ON_JOB_SEARCH_ENTRY,\n jobPathID: jobPathID,\n jobEntryID: jobEntryID,\n});\n\nexport const setPersonGeoData = (geoData: GeoPoint): actions.PersonActionTypes => ({\n type: actions.SET_PERSON_GEO_DATA,\n data: geoData,\n});\n\nexport const setShowGeoLocationModal = (data: boolean): actions.PersonActionTypes => ({\n type: actions.SET_SHOW_GEO_LOCATION_MODAL,\n data: data,\n});\n\nexport const setPersonMemberShip = (data: UnemploymentFundMembershipType): actions.PersonActionTypes => ({\n type: actions.SET_PERSON_MEMBER_SHIP,\n data: data,\n});\n\nexport const setHasJobPathFilters = (hasJobPathFilters: boolean): actions.PersonActionTypes => ({\n type: actions.SET_HAS_JOBPATH_FILTERS,\n hasJobPathFilters: hasJobPathFilters,\n});\n\nexport const fetchJobSearchEntries = () => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const to: Date = new Date();\n const from: Date = new Date();\n from.setMonth(from.getMonth() - 5);\n const res = await fetch(apiInfo.endpoints.PersonService.GetEntries + `${from?.toISOString().substr(0,10)}/${to.toISOString().substr(0,10)}`, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) \n {\n const data: JobSearchEntryModel[] = await res.json();\n batch(() => {\n dispatch(setJobSearchEntries(data));\n \n const jobPaths = [...getState().jobPathList.jobPaths, getState().jobPathList.remainingJobPath];\n if (jobPaths?.length > 0)\n dispatch(updateJobSearchEntriesWithJobPathIDs(jobPaths));\n });\n } \n else \n {\n // error\n dispatch(setJobSearchEntries([]));\n }\n } catch (error) {\n // error\n dispatch(setJobSearchEntries([]));\n }\n };\n}\n\nexport const postJobSearchEntry = (jobEntry: JobSearchEntryModel, callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n dispatch(setLoader(true, 'Opretter joblog', true));\n const res = await fetch(!isEmptyOrUndefined(jobEntry?.jobPathID) ? apiInfo.endpoints.PersonService.PostJobSearchEntryWithJobPath + `${jobEntry?.jobPathID}/jobnetid/${jobEntry?.jobNetId ?? ''}` : apiInfo.endpoints.PersonService.PostJobSearchEntry, await getOptions(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, jobEntry));\n if (res.ok) \n {\n const data: JobSearchEntryModel = await res.json();\n data.created = new Date();\n if (!isEmptyOrUndefined(jobEntry?.jobPathID))\n data.jobPathID = jobEntry.jobPathID!;\n\n dispatch(setJobSearchEntry(data));\n dispatch(handleFilesOnSave((documentsFailed: string[]) => {\n // remove job from jobpathfilters if it was a success and criteria is fulfilled.\n if (!isEmptyOrUndefined(jobEntry?.jobPathID))\n {\n // should only result in one combined re-render, not two.\n // to avoid old data being updated because the last dispatch call is faster than the other.\n batch(() => {\n dispatch(addJobSearchIdToJobPath(jobEntry?.jobPathID!, new JobLogToJobMapModel(data?.id, jobEntry?.jobNetId ?? '')));\n // updating on jobpath redux state to make a put call to update jobpathfilters.\n if (!isEmptyOrUndefined(jobEntry?.jobNetId))\n dispatch(removeJobFromJobpath(jobEntry?.jobNetId!, jobEntry?.jobPathID!));\n });\n }\n\n TopToast(ToastIcon.SUCCESS).fire({\n title: 'Jobloggen blev oprettet',\n backdrop: false,\n });\n\n if (documentsFailed?.length > 0)\n {\n setTimeout(() => {\n showCustomSwal({\n closeButton: true,\n title: 'Ét eller flere dokumenter blev ikke oprettet korrekt!',\n confirmButtonTxt: 'OK',\n text: `Disse dokumenter blev ikke oprettet korrekt: ${formatCollectionWithoutProp(documentsFailed, ', ', '.')}`,\n customClasses: {\n content: 'swal2-content-error-msg',\n }\n }, (confirm) => {\n \n });\n }, 1000);\n }\n\n dispatch(setLoader(false, '', false));\n callback(true);\n\n }, data?.id));\n } \n else \n {\n // error\n TopToast(ToastIcon.ERROR).fire({\n title: 'Fejl! Jobloggen blev ikke oprettet korrekt',\n backdrop: false,\n });\n dispatch(setLoader(false, '', false));\n callback(false);\n }\n } catch (error) {\n // error\n TopToast(ToastIcon.ERROR).fire({\n title: 'Fejl! Jobloggen blev ikke oprettet korrekt',\n backdrop: false,\n });\n dispatch(setLoader(false, '', false));\n callback(false);\n }\n };\n}\n\nexport const putJobSearchEntry = (jobEntry: JobSearchEntryModel, callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n dispatch(setLoader(true, 'Opdaterer joblog', true));\n const res = await fetch(apiInfo.endpoints.PersonService.PutJobSearchEntry, await getOptions(HttpMethods.PUT, apiInfo.scopes.DSA_Members.UserRead, jobEntry));\n if (res.ok) \n {\n const data: JobSearchEntryModel = await res.json();\n dispatch(updateJobSearchEntry(data));\n dispatch(handleFilesOnSave((documentsFailed) => {\n TopToast(ToastIcon.SUCCESS).fire({\n title: 'Jobloggen blev opdateret',\n backdrop: false,\n });\n\n if (documentsFailed?.length > 0)\n {\n setTimeout(() => {\n showCustomSwal({\n closeButton: true,\n title: 'Ét eller flere dokumenter blev ikke opdateret korrekt!',\n confirmButtonTxt: 'OK',\n text: `Disse dokumenter blev ikke opdateret korrekt: ${formatCollectionWithoutProp(documentsFailed, ', ', '.')}`,\n customClasses: {\n content: 'swal2-content-error-msg',\n }\n }, (confirm) => {\n \n });\n }, 1000);\n }\n \n dispatch(setLoader(false, '', false));\n callback(true);\n }));\n } \n else \n {\n // error\n TopToast(ToastIcon.ERROR).fire({\n title: 'Fejl! Jobloggen blev ikke opdateret korrekt',\n backdrop: false,\n });\n dispatch(setLoader(false, '', false));\n callback(false);\n }\n } catch (error) {\n // error\n TopToast(ToastIcon.ERROR).fire({\n title: 'Fejl! Jobloggen blev ikke opdateret korrekt',\n backdrop: false,\n });\n dispatch(setLoader(false, '', false));\n callback(false);\n }\n };\n}\n\nexport const deleteJobSearchEntry = (jobEntry: JobSearchEntryModel, callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n dispatch(setLoader(true, 'Sletter joblog', true));\n const res = await fetch(apiInfo.endpoints.PersonService.DeleteJobSearchEntry + jobEntry?.id, await getOptions(HttpMethods.DELETE, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) \n {\n const isRemoved: boolean = await res.json();\n if (isRemoved)\n dispatch(removeJobSearchEntry(jobEntry));\n\n if (!isEmptyOrUndefined(jobEntry?.jobPathID))\n dispatch(removeJobSearchIdFromJobPath(jobEntry?.id, jobEntry?.jobPathID!));\n\n dispatch(setLoader(false, '', false));\n callback(true);\n } \n else \n {\n // error\n dispatch(setLoader(false, '', false));\n callback(false);\n }\n } catch (error) {\n // error\n dispatch(setLoader(false, '', false));\n callback(false);\n }\n };\n}\n\nexport const fetchJobPathFilters = (callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const res = await fetch(apiInfo.endpoints.PersonService.GetJobPathFilters, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) \n { \n let updateJobPathFilters: boolean = false;\n let hasJobPathFilters: boolean = false;\n\n let data: JobPathModel[] = await res.json();\n if (data?.length > 0)\n {\n let pinnedJobs: JobModel[] = [];\n if (data?.find(jobpath => jobpath?.name?.toLowerCase() === \"øvrige\") === undefined)\n {\n data = [...data, emptyRemainingJobPathModel()];\n updateJobPathFilters = true;\n }\n\n data = data?.filter(j => j?.isActive)?.map((jobpath) => {\n if (jobpath && isEmptyOrUndefined(jobpath?.type))\n jobpath.type = JobPathType.NormalJobPath;\n \n jobpath.isFilterChosen = true;\n jobpath.filteredJobs = [];\n \n if(jobpath?.pinnedJobs == null)\n jobpath.pinnedJobs = [];\n \n if(jobpath?.companyJobs == null)\n jobpath.companyJobs = [];\n \n if (jobpath?.pinnedJobs?.length > 0)\n pinnedJobs = pinnedJobs.concat(jobpath.pinnedJobs);\n \n return jobpath;\n });\n \n if (data?.filter(j => j?.name?.toLowerCase() !== 'øvrige')?.length > 0)\n hasJobPathFilters = true;\n\n dispatch(addPinnedJobsFromMyPlan(pinnedJobs));\n }\n else \n {\n data = [emptyRemainingJobPathModel()];\n updateJobPathFilters = true;\n }\n \n dispatch(setJobPaths(data));\n // dispatch(setJobPathFilters(data));\n if (updateJobPathFilters)\n dispatch(putJobPathFilters(data));\n\n dispatch(setHasJobPathFilters(hasJobPathFilters));\n \n callback(true);\n } \n else \n {\n // error\n dispatch(setJobPaths([emptyRemainingJobPathModel()]));\n dispatch(setHasJobPathFilters(false));\n callback(false);\n }\n } catch (error) {\n // error\n // dispatch(setJobPathFilters([]));\n dispatch(setJobPaths([emptyRemainingJobPathModel()]));\n dispatch(setHasJobPathFilters(false));\n callback(false);\n }\n };\n}\n\nexport const putJobPathFilters = (jobPathFilters: JobPathModel[]) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n let tempJobPaths: JobPathModel[] = [];\n if (jobPathFilters?.length > 0)\n {\n jobPathFilters.filter(j => isJobPathSaved(j))?.map((jobpath) => {\n let tempJobpath = {...jobpath};\n\n // removing unneeded data\n tempJobpath.filteredJobs = [];\n tempJobpath.filteredOccupations = [];\n tempJobpath.similarQualifications = [];\n tempJobPaths.push(tempJobpath);\n });\n }\n const res = await fetch(apiInfo.endpoints.PersonService.PutJobPathFilters, await getOptions(HttpMethods.PUT, apiInfo.scopes.DSA_Members.UserRead, tempJobPaths));\n if (res.ok) \n {\n // const data: JobPathModel[] = await res.json();\n // dispatch(setJobPathFilters(data));\n } \n else \n {\n // error\n }\n } catch (error) {\n // error\n }\n };\n}\n\nexport const addJobOnJobPathFilter = (jobPathID: Guid, job: JobModel, jobType: \"job\" | \"order\" | \"company\", callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const res = await fetch(apiInfo.endpoints.PersonService.PutJobPathFiltersWithJob + jobPathID + '/job', await getOptions(HttpMethods.PUT, apiInfo.scopes.DSA_Members.UserRead, job));\n if (res.ok) \n {\n const isAdded: boolean = await res.json();\n if (isAdded && job?.isPinnedJob)\n {\n dispatch(pinJobOnJobPathFilter(jobPathID, job, jobType, (success) => {\n callback(isAdded);\n }));\n }\n else \n callback(isAdded);\n } \n else \n {\n // error\n callback(false);\n }\n } catch (error) {\n // error\n callback(false);\n }\n };\n}\n\nexport const deleteJobOnJobPathFilter = (jobPathID: Guid, job: JobModel, jobType: \"job\" | \"order\" | \"company\", callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const res = await fetch(apiInfo.endpoints.PersonService.DeleteJob + `${jobPathID}/job/${job?.id}`, await getOptions(HttpMethods.DELETE, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) \n {\n const isRemoved: boolean = await res.json();\n callback(isRemoved);\n } \n else \n {\n // error\n callback(false);\n }\n } catch (error) {\n // error\n callback(false);\n }\n };\n}\n\nexport const pinJobOnJobPathFilter = (jobPathID: Guid, job: JobModel, jobType: \"job\" | \"order\" | \"company\", callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const res = await fetch(apiInfo.endpoints.PersonService.PinJobToJobPath + `${jobPathID}/pin`, await getOptions(HttpMethods.PUT, apiInfo.scopes.DSA_Members.UserRead, job));\n if (res.ok) \n {\n const success: boolean = await res.json();\n callback(success);\n // if (isRemoved)\n // dispatch(removeJobOnJobPathFilter(job, jobPathID, jobType));\n } \n else \n {\n // error\n callback(false);\n }\n } catch (error) {\n // error\n callback(false);\n }\n };\n}\n\n\nconst uploadFile = (joblogEntryIdentifier: Guid, type: string, file: File, callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n let formData: FormData = new FormData();\n formData.append('file',file, file.name);\n const baseUrl = apiInfo.endpoints.PersonService.Document + `${joblogEntryIdentifier}?type=${getDocumentCodeListTypeName(type)}`;\n const res = await fetch(baseUrl, await getOptionsFormData(HttpMethods.POST, apiInfo.scopes.DSA_Members.UserRead, formData));\n if (res.ok) \n {\n const document: DFDGDocument = await res.json();\n dispatch(addDocumentToJobLog(joblogEntryIdentifier, document, file, true));\n callback(true);\n } \n else \n {\n // error\n callback(false);\n }\n } catch (error) {\n // error\n callback(false);\n }\n };\n}\n\n\nconst deleteFile = (joblogEntryIdentifier: Guid, joblogDocumentIdentifier: Guid,doc: DFDGDocument,callback: (success: boolean) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const res = await fetch(apiInfo.endpoints.PersonService.Document + `${joblogDocumentIdentifier}`, await getOptions(HttpMethods.DELETE, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) \n {\n dispatch(removeDocumentFromJobLog(joblogEntryIdentifier, joblogDocumentIdentifier, doc, true));\n callback(true);\n } \n else \n {\n callback(false);\n // error\n \n }\n } catch (error) {\n callback(false);\n // error\n \n }\n };\n}\n\nexport const downloadFile = (joblogDocumentIdentifier: Guid,doc: DFDGDocument) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n await fetch(apiInfo.endpoints.PersonService.Document + joblogDocumentIdentifier + '/getjoblog', await getOptions(HttpMethods.PUT, apiInfo.scopes.DSA_Members.UserRead,doc))\n .then(res => res.blob())\n .then(function (myBlob){\n var downloadURL = window.URL.createObjectURL(myBlob);\n \n var link = document.createElement('a');\n link.href = downloadURL;\n let fileNameAndType = doc.title + \".\" + doc.extension;\n let filedownloadName = fileNameAndType.replace(/\"/g, '');\n link.setAttribute('download',filedownloadName);\n document.body.appendChild(link);\n link.click();\n document.body.removeChild(link);\n });\n } catch (error) {\n // error\n \n }\n };\n}\n\n\nexport const uploadDocumentToRedux = (joblogEntryIdentifier: Guid,type: string,document: DFDGDocument, file: File) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n dispatch(addDocumentToJobLog(joblogEntryIdentifier,document, file));\n \n } catch (error) {\n // error\n \n }\n };\n}\n\n\nexport const removeDocumentFromRedux = (joblogEntryIdentifier: Guid, joblogDocumentIdentifier: Guid, document: DFDGDocument) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n dispatch(removeDocumentFromJobLog(joblogEntryIdentifier, joblogDocumentIdentifier, document, false));\n \n } catch (error) {\n // error\n \n }\n };\n}\n\n\nexport const handleFilesOnSave = (callback: (documentsFailed: string[]) => void, createdJobSearchEntryId?: Guid) =>{\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const tempFiles = getState().person.tempFiles;\n if (tempFiles?.length > 0)\n {\n let documentsFailed: string[] = [];\n let count = 0;\n for (let i = 0; i < tempFiles.length; i++)\n {\n let tempFile = {...tempFiles?.[i]};\n if (tempFile?.handleDocumentIdentifier == 'NEW' && tempFile?.file !== undefined)\n {\n if (!isEmptyOrUndefined(createdJobSearchEntryId) && createdJobSearchEntryId !== createEmptyGuid())\n tempFile.joblogEntryIdentifier = createdJobSearchEntryId;\n \n await dispatch(uploadFile(tempFile.joblogEntryIdentifier!, tempFile?.documentType, tempFile.file!, (success: boolean) => {\n count++;\n if (!success)\n documentsFailed.push(tempFile?.title);\n }));\n }\n else if (tempFile?.handleDocumentIdentifier == 'DELETED' && !tempFile?.joblogEntryIdentifier?.isEmpty)\n {\n await dispatch(deleteFile(tempFile?.joblogEntryIdentifier!, tempFile?.id, tempFile, (success: boolean) => {\n count++;\n if (!success)\n documentsFailed.push(tempFile?.title);\n }));\n }\n else \n count++;\n }\n\n if (count === tempFiles?.length)\n callback(documentsFailed);\n }\n else\n callback([]);\n \n dispatch(clearTempFiles());\n \n } catch (error) {\n // error\n callback([]);\n }\n };\n}\n\nexport const fetchPersonMembership = (callback: (success: boolean, type: UnemploymentFundMembershipType) => void) => {\n return async (\n dispatch: ThunkDispatch,\n getState: () => AppState\n ) => {\n try {\n const res = await fetch(apiInfo.endpoints.PersonService.GetPersonMembership, await getOptions(HttpMethods.GET, apiInfo.scopes.DSA_Members.UserRead));\n if (res.ok) \n {\n const data: UnemploymentFundMembershipType = await res.json();\n dispatch(setPersonMemberShip(data));\n callback(true, data);\n } \n else \n {\n // error\n dispatch(setPersonMemberShip(UnemploymentFundMembershipType.NotAMember));\n callback(false, UnemploymentFundMembershipType.NotAMember);\n }\n } catch (error) {\n // error\n dispatch(setPersonMemberShip(UnemploymentFundMembershipType.NotAMember));\n callback(false, UnemploymentFundMembershipType.NotAMember);\n }\n };\n}","import { Guid } from \"guid-typescript\";\nimport { isEmpty } from \"lodash\";\nimport { stringify } from \"querystring\";\nimport { isEmptyOrUndefined } from \"../helpers/TypeChecks\";\nimport CodeListEntryModel from \"./CodeListEntryModel\";\n\nexport class DFDGDocument {\n id: Guid;\n title: string;\n extension?: string;\n documentType: string;\n status: CodeListEntryModel;\n data?: ArrayBuffer;\n documentTypeCodeList?: CodeListEntryModel;\n created: Date;\n lastModified: Date;\n deleted?: Date;\n extensionTypeCodeList?: CodeListEntryModel;\n handleDocumentIdentifier?: 'NEW' | 'DELETED';\n joblogEntryIdentifier?: Guid;\n file?: File;\n tempIndex?: number;\n\n\n GetDocumentExtensionTypeIdentifierCodeList?: CodeListEntryModel[]\n GetJoblogDocumentTypeIdentifierCodeList?: CodeListEntryModel[]\n\n constructor(id: Guid, title: string, documentType: string, status: CodeListEntryModel, data: ArrayBuffer, \n created: Date, lastModified: Date) {\n \n\n this.InitializeCodeLists();\n\n this.id = id;\n this.status = status;\n this.data = data;\n this.created = created;\n this.lastModified = lastModified;\n this.tempIndex = -1;\n\n\n this.title = title;\n\n if(!isEmptyOrUndefined(title)){\n let splitTitle = title.split('.');\n this.title = splitTitle.slice(0,-1).join('.');\n this.extension = splitTitle[-1];\n this.extensionTypeCodeList = this.getCodeListItem('TYPE', this.extension)!;\n }\n\n\n this.documentType = documentType;\n\n if(!isEmptyOrUndefined(documentType))\n {\n this.documentTypeCodeList = this.getCodeListItem('EXTENTION', documentType)!;\n \n }\n\n \n \n }\n\n\n InitializeCodeLists = () => {\n this.GetDocumentExtensionTypeIdentifierCodeList = []\n let xmltype = new CodeListEntryModel(2,'Xml','Xml dokument.','GetDocumentExtensionTypeIdentifierCodeList');\n let pdfType = new CodeListEntryModel(1,'Pdf','Pdf dokument.','GetDocumentExtensionTypeIdentifierCodeList');\n this.GetDocumentExtensionTypeIdentifierCodeList.push(xmltype);\n this.GetDocumentExtensionTypeIdentifierCodeList.push(pdfType);\n\n\n this.GetJoblogDocumentTypeIdentifierCodeList = [];\n let CVType = new CodeListEntryModel(3,'CV','CV','GetJoblogDocumentTypeIdentifierCodeList'); \n let JobEntryType = new CodeListEntryModel(2,'Ansøgning',\"Jobansøgninger\",'GetJoblogDocumentTypeIdentifierCodeList'); \n let JobSearchType = new CodeListEntryModel(1,'Jobannoncer','Jobannoncer','GetJoblogDocumentTypeIdentifierCodeList'); \n this.GetJoblogDocumentTypeIdentifierCodeList.push(CVType);\n this.GetJoblogDocumentTypeIdentifierCodeList.push(JobEntryType);\n this.GetJoblogDocumentTypeIdentifierCodeList.push(JobSearchType);\n }\n\n getCodeListItem = (type: 'TYPE' | 'EXTENTION', val: number | string) =>\n {\n let arr: CodeListEntryModel[] = [];\n\n if(type === 'TYPE' && this.GetJoblogDocumentTypeIdentifierCodeList)\n arr = this.GetJoblogDocumentTypeIdentifierCodeList;\n else if(type === 'EXTENTION' && this.GetDocumentExtensionTypeIdentifierCodeList)\n arr = this.GetDocumentExtensionTypeIdentifierCodeList;\n\n\n for(let i = 0; i < arr.length; i++){\n if(typeof val === \"number\" && arr[i].identifier == val)\n return arr[i];\n else if(typeof val === \"string\" && arr[i].name == val)\n return arr[i];\n\n }\n\n return null;\n }\n \n\n\n}","export const createDocumentLoader = (): HTMLDivElement => {\n let div = document.createElement('div');\n div.style.backgroundColor = '#002E3C';\n div.style.opacity = '1';\n div.style.position = 'fixed';\n div.style.top = '0';\n div.style.left = '0';\n div.style.zIndex = '1050';\n div.style.display = 'block';\n div.style.overflow = 'hidden';\n div.style.outline = '0';\n div.style.width = '100%';\n div.style.height = '100%';\n\n let loaderDiv = document.createElement('div');\n loaderDiv.style.display = 'block';\n loaderDiv.style.position = 'fixed';\n loaderDiv.style.top = '40%';\n loaderDiv.style.left = '50%'; \n loaderDiv.style.transform = 'translate(-50%, -50%)';\n loaderDiv.style.width = '6%';\n loaderDiv.style.height = '6%';\n loaderDiv.style.fill = '#FFFFFF';\n loaderDiv.innerHTML = '';\n div.append(loaderDiv);\n\n let p = document.createElement('p');\n p.style.color = '#FFFFFF';\n p.style.fontSize = '1.6rem';\n p.style.fontFamily = 'Arial, Helvetica, sans-serif';\n p.style.fontWeight = 'bold';\n p.style.display = 'block';\n p.style.position = 'fixed';\n p.style.top = '55%';\n p.style.left = '50%'; \n p.style.transform = 'translate(-50%, -50%)';\n p.innerText = 'Henter dokument';\n div.append(p);\n\n return div;\n}","import * as React from 'react';\nimport \"./ButtonGeneral.scss\";\n\n\ninterface Props {\n text: string;\n onClick: (event: React.MouseEvent) => void;\n buttonType: ButtonGeneralType;\n additionalCssClassNames?: string;\n disabled?: boolean;\n}\n\ninterface State {\n\n}\n\nexport enum ButtonGeneralType {\n INFORMATION,\n WARNING,\n DANGER,\n SUCCESS,\n TRANSPARENT,\n FLOATING,\n}\n\n\nclass ButtonGeneral extends React.Component {\n constructor(props: Props) {\n super(props);\n\n this.handleButtonType = this.handleButtonType.bind(this);\n }\n\n handleButtonType = (): object => {\n let style: object = {};\n switch(this.props.buttonType)\n {\n case ButtonGeneralType.INFORMATION: \n // For Jobportal\n style = { background: '#1C2C55' };\n\n // Default\n // style = { background: '#00465A' };\n break;\n\n case ButtonGeneralType.WARNING: \n style = { background: '#F49302', borderColor: '#F49302' };\n break;\n\n case ButtonGeneralType.DANGER: \n style = { background: '#dc3545', borderColor: '#dc3545' };\n break;\n\n case ButtonGeneralType.SUCCESS: \n style = { background: '#239B00', borderColor: '#239B00' };\n break;\n\n case ButtonGeneralType.TRANSPARENT:\n // For Jobportal\n style = { background: '#FFFFFF', border: \"1px solid #1C2C55\", color: '#1C2C55' };\n break;\n\n case ButtonGeneralType.FLOATING:\n style = { background: '#00465A', border: '2px solid #00465A', color: '#FFFFFF' };\n break;\n\n default:\n break;\n }\n\n return style;\n }\n\n render() {\n return (\n
\n \n
\n );\n }\n}\n\nexport default ButtonGeneral;","import * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { formatCollectionToString, isEmptyOrUndefined, isObjEmpty } from \"../../../helpers/TypeChecks\";\nimport JobSearchEntryModel from \"../../../models/JobSearchEntryModel\";\nimport { AppState } from \"../../../store\";\nimport InputFile from \"../../InputFile\";\nimport ApplicationFile from \"../../ApplicationFile\";\nimport { removeDocumentFromRedux, uploadDocumentToRedux,downloadFile } from \"../../../store/Person/actions\";\nimport { Guid } from \"guid-typescript\";\nimport { ThunkDispatch } from \"redux-thunk\";\nimport { AppActions } from \"../../../store/AppActions\";\nimport { bindActionCreators } from \"redux\";\nimport { DFDGDocument } from \"../../../models/DFDGDocument\";\nimport CodeListEntryModel from \"../../../models/CodeListEntryModel\";\nimport { createDocumentLoader } from \"../../../helpers/CreateDocumentLoader\";\nimport { BlobMimes, downloadOrOpenBlob } from \"../../../helpers/DownloadOrOpenBlob\";\nimport { createEmptyGuid } from \"../../../helpers/CreateGuid\";\nimport { ToastIcon, TopToast } from \"../../../helpers/ToastHelper\";\nimport \"./JobLogDocuments.scss\";\n\ninterface OwnProps {\n\tjobLog: JobSearchEntryModel;\n\thandleUpdateJobLog: (data: JobSearchEntryModel) => void;\n\tisExistingItem: boolean;\n\tdisabled?: boolean;\n}\n\ninterface State {\n\tjobLog: JobSearchEntryModel;\n\tfiles: DFDGDocument[];\n\tcombinedFilesCollection: DFDGDocument[];\n}\n\ninterface LinkDispatchProps{\n\tuploadDocumentToRedux: (joblogEntryIdentifier: Guid,type: string,document: DFDGDocument, file: File) => void;\n\tremoveDocumentFromRedux: (joblogDocumentIdentifier: Guid,joblogEntryIdentifier: Guid,document: DFDGDocument) => void;\n\tdownloadFile: (joblogDocumentIdentifier: Guid,document: DFDGDocument) => void;\n}\n\ninterface LinkStateProps {\n\ttempFiles: DFDGDocument[];\n}\n\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch): LinkDispatchProps => ({\n\tuploadDocumentToRedux: bindActionCreators(uploadDocumentToRedux,dispatch),\n\tremoveDocumentFromRedux: bindActionCreators(removeDocumentFromRedux,dispatch),\n\tdownloadFile: bindActionCreators(downloadFile,dispatch),\n});\n\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n\ttempFiles: state.person.tempFiles,\n});\n\ntype Props = OwnProps & LinkStateProps & LinkDispatchProps;\n\nclass JobLogDocuments extends React.Component {\n\tconstructor(props: Props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tjobLog: this.props.jobLog,\n\t\t\tfiles: this.props.jobLog.documents,\n\t\t\tcombinedFilesCollection: this.props.jobLog.documents ? this.props.jobLog.documents.concat(this.props.tempFiles) : this.props.tempFiles\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tif (this.props.jobLog !== this.state.jobLog)\n\t\t{\n\t\t\tthis.setState({\n\t\t\t\tjobLog: this.props.jobLog,\n\t\t\t\tcombinedFilesCollection: this.props.jobLog.documents.concat(this.props.tempFiles)\n\t\t\t});\n\t\t}\n\t}\n\n\tcomponentDidUpdate(prevProps: Props, prevState: State) {\n\t\tif (prevProps.jobLog !== this.props.jobLog)\n\t\t{\n\t\t\tthis.setState({\n\t\t\t\tjobLog: this.props.jobLog,\n\t\t\t});\n\t\t}\n\n\t\tif (prevProps.tempFiles !== this.props.tempFiles)\n\t\t{\n\t\t\tthis.setState({\n\t\t\t\tcombinedFilesCollection: this.props.jobLog?.documents?.length > 0 ? [...this.props.jobLog?.documents?.filter(d => this.props.tempFiles?.find(doc => doc?.id === d?.id) === undefined), ...this.props.tempFiles] : this.props.tempFiles\n\t\t\t});\n\t\t}\n\n\t\tif (prevState.jobLog !== this.state.jobLog && this.state.jobLog !== this.props.jobLog)\n\t\t\tthis.props.handleUpdateJobLog(this.state.jobLog);\n\t}\n\n\tcomponentWillUnmount() {\n if (this.state.jobLog && !isObjEmpty(this.state.jobLog) && this.props.jobLog !== this.state.jobLog)\n this.props.handleUpdateJobLog(this.state.jobLog);\n\t}\n\n\taddFile = (e: React.ChangeEvent, type: \"CV\" | \"Ansøgning\") => {\n\t\tlet files = e.target?.files;\n\t\n\t\tif(!isEmptyOrUndefined(files) && files)\n\t\t{\n\t\t\tfor (let index = 0; index < files.length; index++) \n\t\t\t{\n\t\t\t\tconst file: File = files?.[index];\n\t\t\t\t// checking if file size is less than or equal to 1 MegaByte, and filetype is PDF.\n\t\t\t\tif (file?.size <= 1000000 && file?.type === 'application/pdf')\n\t\t\t\t{\n\t\t\t\t\tlet activeCodeList: CodeListEntryModel = new CodeListEntryModel(1,'aktiv','aktiv','');\n\t\t\t\t\tlet document: DFDGDocument = new DFDGDocument(createEmptyGuid(), file?.name, type, activeCodeList, new ArrayBuffer(0), new Date(), new Date());\n\t\t\t\t\tthis.props.uploadDocumentToRedux(this.state.jobLog?.id ?? createEmptyGuid(), type, document, file);\n\t\t\t\t}\n\t\t\t\telse \n\t\t\t\t{\n\t\t\t\t\tif (file?.size > 1000000)\n\t\t\t\t\t{\n\t\t\t\t\t\tTopToast(ToastIcon.ERROR).fire({\n\t\t\t\t\t\t\ttimer: 4000,\n\t\t\t\t\t\t\ttitle: 'Filstørrelsen er over den tilladte grænse, som er 1 MB.',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\telse \n\t\t\t\t\t{\n\t\t\t\t\t\tTopToast(ToastIcon.ERROR).fire({\n\t\t\t\t\t\t\ttimer: 4000,\n\t\t\t\t\t\t\ttitle: 'Filformattet er ikke PDF.',\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tdeleteFile = (document: DFDGDocument) => {\n\t\tif(!isObjEmpty(document) && this.props.jobLog)\n\t\t{\n\t\t\tconst index: number = this.state.jobLog?.documents?.findIndex(d => d?.id === document?.id);\n\t\t\tif (index > -1)\n\t\t\t{\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tdocuments: [\n\t\t\t\t\t\t\t...this.state.jobLog?.documents?.slice(0, index),\n\t\t\t\t\t\t\t...this.state.jobLog?.documents?.slice(index + 1),\n\t\t\t\t\t\t],\n\t\t\t\t\t}\n\t\t\t\t}, () => {\n\t\t\t\t\tthis.props.handleUpdateJobLog(this.state.jobLog);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.props.removeDocumentFromRedux(this.props.jobLog?.id, document?.id, document);\n\t\t}\n\t}\n\n\tdisplayFileName = (type: \"CV\" | \"Ansøgning\") => {\n\t\treturn formatCollectionToString(this.state.files?.filter(x => x?.documentType === type), \"title\", ', ', '')\n\t}\n\n\tdownloadFile = (document: DFDGDocument) => {\n\t\tif (document?.handleDocumentIdentifier == 'NEW' && document?.file !== undefined)\n\t\t{\n\t\t\tlet newWindow: Window | null = window.open('', '_blank');\n\t\t\tif(newWindow)\n\t\t\t{\n\t\t\t\tnewWindow.document.body.style.width = '100vw';\n\t\t\t\tnewWindow.document.body.style.height = '100vh';\n\t\t\t\tnewWindow.document.body.style.marginLeft = '0';\n\t\t\t\tnewWindow.document.body.style.marginTop = '0';\n\t\t\t\tnewWindow.document.body.style.overflow = 'hidden';\n\t\t\t\tnewWindow.document.body.append(createDocumentLoader());\n\t\t\t}\n\t\t\tsetTimeout(() => {\n\t\t\t\tdownloadOrOpenBlob(document?.file!, document?.title, BlobMimes.PDF, newWindow);\n\t\t\t}, 1000);\n\t\t}\n\t\telse \n\t\t\tthis.props.downloadFile(document?.id, document);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n

Ansøgning og CV

\n\t\t\t\t
\n\t\t\t\t\t

Her kan du tilføje en kopi af din ansøgning og dit CV, så de ligger sammen med jobloggen

\n\t\t\t\t\t

Hvert dokument kan maks. være 1 MB (MegaByte). Dokumentet skal være en PDF-fil.

\n\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\t this.addFile(e, \"Ansøgning\")} title=\"Tilføj ansøgning\" accept=\"application/pdf\" />\n\t\t\t\t\t this.addFile(e, \"CV\")} title=\"Tilføj CV\" accept=\"application/pdf\" />\n\t\t\t\t
\n\t\t\t\t{this.state.combinedFilesCollection?.length > 0 ?\n\t\t\t\t\t
\n\t\t\t\t\t\t{this.state.combinedFilesCollection?.map((file) => (\n\t\t\t\t\t\t\tfile.handleDocumentIdentifier != 'DELETED' ?\n\t\t\t\t\t\t\t this.downloadFile(file)} deleteFile={() => this.deleteFile(file)} file={file} />\n\t\t\t\t\t\t\t: null\n\t\t\t\t\t\t))}\n\t\t\t\t\t
\n\t\t\t\t: null}\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default connect(mapStateToProps,\tmapDispatchToProps)(JobLogDocuments);\n","import * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { isObjEmpty } from \"../../../helpers/TypeChecks\";\nimport CodeListEntryModel from \"../../../models/CodeListEntryModel\";\nimport { JobSearchStatus } from \"../../../models/JobLogEntryModel\";\nimport JobSearchEntryModel, { jobSeekingStatusTypes } from \"../../../models/JobSearchEntryModel\";\nimport SimpleIdentityModel from \"../../../models/SimpleIdentityModel\";\nimport { AppState } from \"../../../store\";\nimport RoundedCheckMark from \"../../RoundedCheckMark\";\nimport \"./JobLogJobSearchStatus.scss\";\n\ninterface OwnProps {\n\tjobLog: JobSearchEntryModel;\n\thandleUpdateJobLog: (data: JobSearchEntryModel) => void;\n\tisExistingItem: boolean;\n\tdisabled?: boolean;\n}\n\ninterface State {\n\tjobLog: JobSearchEntryModel;\n}\n\ninterface LinkStateProps {\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n});\n\ntype Props = OwnProps & LinkStateProps;\n\nclass JobLogJobSearchStatus extends React.Component {\n\tconstructor(props: Props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tjobLog: this.props.jobLog,\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tif (this.props.jobLog !== this.state.jobLog)\n\t\t{\n\t\t\tthis.setState({\n\t\t\t\tjobLog: this.props.jobLog,\n\t\t\t});\n\t\t}\n\t}\n\n\tcomponentDidUpdate(prevProps: Props, prevState: State) {\n\t\tif (prevProps.jobLog !== this.props.jobLog)\n\t\t{\n\t\t\tthis.setState({\n\t\t\t\tjobLog: this.props.jobLog,\n\t\t\t});\n\t\t}\n\n\t\tif (prevState.jobLog !== this.state.jobLog && this.state.jobLog !== this.props.jobLog)\n\t\t\tthis.props.handleUpdateJobLog(this.state.jobLog);\n\t}\n\n\thandleJobSearchStatusOnChange = (e: React.MouseEvent, property: string, data?: any) => {\n\t\tswitch (property) {\n\t\t\tcase 'jobSearchStatus':\n\t\t\t\tconst val = Number((data as SimpleIdentityModel)?.id);\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tjobSearchStatus: {\n\t\t\t\t\t\t\t...this.state.jobLog?.jobSearchStatus ?? {} as CodeListEntryModel,\n\t\t\t\t\t\t\tidentifier: val,\n\t\t\t\t\t\t\tname: (data as SimpleIdentityModel)?.name,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tsubmissionDate: val === JobSearchStatus.NotSearched ? undefined : this.state.jobLog?.submissionDate,\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
\n \t\t

Hvad er status på jobsøgning? *

\n\t\t\t\t
\n\t\t\t\t\t{jobSeekingStatusTypes()?.map((val) => (\n\t\t\t\t\t\t this.handleJobSearchStatusOnChange(e, 'jobSearchStatus', val)} isChecked={this.state.jobLog?.jobSearchStatus?.identifier === val?.id} />\n\t\t\t\t\t))}\n\t\t\t\t
\n\t\t\t
\n\t\t);\n\t}\n}\n\nexport default connect(mapStateToProps)(JobLogJobSearchStatus);\n","import * as React from 'react';\nimport { isEmptyOrUndefined } from '../../../helpers/TypeChecks';\nimport \"./CheckMarkButtonWithText.scss\";\n\ninterface Props {\n input?: any;\n checkBoxClicked?: (e: React.MouseEvent) => void;\n checkBoxChanged?: (e: React.ChangeEvent) => void;\n checked: boolean;\n disabled?: boolean;\n showImage?: boolean;\n jobPathLogo?: any;\n setInputFirst?: boolean;\n readOnly?: boolean;\n}\n\ninterface State {\n}\n\nclass CheckMarkButtonWithText extends React.Component {\n constructor(props: Props) {\n super(props);\n }\n\n handleCheckBoxLabelClicked = (e: React.MouseEvent) => {\n let event: any = {target: {value: e.currentTarget.nodeValue}};\n if(this.props.disabled == undefined || this.props.disabled == false)\n {\n if(this.props.checkBoxChanged != undefined)\n {\n this.props.checkBoxChanged(event);\n \n } else if (this.props.checkBoxClicked != undefined)\n {\n this.props.checkBoxClicked(event);\n }\n }\n }\n\n render() {\n let checkBox;\n checkBox = (\n \n );\n\n let html;\n if (this.props.showImage && this.props.jobPathLogo) {\n html = (
\n {checkBox}\n \n

{this.props.input}

\n
);\n } else if (this.props.input != \"\" && this.props.setInputFirst) {\n html = (
\n \n {checkBox}\n
);\n } else if (this.props.input != \"\") {\n html = (
\n {checkBox}\n \n
);\n }\n else {\n html = checkBox;\n }\n\n return (\n
\n {html}\n
\n );\n }\n}\n\nexport default CheckMarkButtonWithText;","import * as React from 'react';\nimport { Button, Modal, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport { AppState } from '../../store';\nimport { connect } from \"react-redux\";\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport CloseButton from '../Buttons/CloseButton';\nimport JobLogSource from './JobLogSource';\nimport { isEmptyOrUndefined, isObjEmpty } from '../../helpers/TypeChecks';\nimport JobLogApplyMethod from './JobLogApplyMethod';\nimport JobLogDocuments from './JobLogDocuments';\nimport JobLogDetails from './JobLogDetails';\nimport DsaButton from '../DsaButton';\nimport JobSearchEntryModel, { WeeklyWorkTime } from '../../models/JobSearchEntryModel';\nimport { ToastIcon, TopToast } from '../../helpers/ToastHelper';\nimport JobLogJobSearchStatus from './JobLogJobSearchStatus';\nimport moment from 'moment';\nimport { DFDGDocument } from '../../models/DFDGDocument';\nimport withReactContent from 'sweetalert2-react-content';\nimport swal from \"sweetalert2\";\nimport { bindActionCreators } from 'redux';\nimport { clearTempFiles, deleteJobSearchEntry } from '../../store/Person/actions';\nimport { postJobSearchEntry, putJobSearchEntry } from '../../store/Person/actions';\nimport { JobSearchStatus } from '../../models/JobLogEntryModel';\nimport { isEqual } from 'lodash';\nimport './JobLogModal.scss';\n\ninterface OwnProps {\n show: boolean;\n closeModal: () => void;\n existingItem?: JobSearchEntryModel;\n isJobLog: boolean;\n displayLastPage: boolean;\n}\n\ninterface State {\n contentToDisplay: JobLogContentToDisplay;\n jobLog: JobSearchEntryModel;\n mandatoryData: string[];\n pageCount: number;\n}\n\ninterface LinkStateProps {\n tempFiles: DFDGDocument[];\n windowInnerWidth: number;\n}\n\ninterface LinkDispatchProps {\n deleteJobSearchEntry: (jobEntry: JobSearchEntryModel, callback: (success: boolean) => void) => void;\n postJobSearchEntry: (jobEntry: JobSearchEntryModel, callback: (success: boolean) => void) => void;\n\tputJobSearchEntry: (jobEntry: JobSearchEntryModel, callback: (success: boolean) => void) => void;\n clearTempFiles: () => void;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n deleteJobSearchEntry: bindActionCreators(deleteJobSearchEntry, dispatch),\n postJobSearchEntry: bindActionCreators(postJobSearchEntry,dispatch),\n\tputJobSearchEntry: bindActionCreators(putJobSearchEntry,dispatch),\n clearTempFiles: bindActionCreators(clearTempFiles, dispatch),\n});\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n tempFiles: state.person.tempFiles,\n windowInnerWidth: state.searchJob.windowInnerWidth,\n});\n\ntype Props = OwnProps & LinkStateProps & LinkDispatchProps;\n\nexport enum JobLogContentToDisplay {\n Source,\n ApplyMethod,\n JobSearchStatus,\n Documents,\n Details\n}\n\nclass JobLogModal extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = {\n contentToDisplay: JobLogContentToDisplay.Source,\n jobLog: {} as JobSearchEntryModel,\n mandatoryData: [],\n pageCount: 1,\n };\n }\n\n componentDidMount() {\n if (this.props.show)\n {\n this.setState({\n jobLog: this.props.existingItem !== undefined && !isObjEmpty(this.props.existingItem) ? this.checkExistingJobLogData(this.props.existingItem) : {} as JobSearchEntryModel,\n });\n }\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n if(!prevProps.show && this.props.show)\n {\n const shouldUpdate: boolean = this.props.existingItem !== undefined && !isObjEmpty(this.props.existingItem);\n this.setState({\n contentToDisplay: shouldUpdate && this.props.isJobLog || this.props.displayLastPage ? JobLogContentToDisplay.Details : JobLogContentToDisplay.Source,\n jobLog: shouldUpdate ? this.checkExistingJobLogData(this.props.existingItem!) : {} as JobSearchEntryModel,\n });\n }\n\n if(prevProps.show && !this.props.show)\n {\n this.setState({\n jobLog: {} as JobSearchEntryModel,\n contentToDisplay: JobLogContentToDisplay.Source,\n pageCount: 1,\n });\n this.props.clearTempFiles();\n }\n\n if (prevState.contentToDisplay !== this.state.contentToDisplay && this.state.contentToDisplay === JobLogContentToDisplay.Details\n || this.state.contentToDisplay === JobLogContentToDisplay.Details && prevState.jobLog !== this.state.jobLog)\n {\n this.setState({\n mandatoryData: mandatoryDataNotFullfilled(this.state.jobLog),\n });\n }\n }\n\n checkExistingJobLogData = (jobSearchEntry: JobSearchEntryModel): JobSearchEntryModel => {\n let existingJobLog: JobSearchEntryModel = {...jobSearchEntry};\n if (existingJobLog?.baseType?.companyEmail && !isEmptyOrUndefined(existingJobLog?.baseType?.companyEmail))\n {\n existingJobLog.baseType.companyEmail = existingJobLog.baseType.companyEmail.replace(/ /g, '').trim();\n if (existingJobLog.baseType.companyEmail.includes('mailto:'))\n existingJobLog.baseType.companyEmail = existingJobLog.baseType.companyEmail.replace('mailto:', '');\n }\n\n return existingJobLog;\n }\n\n handleUpdateJobLog = (jobLog: JobSearchEntryModel) => {\n this.setState({\n jobLog: jobLog\n });\n }\n\n handleContentToDisplay = () => {\n const isExitingItemNotEmpty = this.props.existingItem !== undefined && !isObjEmpty(this.props.existingItem);\n const isMobile: boolean = this.props.windowInnerWidth <= 550;\n switch (this.state.contentToDisplay) {\n case JobLogContentToDisplay.Source:\n return this.handleUpdateJobLog(jobLog)} jobLog={this.state.jobLog} />;\n\n case JobLogContentToDisplay.ApplyMethod:\n return this.handleUpdateJobLog(jobLog)} jobLog={this.state.jobLog} />;\n\n case JobLogContentToDisplay.JobSearchStatus:\n return this.handleUpdateJobLog(jobLog)} jobLog={this.state.jobLog} />\n \n case JobLogContentToDisplay.Documents:\n return this.handleUpdateJobLog(jobLog)} jobLog={this.state.jobLog} />;\n\n case JobLogContentToDisplay.Details:\n return this.handleUpdateJobLog(jobLog)} jobLog={this.state.jobLog} />;\n\n default:\n break;\n }\n }\n\n scrollToSection = () => {\n document.getElementById('bodyScroll')!.scrollTop = 0;\n }\n\n handlePrevious = () => {\n this.scrollToSection();\n this.setState({\n contentToDisplay: this.state.contentToDisplay - 1,\n pageCount: this.state.pageCount - 1\n });\n }\n\n handleNext = () => {\n this.scrollToSection();\n this.setState({\n contentToDisplay: this.state.contentToDisplay + 1,\n pageCount: this.state.pageCount + 1,\n });\n }\n\n handleSaveJobLog = () => {\n if (this.state.mandatoryData?.length === 0)\n {\n const shouldUpdateJobLog: boolean = this.props.existingItem !== undefined && !isObjEmpty(this.props.existingItem);\n \n if(shouldUpdateJobLog && this.props.isJobLog)\n {\n this.props.putJobSearchEntry(this.state.jobLog, (success) => {\n if (success)\n this.props.closeModal();\n });\n\n }\n else\n {\n this.props.postJobSearchEntry(this.state.jobLog, (success) => {\n if (success)\n this.props.closeModal();\n });\n }\n }\n else\n return null;\n }\n\n renderTooltip = (): JSX.Element => {\n return (\n this.state.mandatoryData?.length > 0 && this.state.contentToDisplay === JobLogContentToDisplay.Details\n ? \n \n
    \n {this.state.mandatoryData?.map((data) => (\n
  • {data}
  • \n ))}\n
\n
\n :
\n );\n }\n\n handleDeleteJobLog = () => {\n const MySwal = withReactContent(swal);\n MySwal.fire({\n title: 'Slet joblog',\n text: \"Er du sikker på, at du vil slette jobloggen?\",\n confirmButtonText: 'Slet joblog',\n cancelButtonText: 'Annuller',\n showCancelButton: true,\n reverseButtons: true,\n customClass: {\n popup: 'swal-popup',\n container: 'swal-popup-customized',\n confirmButton: 'swal-customized-confirm swal-buttons',\n cancelButton: 'swal-customized-cancel swal-buttons'\n }\n }).then((result: any) => {\n if (result.value && this.props.existingItem) \n {\n this.props.deleteJobSearchEntry(this.props.existingItem!, (success) => {\n if (success)\n {\n TopToast(ToastIcon.SUCCESS).fire({\n title: 'Jobloggen blev slettet succesfuldt.',\n backdrop: false,\n });\n this.props.closeModal();\n }\n else \n {\n TopToast(ToastIcon.ERROR).fire({\n title: 'Fejl! Jobloggen blev ikke blev slettet korrekt.',\n backdrop: false,\n });\n }\n });\n }\n });\n }\n\n handleCloseModalWithSwal = () => {\n const staticItem: JobSearchEntryModel = this.props.existingItem !== undefined && !isObjEmpty(this.props.existingItem) ? this.props.existingItem : {} as JobSearchEntryModel;\n if (!isEqual(staticItem, this.state.jobLog))\n {\n const MySwal = withReactContent(swal);\n MySwal.fire({\n title: 'Afslut uden at gemme',\n text: \"Er du sikker på, at du vil afslutte uden at gemme?\",\n confirmButtonText: 'Afslut',\n cancelButtonText: 'Fortryd',\n showCancelButton: true,\n reverseButtons: true,\n customClass: {\n popup: 'swal-popup',\n container: 'swal-popup-customized',\n confirmButton: 'swal-customized-confirm swal-buttons',\n cancelButton: 'swal-customized-cancel swal-buttons'\n }\n }).then((result: any) => {\n if (result.value) \n this.props.closeModal();\n });\n }\n else \n this.props.closeModal();\n }\n\n render() {\n const isExistingItem: boolean = this.props.existingItem !== undefined && !isObjEmpty(this.props.existingItem);\n\n return (\n this.handleCloseModalWithSwal()}>\n \n

{isExistingItem && this.props.isJobLog ? \"Opdater joblog\" : \"Opret ny joblog\"}\n

\n this.handleCloseModalWithSwal()} />\n
\n\n \n {this.handleContentToDisplay()}\n \n\n \n {!isExistingItem || isExistingItem && !this.props.isJobLog\n ?\n \n {!this.props.displayLastPage ?\n <>\n ({this.state.pageCount} / 5)\n \n : null}\n \n : null}\n
\n {!isExistingItem || isExistingItem && !this.props.isJobLog\n ? this.handleCloseModalWithSwal() : () => this.handlePrevious()} />\n :\n
\n this.handleDeleteJobLog()} />\n this.handleCloseModalWithSwal()} />\n
\n }\n \n 0 && this.state.contentToDisplay === JobLogContentToDisplay.Details ? 'joblog-modal-btn-wrapper joblog-btn-disabled' : 'joblog-modal-btn-wrapper'} onClick={this.state.contentToDisplay === JobLogContentToDisplay.Details ? () => this.handleSaveJobLog() : () => this.handleNext()}>\n \n \n \n
\n
\n
\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(JobLogModal);\n\nfunction mandatoryDataNotFullfilled(joblog: JobSearchEntryModel): string[] {\n let mandatoryData: string[] = [];\n if (isEmptyOrUndefined(joblog?.baseType?.title))\n {\n mandatoryData.push('Stilling/arbejdsområde mangler at blive udfyldt');\n }\n else if (joblog?.baseType?.title?.length > 250)\n {\n mandatoryData.push('Stilling/arbejdsområde må maks indeholde 250 tegn');\n }\n\n if (joblog?.weeklyWorkTimeTypeIdentifier?.identifier === WeeklyWorkTime.PARTTIME && isEmptyOrUndefined(joblog?.hoursPerWeek))\n {\n mandatoryData.push('Ugentligt timetal mangler at blive udfyldt');\n }\n\n if (isEmptyOrUndefined(joblog?.baseType?.companyName))\n {\n mandatoryData.push('Navn på virksomheden mangler at blive udfyldt');\n }\n else if (joblog?.baseType?.companyName?.length > 250)\n {\n mandatoryData.push('Navn på virksomheden må maks indeholde 250 tegn');\n }\n\n if (!isEmptyOrUndefined(joblog?.baseType?.companyAddressStreet) && joblog?.baseType?.companyAddressStreet?.length! > 250)\n {\n mandatoryData.push('Adresse på virksomheden må maks indeholde 250 tegn');\n }\n\n if (!isEmptyOrUndefined(joblog?.baseType?.companyCountry !== undefined) && joblog?.baseType?.companyCountry?.length! > 50)\n {\n mandatoryData.push('Land, virksomheden har adresse i, må maks indeholde 50 tegn');\n }\n\n if (joblog?.baseType?.companyCountry && joblog?.baseType?.companyCountry?.length > 0 && joblog?.baseType?.companyCountry?.toLowerCase() === \"danmark\" && isEmptyOrUndefined(joblog?.baseType?.companyPostCodeIdentifier))\n {\n mandatoryData.push('Postnummer på virksomheden mangler at blive udfyldt');\n }\n else if (!isEmptyOrUndefined(joblog?.baseType?.companyPostCodeIdentifier) && joblog?.baseType?.companyPostCodeIdentifier?.length! > 50)\n {\n mandatoryData.push('Postnummer på virksomheden må maks indeholde 50 tegn');\n }\n\n if (isEmptyOrUndefined(joblog?.baseType?.companyTown))\n {\n mandatoryData.push('By, virksomheden har adresse i, mangler at blive udfyldt');\n } \n else if (!isEmptyOrUndefined(joblog?.baseType?.companyTown) && joblog?.baseType?.companyTown?.length! > 50)\n {\n mandatoryData.push('By, virksomheden har adresse i, må maks indeholde 50 tegn');\n }\n\n if (!isEmptyOrUndefined(joblog?.baseType?.companyContactPerson) && joblog?.baseType?.companyContactPerson?.length! > 50)\n {\n mandatoryData.push('Navn på kontaktperson må maks indeholde 50 tegn');\n }\n\n if (!isEmptyOrUndefined(joblog?.baseType?.companyPhone) && joblog?.baseType?.companyPhone?.length! > 50)\n {\n mandatoryData.push('Telefonnummer til kontaktperson må maks indeholde 50 tegn');\n }\n\n if (!isEmptyOrUndefined(joblog?.baseType?.companyEmail))\n {\n const emailRegex: RegExp = /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,3})+$/;\n if (!joblog.baseType.companyEmail!.match(emailRegex))\n mandatoryData.push(`Email til kontaktperson indeholder ugyldige tegn`);\n }\n\n if (joblog?.jobSearchStatus?.identifier !== JobSearchStatus.NotSearched)\n {\n if(joblog?.jobSearchStatus?.identifier != JobSearchStatus.NotSearched && isEmptyOrUndefined(joblog?.submissionDate))\n {\n mandatoryData.push(\"Ansøgningsdato mangler at blive angivet\");\n }\n \n if (!isEmptyOrUndefined(joblog?.submissionDeadlineDate) && !isEmptyOrUndefined(joblog?.submissionDate) && moment(joblog?.submissionDeadlineDate).isBefore(joblog?.submissionDate))\n {\n mandatoryData.push('Ansøgningsdato skal være før ansøgningsfrist');\n }\n }\n else\n {\n if(joblog?.jobSearchStatus?.identifier == JobSearchStatus.NotSearched && !isEmptyOrUndefined(joblog?.submissionDate))\n {\n mandatoryData.push('Ansøgningsdato må ikke blive angivet når status på ansøgning er \"ikke søgt\"');\n }\n }\n\n\n\n // if (joblog?.baseType?.comment !== undefined && joblog?.baseType?.comment?.length > 2000)\n // {\n // mandatoryData.push('Kommentar må maks indeholde 2000 tegn');\n // }\n\n // if (joblog?.typeOfSubmissionDescription !== undefined && joblog?.typeOfSubmissionDescription?.length > 50)\n // {\n // mandatoryData.push('Beskrivelse til hvordan jobbet er søgt må maks indeholde 50 tegn');\n // }\n\n if (isObjEmpty(joblog?.jobSearchStatus) || joblog?.jobSearchStatus?.identifier?.toString()?.length === 0)\n {\n mandatoryData.push('Status på jobsøgningen mangler at blive udfyldt');\n }\n\n return mandatoryData;\n}","import * as React from 'react';\nimport \"./RadioButtonCustom.scss\";\n\ninterface Props {\n checked: boolean;\n input?: any;\n radioChanged?: (e: React.MouseEvent) => void;\n}\n \ninterface State {\n}\n \nclass RadioButtonCustom extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = {\n }\n }\n\n render() { \n return ( \n
\n
\n {this.props.checked ?
:
}\n
\n {this.props.input ?

{this.props.input}

: null}\n
\n );\n }\n}\n \nexport default RadioButtonCustom;","import React, { useRef, useState } from 'react';\nimport { setTimeout } from 'timers';\nimport CheckMarkButtonWithText from '../Buttons/CheckMarkButtonWithText';\nimport { List, AutoSizer, CellMeasurerCache, CellMeasurer } from \"react-virtualized\";\nimport { SearchListModel } from '../../models/SearchListModel';\nimport { convertFirstLetterToUppercase } from '../../helpers/FormatStrings';\nimport ButtonGeneral from '../Buttons/ButtonGeneral';\nimport { ButtonGeneralType } from '../Buttons/ButtonGeneral/ButtonGeneral';\nimport { createRef } from 'react';\nimport { isEmptyOrUndefined } from '../../helpers/TypeChecks';\nimport RadioButtonCustom from '../Buttons/RadioButtonCustom';\nimport searchIcon from '../../images/searchiconSearchlist.png'\nimport './SearchListWithCheckboxes.scss';\n\n\ninterface OwnProps {\n placeHolder?: string; \n items: SearchListModel[];\n selectedElementHandler: (options: { event: any, dataEntity?: SearchListModel, attribute?: string }) => void;\n saveFiltersClicked?: (e: React.MouseEvent) => void;\n resetFiltersClicked?: (event: React.MouseEvent) => void;\n show: boolean;\n handleCloseDropdown?: (e: any) => void;\n outerElement?: HTMLElement | null;\n triggerShow?: boolean;\n displayFooter?: boolean;\n isShowingInput?: boolean;\n radioButton?: boolean;\n checkboxButton?: boolean;\n value: string;\n inputOnChange: (e: React.ChangeEvent) => void;\n}\n\ninterface State {\n results: SearchListModel[];\n loading: boolean;\n value: string;\n shouldAddTransitionFx: boolean;\n cache: CellMeasurerCache;\n showSuggestions: boolean;\n inputHasFocus: boolean;\n}\n\ntype Props = OwnProps;\n\n\nclass SearchListWithCheckboxes extends React.Component {\n //used to focus the input field\n searchInput = React.createRef();\n //used to capture clicks outside div\n wrapperRef = createRef();\n timeoutRef: any = React.createRef();\n\n constructor(props: Props) {\n super(props);\n this.state = {\n results: this.props.items,\n loading: false,\n value: '',\n shouldAddTransitionFx: false,\n cache: new CellMeasurerCache({ fixedWidth: true, defaultHeight: 130 }),\n showSuggestions: false,\n inputHasFocus: false,\n }\n }\n\n componentDidMount() {\n if (this.timeoutRef?.current)\n clearTimeout(this.timeoutRef.current);\n\n window.addEventListener('mousedown', (e) => this.handleClickOutsideDropdown(e));\n }\n\n componentWillUnmount() {\n window.removeEventListener('mousedown', (e) => this.handleClickOutsideDropdown(e));\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n if (prevProps.items !== this.props.items) \n {\n let value: string = '';\n if (this.searchInput?.current) \n value = this.searchInput.current?.value?.toString()?.toLowerCase();\n\n const results = this.props.items?.filter((q) => q.name?.toLowerCase()?.indexOf(value) > -1);\n // listens to changes in the checkboxes\n if (value?.length > 0) \n {\n this.setState({\n results: results,\n showSuggestions: results?.length === 1 && results[0]?.name?.toLowerCase() === value?.toLowerCase() || results?.length === 0 ? false : this.state.inputHasFocus,\n });\n }\n else \n {\n this.setState({\n results: this.props.items,\n });\n }\n\n if (this.wrapperRef?.current) \n this.scrollToElement(this.wrapperRef.current, this.props.show);\n }\n\n if (!prevProps.isShowingInput && this.props.isShowingInput && this.searchInput?.current)\n {\n if (this.searchInput?.current)\n {\n setTimeout(() => {\n this.searchInput?.current?.focus()\n }, 250);\n }\n }\n }\n\n\n scrollToElement = (ele: HTMLDivElement, isDropdownVisible: boolean) => {\n // if (this.infoDiv) \n // {\n // if (ele && isDropdownVisible) \n // {\n // setTimeout(() => {\n // scrollIntoView(ele, { scrollMode: 'if-needed', block: 'end', inline: 'start', behavior: 'smooth' });\n // }, 50);\n // }\n // }\n\n // if (this.filterJobSearchDiv) \n // {\n // if (ele) \n // scrollIntoView(ele, { scrollMode: 'if-needed', block: 'end', inline: 'start', behavior: 'smooth' });\n // }\n }\n\n\n handleSearchChangeWithCheckboxes = (e: any): any => {\n this.props.inputOnChange(e);\n\n const value: string = e.target.value?.toLowerCase();\n clearTimeout(this.timeoutRef?.current);\n this.setState({\n loading: true,\n value: value,\n });\n \n this.timeoutRef.current = setTimeout(() => {\n if (value?.length < 1) \n {\n this.setState({\n loading: false,\n value: value,\n results: this.props.items,\n });\n\n return;\n }\n\n const results = this.props.items?.filter((q) => q.name?.toLowerCase().indexOf(value) > -1);\n this.setState({\n loading: false,\n results: results,\n });\n }, 300)\n }\n\n rowRenderer = ({ index, parent, key, style }: { index: any, parent: any, key: any, style: any }) => {\n let html;\n const item: SearchListModel = this.state.results[index];\n html =\n \n
\n
  • {e.preventDefault(); this.props.selectedElementHandler({ event: e, dataEntity: item })}}> \n {this.props.radioButton ?\n \n : this.props.checkboxButton ?\n \n :

    {convertFirstLetterToUppercase(item?.name)}

    }\n\n
  • \n
    \n ;\n return (html);\n }\n\n handleClickOutsideDropdown = (event: any) => {\n if (this.props.triggerShow && this.props.show && this.props.outerElement && (!this.wrapperRef?.current?.contains(event.target) && !this.props.outerElement!.contains(event.target)) \n || this.props.triggerShow && this.props.show && isEmptyOrUndefined(this.props.outerElement) && (!this.wrapperRef?.current?.contains(event.target))) \n {\n this.setState({\n shouldAddTransitionFx: true\n });\n \n if (this.searchInput?.current) \n this.searchInput.current.value = '';\n \n this.setState({\n results: this.props.items,\n value: '',\n });\n \n setTimeout(() => {\n this.setState({\n shouldAddTransitionFx: false\n });\n\n if (this.props.handleCloseDropdown)\n this.props.handleCloseDropdown(event);\n }, 50);\n }\n }\n\n showSuggestions = () => {\n if (this.state.results?.length > 0)\n {\n this.setState({\n showSuggestions: true,\n inputHasFocus: true,\n });\n }\n }\n\n hideSuggestions = () => {\n this.setState({\n showSuggestions: false,\n inputHasFocus: false,\n });\n }\n\n render() {\n return (\n \n {this.props.show ?\n
    \n
    \n {/* */}\n this.showSuggestions()} onBlur={() => this.hideSuggestions()} placeholder={this.props.placeHolder} value={this.props.value} className=\"form-control search-input-searchjob\" type=\"text\" name=\"searchlist\" onChange={(e) => this.handleSearchChangeWithCheckboxes(e)} autoComplete=\"off\" />\n
    \n {this.state.showSuggestions ?\n
    e.preventDefault()} >\n \n {({ height, width }) => (\n this.rowRenderer({index, parent, key, style})}\n data={this.state.results}\n />\n )}\n \n
    \n : null}\n {this.props.displayFooter ?\n
    \n {}} text=\"Nulstil\" />\n {}} text=\"Gem\" />\n
    \n : null}\n
    \n : null}\n
    \n );\n }\n}\n\nexport default SearchListWithCheckboxes;","import * as React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { ThunkDispatch } from 'redux-thunk';\nimport './SearchAddress.scss';\nimport { AppState } from '../../store';\nimport { AppActions } from '../../store/AppActions';\nimport SearchAddressDAWAModel from '../../models/SearchAddressDAWAModel';\n\ninterface OwnProps {\n scrollIntoView?: (id: string) => void;\n updateAddress?: (address: SearchAddressDAWAModel) => void;\n searchAddress?: string;\n disabled?: boolean;\n }\n\ninterface State {\n searchResults: SearchAddressDAWAModel[];\n search: string;\n}\n\ninterface LinkStateProps { }\n\ninterface LinkDispatchProps { }\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({ });\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch): LinkDispatchProps => ({ });\n\ntype Props = OwnProps & LinkStateProps & LinkDispatchProps;\n\nclass SearchAddress extends React.Component {\n dawaURI = \"https://dawa.aws.dk/adresser/autocomplete?side=1&per_side=10&q=\";\n\n constructor(props: Props) {\n super(props);\n this.state = {\n searchResults: [],\n search: '',\n };\n }\n\n componentDidMount() {\n if (this.props.searchAddress)\n {\n this.setState({\n search: this.props.searchAddress,\n });\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n if (prevProps.searchAddress !== this.props.searchAddress && this.props.searchAddress)\n {\n this.setState({\n search: this.props.searchAddress,\n });\n }\n }\n\n handleAddressOnChange = async (e: React.ChangeEvent) => {\n const searchVal: string = e.target.value;\n this.setState({\n search: searchVal,\n });\n \n if (searchVal?.length > 0)\n {\n const query: string = this.dawaURI + searchVal; \n let results: SearchAddressDAWAModel[] = [];\n try {\n const res = await fetch(query, {\n method: 'GET',\n mode: 'cors',\n cache: 'default',\n });\n \n if (res.ok)\n results = await res.json();\n \n } catch (error) {\n // error\n }\n \n this.setState({\n searchResults: results,\n });\n }\n else \n {\n this.setState({\n searchResults: [],\n });\n }\n \n }\n\n handleAddressClicked = (address: SearchAddressDAWAModel) => {\n if (this.props.updateAddress)\n this.props.updateAddress(address);\n \n this.setState({\n search: address?.tekst,\n searchResults: [],\n });\n }\n\n render() {\n\n return (\n
    this.props.scrollIntoView!(\"search-address\") : () => {}}>\n
    \n

    Søg adresse

    \n this.handleAddressOnChange(e)} type=\"text\" placeholder=\"Indtast postnr, gade, by\" />\n
    \n\n {this.state.searchResults?.length > 0 \n ?\n
    \n {this.state.searchResults.map((value) => (\n

    this.handleAddressClicked(value)}>{value.tekst}

    \n ))}\n
    \n : null}\n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SearchAddress);","import * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport JobSearchEntryModel, { WeeklyWorkTime, weeklyWorkTimeTypes } from \"../../../models/JobSearchEntryModel\";\nimport { AppState } from \"../../../store\";\nimport RoundedCheckMark from \"../../RoundedCheckMark\";\nimport JobLogApplyMethod from \"../JobLogApplyMethod\";\nimport JobLogDocuments from \"../JobLogDocuments\";\nimport JobLogSource from \"../JobLogSource\";\nimport SimpleIdentityModel from \"../../../models/SimpleIdentityModel\";\nimport CodeListEntryModel from \"../../../models/CodeListEntryModel\";\nimport JobLogJobSearchStatus from \"../JobLogJobSearchStatus\";\nimport OccupationOpportunityModel from \"../../../models/OccupationOpportunityModel\";\nimport SearchListWithCheckboxes from \"../../SearchListWithCheckboxes\";\nimport { SearchListModel } from \"../../../models/SearchListModel\";\nimport { convertFirstLetterToUppercase } from \"../../../helpers/FormatStrings\";\nimport SearchAddress from \"../../SearchAddress\";\nimport SearchAddressDAWAModel from \"../../../models/SearchAddressDAWAModel\";\nimport \"./JobLogDetails.scss\";\n\ninterface OwnProps {\n\tjobLog: JobSearchEntryModel;\n\thandleUpdateJobLog: (data: JobSearchEntryModel) => void;\n\tisExistingItem: boolean;\n\tdisabled?: boolean;\n\tisMobile: boolean;\n}\n\ninterface State {\n\tjobLog: JobSearchEntryModel;\n}\n\ninterface LinkStateProps {\n\toccupations: OccupationOpportunityModel[];\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n\toccupations: state.jobs.occupations,\n});\n\ntype Props = OwnProps & LinkStateProps;\n\nclass JobLogDetails extends React.Component {\n\tconstructor(props: Props) {\n\t\tsuper(props);\n\t\tthis.state = {\n\t\t\tjobLog: this.props.jobLog,\n\t\t};\n\t}\n\n\tcomponentDidMount() {\n\t\tif (this.props.jobLog !== this.state.jobLog)\n\t\t{\n\t\t\tthis.setState({\n\t\t\t\tjobLog: this.props.jobLog,\n\t\t\t});\n\t\t}\n\t}\n\n\tcomponentDidUpdate(prevProps: Props, prevState: State) {\n\t\tif (prevProps.jobLog !== this.props.jobLog)\n\t\t{\n\t\t\tthis.setState({\n\t\t\t\tjobLog: this.props.jobLog,\n\t\t\t});\n\t\t}\n\n\t\tif (prevState.jobLog !== this.state.jobLog && this.state.jobLog !== this.props.jobLog)\n\t\t\tthis.props.handleUpdateJobLog(this.state.jobLog);\n\t}\n\n\thandleDetailContentOnChange = (e: React.ChangeEvent, property: string, data?: any) => {\n\t\tconst value = e?.target?.value;\n\n\t\tswitch (property) {\n\t\t\tcase 'weeklyWorkTime': {\n\t\t\t\tconst identifier = Number((data as SimpleIdentityModel)?.id);\n\t\t\t\tif (this.state.jobLog?.weeklyWorkTimeTypeIdentifier?.identifier === identifier)\n\t\t\t\t{\n\t\t\t\t\tthis.setState({\n\t\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\t\tweeklyWorkTimeTypeIdentifier: undefined,\n\t\t\t\t\t\t\thoursPerWeek: undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tthis.setState({\n\t\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\t\tweeklyWorkTimeTypeIdentifier: {\n\t\t\t\t\t\t\t\t...this.state.jobLog?.weeklyWorkTimeTypeIdentifier ?? {} as CodeListEntryModel,\n\t\t\t\t\t\t\t\tidentifier: identifier,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\thoursPerWeek: identifier !== WeeklyWorkTime.FULLTIME ? this.state.jobLog?.hoursPerWeek : undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'jobPostingURL':\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tjobPostingURL: value?.length > 0 ? value : undefined\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'companyName':\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tbaseType: {\n\t\t\t\t\t\t\t...this.state.jobLog?.baseType,\n\t\t\t\t\t\t\tcompanyName: value,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'companyAddressStreet':\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tbaseType: {\n\t\t\t\t\t\t\t...this.state.jobLog?.baseType,\n\t\t\t\t\t\t\tcompanyAddressStreet: value?.length > 0 ? value : undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'companyPostCodeIdentifier':\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tbaseType: {\n\t\t\t\t\t\t\t...this.state.jobLog?.baseType,\n\t\t\t\t\t\t\tcompanyPostCodeIdentifier: value?.length > 0 ? value : undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'companyTown':\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tbaseType: {\n\t\t\t\t\t\t\t...this.state.jobLog?.baseType,\n\t\t\t\t\t\t\tcompanyTown: value?.length > 0 ? value : undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\t// Section concerning contact person\n\t\t\tcase 'companyContactPerson':\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tbaseType: {\n\t\t\t\t\t\t\t...this.state.jobLog?.baseType,\n\t\t\t\t\t\t\tcompanyContactPerson: value?.length > 0 ? value : undefined\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'companyPhone':\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tbaseType: {\n\t\t\t\t\t\t\t...this.state.jobLog?.baseType,\n\t\t\t\t\t\t\tcompanyPhone: value?.length > 0 ? value : undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'companyEmail':\n\t\t\t\tlet email: string | undefined = undefined;\n\t\t\t\tif (value?.length > 0)\n\t\t\t\t{\n\t\t\t\t\temail = value;\n\t\t\t\t\temail = email.replace(/ /g, '').trim();\n\t\t\t\t\tif (email.includes('mailto:'))\n\t\t\t\t\t\temail = email.replace('mailto:', '');\n\t\t\t\t}\t\n\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tbaseType: {\n\t\t\t\t\t\t\t...this.state.jobLog?.baseType,\n\t\t\t\t\t\t\tcompanyEmail: value?.length > 0 ? value.replace(/ /g, '').trim() : undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase 'title': {\n\t\t\t\tconst val: string = (data as SearchListModel)?.name ?? data;\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tbaseType: {\n\t\t\t\t\t\t\t...this.state.jobLog?.baseType,\n\t\t\t\t\t\t\ttitle: val,\n\t\t\t\t\t\t},\n\t\t\t\t\t}\n\t\t\t\t});\n break;\n\t\t\t}\n\n\t\t\tcase 'hoursPerWeek': {\n\t\t\t\tconst regexForOnlyNumbers: RegExp = /^[0-9]+$/;\n\t\t\t\tconst isValid: boolean = regexForOnlyNumbers.test(value);\n\n\t\t\t\tif (isValid || !isValid && value?.length === 0)\n\t\t\t\t{\n\t\t\t\t\tthis.setState({\n\t\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\t\thoursPerWeek: value?.length > 0 ? Number(value) : undefined,\n\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tcase 'companyCountry': {\n\t\t\t\tthis.setState({\n\t\t\t\t\tjobLog: {\n\t\t\t\t\t\t...this.state.jobLog,\n\t\t\t\t\t\tbaseType: {\n\t\t\t\t\t\t\t...this.state.jobLog?.baseType,\n\t\t\t\t\t\t\tcompanyCountry: value?.length > 0 ? value : undefined,\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\thandleSearchAddressToDisplay = (): string => {\n\t\tlet searchAddress: string = '';\n\n\t\tif (this.state.jobLog?.baseType?.companyAddressStreet && this.state.jobLog?.baseType?.companyAddressStreet?.length > 0)\n\t\t\tsearchAddress += this.state.jobLog?.baseType?.companyAddressStreet + ', ';\n\n\t\tif (this.state.jobLog?.baseType?.companyPostCodeIdentifier && this.state.jobLog?.baseType?.companyPostCodeIdentifier?.length > 0)\n\t\t{\n\t\t\tif (this.state.jobLog?.baseType?.companyTown && this.state.jobLog?.baseType?.companyTown?.length > 0)\n\t\t\t\tsearchAddress += this.state.jobLog?.baseType?.companyPostCodeIdentifier + ' ' + this.state.jobLog?.baseType?.companyTown;\n\t\t\telse \n\t\t\t\tsearchAddress += this.state.jobLog?.baseType?.companyPostCodeIdentifier;\n\t\t}\n\n\t\treturn searchAddress;\n\t}\n\n\thandleSearchAddressChosen = (address: SearchAddressDAWAModel) => {\n\t\tthis.setState({\n\t\t\tjobLog: {\n\t\t\t\t...this.state.jobLog,\n\t\t\t\tbaseType: {\n\t\t\t\t\t...this.state.jobLog?.baseType,\n\t\t\t\t\tcompanyAddressStreet: `${address?.adresse?.vejnavn} ${address?.adresse?.husnr}`,\n\t\t\t\t\tcompanyPostCodeIdentifier: address?.adresse?.postnr,\n\t\t\t\t\tcompanyTown: address?.adresse?.supplerendebynavn?.length > 0 ? address?.adresse?.supplerendebynavn : address?.adresse?.postnrnavn,\n\t\t\t\t\t// hardcoding country to Denmark because we only search adresses in Denmark.\n\t\t\t\t\tcompanyCountry: 'Danmark',\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\n\tisCompanyCountryDenmark = (): boolean => {\n\t\treturn this.state.jobLog?.baseType?.companyCountry && this.state.jobLog?.baseType?.companyCountry?.length > 0\n\t\t&& this.state.jobLog?.baseType?.companyCountry?.toLowerCase() === \"danmark\" ? true : false;\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t
    \n

    Hvilket job?

    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    Stilling/arbejdsområde *

    \n\t\t\t\t\t\t new SearchListModel(o?.id, convertFirstLetterToUppercase(o?.name)))}\n\t\t\t\t\t\t\tselectedElementHandler={(options: { event: any, dataEntity?: SearchListModel}) => this.handleDetailContentOnChange({} as any, 'title', options?.dataEntity)}\n\t\t\t\t\t\t\tvalue={this.state.jobLog?.baseType?.title}\n\t\t\t\t\t\t\tinputOnChange={(e) => this.handleDetailContentOnChange({} as any, 'title', e?.target?.value)}\n\t\t\t\t\t\t\tshow\n\t\t\t\t\t\t/>\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    Fuldtid eller deltid

    \n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t{weeklyWorkTimeTypes()?.map((val) => (\n\t\t\t\t\t\t\t\t this.handleDetailContentOnChange({} as any, 'weeklyWorkTime', val)} isChecked={this.state.jobLog?.weeklyWorkTimeTypeIdentifier?.identifier === val?.id} />\n\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t
    \n\n\t\t\t\t\t\t{this.state.jobLog?.weeklyWorkTimeTypeIdentifier?.identifier === WeeklyWorkTime.PARTTIME \n\t\t\t\t\t\t?\n\t\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t\t

    Ugentligt timetal *

    \n\t\t\t\t\t\t\t\t this.handleDetailContentOnChange(e, 'hoursPerWeek')} />\n\t\t\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t\n\t\t\t\t\t\t: null}\n\t\t\t\t\t
    \n\t\t\t\t\t{this.state.jobLog?.isCompanyJob === undefined || !this.state.jobLog?.isCompanyJob\n\t\t\t\t\t?\n\t\t\t\t\t\t
    \n\t\t\t\t\t\t\t

    Evt. link til jobannoncen

    \n\t\t\t\t\t\t\t this.handleDetailContentOnChange(e, 'jobPostingURL')} />\n\t\t\t\t\t\t
    \n\t\t\t\t\t: null}\n\t\t\t\t
    \n\t\t\t\t
    \n

    Hvilken arbejdsplads?

    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    Navn på virksomhed *

    \n\t\t\t\t\t\t this.handleDetailContentOnChange(e, 'companyName')} />\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    Adresse på virksomhed

    \n\t\t\t\t\t\t this.handleSearchAddressChosen(address)} searchAddress={this.handleSearchAddressToDisplay()} />\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    Vejnavn (husnr)

    \n\t\t\t\t\t\t this.handleDetailContentOnChange(e, 'companyAddressStreet')} />\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    Land

    \n\t\t\t\t\t\t this.handleDetailContentOnChange(e, 'companyCountry')} />\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    Postnummer {this.isCompanyCountryDenmark() ? * : null}

    \n\t\t\t\t\t\t this.handleDetailContentOnChange(e, 'companyPostCodeIdentifier')} />\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    By *

    \n\t\t\t\t\t\t this.handleDetailContentOnChange(e, 'companyTown')} />\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t

    Eventuel kontaktperson

    \n\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    Navn

    \n\t\t\t\t\t\t this.handleDetailContentOnChange(e, 'companyContactPerson')} />\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    Telefonnummer

    \n\t\t\t\t\t\t this.handleDetailContentOnChange(e, 'companyPhone')} />\n\t\t\t\t\t
    \n\t\t\t\t\t
    \n\t\t\t\t\t\t

    E-mail

    \n\t\t\t\t\t\t this.handleDetailContentOnChange(e, 'companyEmail')} />\n\t\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t\t
    \n\t\t\t\t\n\t\t\t
    \n\t\t);\n\t}\n}\n\nexport default connect(mapStateToProps)(JobLogDetails);","import * as React from 'react';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppState } from '../../../store';\nimport { AppActions } from '../../../store/AppActions';\nimport { connect } from \"react-redux\";\nimport { setSavedRemark, deleteRemarks } from \"../../../store/Agreement/actions\";\nimport { bindActionCreators } from 'redux';\nimport { ToastIcon, TopToast } from '../../../helpers/ToastHelper';\nimport CloseButton from '../../Buttons/CloseButton';\nimport swal from 'sweetalert2';\nimport withReactContent from 'sweetalert2-react-content';\nimport './RemarkPopUp.scss';\nimport DsaButton from '../../DsaButton';\n\ninterface Prop {\n closePopUp: () => void;\n title: string;\n}\n\ninterface State {\n remark: string;\n}\n\ninterface LinkStateProps {\n savedRemark: string;\n}\n\ninterface LinkDispatchProps {\n setSavedRemark: (remark: string) => void;\n deleteRemarks: () => void; \n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n setSavedRemark: bindActionCreators(setSavedRemark, dispatch),\n deleteRemarks: bindActionCreators(deleteRemarks, dispatch),\n});\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n savedRemark: state.agreement.savedRemark,\n});\n\ntype Props = Prop & LinkStateProps & LinkDispatchProps;\n\nclass RemarkPopUp extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = { remark: this.props.savedRemark };\n }\n\n handleRemarkOnChange = (event: any) => {\n this.setState({\n remark: event.target.value,\n });\n }\n\n handleRemarkOnBlur = () => {\n this.props.setSavedRemark(this.state.remark);\n }\n\n HandleClosePopup = () => {\n this.props.closePopUp();\n }\n\n handleDeleteRemarks = () => {\n const MySwal = withReactContent(swal);\n MySwal.fire({\n title: this.props.title,\n text: `Er du sikker på, at du vil fjerne ${this.props.title.toLocaleLowerCase()}?`,\n confirmButtonText: `Fjern ${this.props.title.toLocaleLowerCase()}`,\n cancelButtonText: 'Annuller',\n showCancelButton: true,\n reverseButtons: true,\n customClass: {\n popup: 'swal-popup',\n container: 'swal-popup-customized',\n confirmButton: 'swal-customized-confirm swal-buttons',\n cancelButton: 'swal-customized-cancel swal-buttons'\n }\n\n }).then((result: any) => {\n // Checking if user wants to remove remarks\n if (result.value) {\n this.props.deleteRemarks();\n this.props.closePopUp();\n }\n });\n }\n\n render() {\n return (\n
    \n
    \n
    \n

    {this.props.title} ({this.state.remark.length} tegn)

    \n \n
    \n
    \n \n
    \n
    \n \n \n this.HandleClosePopup()} />\n
    \n
    \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(RemarkPopUp);","import * as React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faComments } from '@fortawesome/free-solid-svg-icons';\nimport './DsaButton.scss';\nimport RemarkPopUp from '../popups/RemarkPopUp';\nimport { JournalSystem } from '../../models/Template/JobMatchTemplateModel';\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\n\ninterface Props {\n templateKey?: string;\n primaryButton: boolean;\n buttonText: string;\n onClick?: (e: React.MouseEvent) => void;\n icon?: boolean;\n FaIconProp?: IconProp;\n srcString?: any;\n additionalClassNames?: string;\n agreementCategory?: string;\n agreementPage?: string;\n isPageSpecific?: boolean;\n disabled?: boolean;\n}\n\ninterface State {\n displayRemarkPopUp: boolean;\n}\n\nclass DsaButton extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = { displayRemarkPopUp: false };\n }\n\n handleRemarkBtnClicked = () => {\n this.setState({\n displayRemarkPopUp: !this.state.displayRemarkPopUp,\n });\n }\n\n render() {\n return (\n \n );\n }\n}\n\nexport default DsaButton;","import { IMsalContext } from \"@azure/msal-react\";\n\nconst square = require(\"../images/jobpath-images/map-pin-square.svg\");\nconst triangle = require(\"../images/jobpath-images/map-pin-triangle.svg\");\nconst star = require(\"../images/jobpath-images/map-pin-star.svg\");\nconst line = require(\"../images/jobpath-images/map-pin-line.svg\");\nconst hexagon = require(\"../images/jobpath-images/map-pin-hexagon.svg\");\nconst person = require(\"../images/map-pin-profile.svg\");\nconst company = require(\"../images/map-pin-company.svg\");\nconst remainingJobPath = require('../images/remaining-jobpath-icon.svg');\nconst remainingJobPathUnauth = require('../images/remaining-jobpath-icon-DSA.svg');\n\n// with border\nconst squareWithBorder = require('../images/jobpath-images/jobpath-square-border.svg');\nconst triangleWithBorder = require('../images/jobpath-images/jobpath-triangle-border.svg');\nconst starWithBorder = require('../images/jobpath-images/jobpath-star-border.svg');\nconst lineWithBorder = require('../images/jobpath-images/jobpath-line-border.svg');\nconst hexagonWithBorder = require('../images/jobpath-images/jobpath-hexagon-border.svg');\n\n// jobs without jobpath\nconst jobsWithoutJobpath = require('../images/jobpath-images/job-without-jobpath.svg');\n\nexport const jobPathImages = [\n square,\n triangle,\n line,\n star,\n hexagon,\n squareWithBorder,\n triangleWithBorder,\n starWithBorder,\n lineWithBorder,\n hexagonWithBorder,\n jobsWithoutJobpath\n]\n\nexport interface IImageObject {\n id: number,\n image: any,\n color: string\n}\n\nexport const jobPathImagesObject: IImageObject[] = [\n {\n id: 0,\n image: square,\n color: '#93277B'\n },\n {\n id: 1,\n image: triangle,\n color: '#39BA9C'\n },\n {\n id: 2,\n image: line,\n color: '#F7955A'\n },\n {\n id: 3,\n image: star,\n color: '#F2BB00'\n },\n {\n id: 4,\n image: hexagon,\n color: '#6FCF97'\n },\n {\n id: 5,\n image: squareWithBorder,\n color: '#6C03A1'\n },\n {\n id: 6,\n image: triangleWithBorder,\n color: '#F49302'\n },\n {\n id: 7,\n image: lineWithBorder,\n color: '#2F80ED'\n },\n {\n id: 8,\n image: starWithBorder,\n color: '#F2BB00'\n },\n {\n id: 9,\n image: hexagonWithBorder,\n color: '#6FCF97'\n },\n {\n id: 10,\n image: jobsWithoutJobpath,\n color: '#000000'\n }\n];\n\nexport const notChosenToJobpathImageObject: IImageObject = {\n id: 9998,\n image: jobsWithoutJobpath,\n color: '#bab8b8'\n};\n\nexport function IsLoggedIn(msalContext:IMsalContext) {\n return msalContext?.accounts?.length > 0;\n}\n\nexport const remainingJobPathImageObject = (isAuth: boolean):IImageObject => {\n return {\n id: 9999,\n image: isAuth ? remainingJobPath : remainingJobPathUnauth,\n color: isAuth ? '#828282' : '#3a69e5',\n } as IImageObject;\n};\n\nexport const imagesObject = [\n {\n id: \"person\",\n image: person\n },\n {\n id: \"company\",\n image: company\n }\n]","// Naming conventions regarding agreements\n// Whole scenes are declared as \"CV\", \"SEARCHJOB\"\n// Sub-scene agreements are decalred as \"CV_PROFILE\", \"SEARCHJOB_FIRSTJOB\"\n// Agreements that have no connections to any pages\n// can have a default type or a set type, such as \"General\".\n// If you are going to add more pagecategories - the first part needs to be same as the AgreementPages\nexport enum AgreementCategories {\n GENERAL,\n NONE,\n\n AGREEMENT,\n\n CPR,\n\n CV,\n CV_PROFILE,\n CV_EXPERIENCE,\n CV_EDUCATION,\n CV_COURSES,\n CV_CERTIFICATES,\n CV_QUALIFICATIONS,\n CV_DRIVERSLICENSE,\n CV_LANGUAGE,\n CV_VOLUNTEER_WORK,\n CV_IT_EXPERIENCE,\n CV_OTHER_SKILL_SETS,\n CV_SPECIAL_CONSIDERATIONS,\n\n JOBPATH,\n JOBPATH_QUALIFICATION,\n JOBPATH_DESCRIPTION,\n JOBPATH_SEARCHJOB,\n\n SEARCHJOB,\n SEARCHJOB_JOB,\n\n SCREENING,\n AGREEMENTANDJOBSMODAL,\n DASHBOARD\n}\n\nexport enum AgreementCategoryTitles {\n // Pages\n CPR = 'CPR',\n PREPARATION = 'Forberedelse',\n FOLLOWUP = 'Opfølgning',\n SCREENING = 'Screening',\n CV = 'CV',\n JOBPATH = 'Søgefiltre',\n SEARCHJOB = 'Søg Job',\n MYPLAN = 'Min liste',\n MAP = 'Kort',\n JOBINSPIRATION = 'Jobinspiration',\n JOBINSPIRATION_PREPARATION = 'Jobinspiration - Forberedelse',\n LOADER = 'loader',\n ONBOARDING = 'Onboarding',\n\n\n // Page Categories\n CV_PROFILE = 'Introduktion - lidt om mig',\n CV_EXPERIENCE = 'Arbejdserfaring',\n CV_EDUCATION = 'Uddannelse',\n CV_COURSES = \"Kurser\",\n CV_CERTIFICATES = \"Certificeringer\",\n CV_QUALIFICATIONS = 'Kvalifikationer',\n CV_DRIVERSLICENSE = 'Kørekort',\n CV_LANGUAGE = 'Sprog',\n CV_VOLUNTEER_WORK = \"Frivilligt arbejde\",\n CV_IT_EXPERIENCE = \"It-erfaring\",\n CV_OTHER_SKILL_SETS = \"Det kan jeg også\",\n CV_SPECIAL_CONSIDERATIONS = \"Hvad kan hjælpe mig i jobbet\",\n\n JOBPATH_QUALIFICATION = 'Jobspor-Kvalifikationer',\n JOBPATH_DESCRIPTION = 'Jobspor-Beskrivelse',\n JOBPATH_SEARCHJOB = 'Jobspor-søgjob',\n AGREEMENTANDJOBSMODAL = \"Aftale- og job modal\",\n DASHBOARD = 'dashboard',\n}\n\nexport function getEnumsByString(contains: string) {\n return Object.keys(AgreementCategories).filter((x) => x.includes(contains));\n}\n","import { Guid } from \"guid-typescript\";\n\nexport const isValidGuid = (guid: Guid | string): boolean => {\n const guidRegex: RegExp = new RegExp(\"^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$\");\n return guidRegex.test(guid?.toString());\n}","import * as React from 'react';\nimport { Modal, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport { isEmptyOrUndefined, isObjEmpty } from '../../helpers/TypeChecks';\nimport { IsLoggedIn, jobPathImages, jobPathImagesObject, remainingJobPathImageObject } from '../../helpers/ImageHelper';\nimport { JobDisplayModel } from '../../models/JobDisplayModel';\nimport ButtonWithRoundedEdges from '../Buttons/ButtonWithRoundedEdges';\nimport { fetchSingleJobToDisplay, clearJobToDisplay, fetchSingleJobError } from \"../../store/Jobs/actions\";\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport { bindActionCreators } from 'redux';\nimport { AppState } from '../../store';\nimport { connect } from \"react-redux\";\nimport swal from \"sweetalert\";\nimport CloseButton from '../Buttons/CloseButton';\nimport JobPathModel from '../../models/JobPathModel';\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport { FilterOptionTypesModel } from '../../models/FilterOptionsModel';\nimport DsaButton from '../DsaButton';\nimport { convertToDayDateMonthYear } from '../../helpers/DateHelper';\nimport DsaJobmatchLogo from '../../images/Logo_Jobmatch_small.svg';\nimport './ModalForShowJobDescription.scss';\nimport { AuthenticatedTemplate, MsalContext } from '@azure/msal-react';\nimport { UnemploymentFundMembershipType } from '../../models/UnemploymentFundMembershipType';\nimport { isValidGuid } from '../../helpers/RegexHelper';\nimport { Guid } from 'guid-typescript';\n\ninterface OwnProps {\n openModal: boolean;\n closeModal: () => void;\n jobId: string;\n addJobToJobPath: () => void;\n jobPathTitle: string;\n toggleJobFromMyPlan: (e: any) => void\n pinImage: any;\n imageId: number;\n page: string;\n jobpathId: Guid;\n shouldUseAllJobs?: boolean;\n isViregoOrder?: boolean;\n}\n\ninterface State {\n jobFetchError: boolean;\n}\n\ninterface LinkStateProp {\n jobToDisplay: JobDisplayModel;\n singleJobToDisplayFetchError: boolean;\n jobPaths: JobPathModel[];\n filterOption: FilterOptionTypesModel;\n personMembership: UnemploymentFundMembershipType;\n jobPathList: JobPathModel[];\n remainingJobPath: JobPathModel;\n}\n\ninterface LinkDispatchProps {\n fetchSingleJobToDisplay: (jobID: string,isCompany?: boolean, isViregoOrder?: boolean) => void;\n clearJobToDisplay: () => void;\n fetchSingleJobError: (responseFailed: boolean) => void;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n fetchSingleJobToDisplay: bindActionCreators(fetchSingleJobToDisplay, dispatch),\n clearJobToDisplay: bindActionCreators(clearJobToDisplay, dispatch),\n fetchSingleJobError: bindActionCreators(fetchSingleJobError, dispatch),\n});\n\nconst mapStateToProps = (state: AppState): LinkStateProp => ({\n jobToDisplay: state.jobs.jobToDisplay,\n singleJobToDisplayFetchError: state.jobs.fetchSingleJobsError,\n jobPaths: state.jobPathList.jobPaths,\n filterOption: state.searchJob.filterOption,\n personMembership: state.person.personMembership,\n jobPathList: state.jobPathList.jobPaths,\n remainingJobPath: state.jobPathList.remainingJobPath,\n});\n\ntype Props = OwnProps & LinkStateProp & LinkDispatchProps;\n\nclass ModalForShowJobDescription extends React.Component {\n static contextType = MsalContext;\n\n constructor(props: Props) {\n super(props);\n this.state = {\n jobFetchError: false,\n }\n }\n \n componentDidMount() {\n if (!isEmptyOrUndefined(this.props.jobId) && this.props.openModal)\n this.props.fetchSingleJobToDisplay(this.props.jobId, false, isValidGuid(this.props.jobId));\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n if (prevProps.openModal && !this.props.openModal && !isObjEmpty(this.props.jobToDisplay))\n this.props.clearJobToDisplay();\n\n if (isObjEmpty(this.props.jobToDisplay) && prevProps.jobId !== this.props.jobId || !prevProps.openModal && this.props.openModal)\n this.props.fetchSingleJobToDisplay(this.props.jobId, false, isValidGuid(this.props.jobId));\n\n // check if job failed to fetch\n if (!prevProps.singleJobToDisplayFetchError && this.props.singleJobToDisplayFetchError && !this.state.jobFetchError && this.props.openModal) {\n this.props.fetchSingleJobError(false);\n this.setState({\n jobFetchError: true,\n });\n }\n }\n\n componentWillUnmount(): void {\n this.props.clearJobToDisplay();\n }\n\n redirectButtonClicked = (e: React.MouseEvent) => {\n window.open(this.props.jobToDisplay.url, \"_blank\");\n }\n\n\n displayWorkHours = () => {\n let displayStr = this.props.jobToDisplay.jobType;\n\n if (this.props.jobToDisplay.workHoursPerWeekMin > 0 && this.props.jobToDisplay.workHoursPerWeekMax > 0)\n displayStr += ' (' + this.props.jobToDisplay.workHoursPerWeekMin + ' - ' + this.props.jobToDisplay.workHoursPerWeekMax + ' timer)'\n\n\n return displayStr;\n }\n\n\n displayContactInformation = () => {\n let displayStr;\n\n if (!isEmptyOrUndefined(this.props.jobToDisplay.contactFirstname)) {\n displayStr = this.props.jobToDisplay.contactFirstname;\n\n if (!isEmptyOrUndefined(this.props.jobToDisplay.contactLastname))\n displayStr += ' ' + this.props.jobToDisplay.contactLastname;\n\n displayStr += ' - ';\n }\n\n if (!isEmptyOrUndefined(this.props.jobToDisplay.contactPhone))\n displayStr += this.props.jobToDisplay.contactPhone + ' - ';\n\n if (!isEmptyOrUndefined(this.props.jobToDisplay.contactEmail))\n displayStr += this.props.jobToDisplay.contactEmail\n return displayStr;\n }\n\n getJobPathImage = (): any => {\n const jobPathID: Guid = this.props.jobpathId;\n if (this.props.remainingJobPath?.id === jobPathID)\n return remainingJobPathImageObject(IsLoggedIn(this.context))?.image;\n\n if (this.props.jobPathList?.length > 0)\n {\n const index: number = this.props.jobPathList?.findIndex(j => j?.id === jobPathID);\n if (index > -1)\n return jobPathImagesObject[this.props.jobPathList[index]?.imageId]?.image;\n }\n\n return '';\n }\n\n redirectToDSAWithJob = () => {\n if (!isEmptyOrUndefined(this.props.jobToDisplay?.title))\n window.open(`https://dsa.dk/karriere-og-jobsogning?jobid=${this.props.jobToDisplay?.id}&title=${encodeURIComponent(this.props.jobToDisplay?.title)}`, \"_blank\");\n else\n window.open(`https://dsa.dk/karriere-og-jobsogning?jobid=${this.props.jobToDisplay?.id}`, \"_blank\");\n }\n\n renderTooltip = (tooltip: string): JSX.Element => {\n return (\n \n

    \n
    \n );\n }\n\n render() {\n let workHoursToDisplay;\n let contactInformationToDisplayStr;\n let contactInformationElement;\n let jobAddressElement;\n\n if (this.state.jobFetchError) {\n swal({\n title: 'Fejl opstod ved fremvisning af jobbets beskrivelse',\n icon: 'error',\n timer: 1500,\n buttons: [false],\n closeOnClickOutside: true,\n });\n this.props.closeModal();\n this.setState({\n jobFetchError: false\n });\n }\n\n if (this.props.jobToDisplay && Object.keys(this.props.jobToDisplay).length > 0) {\n // Checking if its alljobs / remainingjobpath\n\n workHoursToDisplay = this.displayWorkHours();\n\n contactInformationToDisplayStr = this.displayContactInformation();\n\n if (!isEmptyOrUndefined(contactInformationToDisplayStr))\n contactInformationElement =

    KontaktInformationer: {contactInformationToDisplayStr}

    \n\n if (!isEmptyOrUndefined(this.props.jobToDisplay.workPlaceAddress))\n jobAddressElement =

    Adresse: {this.props.jobToDisplay.workPlaceCity + ' ' + this.props.jobToDisplay.workPlacePostalCode + ' - ' + this.props.jobToDisplay.workPlaceAddress}

    ;\n } else {\n // no answer yet from api\n return null;\n }\n\n return (\n \n \n \n {this.props.imageId !== 9999 ? \n \n : \n \n }\n

    {this.props.jobPathTitle}

    \n
    \n {this.props.personMembership !== UnemploymentFundMembershipType.NotAMember && (this.props.page !== AgreementCategoryTitles.JOBINSPIRATION && this.props.page !== AgreementCategoryTitles.PREPARATION &&\n this.props.page !== AgreementCategoryTitles.FOLLOWUP && this.props.page !== AgreementCategoryTitles.AGREEMENTANDJOBSMODAL) \n ? \n \n \n \n : null}\n
    \n \n
    \n \n {this.props.personMembership !== UnemploymentFundMembershipType.NotAMember && (this.props.page != AgreementCategoryTitles.JOBINSPIRATION && this.props.page != AgreementCategoryTitles.JOBINSPIRATION_PREPARATION && this.props.page !== AgreementCategoryTitles.MYPLAN\n && this.props.page !== AgreementCategoryTitles.PREPARATION && this.props.page !== AgreementCategoryTitles.FOLLOWUP && this.props.page !== AgreementCategoryTitles.AGREEMENTANDJOBSMODAL) \n ? \n : null }\n \n \n
    \n
    \n
    \n \n \n
    \n

    {this.props.jobToDisplay.title}

    \n {!isEmptyOrUndefined(this.props.jobToDisplay.companyName) ? ({this.props.jobToDisplay.companyName}) : null}
    \n {jobAddressElement}\n

    Stillingsbetegnelse: {this.props.jobToDisplay.occupationName}

    \n

    Arbejdstid: {workHoursToDisplay}

    \n {this.props.jobToDisplay.lastDateApplication &&

    Ansøgningsfrist: {new Date(this.props.jobToDisplay.lastDateApplication).getTime() > new Date(2010,1,1,1).getTime() ? convertToDayDateMonthYear(new Date(this.props.jobToDisplay.lastDateApplication)) : 'Ukendt'}

    }\n {contactInformationElement}
    \n
    \n {this.props.jobToDisplay.isExternal ? (\n
    \n

    \n
    \n ) :\n

    \n }\n
    \n \n
    \n {/* Below add job to jobpath button for adding job to jobpath is for mobile version only */}\n \n {this.props.personMembership !== UnemploymentFundMembershipType.NotAMember && (this.props.page != AgreementCategoryTitles.JOBINSPIRATION && this.props.page != AgreementCategoryTitles.JOBINSPIRATION_PREPARATION \n && this.props.page !== AgreementCategoryTitles.PREPARATION && this.props.page !== AgreementCategoryTitles.FOLLOWUP && this.props.page !== AgreementCategoryTitles.AGREEMENTANDJOBSMODAL && this.props.page !== AgreementCategoryTitles.MYPLAN) \n ? \n : null }\n \n {/* */}\n {this.props.isViregoOrder\n ?\n
    \n \n
    \n :\n
    \n \n Få hjælp til et udkast ved brug af kunstig intelligens her.')}>\n
    \n this.redirectToDSAWithJob()} />\n
    \n
    \n
    \n }\n
    \n
    \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ModalForShowJobDescription);","import * as React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport { bindActionCreators } from 'redux';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { JobDisplayModel } from '../../models/JobDisplayModel';\nimport OccupationOpportunityModel from '../../models/OccupationOpportunityModel';\nimport { AppState } from '../../store';\nimport { AppActions } from '../../store/AppActions';\nimport { clearJobToDisplay, fetchSingleJobToDisplay, fetchAllCompanyOccupations, fetchSingleJobError } from '../../store/Jobs/actions';\nimport { connect } from \"react-redux\";\nimport { formatCollectionToString, isEmptyOrUndefined } from '../../helpers/TypeChecks';\nimport { clearCompanyOccupations, setCompanyOccupations } from '../../store/SearchJob/actions';\nimport swal from \"sweetalert\";\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport CloseButton from '../Buttons/CloseButton';\nimport './ModalToDisplayCompany.scss';\nimport { AuthenticatedTemplate } from '@azure/msal-react';\nimport { UnemploymentFundMembershipType } from '../../models/UnemploymentFundMembershipType';\n\ninterface OwnProps {\n show: boolean;\n jobId: string;\n closeModal: () => void;\n addJobToJobPath: () => void;\n removeJobFromJobPath: () => void;\n page: string;\n shouldAddJob: boolean; \n shouldRemoveJob: boolean;\n}\n\ninterface State {\n hasBeenCalled: boolean;\n fetchCompanyOccupationsCalled: boolean;\n fetchCompanyInfoFailed: boolean;\n}\n\ninterface LinkStateProps {\n jobToDisplay: JobDisplayModel;\n companyOccupations: OccupationOpportunityModel[];\n isDoneFetchingCompanyOccupations: boolean;\n companyFetchError: boolean;\n singleJobToDisplayFetchError: boolean;\n shouldDisplayAllJobs: boolean;\n personMembership: UnemploymentFundMembershipType;\n}\n\ninterface LinkDispatchProps {\n fetchSingleJobToDisplay: (jobID: string, isCompany?: boolean) => void;\n clearJobToDisplay: () => void;\n clearCompanyOccupations: () => void;\n fetchAllCompanyOccupations: (cvr: number) => void;\n fetchSingleJobError: (responseFailed: boolean) => void;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n fetchSingleJobToDisplay: bindActionCreators(fetchSingleJobToDisplay, dispatch),\n clearJobToDisplay: bindActionCreators(clearJobToDisplay, dispatch),\n clearCompanyOccupations: bindActionCreators(clearCompanyOccupations, dispatch),\n fetchAllCompanyOccupations: bindActionCreators(fetchAllCompanyOccupations, dispatch),\n fetchSingleJobError: bindActionCreators(fetchSingleJobError, dispatch),\n});\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n jobToDisplay: state.jobs.jobToDisplay,\n companyOccupations: state.searchJob.companyOccupations,\n isDoneFetchingCompanyOccupations: state.searchJob.isDoneFetchingCompanyOccupations,\n companyFetchError: state.searchJob.companyFetchError,\n singleJobToDisplayFetchError: state.jobs.fetchSingleJobsError,\n shouldDisplayAllJobs: state.jobPathList.shouldDisplayAllJobs,\n personMembership: state.person.personMembership,\n});\n\ntype Props = OwnProps & LinkStateProps & LinkDispatchProps;\n\nclass ModalToDisplayCompany extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = {\n hasBeenCalled: false,\n fetchCompanyOccupationsCalled: false,\n fetchCompanyInfoFailed: false,\n }\n }\n\n componentDidMount() {\n if (!isEmptyOrUndefined(this.props.jobId) && this.props.show) {\n this.props.fetchSingleJobToDisplay(this.props.jobId, true);\n }\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n if (!isEmptyOrUndefined(this.props.jobId) && this.props.jobId !== prevProps.jobId && this.props.show && !this.state.hasBeenCalled) {\n this.setState({ hasBeenCalled: true });\n this.props.fetchSingleJobToDisplay(this.props.jobId, true);\n\n } else if (!isEmptyOrUndefined(prevProps.jobId) && !isEmptyOrUndefined(this.props.jobId) && this.props.show && !this.state.hasBeenCalled) {\n this.setState({ hasBeenCalled: true });\n this.props.fetchSingleJobToDisplay(this.props.jobId, true);\n\n } else if (prevState.hasBeenCalled && prevProps.show && !this.props.show) {\n this.props.clearJobToDisplay();\n this.props.clearCompanyOccupations();\n this.setState({ hasBeenCalled: false });\n }\n\n // check if companyinfo or job fetch failed\n if (!prevProps.singleJobToDisplayFetchError && this.props.singleJobToDisplayFetchError && !this.state.fetchCompanyInfoFailed && this.props.show) {\n this.props.fetchSingleJobError(false);\n this.setState({\n fetchCompanyInfoFailed: true,\n });\n }\n }\n\n displayContactInformation = () => {\n let displayStr;\n\n if (!isEmptyOrUndefined(this.props.jobToDisplay.contactFirstname)) {\n displayStr = this.props.jobToDisplay.contactFirstname;\n\n if (!isEmptyOrUndefined(this.props.jobToDisplay.contactLastname))\n displayStr += ' ' + this.props.jobToDisplay.contactLastname;\n\n displayStr += ' - ';\n }\n\n if (!isEmptyOrUndefined(this.props.jobToDisplay.contactPhone))\n displayStr += this.props.jobToDisplay.contactPhone + ' - ';\n\n if (!isEmptyOrUndefined(this.props.jobToDisplay.contactEmail))\n displayStr += this.props.jobToDisplay.contactEmail\n return displayStr;\n }\n\n displayWorkHours = () => {\n let displayStr = this.props.jobToDisplay.jobType;\n\n if (this.props.jobToDisplay.workHoursPerWeekMin > 0 && this.props.jobToDisplay.workHoursPerWeekMax > 0)\n displayStr += ' (' + this.props.jobToDisplay.workHoursPerWeekMin + ' - ' + this.props.jobToDisplay.workHoursPerWeekMax + ' timer)'\n\n\n return displayStr;\n }\n\n render() {\n let element;\n const companyLogo = require('../../images/company-jobpath.svg');\n\n if (this.state.fetchCompanyInfoFailed) {\n swal({\n title: 'Fejl opstod ved fremvisning af virksomhedens beskrivelse',\n icon: 'error',\n timer: 1500,\n buttons: [false],\n closeOnClickOutside: true,\n });\n this.props.closeModal();\n this.setState({\n fetchCompanyInfoFailed: false,\n });\n }\n\n if (this.props.jobToDisplay && Object.keys(this.props.jobToDisplay).length > 0) {\n if (this.props.isDoneFetchingCompanyOccupations && !this.props.companyFetchError) {\n if (this.props.companyOccupations && this.props.companyOccupations.length > 0) {\n element = (\n
    \n {!isEmptyOrUndefined(this.props.jobToDisplay.workPlaceAddress) ?\n

    Adresse: {this.props.jobToDisplay.workPlaceCity + ' ' + this.props.jobToDisplay.workPlacePostalCode + ' - ' + this.props.jobToDisplay.workPlaceAddress}

    \n : null\n }\n

    CVR: {this.props.jobToDisplay.cvr}

    \n {/*

    Stillingsbetegnelse: {this.props.jobToDisplay.occupationName}

    */}\n {/*

    Arbejdstid: {this.displayWorkHours()}

    */}\n {/*

    KontaktInformationer: {this.displayContactInformation()}

    */}\n
    \n

    Virksomheden har tidligere søgt disse stillingsbetegnelser: ({this.props.companyOccupations.length})

    \n
      \n {this.props.companyOccupations.map((occupation: OccupationOpportunityModel) => (\n
    • {occupation.name}
    • \n ))}\n
    \n
    \n );\n }\n } else if (this.props.isDoneFetchingCompanyOccupations && this.props.companyFetchError) {\n element = (\n
    \n {!isEmptyOrUndefined(this.props.jobToDisplay.workPlaceAddress) ?\n

    Adresse: {this.props.jobToDisplay.workPlaceCity + ' ' + this.props.jobToDisplay.workPlacePostalCode + ' - ' + this.props.jobToDisplay.workPlaceAddress}

    \n : null\n }\n {/*

    Stillingsbetegnelse: {this.props.jobToDisplay.occupationName}

    */}\n {/*

    Arbejdstid: {this.displayWorkHours()}

    */}\n {/*

    KontaktInformationer: {this.displayContactInformation()}

    */}\n
    \n );\n } else {\n // no answer yet from api\n return null;\n }\n } else {\n // no answer yet from api\n return null;\n }\n return (\n \n \n \n

    {this.props.jobToDisplay.companyName}

    \n
    \n \n {this.props.personMembership !== UnemploymentFundMembershipType.NotAMember && (this.props.shouldAddJob && this.props.page !== AgreementCategoryTitles.PREPARATION && this.props.page !== AgreementCategoryTitles.FOLLOWUP \n && this.props.page !== AgreementCategoryTitles.AGREEMENTANDJOBSMODAL && this.props.page !== AgreementCategoryTitles.JOBINSPIRATION_PREPARATION && this.props.page !== AgreementCategoryTitles.MYPLAN) \n ? \n : null}\n \n {this.props.shouldRemoveJob\n ? \n : null}\n \n
    \n
    \n\n \n \n {element}\n \n \n\n \n {/* Below button is for mobile version only */}\n \n {this.props.personMembership !== UnemploymentFundMembershipType.NotAMember && (this.props.shouldAddJob && this.props.page !== AgreementCategoryTitles.PREPARATION && this.props.page !== AgreementCategoryTitles.FOLLOWUP \n && this.props.page !== AgreementCategoryTitles.AGREEMENTANDJOBSMODAL && this.props.page !== AgreementCategoryTitles.JOBINSPIRATION_PREPARATION && this.props.page !== AgreementCategoryTitles.MYPLAN) \n ? \n : null}\n \n {this.props.shouldRemoveJob\n ? \n : null}\n \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ModalToDisplayCompany);","import * as React from 'react';\nimport { AppState } from '../../store';\nimport { connect } from 'react-redux';\nimport \"./JobLogItem.scss\";\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faPen, faPlusCircle, faTrash, faFile } from '@fortawesome/free-solid-svg-icons';\nimport { isEmptyOrUndefined } from '../../helpers/TypeChecks';\nimport JobModel from '../../models/JobModel';\nimport { jobPathImages, remainingJobPathImageObject } from '../../helpers/ImageHelper';\nimport JobSearchEntryModel, { jobSeekingStatusTypes } from '../../models/JobSearchEntryModel';\nimport { formatDateToDanishSignature } from '../../helpers/DateHelper';\nimport { MyListTableModel } from '../../models/Interfaces/IGeneralTableModel';\nimport TableOptionsModel, { TableButtonTypes } from \"../../models/TableOptionsModel\";\nimport ModalForShowJobDescription from '../ModalForShowJobDescription';\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport JobPathModel from '../../models/JobPathModel';\nimport { UnemploymentFundMembershipType } from '../../models/UnemploymentFundMembershipType';\n\n\nconst greenCircleCheckbox = require(\"../../images/green-circle-checkmark.svg\");\n\ninterface OwnProps {\n item: MyListTableModel;\n jobPathImage?: any;\n onClick: (buttonType: TableButtonTypes) => void;\n}\n\ninterface State {\n}\n\ninterface LinkStateProps {\n personMembership: UnemploymentFundMembershipType;\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n personMembership: state.person.personMembership,\n});\n\ninterface LinkDispatchProps {\n}\n\nconst mapDispatchToProps = (\n): LinkDispatchProps => ({\n});\n\ntype Props = OwnProps & LinkStateProps & LinkDispatchProps;\n\n\n\nclass JobLogItem extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = {\n }\n }\n\n render() {\n return (\n
    \n
    this.props.onClick(TableButtonTypes.INSPECT_EYE)}>\n
    \n

    {this.props.item?.title ?? \"-\"}

    \n

    {this.props.item?.companyName ?? \"-\"}

    \n

    {this.props.item?.combinedAddressString ?? '-'}

    \n

    Ansøgningsfrist: {this.props.item?.deadlineString ?? '-'}

    \n
    \n
    \n

    Oprettet: {!isEmptyOrUndefined(this.props.item?.createdString) ? this.props.item?.createdString : '-'}

    \n

    \n Status: \n {!isEmptyOrUndefined(this.props.item?.jobSearchStatus) ? this.props?.item?.jobSearchStatus : '-'}\n

    \n
    \n
    \n
    \n {this.props.jobPathImage && } \n\n {/* Document count removed for mobile, gets confusing that there is a random number in the middle of nowhere.. */}\n {/*

    {this.props.item?.documentCount}

    */}\n\n {this.props.item?.isJobLog\n ? \n : !this.props.item?.isJobLog && this.props.personMembership === UnemploymentFundMembershipType.UnemployedMember\n ? \n : null}\n\n {this.props.item?.isJobLog && this.props.personMembership === UnemploymentFundMembershipType.UnemployedMember\n ? \n : }\n
    \n
    \n );\n\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(JobLogItem);","import * as React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport JobSearchEntryModel, { jobSeekingStatusTypes } from '../../models/JobSearchEntryModel';\nimport CloseButton from '../Buttons/CloseButton';\nimport DsaButton from '../DsaButton';\nimport './ModalEmptyJobLog.scss';\n\ninterface Props {\n show: boolean;\n closeModal: () => void;\n jobLog: JobSearchEntryModel;\n}\n\ninterface State {\n}\n\nclass ModalEmptyJobLog extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = {\n };\n }\n\n handleSearchAddressToDisplay = (): string => {\n\t\tlet searchAddress: string = '';\n\n\t\tif (this.props.jobLog?.baseType?.companyAddressStreet && this.props.jobLog?.baseType?.companyAddressStreet?.length > 0)\n\t\t\tsearchAddress += this.props.jobLog?.baseType?.companyAddressStreet + ', ';\n\n\t\tif (this.props.jobLog?.baseType?.companyPostCodeIdentifier && this.props.jobLog?.baseType?.companyPostCodeIdentifier?.length > 0)\n\t\t{\n\t\t\tif (this.props.jobLog?.baseType?.companyTown && this.props.jobLog?.baseType?.companyTown?.length > 0)\n\t\t\t\tsearchAddress += this.props.jobLog?.baseType?.companyPostCodeIdentifier + ' ' + this.props.jobLog?.baseType?.companyTown;\n\t\t\telse \n\t\t\t\tsearchAddress += this.props.jobLog?.baseType?.companyPostCodeIdentifier;\n\t\t}\n\n\t\treturn searchAddress;\n\t}\n\n render() {\n return (\n \n \n

    {this.props.jobLog?.baseType?.title}

    \n \n
    \n\n \n

    Virksomhed: {this.props.jobLog?.baseType?.companyName}

    \n

    Adresse: {this.handleSearchAddressToDisplay()}

    \n

    Status på jobsøgning: {jobSeekingStatusTypes()?.find(x => x?.id === this.props.jobLog?.jobSearchStatus?.identifier)?.name}

    \n
    \n\n \n window.open(\"https://job.jobnet.dk/CV/frontpage\", \"_blank\")} />\n \n
    \n );\n }\n}\n\nexport default ModalEmptyJobLog;","import * as React from 'react';\nimport TextAgreementModel from '../../models/Agreement/TextAgreementModel';\nimport CitizenModel from '../../models/CitizenModel';\nimport { MeetingModel } from '../../models/MeetingModel';\nimport JobPathModel from '../../models/JobPathModel';\nimport { Guid } from 'guid-typescript';\nimport { bindActionCreators } from 'redux';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { startUpdateAgreement } from '../../store/Agreement/actions';\nimport { addMyPlanToDB, setActiveJobLog, setChosenSortItem, setJobLogScrollTop, showMyPlanDisclaimer } from '../../store/MyPlan/actions';\nimport { AppActions } from '../../store/AppActions';\nimport { AppState } from '../../store';\nimport { connect } from 'react-redux';\nimport { _Text } from '../../i18n/translations';\nimport MomentumModalDisclaimer from '../../components/ModalDisclaimers/MomentumModalDisclaimer';\nimport swal from \"sweetalert2\";\nimport withReactContent from 'sweetalert2-react-content';\nimport { ToastIcon, TopToast } from '../../helpers/ToastHelper';\nimport { Redirect } from 'react-router-dom';\nimport QualificationAgreementModel from '../../models/Agreement/QualificationAgreementModel';\nimport { PlanTypeIdentifier } from '../../models/PlanTypeIdentifier';\nimport { ParticipationStatusTypeIdentifier } from '../../models/ParticipationStatusTypeIdentifier';\nimport { InterviewTypeIdentifier } from '../../models/InterviewTypeIdentifier';\nimport MyPlanTextComponent from '../../components/MyPlanTextComponent';\nimport { postDataGroupToCitizenService } from '../../store/Citizen/actions';\nimport DataGroup from '../../models/Template/TemplateModel';\nimport JobMatchTemplateModel, { JournalSystem } from '../../models/Template/JobMatchTemplateModel';\nimport DataResponseModel from '../../models/Template/DataResponseModel';\nimport { ApiResponseEnumModel } from '../../models/ApiResponseEnumModel';\nimport { handleBeforeUnload } from '../../helpers/WarnUserBeforeUnload';\nimport FasitModalDisclaimer from '../../components/ModalDisclaimers/FasitModalDisclaimer';\nimport { InterviewContactTypeIdentifier } from '../../models/InterviewContactTypeIdentifier';\nimport { createMeeting } from '../../helpers/MeetingHelper';\nimport { setLoader } from '../../store/Loader/actions';\nimport Loader from '../../components/Loader';\nimport TableOptionsModel, { TableButtonTypes } from '../../models/TableOptionsModel';\nimport { formatDateToDanishSignature, formatDateToDanishSignatureWithWeek, formatDateToWeek } from '../../helpers/DateHelper';\nimport GeneralListView from '../../components/GeneralListView';\nimport { ITableHeaderModel } from '../../models/Interfaces/ITableHeaderModel';\nimport TableSortItem from '../../models/TableSortItem';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faDownload } from '@fortawesome/free-solid-svg-icons';\nimport JobLogModal from '../../components/JobLogModal';\nimport { JobLogFilter, myPlanJoblogTableNames, myPlanJoblogTableNamesEmployeed } from '../../store/MyPlan/reducers';\nimport { createGuid } from '../../helpers/CreateGuid';\nimport CompanyModel from '../../models/CompanyModel';\nimport { exportDataToXLSX } from '../../helpers/ExportFiles';\nimport { isEmptyOrUndefined, isObjEmpty } from '../../helpers/TypeChecks';\nimport JobSearchEntryModel, { JobApplicationSource, jobSeekingStatusTypes, WeeklyWorkTime, weeklyWorkTimeTypes } from '../../models/JobSearchEntryModel';\nimport ModalForShowJobDescription from '../../components/ModalForShowJobDescription';\nimport ModalToDisplayCompany from '../../components/ModalToDisplayCompany';\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport { MyListTableModel } from '../../models/Interfaces/IGeneralTableModel';\nimport JobModel from '../../models/JobModel';\nimport JobLogEntryModel from '../../models/JobLogEntryModel';\nimport { removeJobFromJobpath } from '../../store/JobPathList/actions';\nimport CoreEntryBodyTypeModel from '../../models/CoreEntryBodyTypeModel';\nimport { deleteJobOnJobPathFilter } from '../../store/Person/actions';\nimport { JobDisplayModel } from '../../models/JobDisplayModel';\nimport { fetchSingleJob } from '../../store/Jobs/actions';\nimport \"./MyPlanScene.scss\";\nimport { IsLoggedIn, jobPathImages, jobPathImagesObject, remainingJobPathImageObject } from '../../helpers/ImageHelper';\nimport JobLogItem from '../../components/JobLogItem';\nimport ModalEmptyJobLog from '../../components/ModalEmptyJobLog';\nimport { AutoSizer, CellMeasurer, CellMeasurerCache, List } from 'react-virtualized';\nimport { UnemploymentFundMembershipType } from '../../models/UnemploymentFundMembershipType';\nimport { MsalContext } from '@azure/msal-react';\nimport ButtonGeneral from '../../components/Buttons/ButtonGeneral';\nimport { ButtonGeneralType } from '../../components/Buttons/ButtonGeneral/ButtonGeneral';\n\nconst notPinnedJob = require('../../images/PinnedJobsTransparrent.svg')?.default;\nconst pinnedJob = require('../../images/PinnedJobsFull.svg')?.default;\n\ninterface State {\n chosenJobLog: JobSearchEntryModel;\n showJobLogModal: boolean;\n filteredTableData: MyListTableModel[];\n showJobModal: boolean;\n chosenJob: JobModel;\n isJobLog: boolean;\n showEmptyJobLogModal: boolean;\n cache: CellMeasurerCache;\n displayLastPage: boolean;\n}\n\ninterface LinkStateProps {\n textAgreements: TextAgreementModel[];\n citizen: CitizenModel;\n jobPathList: JobPathModel[];\n citizenID: Guid;\n showDisclaimerModal: boolean;\n saveMyPlanSuccess: boolean;\n beginAddMyPlan: boolean;\n remainingJobPath: JobPathModel;\n qualificationAgreements: QualificationAgreementModel[];\n planType: PlanTypeIdentifier;\n interviewType: InterviewTypeIdentifier;\n participationStatusType: ParticipationStatusTypeIdentifier;\n savedRemark: string;\n templates: JobMatchTemplateModel;\n dataResponse: DataResponseModel;\n interviewContactType: InterviewContactTypeIdentifier;\n jobLogs: JobLogEntryModel[];\n jobLogScrollTop: number;\n activeJobLogFilter: string;\n chosenMyPlanSort: TableSortItem;\n jobSearchEntries: JobSearchEntryModel[];\n windowInnerWidth: number;\n personMembership: UnemploymentFundMembershipType;\n}\n\ninterface LinkDispatchProps {\n startUpdateAgreement: (\n agreement: TextAgreementModel,\n isTemp: boolean\n ) => void;\n addMyPlanToDB: (myPlanMeeting: MeetingModel, knowledgeSharingSystem: JournalSystem, callback: (success: boolean) => void) => void;\n showMyPlanDisclaimer: (showMyPlanDisclaimer: boolean) => void;\n postDataGroupToCitizenService: (citizenGuid: Guid, dataGroup: DataGroup, callback: (success: boolean) => void) => void;\n setJobLogScrollTop: (scrollTop: number) => void;\n setActiveJobLog: (filter: string) => void;\n setChosenSortItem: (data: TableSortItem) => void;\n removeJobFromJobpath: (jobId: string, jobPathId: Guid) => void;\n deleteJobOnJobPathFilter: (jobPathID: Guid, job: JobModel, jobType: \"job\" | \"order\" | \"company\", callback: (success: boolean) => void) => void;\n fetchSingleJob: (jobID: string, options: {isCompany?: boolean, isViregoOrder?: boolean}, callback: (success: boolean, job?: JobDisplayModel) => void) => void;\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n textAgreements: state.agreement.textAgreements,\n citizen: state.citizen.citizen,\n jobPathList: state.jobPathList.jobPaths,\n citizenID: state.citizen.citizenID,\n showDisclaimerModal: state.myPlanMeeting.shouldShowMyPlanDisclaimer,\n saveMyPlanSuccess: state.myPlanMeeting.saveMyPlanSuccess,\n beginAddMyPlan: state.myPlanMeeting.beginAddMyPlan,\n remainingJobPath: state.jobPathList.remainingJobPath,\n qualificationAgreements: state.agreement.qualificationAgreements,\n planType: state.myPlanMeeting.planType,\n interviewType: state.myPlanMeeting.interviewType,\n participationStatusType: state.myPlanMeeting.participationStatusType,\n savedRemark: state.agreement.savedRemark,\n templates: state.template.templates,\n dataResponse: state.citizen.dataResponse,\n interviewContactType: state.myPlanMeeting.interviewContactType,\n jobLogs: state.myPlanMeeting.tempJobLogList,\n jobLogScrollTop: state.myPlanMeeting.jobLogScrollTop,\n activeJobLogFilter: state.myPlanMeeting.activeJobLogFilter,\n chosenMyPlanSort: state.myPlanMeeting.chosenMyPlanSort,\n jobSearchEntries: state.person.jobSearchEntries,\n windowInnerWidth: state.searchJob.windowInnerWidth,\n personMembership: state.person.personMembership,\n});\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n startUpdateAgreement: bindActionCreators(startUpdateAgreement, dispatch),\n addMyPlanToDB: bindActionCreators(addMyPlanToDB, dispatch),\n showMyPlanDisclaimer: bindActionCreators(showMyPlanDisclaimer, dispatch),\n postDataGroupToCitizenService: bindActionCreators(postDataGroupToCitizenService, dispatch),\n setJobLogScrollTop: bindActionCreators(setJobLogScrollTop, dispatch),\n setActiveJobLog: bindActionCreators(setActiveJobLog, dispatch),\n setChosenSortItem: bindActionCreators(setChosenSortItem, dispatch),\n removeJobFromJobpath: bindActionCreators(removeJobFromJobpath, dispatch),\n deleteJobOnJobPathFilter: bindActionCreators(deleteJobOnJobPathFilter, dispatch),\n fetchSingleJob: bindActionCreators(fetchSingleJob, dispatch),\n});\n\ntype Props = LinkStateProps & LinkDispatchProps;\n\nclass MyPlanScene extends React.Component {\n static contextType = MsalContext;\n\n constructor(props: any) {\n super(props);\n this.state = {\n chosenJobLog: {} as JobSearchEntryModel,\n showJobLogModal: false,\n filteredTableData: this.handleFilteredJobLogs(this.props.activeJobLogFilter),\n showJobModal: false,\n chosenJob: {} as JobModel,\n isJobLog: false,\n showEmptyJobLogModal: false,\n cache: new CellMeasurerCache({ fixedWidth: true, defaultHeight: 180 }),\n displayLastPage: false,\n };\n }\n\n componentDidMount() {\n // if (sessionStorage.getItem('redirectPathForMyList') != null)\n // sessionStorage.removeItem('redirectPathForMyList');\n }\n\n componentDidUpdate(prevProps: Props) {\n if (prevProps.jobPathList !== this.props.jobPathList || prevProps.jobSearchEntries !== this.props.jobSearchEntries\n || prevProps.remainingJobPath !== this.props.remainingJobPath)\n {\n this.setState({\n filteredTableData: this.handleFilteredJobLogs(this.props.activeJobLogFilter),\n });\n }\n } \n\n handleAddressToDisplay = (addressStreet: string | undefined, postalCode: string | undefined, city: string | undefined) => {\n let searchAddress: string = '';\n\n if (addressStreet && addressStreet?.length > 0)\n searchAddress += addressStreet;\n\n if (postalCode && postalCode?.length > 0)\n {\n if (city && city?.length > 0)\n searchAddress += (searchAddress?.length > 0 ? ', ' : '') + postalCode + ' ' + city;\n else \n searchAddress += (searchAddress?.length > 0 ? ', ' : '') + postalCode;\n }\n else if (city && city?.length > 0)\n searchAddress += (searchAddress?.length > 0 ? ', ' : '') + city;\n\n return searchAddress;\n }\n\n handleConvertJobSearchEntries = (): MyListTableModel[] => {\n let convertedJobSearchEntries: MyListTableModel[] = [];\n if (this.props.jobSearchEntries?.length > 0)\n {\n // TODO tilføj jobpathid fra jobsearchentries på jobspor, skal måske gøres et andet sted?\n this.props.jobSearchEntries.map((joblog) => {\n if (!isObjEmpty(joblog))\n {\n convertedJobSearchEntries.push({\n id: joblog?.id?.toString() ?? '',\n title: joblog?.baseType?.title ?? '-',\n companyName: joblog?.baseType?.companyName ?? '-',\n deadlineString: !isEmptyOrUndefined(joblog?.submissionDeadlineDate) ? formatDateToDanishSignature(joblog?.submissionDeadlineDate!) : '-',\n deadlineDate: joblog?.submissionDeadlineDate,\n combinedAddressString: this.handleAddressToDisplay(joblog?.baseType?.companyAddressStreet, joblog?.baseType?.companyPostCodeIdentifier, joblog?.baseType?.companyTown),\n isPinned: false,\n isJobLog: true,\n jobPathID: joblog?.jobPathID,\n createdString: !isEmptyOrUndefined(joblog?.created) ? formatDateToDanishSignature(joblog.created!) : '-',\n createdDate: joblog?.created,\n jobSearchStatus: !isEmptyOrUndefined(joblog?.jobSearchStatus?.identifier) ? jobSeekingStatusTypes()?.find(x => x?.id === joblog?.jobSearchStatus?.identifier)?.name ?? '-' : '-',\n submissionDate: joblog.submissionDate!,\n documentCount: joblog?.documents?.length,\n jobPathName: !isEmptyOrUndefined(joblog?.jobPathID) ? this.getJobPathName(joblog?.jobPathID!) : '',\n imageId: joblog?.jobPathID ? this.getJobPathImageId(joblog?.jobPathID) : undefined,\n });\n }\n });\n }\n\n return convertedJobSearchEntries;\n }\n\n handleConvertJobs = (): MyListTableModel[] => {\n let convertedJobs: MyListTableModel[] = [];\n let jobPathList: JobPathModel[] = [];\n if (this.props.jobPathList?.length > 0)\n jobPathList = [...this.props.jobPathList];\n\n if (this.props.remainingJobPath?.jobs?.length > 0 || this.props.remainingJobPath?.companyJobs?.length > 0)\n jobPathList = [...jobPathList, this.props.remainingJobPath];\n\n if (jobPathList?.length > 0)\n {\n jobPathList.map((jobpath) => {\n if (jobpath?.jobs?.length > 0)\n {\n jobpath.jobs.map((job) => {\n if (!isObjEmpty(job))\n {\n convertedJobs.push({\n id: job?.id ?? '',\n title: job?.title ?? '-',\n companyName: job?.companyName ?? '-',\n deadlineString: !isEmptyOrUndefined(job?.deadline) ? formatDateToDanishSignature(job?.deadline) : '-',\n deadlineDate: job?.deadline,\n combinedAddressString: this.handleAddressToDisplay(job?.workPlaceAddress, job?.workPlacePostalCode, job?.workPlaceCity),\n isPinned: false,\n isJobLog: false,\n jobPathID: jobpath?.id,\n createdString: '',\n documentCount: 0,\n jobSearchStatus: '',\n submissionDate: undefined,\n jobPathName: jobpath?.name,\n imageId: jobpath?.imageId,\n });\n }\n });\n }\n\n if (jobpath?.companyJobs?.length > 0)\n {\n jobpath.companyJobs.map((company) => {\n if (!isObjEmpty(company))\n {\n convertedJobs.push({\n id: company?.id ?? '',\n title: company?.title ?? '-',\n companyName: company?.companyName ?? '-',\n deadlineString: '-',\n deadlineDate: company?.deadline,\n combinedAddressString: this.handleAddressToDisplay(company?.workPlaceAddress, company?.workPlacePostalCode, company?.workPlaceCity),\n isPinned: false,\n isJobLog: false,\n jobPathID: jobpath?.id,\n createdString: '',\n documentCount: 0,\n jobSearchStatus: '',\n submissionDate: undefined,\n isCompanyJob: true,\n jobPathName: jobpath?.name,\n imageId: jobpath?.imageId,\n });\n }\n });\n }\n });\n }\n\n return convertedJobs\n }\n\n handleFilteredJobLogs = (activeJobLogFilter: string): MyListTableModel[] => {\n let data: MyListTableModel[] = [];\n switch (activeJobLogFilter) {\n case JobLogFilter.ALL: {\n const convertedJobSearchEntries = this.handleConvertJobSearchEntries();\n const convertedJobs = this.handleConvertJobs();\n data = [...convertedJobSearchEntries, ...convertedJobs]\n break;\n }\n\n case JobLogFilter.ACTIVE: {\n const convertedJobs = this.handleConvertJobs();\n data = convertedJobs;\n break;\n }\n\n case JobLogFilter.JOBLOG: {\n const convertedJobSearchEntries = this.handleConvertJobSearchEntries();\n data = convertedJobSearchEntries;\n break;\n }\n \n default:\n break;\n }\n\n return data;\n }\n\n handleShouldDisableInspectBtn = (isJobLog: boolean, job: JobModel, jobLog: JobSearchEntryModel): boolean => {\n if (!isJobLog && !isObjEmpty(job)) return false;\n if (isJobLog && (!isEmptyOrUndefined(jobLog?.jobNetId) || !isEmptyOrUndefined(jobLog?.jobPostingURL))) return false;\n\n return true;\n }\n\n handleDataToDisplay = (data: MyListTableModel): TableOptionsModel[] => {\n const { job, jobLog } = this.handleGetJobOrJoblog(data?.isJobLog, data?.id, data?.jobPathID);\n\n let tables: TableOptionsModel[] = [];\n // const tdPin: TableOptionsModel = new TableOptionsModel('', {usePin: true, smallTd: true});\n const tdTitle: TableOptionsModel = new TableOptionsModel(data?.isCompanyJob ? 'Uopfordret' : data?.title ?? '-', {constrainText: true, tooltip: data?.title});\n tables.push(tdTitle);\n // const tdCompany: TableOptionsModel = new TableOptionsModel(data?.companyName ?? '-');\n const tdCompanyAndAddress: TableOptionsModel = new TableOptionsModel('', {largeTd: true, constrainText: true, textToWrap: [data?.companyName, data?.combinedAddressString], tooltip: data?.companyName + ', ' + data?.combinedAddressString});\n tables.push(tdCompanyAndAddress);\n const tdJobPath: TableOptionsModel = new TableOptionsModel(!isEmptyOrUndefined(data?.jobPathID) ? this.getJobPathName(data.jobPathID!) : '-', {imageWithText: !isEmptyOrUndefined(data?.jobPathID) ? this.getJobPathImage(data.jobPathID!) : '', tooltip: !isEmptyOrUndefined(data?.jobPathID) ? this.getJobPathName(data.jobPathID!) : ''});\n tables.push(tdJobPath);\n const tdDeadline: TableOptionsModel = new TableOptionsModel(data?.deadlineString);\n tables.push(tdDeadline);\n\n const tdInspectJobLog: TableOptionsModel = new TableOptionsModel('', {smallTd: true, button: {eyeBtn: true, disable: this.handleShouldDisableInspectBtn(data?.isJobLog, job, jobLog)}, tooltip: 'Vis jobannonce'});\n const tdDeleteJobLog: TableOptionsModel = new TableOptionsModel('', {smallTd: true, button: {deleteBtn: !data?.isJobLog, updateBtn: data?.isJobLog}, tooltip: !data?.isJobLog ? 'Slet opslag' : data?.isJobLog ? 'Opdater joblog' : ''});\n if (this.props.personMembership === UnemploymentFundMembershipType.UnemployedMember)\n {\n const tdSubmission: TableOptionsModel = new TableOptionsModel('', {textToWrap: [formatDateToDanishSignature(data?.submissionDate), !isEmptyOrUndefined(data?.submissionDate) ? formatDateToWeek(data?.submissionDate) : '-']});\n const tdCreated: TableOptionsModel = new TableOptionsModel(data?.createdString);\n const tdJobSearchStatus: TableOptionsModel = new TableOptionsModel(data?.jobSearchStatus);\n const tdDocumentCount: TableOptionsModel = new TableOptionsModel(String(data?.documentCount));\n const tdAddJobLog: TableOptionsModel = new TableOptionsModel('Tilføj', {mediumTd: true, alignCenter: true, button: {btnRounded: true}, checkbox: {checked: data?.isJobLog, useCheckbox: false}});\n return [...tables, tdSubmission, tdCreated, tdJobSearchStatus, tdDocumentCount, tdAddJobLog, tdInspectJobLog, tdDeleteJobLog];\n }\n else\n return [...tables, tdInspectJobLog, tdDeleteJobLog];\n }\n\n handleUpdateScrollPosition = (scrollTop: number, shouldReset?: boolean) => {\n let tempJobLogScroll: number = 0;\n tempJobLogScroll = scrollTop;\n this.props.setJobLogScrollTop(tempJobLogScroll);\n }\n\n handleOnClick = (data: MyListTableModel, buttonType: TableButtonTypes) => {\n let jobLog: JobSearchEntryModel = {} as JobSearchEntryModel;\n let job: JobModel = {} as JobModel;\n let isCompanyJob: boolean = false;\n if (data?.isJobLog)\n {\n const index: number = this.props.jobSearchEntries?.findIndex((x) => x?.id?.toString() === data?.id);\n if (index > -1)\n jobLog = this.props.jobSearchEntries[index];\n }\n else \n {\n let jobPathList: JobPathModel[] = [...this.props.jobPathList, this.props.remainingJobPath];\n\n const jobPathIdx: number = jobPathList?.findIndex(j => j?.id === data?.jobPathID);\n if (jobPathIdx > -1)\n {\n const jobIdx: number = jobPathList[jobPathIdx]?.jobs?.findIndex(job => job?.id === data?.id);\n if (jobIdx > -1)\n {\n job = jobPathList[jobPathIdx].jobs[jobIdx];\n }\n else \n {\n const companyIdx: number = jobPathList[jobPathIdx]?.companyJobs?.findIndex(company => company?.id === data?.id);\n if (companyIdx > -1)\n {\n job = jobPathList[jobPathIdx].companyJobs[companyIdx];\n isCompanyJob = true;\n }\n }\n\n job.jobPathId = data.jobPathID!;\n }\n }\n\n switch (buttonType) {\n case TableButtonTypes.ADD_BUTTON_ROUNDED: {\n if (isObjEmpty(jobLog) && !isObjEmpty(job))\n {\n jobLog = {\n ...jobLog,\n baseType: {\n title: job?.title,\n companyName: job?.companyName,\n companyAddressStreet: job?.workPlaceAddress,\n companyPostCodeIdentifier: job?.workPlacePostalCode,\n companyTown: job?.workPlaceCity,\n } as CoreEntryBodyTypeModel,\n jobPostingURL: !isCompanyJob ? job?.url : undefined,\n isCompanyJob: isCompanyJob,\n jobApplicationSourceIdentifier: isCompanyJob ? {identifier: JobApplicationSource.NOT_ADVERTISED} : {identifier: JobApplicationSource.ADVERTISED},\n jobNetId: job?.id,\n jobPathID: job?.jobPathId,\n } as JobSearchEntryModel;\n \n this.props.fetchSingleJob(isCompanyJob ? job?.companyJobId : job?.id, {}, (success, jobToDisplay) => {\n if (success && jobToDisplay !== undefined && !isObjEmpty(jobToDisplay))\n {\n let contactPerson: string | undefined = undefined;\n if (!isEmptyOrUndefined(jobToDisplay?.contactFirstname))\n contactPerson = `${jobToDisplay.contactFirstname} ${!isEmptyOrUndefined(jobToDisplay?.contactLastname) ? jobToDisplay?.contactLastname : ''}`;\n\n jobLog = {\n ...jobLog,\n baseType: {\n title: jobToDisplay?.title,\n companyName: jobToDisplay?.companyName,\n companyAddressStreet: jobToDisplay?.workPlaceAddress,\n companyPostCodeIdentifier: jobToDisplay?.workPlacePostalCode,\n companyTown: jobToDisplay?.workPlaceCity,\n companyContactPerson: contactPerson,\n companyPhone: !isEmptyOrUndefined(jobToDisplay?.contactPhone) ? jobToDisplay?.contactPhone : undefined,\n companyEmail: !isEmptyOrUndefined(jobToDisplay?.contactEmail) ? jobToDisplay?.contactEmail : undefined,\n } as CoreEntryBodyTypeModel,\n jobPostingURL: !isCompanyJob ? jobToDisplay?.url : undefined,\n weeklyWorkTimeTypeIdentifier: { identifier: jobToDisplay?.workHoursPerWeekMax >= 37 ? WeeklyWorkTime.FULLTIME : WeeklyWorkTime.PARTTIME },\n submissionDeadlineDate: !isEmptyOrUndefined(jobToDisplay?.lastDateApplication) ? new Date(jobToDisplay?.lastDateApplication) : undefined,\n } as JobSearchEntryModel;\n }\n this.handleAddOrUpdateJobLog(jobLog, false);\n });\n }\n else \n this.handleAddOrUpdateJobLog(jobLog, true);\n\n break;\n }\n\n case TableButtonTypes.DELETE: {\n this.handleRemoveJob(job);\n break;\n }\n\n case TableButtonTypes.UPDATE: {\n this.handleAddOrUpdateJobLog(jobLog, true);\n break;\n }\n\n case TableButtonTypes.INSPECT_EYE: {\n if (!isObjEmpty(job))\n this.handleInspectJob(job);\n else if (!isObjEmpty(jobLog))\n this.handleInspectJobLog(jobLog);\n break;\n }\n \n default:\n break;\n }\n }\n\n handleAddOrUpdateJobLog = (jobLog: JobSearchEntryModel, isJobLog: boolean) => {\n this.setState({\n isJobLog: isJobLog,\n showJobLogModal: true,\n chosenJobLog: jobLog,\n });\n }\n\n handleGetJobOrJoblog = (isJobLog: boolean, id: any, jobPathID: Guid | null | undefined): { jobLog: JobSearchEntryModel, job: JobModel, isCompanyJob: boolean } => {\n let jobLog: JobSearchEntryModel = {} as JobSearchEntryModel;\n let job: JobModel = {} as JobModel;\n let isCompanyJob: boolean = false;\n if (isJobLog)\n {\n const index: number = this.props.jobSearchEntries?.findIndex((x) => x?.id?.toString() === id);\n if (index > -1)\n jobLog = this.props.jobSearchEntries[index];\n }\n else \n {\n let jobPathList: JobPathModel[] = [...this.props.jobPathList, this.props.remainingJobPath];\n\n const jobPathIdx: number = jobPathList?.findIndex(j => j?.id === jobPathID);\n if (jobPathIdx > -1)\n {\n const jobIdx: number = jobPathList[jobPathIdx]?.jobs?.findIndex(job => job?.id === id);\n if (jobIdx > -1)\n {\n job = jobPathList[jobPathIdx].jobs[jobIdx];\n }\n else \n {\n const companyIdx: number = jobPathList[jobPathIdx]?.companyJobs?.findIndex(company => company?.id === id);\n if (companyIdx > -1)\n {\n job = jobPathList[jobPathIdx].companyJobs[companyIdx];\n isCompanyJob = true;\n }\n }\n\n job.jobPathId = jobPathID!;\n }\n }\n\n return { jobLog: jobLog, job: job, isCompanyJob: isCompanyJob };\n }\n\n handleRemoveJob = (job: JobModel) => {\n const MySwal = withReactContent(swal);\n MySwal.fire({\n title: 'Slet opslag fra Min liste',\n text: \"Er du sikker på, at du vil slette opslaget fra Min liste?\",\n confirmButtonText: 'Fjern',\n cancelButtonText: 'Annuller',\n showCancelButton: true,\n reverseButtons: true,\n customClass: {\n popup: 'swal-popup',\n container: 'swal-popup-customized',\n confirmButton: 'swal-customized-confirm swal-buttons',\n cancelButton: 'swal-customized-cancel swal-buttons'\n }\n\n }).then((result: any) => {\n if (result?.value)\n {\n const jobpathID: Guid = job?.jobPathId?.toString() === Guid.EMPTY && !isObjEmpty(this.props.remainingJobPath) ? this.props.remainingJobPath?.id : job?.jobPathId;\n this.props.deleteJobOnJobPathFilter(jobpathID, job, job?.id?.startsWith('c') ? \"company\" : \"order\", (success) => {\n if (success)\n {\n TopToast(ToastIcon.SUCCESS).fire({\n title: 'Jobbet blev fjernet succesfuldt.',\n backdrop: false,\n });\n this.props.removeJobFromJobpath(job?.id, job?.jobPathId);\n }\n else \n {\n TopToast(ToastIcon.ERROR).fire({\n title: 'Fejl! Jobbet blev ikke fjernet korrekt.',\n backdrop: false,\n });\n }\n });\n }\n });\n }\n\n handleInspectJob = (job: JobModel) => {\n this.setState({\n showJobModal: true,\n chosenJob: job,\n });\n }\n\n handleInspectJobLog = (jobLog: JobSearchEntryModel) => {\n if (!isEmptyOrUndefined(jobLog?.jobNetId))\n {\n let tempJob: JobModel = {} as JobModel;\n tempJob.id = jobLog.jobNetId!;\n \n if (!isEmptyOrUndefined(jobLog?.jobPathID))\n {\n tempJob.jobPathId = jobLog?.jobPathID!;\n tempJob.imageId = this.props.jobPathList?.find(j => j?.id === jobLog?.jobPathID!)?.imageId ?? -1;\n }\n \n this.setState({\n chosenJob: tempJob,\n showJobModal: true,\n });\n }\n else if (!isEmptyOrUndefined(jobLog?.jobPostingURL))\n window.open(jobLog?.jobPostingURL, '_blank');\n else\n TopToast(ToastIcon.ERROR).fire({ title: 'Linket til jobannoncen er udløbet eller findes ikke mere.', timer: 4000 });\n }\n\n handleCloseJobLogModal = () => {\n this.setState({\n showJobLogModal: false,\n isJobLog: false,\n chosenJobLog: {} as JobSearchEntryModel,\n displayLastPage: false,\n });\n }\n\n handleJobLogFilter = (filter: string) => {\n this.props.setActiveJobLog(filter);\n this.setState({\n filteredTableData: this.handleFilteredJobLogs(filter),\n });\n }\n\n handleMyPlanJobLogSort = (data: TableSortItem) => {\n this.props.setChosenSortItem(data);\n }\n\n handleDownloadMyList = () => {\n const headers: string[] = [\"Titel\", \"Virksomhed\", \"Adresse\", \"Søgefilter\", \"Frist\", \"Søgt\", \"Oprettet\", \"Status\", \"Dokumenter\"];\n let myListData: string[][] = [];\n\n if (this.state.filteredTableData?.length > 0)\n {\n this.state.filteredTableData?.map((value) => {\n const data: string[] = [\n value?.title,\n value?.companyName,\n value?.combinedAddressString,\n !isEmptyOrUndefined(value?.jobPathID) ? this.getJobPathName(value.jobPathID!) : '-',\n value?.deadlineString,\n value?.submissionDate != undefined ? `${formatDateToDanishSignature(value?.submissionDate)} (${formatDateToWeek(value?.submissionDate)})` : '-',\n value?.createdString,\n value?.jobSearchStatus,\n value?.documentCount?.toString()\n ];\n\n myListData.push(data);\n });\n }\n\n exportDataToXLSX([[...headers], ...myListData] as any, 'Min liste udtræk')\n }\n\n getJobPathName = (jobPathID: Guid): string => {\n if (this.props.remainingJobPath?.id === jobPathID)\n return this.props.remainingJobPath?.name;\n\n if (this.props.jobPathList?.length > 0)\n {\n const index: number = this.props.jobPathList?.findIndex(j => j?.id === jobPathID);\n if (index > -1)\n return this.props.jobPathList[index]?.name;\n }\n\n return '-';\n }\n\n getJobPathImage = (jobPathID: Guid): any => {\n if (this.props.remainingJobPath?.id === jobPathID)\n return remainingJobPathImageObject(IsLoggedIn(this.context))?.image;\n\n if (this.props.jobPathList?.length > 0)\n {\n const index: number = this.props.jobPathList?.findIndex(j => j?.id === jobPathID);\n if (index > -1)\n return jobPathImagesObject[this.props.jobPathList[index]?.imageId]?.image;\n }\n\n return '';\n }\n\n getJobPathImageId = (jobPathID: Guid): number => {\n if (this.props.remainingJobPath?.id === jobPathID)\n return remainingJobPathImageObject(IsLoggedIn(this.context))?.id;\n\n if (this.props.jobPathList?.length > 0)\n {\n const index: number = this.props.jobPathList?.findIndex(j => j?.id === jobPathID);\n if (index > -1)\n return this.props.jobPathList[index]?.imageId;\n }\n\n return -1;\n }\n\n handleShowJobModal = () => {\n const flippedVal: boolean = !this.state.showJobModal;\n if (!flippedVal)\n {\n this.setState({\n chosenJob: {} as JobModel,\n });\n }\n\n this.setState({\n showJobModal: flippedVal,\n });\n }\n\n handleCloseEmptyJobLogModal = () => {\n this.setState({\n chosenJobLog: {} as JobSearchEntryModel,\n showEmptyJobLogModal: false,\n });\n }\n\n rowRenderer = ({ index, parent, key, style }: { index: any, parent: any, key: any, style: any }) => {\n let html:JSX.Element;\n const item = this.state.filteredTableData[index];\n html =\n \n
    \n this.handleOnClick(item, buttonType)} />\n
    \n ;\n \n return (html);\n }\n\n handleAddEmptyJobLog = () => {\n this.setState({\n showJobLogModal: true,\n displayLastPage: true,\n });\n }\n\n render() {\n const isMobile: boolean = this.props.windowInnerWidth <= 550;\n \n return (\n \n this.handleCloseJobLogModal()} existingItem={this.state.chosenJobLog} />\n this.handleCloseEmptyJobLogModal()} />\n {this.state.chosenJob?.id && this.state.chosenJob?.id?.length > 0 && !this.state.chosenJob?.id?.startsWith('c')\n ?\n {}} closeModal={() => this.handleShowJobModal()} jobId={this.state.chosenJob?.id} imageId={this.state.chosenJob?.imageId} jobpathId={this.state.chosenJob?.jobPathId}\n jobPathTitle={this.getJobPathName(this.state.chosenJob?.jobPathId)} openModal={this.state.showJobModal} page={AgreementCategoryTitles.MYPLAN} pinImage={this.state.chosenJob?.isPinnedJob ? pinnedJob : notPinnedJob}\n toggleJobFromMyPlan={() => {}} isViregoOrder={this.state.chosenJob?.isViregoOrder} />\n : this.state.chosenJob?.id && this.state.chosenJob?.id?.length > 0 && this.state.chosenJob?.id?.startsWith('c')\n ?\n this.handleShowJobModal()} jobId={this.state.chosenJob?.id} page={AgreementCategoryTitles.MYPLAN}\n addJobToJobPath={() => {}} removeJobFromJobPath={() => {}} shouldAddJob={false} shouldRemoveJob={false} />\n : null}\n\n
    \n
    \n
    \n {this.props.personMembership === UnemploymentFundMembershipType.UnemployedMember\n ?\n
    \n this.handleJobLogFilter(JobLogFilter.ALL)}>Alle\n this.handleJobLogFilter(JobLogFilter.ACTIVE)}>Aktive opslag\n this.handleJobLogFilter(JobLogFilter.JOBLOG)}>Joblog\n
    \n : null}\n \n \n
    \n {!isMobile\n ?\n this.handleDataToDisplay(data)} list={this.state.filteredTableData} \n handleOnClick={(data: MyListTableModel, buttonType: TableButtonTypes, listScrollTop?: number) => this.handleOnClick(data, buttonType)} isPinned={(data: MyListTableModel) => false} isFetching={false}\n displayPinLoader={(data: MyListTableModel) => false} scrollTop={this.props.jobLogScrollTop} updateScrollPosition={(scrollTop, shouldReset) => this.handleUpdateScrollPosition(scrollTop, shouldReset)} \n reduxSortItem={this.props.chosenMyPlanSort} handleSorting={(chosenSortItem: TableSortItem) => this.handleMyPlanJobLogSort(chosenSortItem)} />\n :\n
    \n {this.state.filteredTableData?.length > 0\n ?\n \n {({ height, width }) => (\n this.rowRenderer({index, parent, key, style})}\n data={this.state.filteredTableData}\n />\n )}\n \n :\n

    Der er ikke tilføjet noget til Min liste.

    \n }\n {this.props.personMembership === UnemploymentFundMembershipType.UnemployedMember\n ? \n : null}\n
    \n }\n
    \n
    \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MyPlanScene);","import * as FileSaver from 'file-saver';\nimport * as XLSX from 'xlsx';\n\nexport const exportDataToXLSX = (dataFromApi: string[], fileName: string) => {\n const fileType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8';\n const fileExtension = '.xlsx';\n const worksheet = XLSX.utils.json_to_sheet(dataFromApi, {skipHeader: true });\n const workbook = { Sheets: { 'Dashboard udtræk': worksheet }, SheetNames: ['Dashboard udtræk'] };\n const excelBuffer = XLSX.write(workbook, { bookType: 'xlsx', type: 'array' });\n const data = new Blob([excelBuffer], {type: fileType});\n FileSaver.saveAs(data, fileName + fileExtension);\n}\n\nexport const exportDataToCSV = (dataFromApi: any, fileName: string) => {\n const fileType = 'text/csv;charset=utf-8;';\n const fileExtension: string = '.csv';\n const data = new Blob([dataFromApi], {type: fileType});\n FileSaver.saveAs(data, fileName + fileExtension);\n}","import * as React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronDown, faChevronUp } from '@fortawesome/free-solid-svg-icons';\nimport './ExpandButton.scss';\n\ninterface Props {\n expandClicked?: (e: React.MouseEvent) => void;\n idOfElement: number;\n idInNumberList?: number;\n}\n\nclass ExpandButton extends React.Component {\n render() {\n return ;\n }\n}\n\nexport default ExpandButton;\n","import React, { useEffect, useRef, useState } from 'react';\nimport scrollIntoView from 'scroll-into-view-if-needed';\nimport { setTimeout } from 'timers';\nimport { SearchListModel } from '../../models/SearchListModel';\nimport CheckMarkButtonWithText from '../Buttons/CheckMarkButtonWithText';\nimport { List, AutoSizer } from \"react-virtualized\";\nimport './SearchList.scss';\nimport { convertFirstLetterToUppercase } from '../../helpers/FormatStrings';\nimport { isEmptyOrUndefined } from '../../helpers/TypeChecks';\nimport DsaButton from '../DsaButton';\nimport { useSelector } from 'react-redux';\nimport { AppState } from '../../store';\nimport RadioButtonCustom from '../Buttons/RadioButtonCustom';\nlet addTagIcon = require('../../images/addTagIcon.svg');\nlet closeTagIcon = require('../../images/close-icon-searchbox.svg');\n\nfunction SearchList(props: {\n placeHolder?: string, similarItems?: { id: number | string, name: string }[], useRadioButton?: boolean, displayWithoutCheckboxes: boolean, shouldDisplaySimilarItems?: boolean, items: { id: number | string, name: string, checked?: boolean }[], displayItemsByDefault?: boolean, itemDescription?: string,\n selectedElementHandler: (options: { event: any, dataEntity?: any, attribute?: string, checked?: boolean }) => any; closeOnClick?: boolean;\n staticItems?: { id: number | string, name: string }[], staticItemDescription?: string, resetFiltersClicked?: (e: React.MouseEvent) => void, saveFiltersClicked?: (e: React.MouseEvent) => void\n}) {\n const [results, setResults] = useState([] as SearchListModel[]);\n const [staticResults, setStaticResults] = useState([] as { id: number | string, name: string }[]);\n const [loading, setLoading] = useState(false as boolean);\n const [value, setValue] = useState('');\n const [numberOfShownResults, addMoreResults] = useState(5 as number);\n const [similarItemsShownResults, addMoreSimilarResults] = (useState(5 as number));\n const [dropDownState, setDropdownState] = useState(false as boolean);\n const [firstTabShown, setTabShown] = useState(true as boolean);\n const [shouldAddTransitionFx, setTransition] = useState(false as boolean);\n const windowInnerWidth = useSelector((state:AppState) => state.searchJob.windowInnerWidth)\n //used to focus the input field\n const searchInput = useRef(null);\n //used to capture clicks outside div\n const wrapperRef = useRef(null);\n const timeoutRef: any = React.useRef();\n\n const infoDiv = document.getElementById('jobpath-info-div-wrapper');\n const filterJobSearchDiv = document.getElementById('filter-div-job-search');\n\n function scrollToElement(ele: HTMLDivElement, isDropdownVisible: boolean) {\n if (infoDiv) {\n if (ele && isDropdownVisible) {\n setTimeout(() => {\n scrollIntoView(ele, { scrollMode: 'if-needed', block: 'end', inline: 'start', behavior: 'smooth' });\n }, 50);\n }\n }\n\n if (filterJobSearchDiv) {\n if (ele) {\n scrollIntoView(ele, { scrollMode: 'if-needed', block: 'end', inline: 'start', behavior: 'smooth' });\n }\n }\n }\n\n\n function showMoreResults(e: any) {\n addMoreResults(numberOfShownResults + 5);\n if (wrapperRef && wrapperRef.current) {\n scrollToElement(wrapperRef.current, dropDownState);\n }\n }\n\n function showMoreSimilarResults() {\n addMoreSimilarResults(similarItemsShownResults + 5);\n if (wrapperRef && wrapperRef.current) {\n scrollToElement(wrapperRef.current, dropDownState);\n }\n }\n\n function changeDropdownState() {\n setTransition(true);\n if (!dropDownState && searchInput && searchInput.current) {\n if (props.displayItemsByDefault !== undefined) {\n if (props.displayItemsByDefault) {\n setResults(props.items);\n } else {\n setResults([]);\n setStaticResults([]);\n }\n }\n }\n setTimeout(() => {\n const value: boolean = !dropDownState;\n setDropdownState(value);\n setTransition(false);\n if (wrapperRef && wrapperRef.current) {\n scrollToElement(wrapperRef.current, value);\n }\n\n if (searchInput && searchInput.current) {\n searchInput.current.value = '';\n searchInput.current.focus();\n }\n }, 100);\n }\n\n function handleSearchChange(e: any): any {\n let value: string = '';\n if (searchInput && searchInput.current) {\n value = searchInput.current.value.toString().toLowerCase();\n }\n setValue(value);\n clearTimeout(timeoutRef.current)\n setLoading(true);\n timeoutRef.current = setTimeout(() => {\n if (value.length < 2 && props.displayItemsByDefault !== undefined && !props.displayItemsByDefault) {\n setLoading(false);\n setStaticResults([]);\n setResults([]);\n setValue('');\n addMoreResults(5);\n return;\n }\n const resultsFromStaticItems = props.staticItems?.filter((staticitem) => staticitem?.name.toLowerCase().indexOf(value) > -1);\n const results = props.items.filter((q) => q.name?.toLowerCase().indexOf(value) > -1);\n\n setLoading(false);\n setResults(results);\n if (resultsFromStaticItems) {\n setStaticResults(resultsFromStaticItems);\n }\n }, 300)\n }\n\n function handleSearchChangeWithCheckboxes(e: any): any {\n const value: string = e.target.value?.toLowerCase();\n clearTimeout(timeoutRef.current)\n setLoading(true);\n setValue(value);\n timeoutRef.current = setTimeout(() => {\n if (value.length < 1) {\n setLoading(false);\n setValue(value);\n setResults(props.items);\n return\n }\n const results = props.items.filter((q) => q.name?.toLowerCase().indexOf(value) > -1);\n setLoading(false);\n setResults(results);\n\n }, 300)\n }\n\n function rowRenderer({ index, parent, key, style }: { index: any, parent: any, key: any, style: any }) {\n let html;\n if (index === results?.length)\n {\n html =\n (\n \n
    \n
    \n
    );\n }\n else \n {\n html =\n (\n \n
    \n
  • {e.preventDefault(); props.selectedElementHandler({ event: e, dataEntity: results[index], checked: results[index].checked })}}> \n {props.useRadioButton ?\n \n :\n \n }\n
  • \n
    \n
    );\n }\n return (html);\n };\n\n function handleClickOutsideDropdown(event: any) {\n if (wrapperRef && wrapperRef.current && !wrapperRef.current.contains(event.target) && !event.target.classList.contains('tag-dropdown') && dropDownState) {\n setTransition(true);\n if (searchInput && searchInput.current) {\n searchInput.current.value = '';\n }\n setValue('');\n if (props.displayItemsByDefault !== undefined && props.displayItemsByDefault) {\n setResults(props.items);\n }\n else {\n setResults([]);\n }\n addMoreResults(5);\n setTimeout(() => {\n setDropdownState(false);\n setTransition(false);\n }, 200);\n }\n }\n\n function handleTabClicked() {\n if (firstTabShown) {\n setTabShown(false);\n }\n else {\n setTabShown(true);\n }\n }\n\n const handleItemClicked = (e: any, result: any) => {\n props.selectedElementHandler({event: e, dataEntity: result});\n \n if (props.closeOnClick)\n setDropdownState(false);\n }\n\n React.useEffect(() => {\n let value: string = '';\n if (searchInput && searchInput.current) {\n value = searchInput.current?.value?.toString()?.toLowerCase();\n }\n const results = props.items?.filter((q) => q?.name?.toLowerCase()?.indexOf(value) > -1);\n // listens to changes in the checkboxes\n if (!props.displayWithoutCheckboxes) {\n if (value !== '') {\n setResults(results);\n }\n else {\n setResults(props.items);\n }\n } else if (props.displayWithoutCheckboxes) {\n // this effect removes clicked element from the list if items changes\n // const results = props.items.filter((q) => q.name?.toLowerCase().indexOf(value) > -1);\n // setResults(results);\n if (props.displayItemsByDefault !== undefined) {\n if (!props.displayItemsByDefault) {\n if (value !== '') {\n setResults(results);\n }\n else {\n setResults([]);\n }\n }\n else {\n setResults(results);\n }\n }\n }\n if (wrapperRef && wrapperRef.current) {\n scrollToElement(wrapperRef.current, dropDownState);\n }\n }, [props.items]);\n\n React.useEffect(() => {\n let value: string = '';\n if (searchInput && searchInput.current) {\n value = searchInput.current?.value?.toString()?.toLowerCase();\n }\n const resultsFromStaticItems = props.staticItems?.filter((staticitem) => staticitem?.name?.toLowerCase()?.indexOf(value) > -1);\n if (props.displayWithoutCheckboxes) {\n // this effect removes clicked element from the list if items changes\n if (props.displayItemsByDefault !== undefined) {\n if (!props.displayItemsByDefault) {\n if (value !== '') {\n if (resultsFromStaticItems) {\n setStaticResults(resultsFromStaticItems);\n }\n else {\n setStaticResults([]);\n }\n } else {\n if (resultsFromStaticItems) {\n setStaticResults(resultsFromStaticItems);\n }\n }\n }\n }\n }\n if (wrapperRef && wrapperRef.current) {\n scrollToElement(wrapperRef.current, dropDownState);\n }\n }, [props.staticItems]);\n\n React.useEffect(() => {\n if (!firstTabShown) {\n if (wrapperRef && wrapperRef.current) {\n scrollToElement(wrapperRef.current, dropDownState);\n }\n }\n }, [props.similarItems])\n\n React.useEffect(() => {\n return () => {\n clearTimeout(timeoutRef.current)\n }\n }, []);\n\n React.useEffect(() => {\n // this effect is listening on mousedown click event in or outside the searchlist to either set dropdown state as true or false\n window.addEventListener('mousedown', handleClickOutsideDropdown);\n return () => window.removeEventListener(\"mousedown\", handleClickOutsideDropdown);\n }, [dropDownState]);\n\n React.useEffect(() => {\n if (firstTabShown) {\n setTimeout(() => {\n if (searchInput && searchInput.current) {\n searchInput.current.focus();\n }\n if (wrapperRef && wrapperRef.current) {\n scrollToElement(wrapperRef.current, dropDownState);\n }\n }, 50);\n }\n }, [firstTabShown])\n \n return (\n \n {props.displayWithoutCheckboxes ? (\n
    \n \n
    \n \n {dropDownState && props.shouldDisplaySimilarItems ?\n
    \n \n

    |

    \n \n
    \n : null}\n
    \n {firstTabShown ?\n \n : null}\n {firstTabShown ?\n
      \n {\n value === \"\" && props.staticItems && props.staticItems.length > 0 ?\n //no results just show qualifications\n \n {staticResults && staticResults.length === 0 && results.length > 0 || staticResults.length > 0\n ?\n \n {staticResults.length > 0 ?
    • {props.staticItemDescription}
    • : null}\n {staticResults.map((result, index) => !isEmptyOrUndefined(result) &&
    • handleItemClicked(e, result)} >{convertFirstLetterToUppercase(result.name)}
    • )}\n
      \n :\n \n
    • {props.staticItemDescription}
    • \n {props.staticItems?.map(result => !isEmptyOrUndefined(result) &&
    • handleItemClicked(e, result)} >{convertFirstLetterToUppercase(result.name)}
    • )}\n
      \n }\n
      \n : \"\"\n }\n {staticResults.length > 0 && results.length > 0 && value != \"\" ?\n // if there is both qualifications / whatever and static match, show both.\n \n
    • {props.staticItemDescription}
    • \n {staticResults?.map((result, index) => !isEmptyOrUndefined(result) &&
    • handleItemClicked(e, result)} >{convertFirstLetterToUppercase(result.name)}
    • )}\n
      \n : \"\"}\n {results.length > 0 ?\n \n {/* if there is only results from the initial items */}\n {/* anden overskrift for generelisering */}\n {props.itemDescription !== undefined && props.itemDescription.length > 0 ?
    • {props.itemDescription}
    • : null}\n {results.slice(0, numberOfShownResults).map(result => !isEmptyOrUndefined(result) &&
    • handleItemClicked(e, result)} >{convertFirstLetterToUppercase(result.name)}
    • )}\n
      \n : \"\"\n }\n {results.length > numberOfShownResults &&\n
    • showMoreResults(e)}>Vis flere
    • \n }\n
    \n :\n
      \n {props.similarItems && props.similarItems.length > 0 ?\n \n {props.similarItems.slice(0, similarItemsShownResults).map(similarItem => !isEmptyOrUndefined(similarItem) &&
    • props.selectedElementHandler({ event: e, dataEntity: similarItem })} >{convertFirstLetterToUppercase(similarItem.name)}
    • )}\n {props.similarItems.length > similarItemsShownResults &&\n
    • showMoreSimilarResults()}>Vis flere
    • \n }\n
      \n : null}\n
    \n }\n
    \n
    \n
    \n
    \n ) : (\n
    \n
    \n \n
    \n \n
      \n \n \n {({ height, width }) => (\n \n )}\n \n \n
    \n
    \n \n \n
    \n
    \n
    \n
    \n
    \n )}\n\n
    \n )\n}\n\nexport default SearchList;","import * as React from 'react';\nimport JobPathModel from '../../models/JobPathModel';\nimport { AppState } from '../../store';\nimport { connect } from \"react-redux\";\nimport { isEmptyOrUndefined, equals } from '../../helpers/TypeChecks';\nimport CheckMarkButtonWithText from \"../Buttons/CheckMarkButtonWithText\";\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport { isFilterChosen } from \"../../store/JobPathList/actions\";\nimport {\n addJobFilterIdElement, removeJobFilterIdElement, updateRegion, updateForeignCountry, updateWorkTimeArray, updateSingleWorkTime,\n UpdateQueryFilter, SetIsDoneQueryUpdating, UpdateDistance, toggleQueryFilter, setFilterOptionType, addOccupationToTempList,\n removeOccupationFromTempList, removeAllOccupationsFromTempList, saveOccupationsFromTempToDisplayList, triggerCheckedOnOccupations,\n addMunicipalityToTempList, removeMunicipalityFromTempList, removeAllMunicipalitiesFromTempList, saveMunicipalitiesFromTempToDisplayList, triggerCheckedOnMunicipalities,\n ToggleIndustry, AddIndustryToTempList, RemoveAllIndustriesFromTemplist, SaveIndustriesFromTempToDisplayList, RemoveIndustryFromTempList, resetAllFiltersInFilterJobSearch,\n updateEmploymentDuration,\n setJobNetJobType,\n setJobOrderJobType,\n removeQueryFilter,\n addQueryFilter,\n updateQueryFilter,\n setDSAJobFilter,\n setTempDSAJobFilter,\n toggleDsaOccupations,\n setToggleDsaAcademicJobs\n} from \"../../store/SearchJob/actions\";\nimport { bindActionCreators } from 'redux';\nimport { ListGroup, ButtonGroup, Button, InputGroup, Tooltip, OverlayTrigger } from 'react-bootstrap';\nimport ExpandButton from \"../Buttons/ExpandButton\";\nimport { Slider } from \"@material-ui/core\";\nimport SearchFilterDropdown from \"../Dropdown/SearchFilterDropdown\";\nimport { doneFetchingFilteredJobs, fetchJobsByQueryObject, setDisplayLoader, setFilteredAllJobs } from \"../../store/Jobs/actions\";\nimport { RegionModel } from '../../models/RegionModel';\nimport CitizenModel from '../../models/CitizenModel';\nimport { jobPathImages } from '../../helpers/ImageHelper';\nimport { QueryFilter } from '../../models/QueryFilter';\nimport JobTypeModel from '../../models/JobTypeModel';\nimport JobModel from '../../models/JobModel';\nimport MoreMenu from '../Dropdown/MoreMenu';\nimport OccupationOpportunityModel from '../../models/OccupationOpportunityModel';\nimport { SearchListModel } from '../../models/SearchListModel';\nimport { MunicipalityModel } from '../../models/MunicipalityModel';\nimport IndustryModel from '../../models/IndustryModel';\nimport {Accordion, Card} from 'react-bootstrap';\nimport { JobReducerDefaultState } from '../../store/SearchJob/reducer';\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport { FilterOptionTypesModel } from '../../models/FilterOptionsModel';\nimport DSAProfessionModel from '../../models/DSADataModel';\nimport { createLocaleDate } from '../../helpers/DateHelper';\nimport { QueryObject } from '../../models/QueryObject';\nimport { dsaData } from '../../helpers/DSADataHelper';\nimport DSADataModel from '../../models/DSADataModel';\nimport { UnauthenticatedTemplate, AuthenticatedTemplate } from \"@azure/msal-react\";\nimport { MsalContext } from \"@azure/msal-react\";\nimport CheckboxMobile from '../Buttons/CheckboxMobile';\nimport DSAJobFilterModel from '../../models/DSAJobFilterModel';\nimport { UnemploymentFundMembershipType } from '../../models/UnemploymentFundMembershipType';\nimport \"./FilterJobSearch.scss\";\n\ninterface OwnProps {\n page: string;\n}\n\ninterface State {\n jobOpportunities: string[];\n isFilterButtonClicked: boolean;\n menuItemPopUpStyle: {};\n closeFilterDropdown: boolean;\n shouldHandleRunQuery: boolean;\n shouldCloseMoreMenu: boolean;\n dsaSearchListItem: { professions: SearchListModel[], workAreas: SearchListModel[], areaOfSpecializations: SearchListModel[] };\n dsaData: DSADataModel[];\n}\n\ninterface LinkStateProp {\n jobPaths: JobPathModel[];\n filterIdList: number[];\n regions: RegionModel[];\n foreignCountries: [string, boolean][];\n workTime: number[];\n transportTime: string[];\n citizen: CitizenModel;\n queryFilters: QueryFilter[];\n isDoneQueryUpdating: boolean;\n distance: number;\n jobTypes: JobTypeModel[];\n filteredJobs: JobModel[];\n filterOption: FilterOptionTypesModel;\n occupations: OccupationOpportunityModel[];\n tempOccupations: SearchListModel[];\n occupationsToDisplay: SearchListModel[];\n municipality: MunicipalityModel[];\n tempMunicipalities: MunicipalityModel[];\n municipalitiesToDisplay: SearchListModel[];\n industryDisplayList: SearchListModel[];\n industries: IndustryModel[];\n tempIndustries: SearchListModel[];\n employmentDuration: {title: string, checked: boolean}[];\n chosenSortFilter: string;\n chosenTransportTime: string; \n addedInitialFilters: boolean;\n allJobs: JobModel[];\n filteredAllJobs: JobModel[];\n shouldDisplayAllJobs: boolean;\n jobNetJobType: boolean;\n jobOrderJobType: boolean;\n displayLoader: boolean;\n dsaJobFilter: DSAJobFilterModel;\n tempDSAJobFilter: DSAJobFilterModel;\n windowInnerWidth: number;\n toggleDsaOccupations: boolean;\n toggleDsaAcademicJobs: boolean;\n personMembership: UnemploymentFundMembershipType;\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProp => ({\n jobPaths: state.jobPathList.jobPaths,\n filterIdList: state.searchJob.filterIdExpandList,\n regions: state.searchJob.regions,\n foreignCountries: state.searchJob.foreignCountries,\n workTime: state.searchJob.workTimeArray,\n transportTime: state.searchJob.transportTime,\n citizen: state.citizen.citizen,\n queryFilters: state.searchJob.queryFilters,\n isDoneQueryUpdating: state.searchJob.isDoneQueryUpdating,\n distance: state.searchJob.distance,\n jobTypes: state.searchJob.jobTypes,\n filteredJobs: state.jobs.filteredJobs,\n filterOption: state.searchJob.filterOption,\n occupations: state.jobs.occupations,\n tempOccupations: state.searchJob.tempOccupationList,\n occupationsToDisplay: state.searchJob.occupationsToDisplay,\n municipality: state.jobs.municipality,\n tempMunicipalities: state.searchJob.tempMunicipalityList,\n municipalitiesToDisplay: state.searchJob.municipalitiesToDisplay,\n industryDisplayList: state.searchJob.industryDisplayList,\n industries: state.jobs.industries,\n tempIndustries: state.searchJob.tempIndustries,\n employmentDuration: state.searchJob.employmentDuration,\n chosenSortFilter: state.searchJob.chosenSortFilter,\n chosenTransportTime: state.searchJob.chosenTransportTime,\n addedInitialFilters: state.searchJob.addedInitialFilters,\n allJobs: state.jobs.allJobs,\n filteredAllJobs: state.jobs.filteredAllJobs,\n shouldDisplayAllJobs: state.jobPathList.shouldDisplayAllJobs,\n jobNetJobType: state.searchJob.jobNetJobType,\n jobOrderJobType: state.searchJob.jobOrderJobType,\n displayLoader: state.jobs.displayLoader,\n dsaJobFilter: state.searchJob.dsaJobFilter,\n tempDSAJobFilter: state.searchJob.tempDSAJobFilter,\n windowInnerWidth: state.searchJob.windowInnerWidth,\n toggleDsaOccupations: state.searchJob.toggleDsaOccupations,\n toggleDsaAcademicJobs: state.searchJob.toggleDsaAcademicJobs,\n personMembership: state.person.personMembership,\n});\n\ninterface LinkDispatchProps {\n isFilterChosen: (isFilterChosen: boolean, jobPath: JobPathModel) => void;\n addJobFilterIdElement: (filterId: number) => void;\n removeJobFilterIdElement: (filterId: number) => void;\n updateRegion: (region: RegionModel) => void;\n updateForeignCountry: (foreignCountry: [string, boolean]) => void;\n updateWorkTimeArray: (workTimeArray: number[]) => void;\n updateSingleWorkTime: (workTime: number, index: number) => void;\n UpdateQueryFilter: (queryFilters: QueryFilter[], filterType: string) => void;\n SetIsDoneQueryUpdating: (isDone: boolean) => void;\n UpdateDistance: (distance: number) => void;\n toggleQueryFilter: (queryFilter: QueryFilter, shouldAdd: boolean, showAllJob: boolean) => void;\n setFilterOptionType: (filterOption: FilterOptionTypesModel) => void;\n doneFetchingFilteredJobs: (isDoneFetching: boolean) => void;\n resetAllFiltersInFilterJobSearch: () => void; \n updateEmploymentDuration: (employment: {title: string, checked: boolean}) => void; \n setFilteredAllJobs: (jobs: JobModel[]) => void;\n setJobNetJobType: (isChosen: boolean) => void; \n setJobOrderJobType: (isChosen: boolean) => void; \n removeQueryFilter: (queryFilter: QueryFilter) => void;\n addQueryFilter: (queryFilter: QueryFilter) => void;\n updateQueryFilter: (queryFilter: QueryFilter) => void;\n setToggleDsaOccupations: (checked: boolean) => void;\n setToggleDsaAcademicJobs: (checked: boolean) => void;\n\n // used for occupations\n addOccupationToTempList: (occupation: OccupationOpportunityModel) => void;\n removeOccupationFromTempList: (occupation: OccupationOpportunityModel) => void;\n removeAllOccupationsFromTempList: () => void;\n saveOccupationsFromTempToDisplayList: (occupations: SearchListModel[]) => void;\n triggerCheckedOnOccupations: (occupation: SearchListModel, checked: boolean) => void;\n // used for municipalities\n addMunicipalityToTempList: (municipality: MunicipalityModel) => void;\n removeMunicipalityFromTempList: (municipality: MunicipalityModel) => void;\n removeAllMunicipalitiesFromTempList: () => void;\n saveMunicipalitiesFromTempToDisplayList: (municipalities: SearchListModel[]) => void;\n triggerCheckedOnMunicipalities: (municipality: SearchListModel, checked: boolean) => void;\n // used for industries\n ToggleIndustry: (industry: IndustryModel, checked: boolean) => void;\n RemoveAllIndustriesFromTemplist: () => void;\n SaveIndustriesFromTempToDisplayList: (industries: IndustryModel[]) => void;\n AddIndustryToTempList: (industry: IndustryModel) => void;\n RemoveIndustryFromTempList: (industry: IndustryModel) => void;\n setDisplayLoader: (load: boolean) => void;\n setDSAJobFilter: (data: DSAJobFilterModel) => void;\n setTempDSAJobFilter: (data: DSAJobFilterModel) => void;\n fetchJobsByQueryObject: (queryObject: QueryObject, jobPaths: JobPathModel[], isAllJobs: boolean, addConceptUriDas: boolean, onlyQueryJobs: boolean, callback: (success: boolean) => void) => void;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n isFilterChosen: bindActionCreators(isFilterChosen, dispatch),\n addJobFilterIdElement: bindActionCreators(addJobFilterIdElement, dispatch),\n removeJobFilterIdElement: bindActionCreators(removeJobFilterIdElement, dispatch),\n updateRegion: bindActionCreators(updateRegion, dispatch),\n updateForeignCountry: bindActionCreators(updateForeignCountry, dispatch),\n updateWorkTimeArray: bindActionCreators(updateWorkTimeArray, dispatch),\n updateSingleWorkTime: bindActionCreators(updateSingleWorkTime, dispatch),\n UpdateQueryFilter: bindActionCreators(UpdateQueryFilter, dispatch),\n SetIsDoneQueryUpdating: bindActionCreators(SetIsDoneQueryUpdating, dispatch),\n UpdateDistance: bindActionCreators(UpdateDistance, dispatch),\n toggleQueryFilter: bindActionCreators(toggleQueryFilter, dispatch),\n setFilterOptionType: bindActionCreators(setFilterOptionType, dispatch),\n doneFetchingFilteredJobs: bindActionCreators(doneFetchingFilteredJobs, dispatch),\n resetAllFiltersInFilterJobSearch: bindActionCreators(resetAllFiltersInFilterJobSearch, dispatch),\n updateEmploymentDuration: bindActionCreators(updateEmploymentDuration, dispatch),\n setFilteredAllJobs: bindActionCreators(setFilteredAllJobs, dispatch),\n setJobNetJobType: bindActionCreators(setJobNetJobType, dispatch),\n setJobOrderJobType: bindActionCreators(setJobOrderJobType, dispatch),\n removeQueryFilter: bindActionCreators(removeQueryFilter, dispatch),\n addQueryFilter: bindActionCreators(addQueryFilter, dispatch),\n updateQueryFilter: bindActionCreators(updateQueryFilter, dispatch),\n setToggleDsaOccupations: bindActionCreators(toggleDsaOccupations, dispatch),\n setToggleDsaAcademicJobs: bindActionCreators(setToggleDsaAcademicJobs, dispatch),\n\n // used for occupations\n addOccupationToTempList: bindActionCreators(addOccupationToTempList, dispatch),\n removeOccupationFromTempList: bindActionCreators(removeOccupationFromTempList, dispatch),\n removeAllOccupationsFromTempList: bindActionCreators(removeAllOccupationsFromTempList, dispatch),\n saveOccupationsFromTempToDisplayList: bindActionCreators(saveOccupationsFromTempToDisplayList, dispatch),\n triggerCheckedOnOccupations: bindActionCreators(triggerCheckedOnOccupations, dispatch),\n // used for municipalities\n addMunicipalityToTempList: bindActionCreators(addMunicipalityToTempList, dispatch),\n removeMunicipalityFromTempList: bindActionCreators(removeMunicipalityFromTempList, dispatch),\n removeAllMunicipalitiesFromTempList: bindActionCreators(removeAllMunicipalitiesFromTempList, dispatch),\n saveMunicipalitiesFromTempToDisplayList: bindActionCreators(saveMunicipalitiesFromTempToDisplayList, dispatch),\n triggerCheckedOnMunicipalities: bindActionCreators(triggerCheckedOnMunicipalities, dispatch),\n // used for industries\n ToggleIndustry: bindActionCreators(ToggleIndustry, dispatch),\n RemoveAllIndustriesFromTemplist: bindActionCreators(RemoveAllIndustriesFromTemplist, dispatch),\n SaveIndustriesFromTempToDisplayList: bindActionCreators(SaveIndustriesFromTempToDisplayList, dispatch),\n AddIndustryToTempList: bindActionCreators(AddIndustryToTempList, dispatch),\n RemoveIndustryFromTempList: bindActionCreators(RemoveIndustryFromTempList, dispatch),\n setDisplayLoader: bindActionCreators(setDisplayLoader, dispatch),\n setDSAJobFilter: bindActionCreators(setDSAJobFilter, dispatch),\n setTempDSAJobFilter: bindActionCreators(setTempDSAJobFilter, dispatch),\n fetchJobsByQueryObject: bindActionCreators(fetchJobsByQueryObject, dispatch),\n});\n\n\ntype Props = OwnProps & LinkStateProp & LinkDispatchProps;\n\nenum FilterJob {\n JOBPATH = 1,\n TERMSOFEMPLOYMENT = 2,\n GEOGRAPHY = 3,\n DISTANCE = 4,\n WORKTIME = 5,\n EMPLOYMENTDURATION = 6,\n OCCUPATION = 7,\n INDUSTRY = 8,\n JOBTYPES = 9,\n DSA = 10,\n}\n\nclass FilterJobSearch extends React.PureComponent {\n static contextType = MsalContext;\n\n constructor(props: Props) {\n super(props);\n this.state = {\n jobOpportunities: [\n \"Mindre gode jobmuligheder\",\n \"Gode jobmuligheder\",\n \"Mangel på arbejdskraft,\",\n \"Paradoks\",\n \"Omfattende mangel på arbejdskraft\"\n ],\n isFilterButtonClicked: false,\n menuItemPopUpStyle: this.props.windowInnerWidth <= 1450 ? { marginTop: '7vh', marginLeft: '-10.7vw', height: 'fit-content', width: 'fit-content' } : { marginTop: '4vh', marginLeft: '-7.5vw', height: 'fit-content', width: 'fit-content' },\n closeFilterDropdown: false,\n shouldHandleRunQuery: false,\n shouldCloseMoreMenu: false,\n dsaData: dsaData,\n dsaSearchListItem: this.handleSetDSASearchListValues(dsaData),\n }\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n if (!prevState.closeFilterDropdown && this.state.closeFilterDropdown) {\n this.setState({\n closeFilterDropdown: false,\n });\n }\n\n if(!prevState.shouldCloseMoreMenu && this.state.shouldCloseMoreMenu)\n {\n this.setState({shouldCloseMoreMenu: false});\n }\n\n // if user added jobpaths to filter then set filteredAllJobs to allJobs agian.\n if(prevProps.shouldDisplayAllJobs && !this.props.shouldDisplayAllJobs)\n {\n if(this.props.allJobs && this.props.filteredAllJobs && this.props.allJobs.length > this.props.filteredAllJobs.length)\n {\n this.props.setFilteredAllJobs(this.props.allJobs);\n }\n }\n\n if (prevProps.dsaJobFilter?.Profession !== this.props.dsaJobFilter?.Profession)\n {\n this.setState({\n dsaSearchListItem: {\n ...this.state.dsaSearchListItem,\n workAreas: this.handleGetWorkAreas(this.state.dsaData),\n }\n });\n }\n \n if (prevProps.dsaJobFilter?.WorkAreas !== this.props.dsaJobFilter?.WorkAreas)\n {\n this.setState({\n dsaSearchListItem: {\n ...this.state.dsaSearchListItem,\n areaOfSpecializations: this.handleGetAreaOfSpecialisation(this.state.dsaData),\n }\n });\n }\n }\n\n handleSetDSASearchListValues = (dsaData: DSAProfessionModel[]) => {\n return {\n professions: dsaData?.map((x) => new SearchListModel(x?.Profession, x?.Profession)),\n workAreas: this.handleGetWorkAreas(dsaData),\n areaOfSpecializations: this.handleGetAreaOfSpecialisation(dsaData),\n }\n }\n\n getProfessionOccupations = (dsaJobFilter: DSAJobFilterModel, occupationIds: string[]) => {\n const profession: DSADataModel | undefined = dsaData.find((x: any) => x?.Profession === dsaJobFilter?.Profession?.name);\n if (profession)\n {\n if (profession?.Profession?.toLowerCase() === 'akademiker' && dsaJobFilter?.WorkAreas?.length > 0 && dsaJobFilter?.Occupations?.length === 0)\n {\n profession.WorkAreas?.map((workarea) => {\n if (dsaJobFilter?.WorkAreas?.find(x => x?.name === workarea?.Title && x?.checked))\n {\n workarea?.PredefinedOccupations?.map((val) => {\n if (!occupationIds?.includes(val?.ConceptUriDa) && (dsaJobFilter?.Occupations?.find(o => o?.id === val?.ConceptUriDa)?.checked || dsaJobFilter?.Occupations?.length === 0))\n occupationIds = [...occupationIds, val?.ConceptUriDa];\n });\n }\n });\n } \n else \n {\n if (isEmptyOrUndefined(profession.ProfessionOccupations))\n occupationIds = [...occupationIds, ...profession?.PredefinedOccupations.map(x => x.ConceptUriDa)];\n else\n occupationIds = [...occupationIds, ...profession?.ProfessionOccupations];\n }\n }\n return occupationIds;\n }\n\n handleLocation = (distanceToUpdate?: number) => {\n return {\n longitude: this.props.citizen && this.props.citizen.longitude != undefined ? this.props.citizen.longitude : 9.5018,\n latitude: this.props.citizen && this.props.citizen.latitude != undefined ? this.props.citizen.latitude : 56.2639,\n maxDistance: distanceToUpdate !== undefined && distanceToUpdate > 0 ? distanceToUpdate : this.props.distance,\n }\n }\n\n fetchRegions = () => {\n let regions: RegionModel[] = this.props.regions.filter(r => equals(r.checked, true));\n return regions;\n }\n\n handleQueryFilters = () => {\n return this.props.queryFilters;\n }\n\n\n handleRunQuery = (dsaFilters?: DSAJobFilterModel, specializationKeywords?: string[]) => {\n const requestTime: Date = createLocaleDate();\n const dsaFilterToQuery = dsaFilters != undefined ? dsaFilters : this.props.dsaJobFilter; \n if (!this.props.displayLoader)\n this.props.setDisplayLoader(true);\n\n let emptyJobPathObj = {} as JobPathModel;\n emptyJobPathObj = {\n ...emptyJobPathObj,\n imageId: 10,\n };\n\n let tempKeywords: string[] = [];\n let filteredAreaOfSpecializations: SearchListModel[] = dsaFilterToQuery?.AreaOfSpecialisation?.filter(x => x?.checked);\n if (filteredAreaOfSpecializations?.length > 0)\n {\n this.state.dsaData?.map((x) => {\n if (x?.Profession === dsaFilterToQuery?.Profession?.name)\n {\n x.WorkAreas?.map((p) => {\n if (dsaFilterToQuery?.WorkAreas?.find(x => x?.name === p?.Title))\n {\n p?.AreaOfSpecialisation?.map((a) => {\n if (filteredAreaOfSpecializations?.find(x => x?.name === a?.Title))\n tempKeywords = [...tempKeywords, ...a?.SpecializationKeywords];\n });\n }\n })\n }\n });\n }\n else if(dsaFilterToQuery.WorkAreas.length > 0)\n tempKeywords = this.getSpecializedKeywordsByWorkArea(dsaFilterToQuery);\n // else\n //tempKeywords = this.getSpecializedKeyWordsByProfession(dsaFilterToQuery);\n\n let conceptUriDas: string[] = [];\n if (dsaFilterToQuery?.Profession?.checked)\n conceptUriDas = this.getProfessionOccupations(dsaFilterToQuery, []);\n \n let queryObject: QueryObject = {\n jobPath: {} as JobPathModel,\n location: this.handleLocation(),\n queryFilters: this.handleQueryFilters(),\n regions: this.fetchRegions(),\n timeOfRequest: requestTime,\n conceptUriDas: conceptUriDas,\n jobIdsToFilter: [],\n industries: [],\n keywords: tempKeywords\n };\n\n if (this.props.jobPaths && this.props.jobPaths.length > 0) \n {\n let jobPathsFilterChosen: JobPathModel[] = this.props.jobPaths.filter(x => x.isFilterChosen);\n if(jobPathsFilterChosen.length > 0)\n {\n this.props.fetchJobsByQueryObject(queryObject, jobPathsFilterChosen, false, conceptUriDas.length === 0, false, (success) => {\n this.props.setDisplayLoader(false);\n });\n } \n else \n {\n this.props.fetchJobsByQueryObject(queryObject, [emptyJobPathObj], true, conceptUriDas.length === 0, false, (success) => {\n this.props.setDisplayLoader(false);\n });\n } \n } \n else \n {\n this.props.fetchJobsByQueryObject(queryObject, [emptyJobPathObj], true, conceptUriDas.length === 0, false, (success) => {\n this.props.setDisplayLoader(false);\n });\n }\n }\n \n\n private handleJobPathFilterChosenOnDistance = (filterNotChosenCount: number, jobPath: JobPathModel, defaultDistanceForJobs: number, defaultDistanceForAllJobs: number) => {\n // handle distance for adding filterchosen to first jobpath from showingalljobs\n // if(jobPath.isFilterChosen === false && filterNotChosenCount === this.props.jobPaths.length)\n // {\n // this.props.UpdateDistance(defaultDistanceForJobs);\n // }\n\n // // checking if jobpath currently isfilterchosen true, because then it will result to false \n // // and if length of filternotchosencount is equal to the length of jobpath array. Then we know it is remaining jobpath jobs.\n // if(jobPath.isFilterChosen === true && filterNotChosenCount === this.props.jobPaths.length - 1)\n // {\n // this.props.UpdateDistance(defaultDistanceForAllJobs);\n // }\n }\n\n private handleDistanceToShow = (filterOption: FilterOptionTypesModel, jobPath: JobPathModel | undefined) => {\n if(this.props.jobPaths && this.props.jobPaths.length > 0)\n {\n let filterNotChosenCount: number = this.props.jobPaths.filter(x => x.isFilterChosen == false).length;\n\n if(filterOption === \"companies\")\n {\n if(jobPath !== undefined)\n {\n // this.handleJobPathFilterChosenOnDistance(filterNotChosenCount, jobPath, 500, 150);\n }\n else {\n // // used when changing between company jobs and just jobs\n // if(filterNotChosenCount === this.props.jobPaths.length - 1)\n // {\n // this.props.UpdateDistance(500);\n // }\n \n // if(filterNotChosenCount === this.props.jobPaths.length)\n // {\n // this.props.UpdateDistance(150);\n // }\n }\n }\n else\n {\n if(jobPath !== undefined)\n {\n // this.handleJobPathFilterChosenOnDistance(filterNotChosenCount, jobPath, 500, 100);\n }\n else {\n // used when changing between company jobs and just jobs\n // if(filterNotChosenCount === this.props.jobPaths.length - 1)\n // {\n // this.props.UpdateDistance(500);\n // }\n \n // if(filterNotChosenCount === this.props.jobPaths.length)\n // {\n // this.props.UpdateDistance(100);\n // }\n }\n }\n } else \n {\n // hitting this else if user hasnt had a newest plan and no jobpaths is added then it shows all jobs.\n // if(filterOption !== \"companies\")\n // this.props.UpdateDistance(100); \n // else\n // this.props.UpdateDistance(150);\n }\n }\n\n handleJobPathCheckBoxClicked = async (event: any, jobPath: JobPathModel) => {\n // this.handleDistanceToShow(this.props.filterOption, jobPath);\n\n await this.props.isFilterChosen(!jobPath.isFilterChosen, jobPath);\n\n this.handleRunQuery();\n }\n\n handleRegionCheckboxClicked = (event: any, region: RegionModel) => {\n this.props.updateRegion(region);\n this.handleRunQuery();\n }\n\n handleForeignCountriesCheckboxClicked = (event: any, foreignCountry: [string, boolean]) => {\n this.props.updateForeignCountry(foreignCountry);\n }\n\n handleWorkTimeOnChange = (event: any, newValues: number | number[]) => {\n this.props.updateWorkTimeArray(newValues as number[]);\n\n }\n\n handleWorkTimeOnChangeCommited = () => {\n this.handleUpdateQueryFilterWithWorkTime();\n }\n\n handleDistanceOnChange = async (event: any, newValue: number | number[], shouldHandleRunQuery?: boolean) => {\n if (shouldHandleRunQuery !== undefined && shouldHandleRunQuery) {\n await this.props.UpdateDistance(newValue as number);\n this.handleRunQuery();\n } else {\n this.props.UpdateDistance(newValue as number);\n }\n }\n\n handleDistanceOnComitted = () => {\n this.handleRunQuery();\n }\n\n handleSingleWorkTimeOnChange = (event: any, index: number, worktimeToDisplay?: number) => {\n let worktimes = this.props.workTime;\n if (!isEmptyOrUndefined(worktimeToDisplay)) {\n worktimes[index] = worktimeToDisplay!;\n }\n else {\n worktimes[index] = parseInt(event.target.value);\n }\n this.props.updateWorkTimeArray(worktimes);\n this.handleUpdateQueryFilterWithWorkTime();\n }\n\n handleJobTypeClicked = (e: any, jobType: JobTypeModel) => {\n let queryFilter: QueryFilter = new QueryFilter(\"jobtypeid\", jobType.id.toString());\n this.props.toggleQueryFilter(queryFilter, e.target.checked, false);\n }\n\n handleJobOpportunitiesClicked = (e: any) => {\n\n }\n\n handleUpdateQueryFilterWithWorkTime = () => {\n if (this.props.workTime && this.props.workTime.length > 1) {\n let queryFilters = [];\n if(this.props.workTime[0] !== JobReducerDefaultState.workTimeArray[0] || this.props.workTime[1] !== JobReducerDefaultState.workTimeArray[1])\n {\n let queryFilterMin: QueryFilter = new QueryFilter(\"workhoursperweekmin\", this.props.workTime[0].toString());\n let queryFilterMax: QueryFilter = new QueryFilter(\"workhoursperweekmax\", this.props.workTime[1].toString());\n queryFilters.push(queryFilterMin, queryFilterMax);\n }\n this.props.UpdateQueryFilter(queryFilters, \"hoursperweek\");\n }\n }\n\n handleFilterOption = (option: FilterOptionTypesModel) => {\n // this.handleDistanceToShow(option, undefined);\n const sourceTypeIdOne: QueryFilter | undefined = this.props.queryFilters?.find(x => x?.type === \"sourcetypeid\" && x?.value === \"1\");\n const sourceTypeIdTwo: QueryFilter | undefined = this.props.queryFilters?.find(x => x?.type === \"sourcetypeid\" && x?.value === \"2\");\n const sourceTypeIdThree: QueryFilter | undefined = this.props.queryFilters?.find(x => x?.type === \"sourcetypeid\" && x?.value === \"3\");\n const status: QueryFilter | undefined = this.props.queryFilters?.find(x => x?.type === \"status\");\n\n if (option !== \"orders\")\n {\n if (status)\n {\n status.value = option !== \"companies\" ? \"true\" : \"false\";\n this.props.updateQueryFilter(status);\n }\n else \n this.props.addQueryFilter(new QueryFilter(\"status\", option !== \"companies\" ? \"true\" : \"false\"));\n \n\n if (sourceTypeIdOne === undefined)\n this.props.addQueryFilter(new QueryFilter(\"sourcetypeid\", \"1\"));\n\n if (sourceTypeIdTwo === undefined)\n this.props.addQueryFilter(new QueryFilter(\"sourcetypeid\", \"2\"));\n\n if (sourceTypeIdThree)\n this.props.removeQueryFilter(sourceTypeIdThree);\n\n setTimeout(() => {\n this.props.SetIsDoneQueryUpdating(true);\n }, 100);\n }\n else\n { \n\n if (sourceTypeIdOne)\n this.props.removeQueryFilter(sourceTypeIdOne);\n \n if (sourceTypeIdTwo)\n this.props.removeQueryFilter(sourceTypeIdTwo);\n\n if (status)\n this.props.removeQueryFilter(status);\n\n this.props.addQueryFilter(new QueryFilter(\"sourcetypeid\", \"3\"));\n\n setTimeout(() => {\n this.props.SetIsDoneQueryUpdating(true);\n }, 100);\n }\n \n this.props.setFilterOptionType(option);\n }\n\n handleFilterEllipsisVClicked = (event: any) => {\n this.setState({\n isFilterButtonClicked: !this.state.isFilterButtonClicked,\n });\n }\n\n handleResetFilters = async (event: any) => {\n return new Promise((resolve) => {\n this.props.resetAllFiltersInFilterJobSearch();\n setTimeout(() => {\n this.setState({\n shouldCloseMoreMenu: true,\n }, () => {\n this.handleRunQuery();\n });\n }, 250);\n });\n }\n\n handleResetToCitizenFilters = (event: any) => {\n }\n\n updateSearchListItems = (options: { event: any, attribute?: string, dataEntity?: any, isChecked?: boolean }) => {\n switch (options.attribute) {\n case 'occupations':\n if (this.props.tempOccupations.length === 0) {\n this.props.addOccupationToTempList(options.dataEntity);\n break;\n } else if (isEmptyOrUndefined(this.props.tempOccupations.find(x => x.id === options.dataEntity.id))) {\n this.props.addOccupationToTempList(options.dataEntity);\n break;\n } else {\n this.props.removeOccupationFromTempList(options.dataEntity);\n break;\n }\n case 'industries': {\n let industryToAdd = this.props.industries.find(i => i.id == options.dataEntity.id);\n let index = this.props.tempIndustries.findIndex(i => i.id == options.dataEntity.id);\n\n if (!isEmptyOrUndefined(industryToAdd) && industryToAdd) {\n if (index < 0) {\n this.props.AddIndustryToTempList(industryToAdd);\n }\n else {\n this.props.RemoveIndustryFromTempList(options.dataEntity);\n }\n }\n break;\n }\n case 'municipality':\n if (this.props.tempMunicipalities.length === 0) {\n this.props.addMunicipalityToTempList(options.dataEntity);\n break;\n } else if (isEmptyOrUndefined(this.props.tempMunicipalities.find(m => m.id === options.dataEntity.id))) {\n this.props.addMunicipalityToTempList(options.dataEntity);\n break;\n } else {\n this.props.removeMunicipalityFromTempList(options.dataEntity);\n break;\n }\n\n case 'profession': {\n const name = options?.dataEntity?.name;\n let temp = {...this.props.tempDSAJobFilter};\n if (temp?.Profession?.name === name)\n {\n temp.Profession = {\n ...temp.Profession,\n id: '',\n name: '',\n checked: false\n };\n }\n else \n {\n temp.Profession = {\n ...temp.Profession,\n name: name,\n checked: true\n };\n }\n this.props.setTempDSAJobFilter({...temp});\n break;\n }\n\n case 'workarea': {\n let searchListItem: SearchListModel = options?.dataEntity;\n let temp = {...this.props.tempDSAJobFilter};\n const index: number = temp?.WorkAreas?.findIndex(x => x?.name === searchListItem?.name);\n if (index > -1)\n {\n temp.WorkAreas = [\n ...temp.WorkAreas?.slice(0, index),\n ...temp.WorkAreas?.slice(index + 1),\n ];\n }\n else \n {\n searchListItem.checked = true;\n temp.WorkAreas = [...temp.WorkAreas, searchListItem];\n }\n\n this.props.setTempDSAJobFilter({...temp});\n break;\n }\n\n case 'areaofspecilisation': {\n let searchListItem: SearchListModel = options?.dataEntity;\n let temp = {...this.props.tempDSAJobFilter};\n const index: number = temp?.AreaOfSpecialisation?.findIndex(x => x?.name === searchListItem?.name);\n if (index > -1)\n {\n temp.AreaOfSpecialisation = [\n ...temp.AreaOfSpecialisation?.slice(0, index),\n ...temp.AreaOfSpecialisation?.slice(index + 1),\n ];\n }\n else \n {\n searchListItem.checked = true;\n temp.AreaOfSpecialisation = [...temp.AreaOfSpecialisation, searchListItem];\n }\n\n this.props.setTempDSAJobFilter({...temp});\n break;\n }\n\n case 'dsa-candidate-occupations': {\n let searchListItem: SearchListModel = options?.dataEntity;\n let temp = {...this.props.tempDSAJobFilter};\n const index: number = temp?.Occupations?.findIndex(x => x?.id === searchListItem?.id);\n if (index > -1)\n {\n temp.Occupations = [\n ...temp.Occupations?.slice(0, index),\n ...temp.Occupations?.slice(index + 1),\n ];\n }\n else \n {\n searchListItem.checked = true;\n temp.Occupations = [...temp.Occupations, searchListItem];\n }\n\n this.props.setTempDSAJobFilter({...temp});\n break;\n }\n\n default:\n break;\n }\n }\n\n resetFilterInSearchList = (event: any, type: string) => {\n switch (type) {\n case 'occupations':\n this.props.removeAllOccupationsFromTempList();\n break;\n\n case 'municipality':\n this.props.removeAllMunicipalitiesFromTempList();\n break;\n\n case 'industries':\n this.props.RemoveAllIndustriesFromTemplist();\n break;\n\n case 'profession': {\n let dsaJobFilter = {...this.props.dsaJobFilter};\n\n dsaJobFilter.Profession = new SearchListModel('', '');\n dsaJobFilter.WorkAreas = [];\n dsaJobFilter.AreaOfSpecialisation = [];\n\n this.props.setDSAJobFilter(dsaJobFilter);\n this.props.setTempDSAJobFilter(dsaJobFilter);\n this.handleRunQuery(dsaJobFilter);\n break;\n }\n\n case 'workarea': {\n let dsaJobFilter = {...this.props.dsaJobFilter};\n dsaJobFilter.WorkAreas = [];\n dsaJobFilter.AreaOfSpecialisation = [];\n this.props.setDSAJobFilter(dsaJobFilter);\n this.props.setTempDSAJobFilter(dsaJobFilter);\n this.handleRunQuery(dsaJobFilter);\n break;\n }\n\n case 'areaofspecialisation': {\n let dsaJobFilter = {...this.props.dsaJobFilter};\n dsaJobFilter.AreaOfSpecialisation = [];\n this.props.setDSAJobFilter(dsaJobFilter);\n this.props.setTempDSAJobFilter(dsaJobFilter);\n\n this.handleRunQuery(dsaJobFilter);\n break;\n }\n\n case 'dsa-candidate-occupations': {\n let dsaJobFilter = {...this.props.dsaJobFilter};\n dsaJobFilter.Occupations = [];\n this.props.setDSAJobFilter(dsaJobFilter);\n this.props.setTempDSAJobFilter(dsaJobFilter);\n\n this.handleRunQuery(dsaJobFilter);\n break;\n }\n\n default:\n break;\n }\n this.setState({\n closeFilterDropdown: true,\n });\n }\n\n saveFiltersInSearchList = (event: any, occupations: SearchListModel[] | null, municipalities: MunicipalityModel[] | null, industries: IndustryModel[] | null) => {\n if (occupations !== null) {\n this.props.saveOccupationsFromTempToDisplayList(occupations.map((o) => { o.checked = true; return o; }));\n }\n\n if (municipalities !== null) {\n this.props.saveMunicipalitiesFromTempToDisplayList(municipalities.map((m) => { return { id: m.id, name: m.name, checked: true } }));\n }\n\n if (industries !== null) {\n //this.props.SaveIndustriesFromTempToDisplayList(this.props.tempIndustries.map((i) => { return { id: i.id, name: i.name, checked: true } }));\n }\n\n this.setState({\n closeFilterDropdown: true,\n });\n }\n\n handleSaveDSAFilters = (property: 'profession' | 'workarea' | 'areaofspecialisation' | 'dsa-candidate-occupations') => {\n let dsaFilter = {...this.props.dsaJobFilter};\n switch (property) {\n case \"profession\":\n if (dsaFilter?.Profession !== this.props.tempDSAJobFilter?.Profession)\n {\n dsaFilter.Profession = {...this.props.tempDSAJobFilter?.Profession};\n dsaFilter.WorkAreas = [];\n dsaFilter.AreaOfSpecialisation = [];\n }\n break;\n\n case \"workarea\":\n dsaFilter.WorkAreas = this.props.tempDSAJobFilter?.WorkAreas;\n let unwantedAOS: string[] = [];\n if(!isEmptyOrUndefined(dsaFilter?.Profession)){\n this.state.dsaData?.map((value) => {\n if(value.Profession == dsaFilter?.Profession.name)\n {\n value?.WorkAreas?.map((workarea) => {\n workarea?.AreaOfSpecialisation?.map((aos) => {\n if (value.Profession == dsaFilter?.Profession.name && dsaFilter?.WorkAreas?.find(x => x?.name === workarea?.Title))\n {\n unwantedAOS = [...unwantedAOS, aos.Title];\n }\n })\n });\n }\n });\n \n if (dsaFilter?.WorkAreas?.length === 0)\n unwantedAOS = [];\n \n if (dsaFilter?.AreaOfSpecialisation?.length > 0)\n {\n dsaFilter.AreaOfSpecialisation = dsaFilter?.AreaOfSpecialisation?.filter(function (el) {\n return unwantedAOS.includes(el?.name);\n });\n }\n }\n break;\n\n case \"areaofspecialisation\":\n dsaFilter.AreaOfSpecialisation = [...this.props.tempDSAJobFilter?.AreaOfSpecialisation];\n break;\n\n case 'dsa-candidate-occupations':\n dsaFilter.Occupations = [...this.props.tempDSAJobFilter?.Occupations];\n break;\n \n default:\n break;\n }\n this.setState({\n closeFilterDropdown: true,\n });\n\n this.props.setTempDSAJobFilter(dsaFilter);\n this.props.setDSAJobFilter(dsaFilter);\n this.handleRunQuery(dsaFilter);\n }\n\n handleOccupationsChecked = (occupation: SearchListModel) => {\n if (occupation.checked) {\n this.props.triggerCheckedOnOccupations(occupation, false);\n }\n else {\n this.props.triggerCheckedOnOccupations(occupation, true);\n }\n }\n\n handleMunicipalitiesChecked = (municipality: SearchListModel) => {\n if (municipality.checked) {\n this.props.triggerCheckedOnMunicipalities(municipality, false);\n }\n else {\n this.props.triggerCheckedOnMunicipalities(municipality, true);\n }\n }\n\n handleIndustryCheckboxOnChange = (industry: SearchListModel) => {\n //if (industry.checked)\n //this.props.ToggleIndustry(industry, false);\n // else\n // this.props.ToggleIndustry(industry, true);\n }\n\n handleDsaJobfilterCount = (): number => {\n let dsaCount = 0;\n if (this.props.dsaJobFilter?.Profession?.checked)\n dsaCount++;\n\n dsaCount += this.props.dsaJobFilter?.WorkAreas?.filter(w => w?.checked)?.length;\n dsaCount += this.props.dsaJobFilter?.AreaOfSpecialisation?.filter(a => a?.checked)?.length;\n\n return dsaCount;\n }\n\n handleCheckedDSA = (property: 'profession' | 'workarea' | 'areaofspecilisation' | 'dsa-candidate-occupations', item: SearchListModel) => {\n let dsaJobFilter = {...this.props.dsaJobFilter};\n switch (property) {\n case 'profession': {\n dsaJobFilter.Profession.checked = !dsaJobFilter?.Profession?.checked;\n\n if(dsaJobFilter.Profession.checked)\n {\n dsaJobFilter.WorkAreas = this.props.tempDSAJobFilter.WorkAreas;\n dsaJobFilter.AreaOfSpecialisation = this.props.tempDSAJobFilter.AreaOfSpecialisation;\n }\n else{\n dsaJobFilter.WorkAreas = [];\n dsaJobFilter.AreaOfSpecialisation = [];\n }\n break;\n }\n\n case 'workarea': {\n const index: number = dsaJobFilter?.WorkAreas?.findIndex(x => x?.name === item?.name);\n if (index > -1)\n {\n let arrItem = dsaJobFilter.WorkAreas[index];\n arrItem.checked = !arrItem?.checked;\n dsaJobFilter.WorkAreas = [\n ...dsaJobFilter.WorkAreas?.slice(0, index),\n arrItem,\n ...dsaJobFilter.WorkAreas?.slice(index + 1)\n ];\n }\n \n if (dsaJobFilter?.Profession?.name?.toLowerCase() === 'akademiker' && dsaJobFilter?.Occupations?.length > 0)\n {\n const filteredWorkAreas = dsaJobFilter.WorkAreas?.filter(w => w?.checked);\n if (filteredWorkAreas?.length > 0)\n {\n const academicProfession = this.state.dsaData?.find(x => x?.Profession?.toLowerCase() === 'akademiker');\n if (academicProfession)\n {\n let tempList: SearchListModel[] = [];\n dsaJobFilter.Occupations.map((occu) => {\n academicProfession?.WorkAreas?.map((workArea) => {\n if (filteredWorkAreas?.find(p => p?.name === workArea?.Title) && workArea?.PredefinedOccupations?.find(x => x?.ConceptUriDa === occu?.id))\n tempList.push(occu);\n });\n });\n dsaJobFilter.Occupations = tempList;\n }\n }\n else \n dsaJobFilter.Occupations = [];\n\n this.props.setTempDSAJobFilter({...this.props.tempDSAJobFilter, Occupations: dsaJobFilter.Occupations});\n }\n break;\n }\n\n case 'areaofspecilisation': {\n const index: number = dsaJobFilter?.AreaOfSpecialisation?.findIndex(x => x?.name === item?.name);\n if (index > -1)\n {\n let arrItem = dsaJobFilter.AreaOfSpecialisation[index];\n arrItem.checked = !arrItem?.checked;\n dsaJobFilter.AreaOfSpecialisation = [\n ...dsaJobFilter.AreaOfSpecialisation?.slice(0, index),\n arrItem,\n ...dsaJobFilter.AreaOfSpecialisation?.slice(index + 1)\n ];\n }\n\n break;\n }\n\n case \"dsa-candidate-occupations\":\n const index: number = dsaJobFilter?.Occupations?.findIndex(x => x?.id === item?.id);\n if (index > -1)\n {\n let arrItem = dsaJobFilter.Occupations[index];\n arrItem.checked = !arrItem?.checked;\n dsaJobFilter.Occupations = [\n ...dsaJobFilter.Occupations?.slice(0, index),\n arrItem,\n ...dsaJobFilter.Occupations?.slice(index + 1)\n ];\n }\n break;\n \n default:\n break;\n }\n\n this.props.setDSAJobFilter(dsaJobFilter);\n this.handleRunQuery(dsaJobFilter);\n }\n\n\n \n getSpecializedKeywordsByWorkArea = (dsaFilterToQuery: DSAJobFilterModel) => {\n let specializationKeywords:string[] = [];\n\n dsaFilterToQuery?.WorkAreas?.map((workArea) => (\n this.state.dsaData?.map((x) => {\n {\n if(x.Profession == dsaFilterToQuery?.Profession.name)\n {\n x.WorkAreas?.map((p) => {\n {\n p?.AreaOfSpecialisation?.map((a) => {\n if(workArea?.checked && workArea.name === p?.Title)\n {\n a.SpecializationKeywords.map((sk) => {\n if(!specializationKeywords.includes(sk)){\n specializationKeywords = [...specializationKeywords, sk];\n }\n })\n }\n });\n }\n });\n }\n \n }\n })\n ));\n\n return specializationKeywords;\n }\n\n\n getSpecializedKeyWordsByProfession = (dsaFilterToQuery: DSAJobFilterModel) => {\n let specializationKeywords:Set = new Set();\n if (dsaFilterToQuery?.Profession?.checked)\n {\n let profession = this.state.dsaData.find(x => x?.Profession == dsaFilterToQuery?.Profession?.name);\n \n if(profession?.WorkAreas){\n for(let i = 0; i < profession?.WorkAreas.length-1; i++)\n {\n let areaOfSpecialisation = profession?.WorkAreas[i];\n if(!isEmptyOrUndefined(areaOfSpecialisation))\n {\n for(let j = 0; j < areaOfSpecialisation?.AreaOfSpecialisation?.length; j++)\n {\n for(let k = 0; k < areaOfSpecialisation.AreaOfSpecialisation[j].SpecializationKeywords?.length; k++)\n {\n let specializationkeyword = areaOfSpecialisation.AreaOfSpecialisation[j].SpecializationKeywords[k];\n \n if(!specializationKeywords.has(specializationkeyword))\n specializationKeywords.add(specializationkeyword)\n }\n } \n }\n }\n }\n }\n return Array.from(specializationKeywords);\n }\n\n handleItemArrayToDisplay = (type: string): SearchListModel[] => {\n let list: SearchListModel[] = [];\n switch (type) {\n case 'industries':\n if (this.props.industries)\n list = this.props.industries.map(i => { return { id: i.id, name: i.name, checked: !isEmptyOrUndefined(this.props.tempIndustries.find(x => x.id === i.id)) ? true : false } });\n break;\n case 'occupations':\n if (this.props.occupations)\n list = this.props.occupations?.sort((a, b) => a?.name.localeCompare(b?.name)).map(o => { return { id: o.conceptUriDa, name: o.name, checked: !isEmptyOrUndefined(this.props.tempOccupations.find(x => x.id === o.conceptUriDa)) ? true : false } });\n break;\n case 'municipality':\n if (this.props.municipality)\n list = this.props.municipality.map(m => { return { id: m.id, name: m.name, checked: !isEmptyOrUndefined(this.props.tempMunicipalities.find(x => x.id === m.id)) ? true : false } });\n break;\n case 'profession':\n list = this.state.dsaData?.map((x) => new SearchListModel(x?.Profession, x?.Profession, this.props.tempDSAJobFilter?.Profession?.name === x?.Profession));\n break;\n\n case 'workareas':\n list = this.handleGetWorkAreas(this.state.dsaData);\n break;\n\n case 'areaOfSpecialisation':\n list = this.handleGetAreaOfSpecialisation(this.state.dsaData);\n break;\n\n case 'dsa-candidate-occupations': \n list = this.handleGetCandidateOccupations(this.state.dsaData);\n break;\n\n default:\n break;\n\n }\n\n return list;\n }\n\n handleGetCandidateOccupations = (dsaData: DSAProfessionModel[]): SearchListModel[] => {\n let tempArr: SearchListModel[] = [];\n dsaData?.map((x) => {\n if (x?.Profession?.toLowerCase() === 'akademiker')\n {\n x.WorkAreas?.map((p) => {\n if (this.props.dsaJobFilter?.WorkAreas?.find(w => w?.name === p.Title && w?.checked))\n {\n p?.PredefinedOccupations?.map((a, index) => {\n tempArr.push(new SearchListModel(a.ConceptUriDa, a.Title, this.props.tempDSAJobFilter?.Occupations?.find(item => item?.id === a?.ConceptUriDa) !== undefined));\n });\n }\n });\n }\n });\n return tempArr;\n }\n\n handleExpandButtonClicked = (filterId: number) => {\n if (this.props.filterIdList.length === 0) {\n this.props.addJobFilterIdElement(filterId);\n } else if (!this.props.filterIdList.includes(filterId)) {\n this.props.addJobFilterIdElement(filterId);\n } else {\n this.props.removeJobFilterIdElement(filterId);\n }\n }\n\n handleEmploymentDurationOnChange = (employment: {title: string, checked: boolean}) => {\n let tempEmploy: {title: string, checked: boolean} = {title: '', checked: false};\n if(employment.checked)\n {\n tempEmploy = {title: employment.title, checked: false};\n }\n else\n {\n tempEmploy = {title: employment.title, checked: true};\n }\n\n this.props.updateEmploymentDuration(tempEmploy);\n }\n\n handleDisplayJobPathNameWithJobsCount = (name: string, count: number): JSX.Element => {\n return (\n
    \n

    {name}

    \n ({count})\n
    \n )\n }\n \n // handleJobNetTypeOnChange = () => {\n // if(this.props.jobNetJobType)\n // {\n // this.props.removeQueryFilter(new QueryFilter(\"sourcetypeid\", SourceType.JOBNET.toString()));\n // this.props.setJobNetJobType(false);\n // }\n // else \n // {\n // this.props.addQueryFilter(new QueryFilter(\"sourcetypeid\", SourceType.JOBNET.toString()));\n // this.props.setJobNetJobType(true);\n // }\n\n \n // this.props.UpdateQueryFilter([new QueryFilter(\"sourcetypeid\", \"0\")], \"sourcetypeid\");\n // }\n\n // handleJobOrderTypeOnChange = () => {\n // if(this.props.jobOrderJobType)\n // {\n // this.props.removeQueryFilter(new QueryFilter(\"sourcetypeid\", SourceType.JOBORDER.toString()));\n // this.props.setJobOrderJobType(false);\n // }\n // else\n // {\n // this.props.addQueryFilter(new QueryFilter(\"sourcetypeid\", SourceType.JOBORDER.toString()));\n // this.props.setJobOrderJobType(true);\n // }\n\n // this.props.UpdateQueryFilter([new QueryFilter(\"sourcetypeid\", \"1\")], \"sourcetypeid\");\n // }\n\n handleGetWorkAreas = (dsaData: DSAProfessionModel[]) => {\n let tempArr: SearchListModel[] = [];\n if (this.props.dsaJobFilter?.Profession?.checked)\n {\n dsaData?.map((x) => {\n if (x?.Profession === this.props.tempDSAJobFilter?.Profession?.name)\n {\n x.WorkAreas?.map((p) => {\n tempArr.push(new SearchListModel(p?.Title, p?.Title, this.props.tempDSAJobFilter?.WorkAreas?.find(item => item?.name === p?.Title) !== undefined))\n });\n }\n });\n }\n return tempArr;\n }\n \n handleGetAreaOfSpecialisation = (dsaData: DSAProfessionModel[]) => {\n let tempArr: SearchListModel[] = [];\n dsaData?.map((x) => {\n if (x?.Profession === this.props.dsaJobFilter?.Profession?.name)\n {\n x.WorkAreas?.map((p) => {\n if (this.props.dsaJobFilter?.WorkAreas?.find(w => w?.name === p.Title))\n {\n p?.AreaOfSpecialisation?.map((a, index) => {\n tempArr.push(new SearchListModel(a.Title, a.Title, this.props.tempDSAJobFilter?.AreaOfSpecialisation?.find(item => item?.name === a?.Title) !== undefined));\n });\n }\n });\n }\n });\n return tempArr;\n }\n\n displayAccordionDSA = (): JSX.Element => {\n return (\n \n \n this.handleExpandButtonClicked(FilterJob.DSA)}>\n
    \n \n x === FilterJob.DSA)} />\n
    \n
    \n \n \n \n
    \n this.updateSearchListItems({ event: options, dataEntity: options.dataEntity, attribute: 'profession', isChecked: options.isChecked })}\n resetFiltersClicked={(e) => this.resetFilterInSearchList(e, 'profession')}\n saveFiltersClicked={() => this.handleSaveDSAFilters('profession')}\n list={this.props.dsaJobFilter?.Profession?.name?.length > 0 ? [this.props.dsaJobFilter?.Profession] : []}\n closeFilterDropdown={this.state.closeFilterDropdown}\n handleCheckBoxOnChange={(item) => this.handleCheckedDSA(\"profession\", item)}\n callerType={'profession'}\n inlineZIndexAndPos={{ zIndex: 19, position: 'relative' }}\n />\n
    \n
    \n
    \n this.updateSearchListItems({ event: options, dataEntity: options.dataEntity, attribute: 'workarea', isChecked: options.isChecked })}\n resetFiltersClicked={(e) => this.resetFilterInSearchList(e, 'workarea')}\n saveFiltersClicked={() => this.handleSaveDSAFilters('workarea')}\n list={this.props.dsaJobFilter?.WorkAreas}\n closeFilterDropdown={this.state.closeFilterDropdown}\n handleCheckBoxOnChange={(item) => this.handleCheckedDSA(\"workarea\", item)}\n callerType={'workareas'}\n inlineZIndexAndPos={{ zIndex: 18, position: 'relative' }}\n />\n
    \n
    \n {this.props.dsaJobFilter?.Profession?.name?.toLowerCase() === 'akademiker'\n ?\n
    \n this.updateSearchListItems({ event: options, dataEntity: options.dataEntity, attribute: 'dsa-candidate-occupations', isChecked: options.isChecked })}\n resetFiltersClicked={(e) => this.resetFilterInSearchList(e, 'dsa-candidate-occupations')}\n saveFiltersClicked={() => this.handleSaveDSAFilters('dsa-candidate-occupations')}\n list={this.props.dsaJobFilter?.Occupations}\n closeFilterDropdown={this.state.closeFilterDropdown}\n handleCheckBoxOnChange={(item) => this.handleCheckedDSA(\"dsa-candidate-occupations\", item)}\n callerType={'dsa-candidate-occupations'}\n inlineZIndexAndPos={{ zIndex: 17, position: 'relative' }}\n />\n
    \n : \n
    \n this.updateSearchListItems({ event: options, dataEntity: options.dataEntity, attribute: 'areaofspecilisation', isChecked: options.isChecked })}\n resetFiltersClicked={(e) => this.resetFilterInSearchList(e, 'areaofspecialisation')}\n saveFiltersClicked={() => this.handleSaveDSAFilters('areaofspecialisation')}\n list={this.props.dsaJobFilter?.AreaOfSpecialisation}\n closeFilterDropdown={this.state.closeFilterDropdown}\n handleCheckBoxOnChange={(item) => this.handleCheckedDSA(\"areaofspecilisation\", item)}\n callerType={'areaOfSpecialisation'}\n inlineZIndexAndPos={{ zIndex: 17, position: 'relative' }}\n />\n
    }\n
    \n
    \n {this.props.filterIdList?.find(x => x === FilterJob.DSA) ?
    : null}\n
    \n
    \n
    \n )\n }\n\n renderTooltip = (isNotAuth: boolean, isMobile: boolean, tooltip: string): JSX.Element => {\n return (\n isNotAuth && !isMobile\n ?\n \n

    {tooltip}

    \n
    \n :
    \n );\n }\n\n handleToggleDsaOccupations = () => {\n this.props.setToggleDsaOccupations(!this.props.toggleDsaOccupations);\n this.handleRunQuery();\n }\n\n handleToggleAcademicJobs = () => {\n this.props.setToggleDsaAcademicJobs(!this.props.toggleDsaAcademicJobs);\n this.handleRunQuery();\n }\n\n handleGeographicFilterCount = (): number => {\n let count = 0;\n count += this.props.regions?.filter(r => r?.checked)?.length;\n count += this.props.municipalitiesToDisplay?.filter(m => m?.checked)?.length;\n\n return count;\n }\n\n render() {\n if (this.props.isDoneQueryUpdating) {\n this.handleRunQuery();\n this.props.SetIsDoneQueryUpdating(false);\n }\n\n let MenuForFilterButton: { menuItemText: string, menuItemHandler: (e: React.MouseEvent) => void }[] = [\n { menuItemText: \"Nulstil alle markeringer\", menuItemHandler: (e: any) => this.handleResetFilters(e) },\n // { menuItemText: \"Gendan til borgerens filtre\", menuItemHandler: (e: any) => this.handleResetToCitizenFilters(e) }\n ];\n\n const isNotAuth = this.context?.accounts?.length == 0;\n const isMobile = this.props.windowInnerWidth <= 550;\n const disableFilterBtn: boolean = this.props.personMembership !== UnemploymentFundMembershipType.UnemployedMember && this.props.personMembership !== UnemploymentFundMembershipType.EmployedMember;\n\n return (\n \n
    \n
    \n

    Filtre

    \n
    \n \n
    \n
    \n
    \n \n \n \n \n \n \n \n \n \n
    \n
    \n
    \n this.handleToggleDsaOccupations()} input=\"Vis kun sundhedsfaglige job\" />\n this.handleToggleAcademicJobs()} input=\"Vis kun akademiker job\" />\n
    \n
    \n \n {this.props.page != AgreementCategoryTitles.JOBINSPIRATION ?\n <>\n \n {this.displayAccordionDSA()}\n \n \n \n \n this.handleExpandButtonClicked(FilterJob.JOBPATH)}>\n
    \n \n \n x === FilterJob.JOBPATH)} />\n
    \n
    \n \n \n {this.props.jobPaths?.length > 0\n ?\n
    \n {this.props.jobPaths && this.props.jobPaths.map((jobpath) => (\n isMobile ?\n this.handleJobPathCheckBoxClicked(e, jobpath)} text={jobpath?.filteredJobs?.length > 0 ? this.handleDisplayJobPathNameWithJobsCount(jobpath?.name ?? '', jobpath.filteredJobs.length) : jobpath?.name} />\n : this.handleJobPathCheckBoxClicked(e, jobpath)} input={jobpath?.filteredJobs?.length > 0 ? this.handleDisplayJobPathNameWithJobsCount(jobpath?.name ?? '', jobpath.filteredJobs.length) : jobpath?.name} />\n ))}\n
    \n :\n
    \n

    Der er ikke oprettet et søgefilter.

    \n
    \n }\n
    \n
    \n
    \n
    \n
    \n \n : null}\n\n {/* {this.props.currentlyShowingJobs ? \n \n \n this.handleExpandButtonClicked(FilterJob.TERMSOFEMPLOYMENT)}>\n
    \n \n x === FilterJob.TERMSOFEMPLOYMENT)} />\n
    \n
    \n \n \n
    \n {this.props.jobTypes && this.props.jobTypes.map((jobtype) => (\n this.handleJobTypeClicked(e, jobtype)} input={jobTypeNames[jobtype.name]} />\n ))}\n
    \n
    \n
    \n
    \n
    \n : null} */}\n \n \n \n this.handleExpandButtonClicked(FilterJob.GEOGRAPHY)}>\n
    \n \n x === FilterJob.GEOGRAPHY)} />\n
    \n
    \n \n \n \n
    \n \n {this.props.regions.map((region) => (\n isMobile ?\n this.handleRegionCheckboxClicked(e, region)} text={region.regionName} />\n : this.handleRegionCheckboxClicked(e, region)} input={region.regionName} />\n ))}\n
    \n \n this.updateSearchListItems({ event: options, dataEntity: options.dataEntity, attribute: 'municipality', isChecked: options.isChecked })}\n resetFiltersClicked={(e) => this.resetFilterInSearchList(e, 'municipality')}\n saveFiltersClicked={(e) => this.saveFiltersInSearchList(e, null, this.props.tempMunicipalities, null)}\n list={this.props.municipalitiesToDisplay}\n closeFilterDropdown={this.state.closeFilterDropdown}\n handleCheckBoxOnChange={this.handleMunicipalitiesChecked}\n callerType={'municipality'}\n inlineZIndexAndPos={{ zIndex: 17, position: 'relative' }}\n />\n
    \n
    \n
    \n {this.props.filterIdList.find(x => x === FilterJob.GEOGRAPHY) ?
    : null}\n
    \n
    \n
    \n\n {this.props.page != AgreementCategoryTitles.JOBINSPIRATION ? \n \n \n this.handleExpandButtonClicked(FilterJob.DISTANCE)}>\n
    \n \n x === FilterJob.DISTANCE)} />\n
    \n
    \n \n \n
    \n
    \n
    \n \n \n \n \n \n \n
    \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n
    \n : null}\n \n\n {this.props.filterOption !== \"companies\" ? \n \n \n this.handleExpandButtonClicked(FilterJob.WORKTIME)}>\n
    \n \n x === FilterJob.WORKTIME)} />\n
    \n
    \n \n \n
    \n \n
    \n
    \n \n this.handleSingleWorkTimeOnChange(e, 0)} />\n \n \n \n \n
    \n \n
    \n \n this.handleSingleWorkTimeOnChange(e, 1)} />\n \n \n \n \n
    \n
    \n
    \n \n
    \n {/* \n
    \n \n */}\n
    \n
    \n
    \n
    \n
    \n : null }\n \n {/* {this.props.currentlyShowingJobs ? \n \n \n this.handleExpandButtonClicked(FilterJob.EMPLOYMENTDURATION)}>\n
    \n \n x === FilterJob.EMPLOYMENTDURATION)} />\n
    \n
    \n \n \n
    \n {this.props.employmentDuration && this.props.employmentDuration.map((employment) => (\n this.handleEmploymentDurationOnChange(employment)} />\n ))}\n
    \n
    \n
    \n
    \n
    \n : null} */}\n\n \n {this.displayAccordionDSA()}\n \n \n\n \n \n this.handleExpandButtonClicked(FilterJob.OCCUPATION)}>\n
    \n \n x === FilterJob.OCCUPATION)} />\n
    \n
    \n \n \n \n
    \n this.updateSearchListItems({ event: options, dataEntity: options.dataEntity, attribute: 'occupations', isChecked: options.isChecked })}\n resetFiltersClicked={(e) => this.resetFilterInSearchList(e, 'occupations')}\n saveFiltersClicked={(e) => this.saveFiltersInSearchList(e, this.props.tempOccupations, null, null)}\n list={this.props.occupationsToDisplay}\n closeFilterDropdown={this.state.closeFilterDropdown}\n handleCheckBoxOnChange={this.handleOccupationsChecked}\n callerType={'occupations'}\n inlineZIndexAndPos={{ zIndex: 16, position: 'relative' }}\n />\n
    \n
    \n
    \n {this.props.filterIdList.find(x => x === FilterJob.OCCUPATION) ?
    : null}\n
    \n
    \n
    \n \n {/* \n \n this.handleExpandButtonClicked(FilterJob.INDUSTRY)}>\n
    \n \n x === FilterJob.INDUSTRY)} />\n
    \n
    \n \n \n \n
    \n this.updateSearchListItems({ event: options, dataEntity: options.dataEntity, attribute: 'industries', isChecked: options.isChecked })}\n resetFiltersClicked={(e) => this.resetFilterInSearchList(e, 'industries')}\n saveFiltersClicked={(e) => this.saveFiltersInSearchList(e, null, null, null)}\n list={this.props.industryDisplayList}\n closeFilterDropdown={this.state.closeFilterDropdown}\n handleCheckBoxOnChange={this.handleIndustryCheckboxOnChange}\n callerType={\"industries\"}\n inlineZIndexAndPos={{ zIndex: 15, position: 'relative' }}\n />\n
    \n
    \n
    \n {this.props.filterIdList.find(x => x === FilterJob.INDUSTRY) ?
    : null}\n
    \n
    \n
    */}\n\n {/* \n \n this.handleExpandButtonClicked(FilterJob.JOBTYPES)}>\n
    \n \n x === FilterJob.JOBTYPES)} />\n
    \n
    \n \n \n \n
    \n this.handleJobNetTypeOnChange()} />\n this.handleJobOrderTypeOnChange()} />\n
    \n
    \n
    \n
    \n
    \n
    */}\n
    \n
    \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterJobSearch);","import * as React from 'react';\nimport { Dropdown } from \"react-bootstrap\";\nimport \"./SearchFilterDropdown.scss\";\nimport SearchList from '../../SearchList';\nimport CheckMarkButtonWithText from '../../Buttons/CheckMarkButtonWithText';\nimport { SearchListModel } from '../../../models/SearchListModel';\nimport { HashTable } from '../../../models/HashTable';\n\ninterface Props {\n itemArray: any[];\n selectedElementHandler: (options: { event: any, dataEntity?: any, attribute?: string, isChecked?: boolean }) => any;\n resetFiltersClicked: (e: React.MouseEvent) => void;\n saveFiltersClicked: (e: React.MouseEvent) => void;\n list: SearchListModel[];\n closeFilterDropdown?: boolean;\n handleCheckBoxOnChange: (item: SearchListModel) => void;\n callerType: string;\n inlineZIndexAndPos?: {};\n}\n\ninterface State {\n isClicked: boolean;\n types: HashTable;\n}\n\nclass SearchFilterDropdown extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = {\n isClicked: false,\n types: {\n \"industries\": [\"Vælg brancher\", \"Valgte brancher\"],\n \"occupations\": [\"Vælg stillinger\", \"Valgte stillinger\"],\n \"municipality\": [\"Vælg kommuner\", \"Valgte kommuner\"],\n \"profession\": [\"Vælg faggruppe\", \"Valgt faggruppe\"],\n \"workareas\": [\"Vælg arbejdsområde\", \"Valgte arbejdsområder\"],\n \"areaOfSpecialisation\": [\"Vælg specialer\", \"Valgte specialer\"],\n \"dsa-candidate-occupations\": [\"Vælg stillinger\", \"Valgte stillinger\"],\n }\n }\n\n }\n\n handleDropDownClicked = (event: any) => {\n this.setState({\n isClicked: !this.state.isClicked,\n });\n }\n\n handleCheckboxOnChange = (event: any, occupation: SearchListModel) => {\n this.props.handleCheckBoxOnChange(occupation);\n }\n\n handlePlaceHolderTextToDisplay = (): string => {\n let placeHolder: string = '';\n switch (this.props.callerType) {\n case 'industries':\n placeHolder = 'brancher';\n break;\n\n case 'occupations':\n placeHolder = 'stillinger';\n break;\n\n case 'municipality':\n placeHolder = 'kommuner';\n break;\n\n case 'profession':\n placeHolder = 'faggruppe';\n break;\n\n case 'workareas':\n placeHolder = 'arbejdsområde';\n break;\n\n case 'areaOfSpecialisation':\n placeHolder = 'specialer';\n break;\n\n case 'dsa-candidate-occupations':\n placeHolder = 'stillinger';\n break;\n\n default:\n break;\n }\n\n return placeHolder;\n }\n\n componentDidUpdate(prevProps: Props) {\n if (this.props.closeFilterDropdown && this.state.isClicked) {\n this.setState({\n isClicked: false,\n });\n }\n }\n\n render() {\n return (\n
    \n \n \n \n \n {this.state.isClicked ? (\n \n this.props.selectedElementHandler(options)} displayWithoutCheckboxes={false}\n resetFiltersClicked={this.props.resetFiltersClicked} saveFiltersClicked={this.props.saveFiltersClicked} placeHolder={'Søg efter ' + this.handlePlaceHolderTextToDisplay()} />\n \n ) : (\n \n {this.props.list.length > 0 ? (\n
    \n \n
      \n {this.props.list.map((item) => (\n
    • this.handleCheckboxOnChange(e, item)} />
    • \n ))}\n
    \n
    \n ) : null}\n
    \n )}\n
    \n
    \n );\n }\n}\n\nexport default SearchFilterDropdown;","import * as React from 'react';\nimport { IconButton, MenuItem, Menu } from '@material-ui/core';\nimport MoreVertIcon from '@material-ui/icons/MoreVert';\nimport './MoreMenu.scss';\nimport { isEmptyOrUndefined } from '../../../helpers/TypeChecks';\n\n\ninterface Props {\n stylePopUp: {};\n menuItems: { menuItemText: string, menuItemHandler: (e: React.MouseEvent) => void }[];\n shouldCloseMenu?: boolean;\n}\n\ninterface State {\n value: any;\n open: boolean;\n}\n\nclass MoreMenu extends React.Component {\n constructor(props: Props) {\n\n super(props);\n this.state = {\n value: '',\n open: false,\n };\n }\n\n handleMenuClicked = (event: any, menuItemFunction?: (e: React.MouseEvent) => void) => {\n this.setState({\n value: event.currentTarget,\n open: !this.state.open\n });\n if (!isEmptyOrUndefined(menuItemFunction)) {\n menuItemFunction!(event);\n }\n }\n\n componentDidUpdate() {\n // used to close menu if swal or modal is showing.\n if (this.props.shouldCloseMenu !== undefined && this.state.open && this.props.shouldCloseMenu === true) {\n this.setState({\n open: false,\n });\n }\n }\n\n render() {\n return (\n
    \n this.handleMenuClicked(e)}\n >\n \n \n this.handleMenuClicked(e)}\n PaperProps={{ style: this.props.stylePopUp }}\n className=\"bold-text-on-hover-menuitem\"\n >\n {this.props.menuItems.map((menuItem) => (\n \n {menuItem.menuItemText}\n \n ))}\n \n
    \n );\n }\n}\n\nexport default MoreMenu;","import * as React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faCheck } from '@fortawesome/free-solid-svg-icons';\nimport \"./CheckboxMobile.scss\";\n\ninterface Props {\n text: any;\n buttonClicked?: (e: React.MouseEvent) => void;\n buttonChanged?: (e: React.MouseEvent) => void;\n checked: boolean;\n disabled?: boolean;\n jobPathLogo?: any;\n showImage?: boolean;\n}\n\ninterface State {\n}\n\nclass CheckboxMobile extends React.Component {\n constructor(props: Props) {\n super(props);\n }\n\n handleButtonClicked = (e: React.MouseEvent) => {\n let event: any = {target: {value: e.currentTarget.nodeValue}};\n if(this.props.disabled == undefined || this.props.disabled == false)\n {\n if(this.props.buttonChanged != undefined)\n {\n this.props.buttonChanged(event);\n \n } else if (this.props.buttonClicked != undefined)\n {\n this.props.buttonClicked(event);\n }\n }\n }\n\n render() {\n\n return (\n
    \n \n
    \n );\n }\n}\n\nexport default CheckboxMobile;","import * as React from 'react';\nimport './MapView.scss';\nimport M from 'mapbox-gl';\nimport { FeatureCollection, Feature } from 'geojson';\nimport { JobModel } from '../../models/JobModel';\nimport { convertJobToGeoJson, convertCompanyToGeoJson, convertAddressToGeoJson, convertJobPathToGeoJson } from './helpers';\nimport { AddressModel } from '../../models/AddressModel';\nimport CompanyModel from '../../models/CompanyModel';\nimport { imagesObject, notChosenToJobpathImageObject, remainingJobPathImageObject, jobPathImagesObject, IsLoggedIn } from '../../helpers/ImageHelper';\nimport { isEmptyOrUndefined } from '../../helpers/TypeChecks';\nimport { MsalContext } from \"@azure/msal-react\";\nimport GeoPoint from '../../models/GeoPoint';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport { bindActionCreators } from 'redux';\nimport { setPersonGeoData } from '../../store/Person/actions';\nimport { connect } from 'react-redux';\n\ninterface OwnProps {\n jobs: JobModel[];\n companies?: CompanyModel[];\n personAddress: AddressModel;\n travelTimeLimit?: number;\n clickedMarker?: (f: Feature) => void;\n sourceType: 'jobs' | 'companies';\n setHoverId?: (id: string) => void;\n shouldResize?: boolean;\n jobsInJobPath?: JobModel[];\n shouldFitBounds?: boolean;\n isCurrentlyShowingJobs?: boolean;\n pinnedAddedOrRemovedJob?: boolean;\n setPinnedAddedOrRemovedJob?: (pinnedAddedOrRemovedJob: boolean) => void; \n}\n\ninterface State {\n popupElement: any;\n jobPopUpDescription: any;\n}\n\nM.accessToken = 'pk.eyJ1IjoibWFyc2VsaXNib3JnaXQiLCJhIjoiY2wwam8xdWU0MGVpZDNjbWdjcWc2NHJuZSJ9.9ee16D-Ww17afZBH4ekRYQ';\n\ninterface LinkDispatchProps {\n setPersonGeoData: (geoData: GeoPoint) => void;\n}\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch): LinkDispatchProps => ({\n setPersonGeoData: bindActionCreators(setPersonGeoData, dispatch),\n});\n\ntype Props = OwnProps & LinkDispatchProps;\n\nclass MapView extends React.Component {\n static contextType = MsalContext;\n\n mapRef: any = React.createRef();\n CURRENT_POSITION_LAYER_ID = \"currentPosition\";\n JOB_SOURCE_ID = \"jobs\";\n COMPANY_SOURCE_ID = \"companies\";\n PERSON_SOURCE_ID = \"personData\";\n JOBS_IN_JOBPATH_SOURCE_ID = \"jobsInJobpaths\";\n NON_CLUSTERED_LAYER_ID = \"NON_CLUSTERED_LAYER_ID\";\n MAX_AUTO_ZOOM_LEVEL = 11;\n CLUSTER_RADIUS = 12.5;\n OPACITY = 0.4;\n mapStyleLoaded = false;\n mapBounds: M.LngLatBounds = new M.LngLatBounds();\n\n map: any;\n\n async componentDidMount() {\n this.map = await this.initMap();\n if (this.props.shouldResize !== undefined && this.props.shouldResize) {\n this.map.resize();\n }\n this.mapEvents(this.map);\n this.loadImages(this.map, this.CLUSTER_RADIUS * 2, jobPathImagesObject);\n this.loadImages(this.map, this.CLUSTER_RADIUS * 2, imagesObject);\n this.loadImage(this.map, this.CLUSTER_RADIUS * 2, remainingJobPathImageObject(IsLoggedIn(this.context)));\n this.loadImage(this.map, this.CLUSTER_RADIUS * 2, notChosenToJobpathImageObject);\n this.map.once('load', () => {\n // disable map rotation using right click + drag\n this.map.dragRotate.disable();\n this.map.touchZoomRotate.disableRotation();\n this.loadMapLayers();\n this.mapStyleLoaded = true;\n });\n }\n\n loadMapLayers = () => {\n //Add layers\n if (this.props.personAddress && Object.keys(this.props.personAddress).length > 0) {\n this.personAddressDataUpdatedHandler(this.props.personAddress);\n this.addPersonLayers(this.map, this.PERSON_SOURCE_ID);\n }\n\n if (this.props.jobs && this.props.jobs.length > 0) {\n this.jobDataUpdatedHandler();\n this.addJobLayers(this.map, this.JOB_SOURCE_ID);\n }\n\n if (this.props.jobsInJobPath && this.props.jobsInJobPath.length > 0) {\n this.jobsInJobpathDataUpdatedHandler();\n this.addJobsInJobpathLayers(this.map, this.JOBS_IN_JOBPATH_SOURCE_ID);\n }\n\n if (this.props.companies && this.props.companies.length > 0) {\n this.companyDataUpdatedHandler();\n this.addCompanyLayers(this.map, this.COMPANY_SOURCE_ID);\n }\n }\n\n loadImages(map: M.Map, size: number, symbols?: any) {\n symbols?.map((symbol: any) => {\n if (!map.hasImage(symbol.id.toString())) {\n const img = new Image(size, size);\n img.onload = () => map.addImage(symbol.id.toString(), img);\n img.src = symbol.image;\n }\n });\n }\n\n loadImage(map: M.Map, size: number, symbol: any) {\n if (!map.hasImage(symbol.id.toString())) {\n const img = new Image(size, size);\n img.onload = () => map.addImage(symbol.id.toString(), img);\n img.src = symbol.image;\n }\n }\n\n componentDidUpdate(prevProps: Props) {\n if (!isEmptyOrUndefined(this.map) && this.mapStyleLoaded) {\n if (prevProps.jobsInJobPath !== this.props.jobsInJobPath) {\n this.jobsInJobpathDataUpdatedHandler();\n this.addJobsInJobpathLayers(this.map, this.JOBS_IN_JOBPATH_SOURCE_ID);\n }\n\n if (prevProps.jobs !== this.props.jobs) {\n this.jobDataUpdatedHandler();\n this.addJobLayers(this.map, this.JOB_SOURCE_ID);\n }\n \n if (prevProps.companies !== this.props.companies) {\n this.companyDataUpdatedHandler();\n this.addCompanyLayers(this.map, this.COMPANY_SOURCE_ID);\n }\n\n if (prevProps.personAddress !== this.props.personAddress) {\n this.personAddressDataUpdatedHandler(this.props.personAddress);\n this.addPersonLayers(this.map, this.PERSON_SOURCE_ID);\n }\n }\n }\n\n\n async initMap() {\n return new M.Map({\n container: this.mapRef,\n style: 'mapbox://styles/mapbox/streets-v11',\n center: [11, 56.2639],\n zoom: 6,\n maxZoom: 15\n });\n }\n\n mapEvents(map: M.Map) {\n map.on('click', 'job-clusters', (e) => {\n const features: any = map.queryRenderedFeatures(e.point, {\n layers: ['job-clusters']\n });\n\n const clusterId = features[0]?.properties?.cluster_id;\n if (map.getZoom() < this.MAX_AUTO_ZOOM_LEVEL) {\n (map.getSource(this.JOB_SOURCE_ID) as M.GeoJSONSource).getClusterExpansionZoom(\n clusterId,\n (err: any, zoom: number) => {\n if (err) return;\n map.easeTo({\n center: features[0].geometry.coordinates,\n zoom: zoom + 1\n });\n }\n );\n } else {\n const pointCount = features[0].properties.point_count;\n const clusterSource: any = map.getSource(this.JOB_SOURCE_ID);\n clusterSource.getClusterLeaves(clusterId, pointCount, 0, (error: any, features: any) => {\n this.popup(features, e)\n });\n }\n });\n\n map.on('click', 'job-unclustered-point', (e) => {\n const features: any = map.queryRenderedFeatures(e.point, {\n layers: ['job-unclustered-point']\n });\n if (this.props.clickedMarker && features?.length === 1) {\n return this.props.clickedMarker(features[0]);\n }\n });\n\n map.on('mouseenter', 'job-unclustered-point', (e) => {\n map.getCanvas().style.cursor = 'pointer';\n const features: any = map.queryRenderedFeatures(e.point, {\n layers: ['job-unclustered-point']\n });\n\n if (this.props.setHoverId)\n this.props.setHoverId(features[0].properties.id.toString());\n return this.jobDescriptionPopUp(features, e, map.getZoom());\n });\n\n map.on('mouseleave', 'job-unclustered-point', (e) => {\n map.getCanvas().style.cursor = '';\n const features: any = map.queryRenderedFeatures(e.point, {\n layers: ['job-unclustered-point']\n });\n //resetting the id on leave\n if (this.props.setHoverId)\n this.props.setHoverId(\"\");\n\n this.setState({\n jobPopUpDescription: null,\n })\n });\n\n map.on('click', 'jobpath-job-clusters', (e) => {\n const features: any = map.queryRenderedFeatures(e.point, {\n layers: ['jobpath-job-clusters']\n });\n\n const clusterId = features[0]?.properties?.cluster_id;\n\n if (map.getZoom() < this.MAX_AUTO_ZOOM_LEVEL) {\n (map.getSource(this.JOB_SOURCE_ID) as M.GeoJSONSource).getClusterExpansionZoom(\n clusterId,\n (err: any, zoom: number) => {\n if (err) return;\n map.easeTo({\n center: features[0].geometry.coordinates,\n zoom: zoom + 1\n });\n }\n );\n } else {\n const pointCount = features[0].properties.point_count;\n const clusterSource: any = map.getSource(this.JOBS_IN_JOBPATH_SOURCE_ID);\n clusterSource.getClusterLeaves(clusterId, pointCount, 0, (error: any, features: any) => {\n this.popup(features, e)\n })\n }\n });\n\n map.on('click', 'jobpath-job-unclustered-point', (e) => {\n const features: any = map.queryRenderedFeatures(e.point, {\n layers: ['jobpath-job-unclustered-point']\n });\n if (this.props.clickedMarker && features?.length === 1) {\n return this.props.clickedMarker(features[0]);\n }\n });\n\n map.on('mouseenter', 'jobpath-job-unclustered-point', (e) => {\n map.getCanvas().style.cursor = 'pointer';\n const features: any = map.queryRenderedFeatures(e.point, {\n layers: ['jobpath-job-unclustered-point']\n });\n\n if (this.props.setHoverId)\n this.props.setHoverId(features[0].properties.id.toString());\n return this.jobDescriptionPopUp(features, e, map.getZoom());\n });\n\n map.on('mouseleave', 'jobpath-job-unclustered-point', (e) => {\n map.getCanvas().style.cursor = '';\n const features: any = map.queryRenderedFeatures(e.point, {\n layers: ['jobpath-job-unclustered-point']\n });\n //resetting the id on leave\n if (this.props.setHoverId)\n this.props.setHoverId(\"\");\n\n this.setState({\n jobPopUpDescription: null,\n })\n });\n\n map.on('click', 'company-clusters', (e) => {\n const features: any = map.queryRenderedFeatures(e.point, {\n layers: ['company-clusters']\n });\n\n const clusterId = features[0]?.properties?.cluster_id;\n\n if (map.getZoom() < this.MAX_AUTO_ZOOM_LEVEL) {\n (map.getSource(this.JOB_SOURCE_ID) as M.GeoJSONSource).getClusterExpansionZoom(\n clusterId,\n (err: any, zoom: number) => {\n if (err) return;\n map.easeTo({\n center: features[0].geometry.coordinates,\n zoom: zoom + 1\n });\n }\n );\n } else {\n const pointCount = features[0].properties.point_count;\n const clusterSource: any = map.getSource(this.JOB_SOURCE_ID);\n clusterSource.getClusterLeaves(clusterId, pointCount, 0, (error: any, features: any) => {\n this.popup(features, e)\n })\n }\n });\n\n map.on('click', 'company-unclustered-point', (e) => {\n const features: any = map.queryRenderedFeatures(e.point, {\n layers: ['company-unclustered-point']\n });\n if (this.props.clickedMarker && features?.length === 1) {\n return this.props.clickedMarker(features[0]);\n }\n });\n\n map.on('mouseenter', 'company-unclustered-point', (e) => {\n const features: any = map.queryRenderedFeatures(e.point, {\n layers: ['company-unclustered-point']\n });\n if (this.props.clickedMarker && features?.length === 1) {\n return this.props.clickedMarker(features[0]);\n }\n });\n\n map.on('moveend', () => {\n this.setState({\n jobPopUpDescription: null,\n popupElement: null,\n })\n });\n\n // When the cursor enters a feature in\n // the point layer, prepare for dragging.\n map.on('mouseenter', 'person-point', () => {\n // map.setPaintProperty('person-point', 'circle-color', '#3bb2d0');\n map.getCanvas().style.cursor = 'move';\n });\n \n map.on('mouseleave', 'person-point', () => {\n // map.setPaintProperty('person-point', 'circle-color', '#3887be');\n map.getCanvas().style.cursor = '';\n });\n \n map.on('mousedown', 'person-point', (e) => {\n // Prevent the default map drag behavior.\n e.preventDefault();\n \n map.getCanvas().style.cursor = 'grab';\n map.on('mousemove', this.onPersonMouseMove);\n map.once('mouseup', this.onPersonMouseUp);\n });\n \n map.on('touchstart', 'person-point', (e) => {\n if (e?.points?.length !== 1) return;\n \n // Prevent the default map drag behavior.\n e.preventDefault();\n \n map.on('touchmove', this.onPersonMouseMove);\n map.once('touchend', this.onPersonMouseUp);\n });\n }\n\n onPersonMouseMove = (e: any) => {\n const coords = e.lngLat;\n // UI indicator for dragging.\n this.map.getCanvas().style.cursor = 'grabbing';\n this.personAddressDataUpdatedHandler({ location: {latitude: coords?.lat, longitude: coords?.lng} } as AddressModel);\n }\n \n onPersonMouseUp = (e: any) => {\n this.map.getCanvas().style.cursor = '';\n const source: any = this.map.getSource(this.PERSON_SOURCE_ID);\n if (source && source?._data && source?._data?.geometry && source?._data?.geometry?.coordinates)\n {\n const longitude: number = source?._data?.geometry?.coordinates[0];\n const latitude: number = source?._data?.geometry?.coordinates[1];\n this.props.setPersonGeoData(new GeoPoint(longitude, latitude));\n }\n // Unbind mouse/touch events\n this.map.off('mousemove', this.onPersonMouseMove);\n this.map.off('touchmove', this.onPersonMouseMove);\n }\n\n popup(features: Feature[], e: M.MapMouseEvent) {\n //Use css-in-js to be able to place the popup, so that it stays in view.\n\n const itemHeight = 35;\n const itemBottomMargin = 10;\n const popupPadding = 25;\n const popupWidth = 250;\n const list = features.map((f, i: number) => {\n return (\n { return this.props.clickedMarker && this.props.clickedMarker(f) }}>\n {f?.properties?.subjects?.name}\n \n )\n });\n\n const minSpaceToBottomOfMap = 150;\n const listHeight = features.length * (itemHeight + itemBottomMargin) - itemBottomMargin;\n const mapHeight = this.mapRef.clientHeight;\n const mapWidth = this.mapRef.clientWidth;\n const popupHeight = listHeight + popupPadding * 2 > mapHeight - minSpaceToBottomOfMap ? mapHeight - minSpaceToBottomOfMap : listHeight + popupPadding * 2;\n const maxListHeight = listHeight + popupPadding * 2 > mapHeight - minSpaceToBottomOfMap ? mapHeight - minSpaceToBottomOfMap : listHeight;\n const middleOfPopup = popupHeight * 0.5;\n const unadjustedBottomPosition = e.point.y + middleOfPopup;\n const adjustment = unadjustedBottomPosition - mapHeight;\n const translateY = unadjustedBottomPosition < mapHeight ? e.point.y - middleOfPopup : e.point.y - middleOfPopup - adjustment;\n const translateX = mapWidth - e.point.x > popupWidth ? e.point.x + this.CLUSTER_RADIUS : e.point.x - popupWidth - this.CLUSTER_RADIUS;\n\n const container =\n
    \n \n \n {list}\n
    \n \n \n\n this.setState({ popupElement: container })\n }\n\n jobDescriptionPopUp(features: Feature[], e: M.MapMouseEvent, zoom: number) {\n if (features[0].properties) {\n let property = features[0].properties;\n const container =\n
    \n
    \n
    \n {this.props.isCurrentlyShowingJobs !== undefined && !this.props.isCurrentlyShowingJobs ? \n {property.companyName}\n :\n \n {property.jobTitle}
    \n {property.companyName}\n
    \n }\n
    \n
    \n
    \n this.setState({ jobPopUpDescription: container })\n }\n }\n\n clearPopup() {\n this.setState({ popupElement: null, jobPopUpDescription: null })\n }\n\n updateSource(features: Feature[], sourceId: string): void {\n if (this.map) {\n const data =\n {\n type: \"FeatureCollection\",\n features: features\n } as FeatureCollection;\n // If source exists just update data\n const source = this.map.getSource(sourceId) as M.GeoJSONSource;\n if (source) {\n source.setData(data);\n } else if (data && data?.type && data?.features && data?.features.length > 0) {\n const zoomLevel = this.map.getZoom();\n this.map.addSource(sourceId, {\n type: \"geojson\",\n data: data,\n cluster: true,\n clusterRadius: Math.max(Math.floor(zoomLevel) * 5, 15),\n clusterProperties: { // Aggreations used to determine if a cluster includes multiple categories\n sumOfImageIds: [\"+\", [\"get\", \"imageId\"]],\n maxOfImageIds: [\"max\", [\"get\", \"imageId\"]],\n maxTravelTime: [\"max\", [\"get\", \"travelTime\"]],\n color: [\"coalesce\", [\"get\", \"color\"]],\n }\n } as any);\n }\n if(this.handleShouldFitBoundOnJobSearch(sourceId))\n this.handleFitBounds(features, sourceId);\n }\n }\n\n handleShouldFitBoundOnJobSearch = (sourceId: string) => {\n if(sourceId === this.JOB_SOURCE_ID)\n {\n if(this.props.pinnedAddedOrRemovedJob === undefined || this.props.pinnedAddedOrRemovedJob === false)\n return true;\n else {\n if(this.props.setPinnedAddedOrRemovedJob)\n this.props.setPinnedAddedOrRemovedJob(false);\n \n return false;\n }\n \n }\n\n return false;\n }\n\n handleFitBounds = (features: Feature[], sourceId: string) => {\n let bounds = new M.LngLatBounds();\n // checking for features size to be bigger than 1 to avoid extreme zoom on a single marker\n if (features && features.length > 0) {\n features.map((feature: any) => {\n if (feature?.geometry?.coordinates?.length === 2) {\n bounds.extend(feature.geometry.coordinates);\n }\n });\n\n if (!bounds.isEmpty()) {\n if (features.length > 0) {\n // setting mapbound to avoid zooming in and out if opening modal from map or saving a job from modal.\n if (this.mapBounds.isEmpty() && sourceId !== this.JOBS_IN_JOBPATH_SOURCE_ID) {\n if ((bounds.getSouthWest().lat !== 0 && bounds.getSouthWest().lng !== 0) && (bounds.getNorthEast().lat !== 0 && bounds.getNorthEast().lng !== 0)) {\n this.mapBounds = bounds;\n this.map.fitBounds(bounds, { padding: 50 });\n }\n } \n else {\n if (this.props.shouldFitBounds) {\n // shouldfitbounds from jobpathview to make sure it fits the markers and doesnt zoom in and out oddly.\n this.mapBounds = bounds;\n this.map.fitBounds(bounds, { padding: 50 });\n } \n else {\n // PROBLEM IS HERE WHEN PINNING JOBS.\n if (this.mapBounds !== bounds && sourceId !== this.JOBS_IN_JOBPATH_SOURCE_ID) {\n // mapzoom 6 is showing denmark. But data exists in bounds therefore fit bounds.\n // used to enclosure jobs when using filters like geographically jobs changing, then fitbounds\n this.mapBounds = bounds;\n this.map.fitBounds(bounds, { padding: 50 });\n }\n }\n }\n } \n else {\n // feature is less than one and here fitbound but avoid extreme zoom to marker\n this.mapBounds = bounds;\n this.map.fitBounds(bounds, { padding: 50, maxZoom: this.map.getZoom(), minZoom: this.map.getZoom() });\n }\n }\n } else if (features && features.length === 0 && sourceId !== this.JOBS_IN_JOBPATH_SOURCE_ID) {\n // if statement avoids zooming out if jobpathstateview is saved jobs in jobpath due to being 0 in length\n // zooms out on jobpathscene if features.length = 0\n this.map.easeTo({ zoom: 6, center: [11, 56.2639], });\n }\n }\n\n updatePersonAddress(feature: any, sourceId: string): void {\n if (this.map && this.map.isStyleLoaded()) {\n // If source exists just update data\n const source = this.map.getSource(sourceId) as M.GeoJSONSource;\n if (source) {\n source.setData(feature);\n } else if (feature && feature?.type && feature?.properties) {\n this.map.addSource(sourceId, {\n type: \"geojson\",\n data: feature,\n cluster: false\n } as any);\n }\n }\n }\n\n\n addJobLayers(map: M.Map, sourceId: string) {\n if (!map.getLayer('job-clusters-shadow')) {\n map.addLayer({\n id: 'job-clusters-shadow',\n type: 'circle',\n source: sourceId,\n filter: ['has', 'point_count'],\n paint: {\n 'circle-color': '#000000',\n 'circle-blur': 1,\n 'circle-translate': [0, 2],\n 'circle-opacity': ['case',\n ['>=', ['get', 'maxTravelTime'], this.props.travelTimeLimit ?? Infinity], 0, 14.5\n ]\n },\n });\n }\n\n if (!map.getLayer('job-clusters')) {\n map.addLayer({\n id: 'job-clusters',\n type: 'circle',\n source: sourceId,\n filter: ['has', 'point_count'],\n paint: {\n 'circle-color': [\n 'case',\n //If the sum of the path id's are equal to the the highest id times the number of elements, then all elements must have\n //the same path id. If so, then use the color for the path id, else use #00465A.\n ['==', ['get', 'sumOfImageIds'], ['*', ['get', 'maxOfImageIds'], ['get', 'point_count']]], ['get', 'color'], '#1C2C55'\n ],\n 'circle-radius': this.CLUSTER_RADIUS,\n 'circle-opacity': ['case',\n ['>=', ['get', 'maxTravelTime'], this.props.travelTimeLimit ?? Infinity], this.OPACITY, 1\n ]\n }\n });\n }\n if (!map.getLayer('job-cluster-count')) {\n map.addLayer({\n id: 'job-cluster-count',\n type: 'symbol',\n source: sourceId,\n filter: ['has', 'point_count'],\n layout: {\n 'text-field': '{point_count_abbreviated}',\n 'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'],\n 'text-size': 12,\n },\n paint: {\n \"text-color\": \"#ffffff\"\n }\n });\n }\n if (!map.getLayer('job-unclustered-point')) {\n map.addLayer({\n id: 'job-unclustered-point',\n type: 'symbol',\n source: sourceId,\n filter: ['!', ['has', 'point_count']],\n layout: {\n 'icon-image': ['get', 'imageId'],\n \"icon-allow-overlap\": true,\n },\n paint: {\n 'icon-opacity': ['case',\n ['>=', ['get', 'travelTime'], this.props.travelTimeLimit ?? Infinity], this.OPACITY, 1\n ],\n },\n });\n }\n }\n\n addJobsInJobpathLayers(map: M.Map, sourceId: string) {\n if (!map.getLayer('jobpath-job-clusters-shadow')) {\n map.addLayer({\n id: 'jobpath-job-clusters-shadow',\n type: 'circle',\n source: sourceId,\n filter: ['has', 'point_count'],\n paint: {\n 'circle-color': '#000000',\n 'circle-blur': 1,\n 'circle-translate': [0, 2],\n 'circle-opacity': ['case',\n ['>=', ['get', 'maxTravelTime'], this.props.travelTimeLimit ?? Infinity], 0, 14.5\n ]\n },\n });\n }\n\n if (!map.getLayer('jobpath-job-clusters')) {\n map.addLayer({\n id: 'jobpath-job-clusters',\n type: 'circle',\n source: sourceId,\n filter: ['has', 'point_count'],\n paint: {\n 'circle-color': [\n 'case',\n //If the sum of the path id's are equal to the the highest id times the number of elements, then all elements must have\n //the same path id. If so, then use the color for the path id, else use #00465A.\n ['==', ['get', 'sumOfImageIds'], ['*', ['get', 'maxOfImageIds'], ['get', 'point_count']]], ['get', '#000000'], '#000000'\n ],\n 'circle-radius': this.CLUSTER_RADIUS,\n 'circle-opacity': ['case',\n ['>=', ['get', 'maxTravelTime'], this.props.travelTimeLimit ?? Infinity], this.OPACITY, 1,\n ],\n }\n });\n }\n if (!map.getLayer('jobpath-job-cluster-count')) {\n map.addLayer({\n id: 'jobpath-job-cluster-count',\n type: 'symbol',\n source: sourceId,\n filter: ['has', 'point_count'],\n layout: {\n 'text-field': '{point_count_abbreviated}',\n 'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'],\n 'text-size': 12,\n },\n paint: {\n \"text-color\": \"#ffffff\"\n }\n });\n }\n\n if (!map.getLayer('jobpath-job-unclustered-point')) {\n map.addLayer({\n id: 'jobpath-job-unclustered-point',\n type: 'symbol',\n source: sourceId,\n filter: ['!', ['has', 'point_count']],\n layout: {\n 'icon-image': ['get', 'imageId'],\n \"icon-allow-overlap\": true,\n },\n paint: {\n 'icon-opacity': ['case',\n ['>=', ['get', 'travelTime'], this.props.travelTimeLimit ?? Infinity], this.OPACITY, 1\n ]\n }\n });\n }\n }\n\n addCompanyLayers(map: M.Map, sourceId: string) {\n if (!map.getLayer('clusters-shadow')) {\n map.addLayer({\n id: 'clusters-shadow',\n type: 'circle',\n source: sourceId,\n filter: ['has', 'point_count'],\n paint: {\n 'circle-color': '#000000',\n 'circle-blur': 1,\n 'circle-translate': [0, 2],\n 'circle-opacity': ['case',\n ['>=', ['get', 'maxTravelTime'], this.props.travelTimeLimit ?? Infinity], 0, 14.5\n ]\n },\n });\n }\n if (!map.getLayer('company-clusters')) {\n map.addLayer({\n id: 'company-clusters',\n type: 'circle',\n source: sourceId,\n filter: ['has', 'point_count'],\n paint: {\n 'circle-color': [\n 'case',\n //If the sum of the path id's are equal to the the highest id times the number of elements, then all elements must have\n //the same path id. If so, then use the color for the path id, else use #00465A.\n ['==', ['get', 'sumOfImageIds'], ['*', ['get', 'maxOfImageIds'], ['get', 'point_count']]], ['get', 'color'], '#1C2C55'\n ],\n 'circle-radius': this.CLUSTER_RADIUS,\n 'circle-opacity': ['case',\n ['>=', ['get', 'maxTravelTime'], this.props.travelTimeLimit ?? Infinity], this.OPACITY, 1\n ]\n }\n });\n }\n if (!map.getLayer('company-cluster-count')) {\n map.addLayer({\n id: 'company-cluster-count',\n type: 'symbol',\n source: sourceId,\n filter: ['has', 'point_count'],\n layout: {\n 'text-field': '{point_count_abbreviated}',\n 'text-font': ['DIN Offc Pro Medium', 'Arial Unicode MS Bold'],\n 'text-size': 12,\n },\n paint: {\n \"text-color\": \"#ffffff\"\n }\n });\n }\n if (!map.getLayer('company-unclustered-point')) {\n map.addLayer({\n id: 'company-unclustered-point',\n type: 'symbol',\n source: sourceId,\n filter: ['!', ['has', 'point_count']],\n layout: {\n 'icon-image': ['get', 'imageId']\n },\n paint: {\n 'icon-opacity': ['case',\n ['>=', ['get', 'travelTime'], this.props.travelTimeLimit ?? Infinity], this.OPACITY, 1\n ]\n }\n });\n }\n }\n\n addPersonLayers(map: M.Map, sourceId: string) {\n if (!map.getLayer('person-point')) {\n map.addLayer({\n id: 'person-point',\n type: 'symbol',\n source: sourceId,\n layout: {\n 'icon-image': 'person',\n 'icon-allow-overlap': true,\n \"icon-ignore-placement\": true,\n },\n });\n }\n }\n\n\n jobDataUpdatedHandler() {\n if (this.props.jobs && this.props.jobs.length > 0) {\n const convertedJobs = this.props.jobs.map(job => convertJobToGeoJson(job, jobPathImagesObject, IsLoggedIn(this.context)));\n this.updateSource(convertedJobs, this.JOB_SOURCE_ID);\n } else {\n this.updateSource([], this.JOB_SOURCE_ID);\n }\n }\n\n jobsInJobpathDataUpdatedHandler() {\n if (this.props.jobsInJobPath && this.props.jobsInJobPath.length > 0) {\n const convertedJobs = this.props.jobsInJobPath.map(job => convertJobPathToGeoJson(job, jobPathImagesObject));\n this.updateSource(convertedJobs, this.JOBS_IN_JOBPATH_SOURCE_ID);\n } else {\n this.updateSource([], this.JOBS_IN_JOBPATH_SOURCE_ID);\n }\n }\n\n companyDataUpdatedHandler() {\n if (this.props.companies && this.props.companies.length > 0) {\n const convertedCompanies = this.props.companies.map(company => convertCompanyToGeoJson(company, jobPathImagesObject, IsLoggedIn(this.context)))\n this.updateSource(convertedCompanies, this.COMPANY_SOURCE_ID);\n } else {\n this.updateSource([], this.COMPANY_SOURCE_ID);\n }\n }\n\n personAddressDataUpdatedHandler(address: AddressModel) {\n if (this.props.personAddress) {\n const convertedAddress = convertAddressToGeoJson(address);\n this.updatePersonAddress(convertedAddress, this.PERSON_SOURCE_ID);\n } else {\n this.updatePersonAddress([], this.PERSON_SOURCE_ID);\n }\n }\n\n\n render() {\n return (\n
    this.mapRef = el} onClick={() => this.clearPopup()} className='mapContainer'>{this.state?.popupElement || this.state?.jobPopUpDescription}
    \n );\n }\n}\n\nexport default connect(null, mapDispatchToProps)(MapView);","import JobModel from \"../../models/JobModel\";\nimport { SubjectFeature } from \"../../models/geoModel\";\nimport { CompanyModel } from \"../../models/CompanyModel\";\nimport { AddressModel } from \"../../models/AddressModel\";\nimport { IImageObject, remainingJobPathImageObject, notChosenToJobpathImageObject, IsLoggedIn } from \"../../helpers/ImageHelper\";\nimport { isEmptyOrUndefined } from \"../../helpers/TypeChecks\";\n\nconst convertJobToJobpathImageID = (job: JobModel): number => {\n let imageIdForJob: number = 0;\n switch (job.imageId) {\n case 0:\n imageIdForJob = 5;\n break;\n\n case 1:\n imageIdForJob = 6;\n break;\n\n case 2:\n imageIdForJob = 7;\n break;\n\n case 3:\n imageIdForJob = 8;\n break;\n\n case 4:\n imageIdForJob = 9;\n break;\n\n default:\n break;\n\n }\n\n return imageIdForJob;\n}\n\nexport const convertJobToGeoJson = (input: JobModel, images: IImageObject[], isLoggedIn:boolean): SubjectFeature => {\n if(!isEmptyOrUndefined(input))\n {\n const convertedObject = {\n type: \"Feature\",\n geometry: {\n type: \"Point\",\n coordinates: [input?.location?.longitude, input?.location?.latitude]\n },\n properties: {\n id: input.id,\n subjects: {\n id: input.id,\n name: input.title ? input.title : (input.companyName ? input.companyName : \"\"),\n color: input.imageId === 9999 ? remainingJobPathImageObject(isLoggedIn)?.color : input.imageId === 9998 ? notChosenToJobpathImageObject.color : images.find(i => i.id === input.imageId)?.color\n },\n pathId: 1 + Number(input.id) % 2,\n imageId: input.imageId,\n color: input.imageId === 9999 ? remainingJobPathImageObject(isLoggedIn)?.color : input.imageId === 9998 ? notChosenToJobpathImageObject.color : images.find(i => i.id === input.imageId)?.color,\n travelTime: Math.floor(Math.random() * 100),\n cluster_id: input.id.toString(),\n jobPathId: input.jobPathId,\n jobTitle: input.title,\n companyName: input.companyName,\n presentation: input.presentation,\n jobId: input.id,\n },\n id: input.id\n } as SubjectFeature;\n return convertedObject;\n }\n\n return {} as SubjectFeature;\n}\n\nexport const convertJobPathToGeoJson = (input: JobModel, images: IImageObject[]): SubjectFeature => {\n if(!isEmptyOrUndefined(input))\n {\n const jobPathImgID: number = convertJobToJobpathImageID(input);\n const convertedObject = {\n type: \"Feature\",\n geometry: {\n type: \"Point\",\n coordinates: [input?.location?.longitude, input?.location?.latitude]\n },\n properties: {\n id: input.id,\n subjects: {\n id: input.id,\n name: input.title ? input.title : \"\",\n color: '#000000'\n },\n pathId: 1 + Number(input.id) % 2,\n imageId: jobPathImgID,\n color: '#000000',\n travelTime: Math.floor(Math.random() * 100),\n cluster_id: input.id.toString(),\n jobPathId: input.jobPathId,\n jobTitle: input.title,\n companyName: input.companyName,\n presentation: input.presentation,\n jobId: input.id,\n },\n id: input.id\n } as SubjectFeature;\n return convertedObject;\n }\n\n return {} as SubjectFeature;\n}\n\nexport const convertCompanyToGeoJson = (input: CompanyModel, images: IImageObject[], isLoggedIn:boolean): SubjectFeature => {\n if(!isEmptyOrUndefined(input))\n {\n const convertedObject = {\n type: \"Feature\",\n geometry: {\n type: \"Point\",\n coordinates: [input?.address?.location?.longitude, input?.address?.location?.latitude]\n },\n properties: {\n id: input.id,\n subjects: {\n id: input.id,\n name: input.name ? input.name : \"\",\n color: input.imageId === 9999 ? remainingJobPathImageObject(isLoggedIn).color : input.imageId === 9998 ? notChosenToJobpathImageObject.color : images.find(i => i.id === input.imageId)?.color,\n },\n imageId: 6,\n travelTime: Math.floor(Math.random() * 100),\n cluster_id: input.id.toString()\n }\n } as SubjectFeature;\n \n return convertedObject;\n }\n\n return {} as SubjectFeature;\n}\n\nexport const convertAddressToGeoJson = (input: AddressModel): SubjectFeature => {\n\n const convertedObject = {\n type: \"Feature\",\n geometry: {\n type: \"Point\",\n coordinates: [input?.location?.longitude, input?.location?.latitude]\n },\n properties: {\n imageId: 5,\n cluster_id: (new Date()).getTime()\n }\n } as SubjectFeature;\n\n return convertedObject;\n\n}\n","import * as React from 'react';\nimport JobModel from '../../models/JobModel';\nimport { AppState } from '../../store';\nimport JobPathModel from '../../models/JobPathModel';\nimport { UpdateJobPath, AddJobToJobPath, removeJobFromFilteredJobsInJobpath, addPinnedJob, removePinnedJob, postPinnedJobIdsToNewestMyPlan } from '../../store/JobPathList/actions'\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { isEmptyOrUndefined, equals, isObjEmpty } from '../../helpers/TypeChecks';\nimport ModalForShowJobDescription from '../ModalForShowJobDescription';\nimport { IsLoggedIn, jobPathImages, remainingJobPathImageObject } from '../../helpers/ImageHelper';\nimport { shouldFadeJobListIn, removedIndexOfJobInList, setAddedOrPinnedJob } from \"../../store/SearchJob/actions\";\nimport { removeJobFromState } from \"../../store/Jobs/actions\";\nimport ModalToDisplayCompany from '../ModalToDisplayCompany';\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport { Guid } from 'guid-typescript';\nimport { FilterOptionTypesModel } from '../../models/FilterOptionsModel';\nimport { addJobOnJobPathFilter, pinJobOnJobPathFilter } from '../../store/Person/actions';\nimport { ToastIcon, TopToast } from '../../helpers/ToastHelper';\nimport { AuthenticatedTemplate, MsalContext } from '@azure/msal-react';\nimport { UnemploymentFundMembershipType } from '../../models/UnemploymentFundMembershipType';\nimport \"./JobItem.scss\";\n\ninterface OwnProps {\n job: JobModel;\n isPinnedJob?: boolean;\n isDisplayingJobs: boolean;\n indexOfJobInList: number;\n enableHover: boolean;\n enablePin: boolean;\n isFilteredJobs: boolean;\n shouldAddJobToPlan: boolean;\n page: string;\n isCompanyJobAgreement?: boolean;\n}\n\ninterface State {\n isJobPathOpen: boolean;\n showJob: boolean;\n isHover: boolean;\n showCompany: boolean;\n isAddedToMyPlan: boolean;\n job: JobModel;\n isPinJob: boolean;\n}\n\ninterface LinkStateProps {\n jobPaths: JobPathModel[];\n fadeJobsIn: boolean;\n indexOfJobRemoved: number;\n jobIdHovered: string;\n companyFetchError: boolean;\n fetchSingleJobError: boolean;\n citizenID: Guid;\n remainingJobPath: JobPathModel;\n filterOption: FilterOptionTypesModel;\n personMembership: UnemploymentFundMembershipType;\n windowInnerWidth: number;\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n jobPaths: state.jobPathList.jobPaths,\n fadeJobsIn: state.searchJob.fadeJobsIn,\n indexOfJobRemoved: state.searchJob.removedIndexInJobList,\n jobIdHovered: state.searchJob.hoveredId,\n companyFetchError: state.searchJob.companyFetchError,\n fetchSingleJobError: state.jobs.fetchSingleJobsError,\n citizenID: state.citizen.citizenID,\n remainingJobPath: state.jobPathList.remainingJobPath,\n filterOption: state.searchJob.filterOption,\n personMembership: state.person.personMembership,\n windowInnerWidth: state.searchJob.windowInnerWidth,\n});\n\ninterface LinkDispatchProps {\n UpdateJobPath: (jobPath: JobPathModel) => void,\n addPinnedJob: (job: JobModel) => void,\n removePinnedJob: (job: JobModel) => void,\n AddJobToJobPath: (job: JobModel, isShowingJobs: boolean) => void,\n shouldFadeJobListIn: (fadeIn: boolean) => void;\n removedIndexOfJobInList: (index: number) => void;\n removeJobFromState: (job: JobModel) => void;\n removeJobFromFilteredJobsInJobpath: (job: JobModel) => void;\n setAddedOrPinnedJob: (addedOrPinnedJob: boolean) => void; \n postPinnedJobIdsToNewestMyPlan: (citizenGuid: Guid, pinnedJobs: JobModel[], job: JobModel, jobIndex: number) => void;\n addJobOnJobPathFilter: (jobPathID: Guid, job: JobModel, jobType: \"job\" | \"order\" | \"company\", callback: (success: boolean) => void) => void;\n pinJobOnJobPathFilter: (jobPathID: Guid, job: JobModel, jobType: \"job\" | \"order\" | \"company\", callback: (success: boolean) => void) => void;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n UpdateJobPath: bindActionCreators(UpdateJobPath, dispatch),\n addPinnedJob: bindActionCreators(addPinnedJob, dispatch),\n removePinnedJob: bindActionCreators(removePinnedJob, dispatch),\n AddJobToJobPath: bindActionCreators(AddJobToJobPath, dispatch),\n shouldFadeJobListIn: bindActionCreators(shouldFadeJobListIn, dispatch),\n removedIndexOfJobInList: bindActionCreators(removedIndexOfJobInList, dispatch),\n removeJobFromState: bindActionCreators(removeJobFromState, dispatch),\n removeJobFromFilteredJobsInJobpath: bindActionCreators(removeJobFromFilteredJobsInJobpath, dispatch),\n setAddedOrPinnedJob: bindActionCreators(setAddedOrPinnedJob, dispatch),\n postPinnedJobIdsToNewestMyPlan: bindActionCreators(postPinnedJobIdsToNewestMyPlan, dispatch),\n addJobOnJobPathFilter: bindActionCreators(addJobOnJobPathFilter, dispatch),\n pinJobOnJobPathFilter: bindActionCreators(pinJobOnJobPathFilter, dispatch),\n});\n\ntype Props = OwnProps & LinkStateProps & LinkDispatchProps;\n\n\nclass JobItem extends React.Component {\n static contextType = MsalContext;\n\n constructor(props: Props) {\n super(props);\n this.state = {\n isJobPathOpen: false,\n showJob: false,\n isHover: false,\n showCompany: false,\n isAddedToMyPlan: false,\n job: {} as JobModel,\n isPinJob: false,\n }\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n if(this.props.page == AgreementCategoryTitles.JOBINSPIRATION_PREPARATION && !prevProps.fadeJobsIn && this.props.fadeJobsIn)\n {\n this.setState({\n isPinJob: false,\n job: {} as JobModel,\n });\n }\n }\n\n handleJobInspirationRemovePinnedJob = () => {\n if (this.props.job && this.props.job.id && this.props.job.jobPathId)\n {\n let pinnedJobsInJobPath: JobModel[] = [];\n if (this.props.remainingJobPath && this.props.remainingJobPath.id === this.props.job.jobPathId)\n {\n pinnedJobsInJobPath = [...this.props.remainingJobPath.pinnedJobs];\n if(pinnedJobsInJobPath && pinnedJobsInJobPath.length > 0)\n {\n const indexToRemove = pinnedJobsInJobPath.findIndex(j => j.id == this.props.job.id);\n if(indexToRemove > -1)\n {\n pinnedJobsInJobPath = [...pinnedJobsInJobPath.slice(0, indexToRemove), ...pinnedJobsInJobPath.slice(indexToRemove + 1)];\n }\n }\n }\n else \n {\n if(this.props.jobPaths && this.props.jobPaths.length > 0)\n {\n let jobPath = this.props.jobPaths.find(j => j.id === this.props.job.jobPathId);\n if(jobPath != undefined)\n {\n pinnedJobsInJobPath = [...jobPath.pinnedJobs];\n if(pinnedJobsInJobPath && pinnedJobsInJobPath.length > 0)\n {\n const indexToRemove = pinnedJobsInJobPath.findIndex(j => j.id == this.props.job.id);\n if(indexToRemove > -1)\n {\n pinnedJobsInJobPath = [...pinnedJobsInJobPath.slice(0, indexToRemove), ...pinnedJobsInJobPath.slice(indexToRemove + 1)];\n }\n }\n }\n }\n }\n\n \n this.props.postPinnedJobIdsToNewestMyPlan(this.props.citizenID, pinnedJobsInJobPath, this.props.job, this.props.indexOfJobInList);\n }\n }\n\n handleJobInspirationAddPinnedJob = () => {\n if (this.props.job && this.props.job.id && this.props.job.jobPathId)\n {\n let pinnedJobsInJobPath: JobModel[] = [];\n\n let tempJob: JobModel = {...this.props.job};\n // If jobid is Guid.Empty its remaining jobpath jobs.\n if (this.props.remainingJobPath && tempJob.jobPathId?.toString() === Guid.EMPTY)\n {\n tempJob = {\n ...tempJob,\n jobPathId: this.props.remainingJobPath.id\n };\n }\n\n if (this.props.remainingJobPath && this.props.remainingJobPath.id === tempJob.jobPathId)\n {\n pinnedJobsInJobPath = [...this.props.remainingJobPath.pinnedJobs, tempJob];\n }\n else \n {\n if(this.props.jobPaths && this.props.jobPaths.length > 0)\n {\n let jobPath = this.props.jobPaths.find(j => j.id === tempJob.jobPathId);\n if(jobPath != undefined)\n {\n pinnedJobsInJobPath = [...jobPath.pinnedJobs, tempJob];\n }\n }\n }\n\n this.props.postPinnedJobIdsToNewestMyPlan(this.props.citizenID, pinnedJobsInJobPath, tempJob, this.props.indexOfJobInList);\n }\n \n \n\n }\n\n handleToggleJobFromMyPlan = (event: any) => {\n if (event.stopPropagation) { event.stopPropagation(); }\n this.setState({\n isPinJob: true,\n showCompany: false,\n showJob: false,\n isHover: false,\n job: this.props.job,\n }, () => {\n let job = {...this.state.job};\n job.filterOption = this.props.filterOption;\n const jobpathID: Guid = job?.jobPathId?.toString() === Guid.EMPTY && !isObjEmpty(this.props.remainingJobPath) ? this.props.remainingJobPath?.id : job?.jobPathId;\n this.props.pinJobOnJobPathFilter(jobpathID, job, this.props.filterOption === \"jobs\" ? \"job\" : \"company\", (success) => {\n if (success)\n {\n this.props.setAddedOrPinnedJob(true);\n if(this.props.page == AgreementCategoryTitles.JOBINSPIRATION_PREPARATION) \n { \n if (this.props.isPinnedJob)\n this.handleJobInspirationRemovePinnedJob();\n else\n this.handleJobInspirationAddPinnedJob();\n }\n else \n {\n setTimeout(() => {\n this.props.shouldFadeJobListIn(true);\n this.props.removedIndexOfJobInList(this.props.indexOfJobInList);\n \n if (this.props.isPinnedJob)\n this.props.removePinnedJob(job);\n else \n this.props.addPinnedJob(job);\n \n setTimeout(() => {\n this.props.shouldFadeJobListIn(false);\n }, 400);\n this.setState({\n isPinJob: false,\n job: {} as JobModel,\n });\n }, 200);\n }\n }\n else \n {\n TopToast(ToastIcon.ERROR).fire({\n title: `Fejl! Jobbet blev ikke ${this.props.isPinnedJob ? 'fjernet' : 'tilføjet'} korrekt.`,\n backdrop: false,\n });\n this.setState({\n isPinJob: false,\n job: {} as JobModel,\n });\n }\n });\n });\n }\n\n\n showJobOrCompany = () => {\n if (!this.props.isDisplayingJobs || this.props.isCompanyJobAgreement) {\n this.setState({\n showCompany: !this.state.showCompany,\n });\n } else {\n this.setState({\n showJob: !this.state.showJob,\n });\n }\n }\n\n mouseLeaveEvent = () => {\n this.setState({\n isHover: false,\n });\n }\n\n mouseEnterEvent = () => {\n this.setState({\n isHover: true,\n });\n }\n\n displayCompanyAddress = (job: JobModel): string => {\n let displayStr = '';\n if(!isEmptyOrUndefined(job))\n {\n if(!isEmptyOrUndefined(job.workPlaceAddress))\n displayStr = displayStr.concat(job.workPlaceAddress + ', ');\n \n if(!isEmptyOrUndefined(job.workPlacePostalCode))\n displayStr = displayStr.concat(job.workPlacePostalCode + ', ');\n\n if(!isEmptyOrUndefined(job.workPlaceCity))\n displayStr = displayStr.concat(job.workPlaceCity);\n }\n\n return displayStr;\n }\n\n handleJobItemLogoToDisplay = (job: JobModel) => {\n if(!isEmptyOrUndefined(job))\n {\n if(this.props.isCompanyJobAgreement !== undefined && this.props.isCompanyJobAgreement)\n return \n else if(this.props.isDisplayingJobs || this.props.job && this.props.job.isPinnedJob !== undefined && this.props.job.isPinnedJob)\n return \n else \n return \n }\n }\n\n openModal = () => {\n if (!this.props.isDisplayingJobs || this.props.isCompanyJobAgreement) {\n this.setState({\n showCompany: !this.state.showCompany,\n });\n } else {\n this.setState({\n showJob: !this.state.showJob,\n });\n }\n }\n\n closeModal = () => {\n if (!this.props.isDisplayingJobs || this.props.isCompanyJobAgreement) {\n this.setState({\n showCompany: !this.state.showCompany,\n isHover: false,\n });\n } else {\n this.setState({\n showJob: !this.state.showJob,\n isHover: false,\n });\n }\n }\n\n handleAddJobOrderJobScene = (event?: any) => {\n // event stoppropagation to ensure modal doesnt open if add to my plan button is clicked\n if (event && event.stopPropagation) { event.stopPropagation(); }\n this.setState({\n isAddedToMyPlan: true,\n showJob: false,\n showCompany: false,\n isHover: false,\n job: this.props.job,\n }, () => {\n const jobpathID: Guid = this.state.job?.jobPathId?.toString() === Guid.EMPTY && !isObjEmpty(this.props.remainingJobPath) ? this.props.remainingJobPath?.id : this.state.job?.jobPathId;\n this.props.addJobOnJobPathFilter(jobpathID, this.state.job, this.props.filterOption === \"jobs\" ? \"job\" : this.props.filterOption === \"companies\" ? \"company\" : \"order\", (success) => {\n if (success)\n {\n TopToast(ToastIcon.SUCCESS).fire({\n title: 'Jobbet blev tilføjet succesfuldt.',\n backdrop: false,\n });\n this.props.setAddedOrPinnedJob(true);\n setTimeout(() => {\n this.props.shouldFadeJobListIn(true);\n this.props.removedIndexOfJobInList(this.props.indexOfJobInList);\n this.props.AddJobToJobPath(this.state.job, this.props.isDisplayingJobs);\n if (this.state.job.isPinnedJob) {\n this.props.removePinnedJob(this.state.job);\n // setting addedOrPinnedJob to true because it will rerender and zoom out on map otherwice\n this.props.setAddedOrPinnedJob(true);\n }\n this.props.removeJobFromState(this.state.job);\n this.props.removeJobFromFilteredJobsInJobpath(this.state.job);\n this.setState({\n isAddedToMyPlan: false,\n job: {} as JobModel,\n });\n setTimeout(() => {\n this.props.shouldFadeJobListIn(false);\n }, 400);\n }, 200);\n }\n else \n {\n this.setState({\n isAddedToMyPlan: false,\n job: {} as JobModel,\n });\n TopToast(ToastIcon.ERROR).fire({\n title: 'Fejl! Jobbet blev ikke tilføjet korrekt.',\n backdrop: false,\n });\n }\n });\n });\n }\n\n handleJobPathNameToDisplay = (): string => {\n let title: string = '';\n\n if(this.props.job && this.props.job.jobPathId)\n {\n if (this.props.remainingJobPath && (this.props.job.jobPathId.toString() === Guid.EMPTY || this.props.job.jobPathId === this.props.remainingJobPath.id))\n { \n title = this.props.remainingJobPath.name;\n }\n else \n {\n const jobPath = this.props.jobPaths?.find(jp => equals(jp.id, this.props.job.jobPathId));\n if (jobPath !== undefined)\n title = jobPath.name;\n }\n }\n\n return title;\n }\n\n render() {\n const notPinnedJob = require('../../images/PinnedJobsTransparrent.svg');\n const pinnedJob = require('../../images/PinnedJobsFull.svg');\n const isMobile: boolean = this.props.windowInnerWidth <= 550;\n\n let faIcon;\n if (this.props.isPinnedJob !== undefined && this.props.isPinnedJob)\n faIcon = ;\n else\n faIcon = ;\n\n\n let hoveredJobCSSClass = false;\n if (this.props.jobIdHovered && this.props.jobIdHovered == this.props.job.id.toString())\n hoveredJobCSSClass = true;\n\n return [\n \n
    = this.props.indexOfJobRemoved && this.props.fadeJobsIn ? 'fade-in-on-add-my-plan job-wrapper-searchjob' : this.props.page === AgreementCategoryTitles.JOBINSPIRATION ? 'job-wrapper-searchjob job-wrapper-searchjob-without-border' : 'job-wrapper-searchjob'} onMouseEnter={this.mouseEnterEvent} onMouseLeave={this.mouseLeaveEvent} onClick={() => this.showJobOrCompany()}>\n \n
    this.openModal()}>\n {this.handleJobItemLogoToDisplay(this.props.job)}\n
    \n
    \n {this.props.isPinnedJob !== undefined && this.props.isPinnedJob || this.props.enablePin && this.props.isDisplayingJobs ? \n \n {this.props.personMembership !== UnemploymentFundMembershipType.NotAMember\n ? \n : null}\n \n : null}\n
    \n
    this.openModal()}>\n

    {this.props.job && !this.props.job.isPinnedJob && !this.props.isDisplayingJobs || this.props.isCompanyJobAgreement \n ? this.props.job && this.props.job.companyName \n : this.props.job && this.props.job.title}

    \n
    \n {this.state.isHover && this.props.enableHover && !isMobile ? (\n \n
    this.openModal()}>\n \n {this.props.personMembership !== UnemploymentFundMembershipType.NotAMember\n ?\n
    \n \n
    \n : null}\n
    \n {this.props.isDisplayingJobs || this.props.job && this.props.job.isPinnedJob \n ? this.props.job ? this.openModal()}>{this.props.job.companyName} : null\n : this.props.job ? this.openModal()}>{this.displayCompanyAddress(this.props.job)} : null}\n
    this.openModal()}>\n
    ]+)>)/ig, \"\").trim()}} className=\"blurred-text job-description-remove-padding-from-p-tag\" onClick={() => this.openModal()}>
    \n
    \n
    \n
    \n ) : (\n \n {this.props.isCompanyJobAgreement !== undefined && this.props.isCompanyJobAgreement\n ?\n
    \n {this.props.job ? this.openModal()}>{this.displayCompanyAddress(this.props.job)} : null}\n
    this.openModal()}>\n
    this.openModal()}>\n

    ]+)>)/ig, \"\").trim()}}>

    \n
    \n
    \n
    \n :\n
    \n {this.props.isDisplayingJobs || this.props.job && this.props.job.isPinnedJob \n ? this.props.job ? this.openModal()}>{this.props.job.companyName} : null\n : this.props.job ? this.openModal()}>{this.displayCompanyAddress(this.props.job)} : null}\n
    this.openModal()}>\n
    this.openModal()}>\n

    ]+)>)/ig, \"\").trim()}}>

    \n
    \n
    \n
    }\n
    \n )}\n
    \n
    \n
    \n
    \n {!this.props.isDisplayingJobs || this.props.isCompanyJobAgreement\n ?\n this.closeModal()} addJobToJobPath={() => this.handleAddJobOrderJobScene()} removeJobFromJobPath={() => {}} shouldAddJob={true} shouldRemoveJob={false} />\n :\n this.handleToggleJobFromMyPlan(e)} addJobToJobPath={() => this.handleAddJobOrderJobScene()} openModal={this.state.showJob} closeModal={() => this.closeModal()} jobId={this.props.job.id} />\n }\n
    \n ];\n\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(JobItem);","import React, { useState } from 'react';\nimport JobModel from '../../models/JobModel';\nimport JobItem from '../JobItem/JobItem';\nimport { doesArrayContainValue, equals, isEmptyOrUndefined } from '../../helpers/TypeChecks';\nimport JobPathModel from '../../models/JobPathModel';\nimport { AppState } from '../../store';\nimport { connect } from 'react-redux';\nimport { List, AutoSizer, CellMeasurerCache, CellMeasurer } from \"react-virtualized\";\nimport { shouldFadeJobListIn } from \"../../store/SearchJob/actions\";\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport { bindActionCreators } from 'redux';\nimport { ListGroup } from 'react-bootstrap';\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport \"./JobsList.scss\";\nimport { FilterOptionTypesModel } from '../../models/FilterOptionsModel';\n\ninterface OwnProps {\n jobs: JobModel[];\n pinnedJobs?: JobModel[];\n jobPathName: string;\n highLightedJob?: JobModel;\n virtualizeList: boolean;\n isFilteredJobs: boolean;\n shouldAddJobToPlan: boolean;\n shouldPinJobToPlan: boolean;\n page: string;\n}\n\ninterface State {\n cache: CellMeasurerCache;\n}\n\ninterface LinkStateProps {\n jobPaths: JobPathModel[];\n filterOption: FilterOptionTypesModel;\n shouldFadeJobsIn: boolean;\n windowInnerWidth: number;\n}\n\ninterface LinkDispatchProps {\n shouldFadeJobListIn: (fadeIn: boolean) => void;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n shouldFadeJobListIn: bindActionCreators(shouldFadeJobListIn, dispatch),\n});\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n jobPaths: state.jobPathList.jobPaths,\n filterOption: state.searchJob.filterOption,\n shouldFadeJobsIn: state.searchJob.fadeJobsIn,\n windowInnerWidth: state.searchJob.windowInnerWidth,\n});\n\ntype Props = OwnProps & LinkStateProps & LinkDispatchProps;\n\n// global rowheight variable to ensure rowheight are calc right to make proper space after hr tag.\nlet rowHeight: number = 0;\n\nclass JobsList extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = {\n cache: new CellMeasurerCache({ fixedWidth: true, defaultHeight: 130 }),\n }\n }\n\n shouldDisplayJob = (job: JobModel) => {\n if (isEmptyOrUndefined(job))\n return false;\n\n let jobPath = this.props.jobPaths.find(jp => equals(jp.id, job.jobPathId));\n if (doesArrayContainValue(jobPath?.jobs, job))\n return false;\n else\n return true;\n }\n\n rowRenderer = ({ index, parent, key, style }: { index: any, parent: any, key: any, style: any }) => {\n let html:JSX.Element;\n if(this.props.jobs && this.props.jobs.length === index)\n {\n // ghost div to avoid showing half jobitem in the bottom of the list if jobs are pinned.\n html =\n \n
    \n
    \n ;\n\n } else if (this.props.jobs[index] && this.props.jobs[index].isPinnedJob) {\n html =\n {this.props.pinnedJobs && this.props.pinnedJobs.length > 0 && index == 0 ? (\n
    \n

    {this.props.filterOption === \"jobs\" ? \"Gemte jobs\" : this.props.filterOption === \"companies\" ? \"Gemte virksomheder\" : \"Gemte ordre\"}

    \n
    \n ) : null}\n
    0 ? { height: rowHeight + 'px', left: '0px', position: 'absolute', width: '100%', top: rowHeight * index + 15 + 'px' } : style}>\n \n {this.props.pinnedJobs && this.props.pinnedJobs.length > 0 && this.props.pinnedJobs.length === index + 1 ? (\n
    \n ) : null}\n
    \n ;\n } else {\n html =\n \n
    0 && index + 1 >= this.props.pinnedJobs.length ? { height: rowHeight + 'px', left: '0px', position: 'absolute', width: '100%', top: rowHeight * index + 30 + 'px' } : style}>\n \n
    \n ;\n }\n\n return (html);\n }\n\n calculateRowHeight = (heightFromAutoSizer: number): number => {\n const defaultHeight: number = this.props.page == AgreementCategoryTitles.JOBINSPIRATION || this.props.page == AgreementCategoryTitles.JOBINSPIRATION_PREPARATION ? 5.2 : 4.6;\n\n const divideHeight: number = (this.props.page == AgreementCategoryTitles.JOBINSPIRATION || this.props.page == AgreementCategoryTitles.JOBINSPIRATION_PREPARATION) && this.props.windowInnerWidth <= 1450 ? 3.1 : this.props.windowInnerWidth <= 550 ? 4.2 : this.props.windowInnerWidth <= 1450 ? 2.8 : defaultHeight;\n if (rowHeight !== heightFromAutoSizer) {\n rowHeight = heightFromAutoSizer / divideHeight;\n }\n\n return rowHeight;\n }\n\n render() {\n return (\n
    \n {\n this.props.virtualizeList ?\n \n \n {({ height, width }) => (\n this.rowRenderer({index, parent, key, style})}\n data={this.props.jobs}\n />\n )}\n \n \n :\n \n
    \n
    \n

    {this.props.jobPathName}

    \n
    \n
    \n\n
    \n
    \n
    \n Sorter: \n
    \n
    \n\n
    \n\n \n {this.props.jobs && this.props.jobs.map((job, i) =>\n \n )}\n \n
    \n\n\n }\n\n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(JobsList);","import * as React from 'react';\nimport './SearchInputBox.scss';\n\ninterface Props {\n placeHolder: string;\n handleSearchOnChange: (e: React.ChangeEvent) => void;\n valueInSearchBox: string;\n handleSearchButtonClicked: (e: React.MouseEvent) => void;\n}\n\ninterface State {\n onFocus: boolean;\n}\n\nclass SearchInputBox extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = {\n onFocus: false,\n };\n }\n\n handleInputFocus = () => {\n this.setState({\n onFocus: true,\n });\n }\n\n handleInputBlur = () => {\n this.setState({\n onFocus: false,\n });\n }\n\n handleKeyDownToSearch = (e: any) => { \n if (e?.key === 'Enter' && this.props.handleSearchButtonClicked)\n this.props.handleSearchButtonClicked(e); \n }\n\n render() {\n return (\n
    \n this.handleKeyDownToSearch(e)} onBlur={() => this.handleInputBlur()} onFocus={() => this.handleInputFocus()} placeholder={this.props.placeHolder} onChange={this.props.handleSearchOnChange}>\n \n
    \n );\n }\n}\n\nexport default SearchInputBox;","import * as React from 'react';\nimport JobModel from '../../models/JobModel';\nimport { Dropdown } from 'react-bootstrap';\nimport JobsList from '../JobsList';\nimport { updateFilterSortDropdown, toggleQueryFilter, SetIsDoneQueryUpdating } from \"../../store/SearchJob/actions\";\nimport \"./SearchAndSortJobs.scss\";\nimport { AppState } from '../../store';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport { bindActionCreators } from 'redux';\nimport { connect } from \"react-redux\";\nimport JobPathModel from '../../models/JobPathModel';\nimport SearchInputBox from '../Input/SearchInputBox';\nimport { QueryFilter } from '../../models/QueryFilter';\nimport { removeJobFromState } from \"../../store/Jobs/actions\";\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport Loader from '../Loader';\n\n\ninterface OwnProps {\n jobs: JobModel[];\n pinnedJobs: JobModel[];\n jobPaths: JobPathModel[];\n highlightedJob?: JobModel;\n chosenSortFilter: string;\n isFilteredJobs: boolean;\n shouldAddJobToPlan: boolean;\n shouldPinJobToPlan: boolean;\n page: string;\n shouldDisplayLoader: boolean;\n}\n\ninterface State {\n jobSearchText: string;\n combinedJobs: JobModel[];\n}\n\ninterface LinkStateProp {\n filterSortDropdown: string[];\n\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProp => ({\n filterSortDropdown: state.searchJob.filterSortDropdown,\n});\n\ninterface LinkDispatchProps {\n updateFilterSortDropdown: (chosenFilter: string) => void;\n toggleQueryFilter: (queryFilter: QueryFilter, shouldAdd: boolean) => void;\n SetIsDoneQueryUpdating: (isDone: boolean) => void;\n removeJobFromState: (job: JobModel) => void;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n updateFilterSortDropdown: bindActionCreators(updateFilterSortDropdown, dispatch),\n toggleQueryFilter: bindActionCreators(toggleQueryFilter, dispatch),\n SetIsDoneQueryUpdating: bindActionCreators(SetIsDoneQueryUpdating, dispatch),\n removeJobFromState: bindActionCreators(removeJobFromState, dispatch),\n});\n\ntype Props = OwnProps & LinkStateProp & LinkDispatchProps;\n\nclass SearchAndSortJobs extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = {\n jobSearchText: \"\",\n combinedJobs: [],\n }\n }\n\n handleSelectedDropdownChanged = (event: any, value: string) => {\n this.props.updateFilterSortDropdown(value);\n }\n\n searchJobBarClicked = (e: any) => {\n let queryFilter: QueryFilter = new QueryFilter(\"multisearch\", this.state.jobSearchText);\n this.props.toggleQueryFilter(queryFilter, false);\n }\n\n handleJobSearchOnChange = (e: any) => {\n this.setState({ jobSearchText: e.target.value });\n }\n\n // componentWillUnmount() {\n // this.setState({ jobSearchText: \"\" });\n // let queryFilter: QueryFilter = new QueryFilter(\"multisearch\", \"\");\n // this.props.toggleQueryFilter(queryFilter, false);\n // }\n\n render() {\n return (\n \n {this.props.shouldDisplayLoader ? : null}\n
    \n
    \n this.handleJobSearchOnChange(e)} handleSearchButtonClicked={(e) => this.searchJobBarClicked(e)} />\n
    \n
    \n
    \n Jobopslag:\n {this.props.shouldDisplayLoader ?\n \n :\n
    \n {this.props.jobs.length}\n
    \n }\n
    \n
    \n {this.props.page != AgreementCategoryTitles.JOBINSPIRATION ? \n
    \n \n Sorter: \n \n {this.props.chosenSortFilter}\n \n \n {this.props.filterSortDropdown.map((filter, index) => (\n this.handleSelectedDropdownChanged(e, filter)}>{filter}\n ))}\n \n \n
    \n : null}\n
    \n
    \n {this.props.shouldDisplayLoader ?\n \n :\n
    \n \n
    \n }\n
    \n
    \n\n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SearchAndSortJobs);\n\n","import GeoPoint from \"./GeoPoint\";\n\nexport class AddressModel {\n streetName: string;\n number: string;\n floorIdentifier: string;\n suiteIdentifier: string;\n zipCode: string;\n city: string;\n country: string;\n location: GeoPoint;\n\n constructor(streetName: string, number: string, floorIdentifier: string, suiteIdentifier: string, zipCode: string, city: string, country: string, location: GeoPoint) {\n this.streetName = streetName;\n this.number = number;\n this.floorIdentifier = floorIdentifier;\n this.suiteIdentifier = suiteIdentifier;\n this.zipCode = zipCode;\n this.city = city;\n this.country = country;\n this.location = new GeoPoint(location.longitude, location.latitude);\n }\n}\n\nexport default AddressModel; ","import { createBrowserHistory } from 'history';\n\nexport default createBrowserHistory();\n\nexport const changeWindowUrlState = (oldUrl: string, newUrl: string) => {\n window.history.replaceState({}, oldUrl, newUrl);\n}","import \"./SearchJobScene.scss\";\nimport * as React from 'react';\nimport FilterJobSearch from \"../../components/FilterJobSearch\";\nimport MapView from \"../../components/MapView\";\nimport JobModel from '../../models/JobModel';\nimport SearchAndSortJobs from '../../components/SearchAndSortJobs/SearchAndSortJobs';\nimport { AppState } from '../../store';\nimport { doneFetchingFilteredJobs, fetchJobsByQueryObject, removeJobFromState, isFetchingFilteredJobs, setDisplayLoader, getAllOccupationOppurtunitiesFromAPI, getAllQualificationsFromAPI, getAllIndustriesFromAPI, getAllMunicipalitiesFromAPI } from '../../store/Jobs/actions'\nimport { ThunkDispatch } from 'redux-thunk';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { AppActions } from '../../store/AppActions';\nimport { QueryObject } from '../../models/QueryObject';\nimport JobPathModel from '../../models/JobPathModel';\nimport { equals, isEmptyOrUndefined, isObjEmpty } from '../../helpers/TypeChecks';\nimport CitizenModel from '../../models/CitizenModel';\nimport { QueryFilter } from '../../models/QueryFilter';\nimport { RegionModel } from '../../models/RegionModel';\nimport AddressModel from '../../models/AddressModel';\nimport JobTypeModel from '../../models/JobTypeModel';\nimport { addQueryFilter, toggleInitialFilters, addJobIdOnHover, shouldFadeJobListIn, removedIndexOfJobInList, setAddedOrPinnedJob, UpdateDistance, getAllRegionFromAPI } from '../../store/SearchJob/actions';\nimport ModalForShowJobDescription from '../../components/ModalForShowJobDescription';\nimport { AddJobToJobPath, addPinnedJob, postPinnedJobIdsToNewestMyPlan, removeJobFromFilteredJobsInJobpath, removePinnedJob } from '../../store/JobPathList/actions';\nimport swal from \"sweetalert\";\nimport IndustryModel from '../../models/IndustryModel';\nimport ModalToDisplayCompany from '../../components/ModalToDisplayCompany';\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport { Guid } from 'guid-typescript';\nimport { createLocaleDate } from '../../helpers/DateHelper';\nimport { SearchListModel } from '../../models/SearchListModel';\nimport DSADataModel from '../../models/DSADataModel';\nimport { dsaData } from '../../helpers/DSADataHelper';\nimport { addJobOnJobPathFilter, pinJobOnJobPathFilter, setShowGeoLocationModal } from '../../store/Person/actions';\nimport { ToastIcon, TopToast } from '../../helpers/ToastHelper';\nimport { MsalContext } from \"@azure/msal-react\";\nimport GeoPoint from '../../models/GeoPoint';\nimport { UnemploymentFundMembershipType } from '../../models/UnemploymentFundMembershipType';\nimport { Redirect } from 'react-router';\nimport OccupationOpportunityModel from '../../models/OccupationOpportunityModel';\nimport QualificationModel from '../../models/QualificationModel';\nimport { MunicipalityModel } from '../../models/MunicipalityModel';\nimport Swal from 'sweetalert2';\nimport DSAJobFilterModel from '../../models/DSAJobFilterModel';\nimport { changeWindowUrlState } from \"../../history\";\nimport { JobmatchRoute } from \"../../routes\";\n\ninterface OwnProps {\n shouldAddJobToPlan: boolean;\n shouldPinJobToPlan: boolean;\n page: string;\n displayAllJobs?: boolean;\n onlyDisplayMap?: boolean;\n jobToFetchByIdDeepLink?: string;\n}\n\ninterface LinkStateProps {\n filteredJobs: JobModel[];\n jobPaths: JobPathModel[];\n citizen: CitizenModel;\n regions: RegionModel[];\n queryFilters: QueryFilter[];\n jobTypes: JobTypeModel[];\n hasAddedInitialFilters: boolean;\n pinnedJobs: JobModel[];\n chosenSortFilter: string;\n // industries: IndustryModel[];\n isFetching: boolean;\n isDoneFetchingFilteredJobs: boolean;\n filterOption: \"jobs\" | \"companies\" | \"orders\";\n allJobs: JobModel[];\n filteredAllJobs: JobModel[];\n shouldDisplayAllJobs: boolean;\n citizenID: Guid;\n addedOrPinnedJob: boolean;\n remainingJobPath: JobPathModel;\n distance: number;\n displayLoader: boolean;\n dsaJobFilter: DSAJobFilterModel;\n windowInnerWidth: number;\n personGeoData: GeoPoint | null;\n personMembership: UnemploymentFundMembershipType;\n occupations: OccupationOpportunityModel[];\n qualifications: QualificationModel[];\n industries: IndustryModel[];\n municipalities: MunicipalityModel[];\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n filteredJobs: state.jobs.filteredJobs,\n jobPaths: state.jobPathList.jobPaths,\n citizen: state.citizen.citizen,\n regions: state.searchJob.regions,\n queryFilters: state.searchJob.queryFilters,\n jobTypes: state.searchJob.jobTypes,\n hasAddedInitialFilters: state.searchJob.addedInitialFilters,\n pinnedJobs: state.jobPathList.pinnedJobs,\n chosenSortFilter: state.searchJob.chosenSortFilter,\n //industries: state.searchJob.industryDisplayList,\n isFetching: state.jobs.isFetching,\n isDoneFetchingFilteredJobs: state.jobs.isDoneFetchingFilteredJobs,\n filterOption: state.searchJob.filterOption,\n allJobs: state.jobs.allJobs,\n filteredAllJobs: state.jobs.filteredAllJobs,\n shouldDisplayAllJobs: state.jobPathList.shouldDisplayAllJobs,\n citizenID: state.citizen.citizenID,\n addedOrPinnedJob: state.searchJob.addedOrPinnedJob,\n remainingJobPath: state.jobPathList.remainingJobPath,\n distance: state.searchJob.distance,\n displayLoader: state.jobs.displayLoader,\n dsaJobFilter: state.searchJob.dsaJobFilter,\n windowInnerWidth: state.searchJob.windowInnerWidth,\n personGeoData: state.person.personGeoData,\n personMembership: state.person.personMembership,\n occupations: state.jobs.occupations,\n qualifications: state.jobs.qualifications,\n industries: state.jobs.industries,\n municipalities: state.jobs.municipality\n});\n\ninterface LinkDispatchProps {\n addQueryFilter: (queryFilter: QueryFilter) => void;\n toggleInitialFilters: (hasAdded: boolean) => void;\n AddJobToJobPath: (job: JobModel, isShowingJobs: boolean) => void;\n addPinnedJob: (job: JobModel) => void;\n removePinnedJob: (job: JobModel) => void;\n addJobIdOnHover: (id: string) => void;\n shouldFadeJobListIn: (fadeIn: boolean) => void;\n removedIndexOfJobInList: (index: number) => void;\n removeJobFromState: (job: JobModel) => void;\n removeJobFromFilteredJobsInJobpath: (job: JobModel) => void;\n doneFetchingFilteredJobs: (isDone: boolean) => void;\n isFetchingFilteredJobs: (isFetching: boolean) => void;\n postPinnedJobIdsToNewestMyPlan: (citizenGuid: Guid, pinnedJobs: JobModel[], job: JobModel, jobIndex: number) => void;\n setAddedOrPinnedJob: (addedOrPinnedJob: boolean) => void; \n updateDistance: (distance: number) => void;\n setDisplayLoader: (load: boolean) => void;\n fetchJobsByQueryObject: (queryObject: QueryObject, jobPaths: JobPathModel[], isAllJobs: boolean, addConceptUriDas: boolean, onlyQueryJobs: boolean, callback: (success: boolean) => void) => void;\n addJobOnJobPathFilter: (jobPathID: Guid, job: JobModel, jobType: \"job\" | \"order\" | \"company\", callback: (success: boolean) => void) => void;\n pinJobOnJobPathFilter: (jobPathID: Guid, job: JobModel, jobType: \"job\" | \"order\" | \"company\", callback: (success: boolean) => void) => void;\n getAllOccupationOppurtunitiesFromAPI: (postalCode: string) => void;\n getAllRegionFromAPI: () => void;\n getAllQualificationsFromAPI: () => void;\n getAllIndustriesFromAPI: () => void;\n getAllMunicipalitiesFromAPI: () => void;\n setShowGeoLocationModal: (data: boolean) => void;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n addQueryFilter: bindActionCreators(addQueryFilter, dispatch),\n toggleInitialFilters: bindActionCreators(toggleInitialFilters, dispatch),\n AddJobToJobPath: bindActionCreators(AddJobToJobPath, dispatch),\n addPinnedJob: bindActionCreators(addPinnedJob, dispatch),\n removePinnedJob: bindActionCreators(removePinnedJob, dispatch),\n addJobIdOnHover: bindActionCreators(addJobIdOnHover, dispatch),\n shouldFadeJobListIn: bindActionCreators(shouldFadeJobListIn, dispatch),\n removedIndexOfJobInList: bindActionCreators(removedIndexOfJobInList, dispatch),\n removeJobFromState: bindActionCreators(removeJobFromState, dispatch),\n removeJobFromFilteredJobsInJobpath: bindActionCreators(removeJobFromFilteredJobsInJobpath, dispatch),\n doneFetchingFilteredJobs: bindActionCreators(doneFetchingFilteredJobs, dispatch),\n isFetchingFilteredJobs: bindActionCreators(isFetchingFilteredJobs, dispatch),\n postPinnedJobIdsToNewestMyPlan: bindActionCreators(postPinnedJobIdsToNewestMyPlan, dispatch),\n setAddedOrPinnedJob: bindActionCreators(setAddedOrPinnedJob, dispatch),\n updateDistance: bindActionCreators(UpdateDistance, dispatch),\n setDisplayLoader: bindActionCreators(setDisplayLoader, dispatch),\n fetchJobsByQueryObject: bindActionCreators(fetchJobsByQueryObject, dispatch),\n addJobOnJobPathFilter: bindActionCreators(addJobOnJobPathFilter, dispatch),\n pinJobOnJobPathFilter: bindActionCreators(pinJobOnJobPathFilter, dispatch),\n getAllOccupationOppurtunitiesFromAPI: bindActionCreators(getAllOccupationOppurtunitiesFromAPI, dispatch),\n getAllRegionFromAPI: bindActionCreators(getAllRegionFromAPI, dispatch),\n getAllQualificationsFromAPI: bindActionCreators(getAllQualificationsFromAPI, dispatch),\n getAllIndustriesFromAPI: bindActionCreators(getAllIndustriesFromAPI, dispatch),\n getAllMunicipalitiesFromAPI: bindActionCreators(getAllMunicipalitiesFromAPI, dispatch),\n setShowGeoLocationModal: bindActionCreators(setShowGeoLocationModal, dispatch),\n});\n\ntype Props = OwnProps & LinkStateProps & LinkDispatchProps;\n\ninterface State {\n queryObject: QueryObject;\n address: AddressModel;\n showModal: boolean;\n selectedJobFromMap: JobModel;\n jobPathTitleForModal: string;\n highlightedJob?: JobModel;\n indexOfJobInJobs: number;\n showCompany: boolean;\n jobs: JobModel[];\n dsaData: DSADataModel[];\n redirectToSearchFilter: boolean;\n isDeepLink: boolean;\n}\n\nconst jobpathSwal = Swal.mixin({\n title: 'Opret søgefilter',\n text: \"Opret søgefilter for mere målrettet søgning\",\n confirmButtonText: 'Opret søgefilter',\n cancelButtonText: 'Fortsæt uden',\n showCancelButton: true,\n reverseButtons: true,\n customClass: {\n popup: 'swal-popup jobpath-creational-swal',\n container: 'swal-popup-customized swal-high-index',\n confirmButton: 'search-filter-custom swal-buttons',\n cancelButton: 'swal-customized-cancel swal-buttons',\n },\n});\n\nclass SearchJobScene extends React.PureComponent {\n static contextType = MsalContext;\n\n state: State = {\n indexOfJobInJobs: -1,\n queryObject:\n {\n jobPath: {} as JobPathModel,\n location: {\n longitude: 0,\n latitude: 0,\n maxDistance: 0,\n },\n queryFilters: [],\n regions: [],\n conceptUriDas: [],\n timeOfRequest: createLocaleDate(),\n industries: [],\n jobIdsToFilter: [],\n keywords: [],\n },\n address: {\n streetName: \"\",\n number: \"\",\n zipCode: \"\",\n city: \"\",\n country: \"\",\n floorIdentifier: \"\",\n suiteIdentifier: \"\",\n location: {\n longitude: this.props.citizen.longitude,\n latitude: this.props.citizen.latitude,\n }\n\n },\n showModal: false,\n selectedJobFromMap: {} as JobModel,\n jobPathTitleForModal: \"\",\n highlightedJob: undefined,\n showCompany: false,\n jobs: [],\n dsaData: dsaData,\n redirectToSearchFilter: false,\n isDeepLink: false,\n }\n\n componentDidMount() {\n if (this.props.jobToFetchByIdDeepLink && !isEmptyOrUndefined(this.props.jobToFetchByIdDeepLink))\n {\n this.setState({\n showModal: true,\n selectedJobFromMap: {\n id: this.props.jobToFetchByIdDeepLink,\n } as JobModel,\n isDeepLink: true,\n }, () => {\n changeWindowUrlState(window.location.pathname, JobmatchRoute.SEARCHJOB);\n });\n }\n \n if(!(this.props.occupations.length > 0)){\n this.props.getAllOccupationOppurtunitiesFromAPI('0');\n }\n if(!(this.props.regions.length > 0)){\n this.props.getAllRegionFromAPI();\n }\n if(!(this.props.qualifications.length > 0)){\n this.props.getAllQualificationsFromAPI();\n }\n if(!(this.props.industries.length > 0)){\n this.props.getAllIndustriesFromAPI();\n }\n if(!(this.props.municipalities.length > 0)){\n this.props.getAllMunicipalitiesFromAPI();\n }\n\n if(isEmptyOrUndefined(this.props.jobPaths) || this.props.jobPaths.length === 0)\n {\n this.handleQuery()\n // if(this.props.filterOption !== \"companies\")\n // {\n // this.props.updateDistance(500);\n // this.handleQuery(500);\n // }\n // else \n // {\n // this.props.updateDistance(150);\n // this.handleQuery(150);\n // }\n } \n else \n {\n this.handleQuery();\n }\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n const isAuth = this.context.accounts.length > 0;\n\n if (this.props.hasAddedInitialFilters) {\n this.props.toggleInitialFilters(false);\n this.handleQuery();\n }\n\n if(prevProps.pinnedJobs !== this.props.pinnedJobs || prevProps.filteredJobs !== this.props.filteredJobs || prevProps.filteredAllJobs !== this.props.filteredAllJobs || prevProps.shouldDisplayAllJobs !== this.props.shouldDisplayAllJobs)\n {\n if(prevProps.shouldDisplayAllJobs && !this.props.shouldDisplayAllJobs)\n {\n // do nothing here to prevent it from rendering wrong filteredJobs if jobpath has less jobpaths than the jobpath is filterchosen.\n } else {\n this.setState({jobs: this.handleShowJobs()});\n }\n }\n\n if(prevProps.chosenSortFilter !== this.props.chosenSortFilter)\n {\n this.setState({jobs: this.handleShowJobs()});\n }\n\n if (prevProps.personGeoData !== this.props.personGeoData || prevProps.jobPaths?.length === 0 && this.props.jobPaths?.length > 0)\n {\n // const distance: number = prevProps.jobPaths?.length === 0 && this.props.jobPaths?.length > 0 ? 500 : this.props.distance;\n // this.props.updateDistance(distance);\n // this.handleQuery(distance);\n this.handleQuery();\n }\n\n if(isAuth && prevProps.jobPaths !== this.props.jobPaths)\n {\n this.handleRedirectToSearchFilter();\n }\n\n if (prevState.showModal && !this.state.showModal && this.state.isDeepLink)\n {\n this.setState({\n isDeepLink: false,\n }, () => {\n this.props.setShowGeoLocationModal(true);\n });\n }\n }\n\n getProfessionOccupations = (dsaJobFilter: DSAJobFilterModel, occupationIds: string[]) => {\n const profession: DSADataModel | undefined = dsaData.find((x: any) => x?.Profession === dsaJobFilter?.Profession?.name);\n if (profession)\n {\n if (profession?.Profession?.toLowerCase() === 'akademiker' && dsaJobFilter?.WorkAreas?.length > 0 && dsaJobFilter?.Occupations?.length === 0)\n {\n profession.WorkAreas?.map((workarea) => {\n if (dsaJobFilter?.WorkAreas?.find(x => x?.name === workarea?.Title && x?.checked))\n {\n workarea?.PredefinedOccupations?.map((val) => {\n if (!occupationIds?.includes(val?.ConceptUriDa) && (dsaJobFilter?.Occupations?.find(o => o?.id === val?.ConceptUriDa)?.checked || dsaJobFilter?.Occupations?.length === 0))\n occupationIds = [...occupationIds, val?.ConceptUriDa];\n });\n }\n });\n } \n else \n {\n if (isEmptyOrUndefined(profession.ProfessionOccupations))\n occupationIds = [...occupationIds, ...profession?.PredefinedOccupations.map(x => x.ConceptUriDa)];\n else\n occupationIds = [...occupationIds, ...profession?.ProfessionOccupations];\n }\n }\n return occupationIds;\n }\n\n getSpecializedKeywordsByWorkArea = () => {\n let specializationKeywords:string[] = [];\n \n this.props.dsaJobFilter?.WorkAreas?.map((workArea) => (\n this.state.dsaData?.map((x) => {\n {\n x.WorkAreas?.map((p) => {\n {\n p?.AreaOfSpecialisation?.map((a) => {\n if(workArea?.checked && workArea.name === p?.Title)\n {\n a.SpecializationKeywords.map((sk) => {\n if(!specializationKeywords.includes(sk)){\n specializationKeywords = [...specializationKeywords, sk];\n }\n })\n }\n });\n }\n });\n }\n })\n ));\n \n return specializationKeywords;\n }\n\n handleQuery = (distanceToUpdate?: number) => {\n if (!this.props.displayLoader)\n this.props.setDisplayLoader(true);\n\n const requestTime = createLocaleDate();\n let jobPaths = this.handleFilteredJobPaths();\n const dsaFilterToQuery = this.props.dsaJobFilter;\n\n let tempKeywords: string[] = [];\n let filteredAreaOfSpecializations: SearchListModel[] = dsaFilterToQuery?.AreaOfSpecialisation?.filter(x => x?.checked);\n if (filteredAreaOfSpecializations?.length > 0)\n {\n this.state.dsaData?.map((x) => {\n if (x?.Profession === dsaFilterToQuery?.Profession?.name)\n {\n x.WorkAreas?.map((p) => {\n if (dsaFilterToQuery?.WorkAreas?.find(x => x?.name === p?.Title))\n {\n p?.AreaOfSpecialisation?.map((a) => {\n if (filteredAreaOfSpecializations?.find(x => x?.name === a?.Title))\n tempKeywords = [...tempKeywords, ...a?.SpecializationKeywords];\n });\n }\n })\n }\n });\n }\n else if(dsaFilterToQuery.WorkAreas.length > 0)\n tempKeywords = this.getSpecializedKeywordsByWorkArea();\n else\n tempKeywords = this.getSpecializedKeyWordsByProfession();\n\n let conceptUriDas: string[] = [];\n if (dsaFilterToQuery?.Profession?.checked)\n conceptUriDas = this.getProfessionOccupations(dsaFilterToQuery, []);\n\n if (jobPaths.length > 0)\n {\n let queryObject: QueryObject = {\n jobPath: {} as JobPathModel,\n location: this.handleLocation(distanceToUpdate),\n queryFilters: this.handleQueryFilters(),\n regions: this.fetchRegions(),\n timeOfRequest: requestTime,\n conceptUriDas: conceptUriDas,\n jobIdsToFilter: [],\n industries: [],\n keywords: tempKeywords,\n };\n \n this.props.fetchJobsByQueryObject(queryObject, jobPaths, false, conceptUriDas.length === 0, false, (success) => {\n this.props.setDisplayLoader(false);\n });\n } \n else \n {\n let emptyJobPathObj = {} as JobPathModel;\n emptyJobPathObj = {\n ...emptyJobPathObj,\n imageId: 10,\n }\n let queryObject: QueryObject = {\n jobPath: emptyJobPathObj,\n location: this.handleLocation(distanceToUpdate),\n queryFilters: this.handleQueryFilters(),\n regions: this.fetchRegions(),\n timeOfRequest: requestTime,\n industries: [],\n jobIdsToFilter: [],\n conceptUriDas: conceptUriDas,\n keywords: tempKeywords,\n }\n\n this.props.fetchJobsByQueryObject(queryObject, [emptyJobPathObj], true, conceptUriDas.length === 0, false, (success) => {\n this.props.setDisplayLoader(false);\n });\n \n }\n\n }\n\n handleFilteredJobPaths = () => {\n return this.props.jobPaths.filter(jobPath => equals(jobPath.isFilterChosen, true));\n }\n\n handleLocation = (distanceToUpdate?: number) => {\n return {\n longitude: this.props.citizen && this.props.citizen.longitude != undefined ? this.props.citizen.longitude : 9.5018,\n latitude: this.props.citizen && this.props.citizen.latitude != undefined ? this.props.citizen.latitude : 56.2639,\n maxDistance: distanceToUpdate !== undefined && distanceToUpdate > 0 ? distanceToUpdate : this.props.distance,\n }\n }\n\n fetchRegions = () => {\n let regions: RegionModel[] = this.props.regions.filter(r => equals(r.checked, true));\n return regions;\n }\n\n handleQueryFilters = () => {\n return this.props.queryFilters;\n }\n\n getSpecializedKeyWordsByProfession = () => {\n let dsaFilterToQuery = this.props.dsaJobFilter;\n let specializationKeywords:Set = new Set();\n if (dsaFilterToQuery?.Profession?.checked)\n {\n let profession = this.state.dsaData.find(x => x?.Profession == dsaFilterToQuery?.Profession?.name);\n \n if(profession?.WorkAreas){\n for(let i = 0; i < profession?.WorkAreas.length-1; i++)\n {\n let areaOfSpecialisation = profession?.WorkAreas[i];\n if(!isEmptyOrUndefined(areaOfSpecialisation))\n {\n for(let j = 0; j < areaOfSpecialisation?.AreaOfSpecialisation.length; j++)\n {\n for(let k = 0; k < areaOfSpecialisation.AreaOfSpecialisation[j].SpecializationKeywords.length; k++)\n {\n let specializationkeyword = areaOfSpecialisation.AreaOfSpecialisation[j].SpecializationKeywords[k];\n \n if(!specializationKeywords.has(specializationkeyword))\n specializationKeywords.add(specializationkeyword)\n }\n } \n }\n }\n }\n }\n return Array.from(specializationKeywords);\n }\n\n handleClickedMarker = (e: any, jobs: JobModel[]) => {\n if (jobs && jobs.length > 0 && e.properties && e.properties.jobId && e.properties.jobPathId) {\n const index: number = jobs.findIndex(x => x.id === e.properties.jobId);\n let jobpathName: string = '';\n if (this.props.remainingJobPath && (e.properties.jobPathId.toString() === Guid.EMPTY || e.properties.jobPathId === this.props.remainingJobPath.id))\n { \n jobpathName = this.props.remainingJobPath.name;\n }\n else \n {\n const jobPath = this.props.jobPaths?.find(jp => equals(jp.id, e.properties.jobPathId));\n if (jobPath !== undefined)\n jobpathName = jobPath.name;\n }\n\n if (index > -1) \n {\n let job = jobs[index];\n job.filterOption = this.props.filterOption;\n if(this.props.filterOption !== \"companies\")\n {\n this.setState({\n showModal: !this.state.showModal,\n selectedJobFromMap: job,\n jobPathTitleForModal: jobpathName,\n indexOfJobInJobs: index,\n });\n } else {\n this.setState({\n showCompany: !this.state.showCompany,\n selectedJobFromMap: job,\n jobPathTitleForModal: jobpathName,\n indexOfJobInJobs: index,\n });\n }\n }\n }\n }\n\n openModal = (e: any) => {\n if(this.props.filterOption !== \"companies\")\n {\n this.setState({\n showModal: !this.state.showModal,\n });\n } else {\n this.setState({\n showCompany: !this.state.showCompany,\n });\n }\n }\n\n closeModal = () => {\n if(this.props.filterOption !== \"companies\")\n {\n this.setState({\n showModal: !this.state.showModal,\n });\n } else {\n this.setState({\n showCompany: !this.state.showCompany,\n });\n }\n }\n\n handleAddJobOrder = (isCompany: boolean) => {\n setTimeout(() => {\n this.setState({\n showModal: false,\n showCompany: false,\n });\n this.props.setAddedOrPinnedJob(true);\n }, 50);\n const jobpathID: Guid = this.state.selectedJobFromMap?.jobPathId?.toString() === Guid.EMPTY && !isObjEmpty(this.props.remainingJobPath) ? this.props.remainingJobPath?.id : this.state.selectedJobFromMap?.jobPathId;\n this.props.addJobOnJobPathFilter(jobpathID, this.state.selectedJobFromMap, isCompany ? \"company\" : \"job\", (success) => {\n if (success)\n {\n TopToast(ToastIcon.SUCCESS).fire({\n title: 'Jobbet blev tilføjet succesfuldt.',\n backdrop: false,\n });\n setTimeout(() => {\n this.props.shouldFadeJobListIn(true);\n if (this.state.indexOfJobInJobs > -1) {\n this.props.removedIndexOfJobInList(this.state.indexOfJobInJobs);\n }\n this.props.AddJobToJobPath(this.state.selectedJobFromMap, this.props.filterOption !== \"companies\");\n if (this.state.selectedJobFromMap.isPinnedJob) {\n this.props.removePinnedJob(this.state.selectedJobFromMap);\n // setting addedOrPinnedJob to true because it will rerender and zoom out on map otherwice\n this.props.setAddedOrPinnedJob(true);\n this.setState({\n indexOfJobInJobs: -1,\n });\n }\n this.props.removeJobFromState(this.state.selectedJobFromMap);\n this.props.removeJobFromFilteredJobsInJobpath(this.state.selectedJobFromMap);\n setTimeout(() => {\n this.props.shouldFadeJobListIn(false);\n }, 400);\n \n }, 200); \n }\n else \n {\n TopToast(ToastIcon.ERROR).fire({\n title: 'Fejl! Jobbet blev ikke tilføjet korrekt.',\n backdrop: false,\n });\n }\n });\n }\n\n handleRemovePinnedJobFromNewestPlan = () => {\n if (this.state.selectedJobFromMap && this.state.selectedJobFromMap.id && this.state.selectedJobFromMap.jobPathId)\n {\n let pinnedJobsInJobPath: JobModel[] = [];\n if (this.props.remainingJobPath && this.props.remainingJobPath.id === this.state.selectedJobFromMap.jobPathId)\n {\n pinnedJobsInJobPath = [...this.props.remainingJobPath.pinnedJobs];\n if(pinnedJobsInJobPath && pinnedJobsInJobPath.length > 0)\n {\n const indexToRemove = pinnedJobsInJobPath.findIndex(j => j.id == this.state.selectedJobFromMap.id);\n if(indexToRemove > -1)\n {\n pinnedJobsInJobPath = [...pinnedJobsInJobPath.slice(0, indexToRemove), ...pinnedJobsInJobPath.slice(indexToRemove + 1)];\n }\n }\n }\n else \n {\n if(this.props.jobPaths && this.props.jobPaths.length > 0)\n {\n let jobPath = this.props.jobPaths.find(j => j.id == this.state.selectedJobFromMap.jobPathId);\n if(jobPath != undefined)\n {\n pinnedJobsInJobPath = [...jobPath.pinnedJobs];\n if(pinnedJobsInJobPath && pinnedJobsInJobPath.length > 0)\n {\n const indexToRemove = pinnedJobsInJobPath.findIndex(j => j.id == this.state.selectedJobFromMap.id);\n if(indexToRemove > -1)\n {\n pinnedJobsInJobPath = [...pinnedJobsInJobPath.slice(0, indexToRemove), ...pinnedJobsInJobPath.slice(indexToRemove + 1)];\n }\n }\n }\n }\n }\n \n this.props.postPinnedJobIdsToNewestMyPlan(this.props.citizenID, pinnedJobsInJobPath, this.state.selectedJobFromMap, this.state.indexOfJobInJobs);\n }\n \n }\n\n handleAddPinnedJobToNewestPlan = () => {\n if (this.state.selectedJobFromMap && this.state.selectedJobFromMap.id && this.state.selectedJobFromMap.jobPathId)\n {\n let pinnedJobsInJobPath: JobModel[] = [];\n \n let tempJob: JobModel = {...this.state.selectedJobFromMap};\n // If jobid is Guid.Empty its remaining jobpath jobs.\n if (this.props.remainingJobPath && tempJob.jobPathId?.toString() === Guid.EMPTY)\n {\n tempJob = {\n ...tempJob,\n jobPathId: this.props.remainingJobPath.id\n };\n }\n\n if (this.props.remainingJobPath && this.props.remainingJobPath.id === tempJob.jobPathId)\n {\n pinnedJobsInJobPath = [...this.props.remainingJobPath.pinnedJobs, tempJob];\n }\n else \n {\n if(this.props.jobPaths && this.props.jobPaths.length > 0)\n {\n let jobPath = this.props.jobPaths.find(j => j.id == this.state.selectedJobFromMap.jobPathId);\n if(jobPath != undefined)\n {\n pinnedJobsInJobPath = [...jobPath.pinnedJobs, this.state.selectedJobFromMap];\n }\n }\n }\n \n this.props.postPinnedJobIdsToNewestMyPlan(this.props.citizenID, pinnedJobsInJobPath, this.state.selectedJobFromMap, this.state.indexOfJobInJobs);\n\n }\n }\n \n handleToggleJobFromMyPlan = (event: any) => {\n this.setState({ showModal: false, showCompany: false});\n\n const jobpathID: Guid = this.state.selectedJobFromMap?.jobPathId?.toString() === Guid.EMPTY && !isObjEmpty(this.props.remainingJobPath) ? this.props.remainingJobPath?.id : this.state.selectedJobFromMap?.jobPathId;\n this.props.pinJobOnJobPathFilter(jobpathID, this.state.selectedJobFromMap, this.props.filterOption === \"jobs\" ? \"job\" : \"company\", (success) => {\n if (success)\n {\n this.props.setAddedOrPinnedJob(true);\n if(!isObjEmpty(this.state.selectedJobFromMap))\n {\n if (this.state.selectedJobFromMap.isPinnedJob) {\n if(this.props.page == AgreementCategoryTitles.JOBINSPIRATION_PREPARATION) {\n this.handleRemovePinnedJobFromNewestPlan();\n } else {\n setTimeout(() => {\n this.props.shouldFadeJobListIn(true);\n if (this.state.indexOfJobInJobs > -1) {\n this.props.removedIndexOfJobInList(this.state.indexOfJobInJobs);\n }\n this.props.removePinnedJob(this.state.selectedJobFromMap);\n \n setTimeout(() => {\n this.props.shouldFadeJobListIn(false);\n }, 400);\n }, 200);\n }\n }\n else {\n if(this.props.page == AgreementCategoryTitles.JOBINSPIRATION_PREPARATION) {\n this.handleAddPinnedJobToNewestPlan();\n } else {\n setTimeout(() => {\n this.props.shouldFadeJobListIn(true);\n if (this.state.indexOfJobInJobs > -1) {\n this.props.removedIndexOfJobInList(this.state.indexOfJobInJobs);\n }\n let job = {...this.state.selectedJobFromMap};\n job.filterOption = this.props.filterOption;\n this.props.addPinnedJob(job);\n \n setTimeout(() => {\n this.props.shouldFadeJobListIn(false);\n }, 400);\n }, 200);\n }\n }\n }\n }\n else \n {\n TopToast(ToastIcon.ERROR).fire({\n title: `Fejl! Jobbet blev ikke ${this.state.selectedJobFromMap?.isPinnedJob ? 'fjernet' : 'tilføjet'} korrekt.`,\n backdrop: false,\n });\n }\n });\n\n \n }\n\n handleOnHoverJob = (id: string) => {\n this.props.addJobIdOnHover(id);\n }\n\n handlePinnedOrAddedJobInMapView = (pinnedOrAddedJob: boolean) => {\n this.props.setAddedOrPinnedJob(pinnedOrAddedJob);\n }\n\n modalResponseError = () => {\n this.setState({\n showModal: false,\n showCompany: false,\n });\n\n swal({\n title: 'Fejl opstod ved fremvisning af jobbets beskrivelse',\n icon: 'error',\n timer: 3000,\n buttons: [false],\n closeOnClickOutside: true,\n });\n }\n\n handleDateSortingAsc = (a: Date, b: Date) => {\n let tempA: Date = new Date(a);\n let tempB: Date = new Date(b);\n return tempA > tempB ? -1 : tempA < tempB ? 1 : 0;\n }\n\n filterJobsOnChosenDropDown = (jobs: JobModel[], pinnedJobs: JobModel[], notPinnedJobs: JobModel[]): JobModel[] => {\n let jobsToDisplay: JobModel[] = [];\n switch (this.props.chosenSortFilter) {\n case \"Deadline\": {\n return jobsToDisplay?.concat(pinnedJobs?.sort((a, b) => this.handleDateSortingAsc(a?.deadline, b?.deadline)))?.concat(notPinnedJobs?.sort((a, b) => this.handleDateSortingAsc(a?.deadline, b?.deadline)));\n }\n\n case \"Oprettelsesdato\": {\n return jobsToDisplay?.concat(pinnedJobs?.sort((a, b) => this.handleDateSortingAsc(a?.dateCreated, b?.dateCreated)))?.concat(notPinnedJobs?.sort((a, b) => this.handleDateSortingAsc(a?.dateCreated, b?.dateCreated)));\n }\n\n case \"Afstand\": {\n return jobsToDisplay?.concat(pinnedJobs?.sort((a, b) => a?.distance - b?.distance))?.concat(notPinnedJobs?.sort((a, b) => a?.distance - b?.distance));\n }\n\n case \"Stillingsbetegnelse\": {\n return jobsToDisplay?.concat(pinnedJobs?.sort((a, b) => a?.occupationId < b?.occupationId ? -1 : a?.occupationId > b?.occupationId ? 1 : 0))?.concat(notPinnedJobs?.sort((a, b) => a?.occupationId < b?.occupationId ? -1 : a?.occupationId > b?.occupationId ? 1 : 0));\n }\n\n case \"Jobspor\": {\n if(this.props.jobPaths && this.props.jobPaths.length > 0 && !this.props.shouldDisplayAllJobs)\n {\n if(pinnedJobs && pinnedJobs.length > 0)\n {\n for (let i = 0; i < this.props.jobPaths.length; i++)\n {\n if(this.props.jobPaths[i])\n jobsToDisplay = jobsToDisplay.concat(pinnedJobs.filter(pin => pin.jobPathId === this.props.jobPaths[i].id));\n }\n }\n \n if(notPinnedJobs && notPinnedJobs.length > 0)\n {\n for (let k = 0; k < this.props.jobPaths.length; k++)\n {\n if(this.props.jobPaths[k])\n jobsToDisplay = jobsToDisplay.concat(notPinnedJobs.filter(job => job.jobPathId === this.props.jobPaths[k].id));\n }\n }\n\n return jobsToDisplay;\n } else {\n return jobs;\n }\n \n }\n\n default: {\n return jobs;\n }\n }\n }\n\n handlePinnedJobs = (): JobModel[] => {\n let pinnedJobs: JobModel[] = [...this.props.pinnedJobs]\n if (this.props.filterOption === \"orders\" && pinnedJobs?.length > 0)\n pinnedJobs = pinnedJobs.filter(job => job?.filterOption === \"orders\");\n else if (this.props.filterOption === \"jobs\" && pinnedJobs?.length > 0)\n pinnedJobs = pinnedJobs.filter(job => job?.filterOption === \"jobs\");\n else if (this.props.filterOption === \"companies\" && pinnedJobs?.length > 0)\n pinnedJobs = pinnedJobs.filter(job => job?.filterOption === \"companies\");\n\n return pinnedJobs;\n }\n\n handleShowJobs = (): JobModel[] => {\n let pinnedJobs: JobModel[] = [...this.props.pinnedJobs];\n let jobs: JobModel[] = [];\n let jobsToReturn: JobModel[] = [];\n\n if(isEmptyOrUndefined(this.props.jobPaths) || this.props.jobPaths.length === 0 || this.props.shouldDisplayAllJobs || this.props.displayAllJobs !== undefined && this.props.displayAllJobs)\n {\n jobs = [...this.props.filteredAllJobs];\n }\n else\n {\n jobs = [...this.props.filteredJobs];\n }\n\n pinnedJobs = this.handlePinnedJobs();\n\n if (pinnedJobs && pinnedJobs.length > 0) {\n // Fjerner alle job fra jobs, der findes i pinnedJobs\n for (let i = 0; i < pinnedJobs.length; i++) {\n let indexToRemove = jobs?.findIndex(x => x.id === pinnedJobs[i]?.id);\n\n if (indexToRemove > -1) {\n jobs = [...jobs.slice(0, indexToRemove), ...jobs.slice(indexToRemove + 1)];\n }\n }\n jobsToReturn = pinnedJobs.concat(jobs);\n } else if (jobs && jobs.length > 0) {\n jobsToReturn = jobs;\n }\n\n if (jobsToReturn && jobsToReturn.length > 0) {\n\n jobsToReturn = this.filterJobsOnChosenDropDown(jobsToReturn, this.props.filterOption !== \"companies\" ? pinnedJobs: [], jobs);\n }\n return jobsToReturn;\n }\n\n handleRedirectToSearchFilter = () => {\n // checking on the redirect in sessionstorage to avoid swal showing when redirecting to myplan after unauthorized login\n if (sessionStorage.getItem('redirectPathForMyList') == null)\n {\n if (this.props.jobPaths?.length === 0 && document.getElementsByClassName(\"jobpath-creational-swal\")?.length === 0)\n {\n jobpathSwal.fire().then((result: any) => {\n if (result.value) \n {\n this.setState({\n redirectToSearchFilter: true\n })\n }\n });\n }\n }\n }\n\n render() {\n const isMobile: boolean = this.props.windowInnerWidth <= 550;\n\n if(this.state.redirectToSearchFilter){\n return \n }\n\n const notPinnedJob = require('../../images/PinnedJobsTransparrent.svg');\n const pinnedJob = require('../../images/PinnedJobsFull.svg');\n let faIcon;\n\n if (this.state.selectedJobFromMap.isPinnedJob) {\n faIcon = ;\n }\n else {\n faIcon = ;\n }\n\n let pinnedJobs: JobModel[] = this.handlePinnedJobs();\n\n return (\n \n
    0 && this.props.personMembership !== UnemploymentFundMembershipType.NotAMember ? \"search-job-scene-wrapper\" : \"search-job-scene-wrapper height-no-footer\"}>\n {!isMobile\n ?\n
    \n \n
    \n : null}\n {this.props.onlyDisplayMap === undefined || !this.props.onlyDisplayMap\n ? \n
    \n \n
    \n : null}\n\n {isMobile && this.props.onlyDisplayMap || !isMobile\n ?\n
    \n this.handleClickedMarker(e, this.state.jobs)}\n jobs={this.state.jobs}\n sourceType=\"jobs\"\n personAddress={this.props.personGeoData != null ? new AddressModel('', '', '', '', '', '', '', this.props.personGeoData) : new AddressModel('', '', '', '', '', '', '', new GeoPoint(0, 0))}\n setHoverId={this.handleOnHoverJob}\n isCurrentlyShowingJobs={this.props.filterOption !== \"companies\"}\n pinnedAddedOrRemovedJob={this.props.addedOrPinnedJob}\n setPinnedAddedOrRemovedJob={(pinnedOrAddedJob: boolean) => this.handlePinnedOrAddedJobInMapView(pinnedOrAddedJob)} />\n
    \n : null}\n
    \n {this.props.filterOption !== \"companies\"\n ?\n this.handleToggleJobFromMyPlan(e)} pinImage={faIcon} jobPathTitle={this.state.jobPathTitleForModal} addJobToJobPath={() => this.handleAddJobOrder(false)} openModal={this.state.showModal} closeModal={() => this.closeModal()} jobId={this.state.selectedJobFromMap.id} imageId={this.state.selectedJobFromMap.imageId} isViregoOrder={this.state.selectedJobFromMap?.isViregoOrder} />\n :\n this.closeModal()} addJobToJobPath={() => this.handleAddJobOrder(true)} removeJobFromJobPath={() => {}} shouldAddJob={true} shouldRemoveJob={false} />\n }\n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SearchJobScene);","export enum _Text {\n AddNewJobpath = 'Opret søgefilter',\n CONTRACT = 'CONTRACT',\n CV = 'CV',\n CitizenAcceptChangesAndAgreementsAddedToMyPlan = 'CitizenAcceptChangesAndAgreementsAddedToMyPlan',\n CitizenInformedAboutChangesAndAgreementsAddedToMyPlan = 'CitizenInformedAboutChangesAndAgreementsAddedToMyPlan',\n CitizenWithEnteredCPRNotFound = 'CitizenWithEnteredCPRNotFound',\n Description = 'Description',\n Education = 'Education',\n EducationLocation = 'EducationLocation',\n EndDate = 'EndDate',\n EnteredCPRIsInvalid = 'EnteredCPRIsInvalid',\n Experience = 'Experience',\n OtherExperiences = 'OtherExperiences',\n SEARCHCITIZEN = 'SEARCHCITIZEN',\n JOBPATH = 'JOBPATH',\n Level = 'Level',\n PageNotFound = 'PageNotFound',\n Profile = 'Profile',\n Qualifications = 'Qualifications',\n SCREENING = 'SCREENING',\n SEARCHJOB = 'Jobs',\n SaveAndAddToAgreement = 'SaveAndAddToAgreement',\n StartDate = 'StartDate',\n Title = 'Title',\n SaveMyPlan = 'SaveMyPlan',\n DriverLicense = 'DriverLicense',\n Language = 'Language'\n}\n","export enum JobOpportunities {\n LessGoodJobOppurtunities,\n GoodJobOppurtunities,\n LackOfLabour,\n Paradox,\n ComprehensiveLackOfLabour\n}\n\n\nexport class OccupationOpportunityModel {\n pId: number;\n id: number;\n name: string;\n area: string;\n opportunity: JobOpportunities;\n conceptUriDa: string;\n constructor(pId: number, id: number, name: string, area: string, opportunity: JobOpportunities, conceptUriDa: string) {\n this.pId = pId;\n this.id = id;\n this.name = name;\n this.area = area;\n this.opportunity = opportunity;\n this.conceptUriDa = conceptUriDa;\n }\n}\n\nexport default OccupationOpportunityModel;\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppState } from '../../store';\nimport { JobPathActionTypes } from '../../store/JobPathList/types';\nimport './Tag.scss'\nimport { convertFirstLetterToUppercase } from '../../helpers/FormatStrings';\nimport { JobOpportunities } from '../../models/OccupationOpportunityModel';\n\ninterface OwnProps {\n tagName: string;\n tagId: number | string;\n addOrRemoveTag?: (e: React.MouseEvent, id: number | string) => void;\n isOnCV?: boolean;\n jobOppurtunities: JobOpportunities | null;\n shouldAddTag?: boolean;\n isValidTag?: boolean;\n}\n\ninterface StateProps {\n}\n\ninterface DispatchProps {\n\n}\n\nfunction mapStateToProps(state: AppState, ownProps: OwnProps): DispatchProps {\n return {};\n}\n\nfunction mapDispatchToProps(\n dispatch: ThunkDispatch\n): DispatchProps {\n return {\n\n };\n}\n\ntype Props = StateProps & DispatchProps & OwnProps;\n\ninterface State {\n //for internal state field within this component.\n}\n\nclass Tag extends React.Component {\n public static defaultProps = {\n isOnCV: false\n }\n\n handleGoodOrBadOccupationsToDisplay = () => {\n switch (this.props.jobOppurtunities) {\n case JobOpportunities.LessGoodJobOppurtunities: {\n return require('../../images/red-arrow-downwards.svg');\n }\n case JobOpportunities.GoodJobOppurtunities: {\n return require('../../images/yellow-line-icon.svg');\n }\n case JobOpportunities.LackOfLabour: {\n return require('../../images/green-arrow-upwards.svg');\n }\n case JobOpportunities.Paradox: {\n return require('../../images/green-arrow-upwards.svg');\n }\n case JobOpportunities.ComprehensiveLackOfLabour: {\n return require('../../images/green-arrow-upwards.svg');\n }\n\n default:\n break;\n }\n }\n\n render() {\n let tagIcon;\n\n if (this.props.shouldAddTag !== undefined && this.props.shouldAddTag) {\n tagIcon = require('../../images/add-plus-icon.svg');\n }\n else {\n tagIcon = require('../../images/removeTagIcon.png');\n }\n\n let greyOutClassEnabled = false;\n\n if(this.props.isValidTag !== undefined && !this.props.isValidTag)\n greyOutClassEnabled = true;\n\n return [\n
    \n {this.props.jobOppurtunities !== null ? {convertFirstLetterToUppercase(this.props.tagName)} : {convertFirstLetterToUppercase(this.props.tagName)}}\n
    {\n this.props.addOrRemoveTag &&\n }\n
    \n ];\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Tag);\n","import * as React from 'react';\nimport JobPathModel, { JobPathType } from '../../models/JobPathModel';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { JobPathActionTypes } from '../../store/JobPathList/types';\nimport { connect } from 'react-redux';\nimport { _Text } from '../../i18n/translations';\nimport { AppState } from '../../store';\nimport './JobPath.scss'\nimport Tag from '../Tag';\nimport { jobPathImages } from '../../helpers/ImageHelper';\nimport { Guid } from 'guid-typescript';\nimport JobLogEntryModel, { JobSearchStatus } from '../../models/JobLogEntryModel';\nimport { isEmptyOrUndefined } from '../../helpers/TypeChecks';\nimport './JobPath.scss';\nimport { convertToDayDateMonthYear, formatDateToDanishSignature } from '../../helpers/DateHelper';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faChevronDown } from '@fortawesome/free-solid-svg-icons';\n\ninterface OwnProps {\n jobPath: JobPathModel;\n onJobPathClick: (e: React.MouseEvent, id: Guid) => void;\n className: string;\n}\n\ninterface LinkStateProps {\n joblogEntries: JobLogEntryModel[];\n tempJobLogs: JobLogEntryModel[];\n windowInnerWidth: number;\n}\n\ninterface LinkDispatchProps {\n\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n joblogEntries: state.citizen.citizen.jobLog,\n tempJobLogs: state.myPlanMeeting.tempJobLogList,\n windowInnerWidth: state.searchJob.windowInnerWidth,\n});\n\nfunction mapDispatchToProps(\n dispatch: ThunkDispatch\n): LinkDispatchProps {\n return {\n\n };\n}\n\ninterface State {\n\n}\n\ntype Props = LinkStateProps & LinkDispatchProps & OwnProps;\n\nclass JobPath extends React.Component {\n constructor(props: any) {\n super(props);\n this.state = {\n\n };\n }\n\n handleSearchedJobsAndMeetingsCountInJobPath = (): {searchedCount: number, meetingsCount: number, potentialCount: number} => {\n let searchedCount: number = 0;\n let meetingsCount: number = 0;\n let potentialCount: number = 0;\n\n if (this.props.jobPath)\n {\n if (this.props.tempJobLogs && this.props.tempJobLogs.length > 0)\n {\n for (let i = 0; i < this.props.tempJobLogs.length; i++)\n {\n if (this.props.tempJobLogs[i] && this.props.tempJobLogs[i].jobPathID === this.props.jobPath.id)\n {\n if (this.props.tempJobLogs[i].jobSearchStatus === JobSearchStatus.Searched)\n {\n searchedCount++;\n }\n\n if (this.props.tempJobLogs[i].jobSearchStatus === JobSearchStatus.Meeting)\n {\n meetingsCount++;\n }\n }\n }\n }\n\n if (this.props.jobPath.pinnedJobs && this.props.jobPath.pinnedJobs.length > 0)\n potentialCount += this.props.jobPath.pinnedJobs.length;\n\n if (this.props.jobPath.jobs && this.props.jobPath.jobs.length > 0)\n potentialCount += this.props.jobPath.jobs.length;\n\n if (this.props.jobPath.companyJobs && this.props.jobPath.companyJobs.length > 0)\n potentialCount += this.props.jobPath.companyJobs.length;\n }\n\n\n return { searchedCount: searchedCount, meetingsCount: meetingsCount, potentialCount: potentialCount };\n \n }\n\n render() {\n const data: {searchedCount: number, meetingsCount: number, potentialCount: number} = this.handleSearchedJobsAndMeetingsCountInJobPath();\n const searchedJobsCount: number = data.searchedCount;\n const meetingsCount: number = data.meetingsCount;\n const potentialCount: number = data.potentialCount;\n\n return (\n
    ) => this.props.onJobPathClick(e, this.props.jobPath.id)}> {/* onClick={this.props.windowInnerWidth <= 550 ? () => this.openModal() : (e: React.MouseEvent) => this.props.onJobPathClick(e, this.props.jobPath.id)} */}\n
    \n
    \n\n \n\n \n\n \n
    \n
    \n {this.props.jobPath.type === JobPathType.NormalJobPath\n ?\n <>\n {this.props.jobPath.occupations && this.props.jobPath.occupations.map((occupation) => (\n \n ))}\n \n :\n <>\n {this.props.jobPath.areaOfSpecializations && this.props.jobPath.areaOfSpecializations.map((aos => (\n \n )))}\n \n }\n
    \n
    \n {this.props.jobPath.description}\n
    \n\n
    \n {/*
    \n
    \n {potentialCount}\n
    \n
    \n Potentielle\n
    \n
    */}\n {/* Removed for Jobportal */}\n {/*
    \n
    \n {searchedJobsCount}\n
    \n
    \n Søgte\n
    \n
    \n
    \n
    \n {meetingsCount}\n
    \n
    \n Samtaler\n
    \n
    */}\n
    \n
    \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(JobPath);\n","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ThunkDispatch } from 'redux-thunk';\nimport JobPath from '../../JobPath';\nimport './JobPathList.scss';\n\nimport { JobPathActionTypes } from '../../../store/JobPathList/types';\n//models\nimport JobPathModel from '../../../models/JobPathModel';\n\n//store\nimport { AppState } from '../../../store/index';\nimport { _Text } from '../../../i18n/translations';\nimport { Guid } from 'guid-typescript';\nlet addIcon = require('../../../images/addTagIcon.svg');\n\ninterface OwnProps {\n onJobPathClick: (e: React.MouseEvent, id: Guid) => void;\n addNewJobpath: (e: React.MouseEvent) => void;\n jobPaths: JobPathModel[];\n jobPathToShow: Guid;\n isMobile: boolean;\n}\n\ninterface StateProps {\n}\n\ninterface DispatchProps {\n}\n\nfunction mapStateToProps(state: AppState, ownProps: OwnProps): StateProps {\n const { jobPathList } = state;\n return { jobPaths: jobPathList.jobPaths };\n}\n\nfunction mapDispatchToProps(\n dispatch: ThunkDispatch\n): DispatchProps {\n return {\n\n };\n}\n\ntype Props = StateProps & DispatchProps & OwnProps;\n\ninterface State {\n //for internal state field within this component.\n}\n\nclass JobPathList extends React.Component {\n\n render() {\n const isMaxJobpathsCreated: boolean = this.props.jobPaths && this.props.jobPaths.length === 5 ? true : false;\n\n return [\n
    \n \n
    \n {this.props.jobPaths && this.props.jobPaths.map((jobPathElement, index) => (\n jobPathElement.isActive ?\n
    \n \n
    \n : null\n ))}\n
    \n
    \n ];\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(JobPathList);\n","import * as React from 'react';\nimport { Modal, OverlayTrigger, Tooltip } from 'react-bootstrap';\nimport { bindActionCreators } from 'redux';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { jobPathImages } from '../../helpers/ImageHelper';\nimport { isEmptyOrUndefined } from '../../helpers/TypeChecks';\nimport { JobDisplayModel } from '../../models/JobDisplayModel';\nimport { AppState } from '../../store';\nimport { AppActions } from '../../store/AppActions';\nimport { fetchSingleJobToDisplay, clearJobToDisplay } from '../../store/Jobs/actions';\nimport { connect } from \"react-redux\";\nimport './ModalForJobInJobPathView.scss';\nimport ButtonWithRoundedEdges from '../Buttons/ButtonWithRoundedEdges';\nimport CloseButton from '../Buttons/CloseButton';\nimport DsaButton from '../DsaButton';\n\ninterface Prop {\n jobId: string;\n imageId: number;\n jobPathTitle: string;\n openModal: boolean;\n closeModal: (e: React.MouseEvent) => void;\n removeJobFromJobpath: (e: React.MouseEvent) => void;\n}\n\ninterface State {\n hasBeenCalled: boolean;\n}\n\ninterface LinkStateProp {\n jobToDisplay: JobDisplayModel;\n}\n\ninterface LinkDispatchProps {\n fetchSingleJobToDisplay: (jobID: string) => void;\n clearJobToDisplay: () => void;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n fetchSingleJobToDisplay: bindActionCreators(fetchSingleJobToDisplay, dispatch),\n clearJobToDisplay: bindActionCreators(clearJobToDisplay, dispatch),\n});\n\nconst mapStateToProps = (state: AppState): LinkStateProp => ({\n jobToDisplay: state.jobs.jobToDisplay\n});\n\ntype Props = Prop & LinkStateProp & LinkDispatchProps;\n\nclass ModalForJobInJobPathView extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = { hasBeenCalled: false };\n }\n\n componentDidMount() {\n if (!isEmptyOrUndefined(this.props.jobId) && this.props.openModal) {\n this.props.fetchSingleJobToDisplay(this.props.jobId);\n }\n }\n\n redirectButtonClicked = (e: React.MouseEvent) => {\n window.open(this.props.jobToDisplay.url, \"_blank\");\n }\n\n\n displayWorkHours = () => {\n let displayStr = this.props.jobToDisplay.jobType;\n\n if (this.props.jobToDisplay.workHoursPerWeekMin > 0 && this.props.jobToDisplay.workHoursPerWeekMax > 0)\n displayStr += ' (' + this.props.jobToDisplay.workHoursPerWeekMin + ' - ' + this.props.jobToDisplay.workHoursPerWeekMax + ' timer)'\n\n\n return displayStr;\n }\n\n renderTooltip = (tooltip: string): JSX.Element => {\n return (\n \n

    \n
    \n );\n }\n\n displayContactInformation = () => {\n let displayStr;\n\n if (!isEmptyOrUndefined(this.props.jobToDisplay.contactFirstname)) {\n displayStr = this.props.jobToDisplay.contactFirstname;\n\n if (!isEmptyOrUndefined(this.props.jobToDisplay.contactLastname))\n displayStr += ' ' + this.props.jobToDisplay.contactLastname;\n\n displayStr += ' - ';\n }\n\n if (!isEmptyOrUndefined(this.props.jobToDisplay.contactPhone))\n displayStr += this.props.jobToDisplay.contactPhone + ' - ';\n\n if (!isEmptyOrUndefined(this.props.jobToDisplay.contactEmail))\n displayStr += this.props.jobToDisplay.contactEmail\n return displayStr;\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n if (!isEmptyOrUndefined(this.props.jobId) && this.props.jobId !== prevProps.jobId && this.props.openModal && !this.state.hasBeenCalled) {\n this.setState({ hasBeenCalled: true });\n this.props.fetchSingleJobToDisplay(this.props.jobId);\n } else if (!isEmptyOrUndefined(prevProps.jobId) && !isEmptyOrUndefined(this.props.jobId) && this.props.openModal && !this.state.hasBeenCalled) {\n this.setState({ hasBeenCalled: true });\n this.props.fetchSingleJobToDisplay(this.props.jobId);\n } else if (prevState.hasBeenCalled && prevProps.openModal && !this.props.openModal) {\n this.props.clearJobToDisplay();\n this.setState({ hasBeenCalled: false });\n }\n }\n\n redirectToDSAWithJob = () => {\n if (!isEmptyOrUndefined(this.props.jobToDisplay?.title))\n window.open(`https://dsa.dk/karriere-og-jobsogning?jobid=${this.props.jobToDisplay?.id}&title=${encodeURIComponent(this.props.jobToDisplay?.title)}`, \"_blank\");\n else\n window.open(`https://dsa.dk/karriere-og-jobsogning?jobid=${this.props.jobToDisplay?.id}`, \"_blank\");\n }\n\n render() {\n let jobPathLogo;\n let workHoursToDisplay;\n let contactInformationToDisplayStr;\n let contactInformationElement;\n let jobAddressElement;\n\n if (this.props.jobToDisplay && Object.keys(this.props.jobToDisplay).length > 0) {\n jobPathLogo = jobPathImages[this.props.imageId];\n\n workHoursToDisplay = this.displayWorkHours();\n\n contactInformationToDisplayStr = this.displayContactInformation();\n\n if (!isEmptyOrUndefined(contactInformationToDisplayStr))\n contactInformationElement =

    KontaktInformationer: {contactInformationToDisplayStr}

    \n\n if (!isEmptyOrUndefined(this.props.jobToDisplay.workPlaceAddress))\n jobAddressElement =

    Adresse: {this.props.jobToDisplay.workPlaceCity + ' ' + this.props.jobToDisplay.workPlacePostalCode + ' - ' + this.props.jobToDisplay.workPlaceAddress}

    ;\n } else {\n // no answer yet from api\n return null;\n }\n return (\n \n \n \n \n

    {this.props.jobPathTitle}

    \n
    \n \n \n
    \n
    \n
    \n \n
    \n

    {this.props.jobToDisplay.title}

    \n {!isEmptyOrUndefined(this.props.jobToDisplay.companyName) ? ({this.props.jobToDisplay.companyName}) : null}
    \n {jobAddressElement}\n

    Stillingsbetegnelse: {this.props.jobToDisplay.occupationName}

    \n

    Arbejdstid: {workHoursToDisplay}

    \n {contactInformationElement}
    \n
    \n {this.props.jobToDisplay.isExternal ? (\n
    \n
    \n
    \n ) :\n
    \n }\n
    \n \n
    \n \n Få hjælp til et udkast ved brug af kunstig intelligens her.')}>\n
    \n this.redirectToDSAWithJob()} />\n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ModalForJobInJobPathView);","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { bindActionCreators } from 'redux';\nimport { AppActions } from '../../store/AppActions';\nimport { AppState } from '../../store';\nimport JobPathModel, { JobPathType, isJobPathSaved } from '../../models/JobPathModel';\nimport './JobPathView.scss';\nimport QualificationModel from '../../models/QualificationModel';\n// import 'semantic-ui-css/semantic.min.css'\nimport { startUpdateJobPath, startDeleteJobPath, removeJobFromJobpath, AddJobToJobPath, addPinnedJob, removePinnedJob } from '../../store/JobPathList/actions';\nimport MapView from '../MapView';\nimport OccupationOpportunityModel from '../../models/OccupationOpportunityModel';\nimport Tag from '../Tag';\nimport IndustryModel from '../../models/IndustryModel';\nimport JobModel from '../../models/JobModel';\nimport MoreMenu from '../Dropdown/MoreMenu';\nimport swal2 from 'sweetalert2';\nimport withReactContent from 'sweetalert2-react-content';\nimport SearchList from '../SearchList';\nimport '../../../node_modules/bootstrap';\nimport ModalForJobInJobPathView from '../ModalForJobInJobPathView';\nimport { Guid } from 'guid-typescript';\nimport { addQualificationAgreement, handleShouldRemoveQualificationAgreement } from \"../../store/Agreement/actions\";\nimport QualificationAgreementModel from '../../models/Agreement/QualificationAgreementModel';\nimport { getOccupationsFromQualfications, fetchSimilarQualifications, removeJobFromState, setDisplayLoader } from '../../store/Jobs/actions';\nimport { RegionModel } from '../../models/RegionModel';\nimport CitizenModel from '../../models/CitizenModel';\nimport { QueryFilter } from '../../models/QueryFilter';\nimport { checkQueryObjectFilters } from '../../store/Jobs/actions';\nimport { isEmptyOrUndefined, isObjEmpty } from '../../helpers/TypeChecks';\nimport ModalForShowJobDescription from '../ModalForShowJobDescription';\nimport swal from \"sweetalert\";\nimport AddressModel from '../../models/AddressModel';\nimport ModalToDisplayCompany from '../ModalToDisplayCompany';\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport { ToastIcon, TopToast } from '../../helpers/ToastHelper';\nimport { createLocaleDate } from '../../helpers/DateHelper';\nimport DsaButton from '../DsaButton';\nimport { SearchListModel } from '../../models/SearchListModel';\nimport JobMatchTemplateModel from '../../models/Template/JobMatchTemplateModel';\nimport DSADataModel from '../../models/DSADataModel';\nimport { dsaData } from '../../helpers/DSADataHelper';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faArrowLeft, faPen } from '@fortawesome/free-solid-svg-icons';\nimport { addJobOnJobPathFilter, deleteJobOnJobPathFilter, pinJobOnJobPathFilter, putJobPathFilters } from '../../store/Person/actions';\nimport GeoPoint from '../../models/GeoPoint';\nimport { Prompt } from 'react-router';\n\ninterface OwnProps {\n jobPath: JobPathModel;\n qualifications: QualificationModel[];\n occupations: OccupationOpportunityModel[];\n industries: IndustryModel[];\n jobPathList: JobPathModel[] | null;\n mobileEditJobPath: boolean;\n onMobileBackArrowClick?: () => void;\n onMobileDeleteJobpath?: () => void;\n isMobile: boolean;\n}\n\ninterface StateProps {\n qualificationsFromCV: QualificationModel[];\n qualificationAgreements: QualificationAgreementModel[];\n citizen: CitizenModel;\n jobBarometerUrl: string;\n pinnedJobs: JobModel[];\n jobPaths: JobPathModel[];\n displayLoader: boolean;\n regions: RegionModel[];\n remainingJobPath: JobPathModel;\n personGeoData: GeoPoint | null;\n}\n\ninterface DispatchProps {\n startUpdateJobPath: (jobpath: JobPathModel) => void;\n startDeleteJobPath: (jobpath: JobPathModel) => void;\n removeJobFromJobpath: (jobId: string, jobPathId: Guid) => void\n addQualificationAgreement: (qualificationAgreement: QualificationAgreementModel) => void;\n getOccupationsFromQualfications: (qualfications: QualificationModel[], jobpathID: Guid) => void;\n fetchSimilarQualifications: (qualifications: QualificationModel[], jobpathID: Guid) => void;\n checkQueryObjectFilters: (jobPath: JobPathModel, region: RegionModel[], citizen: CitizenModel, jobPahts: JobPathModel[], queryFilters: QueryFilter[], \n distance: number, occupations: string[], isAllJobs:boolean, requestTime: Date, addConceptUriDas: boolean, onlyQueryJobs: boolean, callback: (success: boolean) => void) => void;\n addPinnedJob: (job: JobModel) => void;\n removePinnedJob: (job: JobModel) => void;\n AddJobToJobPath: (job: JobModel, isShowingJobs: boolean) => void;\n removeJobFromState: (job: JobModel) => void;\n handleShouldRemoveQualificationAgreement: (qualificationID: number, jobPaths: JobPathModel[]) => void;\n setDisplayLoader: (load: boolean) => void;\n addJobOnJobPathFilter: (jobPathID: Guid, job: JobModel, jobType: \"job\" | \"order\" | \"company\", callback: (success: boolean) => void) => void;\n deleteJobOnJobPathFilter: (jobPathID: Guid, job: JobModel, jobType: \"job\" | \"order\" | \"company\", callback: (success: boolean) => void) => void;\n putJobPathFilters: (jobPathFilters: JobPathModel[]) => void;\n pinJobOnJobPathFilter: (jobPathID: Guid, job: JobModel, jobType: \"job\" | \"order\" | \"company\", callback: (success: boolean) => void) => void;\n}\n\n\nconst mapStateToProps = (state: AppState): StateProps => ({\n qualificationsFromCV: state.citizen && state.citizen.citizen && state.citizen.citizen.cv && state.citizen.citizen.cv.qualifications ? state.citizen.citizen.cv.qualifications : [],\n qualificationAgreements: state.agreement.qualificationAgreements,\n citizen: state.citizen.citizen,\n jobBarometerUrl: state.citizen.jobBaroMeterUrl,\n pinnedJobs: state.jobPathList.pinnedJobs,\n jobPaths: state.jobPathList.jobPaths,\n displayLoader: state.jobs.displayLoader,\n regions: state.searchJob.regions,\n remainingJobPath: state.jobPathList.remainingJobPath,\n personGeoData: state.person.personGeoData,\n});\n\nfunction mapDispatchToProps(\n dispatch: ThunkDispatch\n): DispatchProps {\n return {\n startUpdateJobPath: bindActionCreators(startUpdateJobPath, dispatch),\n startDeleteJobPath: bindActionCreators(startDeleteJobPath, dispatch),\n removeJobFromJobpath: bindActionCreators(removeJobFromJobpath, dispatch),\n addQualificationAgreement: bindActionCreators(addQualificationAgreement, dispatch),\n getOccupationsFromQualfications: bindActionCreators(getOccupationsFromQualfications, dispatch),\n fetchSimilarQualifications: bindActionCreators(fetchSimilarQualifications, dispatch),\n checkQueryObjectFilters: bindActionCreators(checkQueryObjectFilters, dispatch),\n addPinnedJob: bindActionCreators(addPinnedJob, dispatch),\n removePinnedJob: bindActionCreators(removePinnedJob, dispatch),\n AddJobToJobPath: bindActionCreators(AddJobToJobPath, dispatch),\n removeJobFromState: bindActionCreators(removeJobFromState, dispatch),\n handleShouldRemoveQualificationAgreement: bindActionCreators(handleShouldRemoveQualificationAgreement, dispatch),\n setDisplayLoader: bindActionCreators(setDisplayLoader, dispatch),\n addJobOnJobPathFilter: bindActionCreators(addJobOnJobPathFilter, dispatch),\n deleteJobOnJobPathFilter: bindActionCreators(deleteJobOnJobPathFilter, dispatch),\n putJobPathFilters: bindActionCreators(putJobPathFilters, dispatch),\n pinJobOnJobPathFilter: bindActionCreators(pinJobOnJobPathFilter, dispatch),\n };\n}\n\ntype Props = StateProps & DispatchProps & OwnProps;\n\ninterface State {\n //for internal state field within this component.\n edit: boolean;\n jobpathView: boolean;\n qualificationPopoutVisible: boolean;\n occupationPopoutVisible: boolean;\n industryPopoutVisible: boolean;\n tempJobPath: JobPathModel;\n showModalAddedJobs: boolean;\n showModalMapJobs: boolean;\n job: JobModel;\n shouldCloseMenu: boolean | undefined;\n selectedJobFromMap: JobModel;\n citizenAddress: AddressModel;\n filteredJobs: JobModel[];\n jobsAddedToJobPath: JobModel[];\n shouldFitbounds: boolean;\n chosenSortForSavedJobs: string;\n savedJobsSortList: string[];\n showCompanyModal: boolean;\n pinnedAddedOrRemovedJob: boolean;\n dsaData: DSADataModel[];\n dsaSearchListItem: { professions: SearchListModel[], workAreas: SearchListModel[], areaOfSpecializations: SearchListModel[] };\n}\n\n\nclass JobPathView extends React.PureComponent {\n constructor(props: any) {\n super(props);\n this.state = {\n edit: this.props.jobPath && this.props.jobPath.name === \"\" ? true : false,\n jobpathView: true,\n qualificationPopoutVisible: false,\n occupationPopoutVisible: false,\n industryPopoutVisible: false,\n tempJobPath: { ...this.props.jobPath },\n showModalAddedJobs: false,\n showModalMapJobs: false,\n job: {} as JobModel,\n shouldCloseMenu: false,\n selectedJobFromMap: {} as JobModel,\n citizenAddress: this.props.citizen && this.props.citizen.address && {\n city: this.props.citizen.address.city && this.props.citizen.address.city,\n number: this.props.citizen.address.number && this.props.citizen.address.number,\n streetName: this.props.citizen.address.streetName && this.props.citizen.address.streetName,\n zipCode: this.props.citizen.address.zipCode && this.props.citizen.address.zipCode,\n country: this.props.citizen.address.country && this.props.citizen.address.country,\n floorIdentifier: this.props.citizen.address.floorIdentifier && this.props.citizen.address.floorIdentifier,\n suiteIdentifier: this.props.citizen.address.suiteIdentifier && this.props.citizen.address.suiteIdentifier,\n location: {\n latitude: this.props.citizen.latitude && this.props.citizen.latitude,\n longitude: this.props.citizen.longitude && this.props.citizen.longitude,\n }\n },\n filteredJobs: [],\n jobsAddedToJobPath: [],\n shouldFitbounds: false,\n chosenSortForSavedJobs: '',\n savedJobsSortList: ['Alle', 'Potentielle', 'Søgte', 'Samtaler'],\n showCompanyModal: false,\n pinnedAddedOrRemovedJob: false,\n dsaData: dsaData,\n dsaSearchListItem: this.handleSetDSASearchListValues(dsaData),\n };\n }\n\n componentDidMount() {\n // if (this.props.jobPathList === null && !isObjEmpty(this.props.jobPath)) \n // this.handleRunQuery(this.props.jobPath);\n // else if (this.props.jobPathList !== null && this.props.jobPathList?.length > 0) \n // this.handleRunQuery(this.props.jobPathList[0]);\n if (this.props.jobPathList !== null) \n {\n const requestTime: Date = createLocaleDate();\n for (let i: number = 0; i < this.props.jobPathList.length; i++) {\n this.handleRunQuery(this.props.jobPathList[i], requestTime);\n }\n }\n else if (this.props.jobPathList === null && !isObjEmpty(this.props.jobPath)) \n {\n this.handleRunQuery(this.props.jobPath);\n }\n\n if (this.props.jobPath && (this.props.jobPath.jobs && this.props.jobPath.jobs.length > 0 || this.props.jobPath.companyJobs && this.props.jobPath.companyJobs.length > 0) && this.state.jobsAddedToJobPath.length === 0) {\n this.setState({\n jobsAddedToJobPath: this.handleJobAgreementsInMap(),\n });\n }\n\n this.setState({\n dsaSearchListItem: this.handleSetDSASearchListValues(dsaData),\n });\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n // if (prevProps.jobPath === undefined && this.props.jobPath !== undefined) \n // {\n // this.handleRunQuery(this.props.jobPath);\n // this.setState({\n // jobsAddedToJobPath: this.handleJobAgreementsInMap(),\n // });\n // }\n\n if (prevProps.jobPath !== undefined && this.props.jobPath !== undefined && prevProps.jobPath.id !== this.props.jobPath.id) {\n // changing jobpath to display and therefore need to fitbounds on mapview\n this.setState({\n shouldFitbounds: true,\n });\n\n if(this.props.jobPath.name == '')\n {\n this.setState({\n tempJobPath: this.props.jobPath,\n edit: true,\n });\n }\n\n // this.handleRunQuery(this.props.jobPath);\n }\n\n if (prevProps.jobPath && this.props.jobPath) \n {\n if (prevProps.jobPath?.jobs !== this.props.jobPath?.jobs) \n {\n if (prevProps.jobPath?.jobs?.length > this.props.jobPath?.jobs?.length) \n {\n this.setState({\n jobsAddedToJobPath: this.handleJobAgreementsInMap(),\n filteredJobs: this.handleJobsInMapToDisplay(),\n });\n } \n else \n {\n this.setState({\n jobsAddedToJobPath: this.handleJobAgreementsInMap(),\n });\n }\n } \n else if (prevProps.jobPath?.companyJobs !== this.props.jobPath?.companyJobs)\n {\n if (prevProps.jobPath?.companyJobs?.length > this.props.jobPath?.companyJobs?.length) \n {\n this.setState({\n jobsAddedToJobPath: this.handleJobAgreementsInMap(),\n filteredJobs: this.handleJobsInMapToDisplay(),\n });\n } \n else \n {\n this.setState({\n jobsAddedToJobPath: this.handleJobAgreementsInMap(),\n });\n }\n }\n \n if (prevProps.jobPath?.filteredJobs !== this.props.jobPath?.filteredJobs) \n {\n this.setState({\n filteredJobs: this.handleJobsInMapToDisplay(),\n });\n }\n\n\n if (prevProps.jobPath?.profession !== this.props.jobPath?.profession)\n {\n this.setState({\n dsaSearchListItem: {\n ...this.state.dsaSearchListItem,\n workAreas: this.handleGetWorkAreas(this.state.dsaData),\n areaOfSpecializations: this.handleGetAreaOfSpecialisation(this.state.dsaData),\n }\n });\n }\n\n if (prevProps.jobPath?.workAreas !== this.props.jobPath?.workAreas && prevProps.jobPath?.profession === this.props.jobPath?.profession)\n {\n this.setState({\n dsaSearchListItem: {\n ...this.state.dsaSearchListItem,\n workAreas: this.handleGetWorkAreas(this.state.dsaData),\n areaOfSpecializations: this.handleGetAreaOfSpecialisation(this.state.dsaData),\n }\n });\n }\n\n if (prevProps.jobPath?.areaOfSpecializations !== this.props.jobPath?.areaOfSpecializations && prevProps.jobPath?.profession === this.props.jobPath?.profession)\n {\n this.setState({\n dsaSearchListItem: {\n ...this.state.dsaSearchListItem,\n areaOfSpecializations: this.handleGetAreaOfSpecialisation(this.state.dsaData),\n }\n });\n }\n }\n\n if (prevProps.jobPath?.id !== this.props.jobPath?.id)\n {\n this.setState({\n dsaSearchListItem: this.handleSetDSASearchListValues(dsaData),\n });\n }\n\n // if jobpathview changes to saved jobs in jobpath, it will display filteredjobs as jobpath jobs, as normal icons without border.\n if (prevState.jobpathView !== this.state.jobpathView) {\n this.setState({\n filteredJobs: this.handleJobsInMapToDisplay(),\n jobsAddedToJobPath: this.handleJobAgreementsInMap(),\n shouldFitbounds: true,\n });\n }\n\n if (!prevState.shouldFitbounds && this.state.shouldFitbounds) {\n this.setState({\n shouldFitbounds: false\n });\n }\n\n if (prevProps.personGeoData !== this.props.personGeoData)\n {\n if (this.props.jobPathList !== null) \n {\n const requestTime: Date = createLocaleDate();\n for (let i: number = 0; i < this.props.jobPathList.length; i++) {\n this.handleRunQuery(this.props.jobPathList[i], requestTime);\n }\n }\n else if (this.props.jobPathList === null && !isObjEmpty(this.props.jobPath)) \n {\n this.handleRunQuery(this.props.jobPath);\n }\n }\n\n if (isObjEmpty(prevProps.jobPath) && !isObjEmpty(this.props.jobPath))\n {\n this.setState({\n dsaSearchListItem: this.handleSetDSASearchListValues(dsaData),\n });\n }\n }\n\n handleSetDSASearchListValues = (dsaData: DSADataModel[]): { professions: SearchListModel[], workAreas: SearchListModel[], areaOfSpecializations: SearchListModel[] } => {\n return {\n professions: dsaData?.map((x) => new SearchListModel(x?.Profession, x?.Profession)),\n workAreas: this.handleGetWorkAreas(dsaData),\n areaOfSpecializations: this.handleGetAreaOfSpecialisation(dsaData),\n }\n }\n\n deleteJobPathHandler = (event: any) => {\n this.setState({\n shouldCloseMenu: true,\n });\n \n const MySwal = withReactContent(swal2);\n MySwal.fire({\n title: 'Slet søgefilter',\n text: \"Er du sikker på, at du vil slette søgefilteret \" + this.props.jobPath?.name + \"? Du kan ikke fortryde det.\",\n confirmButtonText: 'Slet søgefilter',\n\n cancelButtonText: 'Annuller',\n showCancelButton: true,\n\n reverseButtons: true,\n\n customClass: {\n popup: 'swal-popup',\n container: 'swal-popup-customized',\n confirmButton: 'swal-customized-confirm swal-buttons',\n cancelButton: 'swal-customized-cancel swal-buttons'\n }\n\n }).then((result: any) => {\n if (result.isConfirmed) \n {\n this.props.startDeleteJobPath(this.props.jobPath);\n\n TopToast(ToastIcon.SUCCESS).fire({\n title: 'Søgefilteret er blevet slettet',\n backdrop: false,\n timer: 1250,\n });\n\n if (this.props.onMobileDeleteJobpath)\n this.props.onMobileDeleteJobpath();\n }\n });\n }\n\n editJobPathHandler = () => {\n this.setState({\n // edit: this.state.edit == false ? true : this.state.tempJobPath.id != this.props.jobPath.id ? true : false,\n edit: true,\n tempJobPath: { ...this.props.jobPath }\n })\n }\n\n saveTempJobPath() {\n let updateName = document.getElementById(\"update-jobpath-name\");\n\n if(this.state.tempJobPath?.name?.toLowerCase() !== 'øvrige')\n {\n let tempJobPath: JobPathModel;\n tempJobPath = { ...this.props.jobPath };\n tempJobPath.name = this.state.tempJobPath?.name;\n tempJobPath.description = this.state.tempJobPath?.description;\n if (!isJobPathSaved(tempJobPath))\n {\n tempJobPath.isSaved = true;\n this.handleRunQuery(tempJobPath);\n }\n this.props.startUpdateJobPath(tempJobPath);\n // this.editJobPathHandler();\n }\n else {\n TopToast(ToastIcon.WARNING).fire({\n title: '\"Øvrige\" er ikke et gyldigt jobagent navn',\n timer: 2500,\n backdrop: false,\n });\n }\n\n this.setState ({\n edit: false,\n })\n\n if(!updateName?.onclick) {\n {\n TopToast(ToastIcon.SUCCESS).fire({\n title: 'Søgefilteret er gemt',\n backdrop: false,\n timer: 1250,\n });\n }\n }\n }\n\n removeTag = (e: any, id: number | string, type: string) => {\n let tempJobPath: JobPathModel;\n tempJobPath = { ...this.props.jobPath };\n let shouldHandleRunQuery: boolean = false;\n //looking at input of the type of tag we want to remove\n\n switch (type) {\n case \"occupation\":\n tempJobPath.occupations = [...tempJobPath.occupations.filter(x => x.conceptUriDa !== id)];\n shouldHandleRunQuery = true;\n break;\n\n\n case \"qualification\":\n tempJobPath.qualifications = [...tempJobPath.qualifications.filter(x => x.id !== id)];\n this.props.handleShouldRemoveQualificationAgreement(id as number, this.props.jobPaths);\n\n // fetching similar qualifications from the qualification added.\n this.props.fetchSimilarQualifications(tempJobPath.qualifications, tempJobPath.id);\n // fetching occupations from jobpath qualifications and filtering it.\n this.props.getOccupationsFromQualfications(tempJobPath.qualifications, tempJobPath.id);\n if (tempJobPath.qualifications.length !== 0) {\n shouldHandleRunQuery = true;\n }\n else if (tempJobPath.qualifications.length === 0 && tempJobPath.occupations.length > 0) {\n shouldHandleRunQuery = true;\n } else if (tempJobPath.qualifications.length === 0 && tempJobPath.occupations.length === 0) {\n tempJobPath.filteredJobs = [];\n }\n\n break;\n\n case \"profession\":\n if (tempJobPath?.profession === id)\n {\n tempJobPath.profession = '';\n tempJobPath.workAreas = [];\n tempJobPath.areaOfSpecializations = [];\n tempJobPath.specializationKeywords = [];\n tempJobPath.occupations = [];\n }\n\n this.setState({\n dsaSearchListItem: {\n ...this.state.dsaSearchListItem,\n workAreas: [],\n areaOfSpecializations: [],\n }\n });\n\n if (this.props.jobPath?.profession?.toLowerCase() === 'akademiker')\n {\n tempJobPath.type = JobPathType.DSAJobPath;\n tempJobPath.occupations = [];\n }\n shouldHandleRunQuery = true;\n break;\n\n case \"workarea\":\n tempJobPath.workAreas = [...tempJobPath.workAreas.filter(x => x !== id)];\n let unwantedAOS: string[] = [];\n this.state.dsaData?.map((value) => {\n value?.WorkAreas?.map((workarea) => {\n workarea?.AreaOfSpecialisation?.map((aos) => {\n if (tempJobPath?.workAreas?.includes(workarea?.Title))\n unwantedAOS = [...unwantedAOS, aos.Title];\n })\n });\n });\n\n if (tempJobPath?.workAreas?.length > 0)\n {\n if (tempJobPath?.areaOfSpecializations?.length > 0)\n {\n tempJobPath.areaOfSpecializations = tempJobPath.areaOfSpecializations.filter(function (el) {\n return unwantedAOS.includes(el);\n });\n\n // If AreaOfSpecialization is greater than 0, we use SpecializedKeywords for the chosen AreaOfSpecialization\n // Else we use SpecializedKeywords for the chosen WorkArea\n if (tempJobPath?.areaOfSpecializations?.length > 0)\n {\n this.state.dsaData?.map((x) => {\n if (x?.Profession === this.props.jobPath?.profession)\n {\n x.WorkAreas?.map((p) => {\n if (this.props.jobPath?.workAreas?.includes(p.Title))\n {\n p?.AreaOfSpecialisation?.map((a) => {\n if (a?.Title === id)\n {\n tempJobPath.specializationKeywords = tempJobPath.specializationKeywords?.filter(x => !a.SpecializationKeywords?.includes(x))\n }\n });\n }\n })\n }\n });\n } \n else\n tempJobPath.specializationKeywords = this.getSpecializedKeywordsByWorkArea(tempJobPath);\n }\n\n if (tempJobPath?.occupations?.length > 0)\n {\n let occupationIds: string[] = [];\n this.state.dsaData?.map((x) => {\n if (x?.Profession === tempJobPath?.profession)\n {\n x.WorkAreas?.map((p) => {\n if (tempJobPath?.workAreas?.includes(p?.Title))\n {\n p?.PredefinedOccupations?.map((val) => {\n if (!occupationIds?.includes(val?.ConceptUriDa))\n occupationIds = [...occupationIds, val?.ConceptUriDa];\n });\n }\n });\n }\n });\n\n tempJobPath.occupations = tempJobPath.occupations?.filter(j => occupationIds?.includes(j?.conceptUriDa))\n }\n }\n else \n {\n tempJobPath.specializationKeywords = [];\n tempJobPath.areaOfSpecializations = [];\n tempJobPath.occupations = [];\n }\n shouldHandleRunQuery = true;\n break;\n\n case \"areaofspecialization\":\n tempJobPath.areaOfSpecializations = [...tempJobPath.areaOfSpecializations.filter(x => x !== id)];\n \n // If AreaOfSpecialization is greater than 0, we use SpecializedKeywords for the chosen AreaOfSpecialization\n // Else we use SpecializedKeywords for the chosen WorkArea\n if (tempJobPath?.areaOfSpecializations?.length > 0)\n {\n this.state.dsaData?.map((x) => {\n if (x?.Profession === this.props.jobPath?.profession)\n {\n x.WorkAreas?.map((p) => {\n if (this.props.jobPath?.workAreas?.includes(p.Title))\n {\n p?.AreaOfSpecialisation?.map((a) => {\n if (a?.Title === id)\n {\n tempJobPath.specializationKeywords = tempJobPath.specializationKeywords?.filter(x => !a.SpecializationKeywords?.includes(x))\n }\n });\n }\n })\n }\n });\n } \n else\n tempJobPath.specializationKeywords = this.getSpecializedKeywordsByWorkArea(tempJobPath);\n\n shouldHandleRunQuery = true;\n break;\n\n default:\n break;\n }\n\n if (shouldHandleRunQuery && isJobPathSaved(tempJobPath))\n this.handleRunQuery(tempJobPath);\n\n this.props.startUpdateJobPath(tempJobPath);\n }\n\n updateJobPathTextHandler = (options: { event: any, attribute?: string }) => {\n\n if (this.props.jobPath) {\n switch (options.attribute) {\n case \"name\":\n this.setState({\n tempJobPath: { ...this.state.tempJobPath, name: options.event.target.value }\n });\n\n break;\n case \"description\":\n this.setState({\n tempJobPath: { ...this.state.tempJobPath, description: options.event.target.value }\n });\n\n break;\n default:\n break;\n }\n }\n }\n\n switchView() {\n this.setState({\n jobpathView: !this.state.jobpathView\n })\n }\n\n handleJobpathJobClicked = (e: any, job: JobModel, isCompany: boolean) => {\n if(isCompany)\n {\n this.setState({\n showCompanyModal: true,\n job: job,\n });\n } \n else \n {\n this.setState({\n showModalAddedJobs: true,\n job: job,\n });\n }\n }\n\n handleCloseModal = () => {\n this.setState({\n showModalAddedJobs: false,\n showCompanyModal: false,\n job: {} as JobModel,\n });\n }\n\n handleRemoveJobFromJobPath = (isCompany: boolean) => {\n this.setState({\n pinnedAddedOrRemovedJob: true\n });\n\n this.props.deleteJobOnJobPathFilter(this.props.jobPath?.id, this.state.job, isCompany ? \"company\" : \"job\", (success) => {\n if (success)\n {\n TopToast(ToastIcon.SUCCESS).fire({\n title: 'Jobbet blev fjernet succesfuldt.',\n backdrop: false,\n });\n this.props.removeJobFromJobpath(this.state.job?.id, this.props.jobPath?.id);\n this.handleCloseModal();\n }\n else \n {\n TopToast(ToastIcon.ERROR).fire({\n title: 'Fejl! Jobbet blev ikke fjernet korrekt.',\n backdrop: false,\n });\n }\n });\n }\n\n // Method used to remove staticitems and added items from the big item list\n handleOccupationsToDisplay = (): OccupationOpportunityModel[] => {\n let tempOccupations: OccupationOpportunityModel[] = [];\n\n // Specific implementation for DSA\n if(this.props.jobPath?.profession?.toLowerCase() !== 'akademiker')\n {\n if (this.props.occupations && this.props.occupations.length > 0)\n {\n tempOccupations = [...this.props.occupations];\n \n if (this.props.jobPath && this.props.jobPath.filteredOccupations && this.props.jobPath.filteredOccupations.length > 0) {\n this.props.jobPath.filteredOccupations.map((x) => {\n if (x !== null) {\n const index: number = tempOccupations.findIndex(p => p.conceptUriDa === x.conceptUriDa);\n if (index > -1) {\n tempOccupations = [...tempOccupations.slice(0, index), ...tempOccupations.slice(index + 1)];\n }\n }\n });\n }\n \n if (this.props.jobPath && this.props.jobPath.occupations && this.props.jobPath.occupations.length > 0) {\n this.props.jobPath.occupations.map((j) => {\n if (j !== null) {\n const index: number = tempOccupations.findIndex(n => n.conceptUriDa === j.conceptUriDa);\n if (index > -1) {\n tempOccupations = [...tempOccupations.slice(0, index), ...tempOccupations.slice(index + 1)];\n }\n }\n });\n }\n }\n }\n else \n {\n if (this.props.jobPath?.workAreas?.length > 0)\n {\n let tempList: OccupationOpportunityModel[] = [];\n this.props.jobPath?.workAreas?.forEach((workArea) => {\n const candidateWorkArea = this.state.dsaData?.find(x => x?.Profession?.toLowerCase() === 'akademiker')?.WorkAreas?.find(w => w?.Title === workArea);\n if (candidateWorkArea && candidateWorkArea.PredefinedOccupations)\n {\n candidateWorkArea?.PredefinedOccupations?.forEach((value) => {\n const item = this.props.occupations?.find((occu) => occu?.conceptUriDa === value?.ConceptUriDa);\n if (item)\n {\n tempList.push(item);\n return;\n }\n });\n }\n });\n tempOccupations = tempList;\n }\n\n if (this.props.jobPath?.occupations?.length > 0)\n tempOccupations = tempOccupations?.filter(x => this.props.jobPath.occupations.findIndex(o => o?.conceptUriDa === x?.conceptUriDa) === -1);\n }\n \n return tempOccupations;\n }\n \n // Method used to remove staticitems and added items from the big item list\n handleQualificationsToDisplay = (): QualificationModel[] => {\n let tempQualifications: QualificationModel[] = [];\n\n if(this.props.qualifications && this.props.qualifications.length > 0)\n {\n tempQualifications = [...this.props.qualifications?.filter(x => x?.isMapped)];\n\n if (this.props.qualificationsFromCV && this.props.qualificationsFromCV.length > 0) {\n this.props.qualificationsFromCV.map((x) => {\n const index: number = tempQualifications.findIndex(p => p.id === x.id);\n if (index > -1) {\n tempQualifications = [...tempQualifications.slice(0, index), ...tempQualifications.slice(index + 1)];\n }\n });\n }\n \n if (this.props.jobPath && this.props.jobPath.qualifications && this.props.jobPath.qualifications.length > 0) {\n this.props.jobPath.qualifications.map((j) => {\n const index: number = tempQualifications.findIndex(n => n.id === j.id);\n \n if (index > -1) {\n tempQualifications = [...tempQualifications.slice(0, index), ...tempQualifications.slice(index + 1)];\n }\n });\n }\n }\n\n return tempQualifications;\n }\n\n getProfessionOccupations = (jobPath: JobPathModel, occupationIds: string[]) => {\n const profession: DSADataModel | undefined = dsaData.find((x: any) => x?.Profession === jobPath?.profession);\n if (profession)\n {\n if (profession?.Profession?.toLowerCase() === 'akademiker' && jobPath?.workAreas?.length > 0 && jobPath?.occupations?.length === 0)\n {\n profession.WorkAreas?.map((workarea) => {\n if (jobPath?.workAreas?.includes(workarea?.Title))\n {\n workarea?.PredefinedOccupations?.map((val) => {\n if (!occupationIds?.includes(val?.ConceptUriDa))\n occupationIds = [...occupationIds, val?.ConceptUriDa];\n });\n }\n });\n } \n else \n {\n profession?.ProfessionOccupations?.map((occu) => {\n if (!occupationIds?.includes(occu))\n occupationIds = [...occupationIds, occu];\n });\n }\n }\n return occupationIds;\n }\n\n handleRunQuery = (jobpath: JobPathModel, requestTime?: Date) => {\n let request: Date = requestTime !== undefined ? requestTime : createLocaleDate();\n if (jobpath) \n {\n let occupationIds: string[] = [];\n occupationIds = this.getProfessionOccupations(jobpath, occupationIds);\n\n if (jobpath.occupations && jobpath.occupations.length > 0) \n {\n let tempOccupations = [...jobpath?.occupations];\n occupationIds = tempOccupations.map((x) => x.conceptUriDa);\n this.props.checkQueryObjectFilters(jobpath, [], this.props.citizen, [], [new QueryFilter(\"status\", \"true\")], 100, occupationIds, false, request, occupationIds?.length === 0, true, (success) => {\n this.props.setDisplayLoader(false);\n });\n } \n else \n {\n this.props.checkQueryObjectFilters(jobpath, [], this.props.citizen, [], [new QueryFilter(\"status\", \"true\")], 100, occupationIds, false, request, occupationIds?.length === 0, true, (success) => {\n this.props.setDisplayLoader(false);\n });\n }\n }\n }\n\n handleJobsInMapToDisplay = (): JobModel[] => {\n let jobs: JobModel[] = [];\n if (this.props.jobPath) {\n if (this.state.jobpathView) {\n if (this.props.jobPath.filteredJobs && this.props.jobPath.filteredJobs.length > 0) {\n jobs = [...this.props.jobPath.filteredJobs];\n if(this.props.jobPath.jobs && this.props.jobPath.jobs.length > 0)\n {\n this.props.jobPath.jobs.map((job) => {\n jobs = jobs.filter(x => x.id !== job.id);\n });\n }\n\n if(this.props.jobPath.companyJobs && this.props.jobPath.companyJobs.length > 0)\n {\n this.props.jobPath.companyJobs.map((company) => {\n jobs = jobs.filter(x => x.id !== company.id);\n });\n }\n } \n }\n else {\n if (this.props.jobPath.jobs && this.props.jobPath.jobs.length > 0)\n jobs = jobs.concat(this.props.jobPath.jobs);\n\n if(this.props.jobPath.companyJobs && this.props.jobPath.companyJobs.length > 0)\n jobs = jobs.concat(this.props.jobPath.companyJobs);\n }\n }\n return jobs;\n }\n\n handleJobAgreementsInMap = (): JobModel[] => {\n let jobs: JobModel[] = [];\n if (this.props.jobPath) {\n if (this.state.jobpathView) {\n if (this.props.jobPath.jobs && this.props.jobPath.jobs.length > 0) \n jobs = jobs.concat(this.props.jobPath?.jobs);\n \n if (this.props.jobPath.companyJobs && this.props.jobPath.companyJobs.length > 0)\n jobs = jobs.concat(this.props.jobPath?.companyJobs);\n } \n }\n return [...jobs];\n }\n\n handleMapMarkerClicked = (event: any) => {\n if (event.properties && !isEmptyOrUndefined(event.properties.jobId)) {\n let index: number = -1;\n\n if(this.state.jobsAddedToJobPath && this.state.jobsAddedToJobPath.length > 0)\n {\n index = this.state.jobsAddedToJobPath.findIndex(j => j.id === event.properties.jobId);\n\n if(index > -1)\n {\n let tempJob = this.state.jobsAddedToJobPath[index];\n const isCompany: boolean = tempJob && tempJob.id && tempJob.id.substring(0, 1) === \"c\" && tempJob.id.substring(1, 9) === tempJob.cvr.toString() ? true : false;\n\n if(isCompany)\n {\n this.setState({\n job: this.state.jobsAddedToJobPath[index],\n showCompanyModal: true,\n });\n } \n else \n {\n this.setState({\n job: this.state.jobsAddedToJobPath[index],\n showModalAddedJobs: true,\n });\n }\n }\n }\n\n if(this.props.pinnedJobs && this.props.pinnedJobs.length > 0 && index === -1)\n {\n index = this.props.pinnedJobs.findIndex(x => x.id === event.properties.jobId);\n\n if(index > -1)\n {\n let job = {...this.props.pinnedJobs[index]};\n job.filterOption = \"jobs\";\n this.setState({\n showModalMapJobs: true,\n selectedJobFromMap: job,\n });\n }\n }\n\n if(this.state.filteredJobs && this.state.filteredJobs.length > 0 && index === -1)\n {\n index = this.state.filteredJobs.findIndex(j => j.id === event.properties.jobId);\n\n if(index > -1)\n {\n // checking if jobpath view is - saved jobs. To display the right modal\n if(!this.state.jobpathView)\n {\n this.setState({\n job: this.state.filteredJobs[index],\n showModalAddedJobs: true,\n });\n\n } else {\n let job = {...this.state.filteredJobs[index]};\n job.filterOption = \"jobs\";\n this.setState({\n selectedJobFromMap: job,\n showModalMapJobs: true,\n });\n }\n }\n }\n }\n }\n\n handleToggleJobFromMyPlan = () => {\n this.setState({ showModalMapJobs: false, pinnedAddedOrRemovedJob: true });\n this.props.pinJobOnJobPathFilter(this.props.jobPath?.id, this.state.selectedJobFromMap, \"job\", (success) => {\n if (success)\n {\n if (this.state.selectedJobFromMap?.isPinnedJob)\n this.props.removePinnedJob(this.state.selectedJobFromMap);\n else\n this.props.addPinnedJob(this.state.selectedJobFromMap);\n }\n else \n {\n TopToast(ToastIcon.ERROR).fire({\n title: `Fejl! Jobbet blev ikke ${this.state.selectedJobFromMap?.isPinnedJob ? 'fjernet' : 'tilføjet'} korrekt.`,\n backdrop: false,\n });\n }\n });\n \n }\n\n closeModal = () => {\n this.setState({\n showModalMapJobs: false,\n showCompanyModal: false,\n })\n }\n\n handleAddJobOrder = () => {\n this.setState({\n showModalMapJobs: false,\n pinnedAddedOrRemovedJob: true,\n });\n this.props.addJobOnJobPathFilter(this.props.jobPath?.id, this.state.selectedJobFromMap, \"job\", (success) => {\n if (success)\n {\n TopToast(ToastIcon.SUCCESS).fire({\n title: 'Jobbet blev tilføjet succesfuldt.',\n backdrop: false,\n });\n // setting to true because company jobs is not showing here, and only removal of company job is an option here.\n this.props.AddJobToJobPath(this.state.selectedJobFromMap, true);\n if (this.state.selectedJobFromMap.isPinnedJob) {\n this.props.removePinnedJob(this.state.selectedJobFromMap);\n }\n this.props.removeJobFromState(this.state.selectedJobFromMap);\n }\n else \n {\n TopToast(ToastIcon.ERROR).fire({\n title: 'Fejl! Jobbet blev ikke tilføjet korrekt.',\n backdrop: false,\n });\n }\n\n });\n }\n\n modalResponseError = () => {\n this.setState({\n showModalMapJobs: false,\n });\n\n swal({\n title: 'Fejl opstod ved fremvisning af jobbets beskrivelse',\n icon: 'error',\n timer: 3000,\n buttons: [false],\n closeOnClickOutside: true,\n });\n }\n\n handleSelectedDropdownChanged = (event: any, value: string) => {\n this.setState({ chosenSortForSavedJobs: value });\n }\n\n // this method is being updated by MapView\n handlePinnedAddedOrRemovedJob = (pinnedAddedOrRemovedJob: boolean) => {\n if(this.state.pinnedAddedOrRemovedJob !== pinnedAddedOrRemovedJob)\n {\n this.setState({\n pinnedAddedOrRemovedJob: pinnedAddedOrRemovedJob,\n });\n }\n }\n\n handleGetWorkAreas = (dsaData: DSADataModel[]) => {\n let tempArr: SearchListModel[] = [];\n dsaData?.map((x) => {\n if (this.props.jobPath?.profession?.length > 0 && x?.Profession === this.props.jobPath?.profession)\n {\n x.WorkAreas?.map((p) => {\n tempArr.push(new SearchListModel(p?.Title, p?.Title))\n });\n }\n });\n return tempArr;\n }\n\n handleGetAreaOfSpecialisation = (dsaData: DSADataModel[]) => {\n let tempArr: SearchListModel[] = [];\n dsaData?.map((x) => {\n if (x?.Profession === this.props.jobPath?.profession)\n {\n x.WorkAreas?.map((p) => {\n if (this.props.jobPath?.workAreas?.includes(p.Title))\n {\n p?.AreaOfSpecialisation?.map((a, index) => {\n if (!this.props.jobPath?.areaOfSpecializations?.includes(a?.Title) && tempArr?.find(x => x?.name === a?.Title) === undefined)\n tempArr.push(new SearchListModel(a.Title + index.toString(), a.Title));\n });\n }\n })\n }\n });\n\n return tempArr;\n }\n\n updateJobPathHandler = (options: { event: any, attribute?: string, dataEntity?: any }) => {\n let tempJobPath = {...this.props.jobPath};\n\n switch (options.attribute) {\n case \"occupations\":\n if (!tempJobPath?.occupations?.includes(options?.dataEntity)) {\n tempJobPath.occupations = [...this.props.jobPath?.occupations ?? [], options?.dataEntity];\n }\n\n\n break;\n\n case \"qualifications\":\n if (!tempJobPath?.qualifications?.includes(options?.dataEntity)) {\n tempJobPath.qualifications = [...this.props.jobPath?.qualifications ?? [], options?.dataEntity];\n\n if (this.props.qualificationsFromCV?.filter(x => x?.id === options?.dataEntity?.id && x?.name === options?.dataEntity?.name)?.length === 0) {\n let tempQualificationAgreement: QualificationAgreementModel = {\n id: options.dataEntity.id,\n name: options.dataEntity.name,\n createdDate: createLocaleDate(),\n done: false,\n } as QualificationAgreementModel;\n // adding qualification agreements to add to CV.\n this.props.addQualificationAgreement(tempQualificationAgreement);\n }\n\n // fetching similar qualifications from the qualification added.\n this.props.fetchSimilarQualifications(tempJobPath?.qualifications, tempJobPath?.id);\n // fetching occupations from jobpath qualifications and filtering it.\n this.props.getOccupationsFromQualfications(tempJobPath?.qualifications, tempJobPath?.id);\n }\n break;\n\n // Specific implementation for DSA\n case \"profession\":\n tempJobPath.type = JobPathType.DSAJobPath;\n tempJobPath.profession = options?.dataEntity?.name;\n tempJobPath.occupations = [];\n tempJobPath.qualifications = [];\n tempJobPath.similarQualifications = [];\n tempJobPath.filteredOccupations = [];\n tempJobPath.workAreas = [];\n tempJobPath.areaOfSpecializations = [];\n tempJobPath.specializationKeywords = [];\n break;\n\n // Specific implementation for DSA\n case \"workarea\": {\n if (isEmptyOrUndefined(tempJobPath?.workAreas))\n tempJobPath.workAreas = [];\n\n if(!tempJobPath.workAreas?.includes(options?.dataEntity?.name))\n tempJobPath.workAreas = [...tempJobPath?.workAreas, options?.dataEntity?.name];\n\n tempJobPath.specializationKeywords = this.getSpecializedKeywordsByWorkArea(tempJobPath);\n\n break;\n }\n\n // Specific implementation for DSA\n case \"areaofspecialization\": {\n if (isEmptyOrUndefined(tempJobPath?.areaOfSpecializations))\n tempJobPath.areaOfSpecializations = [];\n \n if(!tempJobPath.areaOfSpecializations?.includes(options?.dataEntity?.name))\n {\n tempJobPath.areaOfSpecializations = [...tempJobPath.areaOfSpecializations ?? [], options?.dataEntity?.name];\n\n let specializationKeywords:string[] = []\n\n tempJobPath.areaOfSpecializations.map((el) => {\n this.state.dsaData?.map((x) => {\n {\n x.WorkAreas?.map((p) => {\n {\n p?.AreaOfSpecialisation?.map((a) => {\n if(x?.Profession === tempJobPath?.profession && el === a?.Title){\n specializationKeywords = [...specializationKeywords, ...a.SpecializationKeywords]\n }\n });\n }\n });\n }\n })\n });\n tempJobPath.specializationKeywords = specializationKeywords;\n }\n break;\n }\n \n default:\n break;\n }\n\n if (isJobPathSaved(tempJobPath))\n this.handleRunQuery(tempJobPath);\n\n this.props.startUpdateJobPath(tempJobPath);\n }\n\n getSpecializedKeywordsByWorkArea = (tempJobPath: JobPathModel) => {\n let specializationKeywords:string[] = [];\n\n tempJobPath.workAreas?.map((workArea) => (\n this.state.dsaData?.map((x) => {\n {\n x.WorkAreas?.map((p) => {\n {\n p?.AreaOfSpecialisation?.map((a) => {\n if(x?.Profession === tempJobPath?.profession && workArea === p?.Title){\n a.SpecializationKeywords.map((sk) => {\n if(!specializationKeywords.includes(sk)){\n specializationKeywords = [...specializationKeywords, sk];\n }\n })\n }\n });\n }\n });\n }\n })\n ));\n\n return specializationKeywords;\n }\n\n \n render() {\n let jobpathView;\n let switchViewButtons =

    |

    ;\n // let editButtons =
    this.editJobPathHandler()} /> this.saveTempJobPath()} />
    \n let updateButton =
    this.saveTempJobPath()} />
    \n let moreMenuButtons: { menuItemText: string, menuItemHandler: (e: React.MouseEvent) => void }[] = [\n { menuItemText: \"Rediger\", menuItemHandler: () => this.editJobPathHandler() },\n { menuItemText: \"Slet\", menuItemHandler: (e) => this.deleteJobPathHandler(e) }\n ];\n\n if (this.state.shouldCloseMenu) {\n this.setState({\n shouldCloseMenu: undefined,\n });\n }\n \n if (this.props.jobPath && this.state.jobpathView) {\n jobpathView =\n \n
    \n
    \n
    \n {this.state.edit && this.state.tempJobPath.id == this.props.jobPath.id ?\n
    \n
    \n this.updateJobPathTextHandler({ event: e, attribute: \"name\" })} value={this.state.tempJobPath.name}>\n {this.props.isMobile && this.state.tempJobPath?.name?.length === 0\n ?\n *\n :\n null\n }\n
    \n {this.state.edit && this.state.tempJobPath.id == this.props.jobPath.id && this.state.tempJobPath?.name?.length > 0 && isJobPathSaved(this.state.tempJobPath) ? updateButton : *}\n\n
    \n :\n
    \n \n
    this.editJobPathHandler()}>\n \n
    \n {/* COMMENTED OUT FOR THE NEW FLOW FOR \"SØGEFILTRE\"*/}\n
    \n }\n
    \n
    \n
    \n {/* Removed for Jobportal */}\n {/* {this.state.edit && this.state.tempJobPath.id == this.props.jobPath.id ?\n \n :\n

    {this.props.jobPath.description}

    \n } */}\n
    \n
    \n
    \n\n {this.props.jobPath?.type === JobPathType.NormalJobPath\n ?\n <>\n
    \n
    \n
    \n

    Stillingsbetegnelse {this.props.jobPath?.profession?.toLowerCase() !== \"akademiker\" ? * : null}

    \n {/* {\n isEmptyOrUndefined(this.props.jobBarometerUrl) ? null :\n Hent jobbarometer\n } */}\n
    \n\n
    \n {this.props.jobPath.occupations && this.props.jobPath.occupations.map((occupation) => (\n this.removeTag(e, occupation.conceptUriDa, 'occupation')}>\n ))}\n
    \n
    \n !isEmptyOrUndefined(x) && this.props.jobPath?.occupations?.findIndex(p => p?.conceptUriDa === x?.conceptUriDa) === -1)\n : []\n }\n staticItemDescription=\"Stillingsbetegnelser ud fra kvalifikationer:\"\n selectedElementHandler={(options) => this.updateJobPathHandler({ event: options.event, dataEntity: options.dataEntity, attribute: 'occupations' })} />\n
    \n {this.props.jobPath?.profession?.toLowerCase() !== 'akademiker' &&\n
    \n

    Kvalifikationer

    \n
    \n {this.props.jobPath.qualifications && this.props.jobPath.qualifications.map((qualification) => (\n this.removeTag(e, qualification.id, 'qualification')} isOnCV={this.props.qualificationsFromCV.findIndex(x => x.name === qualification.name && x.id === qualification.id) > -1 ? true : false}>\n ))}\n
    \n
    \n this.updateJobPathHandler({ event: options.event, dataEntity: options.dataEntity, attribute: 'qualifications' })}\n similarItems={this.props.jobPath.similarQualifications && this.props.jobPath.similarQualifications.length > 0 ? this.props.jobPath.similarQualifications.filter(x => !isEmptyOrUndefined(x) && this.props.jobPath.qualifications.find(p => p.id === x.id) === undefined) : []}\n shouldDisplaySimilarItems={true} />\n
    }\n

    \n
    \n \n :\n
    \n
    \n
    \n

    Faggruppe *

    \n {/* Removed for Jobportal */}\n {/* {\n isEmptyOrUndefined(this.props.jobBarometerUrl) ? null :\n Hent jobbarometer\n } */}\n
    \n\n
    \n {this.props.jobPath?.profession?.length > 0 \n ? this.removeTag(e, this.props.jobPath?.profession, 'profession')} >\n : null}\n
    \n
    \n !this.props.jobPath?.profession?.includes(x?.name))}\n selectedElementHandler={(options) => this.updateJobPathHandler({ event: options.event, dataEntity: options.dataEntity, attribute: 'profession' })}\n closeOnClick\n />\n
    \n\n
    \n

    Arbejdsområder

    \n
    \n {this.props.jobPath?.workAreas?.length > 0\n ? \n this.props.jobPath?.workAreas?.map((val, index) => (\n this.removeTag(e, val, 'workarea')} >\n ))\n : null}\n
    \n
    \n !this.props.jobPath?.workAreas?.includes(x?.name)) : [] }\n selectedElementHandler={(options) => this.updateJobPathHandler({ event: options.event, dataEntity: options.dataEntity, attribute: 'workarea' })}\n />\n
    \n\n {this.props.jobPath?.profession?.toLowerCase() === 'akademiker'\n ?\n
    \n
    \n

    Stillingsbetegnelse {this.props.jobPath?.profession?.toLowerCase() !== \"akademiker\" ? * : null}

    \n {/* {\n isEmptyOrUndefined(this.props.jobBarometerUrl) ? null :\n Hent jobbarometer\n } */}\n
    \n\n
    \n {this.props.jobPath.occupations && this.props.jobPath.occupations.map((occupation) => (\n this.removeTag(e, occupation.conceptUriDa, 'occupation')}>\n ))}\n
    \n
    \n !isEmptyOrUndefined(x) && this.props.jobPath?.occupations?.findIndex(p => p?.conceptUriDa === x?.conceptUriDa) === -1)\n : []\n }\n staticItemDescription=\"Stillingsbetegnelser ud fra kvalifikationer:\"\n selectedElementHandler={(options) => this.updateJobPathHandler({ event: options.event, dataEntity: options.dataEntity, attribute: 'occupations' })} />\n
    \n :\n
    \n

    Specialer

    \n
    \n {this.props.jobPath?.areaOfSpecializations?.length > 0\n ? \n this.props.jobPath.areaOfSpecializations?.map((val) => (\n this.removeTag(e, val, 'areaofspecialization')} >\n ))\n : null}\n
    \n
    \n !this.props.jobPath?.areaOfSpecializations?.includes(x?.name))}\n selectedElementHandler={(options) => this.updateJobPathHandler({ event: options.event, dataEntity: options.dataEntity, attribute: 'areaofspecialization' })}\n />\n
    }\n\n

    \n
    }\n
    \n\n
    \n {isJobPathSaved(this.props.jobPath)\n ? \n : \n <>\n \n 0 && this.state.tempJobPath?.name !== 'øvrige' && this.props.jobPath?.profession?.length > 0 || this.props.jobPath.occupations?.length > 0 ? false : true} additionalClassNames={this.state.tempJobPath?.name?.length > 0 && this.state.tempJobPath?.name !== 'øvrige' && this.props.jobPath?.profession?.length > 0 || this.state.tempJobPath?.name?.length > 0 && this.props.jobPath?.occupations?.length > 0 ? \"\" : \"button-disabled\"} buttonText='Gem søgefilter' primaryButton onClick={() => this.saveTempJobPath()} />\n \n }\n
    \n
    \n } else if (!this.props.jobPath && this.state.jobpathView) {\n jobpathView =
    Der er ikke valgt et søgefilter.
    ;\n }\n else {\n if (this.props.jobPath?.jobs?.length > 0 || this.props.jobPath?.companyJobs?.length > 0) {\n jobpathView =\n \n
    \n
    \n

    {this.props.jobPath?.name}

    \n {/*
    \n \n Sorter: \n \n {this.state.chosenSortForSavedJobs !== '' ? this.state.chosenSortForSavedJobs : this.state.savedJobsSortList[0]}\n \n \n {this.state.savedJobsSortList.map((option) => (\n this.handleSelectedDropdownChanged(e, option)}>{option}\n ))}\n \n \n
    */}\n
    \n
    \n {this.props.jobPath?.jobs && this.props.jobPath?.jobs?.map(job => \n
    \n
    this.handleJobpathJobClicked(e, job, false)}>\n
    {job?.title}
    \n

    \n
    \n
    \n
    \n
    )}\n {this.props.jobPath?.companyJobs && this.props.jobPath?.companyJobs?.map(company => (\n
    \n
    this.handleJobpathJobClicked(e, company, true)}>\n
    {company?.companyName}
    \n

    {company?.workPlaceAddress + ' ,' + company?.workPlacePostalCode + ' ,' + company?.workPlaceCity}

    \n
    \n
    \n
    \n
    \n ))}\n
    \n
    \n\n } else {\n jobpathView =
    Der er ikke gemt nogle job i dette søgefilter.
    ;\n }\n }\n\n const notPinnedJob = require('../../images/PinnedJobsTransparrent.svg');\n const pinnedJob = require('../../images/PinnedJobsFull.svg');\n\n let faIcon;\n if (this.state.selectedJobFromMap.isPinnedJob) \n faIcon = ; \n else \n faIcon = ;\n \n let tempJobPath: JobPathModel;\n tempJobPath = { ...this.props.jobPath };\n\n return [\n \n \n
    \n
    \n
    \n {this.props.isMobile && this.props.mobileEditJobPath\n ?\n
    \n
    \n \n

    Søgefilterbeskrivelse

    \n
    \n
    \n : null}\n\n
    \n {switchViewButtons}\n
    \n {!this.props.mobileEditJobPath && !this.props.isMobile || this.props.mobileEditJobPath && this.props.isMobile\n ? jobpathView\n : null}\n \n
    \n
    \n this.handlePinnedAddedOrRemovedJob(pinnedAddedOrRemovedJob)} pinnedAddedOrRemovedJob={this.state.pinnedAddedOrRemovedJob} \n shouldFitBounds={this.state.shouldFitbounds} sourceType={'jobs'} jobs={this.state.filteredJobs} jobsInJobPath={this.state.jobsAddedToJobPath} personAddress={this.props.personGeoData != null ? new AddressModel('', '', '', '', '', '', '', this.props.personGeoData) : new AddressModel('', '', '', '', '', '', '', new GeoPoint(0, 0))} clickedMarker={(e) => this.handleMapMarkerClicked(e)} >\n
    \n
    \n
    \n this.handleCloseModal()} jobId={this.state.job?.id} jobPathTitle={this.props.jobPath?.name} removeJobFromJobpath={() => this.handleRemoveJobFromJobPath(false)} />\n this.handleToggleJobFromMyPlan()} pinImage={faIcon} jobPathTitle={this.props.jobPath?.name} addJobToJobPath={() => this.handleAddJobOrder()} openModal={this.state.showModalMapJobs} closeModal={this.closeModal} jobId={this.state.selectedJobFromMap?.id} imageId={this.state.selectedJobFromMap?.imageId} />\n this.closeModal()} addJobToJobPath={() => {}} removeJobFromJobPath={() => this.handleRemoveJobFromJobPath(true)} shouldAddJob={false} shouldRemoveJob={true} />\n
    \n ];\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(JobPathView);","import * as React from 'react';\nimport { render, unmountComponentAtNode } from 'react-dom';\nimport { isEmptyOrUndefined } from '../../helpers/TypeChecks';\nimport './SweetAlertCustom.scss';\n\nconst sweetAlertNode = document.createElement(\"div\");\nexport const sweetAlertPopup = (options?: SweetAlertCustomProp, callback?: (result: SweetAlertCustomState) => void, ) => {\n document.body.appendChild(sweetAlertNode);\n const clear = () => {\n unmountComponentAtNode(sweetAlertNode);\n sweetAlertNode.remove();\n }\n\n render( callback(result): () => {}} />, sweetAlertNode);\n}\n\ntype SweetAlertCustomProp = {\n title?: string;\n subHeader?: string;\n confirmButton?: boolean;\n additionalConfirmButton?: boolean;\n}\n\ninterface Props { \n options?: SweetAlertCustomProp;\n clear: () => void;\n callback: (result: SweetAlertCustomState) => void;\n}\n\nexport type SweetAlertCustomBtnTypes = \"\" | \"delete\" | \"update\" | \"create\";\n\nexport type SweetAlertCustomState = {\n confirmButtonClicked: SweetAlertCustomBtnTypes;\n additionalConfirmButtonClicked: SweetAlertCustomBtnTypes;\n}\n\ninterface State { \n result: SweetAlertCustomState;\n fadeOut: boolean;\n}\n\nclass SweetAlertCustom extends React.Component {\n private sweetAlertPopUpRef: React.RefObject;\n constructor(props: Props) {\n super(props);\n this.state = { \n result: {\n confirmButtonClicked: \"\",\n additionalConfirmButtonClicked: \"\",\n },\n fadeOut: false,\n };\n\n this.sweetAlertPopUpRef = React.createRef();\n }\n\n componentDidMount() {\n window.addEventListener('mousedown', (e) => this.handleClickOutsideSweetAlert(e));\n }\n \n componentWillUnmount() {\n window.removeEventListener('mousedown', (e) => this.handleClickOutsideSweetAlert(e));\n }\n\n handleClickOutsideSweetAlert = (event: any) => {\n if (!this.sweetAlertPopUpRef?.current?.contains(event.target))\n this.handleClearSweetAlert();\n }\n\n buttonHandler = (buttonClicked: SweetAlertCustomBtnTypes, buttonType: 'confirm' | 'additional') => {\n this.setState({\n result: {\n ...this.state.result,\n confirmButtonClicked: buttonType === 'confirm' ? buttonClicked : this.state.result?.confirmButtonClicked,\n additionalConfirmButtonClicked: buttonType === 'additional' ? buttonClicked : this.state.result?.additionalConfirmButtonClicked,\n },\n fadeOut: true,\n }, () => {\n this.props.callback(this.state.result);\n setTimeout(() => {\n this.props.clear();\n }, 250);\n });\n }\n\n handleClearSweetAlert = () => {\n this.setState({\n fadeOut: true,\n }, () => {\n setTimeout(() => {\n this.props.clear();\n }, 250);\n });\n }\n\n render() {\n return (\n
    \n
    \n

    {this.props.options?.title}

    \n
    \n {!isEmptyOrUndefined(this.props.options?.subHeader) ?

    {this.props.options?.subHeader}

    : null} \n
    \n
    \n {this.props.options?.additionalConfirmButton ? : null}\n {this.props.options?.confirmButton ? : null}\n
    \n
    \n
    \n );\n }\n}\n\nexport default SweetAlertCustom;","import * as React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport { isEmptyOrUndefined, isObjEmpty } from '../../helpers/TypeChecks';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport { bindActionCreators } from 'redux';\nimport { AppState } from '../../store';\nimport { connect } from \"react-redux\";\nimport JobPathModel, { JobPathType } from '../../models/JobPathModel';\nimport { startUpdateJobPath, startDeleteJobPath, removeJobFromJobpath, AddJobToJobPath, addPinnedJob, removePinnedJob } from '../../store/JobPathList/actions';\nimport DsaButton from '../DsaButton';\nimport { convertToDayDateMonthYear, createLocaleDate } from '../../helpers/DateHelper';\nimport { AuthenticatedTemplate, MsalContext } from '@azure/msal-react';\nimport { addQualificationAgreement, handleShouldRemoveQualificationAgreement } from \"../../store/Agreement/actions\";\nimport Tag from '../Tag';\nimport SearchList from '../SearchList';\nimport { SearchListModel } from '../../models/SearchListModel';\nimport DSADataModel from '../../models/DSADataModel';\nimport { checkQueryObjectFilters } from '../../store/Jobs/actions';\nimport { dsaData } from '../../helpers/DSADataHelper';\nimport QualificationModel from '../../models/QualificationModel';\nimport { getOccupationsFromQualfications, fetchSimilarQualifications, removeJobFromState, setDisplayLoader } from '../../store/Jobs/actions';\nimport OccupationOpportunityModel from '../../models/OccupationOpportunityModel';\nimport QualificationAgreementModel from '../../models/Agreement/QualificationAgreementModel';\nimport { ToastIcon, TopToast } from '../../helpers/ToastHelper';\nimport { QueryFilter } from '../../models/QueryFilter';\nimport { RegionModel } from '../../models/RegionModel';\nimport { CitizenModel } from '../../models/CitizenModel';\nimport { Guid } from 'guid-typescript';\nimport { emptyJobPathModel } from '../../helpers/CreateEmptyDataObjects';\nimport { jobPathImages } from '../../helpers/ImageHelper';\nimport CloseButton from '../Buttons/CloseButton';\nimport './ModalForAddJobPathWizard.scss';\n\ninterface OwnProps {\n openModal: boolean;\n closeModal: () => void;\n qualifications: QualificationModel[];\n occupations: OccupationOpportunityModel[];\n jobPathList: JobPathModel[] | null;\n addJobPath: () => void;\n}\n\ninterface StateProps {\n qualificationsFromCV: QualificationModel[];\n jobPaths: JobPathModel[];\n citizen: CitizenModel;\n}\n\ninterface DispatchProps {\n addQualificationAgreement: (qualificationAgreement: QualificationAgreementModel) => void;\n getOccupationsFromQualfications: (qualfications: QualificationModel[], jobpathID: Guid) => void;\n fetchSimilarQualifications: (qualifications: QualificationModel[], jobpathID: Guid) => void;\n checkQueryObjectFilters: (jobPath: JobPathModel, region: RegionModel[], citizen: CitizenModel, jobPahts: JobPathModel[], queryFilters: QueryFilter[], \n distance: number, occupations: string[], isAllJobs:boolean, requestTime: Date, addConceptUriDas: boolean, onlyQueryJobs: boolean, callback: (success: boolean) => void) => void;\n handleShouldRemoveQualificationAgreement: (qualificationID: number, jobPaths: JobPathModel[]) => void;\n setDisplayLoader: (load: boolean) => void;\n startUpdateJobPath: (jobpath: JobPathModel) => void;\n}\n\nconst mapStateToProps = (state: AppState): StateProps => ({\n qualificationsFromCV: state.citizen && state.citizen.citizen && state.citizen.citizen.cv && state.citizen.citizen.cv.qualifications ? state.citizen.citizen.cv.qualifications : [],\n citizen: state.citizen.citizen,\n jobPaths: state.jobPathList.jobPaths,\n});\n\nfunction mapDispatchToProps(\n dispatch: ThunkDispatch\n ): DispatchProps {\n return {\n addQualificationAgreement: bindActionCreators(addQualificationAgreement, dispatch),\n handleShouldRemoveQualificationAgreement: bindActionCreators(handleShouldRemoveQualificationAgreement, dispatch),\n getOccupationsFromQualfications: bindActionCreators(getOccupationsFromQualfications, dispatch),\n fetchSimilarQualifications: bindActionCreators(fetchSimilarQualifications, dispatch),\n checkQueryObjectFilters: bindActionCreators(checkQueryObjectFilters, dispatch),\n setDisplayLoader: bindActionCreators(setDisplayLoader, dispatch),\n startUpdateJobPath: bindActionCreators(startUpdateJobPath, dispatch),\n };\n}\n\ntype Props = StateProps & DispatchProps & OwnProps;\n\ninterface State {\n edit: boolean;\n // isJobPathDSA: boolean;\n tempJobPath: JobPathModel;\n dsaSearchListItem: { professions: SearchListModel[], workAreas: SearchListModel[], areaOfSpecializations: SearchListModel[] };\n dsaData: DSADataModel[];\n}\n\nclass ModalForAddJobPathWizard extends React.Component {\n static contextType = MsalContext;\n\n constructor(props: Props) {\n super(props);\n this.state = {\n tempJobPath: this.getEmptyJobPath(),\n edit: false,\n dsaData: dsaData,\n dsaSearchListItem: { professions: [], workAreas: [], areaOfSpecializations: [] },\n // isJobPathDSA: true,\n }\n }\n\n componentDidMount() {\n this.setState({\n dsaSearchListItem: this.handleSetDSASearchListValues(dsaData),\n });\n }\n\n componentDidUpdate(prevProps: Props, prevState: State) {\n if (!prevProps.openModal && this.props.openModal && isObjEmpty(this.state.tempJobPath))\n {\n this.setState({\n tempJobPath: this.getEmptyJobPath(),\n });\n }\n\n if (prevState.tempJobPath?.profession !== this.state.tempJobPath?.profession)\n {\n this.setState({\n dsaSearchListItem: {\n ...this.state.dsaSearchListItem,\n workAreas: this.handleGetWorkAreas(this.state.dsaData),\n areaOfSpecializations: this.handleGetAreaOfSpecialisation(this.state.dsaData),\n }\n });\n }\n\n if (prevState.tempJobPath?.workAreas !== this.state.tempJobPath?.workAreas && prevState.tempJobPath?.profession === this.state.tempJobPath?.profession)\n {\n this.setState({\n dsaSearchListItem: {\n ...this.state.dsaSearchListItem,\n workAreas: this.handleGetWorkAreas(this.state.dsaData),\n areaOfSpecializations: this.handleGetAreaOfSpecialisation(this.state.dsaData),\n }\n });\n }\n\n if (prevState.tempJobPath?.areaOfSpecializations !== this.state.tempJobPath?.areaOfSpecializations && prevState.tempJobPath?.profession === this.state.tempJobPath?.profession)\n {\n this.setState({\n dsaSearchListItem: {\n ...this.state.dsaSearchListItem,\n areaOfSpecializations: this.handleGetAreaOfSpecialisation(this.state.dsaData),\n }\n });\n }\n }\n\n getEmptyJobPath = () => {\n let imageId = -1;\n for (let i = 0; i < jobPathImages.length; i++) {\n let isUsedIcon = false;\n if (this.props.jobPathList)\n {\n for (let k = 0; k < this.props.jobPathList!.length; k++) {\n if (i == this.props.jobPathList![k]?.imageId)\n isUsedIcon = true;\n }\n }\n\n if (!isUsedIcon) {\n imageId = i;\n break;\n }\n\n }\n\n return emptyJobPathModel(imageId, JobPathType.DSAJobPath);\n\n } \n\n editJobPathHandler = () => {\n this.setState({\n // edit: this.state.edit == false ? true : this.state.tempJobPath.id != this.state.tempJobPath.id ? true : false,\n edit: true,\n tempJobPath: { ...this.state.tempJobPath }\n })\n }\n\n saveTempJobPath() {\n if(this.state.tempJobPath?.name?.toLowerCase() !== 'øvrige')\n {\n this.props.startUpdateJobPath(this.state.tempJobPath);\n this.setState({\n tempJobPath: {} as JobPathModel,\n });\n this.props.closeModal();\n }\n else \n {\n TopToast(ToastIcon.WARNING).fire({\n title: '\"Øvrige\" er ikke et gyldigt jobagent navn',\n timer: 2500,\n backdrop: false,\n });\n }\n \n this.setState ({\n edit: false,\n })\n }\n\n updateJobPathTextHandler = (options: { event: any, attribute?: string }) => {\n if (this.state.tempJobPath) {\n switch (options.attribute) {\n case \"name\":\n this.setState({\n tempJobPath: { ...this.state.tempJobPath, name: options.event.target.value }\n });\n \n break;\n case \"description\":\n this.setState({\n tempJobPath: { ...this.state.tempJobPath, description: options.event.target.value }\n });\n \n break;\n default:\n break;\n }\n }\n }\n\n removeTag = (e: any, id: number | string, type: string) => {\n let tempJobPath: JobPathModel;\n tempJobPath = { ...this.state.tempJobPath };\n //looking at input of the type of tag we want to remove\n \n switch (type) {\n case \"occupation\":\n tempJobPath.occupations = [...tempJobPath.occupations.filter(x => x.conceptUriDa !== id)];\n break;\n \n \n case \"qualification\":\n tempJobPath.qualifications = [...tempJobPath.qualifications.filter(x => x.id !== id)];\n break;\n \n case \"profession\":\n if (tempJobPath?.profession === id)\n {\n tempJobPath.profession = '';\n tempJobPath.workAreas = [];\n tempJobPath.areaOfSpecializations = [];\n tempJobPath.specializationKeywords = [];\n }\n \n this.setState({\n dsaSearchListItem: {\n ...this.state.dsaSearchListItem,\n workAreas: [],\n areaOfSpecializations: [],\n }\n });\n \n if (this.state.tempJobPath?.profession?.toLowerCase() === 'akademiker')\n {\n tempJobPath.type = JobPathType.DSAJobPath;\n tempJobPath.occupations = [];\n }\n break;\n \n case \"workarea\":\n tempJobPath.workAreas = [...tempJobPath.workAreas.filter(x => x !== id)];\n let unwantedAOS: string[] = [];\n this.state.dsaData?.map((value) => {\n value?.WorkAreas?.map((workarea) => {\n workarea?.AreaOfSpecialisation?.map((aos) => {\n if (tempJobPath?.workAreas?.includes(workarea?.Title))\n unwantedAOS = [...unwantedAOS, aos.Title];\n })\n });\n });\n \n if (tempJobPath?.workAreas?.length > 0)\n {\n if (tempJobPath?.areaOfSpecializations?.length > 0)\n {\n tempJobPath.areaOfSpecializations = tempJobPath.areaOfSpecializations.filter(function (el) {\n return unwantedAOS.includes(el);\n });\n \n // If AreaOfSpecialization is greater than 0, we use SpecializedKeywords for the chosen AreaOfSpecialization\n // Else we use SpecializedKeywords for the chosen WorkArea\n if (tempJobPath?.areaOfSpecializations?.length > 0)\n {\n this.state.dsaData?.map((x) => {\n if (x?.Profession === this.state.tempJobPath?.profession)\n {\n x.WorkAreas?.map((p) => {\n if (this.state.tempJobPath?.workAreas?.includes(p.Title))\n {\n p?.AreaOfSpecialisation?.map((a) => {\n if (a?.Title === id)\n {\n tempJobPath.specializationKeywords = tempJobPath.specializationKeywords?.filter(x => !a.SpecializationKeywords?.includes(x))\n }\n });\n }\n })\n }\n });\n } \n else\n tempJobPath.specializationKeywords = this.getSpecializedKeywordsByWorkArea(tempJobPath);\n }\n }\n else \n {\n tempJobPath.specializationKeywords = [];\n tempJobPath.areaOfSpecializations = [];\n }\n \n break;\n \n case \"areaofspecialization\":\n tempJobPath.areaOfSpecializations = [...tempJobPath.areaOfSpecializations.filter(x => x !== id)];\n \n // If AreaOfSpecialization is greater than 0, we use SpecializedKeywords for the chosen AreaOfSpecialization\n // Else we use SpecializedKeywords for the chosen WorkArea\n if (tempJobPath?.areaOfSpecializations?.length > 0)\n {\n this.state.dsaData?.map((x) => {\n if (x?.Profession === this.state.tempJobPath?.profession)\n {\n x.WorkAreas?.map((p) => {\n if (this.state.tempJobPath?.workAreas?.includes(p.Title))\n {\n p?.AreaOfSpecialisation?.map((a) => {\n if (a?.Title === id)\n {\n tempJobPath.specializationKeywords = tempJobPath.specializationKeywords?.filter(x => !a.SpecializationKeywords?.includes(x))\n }\n });\n }\n })\n }\n });\n } \n else\n tempJobPath.specializationKeywords = this.getSpecializedKeywordsByWorkArea(tempJobPath);\n break;\n \n default:\n break;\n }\n\n this.setState({\n tempJobPath: tempJobPath,\n });\n }\n\n handleSetDSASearchListValues = (dsaData: DSADataModel[]): { professions: SearchListModel[], workAreas: SearchListModel[], areaOfSpecializations: SearchListModel[] } => {\n return {\n professions: dsaData?.map((x) => new SearchListModel(x?.Profession, x?.Profession)),\n workAreas: this.handleGetWorkAreas(dsaData),\n areaOfSpecializations: this.handleGetAreaOfSpecialisation(dsaData),\n }\n }\n\n // Method used to remove staticitems and added items from the big item list\n handleOccupationsToDisplay = (): OccupationOpportunityModel[] => {\n let tempOccupations: OccupationOpportunityModel[] = [];\n\n // Specific implementation for DSA\n if (this.state.tempJobPath?.profession?.toLowerCase() !== 'akademiker')\n {\n if(this.props.occupations && this.props.occupations?.length > 0)\n {\n tempOccupations = [...this.props.occupations];\n \n if (this.state.tempJobPath && this.state.tempJobPath.filteredOccupations && this.state.tempJobPath.filteredOccupations?.length > 0) {\n this.state.tempJobPath.filteredOccupations.map((x) => {\n if (x !== null) {\n const index: number = tempOccupations.findIndex(p => p.conceptUriDa === x.conceptUriDa);\n if (index > -1) {\n tempOccupations = [...tempOccupations.slice(0, index), ...tempOccupations.slice(index + 1)];\n }\n }\n });\n }\n \n if (this.state.tempJobPath && this.state.tempJobPath.occupations && this.state.tempJobPath.occupations?.length > 0) {\n this.state.tempJobPath.occupations.map((j) => {\n if (j !== null) {\n const index: number = tempOccupations.findIndex(n => n.conceptUriDa === j.conceptUriDa);\n if (index > -1) {\n tempOccupations = [...tempOccupations.slice(0, index), ...tempOccupations.slice(index + 1)];\n }\n }\n });\n }\n }\n }\n else \n {\n if (this.state.tempJobPath?.workAreas?.length > 0)\n {\n let tempList: OccupationOpportunityModel[] = [];\n this.state.tempJobPath?.workAreas?.forEach((workArea) => {\n const candidateWorkArea = this.state.dsaData?.find(x => x?.Profession?.toLowerCase() === 'akademiker')?.WorkAreas?.find(w => w?.Title === workArea);\n if (candidateWorkArea && candidateWorkArea.PredefinedOccupations)\n {\n candidateWorkArea?.PredefinedOccupations?.forEach((value) => {\n const item = this.props.occupations?.find((occu) => occu?.conceptUriDa === value?.ConceptUriDa);\n if (item)\n {\n tempList.push(item);\n return;\n }\n });\n }\n });\n tempOccupations = tempList;\n }\n\n if (this.state.tempJobPath?.occupations?.length > 0)\n tempOccupations = tempOccupations?.filter(x => this.state.tempJobPath.occupations.findIndex(o => o?.conceptUriDa === x?.conceptUriDa) === -1);\n }\n \n return tempOccupations;\n }\n\n // Method used to remove staticitems and added items from the big item list\n handleQualificationsToDisplay = (): QualificationModel[] => {\n let tempQualifications: QualificationModel[] = [];\n\n if(this.props.qualifications && this.props.qualifications.length > 0)\n {\n tempQualifications = [...this.props.qualifications?.filter(x => x?.isMapped)];\n\n if (this.props.qualificationsFromCV && this.props.qualificationsFromCV.length > 0) {\n this.props.qualificationsFromCV.map((x) => {\n const index: number = tempQualifications.findIndex(p => p.id === x.id);\n if (index > -1) {\n tempQualifications = [...tempQualifications.slice(0, index), ...tempQualifications.slice(index + 1)];\n }\n });\n }\n \n if (this.state.tempJobPath && this.state.tempJobPath.qualifications && this.state.tempJobPath.qualifications.length > 0) {\n this.state.tempJobPath.qualifications.map((j) => {\n const index: number = tempQualifications.findIndex(n => n.id === j.id);\n \n if (index > -1) {\n tempQualifications = [...tempQualifications.slice(0, index), ...tempQualifications.slice(index + 1)];\n }\n });\n }\n }\n\n return tempQualifications;\n }\n\n handleGetWorkAreas = (dsaData: DSADataModel[]) => {\n let tempArr: SearchListModel[] = [];\n dsaData?.map((x) => {\n if (this.state.tempJobPath?.profession?.length > 0 && x?.Profession === this.state.tempJobPath?.profession)\n {\n x.WorkAreas?.map((p) => {\n tempArr.push(new SearchListModel(p?.Title, p?.Title))\n });\n }\n });\n return tempArr;\n }\n\n handleGetAreaOfSpecialisation = (dsaData: DSADataModel[]) => {\n let tempArr: SearchListModel[] = [];\n dsaData?.map((x) => {\n if (x?.Profession === this.state.tempJobPath?.profession)\n {\n x.WorkAreas?.map((p) => {\n if (this.state.tempJobPath?.workAreas?.includes(p.Title))\n {\n p?.AreaOfSpecialisation?.map((a, index) => {\n if (!this.state.tempJobPath?.areaOfSpecializations?.includes(a?.Title) && tempArr?.find(x => x?.name === a?.Title) === undefined)\n tempArr.push(new SearchListModel(a.Title + index.toString(), a.Title));\n });\n }\n })\n }\n });\n \n return tempArr;\n }\n\n updateJobPathHandler = (options: { event: any, attribute?: string, dataEntity?: any }) => {\n let tempJobPath = {...this.state.tempJobPath};\n \n switch (options.attribute) {\n case \"occupations\":\n if (!tempJobPath?.occupations?.includes(options.dataEntity)) {\n tempJobPath.occupations = [...this.state.tempJobPath?.occupations ?? [], options.dataEntity];\n }\n break;\n \n case \"qualifications\":\n if (!tempJobPath?.qualifications?.includes(options.dataEntity)) {\n tempJobPath.qualifications = [...this.state.tempJobPath?.qualifications ?? [], options.dataEntity];\n }\n break;\n \n // Specific implementation for DSA\n case \"profession\":\n tempJobPath.type = JobPathType.DSAJobPath;\n tempJobPath.profession = options?.dataEntity?.name;\n tempJobPath.occupations = [];\n tempJobPath.qualifications = [];\n tempJobPath.similarQualifications = [];\n tempJobPath.filteredOccupations = [];\n tempJobPath.workAreas = [];\n tempJobPath.areaOfSpecializations = [];\n tempJobPath.specializationKeywords = [];\n break;\n \n // Specific implementation for DSA\n case \"workarea\": {\n if (isEmptyOrUndefined(tempJobPath?.workAreas))\n tempJobPath.workAreas = [];\n \n if(!tempJobPath.workAreas?.includes(options?.dataEntity?.name))\n tempJobPath.workAreas = [...tempJobPath.workAreas, options.dataEntity.name];\n \n tempJobPath.specializationKeywords = this.getSpecializedKeywordsByWorkArea(tempJobPath);\n break;\n }\n \n // Specific implementation for DSA\n case \"areaofspecialization\": {\n if (isEmptyOrUndefined(tempJobPath?.areaOfSpecializations))\n tempJobPath.areaOfSpecializations = [];\n \n if(!tempJobPath.areaOfSpecializations?.includes(options?.dataEntity?.name))\n {\n tempJobPath.areaOfSpecializations = [...tempJobPath.areaOfSpecializations, options.dataEntity.name];\n \n let specializationKeywords:string[] = []\n \n tempJobPath.areaOfSpecializations.map((el) => {\n this.state.dsaData?.map((x) => {\n {\n x.WorkAreas?.map((p) => {\n {\n p?.AreaOfSpecialisation?.map((a) => {\n if(x?.Profession === tempJobPath?.profession && el === a?.Title){\n specializationKeywords = [...specializationKeywords, ...a.SpecializationKeywords]\n }\n });\n }\n });\n }\n })\n });\n tempJobPath.specializationKeywords = specializationKeywords;\n }\n break;\n }\n \n default:\n break;\n }\n\n this.setState({\n tempJobPath: tempJobPath,\n });\n }\n\n getSpecializedKeywordsByWorkArea = (tempJobPath: JobPathModel) => {\n let specializationKeywords:string[] = [];\n \n tempJobPath.workAreas?.map((workArea) => (\n this.state.dsaData?.map((x) => {\n {\n x.WorkAreas?.map((p) => {\n {\n p?.AreaOfSpecialisation?.map((a) => {\n if(x?.Profession === tempJobPath?.profession && workArea === p?.Title){\n a.SpecializationKeywords.map((sk) => {\n if(!specializationKeywords.includes(sk)){\n specializationKeywords = [...specializationKeywords, sk];\n }\n })\n }\n });\n }\n });\n }\n })\n ));\n \n return specializationKeywords;\n }\n\n chooseJobpathType = (property: string) => {\n const jobPathID: Guid = this.state.tempJobPath?.id;\n const imageId: number = this.state.tempJobPath?.imageId;\n\n switch (property) {\n case \"dsa\":\n this.setState({\n tempJobPath: {\n ...emptyJobPathModel(imageId, JobPathType.DSAJobPath),\n id: jobPathID,\n },\n });\n\n break;\n\n case \"normal\":\n this.setState({\n tempJobPath: {\n ...emptyJobPathModel(imageId, JobPathType.NormalJobPath),\n id: jobPathID,\n },\n });\n \n break;\n \n default:\n break;\n }\n }\n\n render() {\n // if (this.state.jobFetchError) {\n // swal({\n // title: 'Fejl opstod ved fremvisning af jobbets beskrivelse',\n // icon: 'error',\n // timer: 1500,\n // buttons: [false],\n // closeOnClickOutside: true,\n // });\n // this.props.closeModal();\n // this.setState({\n // jobFetchError: false\n // });\n // }\n\n const input = document.getElementById('jobpathview-name-wizard') as HTMLInputElement;\n\n return (\n \n \n \n

    Opret dit første søgefilter

    \n \n
    \n
    \n\n \n

    Vælg hvilken type søgefilter du gerne vil oprette *

    \n\n
    \n \n \n
    \n\n
    \n

    Indtast søgefiltrets navn *

    \n this.updateJobPathTextHandler({ event: e, attribute: \"name\" })} value={this.state.tempJobPath.name}>\n
    \n\n {this.state.tempJobPath?.type === JobPathType.NormalJobPath\n ?\n <>\n
    \n
    \n
    \n

    Stillingsbetegnelse {this.state.tempJobPath?.profession?.toLowerCase() !== \"akademiker\" ? * : null}

    \n {/* {\n isEmptyOrUndefined(this.props.jobBarometerUrl) ? null :\n Hent jobbarometer\n } */}\n
    \n\n
    \n {this.state.tempJobPath?.occupations && this.state.tempJobPath?.occupations.map((occupation) => (\n this.removeTag(e, occupation.conceptUriDa, 'occupation')}>\n ))}\n
    \n
    \n !isEmptyOrUndefined(x) && this.state.tempJobPath?.occupations?.findIndex(p => p?.conceptUriDa === x?.conceptUriDa) === -1)\n : []\n }\n staticItemDescription=\"Stillingsbetegnelser ud fra kvalifikationer:\"\n selectedElementHandler={(options) => this.updateJobPathHandler({ event: options.event, dataEntity: options.dataEntity, attribute: 'occupations' })} />\n
    \n
    \n

    Kvalifikationer

    \n
    \n {this.state.tempJobPath?.qualifications && this.state.tempJobPath?.qualifications.map((qualification) => (\n this.removeTag(e, qualification.id, 'qualification')} isOnCV={this.props.qualificationsFromCV.findIndex(x => x.name === qualification.name && x.id === qualification.id) > -1 ? true : false}>\n ))}\n
    \n
    \n this.updateJobPathHandler({ event: options.event, dataEntity: options.dataEntity, attribute: 'qualifications' })}\n similarItems={this.state.tempJobPath?.similarQualifications && this.state.tempJobPath?.similarQualifications?.length > 0 ? this.state.tempJobPath?.similarQualifications.filter(x => !isEmptyOrUndefined(x) && this.state.tempJobPath.qualifications.find(p => p.id === x.id) === undefined) : []}\n shouldDisplaySimilarItems={true} />\n
    \n

    \n
    \n \n :\n
    \n
    \n
    \n

    Faggruppe *

    \n {/* Removed for Jobportal */}\n {/* {\n isEmptyOrUndefined(this.props.jobBarometerUrl) ? null :\n Hent jobbarometer\n } */}\n
    \n \n
    \n {this.state.tempJobPath?.profession?.length > 0 \n ? this.removeTag(e, this.state.tempJobPath?.profession, 'profession')} >\n : null}\n
    \n
    \n !this.state.tempJobPath?.profession?.includes(x?.name))}\n selectedElementHandler={(options) => this.updateJobPathHandler({ event: options.event, dataEntity: options.dataEntity, attribute: 'profession' })}\n closeOnClick\n />\n
    \n\n
    \n

    Arbejdsområder

    \n
    \n {this.state.tempJobPath?.workAreas?.length > 0\n ? \n this.state.tempJobPath?.workAreas?.map((val, index) => (\n this.removeTag(e, val, 'workarea')} >\n ))\n : null}\n
    \n
    \n !this.state.tempJobPath?.workAreas?.includes(x?.name)) : [] }\n selectedElementHandler={(options) => this.updateJobPathHandler({ event: options.event, dataEntity: options.dataEntity, attribute: 'workarea' })}\n />\n
    \n\n {this.state.tempJobPath?.profession?.toLowerCase() === 'akademiker' ?\n
    \n
    \n

    Stillingsbetegnelse {this.state.tempJobPath?.profession?.toLowerCase() !== \"akademiker\" ? * : null}

    \n {/* {\n isEmptyOrUndefined(this.props.jobBarometerUrl) ? null :\n Hent jobbarometer\n } */}\n
    \n\n
    \n {this.state.tempJobPath?.occupations && this.state.tempJobPath?.occupations.map((occupation) => (\n this.removeTag(e, occupation.conceptUriDa, 'occupation')}>\n ))}\n
    \n
    \n !isEmptyOrUndefined(x) && this.state.tempJobPath?.occupations?.findIndex(p => p?.conceptUriDa === x?.conceptUriDa) === -1)\n : []\n }\n staticItemDescription=\"Stillingsbetegnelser ud fra kvalifikationer:\"\n selectedElementHandler={(options) => this.updateJobPathHandler({ event: options.event, dataEntity: options.dataEntity, attribute: 'occupations' })} />\n
    \n :\n
    \n

    Specialer

    \n
    \n {this.state.tempJobPath?.areaOfSpecializations?.length > 0\n ? \n this.state.tempJobPath.areaOfSpecializations?.map((val) => (\n this.removeTag(e, val, 'areaofspecialization')} >\n ))\n : null}\n
    \n
    \n !this.state.tempJobPath?.areaOfSpecializations?.includes(x?.name))}\n selectedElementHandler={(options) => this.updateJobPathHandler({ event: options.event, dataEntity: options.dataEntity, attribute: 'areaofspecialization' })}\n />\n
    }\n \n

    \n
    \n }\n
    \n\n \n \n 0 && this.state.tempJobPath?.occupations?.length > 0 || input?.value?.length > 0 && this.state.tempJobPath?.profession?.length > 0 ? \"\" : \"button-disabled\"} \n disabled={input?.value?.length > 0 && input?.value?.toLowerCase() !== 'øvrige' && this.state.tempJobPath?.occupations?.length > 0 || input?.value?.length > 0 && this.state.tempJobPath?.profession?.length > 0 ? false : true} \n buttonText=\"Opret søgefilter\" \n primaryButton={true} \n onClick={() => this.saveTempJobPath()}>\n \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ModalForAddJobPathWizard);","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport { AppState } from '../../store';\nimport { _Text } from '../../i18n/translations';\nimport JobModel from '../../models/JobModel';\nimport { bindActionCreators } from 'redux';\nimport JobPathList from '../../components/Lists/JobPathList';\nimport JobPathView from '../../components/JobPathView';\nimport JobPathModel, { isJobPathSaved, JobPathType } from '../../models/JobPathModel';\nimport QualificationModel from '../../models/QualificationModel';\nimport OccupationOpportunityModel from '../../models/OccupationOpportunityModel';\nimport { startAddJobPath, setJobPathToDisplay, clearJobPathData } from '../../store/JobPathList/actions';\nimport IndustryModel from '../../models/IndustryModel';\nimport { jobPathImages } from '../../helpers/ImageHelper';\nimport { Guid } from 'guid-typescript';\nimport { handleBeforeUnload } from '../../helpers/WarnUserBeforeUnload';\nimport { emptyJobPathModel } from '../../helpers/CreateEmptyDataObjects';\nimport { isEmptyOrUndefined, isObjEmpty } from '../../helpers/TypeChecks';\nimport { sweetAlertPopup } from '../../components/SweetAlertCustom/SweetAlertCustom';\nimport { MeetingModel } from '../../models/MeetingModel';\nimport { shouldDisplayLoader } from '../../store/Preparation/actions';\nimport Loader from '../../components/Loader';\nimport addIcon from '../../images/addTagIcon.svg';\nimport './JobPathScene.scss';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faPlus } from '@fortawesome/free-solid-svg-icons';\nimport ModalForAddJobPathWizard from '../../components/ModalForAddJobPathWizard';\n\ninterface OwnProps {\n}\n\ninterface LinkStateProp {\n searchedJobs: JobModel[];\n jobPaths: JobPathModel[];\n qualifications: QualificationModel[];\n occupations: OccupationOpportunityModel[];\n industries: IndustryModel[];\n jobPathToDisplay: Guid;\n newestMyPlan: MeetingModel;\n isNewestMyPlanFetched: boolean; \n isMyPlanJobpathsAdded: boolean;\n displayLoader: boolean,\n windowInnerWidth: number;\n hasJobPathFilters: boolean | null;\n}\n\ninterface LinkDispathProps {\n startAddJobPath: (jobPath: JobPathModel) => void;\n setJobPathToDisplay: (jobpathID: Guid) => void;\n shouldDisplayLoader: (shouldDisplayLoader: boolean) => void;\n}\n\ninterface State {\n mobileEditJobpath: boolean;\n openAddJobpathModal: boolean;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispathProps => ({\n startAddJobPath: bindActionCreators(startAddJobPath, dispatch),\n setJobPathToDisplay: bindActionCreators(setJobPathToDisplay, dispatch),\n shouldDisplayLoader: bindActionCreators(shouldDisplayLoader, dispatch),\n});\n\nconst mapStateToProps = (state: AppState): LinkStateProp => ({\n searchedJobs: state.jobs.allJobs,\n qualifications: state.jobs.qualifications,\n occupations: state.jobs.occupations,\n industries: state.jobs.industries,\n jobPaths: state.jobPathList.jobPaths,\n jobPathToDisplay: state.jobPathList.jobPathToDisplay,\n newestMyPlan: state.myPlanMeeting.newestMyPlan,\n isNewestMyPlanFetched: state.myPlanMeeting.isDoneFetchingNewestMyPlan,\n isMyPlanJobpathsAdded: state.jobPathList.isMyPlanJobPathsAdded,\n displayLoader: state.preparation.displayLoader,\n windowInnerWidth: state.searchJob.windowInnerWidth,\n hasJobPathFilters: state.person.hasJobPathFilters,\n});\n\nexport type Props = LinkDispathProps & LinkStateProp & OwnProps;\n\nclass JobPathScene extends React.PureComponent {\n constructor(props: any) {\n super(props);\n this.state = {\n mobileEditJobpath: false,\n openAddJobpathModal: false,\n }\n }\n\n componentDidMount() {\n if (this.props.hasJobPathFilters !== null && this.props.jobPaths?.length === 0)\n this.handleOpenAddJobPathModal();\n }\n\n componentDidUpdate(prevProps: Props) {\n if(this.props.newestMyPlan && this.props.newestMyPlan.myPlan && this.props.newestMyPlan.myPlan.jobPaths)\n {\n if (this.props.isNewestMyPlanFetched && this.props.isMyPlanJobpathsAdded) {\n setTimeout(() => {\n this.props.shouldDisplayLoader(false);\n }, 500);\n }\n } \n else {\n if (!prevProps.isNewestMyPlanFetched && this.props.isNewestMyPlanFetched) {\n setTimeout(() => {\n this.props.shouldDisplayLoader(false);\n }, 1500);\n }\n }\n\n if (prevProps.jobPaths !== this.props.jobPaths && this.props.jobPaths?.length === 0 && prevProps.jobPaths?.length === 0 || prevProps.hasJobPathFilters !== this.props.hasJobPathFilters && !this.props.hasJobPathFilters)\n {\n this.handleOpenAddJobPathModal();\n }\n }\n\n showJobPath = (event: any, id: Guid) => {\n this.props.setJobPathToDisplay(id);\n this.setState({\n mobileEditJobpath: this.props.windowInnerWidth <= 550,\n });\n }\n \n handleChooseJobPath = () => {\n sweetAlertPopup({confirmButton: true, additionalConfirmButton: true, title: 'Opret søgefilter', subHeader: 'Vælg hvilken type søgefilter du vil oprette'}, (result) => {\n if (result.confirmButtonClicked)\n {\n this.addJobPathHandler(JobPathType.NormalJobPath)\n }\n else if (result.additionalConfirmButtonClicked)\n {\n this.addJobPathHandler(JobPathType.DSAJobPath);\n }\n });\n }\n\n handleOpenAddJobPathModal = () => {\n this.setState({\n openAddJobpathModal: true,\n });\n }\n\n handleCancelAddJobPathModal = () => {\n this.setState({\n openAddJobpathModal: false,\n })\n }\n\n handleStopEdit = () => {\n this.setState({\n mobileEditJobpath: false\n })\n }\n\n addJobPathHandler = (type: JobPathType) => {\n let imageId = -1;\n for (let i = 0; i < jobPathImages.length; i++) {\n let isUsedIcon = false;\n for (let k = 0; k < this.props.jobPaths.length; k++) {\n if (i == this.props.jobPaths[k].imageId)\n isUsedIcon = true;\n }\n\n if (!isUsedIcon) {\n imageId = i;\n break;\n }\n }\n let tempJobPath: JobPathModel = emptyJobPathModel(imageId, type);\n tempJobPath.isSaved = false;\n this.props.startAddJobPath(tempJobPath);\n this.setState({\n mobileEditJobpath: this.props.windowInnerWidth <= 550 ? true : false,\n })\n }\n\n handleJobPathToDisplay = (): JobPathModel => {\n // if (this.props.jobPathToDisplay.toString() !== Guid.EMPTY)\n // {\n // const jobPath: JobPathModel | undefined = this.props.jobPaths?.find(j => j?.id === this.props.jobPathToDisplay);\n // if (jobPath)\n // {\n // this.setState({\n // jobPathToDisplay: jobPath,\n // });\n // }\n // else \n // {\n // this.setState({\n // jobPathToDisplay: this.props.jobPaths[0],\n // });\n // }\n // }\n // else \n // {\n // this.setState({\n // jobPathToDisplay: this.props.jobPaths[0],\n // });\n // }\n if (this.props.jobPathToDisplay.toString() !== Guid.EMPTY)\n {\n const jobPath: JobPathModel | undefined = this.props.jobPaths?.find(j => j?.id === this.props.jobPathToDisplay);\n if (jobPath)\n return jobPath;\n }\n \n return this.props.jobPaths[0];\n }\n\n render() {\n if(this.props.jobPaths && this.props.jobPaths.length > 0 && isObjEmpty(this.props.jobPathToDisplay)) \n this.props.setJobPathToDisplay(this.props.jobPaths[0]?.id);\n\n const isMobile: boolean = this.props.windowInnerWidth <= 550;\n const isMaxJobpathsCreated: boolean = this.props.jobPaths && this.props.jobPaths.length === 5 ? true : false;\n\n return (\n \n this.handleCancelAddJobPathModal()}\n jobPathList={this.props.jobPaths && this.props.jobPaths.length > 0 ? this.props.jobPaths : null}\n occupations={this.props.occupations}\n qualifications={this.props.qualifications}\n addJobPath={() => this.handleChooseJobPath()}\n />\n {this.props.displayLoader ? : null}\n
    \n {!this.state.mobileEditJobpath && isMobile || !isMobile\n ?\n
    \n this.handleOpenAddJobPathModal() : () => this.handleChooseJobPath()} onJobPathClick={(e, id) => this.showJobPath(e, id)} jobPathToShow={this.props.jobPathToDisplay} jobPaths={this.props.jobPaths}>\n
    \n : null}\n\n {this.props.jobPaths?.length === 0 && isMobile ?

    Der er ikke oprettet et søgefilter.

    : null}\n\n {isMobile && !this.state.mobileEditJobpath ?\n \n : null}\n\n {this.state.mobileEditJobpath && isMobile || !isMobile\n ?\n this.props.jobPaths.length > 0\n ?\n
    \n 0 ? this.props.jobPaths : null} \n industries={[]} occupations={this.props.occupations} qualifications={this.props.qualifications} \n jobPath={this.props.jobPathToDisplay?.toString() !== Guid.EMPTY ? this.props.jobPaths[this.props.jobPaths.findIndex(x => x.id === this.props.jobPathToDisplay)] : this.props.jobPaths[0]}\n onMobileDeleteJobpath={isMobile ? () => this.handleStopEdit() : () => {}} onMobileBackArrowClick={isMobile ? () => this.handleStopEdit() : () => {}} isMobile={isMobile} />\n
    \n : null\n : null}\n
    \n
    \n );\n\n\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(JobPathScene);\n","import * as actions from \"./types\";\n\nexport const clearAllPrintData = (): actions.PrintActionTypes => ({\n type: actions.CLEAR_ALL_PRINT_DATA,\n});\n\nexport const setShouldPrint = (shouldPrint: boolean): actions.PrintActionTypes => ({\n type: actions.SHOULD_PRINT,\n data: shouldPrint\n});\n\nexport const setElementToPrint = (element: string): actions.PrintActionTypes => ({\n type: actions.SET_ELEMENT_TO_PRINT,\n data: element\n});\n\nexport const clearPrintedElement = (): actions.PrintActionTypes => ({\n type: actions.CLEAR_PRINTED_ELEMENT\n});","import * as React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport { setShouldPrint, clearPrintedElement } from '../../store/Print/actions';\nimport { connect } from \"react-redux\";\nimport './Print.scss';\n\ninterface Prop {\n element: string;\n shouldPrint: boolean;\n}\n\ninterface State {\n\n}\n\ninterface LinkDispatchProps {\n setShouldPrint: (shouldPrint: boolean) => void;\n clearPrintedElement: () => any;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n setShouldPrint: bindActionCreators(setShouldPrint, dispatch),\n clearPrintedElement: bindActionCreators(clearPrintedElement, dispatch),\n});\n\ntype Props = Prop & LinkDispatchProps;\n\nclass Print extends React.Component {\n constructor(props: Props) {\n super(props);\n }\n\n componentDidUpdate(prevProps: Props) {\n if (!prevProps.shouldPrint && this.props.shouldPrint) {\n setTimeout(() => {\n window.print();\n this.props.setShouldPrint(false);\n }, 200);\n }\n }\n\n render() {\n // const mbitLogo = require('../../images/mbit-logo.png');\n\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 \n \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n
    \n\n
    \n )\n }\n}\n\nexport default connect(null, mapDispatchToProps)(Print);\n\n","import * as React from 'react';\nimport { Redirect } from 'react-router-dom';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport { connect } from \"react-redux\";\nimport { showMyPlanDisclaimer } from \"../../store/MyPlan/actions\";\nimport { bindActionCreators } from 'redux';\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport DsaButton from '../../components/DsaButton';\nimport { addMyPlanToDB } from '../../store/MyPlan/actions';\nimport { MeetingModel } from '../../models/MeetingModel';\nimport { JournalSystem } from '../../models/Template/JobMatchTemplateModel';\nimport { ToastIcon, TopToast } from '../../helpers/ToastHelper';\nimport Loader from '../../components/Loader';\nimport { createMeeting } from '../../helpers/MeetingHelper';\nimport withReactContent from 'sweetalert2-react-content';\nimport swal from \"sweetalert2\";\nimport './FooterScene.scss';\nimport { AccountInfo } from '@azure/msal-browser';\nimport { AppState } from '../../store';\nimport { AuthenticatedTemplate, MsalContext, UnauthenticatedTemplate } from '@azure/msal-react';\nimport { UnemploymentFundMembershipType } from '../../models/UnemploymentFundMembershipType';\nimport { JobmatchRoute } from '../../routes';\n\ninterface OwnProps {\n page: string;\n}\n\ninterface LinkStateProps {\n windowInnerWidth: number;\n account: AccountInfo | null;\n personMembership: UnemploymentFundMembershipType;\n isAuthenticated: boolean;\n}\n\ninterface LinkDispatchProps {\n showMyPlanDisclaimer: (shouldShowMyPlanDisclaimer: boolean) => void;\n addMyPlanToDB: (myPlanMeeting: MeetingModel, knowledgeSharingSystem: JournalSystem, callback: (success: boolean) => void) => void;\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n windowInnerWidth: state.searchJob.windowInnerWidth,\n account: state.auth.account,\n personMembership: state.person.personMembership,\n isAuthenticated: state.auth.isAuthenticated,\n});\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n showMyPlanDisclaimer: bindActionCreators(showMyPlanDisclaimer, dispatch),\n addMyPlanToDB: bindActionCreators(addMyPlanToDB, dispatch),\n});\n\n\n\nexport interface State {\n currentIndexInRoutes: Number;\n currentUrl: string;\n isClicked: boolean;\n navLinks: { path: string, name: string }[];\n mobileNavLinks: { path: string, name: string }[];\n isSavingMyPlan: boolean;\n shouldRedirect: boolean;\n}\n\ntype Props = OwnProps & LinkStateProps & LinkDispatchProps;\n\nclass FooterScene extends React.Component {\n static contextType = MsalContext;\n\n constructor(props: Props)\n {\n super(props);\n this.state = {\n currentIndexInRoutes: 1,\n currentUrl: \"\",\n isClicked: false,\n navLinks: [\n { path: \"/jobpath\", name: \"Søgefiltre\" },\n { path: \"/\", name: \"Jobsøgning\" }, \n { path: \"/minliste\", name: \"Min liste\" }\n ],\n mobileNavLinks: [\n { path: \"/jobpath\", name: \"Søgefiltre\" },\n { path: \"/\", name: this.props.isAuthenticated ? \"Jobsøgning\" : \"Listevisning\" }, \n { path: \"/map\", name: this.props.isAuthenticated ? \"Kort\" : \"Kortvisning\" },\n { path: \"/minliste\", name: \"Min liste\" }\n ],\n isSavingMyPlan: false,\n shouldRedirect: false,\n }\n }\n\n moveTo = (index: number, forward: boolean) => {\n var goToIndex = index;\n\n if (forward)\n goToIndex = + 1;\n else\n goToIndex = - 1;\n \n this.setState({ \n currentIndexInRoutes: goToIndex,\n // currentUrl: this.state.routes[goToIndex].details.to \n });\n }\n\n componentDidMount() {\n this.setState({ currentUrl: window.location.pathname })\n }\n\n goForward = (currUrl: string) => {\n switch (currUrl) {\n case \"/jobpath\":\n this.setState({ currentUrl: \"/\", isClicked: true });\n break;\n case \"/\":\n this.setState({ currentUrl: \"/minliste\", isClicked: true });\n break;\n default:\n return;\n }\n }\n\n goBack = (currUrl: string) => {\n let url: string;\n let isClicked: boolean;\n switch (currUrl) {\n case \"/\":\n url = \"/jobpath\";\n isClicked = true;\n break;\n case \"/minliste\":\n url = \"/\";\n isClicked = true;\n break;\n default:\n url = \"\"\n isClicked = false;\n break;\n\n }\n if (url && isClicked) {\n this.setState({\n currentUrl: url,\n isClicked: isClicked\n })\n }\n\n }\n\n assignCurrentUrl = (url: string) => {\n this.setState({ currentUrl: url, isClicked: true });\n }\n\n updateMyPlan = () => {\n // this.props.showMyPlanDisclaimer(true);\n this.setState({\n isSavingMyPlan: true\n });\n \n const meeting: MeetingModel = createMeeting();\n \n this.props.addMyPlanToDB(meeting, JournalSystem.KMDMomentum, (success) => {\n if (success)\n {\n this.setState({\n isSavingMyPlan: false,\n });\n const mySwal = withReactContent(swal);\n mySwal.fire({\n title: 'Samtalen er afsluttet.',\n icon: 'success',\n timer: 2000,\n showCancelButton: false,\n showConfirmButton: false,\n // closeOnClickOutside: true,\n customClass: {\n container: \"swal-wrapper-disclaimer\"\n }\n });\n\n setTimeout(() => {\n this.setState({\n shouldRedirect: true,\n });\n }, 2000);\n }\n else \n {\n TopToast(ToastIcon.ERROR).fire({\n timer: 3500,\n title: 'Fejl! Opsummering blev ikke publiceret'\n });\n\n this.setState({\n shouldRedirect: false,\n isSavingMyPlan: false,\n });\n }\n });\n }\n\n render() {\n const isAuthenticated: boolean = this.props.account != null;\n const isMobile: boolean = this.props.windowInnerWidth <= 550;\n\n let navList = isMobile ? this.state.mobileNavLinks : this.state.navLinks;\n\n if (this.state.isClicked) \n {\n this.setState({ isClicked: false });\n return \n }\n\n if (this.state.shouldRedirect) \n {\n this.setState({\n shouldRedirect: false,\n });\n TopToast(ToastIcon.SUCCESS).fire({\n title: 'Samtalen er afsluttet!',\n timer: 4000,\n showCloseButton: true,\n });\n return ;\n }\n \n \n let backButton;\n if (window.location.pathname == \"/preparation\")\n backButton = {}} />\n else\n backButton = this.goBack(this.state.currentUrl)} />\n\n if (window.location.pathname == \"/jobpath\" || !isAuthenticated || this.props.personMembership === UnemploymentFundMembershipType.NotAMember)\n backButton = null;\n\n if (isMobile && this.props.personMembership === UnemploymentFundMembershipType.NotAMember)\n navList = navList?.filter(x => x?.path !== '/jobpath' && x?.path !== '/minliste');\n\n return (\n \n {this.state.isSavingMyPlan ? : null}\n {this.props.page !== AgreementCategoryTitles.JOBINSPIRATION && this.props.page !== AgreementCategoryTitles.JOBINSPIRATION_PREPARATION ?\n <>\n \n {isMobile || this.props.personMembership !== UnemploymentFundMembershipType.NotAMember\n ?\n
    \n <>\n
    \n
    \n {backButton}\n
    \n
    \n
    \n
    \n
    \n {navList?.map((pathObject, index) => (\n \n ))}\n
    \n
    \n
    \n
    \n
    \n {window.location.pathname !== \"/minliste\"\n ? this.goForward(this.state.currentUrl)} />\n : null}\n
    \n
    \n \n
    \n : null}\n
    \n \n {this.props.windowInnerWidth <= 550 ?\n
    \n
    \n
    \n
    \n {navList?.map((pathObject, index) => (\n pathObject?.path !== '/jobpath' && pathObject?.path !== '/minliste'\n ?\n \n : null\n ))}\n
    \n
    \n
    \n
    \n : null}\n
    \n \n : null}\n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FooterScene);","import React, { useEffect, useRef, useState } from 'react';\nimport './GeneralModalRightSide.scss';\nimport { Modal, Button } from 'react-bootstrap';\nimport Badge from '@material-ui/core/Badge';\nimport { useSelector } from 'react-redux';\nimport { AppState } from '../../../store';\nimport { createStyles, withStyles } from '@material-ui/core';\nimport CloseButton from '../../Buttons/CloseButton';\nlet statisticImg = require('../../../images/StatisticButton.svg');\nlet personImg = require('../../../images/PersonButton.svg');\nlet agreementImg = require('../../../images/agreementImg.svg');\nlet helpImg = require('../../../images/HelpButton.svg');\n\n//to decrease padding and therefore make the badge smaller.\nconst StyledBadge = withStyles(() =>\n createStyles({\n badge: {\n padding: '0 4px',\n height: '16px',\n minWidth: '16px'\n },\n\n }))(Badge);\n\n\n\nfunction GeneralModalRightSide(props: { buttonText: string, buttonCssClasses: string, headerText: string, children: any }) {\n const [show, setShow] = useState(false);\n const qualificationAgreementCount = useSelector((state: AppState) => state.agreement?.qualificationAgreements?.length > 0 ? 1 : 0);\n const agreementCount = useSelector((state: AppState) => state.agreement?.textAgreements?.length + qualificationAgreementCount \n + state.jobPathList?.jobPaths?.reduce((acc, element) => acc + element?.jobs?.length + element?.companyJobs?.length, 0) \n + state.jobPathList?.remainingJobPath?.jobs?.length + state.jobPathList?.remainingJobPath?.companyJobs?.length);\n\n const handleClose = () => setShow(false);\n const handleShow = () => setShow(true);\n\n function renderIcon(type: string) {\n switch (type) {\n case \"\":\n return ;\n\n case \"Statistik\":\n return ;\n\n case \"Aftaler\":\n return ;\n\n case \"Hjælp\":\n return \n\n default:\n break;\n }\n }\n\n return (\n \n {renderIcon(props.buttonText)}\n \n \n \n

    {props.headerText}

    \n \n
    \n {props.children}\n
    \n
    \n )\n}\n\nexport default GeneralModalRightSide","import * as React from 'react';\nimport './RedirectToButton.scss';\ninterface Props {\n nameOfPage: string;\n redirectClicked: (e: React.MouseEvent) => void; \n}\n\nclass RedirectToButton extends React.Component {\n\n render() {\n return (\n \n );\n }\n}\n\nexport default RedirectToButton;\n","import React, { useEffect, useState } from 'react'\nimport { loginRedirectRequest, silentLoginRequest } from '../authConfig';\nimport { useSelector } from 'react-redux';\nimport { useMsal, useIsAuthenticated } from \"@azure/msal-react\";\nimport './LoginButton.scss';\nimport { AppState } from '../../store';\n\ntype Props = {}\n\nfunction LoginButton({}: Props) {\n const {instance } = useMsal();\n \n const windowInnerWidth = useSelector((state: AppState) => state.searchJob.windowInnerWidth) \n \n return (\n
    \n \n
    \n )\n}\n\nexport default LoginButton","import * as React from 'react';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport { connect } from \"react-redux\";\nimport { AppState } from '../../store';\nimport GeneralModalRightSide from '../ModalComponents/GeneralModalRightSide/GeneralModalRightSide';\nimport { AccountInfo, PublicClientApplication } from '@azure/msal-browser';\nimport JobMatchTemplateModel from '../../models/Template/JobMatchTemplateModel';\nimport RedirectToButton from '../Buttons/RedirectToButton';\nimport { Redirect } from 'react-router';\nimport { MSAL_CONFIG } from '../../AzureAuth/authConfig';\nimport LoginButton from '../../AzureAuth/LoginButton/LoginButton';\nimport { AuthenticatedTemplate, MsalContext, UnauthenticatedTemplate } from '@azure/msal-react';\nimport { JobmatchRoute } from '../../routes';\nimport { Dropdown } from 'react-bootstrap';\nimport QuestionMark from '../../images/question-mark-circle-icon.svg';\nimport Megaphone from '../../images/megaphone.svg';\nimport './HeaderButtons.scss'\nimport DsaButton from '../DsaButton/DsaButton';\n\nexport interface Prop {\n showLoggedInUser?: boolean;\n}\n\ninterface State {\n showPopup: boolean;\n showProfileModal: boolean;\n redirectToOnboarding: boolean;\n}\n\ninterface LinkDispatchProps {\n}\n\ninterface LinkStateProps {\n account: AccountInfo | null;\n templates: JobMatchTemplateModel;\n}\n\nfunction mapDispatchToProps(\n dispatch: ThunkDispatch\n): LinkDispatchProps {\n return {\n };\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n account: state.auth.account,\n templates: state.template.templates,\n});\n\ntype Props = Prop & LinkDispatchProps & LinkStateProps;\n\nconst pca = new PublicClientApplication(MSAL_CONFIG);\n\nclass HeaderButtons extends React.Component {\n constructor(props: any) {\n super(props);\n this.state = {\n showPopup: false,\n showProfileModal: false,\n redirectToOnboarding: false,\n };\n }\n static contextType = MsalContext;\n\n userClicked = (event: React.MouseEvent) => {\n this.setState({\n showPopup: !this.state.showPopup\n });\n }\n\n handleAccountName = (): string => {\n if(this.context.accounts.length > 0){\n return this.context.accounts[0]?.idTokenClaims?.given_name + ' ' + this.context.accounts[0]?.idTokenClaims?.family_name;\n }\n return '';\n }\n\n handleRedirectToOnboarding = () => {\n this.setState({\n redirectToOnboarding: true,\n });\n }\n\n render() {\n if (this.state.redirectToOnboarding)\n {\n this.setState({\n redirectToOnboarding: false,\n });\n return ;\n }\n\n const rightSideButtons = [\n \n \n \n \n \n \n
    \n \n

    Har du spørgsmål?

    \n

    Ring til os
    Tlf. 33 15 10 66

    \n

    Mandag - torsdag
    kl. 09.00 - 16.00

    \n

    Fredag
    kl. 09.00 - 14.00

    \n

    Du kan også genbesøge onboardingvideoerne

    \n this.handleRedirectToOnboarding()} additionalClassNames='onboarding-btn' />\n
    \n
    \n
    \n
    ,\n \n

    {this.handleAccountName()}

    \n pca.logoutRedirect()} />\n
    \n ];\n\n\n\n return (\n
    \n \n {rightSideButtons}\n \n \n \n \n
    \n )\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(HeaderButtons);\n","import * as actions from './types';\nimport { ErrorActionTypes } from './types';\n\nexport const setErrorCantFindCitizen = (data: string): ErrorActionTypes => ({\n type: actions.SET_ERROR,\n error: data,\n});\n\nexport const setNoError = (data: string): ErrorActionTypes => ({\n type: actions.RESET_ERROR,\n error: data,\n});\n\nexport const clearAllErrors = (): ErrorActionTypes => ({\n type: actions.CLEAR_ALL_ERRORS,\n});\n","import * as actions from \"./types\";\nimport QualificationModel from \"../../models/QualificationModel\";\n\n export const clearAllSearchData = (): actions.SearchActionTypes => ({\n type: actions.CLEAR_ALL_SEARCH_DATA,\n });\n\n export const cleanQuery = (): actions.SearchActionTypes => ({\n type: actions.CLEAN_QUERY,\n });\n\n export const startSearch = (loading: boolean, value: string): actions.SearchActionTypes => ({\n type: actions.START_SEARCH,\n loading: loading,\n value: value\n });\n\n export const finishSearch = (loading: boolean, result: QualificationModel[]): actions.SearchActionTypes => ({\n type: actions.FINISH_SEARCH,\n loading: loading,\n result: result\n });\n\n export const updateSearch = (value: string): actions.SearchActionTypes => ({\n type: actions.UPDATE_SELECTION,\n value: value\n });","import * as React from 'react';\nimport { Translation } from 'react-i18next';\nimport './Headline.scss';\n\ninterface Props {\n title: string;\n}\n\nclass Headline extends React.Component {\n render() {\n return (\n \n {(t, { i18n }) => {t(this.props.title)}}\n \n );\n }\n}\n\nexport default Headline;\n","import * as React from 'react';\nimport { formatDate } from '../../helpers/DateHelper';\nimport { formatCollectionToString, formatCollectionWithoutProp, isEmptyOrUndefined, isObjEmpty } from '../../helpers/TypeChecks';\nimport CitizenModel from '../../models/CitizenModel';\nimport Headline from '../Headline';\nimport JobPathModel, { JobPathType } from '../../models/JobPathModel';\nimport TextAgreementModel from '../../models/Agreement/TextAgreementModel';\nimport QualificationAgreementModel from '../../models/Agreement/QualificationAgreementModel';\nimport './MyPlanTextComponent.scss';\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport { displayAgreementPageAndCategory, displayFilteredAgreements } from '../../helpers/DisplayAgreementPageAndCategory';\nimport FilteredAgreement from '../../models/Agreement/FilteredAgreement';\nimport DataGroup from '../../models/Template/TemplateModel';\nimport { ValueType } from '../../models/Template/InputModel';\nimport TagInput, { InputType } from '../../models/Template/DataTypes/TagInput';\nimport { convertFirstLetterToUppercase } from '../../helpers/FormatStrings';\nimport DataResponseModel from '../../models/Template/DataResponseModel';\nimport moment from 'moment';\n\ninterface Props {\n citizen: CitizenModel;\n jobPathList: JobPathModel[];\n textAgreements: TextAgreementModel[];\n qualificationAgreements: QualificationAgreementModel[];\n savedRemark: string; \n templateKey: string;\n guidanceTemplate?: DataGroup | null;\n customData?: DataResponseModel | null;\n}\n \ninterface State {\n}\n \nclass MyPlanTextComponent extends React.Component {\n constructor(props: Props) {\n super(props);\n }\n\n nextChar = (iterator: number): string => {\n let charToReturn: string = '';\n switch (iterator) {\n case 1:\n charToReturn = 'A';\n break;\n\n case 2:\n charToReturn = 'B';\n break;\n\n case 3:\n charToReturn = 'C';\n break;\n\n case 4:\n charToReturn = 'D';\n break;\n\n case 5:\n charToReturn = 'E';\n break;\n\n default:\n break;\n }\n\n return charToReturn;\n }\n\n render() { \n let iterator: number = 1;\n let agreementIt: number = 1;\n let companyAgreementIt: number = 1;\n\n let convertedCPR: string = '';\n let citizenName: string = ''; \n\n if (!isEmptyOrUndefined(this.props.citizen)) {\n if(!isEmptyOrUndefined(this.props.citizen.cpr))\n {\n let citizenCPR: string = this.props.citizen.cpr;\n convertedCPR = citizenCPR.slice(0, 6) + '-' + citizenCPR.slice(6);\n }\n\n if(!isEmptyOrUndefined(this.props.citizen.fullName))\n {\n citizenName = this.props.citizen.fullName;\n }\n }\n\n return (\n
    \n

    \n
    \n\n \n

    \n
    \n

    \n \n

    Min liste beskrivelse

    \n

    Du har oprettet følgende {this.props.jobPathList?.filter(j => j.name !== 'Øvrige')?.length} søgefiltrer:

    \n\n {this.props.jobPathList?.filter(j => j?.name !== \"Øvrige\")?.map((jobpath) => (\n
    \n

    {this.nextChar(iterator++) + \". \" + (!isEmptyOrUndefined(jobpath?.name) ? jobpath?.name : '')}

    \n {jobpath?.type === JobPathType.NormalJobPath \n ? \n
    \n

    Stillinger inden for dette søgefilter:

    \n {jobpath?.occupations?.length > 0 ? <>{formatCollectionToString(jobpath?.occupations, 'name', ', ', '.', true)}

    : null}\n\n

    Kvalifikationer fra CV:

    \n {jobpath?.qualifications?.length > 0 ? {formatCollectionToString(jobpath?.qualifications, 'name', ', ', '.', true)} : null}\n \n {jobpath?.description ? <>

    {jobpath?.description} : null}\n
    \n : \n
    \n
    \n

    Fagruppe og arbejdsområder inden for dette søgefilter:

    \n {jobpath?.profession?.length > 0 ? {jobpath?.profession} : null}\n {jobpath?.workAreas?.length > 0 ? <>{' - '}{formatCollectionWithoutProp(jobpath?.workAreas, ', ', '.', true)} : null}\n
    \n
    \n\n

    Specialer:

    \n {jobpath?.areaOfSpecializations?.length > 0 ? {formatCollectionWithoutProp(jobpath?.areaOfSpecializations, ', ', '.', true)} : null}\n\n {jobpath?.description?.length > 0 ? <>

    {jobpath?.description} : null}\n
    }\n
    \n
    \n ))\n }\n\n

    \n {this.props.jobPathList && this.props.jobPathList.length > 0 && this.props.jobPathList.find(jobpath => jobpath.jobs && jobpath.jobs.length > 0 && jobpath.jobs.find(j => j && !j.confirmedHandled) !== undefined) \n ?

    Inspiration til konkrete jobopslag:

    \n : null}\n\n {this.props.jobPathList &&\n this.props.jobPathList.map((jobpath, index) => (\n jobpath.jobs && jobpath.jobs.length > 0 \n ?\n
    \n {/*

    {agreementIt++ + \". \" + jobpath.name}:

    */}\n
      \n {jobpath.jobs.map((job) => (\n job && !job.confirmedHandled ?\n
    • \n

      {job.title} - Frist: {new Date(job.deadline).getTime() > new Date(2010,1,1,1).getTime() ? formatDate(job.deadline) : 'Ukendt'}\n
      \n {job.url}\n

      \n
    • \n : null\n ))}\n
    \n {index !== this.props.jobPathList.length - 1 ?
    :
    }\n
    \n : null\n ))\n } \n\n\n {this.props.jobPathList && this.props.jobPathList.length > 0 && this.props.jobPathList.find(jobpath => jobpath.companyJobs && jobpath.companyJobs.length > 0 && jobpath.companyJobs.find(c => c && !c.confirmedHandled) !== undefined) \n ?

    Til inspiration har følgende arbejdsgiver søgt lignende profiler inden for de seneste 6 måneder:

    \n : null}\n\n {this.props.jobPathList &&\n this.props.jobPathList.map((jobpath, index) => (\n jobpath.companyJobs && jobpath.companyJobs.length > 0 && jobpath.companyJobs.find(c => c.confirmedHandled === false) !== undefined \n ?\n
    \n

    {companyAgreementIt++ + \". \" + jobpath.name}:

    \n
      \n {jobpath.companyJobs.map((company) => (\n company && !company.confirmedHandled ?\n
    • \n

      {company.companyName}

      \n
    • \n : null\n ))}\n
    \n {index !== this.props.jobPathList.length - 1 ?
    :
    }\n
    \n : null\n ))}\n\n

    \n\n
    \n

    Deltag i møder og tilbud

    \n Få inspiration og redskaber til jobsøgning, trivsel og arbejdsliv. De fleste møder er åbne for alle medlemmer, men enkelte kan være for udvalgte grupper.\n

    \n

    Styrk din karriere og jobsøgning

    \n Vi ønsker at være din karrierepartner i dit arbejdsliv, uanset hvilken situation du står i. Brug vores dygtige, sundhedsfaglige uddannede karrierekonsulenter til at få sparring på dit arbejdsliv generelt eller få et professionelt blik på dit CV eller ansøgning.\n

    \n

    Book og brug Din Sundhedsfaglige A-kasse som din karrierepartner til et arbejdsliv med overskud.

    \n

    Vores gode tilbud kan de booke via vores hjemmeside: møder og tilbud

    \n
    \n\n
    \n \n
    \n
    \n );\n }\n}\n \nexport default MyPlanTextComponent;","import * as React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport { isEmptyOrUndefined } from '../../helpers/TypeChecks';\nimport CitizenModel from '../../models/CitizenModel';\nimport JobPathModel from '../../models/JobPathModel';\nimport { MyPlanModel } from '../../models/MyPlanModel';\nimport DataResponseModel from '../../models/Template/DataResponseModel';\nimport DataGroup from '../../models/Template/TemplateModel';\nimport CloseButton from '../Buttons/CloseButton';\nimport JobPath from '../JobPath';\nimport MyPlanTextComponent from '../MyPlanTextComponent';\nimport './ModalNewestMyPlan.scss';\n\ninterface Props {\n showMyPlanModal: boolean;\n closeMyPlanModal: () => void;\n newestMyPlan: MyPlanModel;\n citizen: CitizenModel;\n customData: DataResponseModel;\n templateKey: string;\n}\n\ninterface State {\n\n}\n\nclass ModalNewestMyPlan extends React.Component {\n constructor(props: Props) {\n super(props);\n // this.state = { : };\n }\n render() {\n return (\n \n \n {!isEmptyOrUndefined(this.props.citizen.fullName) ?

    {this.props.citizen.fullName} - Nyeste Min liste

    :

    Nyeste Min liste

    }
    \n \n
    \n\n \n \n \n
    \n );\n }\n}\n\nexport default ModalNewestMyPlan;","import React from 'react'\nimport { useMsal } from \"@azure/msal-react\";\nimport './LogoutButton.scss';\n\ntype Props = {\n additionalCssClass?: string;\n}\n\nfunction LogoutButton(props: Props) {\n const {instance} = useMsal();\n return (\n
    \n \n
    \n )\n}\n\nexport default LogoutButton ","import * as React from 'react';\nimport { AppState } from '../../store';\nimport { connect } from \"react-redux\";\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport saveIcon from \"../../images/save-regular.svg\";\nimport { postDraftMeeting } from '../../store/DraftPlan/actions';\nimport { createMeeting } from '../../helpers/MeetingHelper';\nimport { bindActionCreators } from 'redux';\nimport { MeetingModel } from '../../models/MeetingModel';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faPlus, faSignInAlt, faSignOutAlt, faTasks } from '@fortawesome/free-solid-svg-icons';\nimport { isEmptyOrUndefined } from '../../helpers/TypeChecks';\nimport ModalNewestMyPlan from '../ModalNewestMyPlan';\nimport CitizenModel from '../../models/CitizenModel';\nimport JobMatchTemplateModel from '../../models/Template/JobMatchTemplateModel';\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport JobPathModel from '../../models/JobPathModel';\nimport { _Text } from '../../i18n/translations';\nimport { AuthenticatedTemplate, UnauthenticatedTemplate } from '@azure/msal-react';\nimport addIcon from '../../images/addTagIcon.svg';\nimport { MsalContext } from \"@azure/msal-react\";\nimport \"./MobileBurgerMenuSettings.scss\";\nimport { loginRedirectRequest } from '../../AzureAuth/authConfig';\nimport { AccountInfo, RedirectRequest } from '@azure/msal-browser';\nimport LoginButton from '../../AzureAuth/LoginButton';\nimport LogoutButton from '../../AzureAuth/LogoutButton';\n\n\ninterface OwnProps {\n addNewJobpath: (e: React.MouseEvent) => void;\n page: string;\n jobPaths: JobPathModel[];\n}\n\ninterface State {\n showMyPlanModal: boolean;\n}\n\ninterface LinkStateProp {\n newestMyPlan: MeetingModel;\n templates: JobMatchTemplateModel;\n citizen: CitizenModel;\n account: AccountInfo | null;\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProp => ({\n newestMyPlan: state.myPlanMeeting.newestMyPlan,\n templates: state.template.templates,\n citizen: state.citizen.citizen,\n account: state.auth.account,\n});\n\ninterface LinkDispatchProps {\n postDraftMeeting: (draftMeeting: MeetingModel, isAutoSave: boolean) => void;\n\n}\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch): LinkDispatchProps => ({\n postDraftMeeting: bindActionCreators(postDraftMeeting, dispatch),\n });\n\ntype Props = OwnProps & LinkStateProp & LinkDispatchProps;\n\n\nclass MobileBurgerMenuSettings extends React.PureComponent {\n // static contextType: any = MsalContext;\n\n constructor(props: Props) {\n super(props);\n this.state = {\n showMyPlanModal: false,\n\n }\n }\n\n handleSaveDraftPlan = () => {\n this.props.postDraftMeeting(createMeeting(), false);\n }\n\n handleCloseMyPlanModal = () => {\n this.setState({\n showMyPlanModal: false,\n });\n }\n\n handleShowMyPlanModal = () => {\n this.setState({\n showMyPlanModal: true,\n });\n }\n\n handleAccountName = (): string => {\n return this.props.account?.idTokenClaims?.given_name + ' ' + this.props.account?.idTokenClaims?.family_name;\n }\n\n render() {\n return (\n \n {!isEmptyOrUndefined(this.props.newestMyPlan && this.props.newestMyPlan.myPlan) ?\n this.handleCloseMyPlanModal()} newestMyPlan={this.props.newestMyPlan.myPlan} citizen={this.props.citizen} \n customData={this.props.newestMyPlan.myPlan.customData} templateKey={this.props.templates && this.props.templates.key !== '' ? this.props.templates.key: ''} />\n : null}\n
    \n
    \n {/* Dette skal lige fikes i forhold til at logge ind og ud. */}\n \n

    {this.handleAccountName()}

    \n \n
    \n \n \n \n
    \n {/*
    \n \n
    */}\n {/*
    \n \n
    */}\n
    \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MobileBurgerMenuSettings);","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport { bindActionCreators } from 'redux';\nimport { AppState } from '../../store';\nimport { slide as Menu } from 'react-burger-menu'\nimport CloseButton from '../Buttons/CloseButton';\nimport FilterJobSearch from '../FilterJobSearch';\nimport MobileBurgerMenuSettings from '../MobileBurgerMenuSettings';\nimport { startAddJobPath, setJobPathToDisplay, clearJobPathData } from '../../store/JobPathList/actions';\nimport './MobileBurgerMenu.scss';\nimport { sweetAlertPopup } from '../SweetAlertCustom/SweetAlertCustom';\nimport JobPathModel, { JobPathType } from '../../models/JobPathModel';\nimport { jobPathImages } from '../../helpers/ImageHelper';\nimport { emptyJobPathModel } from '../../helpers/CreateEmptyDataObjects';\n\n\n\ninterface OwnProps {\n openMenu: boolean;\n closeMenu: () => void;\n page: string;\n}\n\ninterface State {\n showModal: boolean;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n ): LinkDispatchProps => ({\n startAddJobPath: bindActionCreators(startAddJobPath, dispatch),\n });\n\ninterface LinkStateProps {\n windowInnerWidth: number;\n jobPaths: JobPathModel[];\n\n}\n\ninterface LinkDispatchProps {\n startAddJobPath: (jobPath: JobPathModel) => void;\n\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n windowInnerWidth: state.searchJob.windowInnerWidth,\n jobPaths: state.jobPathList.jobPaths,\n\n});\n\n\ntype Props = OwnProps & LinkStateProps & LinkDispatchProps;\n\nclass MobileBurgerMenu extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = {\n showModal: false,\n };\n }\n\n closeModal = () => {\n this.setState({\n showModal: false\n })\n }\n\n handleChooseJobPath = () => {\n this.addJobPathHandler(JobPathType.DSAJobPath);\n this.props.closeMenu();\n }\n\n addJobPathHandler = (type: JobPathType) => {\n let imageId = -1;\n for (let i = 0; i < jobPathImages.length; i++) {\n let isUsedIcon = false;\n for (let k = 0; k < this.props.jobPaths.length; k++) {\n if (i == this.props.jobPaths[k].imageId)\n isUsedIcon = true;\n }\n\n if (!isUsedIcon) {\n imageId = i;\n break;\n }\n }\n this.props.startAddJobPath(emptyJobPathModel(imageId, type));\n } \n\n render() {\n return (\n
    \n \n
    \n

    Menu

    \n \n
    \n\n {/* Below is filter for Jobsearch page for mobile */}\n this.handleChooseJobPath()} jobPaths={this.props.jobPaths}/>\n {/* */}\n
    \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MobileBurgerMenu);","import * as React from 'react';\nimport { connect } from 'react-redux';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport { bindActionCreators } from 'redux';\nimport './FilterMenu.scss';\nimport { AppState } from '../../store';\nimport { slide as Menu } from 'react-burger-menu'\nimport CloseButton from '../Buttons/CloseButton';\nimport FilterJobSearch from '../FilterJobSearch';\n\n\n\ninterface OwnProps {\n openMenu: boolean;\n closeMenu: () => void;\n}\n\ninterface State {\n showModal: boolean;\n}\n\ninterface LinkStateProps {\n windowInnerWidth: number;\n}\n\ninterface LinkDispatchProps {\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n windowInnerWidth: state.searchJob.windowInnerWidth,\n});\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch): LinkDispatchProps => ({\n});\n\ntype Props = OwnProps & LinkStateProps & LinkDispatchProps;\n\nclass FilterMenu extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = {\n showModal: false,\n };\n }\n\n showModalForActivation = () => {\n this.setState({\n showModal: true,\n })\n }\n\n closeModal = () => {\n this.setState({\n showModal: false\n })\n }\n\n handleActivationButton = () => {\n this.setState({\n showModal: false\n })\n }\n\nrender() {\n return (\n\n
    \n \n
    \n

    Filtre

    \n \n
    \n \n
    \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FilterMenu);","import * as React from 'react';\nimport './MobileHeaderButtons.scss'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { AppState } from '../../store';\nimport { faBars } from '@fortawesome/free-solid-svg-icons';\nimport MobileBurgerMenu from '../MobileBurgerMenu';\nimport filterIcon from '../../images/filter-icon.svg';\nimport FilterMenu from '../FilterMenu';\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\n\n\nexport interface Prop {\n page: string;\n}\n\ninterface State {\n openBurger: boolean;\n openFilter: boolean;\n}\n\ninterface LinkStateProps {\n}\n\ninterface LinkDispatchProps {\n}\n\nfunction mapDispatchToProps(\n): LinkDispatchProps {\n return {\n };\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n\n});\n\ntype Props = Prop & LinkDispatchProps & LinkStateProps;\n\nclass MobileHeaderButtons extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = {\n openBurger: false,\n openFilter: false,\n };\n }\n\n openBurgerMenu = () => {\n this.setState({\n openBurger: true,\n })\n }\n\n openFilterMenu = () => {\n this.setState({\n openFilter: true,\n })\n }\n\n closeBurgerMenu = () => {\n this.setState({\n openBurger: false,\n })\n }\n\n closeFilterMenu = () => {\n this.setState({\n openFilter: false,\n })\n }\n\n render() {\n\n return (\n
    \n this.closeBurgerMenu()}/>\n this.closeFilterMenu()} />\n
    \n {this.props.page === AgreementCategoryTitles.SEARCHJOB || this.props.page === AgreementCategoryTitles.MAP\n ?\n
    this.openFilterMenu()}>\n \"filter\n
    \n :\n null\n }\n
    this.openBurgerMenu()}>\n \n
    \n
    \n
    \n )\n }\n}\n\nexport default MobileHeaderButtons;\n","import { ReactElement, useState } from 'react';\nimport React from 'react';\nimport ReactPlayer from 'react-player';\nimport dsaLogo from '../../images/dsa-jobportal-logo.png';\nimport dsaBlob from '../../images/dsa-blob.svg';\nimport finishIcon from '../../images/arrow-right.svg';\nimport dsaCompass from '../../images/dsa-kompas-logo.svg';\nimport dsaThumbnail from '../../images/dsa-last-step-image-2.png'\nimport StepOne from '../../videos/onboarding-step-one.mp4';\nimport StepTwo from '../../videos/onboarding-step-two.mp4';\nimport StepThree from '../../videos/onboarding-step-three.mp4';\nimport StepFour from '../../videos/onboarding-step-four.mp4';\nimport StepFive from '../../videos/onboarding-step-five.mp4';\nimport StepSix from '../../videos/onboarding-step-six.mp4';\nimport StepReview from '../../videos/onboarding-intro.mp4';\nimport { useSelector } from 'react-redux';\nimport { AppState } from '../../store';\nimport { configuration } from '../../global/configuration';\nimport { JobmatchRoute } from '../../routes';\nimport { useHistory } from 'react-router-dom';\nimport DsaButton from '../../components/DsaButton/DsaButton';\nimport './DSAOnboardingScene.scss';\n\ninterface Props { \n}\n\nexport enum DSAStepToDisplay {\n ONE,\n TWO,\n THREE,\n FOUR,\n FIVE,\n SIX,\n SEVEN,\n}\n\nconst DSAOnboardingSteps = [\n {\n id: 0,\n title: \"Velkommen til DSA Jobportal\",\n subTitle: \"Velkommen til Din Sundhedsfaglige Jobportal. Det er først gang du logger ind, og derfor vil vi gerne tilbyde dig en guidet tur rundt på jobportal.\",\n subTitleSecond: \"Tryk på play - og hør nærmere.\",\n step: \"Introduktion\",\n content: DSAStepToDisplay.ONE,\n },\n {\n id: 1,\n title: \"Velkommen til DSA Jobportal\",\n subTitle: \"Din Sundhedsfaglige Jobportal virker allerbedst, hvis du slår dine lokalitetsindstillinger til.\",\n subTitleSecond: \"Se i videoen, hvordan du gør.\",\n step: \"Inden du går i gang\",\n content: DSAStepToDisplay.TWO,\n },\n {\n id: 2,\n title: \"Lav et sundhedsfagligt søgefilter\",\n subTitle: \"På søgefilter-siden kan du lave ét eller flere søgeagenter, så du effektivt arbejder videre ved næste login. I Jobportalen kan du både lave et sundhedsfagligt filter med afsæt i dit fagområde eller specialer. Du kan også lave et normalt søgefilter, hvis du ønsker at søge job uden for sundhedsområdet. Se mere i videoen\",\n step: \"Find jobbet\",\n content: DSAStepToDisplay.THREE,\n },\n { \n id: 3,\n title: \"Sådan finder du jobbet\",\n subTitle: \"På Jobsøgnings-siden kan du søge blandt åbne opslag, virksomheder der kunne være relevante for uopfordret kontakt eller DSA Jobmatch, som er ledige stillinger, som Din Sundhedsfaglige A-kasse udbyder i samarbejde med arbejdsgivere, og som er eksklusivt tilgængelige i denne jobportal.\",\n step: \"Hold overblikket\",\n content: DSAStepToDisplay.FOUR,\n },\n { \n id: 4,\n title: \"Min liste\",\n subTitle: \"“Min liste” indeholder alle aktuelle og tidligere job, som du har gemt. “Min liste” giver dig et overblik over deadlines og inden for hvilke søgefilter jobbet tilhører. Samtidig kan du nemt joblogge direkte fra listen.\",\n step: \"Inspiration til uopfordrede ansøgninger\",\n content: DSAStepToDisplay.FIVE,\n },\n { \n id: 5,\n title: \"Joblog direkte fra portalen\",\n subTitle: \"I Jobportalen er det let joblogge. Alle oplysninger lander på din joblog på jobnet.dk - og vælger du at joblogge et job fra “Min liste”, så er de fleste oplysninger om jobbet allerede indtastet. Din historiske joblog fremgår ligeledes af “min liste”, og du kan let tilgå og redigere tidligere joblogs.\",\n step: \"Ledig: sådan bruger du jobloggen\",\n content: DSAStepToDisplay.SIX,\n },\n { \n id: 6,\n title: \"God fornøjelse med din jobsøgning\",\n subTitle: \"Velkommen på Jobportalen. Husk at du også kan hente Din Sundhedsfaglige Jobportal App. Den er tilgængelig i App Store og Play Store\",\n step: \"God fornøjelse med din jobsøgning\",\n content: DSAStepToDisplay.SEVEN,\n },\n]\n\nconst DSAOnboardingScene: React.FC = (props: Props): ReactElement => {\n const history = useHistory();\n const windowInnerWidth = useSelector((state: AppState) => state.searchJob.windowInnerWidth) \n\n const [chosenContent, setChosenContent] = useState(DSAStepToDisplay.ONE);\n const [stepHistoryIds, setStepHistoryIds] = useState([DSAOnboardingSteps?.[0]?.id]);\n\n const handleNavigateContent = (selectedItem: DSAStepToDisplay) => {\n if (!stepHistoryIds?.includes(selectedItem))\n setStepHistoryIds(prevHistoryIds => [...prevHistoryIds, selectedItem]);\n\n setChosenContent(selectedItem);\n }\n\n const handleNavigatePrevious = () => {\n handleNavigateContent(chosenContent -1)\n \n setChosenContent(chosenContent -1);\n }\n \n const handleNavigateNext = () => {\n handleNavigateContent(chosenContent +1)\n\n setChosenContent(chosenContent +1);\n }\n\n const handleDSAStepList = () => {\n let stepList = DSAOnboardingSteps;\n \n if (chosenContent === DSAStepToDisplay.ONE)\n return stepList[0];\n \n if (chosenContent === DSAStepToDisplay.TWO)\n return stepList[1];\n \n if (chosenContent === DSAStepToDisplay.THREE)\n return stepList[2];\n \n if (chosenContent === DSAStepToDisplay.FOUR)\n return stepList[3];\n \n if (chosenContent === DSAStepToDisplay.FIVE)\n return stepList[4];\n \n if (chosenContent === DSAStepToDisplay.SIX)\n return stepList[5];\n \n if (chosenContent === DSAStepToDisplay.SEVEN)\n return stepList[6];\n \n }\n\n const handleDSAVideoToDisplay = () => {\n if (chosenContent === DSAStepToDisplay.ONE)\n return StepReview;\n \n if (chosenContent === DSAStepToDisplay.TWO)\n return StepOne;\n \n if (chosenContent === DSAStepToDisplay.THREE)\n return StepTwo;\n \n if (chosenContent === DSAStepToDisplay.FOUR)\n return StepThree;\n \n if (chosenContent === DSAStepToDisplay.FIVE)\n return StepFour;\n \n if (chosenContent === DSAStepToDisplay.SIX)\n return StepFive;\n\n if (chosenContent === DSAStepToDisplay.SEVEN)\n return StepSix;\n }\n\n const handleFinishOnboarding = () => {\n const expirationDate: Date = new Date();\n expirationDate.setFullYear(2100, expirationDate.getMonth(), expirationDate.getDate());\n document.cookie = `${configuration.ONBOARDED_USER_COOKIE}=true;expires=${expirationDate};`;\n history.push(JobmatchRoute.SEARCHJOB);\n }\n\n return (\n
    \n \"DSA\n
    \n \n \n
    \n
    \n

    {handleDSAStepList()?.step}

    \n
    \n
    \n : ''}\n playing\n config={{ \n file: { \n attributes: {\n controlsList: \"nodownload noplaybackrate\",\n disablePictureInPicture: true,\n }\n }\n }}\n />\n
    \n
    \n
    \n {DSAOnboardingSteps?.map((item) => (\n
    handleNavigateContent(item?.content)} className={chosenContent === item?.content ? \"dsa-onboarding__step dsa-onboarding__step--active\" : \"dsa-onboarding__step\"}>\n
    \n

    {item?.step}

    \n
    \n ))}\n
    \n
    \n
    \n {chosenContent! > 0 ? handleNavigatePrevious()} additionalClassNames='dsa-onboarding__previous-button' /> : null}\n {/* {chosenContent! > 0 ? : null} */}\n\n {chosenContent! < 6 ? handleNavigateNext()} additionalClassNames='dsa-onboarding__next-button' /> : null}\n
    \n \n
    \n
    \n {/* */}\n
    \n );\n}\n\nexport default DSAOnboardingScene;","import * as React from 'react';\nimport { AppState } from '../../store';\nimport CitizenModel from '../../models/CitizenModel';\nimport { connect } from 'react-redux';\nimport HeaderButtons from '../HeaderButtons';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport swal from 'sweetalert2';\nimport { Redirect } from 'react-router';\nimport { formatCPR } from '../../helpers/FormatStrings';\nimport withReactContent from 'sweetalert2-react-content';\nimport { MeetingModel } from '../../models/MeetingModel';\nimport { compareAndSetJobLogs, setTempJobLogList, clearTempJobLogList, clearAllMyPlanData, clearMyPlanInterviewAndBookingData } from \"../../store/MyPlan/actions\";\nimport { setJobPathStateByNewestPlanOrDraftPlan, clearJobPathData, clearAllJobPathData, clearPinnedJobs } from \"../../store/JobPathList/actions\";\nimport { setNewestMyPlanTextAgreements, clearTextAgreements, clearQualificationAgreements, clearAllAgreementData, setSavedRemark, deleteRemarks, handleQualificationAgreementsFromNewestPlan } from \"../../store/Agreement/actions\";\nimport { clearAllPreparationData, shouldDisplayLoader } from \"../../store/Preparation/actions\";\nimport TextAgreementModel from '../../models/Agreement/TextAgreementModel';\nimport QualificationAgreementModel from '../../models/Agreement/QualificationAgreementModel';\nimport { bindActionCreators } from 'redux';\nimport JobModel from '../../models/JobModel';\nimport JobLogEntryModel from '../../models/JobLogEntryModel';\nimport JobPathModel from '../../models/JobPathModel';\nimport MyPlanModel from '../../models/MyPlanModel';\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport RedirectToButton from '../Buttons/RedirectToButton';\nimport { clearAllCitizenData } from '../../store/Citizen/actions';\nimport { clearAllErrors } from \"../../store/Errors/actions\"; \nimport { clearAllJobData } from '../../store/Jobs/actions';\nimport { clearAllPrintData } from '../../store/Print/actions';\nimport { clearAllSearchData } from '../../store/Search/actions';\nimport { clearAllSearchJobData } from '../../store/SearchJob/actions';\nimport { clearGuidanceValuesFromDataFields } from '../../store/Template/actions';\nimport { PersonCategoryIdentifier } from '../../models/PersonGroupIdentifier';\nimport { setDraftPlanIntervalID } from '../../store/DraftPlan/actions';\nimport MobileHeaderButtons from '../MobileHeaderButtons';\nimport dsaLogo from '../../images/Logo_Jobportal_1.svg';\nimport './HeaderUpper.scss';\n\n\ninterface OwnProps {\n page: string;\n}\n\ninterface State {\n redirectToPrep: boolean;\n redirectToSearchCitizen: boolean;\n}\n\ninterface LinkStateProps {\n citizen: CitizenModel;\n newestMyPlan: MeetingModel;\n pinnedJobs: JobModel[];\n windowInnerWidth: number;\n}\n\ninterface LinkDispathProps {\n setNewestMyPlanTextAgreements: (textAgreements: TextAgreementModel[]) => void;\n compareAndSetJobLogs: (jobLogsFromCitizen: JobLogEntryModel[], jobLogsFromMyPlan: JobLogEntryModel[]) => void;\n setTempJobLogList: (jobLogs: JobLogEntryModel[]) => void;\n setJobPathStateByNewestPlanOrDraftPlan: (jobPathsToFilter: JobPathModel[], shouldAddRemovedJobPaths: boolean, isDraftMeeting: boolean) => void;\n clearPinnedJobs: () => void;\n clearTextAgreements: () => void;\n clearQualificationAgreements: () => void;\n clearTempJobLogList: () => void;\n clearJobPathData: () => void;\n shouldDisplayLoader: (shouldDisplay: boolean) => void;\n clearMyPlanInterviewAndBookingData: () => void;\n clearGuidanceValuesFromDataFields: () => void;\n setSavedRemark: (remark: string) => void;\n deleteRemarks: () => void;\n handleQualificationAgreementsFromNewestPlan: (newestPlanQualificationAgreements: QualificationAgreementModel[], newestMyPlanJobPaths: JobPathModel[]) => void;\n\n // used to clear all redux state in different reducers\n clearAllAgreementData: () => void; \n clearAllCitizenData: () => void; \n clearAllErrors: () => void; \n clearAllJobPathData: () => void; \n clearAllJobData: () => void; \n clearAllMyPlanData: () => void; \n clearAllPreparationData: () => void; \n clearAllPrintData: () => void; \n clearAllSearchData: () => void; \n clearAllSearchJobData: () => void; \n clearAllTemplateData: () => void; \n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispathProps => ({\n setNewestMyPlanTextAgreements: bindActionCreators(setNewestMyPlanTextAgreements, dispatch),\n compareAndSetJobLogs: bindActionCreators(compareAndSetJobLogs, dispatch),\n setTempJobLogList: bindActionCreators(setTempJobLogList, dispatch),\n setJobPathStateByNewestPlanOrDraftPlan: bindActionCreators(setJobPathStateByNewestPlanOrDraftPlan, dispatch),\n clearPinnedJobs: bindActionCreators(clearPinnedJobs, dispatch),\n clearTextAgreements: bindActionCreators(clearTextAgreements, dispatch),\n clearQualificationAgreements: bindActionCreators(clearQualificationAgreements, dispatch),\n clearTempJobLogList: bindActionCreators(clearTempJobLogList, dispatch),\n clearJobPathData: bindActionCreators(clearJobPathData, dispatch),\n shouldDisplayLoader: bindActionCreators(shouldDisplayLoader, dispatch),\n clearMyPlanInterviewAndBookingData: bindActionCreators(clearMyPlanInterviewAndBookingData, dispatch),\n clearGuidanceValuesFromDataFields: bindActionCreators(clearGuidanceValuesFromDataFields, dispatch),\n setSavedRemark: bindActionCreators(setSavedRemark, dispatch),\n deleteRemarks: bindActionCreators(deleteRemarks, dispatch),\n handleQualificationAgreementsFromNewestPlan: bindActionCreators(handleQualificationAgreementsFromNewestPlan, dispatch),\n\n // used to clear all redux state in different reducers\n clearAllAgreementData: bindActionCreators(clearAllAgreementData, dispatch),\n clearAllCitizenData: bindActionCreators(clearAllCitizenData, dispatch),\n clearAllErrors: bindActionCreators(clearAllErrors, dispatch),\n clearAllJobPathData: bindActionCreators(clearAllJobPathData, dispatch),\n clearAllJobData: bindActionCreators(clearAllJobData, dispatch),\n clearAllMyPlanData: bindActionCreators(clearAllMyPlanData, dispatch),\n clearAllPreparationData: bindActionCreators(clearAllPreparationData, dispatch),\n clearAllPrintData: bindActionCreators(clearAllPrintData, dispatch),\n clearAllSearchData: bindActionCreators(clearAllSearchData, dispatch),\n clearAllSearchJobData: bindActionCreators(clearAllSearchJobData, dispatch),\n clearAllTemplateData: bindActionCreators(clearAllMyPlanData, dispatch),\n});\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n citizen: state.citizen.citizen,\n newestMyPlan: state.myPlanMeeting.newestMyPlan,\n pinnedJobs: state.jobPathList.pinnedJobs,\n windowInnerWidth: state.searchJob.windowInnerWidth,\n});\n\nexport type Props = LinkDispathProps & LinkStateProps & OwnProps;\n\nclass HeaderUpper extends React.Component {\n constructor(props: any) {\n super(props);\n this.state = {\n redirectToPrep: false,\n redirectToSearchCitizen: false,\n };\n }\n\n resetDataToOriginalState = () => {\n if(this.props.citizen && this.props.citizen.jobLog)\n {\n // add joblogs from citizen\n this.props.setTempJobLogList(this.props.citizen.jobLog);\n } else {\n this.props.clearTempJobLogList();\n }\n\n this.props.clearJobPathData();\n this.props.clearQualificationAgreements();\n this.props.clearTextAgreements();\n this.props.clearPinnedJobs();\n this.props.clearMyPlanInterviewAndBookingData();\n this.props.clearGuidanceValuesFromDataFields();\n this.props.deleteRemarks();\n }\n\n addDataFromMyPlan = (myPlan: MyPlanModel) => {\n this.props.clearMyPlanInterviewAndBookingData();\n this.props.clearGuidanceValuesFromDataFields();\n\n if (myPlan.jobPaths) \n this.props.setJobPathStateByNewestPlanOrDraftPlan(myPlan.jobPaths, false, false);\n\n if (this.props.citizen && this.props.citizen.jobLog) {\n if (myPlan.jobLogList) {\n // compare citizen joblogs with newestmyplan\n this.props.compareAndSetJobLogs(this.props.citizen.jobLog, myPlan.jobLogList);\n } else {\n // add joblogs from citizen\n this.props.setTempJobLogList(this.props.citizen.jobLog);\n }\n }\n\n if (myPlan.qualificationAgreements) {\n this.props.handleQualificationAgreementsFromNewestPlan(myPlan.qualificationAgreements, myPlan.jobPaths);\n }\n\n if (myPlan.textAgreements) {\n // Add textAgreements from myplan\n this.props.setNewestMyPlanTextAgreements(myPlan.textAgreements.filter(x => x.done === false));\n }\n\n if (this.props.citizen && this.props.citizen.personCategory && this.props.citizen.personCategory.identifier == PersonCategoryIdentifier.Aktivitetsparat)\n {\n if (myPlan.remarks !== '') {\n this.props.setSavedRemark(myPlan.remarks);\n } else\n this.props.deleteRemarks();\n } else\n this.props.deleteRemarks();\n }\n\n // backToPrep = () => {\n // if(this.props.page === AgreementCategoryTitles.JOBINSPIRATION_PREPARATION)\n // {\n // this.setState({\n // redirectToPrep: !this.state.redirectToPrep,\n // });\n // } else \n // {\n // const MySwal = withReactContent(swal);\n // MySwal.fire({\n // title: 'Afslut MinPlan',\n // text: \"Er du sikker på at du vil afslutte uden at gemme MinPlan? Indtastninger vil blive slettet!\",\n // confirmButtonText: 'Afslut',\n \n // cancelButtonText: 'Annuller',\n // showCancelButton: true,\n \n // reverseButtons: true,\n \n // customClass: {\n // popup: 'swal-popup',\n // container: 'swal-popup-customized',\n // confirmButton: 'swal-customized-confirm swal-buttons',\n // cancelButton: 'swal-customized-cancel swal-buttons'\n // }\n \n // }).then((result: any) => {\n // // Checking if user wants to exit the current session and redirect to preparation\n // if (result.value) {\n \n // if (this.props.newestMyPlan && this.props.newestMyPlan.myPlan) {\n // this.addDataFromMyPlan(this.props.newestMyPlan.myPlan);\n \n // // displaying loader\n // this.props.shouldDisplayLoader(true);\n // this.setState({\n // redirectToPrep: !this.state.redirectToPrep,\n // });\n // setTimeout(() => {\n // // add data from myplan\n // setTimeout(() => {\n // this.props.shouldDisplayLoader(false);\n // }, 2000);\n // }, 1000);\n // } else {\n // // reset joblog, jobpaths, pinnedjobs, agreements, remarks, guidance, interview and booking data to newest my plan\n // this.resetDataToOriginalState();\n\n // this.setState({\n // redirectToPrep: !this.state.redirectToPrep,\n // });\n // }\n // }\n // });\n // }\n // }\n\n\n clearAllData = () => {\n this.props.clearAllCitizenData();\n this.props.clearAllAgreementData();\n this.props.clearAllErrors();\n this.props.clearAllJobData();\n this.props.clearAllMyPlanData();\n this.props.clearAllPreparationData();\n this.props.clearAllJobPathData();\n this.props.clearAllPrintData();\n this.props.clearAllSearchData();\n this.props.clearAllSearchJobData();\n this.props.clearAllTemplateData();\n }\n\n backToSearchCitizen = (showSwal: boolean) => {\n if(showSwal)\n {\n const MySwal = withReactContent(swal);\n MySwal.fire({\n title: 'Tilbage til Søg borger side',\n text: \"Er du sikker på, at du vil tilbage til Søg borger siden?\",\n confirmButtonText: 'Bekræft',\n \n cancelButtonText: 'Annuller',\n showCancelButton: true,\n \n reverseButtons: true,\n \n customClass: {\n popup: 'swal-popup',\n container: 'swal-popup-customized',\n confirmButton: 'swal-customized-confirm-mbblue swal-buttons',\n cancelButton: 'swal-customized-cancel swal-buttons'\n }\n \n }).then((result: any) => {\n // Checking if user wants to exit the current session and redirect to search citizen\n if (result.value) {\n this.clearAllData();\n this.setState({\n redirectToSearchCitizen: !this.state.redirectToSearchCitizen,\n });\n }\n });\n }\n else\n {\n this.setState({\n redirectToSearchCitizen: !this.state.redirectToSearchCitizen,\n });\n }\n }\n\n render() {\n if (this.state.redirectToPrep) {\n return ;\n }\n\n if(this.state.redirectToSearchCitizen)\n {\n return ;\n }\n\n let leftElement;\n switch (window.location.pathname.substring(1)) {\n // case .PREPARATION:\n // leftElement = this.backToSearchCitizen(true)} />\n // break;\n \n // case RouteName.JOBINSPIRATION: \n // leftElement = this.backToSearchCitizen(false)} />\n // break;\n\n default:\n // setting src on img to prevent broken image on certain screens\n leftElement = Til dsa.dk\n break;\n }\n\n const isMobile: boolean = this.props.windowInnerWidth <= 550;\n\n\n return [\n
    \n {!isMobile\n ?\n
    \n
    \n
    \n
    \n {leftElement}\n
    \n
    \n
    \n
    \n
    \n {/* Original display of name and CPR */}\n\n {/* Din Sundhedsfaglige A-kasse {this.props.citizen.fullName ?
    Plan for {this.props.citizen.fullName} ({formatCPR(this.props.citizen.cpr)})
    : \"\"} */}\n {/* Only name is displayed for Jobportal */}\n {this.props.citizen.fullName ?
    {this.props.citizen.fullName}
    : \"\"}\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\nexport default connect(mapStateToProps, mapDispatchToProps)(HeaderUpper);","import * as React from 'react';\nimport { Modal } from 'react-bootstrap';\nimport { AppState } from '../../store';\nimport { connect } from \"react-redux\";\nimport { clearAgreementsFormattedString, clearFullPlanFormattedString, clearPlanDescriptionFormattedString, setMyPlanFormattedTextError } from \"../../store/MyPlan/actions\";\nimport './ModalToDisplayMyPlanText.scss';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport { bindActionCreators } from 'redux';\nimport swal from 'sweetalert';\nimport CloseButton from '../Buttons/CloseButton';\nimport JobMatchTemplateModel, { JournalSystem } from '../../models/Template/JobMatchTemplateModel';\nimport { isEmptyOrUndefined } from '../../helpers/TypeChecks';\n\ninterface Prop {\n show: boolean;\n closeModal: () => void;\n}\n\ninterface State {\n fetchMyPlanTextFailed: boolean;\n}\n\ninterface LinkStateProps {\n formattedFullPlan: string;\n formattedMyPlanTextError: boolean;\n templates: JobMatchTemplateModel;\n formattedAgreements: string; \n formattedPlanDescription: string;\n}\n\ninterface LinkDispatchProps {\n clearFullPlanFormattedString: () => void;\n setMyPlanFormattedTextError: (responseFailed: boolean) => void;\n clearPlanDescriptionFormattedString: () => void; \n clearAgreementsFormattedString: () => void; \n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n clearFullPlanFormattedString: bindActionCreators(clearFullPlanFormattedString, dispatch),\n setMyPlanFormattedTextError: bindActionCreators(setMyPlanFormattedTextError, dispatch),\n clearPlanDescriptionFormattedString: bindActionCreators(clearPlanDescriptionFormattedString, dispatch),\n clearAgreementsFormattedString: bindActionCreators(clearAgreementsFormattedString, dispatch),\n});\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n formattedFullPlan: state.myPlanMeeting.formattedFullPlan,\n formattedMyPlanTextError: state.myPlanMeeting.formattedMyPlanFetchError,\n templates: state.template.templates,\n formattedAgreements: state.myPlanMeeting.formattedAgreements,\n formattedPlanDescription: state.myPlanMeeting.formattedPlanDescription,\n});\n\ntype Props = Prop & LinkStateProps & LinkDispatchProps;\n\nclass ModalToDisplayMyPlanText extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = {\n fetchMyPlanTextFailed: false,\n };\n }\n\n componentDidUpdate(prevProps: Props) {\n if (prevProps.show && !this.props.show) {\n if(this.props.formattedFullPlan.length > 0)\n {\n // setting timeout to have the fadeout effect on the modal\n setTimeout(() => {\n this.props.clearFullPlanFormattedString();\n }, 250);\n }\n\n if(this.props.formattedPlanDescription.length > 0 || this.props.formattedAgreements.length > 0)\n {\n // setting timeout to have the fadeout effect on the modal\n setTimeout(() => {\n this.props.clearPlanDescriptionFormattedString();\n this.props.clearAgreementsFormattedString();\n }, 250);\n } \n }\n\n // check if myplan failed to fetch my plan text\n\n if (this.props.formattedMyPlanTextError && !this.state.fetchMyPlanTextFailed && this.props.show) {\n this.props.setMyPlanFormattedTextError(false);\n this.setState({\n fetchMyPlanTextFailed: true,\n });\n this.props.closeModal();\n }\n }\n\n isMyPlanTextToLong = (): boolean => {\n // Only checking on Schultz -> not jobready in template key because it's the only group which is different from others\n if (this.props.templates?.journalSystem === JournalSystem.SchultzFasit && this.props.templates?.key?.includes('ikkejobparat'))\n return this.props.formattedAgreements?.length > 3000;\n else\n return this.props.formattedFullPlan?.length > 3000;\n }\n\n myPlanHeaderTextToDisplay = (): string => {\n return this.props.templates?.journalSystem == JournalSystem.SchultzFasit ? 'Aftale' : 'Min liste';\n }\n\n render() {\n let formattedFullPlan: string = '';\n let formattedAgreements: string = '';\n\n if (this.state.fetchMyPlanTextFailed) {\n swal({\n title: this.props.templates && this.props.templates.key && this.props.templates.key.includes('ikkejobparat') ? 'Fejl opstod ved fremvisning af Aftale tekst' : 'Fejl opstod ved fremvisning af Min liste tekst',\n icon: 'error',\n timer: 1500,\n buttons: [false],\n closeOnClickOutside: true,\n });\n this.setState({\n fetchMyPlanTextFailed: false\n });\n }\n\n if(this.props.templates && this.props.templates.key && this.props.templates.key.includes('ikkejobparat') && this.props.templates.journalSystem == JournalSystem.SchultzFasit)\n {\n if(this.props.formattedAgreements.length > 0)\n {\n // removing \\r and \\n spaces from StringBuilder and inserting
    instead\n formattedAgreements = this.props.formattedAgreements.split('\\n').join('
    ');\n }\n else {\n // no answer yet from api\n return null;\n }\n\n } else {\n if (this.props.formattedFullPlan.length > 0) {\n // removing \\r and \\n spaces from StringBuilder and inserting
    instead\n formattedFullPlan = this.props.formattedFullPlan.split('\\n').join('
    ');\n }\n else {\n // no answer yet from api\n return null;\n }\n }\n\n return (\n \n \n

    {this.myPlanHeaderTextToDisplay()} ({this.props.templates?.key?.includes('ikkejobparat') && this.props.templates?.journalSystem === JournalSystem.SchultzFasit ? this.props.formattedAgreements?.length : this.props.formattedFullPlan?.length} ud af 3000 tegn)

    \n \n
    \n\n \n {this.props.templates && this.props.templates.key && this.props.templates.key.includes('ikkejobparat') && this.props.templates.journalSystem == JournalSystem.SchultzFasit\n ? \n \n

    Aftaler (skal sættes ind manuelt i Fasit)

    \n

    \n
    \n : \n

    \n }\n
    \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ModalToDisplayMyPlanText);","import { Guid } from \"guid-typescript\";\nimport InputModel from \"./InputModel\";\n\nexport default class DataResponseModel {\n id: Guid;\n dataGroupID: Guid; \n timeStamp: Date; \n citizenID: Guid; \n response: InputModel[];\n\n constructor(id: Guid, dataGroupID: Guid, timeStamp: Date, citizenID: Guid, response: InputModel[]) {\n this.id = id; \n this.dataGroupID = dataGroupID; \n this.timeStamp = timeStamp; \n this.citizenID = citizenID; \n this.response = response;\n }\n\n}","import * as React from 'react';\nimport { ThunkDispatch } from 'redux-thunk';\nimport JobPathModel from '../../models/JobPathModel';\nimport { AppState } from '../../store';\nimport { AppActions } from '../../store/AppActions';\nimport { connect } from \"react-redux\";\nimport { fetchJobsToDisplayFromIds } from \"../../store/Jobs/actions\";\nimport './MyPlanJobsToPrint.scss';\nimport { bindActionCreators } from 'redux';\nimport { JobDisplayModel } from '../../models/JobDisplayModel';\nimport { isEmptyOrUndefined } from '../../helpers/TypeChecks';\n\ninterface Prop {\n\n}\n\ninterface State {\n\n}\n\ninterface LinkStateProp {\n jobPaths: JobPathModel[];\n jobsToDisplay: JobDisplayModel[];\n}\n\ninterface LinkDispatchProps {\n fetchJobsToDisplayFromIds: (jobIds: string[]) => void;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n fetchJobsToDisplayFromIds: bindActionCreators(fetchJobsToDisplayFromIds, dispatch),\n});\n\nconst mapStateToProps = (state: AppState): LinkStateProp => ({\n jobPaths: state.jobPathList.jobPaths,\n jobsToDisplay: state.jobs.jobsToDisplay,\n});\n\ntype Props = LinkStateProp & LinkDispatchProps & Prop;\n\nclass MyPlanJobsToPrint extends React.Component {\n constructor(props: Props) {\n super(props);\n // this.state = { : };\n }\n\n componentDidMount() {\n this.fetchJobs();\n }\n\n componentDidUpdate(prevProps: Props) {\n if (prevProps.jobPaths !== this.props.jobPaths)\n this.fetchJobs();\n }\n\n fetchJobs = () => {\n let jobIds: string[] = [];\n if (this.props.jobPaths && this.props.jobPaths.length > 0) \n {\n this.props.jobPaths.map((jobpath) => {\n if (jobpath.jobs && jobpath.jobs.length > 0) \n {\n jobpath.jobs.map((job) => {\n if (job && job.confirmedHandled !== true) \n jobIds.push(job.id);\n });\n }\n });\n }\n this.props.fetchJobsToDisplayFromIds(jobIds);\n }\n \n displayContactInformation = (job: JobDisplayModel) => {\n let displayStr;\n\n if (!isEmptyOrUndefined(job.contactFirstname)) {\n displayStr = job.contactFirstname;\n\n if (!isEmptyOrUndefined(job.contactLastname))\n displayStr += ' ' + job.contactLastname;\n\n displayStr += ' - ';\n }\n\n if (!isEmptyOrUndefined(job.contactPhone))\n displayStr += job.contactPhone + ' - ';\n\n if (!isEmptyOrUndefined(job.contactEmail))\n displayStr += job.contactEmail\n return displayStr;\n }\n\n render() {\n return (\n
    \n
    \n
    \n
    \n

    Jobs

    \n
    \n {this.props.jobsToDisplay && this.props.jobsToDisplay.map((job: JobDisplayModel, index: number) => (\n \n

    {job.title}

    \n {!isEmptyOrUndefined(job.companyName) ? ({job.companyName}) : null}
    \n {job.workPlaceAddress &&

    Adresse: {job.workPlaceCity + ' ' + job.workPlacePostalCode + ' - ' + job.workPlaceAddress}

    }\n

    Stillingsbetegnelse: {job.occupationName}

    \n

    Arbejdstid: {job.workHoursPerWeekMin > 0 && job.workHoursPerWeekMax > 0 && ' (' + job.workHoursPerWeekMin + ' - ' + job.workHoursPerWeekMax + ' timer)'}

    \n

    Kontakt: {this.displayContactInformation(job)}

    \n {job.isExternal\n ?\n
    \n :\n
    \n }\n {index + 1 != this.props.jobsToDisplay.length ?
    : null}\n
    \n ))}\n
    \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(MyPlanJobsToPrint);","import * as React from 'react';\nimport { isEmptyOrUndefined } from '../../helpers/TypeChecks';\nimport { AppState } from '../../store';\nimport CitizenModel from '../../models/CitizenModel';\nimport { connect } from 'react-redux';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from '../../store/AppActions';\nimport CreateAgreement from \"../CreateAgreement\";\nimport { AgreementCategoryTitles } from '../../models/Agreement/AgreementCategoriesEnum';\nimport { setViewToDisplayFromHeader } from \"../../store/Preparation/actions\";\nimport { bindActionCreators } from 'redux';\nimport { setElementToPrint, setShouldPrint } from \"../../store/Print/actions\";\nimport MyPlanModel, { FormattedMyPlanEntities } from '../../models/MyPlanModel';\nimport JobPathModel from '../../models/JobPathModel';\nimport TextAgreementModel from '../../models/Agreement/TextAgreementModel';\nimport QualificationAgreementModel from '../../models/Agreement/QualificationAgreementModel';\nimport JobLogEntryModel from '../../models/JobLogEntryModel';\nimport JobModel from '../../models/JobModel';\nimport { fetchFormattedMyPlan, fetchMyPlanFormattedString } from \"../../store/MyPlan/actions\";\nimport ModalToDisplayMyPlanText from '../ModalToDisplayMyPlanText';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faComments, faFileAlt } from '@fortawesome/free-solid-svg-icons';\nimport CreateRemark from '../CreateRemark';\nimport { calculateAgeFromCPR } from '../../helpers/CalculateAgeFromCPR';\nimport DataResponseModel from '../../models/Template/DataResponseModel';\nimport JobMatchTemplateModel, { JournalSystem } from '../../models/Template/JobMatchTemplateModel';\nimport { Guid } from 'guid-typescript';\nimport { createGuid } from '../../helpers/CreateGuid';\nimport OptionsDropdown from '../Dropdown/OptionsDropdown';\nimport { createLocaleDate } from '../../helpers/DateHelper';\nimport NewPlanButton from '../Buttons/NewPlanGroup/NewPlanButton';\nimport DsaButton from '../DsaButton';\nimport DsaButtonAgreement from '../DsaButtonAgreement';\nimport DsaButtonRemark from '../DsaButtonRemark';\nimport MyPlanJobsToPrint from '../MyPlanJobsToPrint';\nimport { ToastIcon, TopToast } from '../../helpers/ToastHelper';\nimport './HeaderLower.scss';\nimport ButtonGeneral from '../Buttons/ButtonGeneral';\nimport { ButtonGeneralType } from '../Buttons/ButtonGeneral/ButtonGeneral';\nimport JobLogModal from '../JobLogModal';\nimport { UnemploymentFundMembershipType } from '../../models/UnemploymentFundMembershipType';\n\ninterface OwnProps {\n page: string;\n}\n\ninterface LinkStateProps {\n citizen: CitizenModel;\n showingPrint: boolean;\n tempJobLogList: JobLogEntryModel[];\n jobPathsRemoved: JobPathModel[];\n qualificationAgreements: QualificationAgreementModel[];\n jobPathList: JobPathModel[];\n textAgreements: TextAgreementModel[];\n pinnedJobs: JobModel[];\n savedRemark: string;\n dataResponse: DataResponseModel;\n templates: JobMatchTemplateModel;\n citizenID: Guid;\n filteredAllJobs: JobModel[]; \n allJobs: JobModel[];\n remainingJobPath: JobPathModel;\n formattedFullPlan: string;\n personMembership: UnemploymentFundMembershipType;\n}\n\ninterface LinkDispathProps {\n setViewToDisplayFromHeader: (viewToDisplay: string) => void;\n setElementToPrint: (element: string) => void;\n setShouldPrint: (shouldPrint: boolean) => void;\n fetchMyPlanFormattedString: (myPlan: MyPlanModel, templateKey: string, formattedMyPlanEntity: FormattedMyPlanEntities) => void;\n fetchFormattedMyPlan: (myPlan: MyPlanModel, templateKey: string, callback: (success: boolean, data: string) => void) => void;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispathProps => ({\n setViewToDisplayFromHeader: bindActionCreators(setViewToDisplayFromHeader, dispatch),\n setElementToPrint: bindActionCreators(setElementToPrint, dispatch),\n setShouldPrint: bindActionCreators(setShouldPrint, dispatch),\n fetchMyPlanFormattedString: bindActionCreators(fetchMyPlanFormattedString, dispatch),\n fetchFormattedMyPlan: bindActionCreators(fetchFormattedMyPlan, dispatch),\n});\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({\n citizen: state.citizen.citizen,\n showingPrint: state.print.shouldPrint,\n tempJobLogList: state.myPlanMeeting.tempJobLogList,\n jobPathsRemoved: state.jobPathList.jobPathsRemoved,\n qualificationAgreements: state.agreement.qualificationAgreements,\n jobPathList: state.jobPathList.jobPaths,\n textAgreements: state.agreement.textAgreements,\n pinnedJobs: state.jobPathList.pinnedJobs,\n savedRemark: state.agreement.savedRemark,\n dataResponse: state.citizen.dataResponse,\n templates: state.template.templates,\n citizenID: state.citizen.citizenID,\n filteredAllJobs: state.jobs.filteredAllJobs,\n allJobs: state.jobs.allJobs,\n remainingJobPath: state.jobPathList.remainingJobPath,\n formattedFullPlan: state.myPlanMeeting.formattedFullPlan,\n personMembership: state.person.personMembership,\n});\n\ninterface State {\n preparationSceneOptions: string[];\n midHeaderPreaparationisClicked: boolean;\n preparationSceneChosen: string;\n startNewPlan: boolean;\n shouldPrintModal: boolean;\n showMyPlanTextModal: boolean;\n showDraftMeetingsModal: boolean;\n showJobLogModal: boolean;\n}\n\ntype Props = LinkDispathProps & LinkStateProps & OwnProps;\n\nclass HeaderLower extends React.Component {\n constructor(props: any) {\n super(props);\n\n this.state = {\n preparationSceneOptions: ['Forberedelse', 'CV'],\n midHeaderPreaparationisClicked: false,\n preparationSceneChosen: 'preparation',\n startNewPlan: false,\n shouldPrintModal: false,\n showMyPlanTextModal: false,\n showDraftMeetingsModal: false,\n showJobLogModal: false,\n }\n }\n\n handleShowMyPlanClicked = () => {\n let dataResponse: DataResponseModel = {} as DataResponseModel;\n\n let jobPathsList: JobPathModel[] = [];\n if(this.props.jobPathList && this.props.jobPathList.length > 0)\n {\n this.props.jobPathList.map((jobpath) => {\n let tempJobPath: JobPathModel = {...jobpath}; \n tempJobPath.filteredJobs = [];\n jobPathsList = [...jobPathsList, tempJobPath];\n });\n }\n\n if(this.props.remainingJobPath)\n jobPathsList = [...jobPathsList, this.props.remainingJobPath];\n\n if(this.props.templates && this.props.templates.guidanceDataGroup && Object.keys(this.props.templates.guidanceDataGroup).length > 0)\n {\n dataResponse = new DataResponseModel(createGuid(), this.props.templates.guidanceDataGroup.id, createLocaleDate(), this.props.citizenID, this.props.templates.guidanceDataGroup.inputs);\n }\n const myPlan: MyPlanModel = new MyPlanModel(jobPathsList, this.props.textAgreements, this.props.qualificationAgreements, this.props.tempJobLogList, this.props.savedRemark, dataResponse);\n\n let templateKey: string = this.props.templates && this.props.templates.key != '' ? this.props.templates.key : '';\n if(templateKey && templateKey.includes('ikkejobparat') && this.props.templates && this.props.templates.journalSystem == JournalSystem.SchultzFasit)\n {\n this.props.fetchMyPlanFormattedString(myPlan, templateKey, FormattedMyPlanEntities.Agreements);\n }\n else {\n this.props.fetchMyPlanFormattedString(myPlan, templateKey, FormattedMyPlanEntities.FullPlan);\n }\n\n this.setState({\n showMyPlanTextModal: true\n });\n\n }\n\n handlePreparationChosenScene = (event: any, value: string) => {\n this.props.setViewToDisplayFromHeader(value);\n this.setState({\n preparationSceneChosen: value,\n midHeaderPreaparationisClicked: !this.state.midHeaderPreaparationisClicked,\n })\n }\n\n handlePrintMyPlan = () => {\n // check on state what to print\n const myPlanElement: HTMLElement | null = document.getElementById('agreements-on-my-plan-container');\n const jobElement: HTMLElement | null = document.getElementById('myplan-jobs-to-print');\n let myplanInnerHtml: string = '';\n let jobInnerHtml: string = '';\n if (myPlanElement && myPlanElement.innerHTML) \n myplanInnerHtml = myPlanElement.innerHTML;\n\n if (jobElement && jobElement.innerHTML)\n jobInnerHtml = jobElement.innerHTML;\n\n this.props.setElementToPrint(myplanInnerHtml + jobInnerHtml); \n\n this.props.setShouldPrint(true);\n }\n\n closeShowMyPlanText = () => {\n this.setState({\n showMyPlanTextModal: !this.state.showMyPlanTextModal,\n });\n }\n\n handlePrintCV = () => {\n const cvToPrint = document.getElementById('cv-wrapper');\n if (cvToPrint && cvToPrint.innerHTML) {\n this.props.setElementToPrint(cvToPrint.innerHTML);\n this.props.setShouldPrint(true);\n }\n }\n\n closeDraftMeetingModal = () => {\n this.setState({\n showDraftMeetingsModal: false,\n });\n }\n\n handleCopyToClipboard = async () => {\n const element = document.getElementById('agreements-on-my-plan');\n if (element)\n {\n // try {\n // await (navigator.clipboard as any).write([\n // new ClipboardItem({\n // 'text/plain': new Blob(['tester'], { type: 'text/plain' }),\n // }),\n // ]);\n // } catch (err) {\n // console.error(err);\n // }\n let range = document.createRange();\n range.selectNodeContents(element);\n let sel = window.getSelection()!;\n sel.removeAllRanges();\n sel.addRange(range);\n // using this deprecated feature to copy the selected element.\n // TODO : should be refactored in the near future when navigator.clipboard doesnt have exceptions and able to copy the selected text so it shows up beautifully in Word.\n document.execCommand('copy');\n sel.removeAllRanges();\n\n\n TopToast(ToastIcon.SUCCESS).fire({\n title: 'Opsummeringen er kopieret til udklipsholderen',\n timer: 2500,\n });\n }\n else \n {\n TopToast(ToastIcon.ERROR).fire({\n title: 'Fejl! Opsummeringen blev ikke kopieret til udklipsholderen',\n timer: 2500,\n });\n }\n // let dataResponse: DataResponseModel = {} as DataResponseModel;\n\n // let jobPathsList: JobPathModel[] = [];\n // if(this.props.jobPathList && this.props.jobPathList.length > 0)\n // {\n // this.props.jobPathList.map((jobpath) => {\n // let tempJobPath: JobPathModel = {...jobpath}; \n // tempJobPath.filteredJobs = [];\n // jobPathsList = [...jobPathsList, tempJobPath];\n // });\n // }\n\n // if(this.props.remainingJobPath)\n // jobPathsList = [...jobPathsList, this.props.remainingJobPath];\n\n // if(this.props.templates && this.props.templates.guidanceDataGroup && Object.keys(this.props.templates.guidanceDataGroup).length > 0)\n // {\n // dataResponse = new DataResponseModel(createGuid(), this.props.templates.guidanceDataGroup.id, createLocaleDate(), this.props.citizenID, this.props.templates.guidanceDataGroup.inputs);\n // }\n // const myPlan: MyPlanModel = new MyPlanModel(jobPathsList, this.props.textAgreements, this.props.qualificationAgreements, this.props.tempJobLogList, this.props.savedRemark, dataResponse);\n // let templateKey: string = this.props.templates && this.props.templates.key != '' ? this.props.templates.key : '';\n // this.props.fetchFormattedMyPlan(myPlan, templateKey, (success, data) => {\n // if (success)\n // {\n // // copy to clipboard\n // navigator.clipboard.writeText(data);\n // TopToast(ToastIcon.SUCCESS).fire({\n // title: 'Opsummeringen er kopieret til udklipsholderen',\n // timer: 2500,\n // });\n // }\n // else \n // {\n // TopToast(ToastIcon.ERROR).fire({\n // title: 'Fejl! Opsummeringen blev ikke kopieret til udklipsholderen',\n // timer: 2500,\n // });\n // }\n // });\n }\n\n handleCopyPlan = (): string => {\n return document.getElementById('agreements-on-my-plan')?.innerText ?? '';\n }\n\n handleJobLogModal = () => {\n this.setState({\n showJobLogModal: !this.state.showJobLogModal,\n });\n }\n\n render() {\n const agreementNoteLight: string = require(\"../../images/CreateAgreementDsa.svg\");\n\n if (this.props.showingPrint && this.state.shouldPrintModal) {\n this.setState({\n shouldPrintModal: false,\n });\n }\n\n let convertedCPR: string = '';\n if (!isEmptyOrUndefined(this.props.citizen) && !isEmptyOrUndefined(this.props.citizen.cpr)) {\n let citizenCPR: string = this.props.citizen.cpr;\n convertedCPR = citizenCPR.slice(0, 6) + '-' + citizenCPR.slice(6);\n }\n\n let element;\n\n if (this.props.page === AgreementCategoryTitles.PREPARATION) {\n element = (\n
    \n
    \n \n
    \n
    \n

    |

    \n
    \n
    \n \n
    \n
    \n );\n }\n\n let textToDisplayMyPlan: string = 'Se min liste';\n if(this.props.templates && this.props.templates.journalSystem == JournalSystem.SchultzFasit)\n {\n textToDisplayMyPlan = 'Se aftale';\n }\n\n return (\n \n\n {this.props.page === AgreementCategoryTitles.MYPLAN \n ? \n
    \n \n
    \n : null}\n this.closeShowMyPlanText()} />\n this.handleJobLogModal()} />\n
    \n
    \n
    \n {this.props.page === AgreementCategoryTitles.PREPARATION ?\n

    {!isEmptyOrUndefined(this.props.citizen) && !isEmptyOrUndefined(this.props.citizen.fullName) ?\n
    \n

    \n {this.props.citizen.fullName} \n {'(' + convertedCPR + ')'}\n

    \n \n
    \n : 'Ingen borger'}

    \n\n :\n
    \n

    {this.props.page !== AgreementCategoryTitles.FOLLOWUP ? this.props.page : 'Forberedelse'}

    \n {this.props.page === AgreementCategoryTitles.CV \n ?\n \n {!isEmptyOrUndefined(this.props.citizen?.cv?.status?.cvStatusType?.name) ?\n `(${this.props.citizen?.cv?.status?.cvStatusType?.name})`\n : null}\n \n : null}\n
    \n }\n
    \n
    \n
    \n
    \n {this.props.page === AgreementCategoryTitles.PREPARATION ? (\n
    {element}
    \n ) : null}\n
    \n
    \n
    \n
    \n {this.props.page === AgreementCategoryTitles.JOBINSPIRATION || this.props.page === AgreementCategoryTitles.JOBINSPIRATION_PREPARATION ? \n // if its jobinspiration page then dont display anything in right side therefore null\n null\n : this.props.page !== AgreementCategoryTitles.PREPARATION && this.props.page !== AgreementCategoryTitles.MYPLAN ? (\n\n
    \n {/* \n */}\n {/* this.handlePrintCV()} /> */}\n
    \n ) : this.props.page === AgreementCategoryTitles.MYPLAN && this.props.personMembership === UnemploymentFundMembershipType.UnemployedMember ? (\n \n {/* */}\n {/* this.handleShowMyPlanClicked()} /> */}\n this.handleJobLogModal()} />\n {/* */}\n {/* \n */}\n {/* this.handlePrintMyPlan()} /> */}\n \n ) : null}\n\n
    \n
    \n\n {/* Below HTML code is for mobile version */}\n
    \n

    {this.props.citizen.fullName} - {this.props.citizen.cpr}

    \n
    \n
    \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(HeaderLower);","import * as React from 'react';\nimport HeaderUpper from '../../components/HeaderUpper';\nimport HeaderLower from '../../components/HeaderLower';\nimport './HeaderScene.scss'\n\n\ninterface OwnProps {\n page: string;\n}\ninterface State {\n}\n\n\nexport type Props = OwnProps;\n\n\nclass HeaderScene extends React.Component {\n render() {\n return (\n
    \n \n
    \n \n
    \n
    \n );\n }\n}\n\nexport default HeaderScene;","import * as React from 'react';\nimport { Redirect, Route } from 'react-router-dom';\nimport { AgreementCategoryTitles } from './models/Agreement/AgreementCategoriesEnum';\nimport FooterScene from './scenes/FooterScene';\nimport HeaderScene from './scenes/HeaderScene';\n \ninterface Props {\n headerScene: boolean;\n footerScene: boolean;\n path: string;\n isAuth: boolean;\n exact: boolean;\n routeName?: AgreementCategoryTitles;\n}\n \nclass GuardedRoute extends React.Component {\n constructor(props: Props) {\n super(props);\n }\n \n render() {\n return (\n \n \n {this.props.headerScene ? : null}\n {this.props.children}\n {this.props.footerScene ? : null}\n \n \n );\n }\n}\n \nexport default GuardedRoute;","import { AccountInfo } from '@azure/msal-browser';\nimport { AppActions } from '../AppActions';\nimport * as actions from './types';\n\nexport const UpdateAccountStatus = (account: AccountInfo | null): actions.AuthActionType => ({\n type: actions.LoginSuccess,\n payload: account\n});\n\nexport const setIsAuthenticated = (isAuthenticated: boolean): actions.AuthActionType => ({\n type: actions.IS_AUTHENTICATED,\n data: isAuthenticated,\n});","export const configuration = {\n DASHBOARD_ITEMS: 10,\n ONBOARDED_USER_COOKIE: 'onboardedDSAUser',\n}","import i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\nimport da from './i18n/da.json';\nimport en from './i18n/en.json';\n\n// used example: https://github.com/Lemoncode/i18next-example-typescript\n\n// the translations\nconst resources = {\n en: en,\n da: da,\n};\n\ni18n\n .use(initReactI18next) // passes i18n down to react-i18next\n .init({\n resources,\n lng: 'da',\n\n keySeparator: false, // we do not use keys in form messages.welcome\n\n interpolation: {\n escapeValue: false, // react already safes from xss\n },\n });\n\nexport default i18n;\n","import React from 'react';\nimport { BrowserRouter as Router } from 'react-router-dom';\nimport { JobmatchRoute } from './routes';\nimport MyPlanScene from \"./scenes/MyPlanScene\";\nimport SearchJobScene from \"./scenes/SearchJobScene\";\nimport JobPathScene from \"./scenes/JobPathScene\";\nimport { connect } from 'react-redux';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppActions } from './store/AppActions';\nimport { AppState } from './store';\nimport { AgreementCategoryTitles } from \"./models/Agreement/AgreementCategoriesEnum\"\nimport Print from './components/Print';\nimport GuardedRoute from './GuardedRoute';\nimport CitizenModel from './models/CitizenModel';\nimport { AccountInfo } from '@azure/msal-browser';\nimport Loader from './components/Loader';\nimport JobPathModel from './models/JobPathModel';\nimport { bindActionCreators } from 'redux';\nimport { fetchJobPathFilters, fetchJobSearchEntries, fetchPersonMembership, putJobPathFilters, setPersonGeoData, updateJobSearchEntriesWithJobPathIDs } from './store/Person/actions';\nimport { setJobPaths } from './store/JobPathList/actions';\nimport { setWindowInnerWidth } from './store/SearchJob/actions';\nimport JobSearchEntryModel from './models/JobSearchEntryModel';\nimport { getJobBarometerFromAPI } from './store/Citizen/actions';\nimport { getAllJobsFromAPI_Jobcenter, getAllQualificationsFromAPI, getAllIndustriesFromAPI, getAllMunicipalitiesFromAPI, getAllOccupationOppurtunitiesFromAPI } from './store/Jobs/actions';\nimport { shouldDisplayLoader } from './store/Preparation/actions';\nimport { getAllRegionFromAPI } from './store/SearchJob/actions';\nimport GeoPoint from './models/GeoPoint';\nimport { MsalContext } from '@azure/msal-react';\nimport { setIsAuthenticated, UpdateAccountStatus } from './store/Auth/actions';\nimport { UnemploymentFundMembershipType } from './models/UnemploymentFundMembershipType';\nimport history from './history';\nimport { Redirect, Route, Switch } from 'react-router';\nimport DSAOnboardingScene from './scenes/DSAOnboardingScene/DSAOnboardingScene';\nimport { configuration } from './global/configuration';\nimport { isMobile, isTablet } from 'react-device-detect';\nimport swal from 'sweetalert2';\nimport withReactContent from 'sweetalert2-react-content';\nimport DsaAppIcon from './images/dsa-app-icon.png';\nimport DsaAppContent from './images/dsa-app-content.png';\nimport './App.scss';\nimport './i18n';\n\n\ninterface OwnProps {\n isAuth: boolean;\n}\n\ninterface LinkStateProp {\n shouldPrint: boolean;\n elementToPrint: string;\n citizen: CitizenModel;\n isFetching: boolean;\n isSavingMyPlan: boolean;\n displayingLoader: boolean;\n loadText: string;\n jobPaths: JobPathModel[];\n lowerBackDropOpacity: boolean;\n remainingJobPath: JobPathModel;\n windowInnerWidth: number;\n account: AccountInfo | null;\n hasUpdatedJobPathIDs: boolean;\n jobSearchEntries: JobSearchEntryModel[];\n personMembership: UnemploymentFundMembershipType;\n isAuthenticated: boolean;\n hasJobPathFilters: boolean | null;\n}\n\ninterface LinkDispatchProps {\n setJobPaths: (data: JobPathModel[]) => void;\n putJobPathFilters: (jobPathFilters: JobPathModel[]) => void;\n fetchJobSearchEntries: () => void;\n setWindowInnerWidth: (width: number) => void;\n updateJobSearchEntriesWithJobPathIDs: (data: JobPathModel[]) => void;\n getAllJobsFromAPI_Jobcenter: () => void;\n getAllRegionFromAPI: () => void;\n getAllQualificationsFromAPI: () => void;\n getAllIndustriesFromAPI: () => void;\n shouldDisplayLoader: (shouldDisplayLoader: boolean) => void;\n getJobBarometerFromAPI: (citizen: CitizenModel) => void;\n getAllMunicipalitiesFromAPI: () => void;\n getAllOccupationOppurtunitiesFromAPI: (postalCode: string) => void;\n fetchJobPathFilters: (callback: (success: boolean) => void) => void;\n setPersonGeoData: (geoData: GeoPoint) => void;\n UpdateAccountStatus: (account: AccountInfo) => void;\n fetchPersonMembership: (callback: (success: boolean, type: UnemploymentFundMembershipType) => void) => void;\n setIsAuthenticated: (isAuthenticated: boolean) => void;\n}\n\ninterface State {\n displayLoader: boolean;\n isAuthOnCallApis: boolean;\n}\n\nconst mapDispatchToProps = (\n dispatch: ThunkDispatch\n): LinkDispatchProps => ({\n setJobPaths: bindActionCreators(setJobPaths, dispatch),\n putJobPathFilters: bindActionCreators(putJobPathFilters, dispatch),\n fetchJobSearchEntries: bindActionCreators(fetchJobSearchEntries, dispatch),\n setWindowInnerWidth: bindActionCreators(setWindowInnerWidth, dispatch),\n updateJobSearchEntriesWithJobPathIDs: bindActionCreators(updateJobSearchEntriesWithJobPathIDs, dispatch),\n getAllJobsFromAPI_Jobcenter: bindActionCreators(getAllJobsFromAPI_Jobcenter, dispatch),\n getAllRegionFromAPI: bindActionCreators(getAllRegionFromAPI, dispatch),\n getAllQualificationsFromAPI: bindActionCreators(getAllQualificationsFromAPI, dispatch),\n getAllIndustriesFromAPI: bindActionCreators(getAllIndustriesFromAPI, dispatch),\n shouldDisplayLoader: bindActionCreators(shouldDisplayLoader, dispatch),\n getJobBarometerFromAPI: bindActionCreators(getJobBarometerFromAPI, dispatch),\n getAllMunicipalitiesFromAPI: bindActionCreators(getAllMunicipalitiesFromAPI, dispatch),\n getAllOccupationOppurtunitiesFromAPI: bindActionCreators(getAllOccupationOppurtunitiesFromAPI, dispatch),\n fetchJobPathFilters: bindActionCreators(fetchJobPathFilters, dispatch),\n setPersonGeoData: bindActionCreators(setPersonGeoData, dispatch),\n UpdateAccountStatus: bindActionCreators(UpdateAccountStatus, dispatch),\n fetchPersonMembership: bindActionCreators(fetchPersonMembership, dispatch),\n setIsAuthenticated: bindActionCreators(setIsAuthenticated, dispatch),\n});\n\nconst mapStateToProps = (state: AppState): LinkStateProp => ({\n shouldPrint: state.print.shouldPrint,\n elementToPrint: state.print.elementToPrint,\n citizen: state.citizen.citizen,\n isFetching: state.jobs.isFetching,\n isSavingMyPlan: state.myPlanMeeting.isSavingMyPlan,\n displayingLoader: state.loader.displayingLoader,\n loadText: state.loader.loadText,\n jobPaths: state.jobPathList.jobPaths,\n lowerBackDropOpacity: state.loader.lowerBackDropOpacity,\n remainingJobPath: state.jobPathList.remainingJobPath,\n windowInnerWidth: state.searchJob.windowInnerWidth,\n hasUpdatedJobPathIDs: state.person.hasUpdatedJobPathIDs,\n jobSearchEntries: state.person.jobSearchEntries,\n account: state.auth.account,\n personMembership: state.person.personMembership,\n isAuthenticated: state.auth.isAuthenticated,\n hasJobPathFilters: state.person.hasJobPathFilters,\n});\n\ntype Props = LinkStateProp & LinkDispatchProps & OwnProps;\n\nclass App extends React.Component {\n constructor(props: any) {\n super(props);\n this.state = {\n displayLoader: false,\n isAuthOnCallApis: false,\n }\n }\n\n static contextType = MsalContext;\n\n componentDidMount() {\n const shouldUseApp = isMobile || isTablet;\n \n if (shouldUseApp)\n {\n const MySwal = withReactContent(swal);\n MySwal.fire({\n confirmButtonText: 'Gå til app',\n allowOutsideClick: false,\n customClass: {\n popup: 'swal-popup',\n container: 'swal-popup-customized-app',\n confirmButton: 'search-filter-custom swal-buttons',\n cancelButton: 'swal-customized-cancel swal-buttons'\n },\n html:\n
    \n
    \n \n
    \n

    Hent Din Sundhedsfaglige Jobportal

    \n

    Tryk nedenfor for at gå til vores app

    \n
    \n
    \n
    \n \n
    \n
    ,\n }).then((result: any) => {\n if (result.value) {\n this.handleShowAppMessage();\n }\n });\n }\n\n // always setting the ONBOARDED_USER_COOKIE to true, therefore no reason to check for false. It's set if the user has been through the onboarding.\n if (this.props.isAuth && !document.cookie?.includes(configuration.ONBOARDED_USER_COOKIE))\n history.push(JobmatchRoute.ONBOARDING, {from: window.location.pathname, historyRedirect: false});\n\n // window.addEventListener('unload', (e) => handleUnLoad(e));\n this.handleCallApis();\n this.props.setIsAuthenticated(this.props.isAuth);\n\n if (this.props.isAuth)\n {\n if (!this.state.isAuthOnCallApis)\n this.handleCallApis();\n\n if (this.props.account === null)\n this.props.UpdateAccountStatus(this.context.accounts[0]);\n }\n }\n\n handleShowAppMessage = () => {\n if(navigator.userAgent.toLowerCase().indexOf(\"iphone\") > -1)\n window.location.href = 'https://apps.apple.com/dk/app/din-sundhedsfaglige-jobportal/id1670323617';\n\n if(navigator.userAgent.toLowerCase().indexOf(\"android\") > -1)\n window.location.href = 'https://play.google.com/store/apps/details?id=dk.jobportal.dsa';\n\n if (!navigator.userAgent.match(/(iPhone|iPod|iPad|Android|BlackBerry|IEMobile)/))\n window.location.href = 'https://www.google.com';\n }\n\n handleCallApis = async () => {\n // setTimeout(() => {\n this.setState({\n isAuthOnCallApis: this.props.isAuth,\n });\n \n this.props.fetchPersonMembership((success, type) => {\n if (type === UnemploymentFundMembershipType.UnemployedMember)\n this.props.fetchJobSearchEntries();\n\n this.props.getAllOccupationOppurtunitiesFromAPI('0');\n this.props.getAllRegionFromAPI();\n this.props.getAllQualificationsFromAPI();\n this.props.getAllIndustriesFromAPI();\n this.props.getAllMunicipalitiesFromAPI();\n \n if (type !== UnemploymentFundMembershipType.NotAMember)\n this.props.fetchJobPathFilters((success) => {});\n\n // const redirectToMyPlan: boolean = window.location.pathname.includes('/minliste') || sessionStorage.getItem('redirectPathForMyList') != null;\n // if (redirectToMyPlan && (type === UnemploymentFundMembershipType.EmployedMember || type === UnemploymentFundMembershipType.UnemployedMember))\n // history.push('/myplan');\n\n }); \n // }, 0);\n }\n\n componentDidUpdate(prevProps: Props) {\n if (!prevProps.isAuth && this.props.isAuth)\n {\n if (!this.state.isAuthOnCallApis)\n this.handleCallApis();\n\n if (this.props.account === null)\n this.props.UpdateAccountStatus(this.context.accounts[0]);\n }\n\n if (prevProps.isAuth !== this.props.isAuth && this.props.isAuthenticated !== this.props.isAuth)\n this.props.setIsAuthenticated(this.props.isAuth);\n\n if (prevProps.jobPaths !== this.props.jobPaths || prevProps.remainingJobPath !== this.props.remainingJobPath)\n {\n // updating jobpaths everytime we make changes to the jobpath on the jobpath scene\n if (this.context.accounts.length > 0 && this.props.hasJobPathFilters !== null && (window?.location?.pathname === \"/jobpath\" || window?.location?.pathname === \"/minliste\"))\n this.props.putJobPathFilters([...this.props.jobPaths, this.props.remainingJobPath]);\n }\n \n if (!this.props.hasUpdatedJobPathIDs && this.props.jobPaths?.length > 0 && this.props.jobSearchEntries?.length > 0)\n this.props.updateJobSearchEntriesWithJobPathIDs(this.props.jobPaths);\n }\n\n render() {\n const shouldUseApp = isMobile || isTablet;\n\n let element: string = '';\n if (this.props.elementToPrint && this.props.elementToPrint !== '') {\n element = this.props.elementToPrint;\n }\n\n return (\n <>\n {shouldUseApp\n ? <>\n :\n !this.state.displayLoader && this.props.personMembership !== UnemploymentFundMembershipType.NONE\n ?\n
    \n {this.props.displayingLoader ? : null} \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 {/* Not found page: path=* is when no matches on the url is found. */}\n \n \n \n \n \n
    \n : }\n \n \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(App);\n","import * as React from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { ThunkDispatch } from 'redux-thunk';\nimport { AppState } from '../../store';\nimport { AppActions } from '../../store/AppActions';\nimport { Modal } from 'react-bootstrap';\nimport CloseButton from '../Buttons/CloseButton';\nimport SearchAddress from '../SearchAddress';\nimport ButtonGeneral from '../Buttons/ButtonGeneral';\nimport { ButtonGeneralType } from '../Buttons/ButtonGeneral/ButtonGeneral';\nimport GeoPoint from '../../models/GeoPoint';\nimport { setPersonGeoData } from '../../store/Person/actions';\nimport SearchAddressDAWAModel from '../../models/SearchAddressDAWAModel';\nimport { isObjEmpty } from '../../helpers/TypeChecks';\nimport './ModalGeoLocation.scss';\n\ninterface OwnProps {\n show: boolean;\n closeModal: () => void;\n }\n\ninterface State {\n address: SearchAddressDAWAModel;\n }\n\ninterface LinkStateProps { }\n\ninterface LinkDispatchProps { \n setPersonGeoData: (geoData: GeoPoint) => void;\n}\n\nconst mapStateToProps = (state: AppState): LinkStateProps => ({ });\n\nconst mapDispatchToProps = (dispatch: ThunkDispatch): LinkDispatchProps => ({ \n setPersonGeoData: bindActionCreators(setPersonGeoData, dispatch),\n});\n\ntype Props = OwnProps & LinkStateProps & LinkDispatchProps;\n\nclass ModalGeoLocation extends React.Component {\n constructor(props: Props) {\n super(props);\n this.state = { \n address: {} as SearchAddressDAWAModel,\n };\n }\n\n handleSave = () => {\n this.props.setPersonGeoData({ latitude: this.state.address?.adresse?.y, longitude: this.state.address?.adresse?.x});\n this.props.closeModal();\n }\n\n handleCancel = () => {\n this.props.setPersonGeoData({latitude: 55.980925339348545, longitude: 10.549030978491576});\n this.props.closeModal();\n }\n\n handleUpdateAddress = (address: SearchAddressDAWAModel) => {\n this.setState({\n address: address,\n });\n }\n\n render() {\n\n return (\n \n \n Lokation\n \n \n\n \n

    Du har deaktiveret lokalitetstjenesten på din enhed. Det betyder, at vi ikke kan lave en præcis jobsøgning med udgangspunkt i din lokation. For at få den mest præcise jobsøgning, anbefaler vi, at du tilføjer din adresse i nedenstående felt. Den indtastede adresse vil udelukkende blive anvendt i denne session.

    \n

    “Du kan aktivere lokalitetstjenesten i indstillinger på din enhed og give tilladelse til at anvende din lokation fremadrettet ved brug af Jobportalen.”

    \n
    \n {!isObjEmpty(this.state.address)\n ?

    Valgte addresse: {this.state.address?.tekst}

    \n : null}\n this.handleUpdateAddress(address)} />\n
    \n\n \n this.handleCancel()} />\n this.handleSave()} />\n \n
    \n );\n }\n}\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ModalGeoLocation);","import { TypedUseSelectorHook, useDispatch, useSelector } from \"react-redux\";\nimport { AppState } from \"./store\";\nimport { AppDispatch } from \".\";\n\nexport const useAppSelector: TypedUseSelectorHook = useSelector;\nexport const useAppDispatch = () => useDispatch();","import React, { useEffect, useState } from 'react';\nimport { UnauthenticatedTemplate, useMsal, AuthenticatedTemplate, useIsAuthenticated } from \"@azure/msal-react\";\nimport { loginRedirectRequest, silentLoginRequest } from './authConfig';\nimport Loader from '../components/Loader';\nimport App from '../App';\nimport { JobmatchRoute } from '../routes';\nimport { isEmptyOrUndefined } from '../helpers/TypeChecks';\nimport { GeoPoint } from '../models/GeoPoint';\nimport { setPersonGeoData, setShowGeoLocationModal } from '../store/Person/actions';\nimport { setWindowInnerWidth } from '../store/SearchJob/actions';\nimport ModalGeoLocation from '../components/ModalGeoLocation';\nimport { useAppDispatch, useAppSelector } from '../hooks';\n\nexport function AuthWrapper() {\n const { instance } = useMsal();\n const isAuthenticated = useIsAuthenticated();\n const [showGeoModal, setShowGeoModal] = useState(false);\n const [ssoSilentAttempted, setssoSilentAttempted] = useState(false as boolean);\n const dispatch = useAppDispatch();\n const showGeoLocationModal = useAppSelector((state) => state?.person?.showGeoLocationModal);\n\n //implementens the loginflow for directly accessing /minliste.\n useEffect(() => {\n if(isAuthenticated){\n setssoSilentAttempted(true);\n return;\n }\n let pathname:string = window.location.pathname.endsWith('/') ? window.location.pathname.substr(0, window.location.pathname.length - 1) : window.location.pathname;\n if(!isAuthenticated && pathname.length > 0 && pathname.toLocaleLowerCase() === JobmatchRoute.MYPLAN){\n let loginRedirect = loginRedirectRequest\n loginRedirect.redirectStartPage = window.location.pathname;\n instance.ssoSilent(silentLoginRequest).then(\n () => setssoSilentAttempted(true),\n () => instance.loginRedirect(loginRedirect).then(\n () => setssoSilentAttempted(true)\n )\n ).catch(\n () => setssoSilentAttempted(true)\n );\n } else if(!isAuthenticated){\n instance.handleRedirectPromise().then(\n () => instance.ssoSilent(silentLoginRequest).then(() => setssoSilentAttempted(true),() => setssoSilentAttempted(true)).catch(() => setssoSilentAttempted(true)) \n )\n }\n }, []);\n\n useEffect(() => {\n // Only show Geo location if we aint using deeplinking to a job, to avoid showing two modals.\n if (isEmptyOrUndefined(window.location?.pathname?.split('/job/')?.[1]))\n handleGeoLocation();\n\n window.addEventListener(\"resize\", () => handleResize());\n\n return () => {\n window.removeEventListener(\"resize\", () => handleResize());\n }\n }, []);\n\n useEffect(() => {\n if (showGeoLocationModal)\n handleGeoLocation();\n\n }, [showGeoLocationModal]);\n\n useEffect(() => {\n if (!showGeoModal && showGeoLocationModal)\n dispatch(setShowGeoLocationModal(false));\n\n }, [showGeoModal]);\n\n function handleGeoLocation() {\n navigator.geolocation.getCurrentPosition((position) => setPersonGeoLocation(position), (error: any) => {\n setShowGeoModal(true);\n });\n }\n\n function closeGeoLocationModal() {\n setShowGeoModal(false);\n }\n\n function setPersonGeoLocation(position: any) {\n if (!isEmptyOrUndefined(position?.coords?.longitude) && !isEmptyOrUndefined(position?.coords?.latitude))\n dispatch(setPersonGeoData(new GeoPoint(position?.coords?.longitude, position?.coords?.latitude)))\n else \n setShowGeoModal(true);\n }\n\n function handleResize() {\n dispatch(setWindowInnerWidth(window.innerWidth));\n }\n\n return (\n \n {\n ssoSilentAttempted \n ? \n \n closeGeoLocationModal()} />\n \n \n \n \n \n {/* \n \n */}\n \n \n : }\n \n );\n}","import CitizenModel from '../../models/CitizenModel';\nimport { CitizenActionsDefaultState, CitizenActionTypes } from './types';\nimport * as actions from './types';\nimport { Guid } from \"guid-typescript\";\nimport { BookingModel } from '../../models/BookingModel';\nimport DataResponseModel from '../../models/Template/DataResponseModel';\nimport { ApiResponseEnumModel } from '../../models/ApiResponseEnumModel';\nimport { JobSearchDefinition } from '../../models/JobSearchDefinition';\n\nexport const CitizenReducerDefaultState: CitizenActionsDefaultState = {\n citizen: {} as CitizenModel,\n citizenID: {} as Guid,\n doneFetching: false as boolean,\n jobBaroMeterUrl: \"\" as string,\n isLoadingCitizen: false as boolean,\n unemploymentFundName: '',\n jobSearchDefinitionList: [],\n dfdgMyPlanVersions: [],\n bookings: [] as BookingModel[],\n chosenBooking: {} as BookingModel,\n document: {} as Blob,\n dataResponse: {} as DataResponseModel,\n newestDataResponse: {} as DataResponseModel,\n documentApiResponseEnum: ApiResponseEnumModel.DEFAULT,\n earliestJobSearchDefinition: {} as JobSearchDefinition,\n citizenDataResponse: ApiResponseEnumModel.DEFAULT,\n};\n\nconst reducer = (\n state = CitizenReducerDefaultState,\n action: CitizenActionTypes\n): CitizenActionsDefaultState => {\n switch (action.type) {\n case actions.GET_CITIZEN: {\n return {\n ...state,\n citizen: action.data,\n doneFetching: true,\n };\n }\n case actions.SEARCH_CITIZEN: {\n return {\n ...state,\n citizenID: action.data,\n doneFetching: false,\n };\n }\n case actions.CLEAR_CITIZEN: {\n return {\n ...state,\n citizen: {} as CitizenModel\n };\n }\n case actions.UPDATE_TRAVEL_TIME_CITIZEN: {\n return {\n ...state,\n citizen: action.data,\n }\n }\n\n case actions.SET_JOBBAROMETER: {\n return {\n ...state,\n jobBaroMeterUrl: action.data\n }\n }\n\n case actions.IS_LOADING_CITIZEN: {\n return {\n ...state,\n isLoadingCitizen: action.data,\n }\n }\n\n case actions.SET_CITIZEN_UNEMPLOYMENT_FUND: {\n return {\n ...state,\n unemploymentFundName: action.data,\n }\n }\n\n case actions.SET_JOBSEARCH_DEFINITION_LIST: {\n return {\n ...state,\n jobSearchDefinitionList: action.data,\n }\n }\n\n case actions.SET_DFDG_MYPLAN_VERSIONS: {\n return {\n ...state,\n dfdgMyPlanVersions: action.data,\n }\n }\n\n case actions.SET_CITIZEN_BOOKINGS: {\n return {\n ...state,\n bookings: action.data,\n }\n }\n\n case actions.SET_CHOSEN_BOOKING: {\n return {\n ...state,\n chosenBooking: action.data,\n }\n }\n\n case actions.CLEAR_ALL_CITIZEN_DATA: {\n return CitizenReducerDefaultState;\n }\n\n case actions.SET_DOCUMENT: {\n return {\n ...state,\n document: action.data,\n }\n }\n\n case actions.POST_DATA_GROUP_TO_CITIZEN: {\n return {\n ...state,\n dataResponse: action.data,\n }\n }\n\n case actions.CLEAR_DOCUMENT: {\n return {\n ...state,\n document: {} as Blob,\n }\n }\n\n case actions.SET_DOCUMENT_API_RESPONSE: {\n return {\n ...state,\n documentApiResponseEnum: action.data,\n }\n }\n\n case actions.SET_NEWEST_DATA_RESPONSE: {\n return {\n ...state,\n newestDataResponse: action.data,\n }\n }\n\n case actions.SET_EARLIEST_JOBSEARCH_DEFINITION: {\n return {\n ...state,\n earliestJobSearchDefinition: action.data,\n }\n }\n\n case actions.SET_CITIZEN_DATA_RESPONSE_ENUM: {\n return {\n ...state,\n citizenDataResponse: action.data,\n }\n }\n\n default:\n return state;\n }\n};\n\nexport { reducer as CitizenReducer };\n","import { ErrorActionTypes, ErrorActionsDefaultState } from './types';\nimport * as actions from './types';\nimport { _Text } from '../../i18n/translations';\n\nexport const ErrorReducerDefaultState: ErrorActionsDefaultState = {\n error: []\n};\n\nconst reducer = (\n state = ErrorReducerDefaultState,\n action: ErrorActionTypes\n) => {\n switch (action.type) {\n case actions.SET_ERROR: {\n return {\n ...state,\n error: action.error,\n };\n }\n case actions.RESET_ERROR: {\n return {\n ...state,\n warning: '',\n };\n }\n\n case actions.CLEAR_ALL_ERRORS: {\n return ErrorReducerDefaultState;\n }\n\n default:\n return state;\n }\n};\n\nexport { reducer as ErrorReducer };\n","import * as actions from './types';\nimport JobPathModel, { JobPathType } from '../../models/JobPathModel';\nimport QualificationModel from '../../models/QualificationModel';\nimport { Guid } from 'guid-typescript';\nimport JobModel from '../../models/JobModel';\nimport { JobReducerDefaultState } from '../Jobs/dist/reducer';\nimport { emptyRemainingJobPathModel } from '../../helpers/CreateEmptyDataObjects';\nimport { equals, isEmptyOrUndefined, isObjEmpty } from '../../helpers/TypeChecks';\nimport { createLocaleDate } from '../../helpers/DateHelper';\n\nexport const initialState: actions.JobPathSceneDefaultState = {\n jobPaths: [] as JobPathModel[],\n qualificationList: [] as QualificationModel[],\n isMyPlanJobPathsAdded: false,\n remainingJobPath: {} as JobPathModel,\n jobPathToDisplay: {} as Guid,\n jobPathsRemoved: [],\n shouldDisplayAllJobs: false,\n pinnedJobs: [],\n jobIdsAdded: [],\n companyIdsAdded: [],\n jobAgreementsConfirmedHandled: [],\n companyAgreementsConfirmedHandled: [],\n};\n\nconst reducer = (\n state = initialState,\n action: actions.JobPathActionTypes\n): actions.JobPathSceneDefaultState => {\n switch (action.type) {\n case actions.SET_QUALIFICATIONLIST_DRAGANDDROP: {\n return {\n ...state,\n qualificationList: action.data,\n };\n }\n\n case actions.SET_JOBPATHLIST_DRAGANDDROP: {\n return {\n ...state,\n jobPaths: action.data,\n };\n }\n\n case actions.DELETE_JOBPATH_QUALIFICATION: {\n const indexOfJobPath = state.jobPaths.findIndex(\n (jobpath) => jobpath.id === action.jobPath.id\n );\n\n const indexToRemove = state.jobPaths[\n indexOfJobPath\n ].qualifications.findIndex(\n (qualification) => qualification.id === action.data.id\n );\n\n const updatedArray = [\n ...state.jobPaths[indexOfJobPath].qualifications.slice(\n 0,\n indexToRemove\n ),\n ...state.jobPaths[indexOfJobPath].qualifications.slice(\n indexToRemove + 1\n ),\n ];\n\n return {\n ...state,\n jobPaths: state.jobPaths.map((jobpath) =>\n jobpath.id === action.jobPath.id\n ? { ...jobpath, qualifications: updatedArray }\n : jobpath\n ),\n };\n }\n\n case actions.SET_JOBPATHS_REMOVED: {\n return {\n ...state,\n jobPathsRemoved: action.data,\n }\n }\n\n case actions.ADD_JOBPATH: {\n return {\n ...state,\n jobPaths: [...state.jobPaths, action.data],\n jobPathToDisplay: action.data.id,\n };\n }\n\n case actions.DELETE_JOBPATH: {\n\n const jobPathToDelete = state.jobPaths.findIndex(\n (jobpath) => jobpath.id === action.data.id\n );\n\n if (jobPathToDelete > -1) {\n const updatedJobPathList = [\n ...state.jobPaths.slice(0, jobPathToDelete),\n ...state.jobPaths.slice(jobPathToDelete + 1),\n ];\n\n const jobPathInActive: JobPathModel = { ...action.data };\n jobPathInActive.isActive = false;\n jobPathInActive.dateDeleted = createLocaleDate();\n jobPathInActive.filteredJobs = [];\n return {\n ...state,\n jobPathsRemoved: [...state.jobPathsRemoved, jobPathInActive],\n jobPaths: updatedJobPathList,\n jobPathToDisplay: jobPathToDelete === 0 ? {} as Guid : state.jobPaths[jobPathToDelete - 1].id,\n };\n } else {\n return { ...state };\n }\n }\n case actions.UPDATE_JOBPATH: {\n const indexToUpdate = state.jobPaths.findIndex(\n (x) => x.id === action.data.id\n );\n //Elements before the element we want to update\n const tempStartArray = state.jobPaths.slice(0, indexToUpdate);\n //Elements after the element we want to update\n const tempEndArray = state.jobPaths.slice(indexToUpdate + 1);\n return {\n ...state,\n // jobPaths: [...tempStartArray, action.data, ...tempEndArray]\n jobPaths: tempStartArray.concat(action.data).concat(tempEndArray),\n };\n }\n\n case actions.IS_FILTER_CHOSEN: {\n const findIndex: number = state.jobPaths.findIndex((jobpath) => jobpath.id === action.jobPath.id);\n\n if(findIndex > -1)\n {\n let tempJobPath: JobPathModel = {...action.jobPath};\n tempJobPath.isFilterChosen = action.isFilterChosen;\n const updatedJobPathsArray = [\n ...state.jobPaths.slice(0, findIndex),\n tempJobPath,\n ...state.jobPaths.slice(findIndex + 1),\n ];\n\n let filterChosenFalseCount: number = 0;\n updatedJobPathsArray.map((jobpath) => {\n if(!jobpath.isFilterChosen)\n {\n filterChosenFalseCount++;\n }\n });\n\n return {\n ...state,\n jobPaths: updatedJobPathsArray,\n shouldDisplayAllJobs: filterChosenFalseCount === updatedJobPathsArray.length ? true : false,\n }\n }\n\n return {\n ...state,\n jobPaths: state.jobPaths.map((jobPath) =>\n jobPath.id === action.jobPath.id\n ? { ...jobPath, isFilterChosen: action.isFilterChosen }\n : jobPath\n ),\n };\n }\n\n case actions.SET_SHOULD_DISPLAY_ALL_JOBS: {\n if(state.jobPaths && state.jobPaths.length > 0)\n {\n let filterChosenFalseCount: number = 0;\n state.jobPaths.map((jobpath) => {\n if(!jobpath.isFilterChosen)\n {\n filterChosenFalseCount++;\n }\n });\n\n return {\n ...state,\n shouldDisplayAllJobs: filterChosenFalseCount === state.jobPaths.length ? true : false,\n }\n\n } else {\n return state;\n }\n }\n\n case actions.ADD_JOB_TO_JOBPATH: {\n if(action.data)\n {\n // Checking if jobpathid is empty then we know its remainingjobpath -jobs.\n if(action.data.jobPathId && action.data.jobPathId.toString() === Guid.EMPTY && state.remainingJobPath && !isObjEmpty(state.remainingJobPath))\n {\n action.data = {\n ...action.data,\n jobPathId: state.remainingJobPath.id,\n };\n\n if(action.isShowingJobs || action.data && action.data.isPinnedJob !== undefined && action.data.isPinnedJob)\n {\n return {\n ...state,\n jobIdsAdded: [...state.jobIdsAdded, action.data && action.data.id],\n remainingJobPath: {\n ...state.remainingJobPath,\n jobs: [...state.remainingJobPath.jobs, action.data]\n }\n }\n }\n else \n {\n let cvrId: string = idToCVRID(action.data?.id);\n\n return {\n ...state,\n companyIdsAdded: [...state.companyIdsAdded, cvrId],\n remainingJobPath: {\n ...state.remainingJobPath,\n companyJobs: [...state.remainingJobPath.companyJobs, action.data]\n }\n }\n }\n } \n else \n {\n const jobpathIdx = state.jobPaths.findIndex((jobpath) => jobpath.id == action.data.jobPathId);\n \n if(jobpathIdx > -1)\n {\n if(action.isShowingJobs || action.data && action.data.isPinnedJob !== undefined && action.data.isPinnedJob)\n {\n return {\n ...state,\n jobIdsAdded: [...state.jobIdsAdded, action.data && action.data.id],\n jobPaths: [\n ...state.jobPaths.slice(0, jobpathIdx),\n {\n ...state.jobPaths[jobpathIdx],\n jobs: [...state.jobPaths[jobpathIdx].jobs, action.data]\n },\n ...state.jobPaths.slice(jobpathIdx + 1),\n ]\n }\n } else {\n\n let cvrId: string = idToCVRID(action.data?.id);\n return {\n ...state,\n companyIdsAdded: [...state.companyIdsAdded, cvrId],\n jobPaths: [\n ...state.jobPaths.slice(0, jobpathIdx),\n {\n ...state.jobPaths[jobpathIdx],\n companyJobs: [...state.jobPaths[jobpathIdx].companyJobs, action.data]\n },\n ...state.jobPaths.slice(jobpathIdx + 1),\n ]\n }\n }\n }\n else {\n return state;\n }\n }\n }\n }\n\n case actions.SET_JOBPATHS_TO_MYPLAN_JOBPATHS: {\n let jobPathList: JobPathModel[] = [...action.data];\n let jobIdsToFilter: string[] = [];\n let companyIdsToFilter: string[] = [];\n \n let jobAgreementsConfirmedHandled: JobModel[] = [];\n let companyAgreementsConfirmedHandled: JobModel[] = [];\n\n const remainingJobpathIndex: number = jobPathList.findIndex(jobpath => jobpath.name === 'Øvrige');\n let remainingJobPath: JobPathModel = {} as JobPathModel;\n if (remainingJobpathIndex > -1) {\n remainingJobPath = jobPathList[remainingJobpathIndex];\n if (!isEmptyOrUndefined(remainingJobPath))\n {\n const newestMyPlanRemainingJobPathIdx: number = action.newestMyPlanJobPaths?.findIndex(jp => jp.id === remainingJobPath.id);\n \n remainingJobPath.filteredJobs = [];\n remainingJobPath.isFilterChosen = false;\n \n if(remainingJobPath.pinnedJobs == null)\n remainingJobPath.pinnedJobs = [];\n \n if(remainingJobPath.companyJobs == null)\n remainingJobPath.companyJobs = [];\n \n if (remainingJobPath.jobs && remainingJobPath.jobs.length > 0)\n {\n let jobsNotConfirmedHandled: JobModel[] = [];\n \n\n remainingJobPath.jobs.map((job) => {\n if (action.isDraftMeeting && newestMyPlanRemainingJobPathIdx > -1)\n {\n const index: number = action.newestMyPlanJobPaths[newestMyPlanRemainingJobPathIdx]?.jobs?.findIndex(j => j.id === job.id);\n // index is greater than -1 if the job exists in the newestmyplanjobpath and then we add it, it doesnt matter if the job is confirmedhandled.\n if (index > -1 || !job?.confirmedHandled)\n jobsNotConfirmedHandled = [...jobsNotConfirmedHandled, job];\n else\n jobAgreementsConfirmedHandled = [...jobAgreementsConfirmedHandled, job];\n }\n else \n {\n if(job && !job.confirmedHandled)\n jobsNotConfirmedHandled = [...jobsNotConfirmedHandled, job];\n else\n jobAgreementsConfirmedHandled = [...jobAgreementsConfirmedHandled, job];\n }\n });\n \n remainingJobPath.jobs = [...jobsNotConfirmedHandled];\n }\n\n if (remainingJobPath.companyJobs && remainingJobPath.companyJobs.length > 0)\n {\n let companiesNotConfirmedHandled: JobModel[] = [];\n\n remainingJobPath.companyJobs.map((company) => {\n if (action.isDraftMeeting && newestMyPlanRemainingJobPathIdx > -1)\n {\n const index: number = action.newestMyPlanJobPaths[newestMyPlanRemainingJobPathIdx]?.companyJobs?.findIndex(c => c.id === company.id);\n // index is greater than -1 if the job exists in the newestmyplanjobpath and then we add it, it doesnt matter if the job is confirmedhandled.\n if (index > -1 || !company?.confirmedHandled)\n companiesNotConfirmedHandled = [...companiesNotConfirmedHandled, company];\n else\n companyAgreementsConfirmedHandled = [...companyAgreementsConfirmedHandled, company];\n }\n else \n {\n if(company && !company.confirmedHandled)\n companiesNotConfirmedHandled = [...companiesNotConfirmedHandled, company];\n else\n companyAgreementsConfirmedHandled = [...companyAgreementsConfirmedHandled, company];\n }\n });\n \n remainingJobPath.companyJobs = [...companiesNotConfirmedHandled];\n }\n }\n\n jobPathList = jobPathList.filter(jobpath => jobpath.id !== remainingJobPath.id);\n }\n\n for (let i: number = 0; i < jobPathList.length; i++) {\n const newestMyPlanJobPathIdx: number = action.newestMyPlanJobPaths?.findIndex(jp => jp.id === jobPathList[i]?.id);\n \n if (jobPathList[i] && isEmptyOrUndefined(jobPathList[i]?.type))\n jobPathList[i].type = JobPathType.NormalJobPath;\n\n jobPathList[i].isFilterChosen = true;\n jobPathList[i].filteredJobs = [];\n\n if(jobPathList[i].pinnedJobs == null)\n jobPathList[i].pinnedJobs = [];\n\n if(jobPathList[i].companyJobs == null)\n jobPathList[i].companyJobs = [];\n\n if (jobPathList[i].jobs && jobPathList[i].jobs.length > 0)\n jobIdsToFilter = jobPathList[i].jobs.map(j => j.id);\n\n if (jobPathList[i].companyJobs && jobPathList[i].companyJobs.length > 0) { \n jobPathList[i].companyJobs.map((company) => {\n if(company.id && company.id.substring(0, 1) === \"c\")\n companyIdsToFilter = [...companyIdsToFilter, company.id.substring(1, company.id.length)];\n else \n companyIdsToFilter = [...companyIdsToFilter, company.id];\n });\n }\n\n if (jobPathList[i].jobs && jobPathList[i].jobs.length > 0) {\n let jobsNotConfirmedHandled: JobModel[] = [];\n\n jobPathList[i].jobs.map((job) => {\n if (action.isDraftMeeting && newestMyPlanJobPathIdx > -1)\n {\n const index: number = action.newestMyPlanJobPaths[newestMyPlanJobPathIdx]?.jobs?.findIndex(j => j.id === job.id);\n // index is greater than -1 if the job exists in the newestmyplanjobpath and then we add it, it doesnt matter if the job is confirmedhandled.\n if (index > -1 || !job?.confirmedHandled)\n jobsNotConfirmedHandled = [...jobsNotConfirmedHandled, job];\n else\n jobAgreementsConfirmedHandled = [...jobAgreementsConfirmedHandled, job];\n }\n else \n {\n if(job && !job.confirmedHandled)\n jobsNotConfirmedHandled = [...jobsNotConfirmedHandled, job];\n else\n jobAgreementsConfirmedHandled = [...jobAgreementsConfirmedHandled, job];\n }\n });\n\n jobPathList[i].jobs = [...jobsNotConfirmedHandled];\n }\n\n if (jobPathList[i].companyJobs && jobPathList[i].companyJobs.length > 0) {\n let companiesNotConfirmedHandled: JobModel[] = [];\n\n jobPathList[i].companyJobs.map((company) => {\n if (action.isDraftMeeting && newestMyPlanJobPathIdx > -1)\n {\n const index: number = action.newestMyPlanJobPaths[newestMyPlanJobPathIdx]?.companyJobs?.findIndex(c => c.id === company.id);\n // index is greater than -1 if the job exists in the newestmyplanjobpath and then we add it, it doesnt matter if the job is confirmedhandled.\n if (index > -1 || !company?.confirmedHandled)\n companiesNotConfirmedHandled = [...companiesNotConfirmedHandled, company];\n else\n companyAgreementsConfirmedHandled = [...companyAgreementsConfirmedHandled, company];\n }\n else \n {\n if(company && !company.confirmedHandled)\n companiesNotConfirmedHandled = [...companiesNotConfirmedHandled, company];\n else\n companyAgreementsConfirmedHandled = [...companyAgreementsConfirmedHandled, company];\n }\n });\n\n jobPathList[i].companyJobs = [...companiesNotConfirmedHandled];\n }\n }\n \n if (remainingJobPath)\n remainingJobPath.type = JobPathType.NormalJobPath;\n\n return {\n ...state,\n jobPaths: jobPathList,\n remainingJobPath: remainingJobpathIndex > -1 ? remainingJobPath : emptyRemainingJobPathModel(),\n isMyPlanJobPathsAdded: true,\n jobPathToDisplay: {} as Guid,\n jobIdsAdded: jobIdsToFilter,\n companyIdsAdded: companyIdsToFilter,\n jobAgreementsConfirmedHandled: jobAgreementsConfirmedHandled,\n companyAgreementsConfirmedHandled: companyAgreementsConfirmedHandled,\n }\n\n }\n\n case actions.IS_MYPLAN_JOBPATHS_ADDED_TO_JOBPATHS: {\n return {\n ...state,\n isMyPlanJobPathsAdded: action.data,\n }\n }\n\n case actions.ADD_REMAINING_JOBPATH: {\n return {\n ...state,\n remainingJobPath: action.data,\n }\n }\n\n case actions.REMOVE_JOB_FROM_JOBPATH: {\n const jobPathIndex = state.jobPaths.findIndex(x => x.id === action.jobPathID);\n\n if (jobPathIndex > -1) {\n const jobIndexToRemove = state.jobPaths[jobPathIndex].jobs.findIndex(job => job.id === action.jobId);\n\n if (jobIndexToRemove > -1) \n {\n const job: JobModel = state.jobPaths[jobPathIndex]?.jobs[jobIndexToRemove];\n const updatedArray = [\n ...state.jobPaths[jobPathIndex].jobs.slice(0, jobIndexToRemove),\n ...state.jobPaths[jobPathIndex].jobs.slice(jobIndexToRemove + 1),\n ];\n\n let jobIdsAddedIndex: number = jobIdsIndexToRemove(action.jobId, state.jobIdsAdded);\n\n return {\n ...state,\n jobIdsAdded: jobIdsAddedIndex > -1 ? [...state.jobIdsAdded.slice(0, jobIdsAddedIndex), ...state.jobIdsAdded.slice(jobIdsAddedIndex + 1)] : [...state.jobIdsAdded],\n jobPaths: [\n ...state.jobPaths.slice(0, jobPathIndex),\n {\n ...state.jobPaths[jobPathIndex],\n jobs: updatedArray,\n filteredJobs: state.jobPaths[jobPathIndex].filteredJobs && state.jobPaths[jobPathIndex].filteredJobs.find(j => j.id === action.jobId) === undefined\n ? [...state.jobPaths[jobPathIndex].filteredJobs, job]\n : state.jobPaths[jobPathIndex].filteredJobs\n },\n ...state.jobPaths.slice(jobPathIndex + 1),\n ]\n }\n } \n else \n {\n const companyJobIndex: number = state.jobPaths[jobPathIndex].companyJobs.findIndex(x => x.id == action.jobId); \n if(companyJobIndex > -1)\n {\n const updatedCompanyArray = [\n ...state.jobPaths[jobPathIndex].companyJobs.slice(0, companyJobIndex),\n ...state.jobPaths[jobPathIndex].companyJobs.slice(companyJobIndex + 1),\n ];\n\n let companyIdsAddedIndex: number = companyIdsIndexToRemove(action.jobId, state.companyIdsAdded);\n\n return {\n ...state,\n companyIdsAdded: companyIdsAddedIndex > -1 ? [...state.companyIdsAdded.slice(0, companyIdsAddedIndex), ...state.companyIdsAdded.slice(companyIdsAddedIndex + 1)] : [...state.companyIdsAdded],\n jobPaths: [\n ...state.jobPaths.slice(0, jobPathIndex),\n {\n ...state.jobPaths[jobPathIndex],\n companyJobs: updatedCompanyArray,\n },\n ...state.jobPaths.slice(jobPathIndex + 1),\n ]\n }\n } \n else {\n return state;\n }\n }\n }\n else {\n // checking if its remaining jobpath\n if(action.jobPathID === state.remainingJobPath?.id)\n {\n const jobsIndexToRemove: number = state.remainingJobPath?.jobs?.findIndex(j => j.id === action.jobId); \n if(jobsIndexToRemove > -1)\n {\n let jobIdsAddedIndex: number = jobIdsIndexToRemove(action.jobId, state.jobIdsAdded);\n return {\n ...state,\n jobIdsAdded: jobIdsAddedIndex > -1 ? [...state.jobIdsAdded.slice(0, jobIdsAddedIndex), ...state.jobIdsAdded.slice(jobIdsAddedIndex + 1)] : [...state.jobIdsAdded],\n remainingJobPath: {\n ...state.remainingJobPath,\n jobs: [...state.remainingJobPath.jobs.slice(0, jobsIndexToRemove), ...state.remainingJobPath.jobs.slice(jobsIndexToRemove + 1)],\n }\n }\n }\n else \n {\n const companyIdxToRemove: number = state.remainingJobPath?.companyJobs?.findIndex(c => c.id === action.jobId);\n if(companyIdxToRemove > -1)\n {\n let companyIdsAddedIndex: number = companyIdsIndexToRemove(action.jobId, state.companyIdsAdded);\n\n return {\n ...state,\n companyIdsAdded: companyIdsAddedIndex > -1 ? [...state.companyIdsAdded.slice(0, companyIdsAddedIndex), ...state.companyIdsAdded.slice(companyIdsAddedIndex + 1)] : [...state.companyIdsAdded],\n remainingJobPath: {\n ...state.remainingJobPath,\n companyJobs: [...state.remainingJobPath.companyJobs.slice(0, companyIdxToRemove), ...state.remainingJobPath.companyJobs.slice(companyIdxToRemove + 1)],\n }\n }\n }\n else\n return state;\n }\n }\n else\n return state;\n }\n }\n\n case actions.REMOVE_JOB_FROM_FILTEREDJOBS: {\n const jobPathIndex = state.jobPaths.findIndex(x => x.id === action.data.jobPathId);\n\n\n if (jobPathIndex > -1) {\n const jobIndexToRemove = state.jobPaths[jobPathIndex].jobs.findIndex(job => job.id === action.data.id);\n\n if (jobIndexToRemove > -1) {\n const updatedArray = [\n ...state.jobPaths[jobPathIndex].filteredJobs.slice(0, jobIndexToRemove),\n ...state.jobPaths[jobPathIndex].filteredJobs.slice(jobIndexToRemove + 1),\n ];\n\n return {\n ...state,\n jobPaths: state.jobPaths.map((jobpath) =>\n jobpath.id === action.data.jobPathId\n ? { ...jobpath, filteredJobs: updatedArray }\n : jobpath\n )\n }\n\n }\n else {\n return state;\n }\n }\n else {\n return state;\n }\n }\n\n case actions.ADD_JOB_TO_FILTEREDJOBS: {\n const jobPathIndex = state.jobPaths.findIndex(x => x.id === action.data.jobPathId);\n\n if (jobPathIndex > -1) {\n return {\n ...state,\n jobPaths: state.jobPaths.map((jobpath) =>\n jobpath.id === action.data.jobPathId\n ? { ...jobpath, filteredJobs: [...jobpath.filteredJobs, action.data] }\n : jobpath\n )\n }\n }\n else {\n return state;\n }\n }\n\n case actions.SET_JOBPATH_TO_DISPLAY: {\n return {\n ...state,\n jobPathToDisplay: action.data,\n }\n }\n\n case actions.SET_OCCUPATIONS_FROM_QUALIFICATIONS: {\n return {\n ...state,\n jobPaths: state.jobPaths.map((jobpath) =>\n jobpath.id === action.jobpathID\n ? { ...jobpath, filteredOccupations: action.data }\n : jobpath\n )\n }\n }\n\n case actions.SET_SIMILAR_QUALIFICATIONS: {\n return {\n ...state,\n jobPaths: state.jobPaths.map((jobpath) =>\n jobpath.id === action.jobpathID\n ? { ...jobpath, similarQualifications: action.data }\n : jobpath)\n }\n }\n case actions.UPDATE_FILTERED_JOBS_JOBPATH: {\n const index: number = state.jobPaths?.findIndex(j => j?.id === action.jobPathID);\n if (index > -1)\n {\n return {\n ...state,\n jobPaths: [\n ...state.jobPaths?.slice(0, index),\n {\n ...state.jobPaths[index],\n filteredJobs: action.data,\n },\n ...state.jobPaths?.slice(index + 1),\n ]\n }\n }\n else \n return state;\n }\n\n case actions.CLEAR_JOBPATH_DATA: {\n return {\n ...state,\n jobPaths: [],\n jobPathsRemoved: [],\n jobPathToDisplay: {} as Guid,\n }\n }\n\n case actions.SET_JOBPATH_JOB_CONFIRMED_HANDLED: {\n const jobpathIndex = state.jobPaths.findIndex(j => j.id === action.jobpathID);\n\n if(jobpathIndex > -1)\n {\n if(action.isCompanyJob)\n {\n if(state.jobPaths[jobpathIndex] && state.jobPaths[jobpathIndex].companyJobs && state.jobPaths[jobpathIndex].companyJobs.length > 0)\n {\n const companyJobIndex = state.jobPaths[jobpathIndex].companyJobs.findIndex(company => company.id === action.jobID);\n if(companyJobIndex > -1)\n {\n return {\n ...state,\n jobPaths: [\n ...state.jobPaths.slice(0, jobpathIndex),\n {\n ...state.jobPaths[jobpathIndex],\n companyJobs: [\n ...state.jobPaths[jobpathIndex].companyJobs.slice(0, companyJobIndex),\n {\n ...state.jobPaths[jobpathIndex].companyJobs[companyJobIndex],\n confirmedHandled: state.jobPaths[jobpathIndex].companyJobs[companyJobIndex].confirmedHandled ? false : true\n },\n ...state.jobPaths[jobpathIndex].companyJobs.slice(companyJobIndex + 1),\n ]\n },\n ...state.jobPaths.slice(jobpathIndex + 1),\n ]\n }\n }\n else \n return state;\n }\n else\n return state;\n } \n else \n {\n if(state.jobPaths[jobpathIndex] && state.jobPaths[jobpathIndex].jobs && state.jobPaths[jobpathIndex].jobs.length > 0)\n {\n const jobIndex = state.jobPaths[jobpathIndex].jobs.findIndex(job => job.id === action.jobID);\n if(jobIndex > -1)\n {\n return {\n ...state,\n jobPaths: [\n ...state.jobPaths.slice(0, jobpathIndex),\n {\n ...state.jobPaths[jobpathIndex],\n jobs: [\n ...state.jobPaths[jobpathIndex].jobs.slice(0, jobIndex),\n {\n ...state.jobPaths[jobpathIndex].jobs[jobIndex],\n confirmedHandled: state.jobPaths[jobpathIndex].jobs[jobIndex].confirmedHandled ? false : true\n },\n ...state.jobPaths[jobpathIndex].jobs.slice(jobIndex + 1),\n ]\n },\n ...state.jobPaths.slice(jobpathIndex + 1),\n ]\n }\n }\n else \n return state;\n }\n else\n return state;\n }\n }\n else \n {\n // checking if its remainingjobpath\n if(action.jobpathID === state.remainingJobPath?.id)\n {\n if(action.isCompanyJob)\n {\n const companyJobIndex: number = state.remainingJobPath?.companyJobs?.findIndex(c => c.id === action.jobID);\n if(companyJobIndex > -1)\n {\n return {\n ...state,\n remainingJobPath: {\n ...state.remainingJobPath,\n companyJobs: [\n ...state.remainingJobPath.companyJobs.slice(0, companyJobIndex),\n {\n ...state.remainingJobPath.companyJobs[companyJobIndex],\n confirmedHandled: state.remainingJobPath.companyJobs[companyJobIndex].confirmedHandled ? false : true\n },\n ...state.remainingJobPath.companyJobs.slice(companyJobIndex + 1),\n ]\n }\n }\n } \n else \n return state;\n }\n else \n {\n const jobIndex: number = state.remainingJobPath?.jobs?.findIndex(j => j.id === action.jobID);\n if(jobIndex > -1)\n {\n return {\n ...state,\n remainingJobPath: {\n ...state.remainingJobPath,\n jobs: [\n ...state.remainingJobPath.jobs.slice(0, jobIndex),\n {\n ...state.remainingJobPath.jobs[jobIndex],\n confirmedHandled: state.remainingJobPath.jobs[jobIndex].confirmedHandled ? false : true\n },\n ...state.remainingJobPath.jobs.slice(jobIndex + 1),\n ]\n }\n }\n }\n else \n return state;\n }\n }\n else\n return state;\n }\n\n\n }\n\n case actions.SET_JOBPATHS: {\n let jobPathList = [...action.data];\n let remainingJobPath: JobPathModel = emptyRemainingJobPathModel();\n const index: number = jobPathList?.findIndex(j => j?.name?.toLowerCase() === 'øvrige');\n if (index > -1)\n {\n remainingJobPath = jobPathList[index];\n jobPathList = [...jobPathList?.slice(0, index), ...jobPathList?.slice(index + 1)];\n }\n\n return {\n ...state,\n jobPaths: jobPathList,\n remainingJobPath: remainingJobPath,\n }\n }\n\n case actions.CLEAR_ALL_JOBPATH_DATA: {\n return initialState;\n }\n\n case actions.SET_ALL_JOBPATHS_TO_FILTER_CHOSEN: {\n let tempJobPaths: JobPathModel[] = [];\n\n if(state.jobPaths && state.jobPaths.length > 0)\n {\n tempJobPaths = [...state.jobPaths]; \n\n tempJobPaths = tempJobPaths.map((jobpath) => {\n {jobpath.isFilterChosen = true; return jobpath;}\n });\n }\n\n return {\n ...state,\n jobPaths: tempJobPaths,\n }\n }\n\n case actions.ADD_PINNED_JOB_TO_PINNEDJOBS: {\n let job: JobModel = { ...action.data };\n job.isPinnedJob = true;\n\n // Checking if jobpathid is empty then we know its remainingjobpath -jobs.\n if(action.data && action.data.jobPathId && action.data.jobPathId.toString() === Guid.EMPTY && state.remainingJobPath && !isObjEmpty(state.remainingJobPath))\n {\n job = {\n ...job,\n jobPathId: state.remainingJobPath.id,\n };\n\n return {\n ...state,\n pinnedJobs: [...state.pinnedJobs, job],\n remainingJobPath: {\n ...state.remainingJobPath,\n pinnedJobs: [...state.remainingJobPath.pinnedJobs, job]\n }\n }\n }\n else \n {\n const findIndex = state.jobPaths.findIndex(x => x.id == job.jobPathId);\n if(findIndex > -1)\n {\n let tempJobPath = {...state.jobPaths[findIndex]};\n tempJobPath.pinnedJobs = [...tempJobPath.pinnedJobs, job];\n return {\n ...state,\n pinnedJobs: [...state.pinnedJobs, job],\n jobPaths: [\n ...state.jobPaths.slice(0, findIndex),\n tempJobPath,\n ...state.jobPaths.slice(findIndex + 1)\n ]\n }\n } \n else \n {\n return state;\n }\n }\n }\n\n case actions.ADD_JOBSEARCH_ENTRY_ID_TO_JOBPATHS: {\n const jobPathIndex: number = state.jobPaths?.findIndex(j => j?.id === action.jobPathID);\n if (jobPathIndex > -1)\n {\n return {\n ...state,\n jobPaths: [\n ...state.jobPaths?.slice(0, jobPathIndex),\n {\n ...state.jobPaths[jobPathIndex],\n jobSearchEntries: [...state.jobPaths[jobPathIndex]?.jobSearchEntries, action.jobLogToJob],\n },\n ...state.jobPaths?.slice(jobPathIndex + 1)\n ]\n }\n }\n else \n return state;\n }\n\n case actions.REMOVE_JOBSEARCH_ENTRY_ID_FROM_JOBPATH: {\n const jobPathIndex: number = state.jobPaths?.findIndex(j => j?.id === action.jobPathID);\n if (jobPathIndex > -1)\n {\n const jobSearchEntryIdx = state.jobPaths[jobPathIndex]?.jobSearchEntries?.findIndex(item => item?.jobSearchEntryId === action.jobSearchId);\n if (jobSearchEntryIdx > -1)\n {\n return {\n ...state,\n jobPaths: [\n ...state.jobPaths?.slice(0, jobPathIndex),\n {\n ...state.jobPaths[jobPathIndex],\n jobSearchEntries: [...state.jobPaths[jobPathIndex]?.jobSearchEntries?.slice(0, jobSearchEntryIdx), ...state.jobPaths[jobPathIndex]?.jobSearchEntries?.slice(jobSearchEntryIdx + 1)],\n },\n ...state.jobPaths?.slice(jobPathIndex + 1)\n ]\n }\n } \n else \n return state;\n }\n else \n return state;\n }\n \n case actions.REMOVE_PINNED_JOB_FROM_PINNEDJOBS: {\n const isRemainingJobPath: boolean = state.remainingJobPath.id == action.data?.jobPathId || action.data?.jobPathId?.toString() === Guid.EMPTY;\n if(isRemainingJobPath)\n {\n const indexToRemove = state.pinnedJobs.findIndex(job => equals(job.id, action.data.id));\n const remainingIndexToRemove = state.remainingJobPath.pinnedJobs.findIndex(x => x.id == action.data.id);\n if (indexToRemove > -1 && remainingIndexToRemove > -1) {\n\n const updatedJobs: JobModel[] = [\n ...state.pinnedJobs.slice(0, indexToRemove),\n ...state.pinnedJobs.slice(indexToRemove + 1),\n ];\n\n const updatedRemainingPinnedJobs = [\n ...state.remainingJobPath.pinnedJobs.slice(0, remainingIndexToRemove),\n ...state.remainingJobPath.pinnedJobs.slice(remainingIndexToRemove + 1),\n ];\n\n return {\n ...state,\n pinnedJobs: updatedJobs,\n remainingJobPath: {\n ...state.remainingJobPath,\n pinnedJobs: updatedRemainingPinnedJobs\n }\n }\n }\n else {\n return state;\n }\n }\n else \n {\n const jobPathIdx = state.jobPaths.findIndex(j => j.id == action.data.jobPathId);\n if(jobPathIdx > -1)\n {\n const indexToRemove = state.pinnedJobs.findIndex(job => equals(job.id, action.data.id));\n const pinnedJobsIdx = state.jobPaths[jobPathIdx].pinnedJobs.findIndex(j => j.id == action.data.id); \n if(indexToRemove > -1 && pinnedJobsIdx > -1)\n {\n let tempJobPath = {...state.jobPaths[jobPathIdx]};\n tempJobPath.pinnedJobs = [...tempJobPath.pinnedJobs.slice(0, pinnedJobsIdx), ...tempJobPath.pinnedJobs.slice(pinnedJobsIdx + 1)];\n\n const updatedJobs: JobModel[] = [\n ...state.pinnedJobs.slice(0, indexToRemove),\n ...state.pinnedJobs.slice(indexToRemove + 1),\n ];\n\n const updatedJobPathArr = [\n ...state.jobPaths.slice(0, jobPathIdx),\n tempJobPath,\n ...state.jobPaths.slice(jobPathIdx + 1),\n ];\n\n return {\n ...state,\n pinnedJobs: updatedJobs,\n jobPaths: updatedJobPathArr,\n }\n\n }\n else \n {\n return state;\n }\n }\n else \n {\n return state;\n }\n \n }\n }\n\n case actions.SET_JOBPATHS: {\n return {\n ...state,\n jobPaths: action.data,\n }\n }\n\n case actions.ADD_PINNED_JOBS_TO_MYPLAN: {\n if (action.data)\n {\n action.data.map((pinnedJob) => {\n // Checking if jobpathid is empty then we know its remainingjobpath -jobs.\n if (pinnedJob?.jobPathId?.toString() === Guid.EMPTY && !isObjEmpty(state.remainingJobPath))\n pinnedJob.jobPathId = state.remainingJobPath.id;\n \n pinnedJob.isPinnedJob = true;\n });\n }\n return {\n ...state,\n pinnedJobs: action.data,\n }\n }\n\n case actions.CLEAR_PINNED_JOBS: {\n return {\n ...state,\n pinnedJobs: [],\n }\n }\n\n case actions.SET_PINNED_JOBS_FROM_NEWEST_MYPLAN: {\n if(action.job)\n {\n if(action.job.jobPathId?.toString() === Guid.EMPTY || action.job.jobPathId === state.remainingJobPath?.id)\n {\n let tempJob = {...action.job};\n tempJob.isPinnedJob = true; \n\n let pinnedJobs = [...state.pinnedJobs];\n if(pinnedJobs && pinnedJobs.length > 0)\n {\n const pinnedJobIndex = pinnedJobs.findIndex(x => x.id === tempJob.id);\n \n if(pinnedJobIndex > -1)\n {\n pinnedJobs = [\n ...pinnedJobs.slice(0, pinnedJobIndex),\n ...pinnedJobs.slice(pinnedJobIndex + 1)\n ];\n \n } else {\n pinnedJobs = [...pinnedJobs, tempJob];\n }\n } else {\n pinnedJobs = [...pinnedJobs, tempJob];\n }\n\n return {\n ...state,\n remainingJobPath: {\n ...state.remainingJobPath,\n pinnedJobs: action.data,\n },\n pinnedJobs: pinnedJobs\n }\n }\n else \n {\n const index = state.jobPaths.findIndex(j => j.id == action.job.jobPathId);\n if(index > -1)\n {\n let tempJob = {...action.job};\n tempJob.isPinnedJob = true; \n \n let tempJobPath = {...state.jobPaths[index]};\n tempJobPath.pinnedJobs = action.data;\n \n const updatedArr = [\n ...state.jobPaths.slice(0, index),\n tempJobPath,\n ...state.jobPaths.slice(index + 1),\n ];\n \n let pinnedJobs = [...state.pinnedJobs];\n if(pinnedJobs && pinnedJobs.length > 0)\n {\n const pinnedJobIndex = pinnedJobs.findIndex(x => x.id === tempJob.id);\n \n if(pinnedJobIndex > -1)\n {\n pinnedJobs = [\n ...pinnedJobs.slice(0, pinnedJobIndex),\n ...pinnedJobs.slice(pinnedJobIndex + 1)\n ];\n \n } else {\n pinnedJobs = [...pinnedJobs, tempJob];\n }\n } else {\n pinnedJobs = [...pinnedJobs, tempJob];\n }\n \n return {\n ...state,\n jobPaths: updatedArr,\n pinnedJobs: pinnedJobs\n }\n } \n else \n return state;\n }\n }\n }\n\n default:\n return state;\n }\n};\n\nexport { reducer as JobPathListReducer };\n\n\nfunction idToCVRID(id: string): string {\n let cvrId: string = \"\";\n if(id)\n {\n cvrId = id;\n if(cvrId.substring(0, 1) === \"c\")\n {\n cvrId = cvrId.substring(1, id.length);\n }\n }\n return cvrId;\n}\n\nfunction companyIdsIndexToRemove(id: string, companyIdsAdded: string[]): number {\n let companyIdsAddedIndex: number = -1;\n if(id)\n {\n if(id.substring(0, 1) === \"c\")\n {\n companyIdsAddedIndex = companyIdsAdded?.findIndex(val => val === id.substring(1, id.length));\n } \n else \n {\n companyIdsAddedIndex = companyIdsAdded?.findIndex(val => val === id);\n }\n }\n\n return companyIdsAddedIndex\n}\n\nfunction jobIdsIndexToRemove(id: string, jobIdsAdded: string[]): number {\n let jobIdsAddedIndex: number = -1;\n \n if(id)\n jobIdsAddedIndex = jobIdsAdded?.findIndex(val => val === id);\n\n return jobIdsAddedIndex;\n}\n\n\n","import {\n JobsActionsDefaultState,\n JobsActionTypes,\n} from './types';\nimport * as actions from './types';\nimport JobModel from '../../models/JobModel';\nimport QualificationModel from '../../models/QualificationModel';\nimport OccupationOpportunityModel from '../../models/OccupationOpportunityModel';\nimport { RegionModel } from '../../models/RegionModel';\nimport IndustryModel from '../../models/IndustryModel';\nimport { JobDisplayModel } from '../../models/JobDisplayModel';\nimport { MunicipalityModel } from '../../models/MunicipalityModel';\nimport { Guid } from 'guid-typescript';\n\nexport const JobReducerDefaultState: JobsActionsDefaultState = {\n searchedJobs: [] as JobModel[],\n allJobs: [] as JobModel[],\n filteredAllJobs: [] as JobModel[],\n filteredJobs: [] as JobModel[],\n qualifications: [] as QualificationModel[],\n occupations: [] as OccupationOpportunityModel[],\n industries: [] as IndustryModel[],\n regions: [] as RegionModel[],\n municipality: [] as MunicipalityModel[],\n isDoneFetchingFilteredJobs: false,\n jobToDisplay: {} as JobDisplayModel,\n jobsToDisplay: [] as JobDisplayModel[],\n isFetching: false as boolean,\n fetchSingleJobsError: false,\n displayLoader: false,\n};\n\nconst reducer = (\n state = JobReducerDefaultState,\n action: JobsActionTypes\n): JobsActionsDefaultState => {\n switch (action.type) {\n case actions.SET_JOBS: {\n return {\n ...state,\n searchedJobs: [...state.searchedJobs, action.data],\n };\n }\n case actions.UPDATE_JOB_TITLE: {\n return {\n ...state,\n searchedJobs: state.searchedJobs.map((jobFound) =>\n jobFound.id === action.jobIdToUpdate.toString()\n ? { ...jobFound, title: action.title }\n : jobFound\n ),\n };\n }\n case actions.FETCH_ALL_JOBS_SUCCESS: {\n return {\n ...state,\n allJobs: action.data,\n // filteredAllJobs: action.data,\n };\n }\n\n case actions.SET_FILTERED_ALL_JOBS: {\n return {\n ...state,\n filteredAllJobs: action.data,\n }\n }\n\n case actions.FETCH_ALL_FILTERED_JOBS_SUCCESS: {\n let newArray: JobModel[] = [];\n for (let i = 0; i < action.data.length; i++) {\n if (action.data[i].isFilterChosen) {\n newArray = newArray.concat(action.data[i].filteredJobs);\n }\n }\n return {\n ...state,\n filteredJobs: newArray,\n }\n\n }\n\n case actions.GET_FILTERED_JOBS_WITHOUT_JOBPAHTS: {\n return {\n ...state,\n filteredJobs: action.data,\n }\n }\n\n case actions.FETCH_ALL_QUALIFICATIONS_SUCCESS: {\n return {\n ...state,\n qualifications: action.data\n }\n }\n\n case actions.FETCH_ALL_OCCUPATIONS_SUCCESS: {\n return {\n ...state,\n occupations: action.data,\n }\n }\n case actions.FETCH_ALL_INDUSTRIES_SUCCESS: {\n return {\n ...state,\n industries: action.data\n }\n }\n\n case actions.FETCH_ALL_MUNICIPALITIES_SUCCESS: {\n return {\n ...state,\n municipality: action.data,\n }\n }\n\n case actions.REMOVE_JOB_FROM_STATE: {\n if(action.data)\n {\n // Checking if jobpathid is empty then we know it's filteredalljobs with remainingjobpath.\n if(action.data.jobPathId && action.data.jobPathId.toString() === Guid.EMPTY && state.filteredAllJobs)\n {\n const indexToRemove = state.filteredAllJobs.findIndex(j => j.id === action.data.id);\n\n if(indexToRemove > -1)\n { \n const updatedFilteredAllJobsArr: JobModel[] = [\n ...state.filteredAllJobs.slice(0, indexToRemove),\n ...state.filteredAllJobs.slice(indexToRemove + 1)\n ];\n\n return {\n ...state,\n filteredAllJobs: updatedFilteredAllJobsArr,\n }\n }\n else \n return state;\n }\n else \n {\n const indexToRemove: number = state.filteredJobs?.findIndex(x => x.id === action.data.id);\n\n if (indexToRemove > -1) {\n const updatedJobArr: JobModel[] = [\n ...state.filteredJobs.slice(0, indexToRemove),\n ...state.filteredJobs.slice(indexToRemove + 1)\n ];\n \n return {\n ...state,\n filteredJobs: updatedJobArr,\n }\n }\n else {\n return state;\n }\n }\n }\n }\n\n case actions.IS_DONE_FETCHING_FILTERED_JOBS: {\n return {\n ...state,\n isDoneFetchingFilteredJobs: action.data,\n }\n }\n\n case actions.SET_JOBMODEL_TO_DISPLAY: {\n return {\n ...state,\n jobToDisplay: action.data\n }\n }\n\n case actions.SET_SINGLEJOBS_TO_DISPLAY: {\n return {\n ...state,\n jobsToDisplay: action.data,\n }\n }\n case actions.IS_FETCHING_SINGLE_JOB_OR_COMPANY_OCCUPATIONS: {\n return {\n ...state,\n isFetching: action.isFetching,\n }\n }\n\n case actions.IS_FETCHING_FILTERED_JOBS: {\n return {\n ...state,\n isFetching: action.isFetching,\n }\n }\n \n case actions.SET_FETCH_SINGLE_JOB_ERROR: {\n return {\n ...state,\n fetchSingleJobsError: action.data,\n }\n }\n\n case actions.CLEAR_ALL_JOB_DATA: {\n return {\n ...state,\n searchedJobs: [] as JobModel[],\n filteredAllJobs: [] as JobModel[],\n filteredJobs: [] as JobModel[],\n isDoneFetchingFilteredJobs: false,\n jobToDisplay: {} as JobDisplayModel,\n jobsToDisplay: [] as JobDisplayModel[],\n isFetching: false,\n fetchSingleJobsError: false,\n };\n }\n\n case actions.CLEAR_JOBMODEL_TO_DISPLAY: {\n return {\n ...state,\n jobToDisplay: {} as JobDisplayModel,\n }\n }\n\n case actions.SET_DISPLAY_LOADER: {\n return {\n ...state,\n displayLoader: action.data,\n }\n }\n\n default:\n return state;\n }\n};\n\nfunction filterJobsFromDropdownValue(chosenValue: string) {\n let jobs: JobModel[] = [];\n return jobs;\n}\n\nexport { reducer as JobsReducer };\n","export const UPDATE_LANGUAGE = 'UPDATE_LANGUAGE';\n\ninterface UpdateLanguageAction {\n type: typeof UPDATE_LANGUAGE;\n data: string;\n}\n\nexport interface LanguageDefaultState {\n language: string;\n}\n\nexport type LanguageActionTypes = UpdateLanguageAction;\n","import { UPDATE_LANGUAGE, LanguageDefaultState, LanguageActionTypes } from './types';\nimport { Reducer } from 'react';\nimport LanguageModel from '../../models/LanguageModel';\n\nexport const initialState: LanguageDefaultState = {\n language: \"da\",\n};\n\nconst reducer = (\n state = initialState,\n action: LanguageActionTypes\n) => {\n switch (action.type) {\n case UPDATE_LANGUAGE:\n return {\n language: action.data,\n };\n default:\n return state;\n }\n};\n\nexport { reducer as LanguageReducer };\n","import { Guid } from 'guid-typescript';\nimport AgreementModel from './AgreementModel';\n\nexport default class TextAgreementModel extends AgreementModel {\n id: number;\n task: string;\n done: boolean;\n agreementCategory: string;\n agreementPageCategory: string;\n\n constructor(\n id: number,\n task: string,\n category: string,\n pageCategory: string,\n createdDate: Date,\n confirmedDate: Date,\n deadline: Date,\n done: boolean,\n ) {\n super(createdDate, confirmedDate, deadline, done);\n this.id = id;\n this.task = task;\n this.agreementCategory = category;\n this.agreementPageCategory = pageCategory;\n this.done = done;\n }\n}\n","export default abstract class AgreementModel {\n createdDate: Date;\n confirmedDate: Date;\n deadline: Date;\n done: boolean;\n\n constructor(timestamp: Date, confirmedDate: Date, deadline: Date, done: boolean) {\n this.createdDate = timestamp;\n this.confirmedDate = confirmedDate;\n this.deadline = deadline;\n this.done = done;\n }\n}\n","import { AgreementActionTypes, AgreementActionsDefaultState } from './types';\nimport * as actions from './types';\nimport TextAgreementModel from '../../models/Agreement/TextAgreementModel';\nimport QualificationAgreementModel from '../../models/Agreement/QualificationAgreementModel';\nimport { getUnixTime } from '../../helpers/DateHelper';\n\nexport const AgreementReducerDefaultState: AgreementActionsDefaultState = {\n textAgreements: [] as TextAgreementModel[],\n tempTextAgreements: [] as TextAgreementModel[],\n agreementIdExpandList: [] as number[],\n draftTextAgreement: {} as TextAgreementModel,\n isTempAgreementInTempList: false as boolean,\n qualificationAgreements: [] as QualificationAgreementModel[],\n savedRemark: '',\n addedQualificationAgreements: [],\n newestMyPlanQualificationAgreements: [],\n};\n\nconst reducer = (\n state = AgreementReducerDefaultState,\n action: AgreementActionTypes\n): AgreementActionsDefaultState => {\n switch (action.type) {\n case actions.ADD_AGREEMENT_ID_ELEMENT_TO_EXPAND: {\n return {\n ...state,\n agreementIdExpandList: [...state.agreementIdExpandList, action.data],\n };\n }\n case actions.REMOVE_AGREEMENT_ID_ELEMENT_TO_EXPAND: {\n const idToBeRemoved = state.agreementIdExpandList.findIndex(\n (x) => x === action.data\n );\n\n if (idToBeRemoved > -1) {\n const updatedExpandedIdList = [\n ...state.agreementIdExpandList.slice(0, idToBeRemoved),\n ...state.agreementIdExpandList.slice(idToBeRemoved + 1),\n ];\n return {\n ...state,\n agreementIdExpandList: updatedExpandedIdList,\n };\n } else {\n return {\n ...state,\n };\n }\n }\n case actions.ADD_AGREEMENT: {\n if (action.isTemp) {\n let isCreatedInTemp = state.tempTextAgreements.find(\n (agreement) =>\n agreement.agreementCategory === action.data.agreementCategory &&\n agreement.agreementPageCategory ===\n action.data.agreementPageCategory\n );\n if (!isCreatedInTemp) {\n return {\n ...state,\n tempTextAgreements: [...state.tempTextAgreements, action.data],\n };\n } else {\n return state;\n }\n } else {\n return {\n ...state,\n textAgreements: [...state.textAgreements, action.data],\n };\n }\n }\n\n case actions.DELETE_AGREEMENT: {\n if (action.isTemp) {\n const findTempIndexToRemove = state.tempTextAgreements.findIndex(\n (x) =>\n x.agreementCategory === action.data.agreementCategory &&\n x.agreementPageCategory === action.data.agreementPageCategory\n );\n\n const newTempArray = [\n ...state.tempTextAgreements.slice(0, findTempIndexToRemove),\n ...state.tempTextAgreements.slice(findTempIndexToRemove + 1),\n ];\n\n return {\n ...state,\n tempTextAgreements: newTempArray,\n };\n } else {\n return {\n ...state,\n textAgreements: state.textAgreements.filter(\n (agreement) => agreement.id !== action.data.id\n ),\n };\n }\n }\n\n case actions.UPDATE_AGREEMENT: {\n if (action.isTemp) {\n const indexToUpdateTemp = state.tempTextAgreements.findIndex(\n (x) =>\n x.agreementCategory === action.data.agreementCategory &&\n x.agreementPageCategory === action.data.agreementPageCategory\n );\n \n if(indexToUpdateTemp > -1)\n {\n const tempStartArray = state.tempTextAgreements.slice(0, indexToUpdateTemp);\n const tempEndArray = state.tempTextAgreements.slice(indexToUpdateTemp + 1);\n return {\n ...state,\n tempTextAgreements: tempStartArray\n .concat(action.data)\n .concat(tempEndArray),\n draftTextAgreement: action.data,\n };\n }\n else \n {\n return {\n ...state,\n tempTextAgreements: [...state.tempTextAgreements, action.data],\n draftTextAgreement: action.data,\n }\n }\n \n } else {\n const indexToUpdate = state.textAgreements.findIndex(\n (x) => x.id === action.data.id\n );\n \n if(indexToUpdate > -1)\n {\n //Elements before the element we want to update\n const startArray = state.textAgreements.slice(0, indexToUpdate);\n //Elements after the element we want to update\n const endArray = state.textAgreements.slice(indexToUpdate + 1);\n return {\n ...state,\n textAgreements: startArray.concat(action.data).concat(endArray),\n draftTextAgreement: {} as TextAgreementModel,\n };\n } else {\n return state;\n }\n }\n }\n\n case actions.CLEAR_DRAFT_AGREEMENT_TEMP: {\n return {\n ...state,\n draftTextAgreement: {} as TextAgreementModel,\n };\n }\n\n case actions.IS_AGREEMENT_IN_TEMP_ARRAY: {\n let agreement: TextAgreementModel = {} as TextAgreementModel;\n state.tempTextAgreements &&\n state.tempTextAgreements.map((tempAgreement) => {\n if (\n tempAgreement.agreementCategory === action.agreementCategory &&\n tempAgreement.agreementPageCategory === action.agreementPageCategory\n ) {\n agreement = tempAgreement;\n }\n });\n if (state.tempTextAgreements.includes(agreement)) {\n return {\n ...state,\n isTempAgreementInTempList: true,\n draftTextAgreement: agreement,\n };\n } else {\n let agreement: TextAgreementModel = new TextAgreementModel(\n getUnixTime(),\n '',\n action.agreementCategory,\n action.agreementPageCategory,\n new Date('dd-mm-yyyy'),\n new Date('dd-mm-yyyy'),\n new Date('dd-mm-yyyy'),\n false,\n );\n return {\n ...state,\n isTempAgreementInTempList: false,\n draftTextAgreement: agreement,\n tempTextAgreements: [...state.tempTextAgreements, agreement],\n };\n }\n }\n\n case actions.SET_NEWEST_MY_PLAN_TEXT_AGREEMENTS: {\n return {\n ...state,\n textAgreements: action.data,\n }\n }\n\n case actions.SET_QUALIFICATION_AGREEMENTS: {\n return {\n ...state,\n qualificationAgreements: action.data,\n }\n }\n\n case actions.ADD_QUALIFICATION_AGREEMENT: {\n if(state.qualificationAgreements?.findIndex(q => q.id === action.data?.id) === -1)\n {\n return {\n ...state,\n qualificationAgreements: [...state.qualificationAgreements, action.data],\n }\n }\n else \n return state;\n }\n\n case actions.REMOVE_QUALIFICATION_AGREEMENT: {\n const qualIdx: number = state.qualificationAgreements?.findIndex(q => q.id === action.qualificationId);\n return {\n ...state,\n qualificationAgreements: qualIdx > -1 ? [...state.qualificationAgreements.slice(0, qualIdx), ...state.qualificationAgreements.slice(qualIdx + 1)] : state.qualificationAgreements,\n }\n }\n\n case actions.REMOVE_NEWEST_MYPLAN_QUALIFICATION_AGREEMENT: {\n const newestQualIdx: number = state.newestMyPlanQualificationAgreements?.findIndex(q => q.id === action.qualificationId);\n return {\n ...state,\n newestMyPlanQualificationAgreements: newestQualIdx > -1 ? [...state.newestMyPlanQualificationAgreements.slice(0, newestQualIdx), ...state.newestMyPlanQualificationAgreements.slice(newestQualIdx + 1)] : state.newestMyPlanQualificationAgreements,\n }\n }\n\n case actions.UPDATE_QUALIFICATION_AGREEMENT: {\n const updatedArray = [\n ...state.qualificationAgreements.slice(0, action.index),\n action.qualificationAgreement,\n ...state.qualificationAgreements.slice(action.index + 1),\n ];\n\n return {\n ...state,\n qualificationAgreements: updatedArray,\n }\n }\n\n case actions.CLEAR_QUALIFICATION_AGREEMENTS: {\n return {\n ...state,\n qualificationAgreements: [],\n newestMyPlanQualificationAgreements: [],\n }\n }\n\n case actions.CLEAR_TEXT_AGREEMENTS: {\n return {\n ...state,\n textAgreements: [],\n }\n }\n case actions.SET_ALL_QUALIFICATIONSAGREEMENTS_TO_DONE: {\n let tempQualiList = [...state.qualificationAgreements];\n\n tempQualiList.map((qual) => {\n qual.done = true;\n });\n\n return {\n ...state,\n qualificationAgreements: tempQualiList,\n }\n\n }\n\n case actions.SET_ALL_QUALIFICATIONSAGREEMENTS_TO_NOT_DONE: {\n let tempQualiList = [...state.qualificationAgreements];\n\n tempQualiList.map((qual) => {\n qual.done = false;\n });\n\n return {\n ...state,\n qualificationAgreements: tempQualiList,\n }\n\n }\n\n case actions.SET_SAVED_REMARK: {\n return {\n ...state,\n savedRemark: action.data,\n }\n }\n\n case actions.DELETE_REMARKS: {\n return {\n ...state,\n savedRemark: '',\n }\n }\n\n case actions.SET_DRAFT_AGREEMENT: {\n return {\n ...state,\n draftTextAgreement: action.data,\n }\n }\n\n case actions.UPDATE_DRAFT_AGREEMENT_TEXT: {\n return {\n ...state,\n draftTextAgreement: {\n ...state.draftTextAgreement, task: action.data,\n }\n }\n }\n\n case actions.CLEAR_ALL_AGREEMENT_DATA: {\n return AgreementReducerDefaultState;\n }\n\n case actions.SET_QUALIFICATION_AGREEMENTS_ADDED_FROM_NEWEST_MYPLAN: {\n return {\n ...state,\n addedQualificationAgreements: action.data,\n }\n }\n\n case actions.CLEAR_QUALIFICATION_AGREEMENTS_ADDED_FROM_NEWEST_MYPLAN: {\n return {\n ...state,\n addedQualificationAgreements: [],\n }\n }\n\n case actions.SET_NEWEST_MY_PLAN_QUALIFICATION_AGREEMENTS: {\n return {\n ...state,\n newestMyPlanQualificationAgreements: action.data,\n }\n }\n\n default: {\n return state;\n }\n }\n};\n\nexport { reducer as AgreementReducer };\n","import { AuthDefaultState, AuthActionType } from \"./types\";\nimport * as actions from './types';\n\nexport const initialState: AuthDefaultState = {\n initializing: false,\n initialized: false,\n idToken: null,\n state : false,\n account: null,\n isAuthenticated: false,\n};\n\nconst reducer = (\n state = initialState,\n action: AuthActionType): AuthDefaultState => {\n switch (action.type) {\n case actions.Initializing:\n return {\n ...state,\n initializing: true,\n initialized: false,\n };\n case actions.Initialized:\n return {\n ...state,\n initializing: false,\n initialized: true,\n };\n case actions.AcquiredIdTokenSuccess:\n return {\n ...state,\n idToken: action.payload,\n };\n case actions.LoginSuccess:\n return {\n ...state,\n account: action.payload,\n };\n case actions.LoginError:\n case actions.AcquiredIdTokenError:\n case actions.LogoutSuccess:\n return { ...state, idToken: null, account: null };\n case actions.AuthenticatedStateChanged:\n return {\n ...state,\n state: action.payload,\n };\n\n case actions.IS_AUTHENTICATED: {\n return {\n ...state,\n isAuthenticated: action.data,\n }\n }\n\n default:\n return state;\n }\n };\n\n\n\nexport { reducer as AuthReducer }\n\n","import * as actions from \"./types\";\n\n\nconst PreparationDefaultState: actions.DefaultPreparationActionState = {\n viewToDisplay: '',\n filteredJobsLogsAndJobpath: [],\n jobLogsWithoutJobPathID: [],\n isLoadingDonutChart: false,\n isLoadingStackedBarChart: false,\n displayLoader: false,\n jobsInMapWithJobPaths: [],\n jobsInMapWithoutJobPaths: [],\n}\n\nconst reducer = (state = PreparationDefaultState, action: actions.PreparationActionTypes): actions.DefaultPreparationActionState => {\n switch (action.type) {\n case actions.SET_VIEW_FROM_LOWER_HEADER: {\n return {\n ...state,\n viewToDisplay: action.data,\n }\n }\n\n case actions.SET_FILTERED_JOBSLOGS_FROM_JOBPATH: {\n return {\n ...state,\n filteredJobsLogsAndJobpath: action.data,\n }\n }\n\n case actions.SET_JOBLOGS_WITHOUT_JOBPATH_ID: {\n return {\n ...state,\n jobLogsWithoutJobPathID: action.data,\n }\n }\n\n case actions.SET_IS_LOADING_DONUT_CHART: {\n return {\n ...state,\n isLoadingDonutChart: action.isLoading,\n }\n }\n\n case actions.SET_IS_LOADING_STACKED_BAR_CHART: {\n return {\n ...state,\n isLoadingStackedBarChart: action.isLoading,\n }\n }\n\n case actions.SET_LOADER: {\n return {\n ...state,\n displayLoader: action.isLoading,\n }\n }\n\n case actions.SET_JOBS_WITH_JOBPATH_OVERVIEW: {\n return {\n ...state,\n jobsInMapWithJobPaths: action.data,\n }\n }\n\n case actions.SET_JOBS_WITHOUT_JOBPATH_OVERVIEW: {\n return {\n ...state,\n jobsInMapWithoutJobPaths: action.data,\n }\n }\n\n\n case actions.CLEAR_ALL_PREPARATION_DATA: {\n return PreparationDefaultState;\n }\n\n default:\n return state;\n }\n}\n\nexport { reducer as PreparationReducer }","import * as actions from \"./types\";\nimport QualificationModel from \"../../models/QualificationModel\";\n\n\nexport const SearchDefaultState: actions.SearchDefaultState = {\n loading: false as boolean,\n results: [] as QualificationModel[],\n value: '' as string\n};\n\nconst reducer = (\n state = SearchDefaultState,\n action: actions.SearchActionTypes \n\n): actions.SearchDefaultState => {\n switch (action.type) {\n case actions.CLEAN_QUERY: {\n return {\n ...state,\n loading: false,\n results: [] as QualificationModel[],\n value: ''\n }\n }\n \n case actions.START_SEARCH: {\n return {\n ...state,\n loading: action.loading,\n value: action.value\n }\n }\n\n case actions.FINISH_SEARCH: {\n return {\n ...state,\n loading: action.loading,\n results: action.result,\n }\n }\n\n case actions.UPDATE_SELECTION: {\n return {\n ...state,\n value: action.value\n }\n }\n\n case actions.CLEAR_ALL_SEARCH_DATA: {\n return SearchDefaultState;\n }\n \n default:\n return state;\n }\n}\n\nexport {reducer as SearchReducer};","import * as actions from './types';\n\n\nexport const initialState: actions.PrintDefaultState = {\n shouldPrint: false,\n elementToPrint: ''\n};\n\nconst reducer = (\n state = initialState,\n action: actions.PrintActionTypes\n): actions.PrintDefaultState => {\n switch (action.type) {\n case actions.SHOULD_PRINT: {\n return {\n ...state,\n shouldPrint: action.data,\n }\n }\n\n case actions.SET_ELEMENT_TO_PRINT: {\n return {\n ...state,\n elementToPrint: action.data,\n }\n }\n\n case actions.CLEAR_PRINTED_ELEMENT: {\n return {\n ...state,\n elementToPrint: '',\n }\n }\n\n case actions.CLEAR_ALL_PRINT_DATA: {\n return initialState;\n }\n\n default:\n return state;\n }\n}\n\nexport { reducer as PrintReducer };\n\n","import { Guid } from \"guid-typescript\";\nimport InputModel from \"../models/Template/InputModel\";\n\nexport const templateInputIndexToRemove = (list: any[], inputID: Guid, valueToRemove: string): number => {\n let indexToRemove: number = -1; \n let input: InputModel | undefined = list.find(x => x.id === inputID);\n if(input !== undefined && input && input.value)\n {\n indexToRemove = input.value.findIndex((p: string) => p === valueToRemove);\n }\n\n return indexToRemove;\n}","import { ValueType } from '../../models/Template/InputModel';\nimport JobMatchTemplateModel from '../../models/Template/JobMatchTemplateModel';\nimport * as actions from './types';\nimport { templateInputIndexToRemove } from '../../helpers/TemplateHelper';\n\n\nexport const initialState: actions.TemplateDefaultState = {\n templates: {} as JobMatchTemplateModel,\n isTemplatedSaved: false,\n isSaving: false,\n hasBeenScreened: true,\n};\n\nconst reducer = (\n state = initialState,\n action: actions.TemplateActionTypes\n): actions.TemplateDefaultState => {\n switch (action.type) { \n case actions.REMOVE_VALUE_ON_TEMPLATE: {\n /* \n NOTE: Right now only values from arrays gets removed!\n */\n if(state.templates)\n {\n let indexToRemove: number = -1; \n switch(action.template.id)\n {\n case state.templates.screeningDataGroup && state.templates.screeningDataGroup.id: \n if(state.templates.screeningDataGroup.inputs)\n {\n if(action.data.valueType === ValueType.tag)\n {\n // lookup index to remove\n indexToRemove = templateInputIndexToRemove(state.templates.screeningDataGroup.inputs, action.data.id, action.valueToRemove);\n }\n\n return {\n ...state,\n templates: {...state.templates, screeningDataGroup: {\n id: action.template.id,\n title: action.template.title,\n inputs: state.templates.screeningDataGroup.inputs.map(screening => \n screening.id === action.data.id \n ? {...screening, value: indexToRemove > -1 ? [...screening.value.slice(0, indexToRemove), ...screening.value.slice(indexToRemove + 1)] : ''}\n : screening\n )}\n }\n }\n }\n else {\n return state;\n }\n\n case state.templates.guidanceDataGroup && state.templates.guidanceDataGroup.id: \n if(state.templates.guidanceDataGroup.inputs)\n {\n if(action.data.valueType === ValueType.tag)\n {\n // lookup index to remove\n indexToRemove = templateInputIndexToRemove(state.templates.guidanceDataGroup.inputs, action.data.id, action.valueToRemove);\n }\n\n return {\n ...state,\n templates: {...state.templates, guidanceDataGroup: {\n id: action.template.id,\n title: action.template.title,\n inputs: state.templates.guidanceDataGroup.inputs.map(guidance => \n guidance.id === action.data.id \n ? {...guidance, value: indexToRemove > -1 ? [...guidance.value.slice(0, indexToRemove), ...guidance.value.slice(indexToRemove + 1)] : ''}\n : guidance\n )}\n }\n }\n }\n else {\n return state;\n }\n\n default: \n break;\n } \n } else {\n return state;\n }\n }\n\n case actions.SET_VALUE_ON_TEMPLATE: {\n if(state.templates)\n {\n switch(action.template.id)\n {\n case state.templates.screeningDataGroup && state.templates.screeningDataGroup.id: \n if(state.templates.screeningDataGroup.inputs)\n {\n return {\n ...state,\n templates: {...state.templates, screeningDataGroup: {\n id: action.template.id,\n title: action.template.title,\n inputs: state.templates.screeningDataGroup.inputs.map(screening => \n screening.id === action.data.id \n ? {...screening, value: action.data.valueType === ValueType.tag\n ? [...screening.value, action.data.value] : action.data.value }\n : screening\n )}\n },\n }\n }\n else {\n return state;\n }\n\n case state.templates.guidanceDataGroup && state.templates.guidanceDataGroup.id: \n if(state.templates.guidanceDataGroup.inputs)\n {\n return {\n ...state,\n templates: {...state.templates, guidanceDataGroup: {\n id: action.template.id,\n title: action.template.title,\n inputs: state.templates.guidanceDataGroup.inputs.map(guidance => \n guidance.id === action.data.id \n ? {...guidance, value: action.data.valueType === ValueType.tag\n ? [...guidance.value, action.data.value] : action.data.value }\n : guidance\n )}\n }\n }\n }\n else {\n return state;\n }\n\n default: \n break;\n }\n }\n }\n\n case actions.UPDATE_TEMPLATE_VALUE: {\n if(state.templates)\n {\n switch(action.template.id)\n {\n case state.templates.screeningDataGroup && state.templates.screeningDataGroup.id: \n if(state.templates.screeningDataGroup.inputs)\n {\n return {\n ...state,\n templates: {...state.templates, screeningDataGroup: {\n id: action.template.id,\n title: action.template.title,\n inputs: state.templates.screeningDataGroup.inputs.map(screening => \n screening.id === action.data.id \n ? {...screening, value: action.data.valueType === ValueType.tag\n ? [...screening.value.slice(0, 0), action.data.value, ...screening.value.slice(0 + 1)] : action.data.value }\n : screening\n )}\n }\n }\n }\n else {\n return state;\n }\n\n case state.templates.guidanceDataGroup && state.templates.guidanceDataGroup.id: \n if(state.templates.guidanceDataGroup.inputs)\n {\n return {\n ...state,\n templates: {...state.templates, guidanceDataGroup: {\n id: action.template.id,\n title: action.template.title,\n inputs: state.templates.guidanceDataGroup.inputs.map(guidance => \n guidance.id === action.data.id \n ? {...guidance, value: action.data.valueType === ValueType.tag\n ? [...guidance.value.slice(0, 0), action.data.value, ...guidance.value.slice(0 + 1)] : action.data.value }\n : guidance\n )}\n }\n }\n }\n else {\n return state;\n }\n\n default: \n break;\n }\n }\n }\n\n case actions.IS_TEMPLATE_SAVED: {\n return {\n ...state,\n isTemplatedSaved: action.data as boolean,\n }\n }\n\n case actions.BEGIN_SAVE_TEMPLATE: {\n return {\n ...state,\n isSaving: action.data,\n }\n }\n\n case actions.CLEAR_ALL_TEMPLATE_DATA: {\n return initialState;\n }\n\n case actions.SET_JOBMATCH_TEMPLATES: {\n return {\n ...state,\n templates: action.data,\n }\n }\n\n case actions.SET_HAS_BEEN_SCREENED: {\n let hasBeenScreened: boolean = true; \n if(action.screening.inputs && action.screening.inputs.length > 0)\n {\n let count: number = action.screening.inputs.filter((val) => val.value == [] || val.value == '' || val.value == 0).length;\n if(count == action.screening.inputs.length)\n {\n hasBeenScreened = false;\n }\n }\n\n return {\n ...state,\n hasBeenScreened: hasBeenScreened,\n }\n }\n\n case actions.CLEAR_GUIDANCE_VALUES_ON_DATA_FIELDS: {\n if(state.templates && state.templates.guidanceDataGroup && state.templates.guidanceDataGroup.inputs && state.templates.guidanceDataGroup.inputs.length > 0)\n {\n return {\n ...state,\n templates: {\n ...state.templates,\n guidanceDataGroup: {\n ...state.templates.guidanceDataGroup,\n inputs: state.templates.guidanceDataGroup.inputs.map((input) => input.valueType === ValueType.tag ? {...input, value: []} : {...input, value: ''})\n }\n }\n }\n } \n else \n {\n return state;\n }\n }\n\n default:\n return state;\n }\n}\n\nexport { reducer as TemplateReducer };\n\n","import * as actions from \"./types\";\n\n\nconst initialState: actions.DefaultDraftPlanActionState = {\n draftPlans: [],\n draftPlanIntervalID: {} as NodeJS.Timeout\n}\n\nconst reducer = (state = initialState, action: actions.DraftPlanActionTypes): actions.DefaultDraftPlanActionState => {\n switch (action.type) {\n \n case actions.SET_DRAFT_PLAN: {\n return {\n ...state,\n draftPlans: [...state.draftPlans, action.data]\n }\n }\n\n case actions.SET_DRAFT_PLANS: {\n return {\n ...state,\n draftPlans: action.data,\n }\n }\n\n case actions.SET_DRAFT_PLAN_INTERVAL_ID: {\n return {\n ...state,\n draftPlanIntervalID: action.data,\n }\n }\n\n default:\n return state;\n }\n}\n\nexport { reducer as DraftPlanReducer }","import { emptyDashboardFilterModel } from \"../../helpers/CreateEmptyDataObjects\";\nimport DashboardUserModel from \"../../models/DashboardUserModel\";\nimport * as actions from \"./types\";\n\n\nexport const initialState: actions.DashboardDefaultState = {\n dashboards: [],\n dashboardFilter: emptyDashboardFilterModel(),\n dashboardUsers: [],\n dashboardsLoaded: [],\n filterOptions: { checkAllUsers: false, checkAllContactGroups: false }\n};\n\nconst reducer = (\n state = initialState,\n action: actions.DashboardActionTypes \n\n): actions.DashboardDefaultState => {\n switch (action.type) {\n case actions.CLEAR_ALL_DASHBOARD_DATA: {\n return initialState;\n }\n\n case actions.SET_CHART: {\n const index: number = state.dashboards?.findIndex(d => d.id === action.data?.id);\n\n if (index > -1)\n {\n return {\n ...state,\n dashboards: [\n ...state.dashboards.slice(0, index), \n action.data,\n ...state.dashboards.slice(index + 1),\n ]\n }\n }\n else \n {\n return {\n ...state,\n dashboards: [...state.dashboards, action.data]\n }\n }\n\n }\n\n case actions.SET_DASHBOARD_FILTER: {\n return {\n ...state,\n dashboardFilter: action.data,\n }\n }\n\n case actions.SET_DASHBOARD_LOADED: {\n return {\n ...state,\n dashboardsLoaded: [...state.dashboardsLoaded, action.data]\n }\n }\n\n case actions.CLEAR_DASHBOARDS_LOADED: {\n return {\n ...state,\n dashboardsLoaded: []\n }\n }\n\n case actions.SET_DASHBOARD_USERS: {\n return {\n ...state,\n dashboardUsers: action.data,\n }\n }\n\n case actions.TRIGGER_CHECKED_ON_USER: {\n const index: number = state.dashboardUsers?.findIndex(x => x.item1 === action.data?.item1);\n if (index > -1)\n {\n let user: DashboardUserModel = state.dashboardUsers[index];\n const isChecked: boolean = user?.checked !== undefined && user?.checked; \n return {\n ...state,\n dashboardUsers: [\n ...state.dashboardUsers.slice(0, index),\n {\n ...state.dashboardUsers[index],\n checked: !isChecked,\n },\n ...state.dashboardUsers.slice(index + 1)\n ]\n }\n }\n else \n return state;\n }\n\n case actions.TRIGGER_CHECKED_ON_ALL_USERS: {\n const updatedArr = [...state.dashboardUsers];\n updatedArr?.map((user) => user.checked = action.data);\n\n return {\n ...state,\n dashboardUsers: updatedArr,\n }\n }\n\n case actions.DASHBOARD_FILTER_TRIGGER_CHECK_ON_ALL_USERS: {\n return {\n ...state,\n filterOptions: {\n ...state.filterOptions,\n checkAllUsers: !state.filterOptions.checkAllUsers,\n }\n }\n }\n\n case actions.DASHBOARD_FILTER_TRIGGER_CHECK_ON_ALL_CONTACT_GROUPS: {\n return {\n ...state,\n filterOptions: {\n ...state.filterOptions,\n checkAllContactGroups: !state.filterOptions.checkAllContactGroups,\n }\n }\n }\n\n case actions.RESET_DASHBOARD_FILTERS: {\n const updatedUsersArr = [...state.dashboardUsers];\n updatedUsersArr?.map((user) => user.checked = false);\n\n return {\n ...state,\n dashboardFilter: emptyDashboardFilterModel(),\n filterOptions: { checkAllContactGroups: false, checkAllUsers: false },\n dashboardUsers: updatedUsersArr,\n }\n }\n \n default:\n return state;\n }\n}\n\nexport {reducer as DashboardReducer};","import * as actions from \"./types\";\n\nconst initialState: actions.LoaderActionDefaultState = {\n displayingLoader: false,\n loadText: 'Henter data',\n lowerBackDropOpacity: false,\n};\n\n\n\nconst reducer = (state = initialState, action: actions.LoaderActionTypes): actions.LoaderActionDefaultState => {\n switch(action.type)\n {\n case actions.SET_LOADER: {\n return {\n ...state,\n displayingLoader: action.shouldLoad,\n loadText: action.loadText,\n lowerBackDropOpacity: action.lowerBackDropOpacity !== undefined ? action.lowerBackDropOpacity : false,\n }\n }\n\n default: \n return state;\n }\n}\n\nexport {reducer as LoaderReducer};","import HealthLimitationModel, { HealthLimitationStatus } from '../../models/HealthLimitationModel';\nimport { SearchListModel } from '../../models/SearchListModel';\nimport * as actions from './types';\n\nfunction setFakeMunicipalities(): SearchListModel[] {\n const kolding: SearchListModel = new SearchListModel(621, \"Kolding Kommune\", true);\n const vejle: SearchListModel = new SearchListModel(630, \"Vejle Kommune\", true);\n const haderslev: SearchListModel = new SearchListModel(510, \"Haderslev Kommune\", true);\n\n return [kolding, vejle, haderslev];\n}\n\nfunction setFakeRegion(): SearchListModel[] {\n const syddanmark: SearchListModel = new SearchListModel(3, \"Region Syddanmark\", true);\n\n return [syddanmark];\n}\n\nexport const initialState: actions.JobSearchRequirementDefaultState = {\n occupationsRequirement: [],\n municipalitiesRequirement: setFakeMunicipalities(),\n regionsRequirement: setFakeRegion(),\n tempOccupationsRequirement: [],\n tempMunicipalitiesRequirement: setFakeMunicipalities(),\n tempRegionsRequirement: setFakeRegion(),\n otherRequirementsText: '',\n healthLimitation: {} as HealthLimitationModel,\n otherExpectations: [\"Du skal min. søge 2 job per uge, heraf min. én opslået fuldtidsstilling.\", \"Du skal løbende registrere dine jobsøgningsaktiviteter i Joblog på Jobnet.\"],\n};\n\nconst reducer = (\n state = initialState,\n action: actions.JobSearchRequirementActionTypes\n): actions.JobSearchRequirementDefaultState => {\n switch (action.type) {\n case actions.SET_REQUIREMENT_MUNICIPALITES: {\n return {\n ...state,\n municipalitiesRequirement: action.data,\n tempMunicipalitiesRequirement: action.data,\n }\n }\n\n case actions.SET_REQUIREMENT_OCCUPATIONS: {\n return {\n ...state,\n occupationsRequirement: action.data,\n tempOccupationsRequirement: action.data,\n }\n }\n\n case actions.SET_REQUIREMENT_REGIONS: {\n return {\n ...state,\n regionsRequirement: action.data,\n tempRegionsRequirement: action.data,\n }\n }\n\n case actions.TRIGGER_CHECKED_OCCUPATIONS: {\n const index: number = state.occupationsRequirement?.findIndex(o => o.id === action.data?.id);\n\n if (index > -1)\n {\n return {\n ...state,\n occupationsRequirement: [\n ...state.occupationsRequirement.slice(0, index),\n {\n ...state.occupationsRequirement[index],\n checked: !state.occupationsRequirement[index]?.checked,\n },\n ...state.occupationsRequirement.slice(index + 1),\n ]\n }\n }\n else \n return state;\n }\n\n case actions.TRIGGER_CHECKED_REGIONS: {\n const index: number = state.regionsRequirement?.findIndex(o => o.id === action.data?.id);\n\n if (index > -1)\n {\n return {\n ...state,\n regionsRequirement: [\n ...state.regionsRequirement.slice(0, index),\n {\n ...state.regionsRequirement[index],\n checked: !state.regionsRequirement[index]?.checked,\n },\n ...state.regionsRequirement.slice(index + 1),\n ]\n }\n }\n else \n return state;\n }\n\n case actions.TRIGGER_CHECKED_MUNICIPALITES: {\n const index: number = state.municipalitiesRequirement?.findIndex(o => o.id === action.data?.id);\n\n if (index > -1)\n {\n return {\n ...state,\n municipalitiesRequirement: [\n ...state.municipalitiesRequirement.slice(0, index),\n {\n ...state.municipalitiesRequirement[index],\n checked: !state.municipalitiesRequirement[index]?.checked,\n },\n ...state.municipalitiesRequirement.slice(index + 1),\n ]\n }\n }\n else \n return state;\n }\n\n case actions.SET_TEMP_OCCUPATION_REQUIREMENT: {\n return {\n ...state,\n tempOccupationsRequirement: [...state.tempOccupationsRequirement, action.data],\n }\n }\n\n case actions.SET_TEMP_REGION_REQUIREMENT: {\n return {\n ...state,\n tempRegionsRequirement: [...state.tempRegionsRequirement, action.data],\n }\n }\n\n case actions.SET_TEMP_MUNICIPALITY_REQUIREMENT: {\n return {\n ...state,\n tempMunicipalitiesRequirement: [...state.tempMunicipalitiesRequirement, action.data],\n }\n }\n\n case actions.REMOVE_TEMP_OCCUPATION_REQUIREMENT: {\n const index: number = state.tempOccupationsRequirement?.findIndex(o => o.id === action.data?.id);\n if (index > -1)\n {\n return {\n ...state,\n tempOccupationsRequirement: [\n ...state.tempOccupationsRequirement.slice(0, index),\n ...state.tempOccupationsRequirement.slice(index + 1),\n ]\n }\n }\n else \n return state;\n }\n\n case actions.REMOVE_TEMP_REGION_REQUIREMENT: {\n const index: number = state.tempRegionsRequirement?.findIndex(o => o.id === action.data?.id);\n if (index > -1)\n {\n return {\n ...state,\n tempRegionsRequirement: [\n ...state.tempRegionsRequirement.slice(0, index),\n ...state.tempRegionsRequirement.slice(index + 1),\n ]\n }\n }\n else \n return state;\n }\n\n case actions.REMOVE_TEMP_MUNICIPALITY_REQUIREMENT: {\n const index: number = state.tempMunicipalitiesRequirement?.findIndex(o => o.id === action.data?.id);\n if (index > -1)\n {\n return {\n ...state,\n tempMunicipalitiesRequirement: [\n ...state.tempMunicipalitiesRequirement.slice(0, index),\n ...state.tempMunicipalitiesRequirement.slice(index + 1),\n ]\n }\n }\n else \n return state;\n }\n\n case actions.SET_TEMP_MUNICIPALITY_REQUIREMENT: {\n const index: number = state.tempMunicipalitiesRequirement?.findIndex(o => o.id === action.data?.id);\n\n if (index > -1)\n {\n return {\n ...state,\n tempMunicipalitiesRequirement: [\n ...state.tempMunicipalitiesRequirement.slice(0, index),\n ...state.tempMunicipalitiesRequirement.slice(index + 1),\n ]\n }\n }\n else \n return state;\n }\n\n case actions.RESET_REQUIREMENTS: {\n return {\n ...state,\n occupationsRequirement: action.resetType === 'occupations' ? [] : state.occupationsRequirement,\n tempOccupationsRequirement: action.resetType === 'occupations' ? [] : state.tempOccupationsRequirement,\n municipalitiesRequirement: action.resetType === 'municipality' ? [] : state.municipalitiesRequirement,\n tempMunicipalitiesRequirement: action.resetType === 'municipality' ? [] : state.tempMunicipalitiesRequirement,\n regionsRequirement: action.resetType === 'region' ? [] : state.regionsRequirement,\n tempRegionsRequirement: action.resetType === 'region' ? [] : state.tempRegionsRequirement,\n }\n }\n\n case actions.SET_OTHER_REQUIREMENTS_TEXT: {\n return {\n ...state,\n otherRequirementsText: action.data,\n }\n }\n\n case actions.SET_HEATH_LIMITATION: {\n return {\n ...state,\n healthLimitation: action.data,\n }\n }\n\n case actions.REMOVE_REQUIREMENT_OCCUPATION: {\n const index: number = state.occupationsRequirement.findIndex(o => o.id === action.data?.id);\n if (index > -1)\n {\n return {\n ...state,\n occupationsRequirement: [\n ...state.occupationsRequirement.slice(0, index),\n ...state.occupationsRequirement.slice(index + 1)\n ]\n }\n }\n else \n return state;\n }\n\n case actions.REMOVE_REQUIREMENT_REGION: {\n const index: number = state.regionsRequirement.findIndex(o => o.id === action.data?.id);\n if (index > -1)\n {\n return {\n ...state,\n regionsRequirement: [\n ...state.regionsRequirement.slice(0, index),\n ...state.regionsRequirement.slice(index + 1)\n ]\n }\n }\n else \n return state;\n }\n\n case actions.REMOVE_REQUIREMENT_MUNICIPALITY: {\n const index: number = state.municipalitiesRequirement.findIndex(o => o.id === action.data?.id);\n if (index > -1)\n {\n return {\n ...state,\n municipalitiesRequirement: [\n ...state.municipalitiesRequirement.slice(0, index),\n ...state.municipalitiesRequirement.slice(index + 1)\n ]\n }\n }\n else \n return state;\n }\n\n case actions.SET_EXPECTATION: {\n return {\n ...state,\n otherExpectations: [...state.otherExpectations, action.data]\n }\n }\n\n case actions.REMOVE_EXPECTATION: {\n const index: number = state.otherExpectations?.findIndex(x => x === action.data);\n if (index > -1)\n {\n return {\n ...state,\n otherExpectations: [\n ...state.otherExpectations.slice(0, index),\n ...state.otherExpectations.slice(index + 1),\n ]\n }\n }\n else \n return state;\n }\n \n default:\n return state;\n }\n};\n\nexport { reducer as JobSearchRequirementReducer };","import { fakeJobSearchEntries } from '../../helpers/CreateEmptyDataObjects';\nimport { DFDGDocument } from '../../models/DFDGDocument';\nimport JobSearchEntryModel from '../../models/JobSearchEntryModel';\nimport { UnemploymentFundMembershipType } from '../../models/UnemploymentFundMembershipType';\nimport * as actions from './types';\n\n\nexport const initialState: actions.PersonDefaultState = {\n jobSearchEntries: [],\n tempFiles: [],\n hasUpdatedJobPathIDs: false,\n personGeoData: {latitude: 55.980925339348545, longitude: 10.549030978491576},\n showGeoLocationModal: false,\n personMembership: UnemploymentFundMembershipType.NONE,\n hasJobPathFilters: null,\n};\n\nconst reducer = (state = initialState, action: actions.PersonActionTypes): actions.PersonDefaultState => {\n switch (action.type) {\n\n case actions.CLEAR_ALL_PERSON_DATA: {\n return initialState;\n }\n\n case actions.SET_JOB_SEARCH_ENTRIES: {\n return {\n ...state,\n jobSearchEntries: action.data,\n }\n }\n\n case actions.SET_JOB_SEARCH_ENTRY: {\n return {\n ...state,\n jobSearchEntries: [...state.jobSearchEntries, action.data],\n }\n }\n\n case actions.UPDATE_JOB_SEARCH_ENTRY: {\n const index: number = state.jobSearchEntries?.findIndex(job => job?.id === action.data?.id);\n \n if (index > -1)\n {\n return {\n ...state,\n jobSearchEntries: [\n ...state.jobSearchEntries.slice(0, index),\n action.data,\n ...state.jobSearchEntries.slice(index + 1)\n ],\n }\n }\n else \n return state;\n }\n\n case actions.DELETE_JOB_SEARCH_ENTRY: {\n const index: number = state.jobSearchEntries?.findIndex(job => job?.id === action.data?.id);\n if (index > -1)\n {\n return {\n ...state,\n jobSearchEntries: [\n ...state.jobSearchEntries.slice(0, index),\n ...state.jobSearchEntries.slice(index + 1)\n ],\n }\n }\n else \n return state;\n }\n\n case actions.ADD_DOCUMENT_TO_JOBLOG: {\n if(action.sentToService){\n let tempJobSearchEntries = [...state.jobSearchEntries];\n let index = tempJobSearchEntries.findIndex(x => x.id == action.joblogEntryIdentifier);\n \n\n if(index > -1)\n {\n tempJobSearchEntries[index].documents.push(action.document);\n }\n\n return {\n ...state,\n jobSearchEntries: tempJobSearchEntries\n }\n }\n else \n {\n let tempFiles = [...state.tempFiles];\n\n let tempDocument = {...action.document};\n \n tempDocument.joblogEntryIdentifier = action.joblogEntryIdentifier;\n tempDocument.handleDocumentIdentifier = 'NEW';\n tempDocument.file = action.file;\n \n \n tempDocument.tempIndex = tempFiles.length;\n tempFiles.push(tempDocument);\n\n return {\n ...state,\n tempFiles: tempFiles,\n }\n }\n }\n\n case actions.REMOVE_DOCUMENT_ON_JOBLOG: {\n if (action.removeDocumentInJobSearchEntries)\n {\n let tempJobSearchEntries = [...state.jobSearchEntries];\n const index = tempJobSearchEntries?.findIndex(x => x?.id == action?.joblogEntryIdentifier);\n if(index > -1)\n {\n let jobSearchEntry = tempJobSearchEntries[index];\n const docIndex = jobSearchEntry?.documents?.findIndex(x => x?.id == action?.jobLogDocumentIdentifier);\n if(docIndex > -1)\n {\n tempJobSearchEntries = [\n ...tempJobSearchEntries.slice(0, index),\n {\n ...tempJobSearchEntries[index],\n documents: [\n ...tempJobSearchEntries[index].documents.slice(0, docIndex),\n ...tempJobSearchEntries[index].documents.slice(docIndex + 1),\n ]\n },\n ...tempJobSearchEntries.slice(index + 1)\n ];\n }\n }\n\n return {\n ...state,\n jobSearchEntries: tempJobSearchEntries,\n }\n }\n else \n {\n //handling temp files only if we can remove the document on the joblog.\n let tempFiles = [...state.tempFiles];\n let tempFileindex = action.document?.tempIndex;\n\n if(tempFileindex !== undefined && tempFileindex > -1)\n {\n tempFiles[tempFileindex].handleDocumentIdentifier = 'DELETED';\n }\n else\n {\n let document = {...action.document};\n document.handleDocumentIdentifier = 'DELETED';\n document.tempIndex = tempFiles?.length;\n document.joblogEntryIdentifier = action.joblogEntryIdentifier;\n tempFiles.push(document);\n }\n return {\n ...state,\n tempFiles: tempFiles\n }\n }\n }\n\n \n case actions.CLEAR_TEMP_FILES: {\n let tempFiles: DFDGDocument[] = []\n return {\n ...state,\n tempFiles: tempFiles,\n }\n }\n\n case actions.UPDATE_JOB_SEARCH_ENTRIES_WITH_JOBPATH_ID: {\n if (action?.data?.length > 0)\n {\n let tempJobSearchEntries: JobSearchEntryModel[] = [...state.jobSearchEntries];\n action.data.map((jobpath) => {\n if (jobpath?.jobSearchEntries?.length > 0)\n {\n jobpath.jobSearchEntries.map((item) => {\n const index: number = tempJobSearchEntries?.findIndex(x => x?.id === item?.jobSearchEntryId);\n if (index > -1)\n {\n tempJobSearchEntries = [\n ...tempJobSearchEntries?.slice(0, index),\n {\n ...tempJobSearchEntries[index],\n jobPathID: jobpath?.id,\n jobNetId: item?.jobNetId?.length > 0 ? item?.jobNetId : undefined,\n },\n ...tempJobSearchEntries?.slice(index + 1)\n ]\n }\n });\n // jobpath.jobSearchEntries.map((jobSearchEntryTuple) => {\n // const index: number = tempJobSearchEntries?.findIndex(x => x?.id === jobSearchEntryTuple[0]);\n // if (index > -1)\n // {\n // tempJobSearchEntries = [\n // ...tempJobSearchEntries?.slice(0, index),\n // {\n // ...tempJobSearchEntries[index],\n // jobPathID: jobpath?.id,\n // jobNetId: jobSearchEntryTuple[1]?.length > 0 ? jobSearchEntryTuple[1] : undefined,\n // },\n // ...tempJobSearchEntries?.slice(index + 1)\n // ]\n // }\n // });\n }\n });\n\n return {\n ...state,\n jobSearchEntries: tempJobSearchEntries,\n hasUpdatedJobPathIDs: true,\n }\n }\n else \n return state;\n }\n\n case actions.SET_JOBPATH_ID_ON_JOB_SEARCH_ENTRY: {\n const index: number = state.jobSearchEntries?.findIndex(j => j?.id === action.jobEntryID);\n\n if (index > -1)\n {\n return {\n ...state,\n jobSearchEntries: [\n ...state.jobSearchEntries.slice(0, index),\n {\n ...state.jobSearchEntries[index],\n jobPathID: action.jobPathID,\n },\n ...state.jobSearchEntries.slice(index + 1)\n ]\n }\n }\n else \n return state;\n }\n\n case actions.SET_PERSON_GEO_DATA: {\n return {\n ...state,\n personGeoData: action.data,\n }\n }\n\n case actions.SET_SHOW_GEO_LOCATION_MODAL: {\n return {\n ...state,\n showGeoLocationModal: action.data,\n }\n }\n\n case actions.SET_PERSON_MEMBER_SHIP: {\n return {\n ...state,\n personMembership: action.data,\n }\n }\n\n case actions.SET_HAS_JOBPATH_FILTERS: {\n return {\n ...state,\n hasJobPathFilters: action.hasJobPathFilters\n }\n }\n\n default:\n return state;\n }\n}\n\nexport { reducer as PersonReducer };\n\n","import { combineReducers } from 'redux';\nimport { CitizenReducer } from './Citizen/reducer';\nimport { ErrorReducer } from './Errors/reducer';\nimport { JobPathListReducer } from './JobPathList/reducer';\nimport { MyPlanMeetingReducer } from './MyPlan/reducers';\nimport { JobsReducer } from './Jobs/reducer';\nimport { LanguageReducer } from './Language/reducers';\nimport { AgreementReducer } from './Agreement/reducer';\nimport { AuthReducer } from './Auth/reducer';\nimport { SearchJobReducer } from \"./SearchJob/reducer\";\nimport { PreparationReducer } from \"./Preparation/reducer\";\nimport { SearchReducer } from \"./Search/reducer\";\nimport { PrintReducer } from './Print/reducer';\nimport { TemplateReducer } from \"./Template/reducer\";\nimport { DraftPlanReducer } from './DraftPlan/reducer';\nimport { DashboardReducer } from './Dashboard/reducer';\nimport { LoaderReducer } from './Loader/reducer';\nimport { JobSearchRequirementReducer } from './JobSearchRequirement/reducer';\nimport { PersonReducer } from './Person/reducer';\n\nexport type AppState = ReturnType;\n\nexport const RootState = combineReducers({\n agreement: AgreementReducer,\n jobPathList: JobPathListReducer,\n citizen: CitizenReducer,\n jobs: JobsReducer,\n errors: ErrorReducer,\n myPlanMeeting: MyPlanMeetingReducer,\n language: LanguageReducer,\n auth: AuthReducer,\n searchJob: SearchJobReducer,\n preparation: PreparationReducer,\n search: SearchReducer,\n print: PrintReducer,\n template: TemplateReducer,\n draftPlan: DraftPlanReducer,\n dashboard: DashboardReducer,\n loader: LoaderReducer,\n jobSearchRequirement: JobSearchRequirementReducer,\n person: PersonReducer,\n});\n\nexport default RootState;\n","import DashboardFilterModel from \"../../models/DashboardFilterModel\";\nimport DashboardFilterOptions from \"../../models/DashboardFilterOptions\";\nimport { DashboardModel } from \"../../models/DashboardModel\";\nimport DashboardUserModel from \"../../models/DashboardUserModel\";\n\nexport const SET_CHART = 'SET_CHART';\n\nexport const SET_DASHBOARD_FILTER = \"SET_DASHBOARD_FILTER\";\n\nexport const SET_DASHBOARD_LOADED = \"SET_DASHBOARD_LOADED\";\nexport const CLEAR_DASHBOARDS_LOADED = \"CLEAR_DASHBOARDS_LOADED\";\n\nexport const SET_DASHBOARD_USERS = \"SET_DASHBOARD_USERS\";\n\nexport const TRIGGER_CHECKED_ON_USER = \"TRIGGER_CHECKED_ON_USER\";\nexport const TRIGGER_CHECKED_ON_ALL_USERS = \"TRIGGER_CHECKED_ON_ALL_USERS\";\n\nexport const RESET_DASHBOARD_FILTERS = \"RESET_DASHBOARD_FILTERS\";\n\nexport const DASHBOARD_FILTER_TRIGGER_CHECK_ON_ALL_USERS = \"DASHBOARD_FILTER_TRIGGER_CHECK_ON_ALL_USERS\";\nexport const DASHBOARD_FILTER_TRIGGER_CHECK_ON_ALL_CONTACT_GROUPS = \"DASHBOARD_FILTER_TRIGGER_CHECK_ON_ALL_CONTACT_GROUPS\"\n\n// Clear all Dashboard Data \nexport const CLEAR_ALL_DASHBOARD_DATA = \"CLEAR_ALL_DASHBOARD_DATA\";\n\n\ninterface ClearAllDashboardData {\n type: typeof CLEAR_ALL_DASHBOARD_DATA;\n}\n\ninterface SetChart {\n type: typeof SET_CHART;\n data: DashboardModel;\n}\n\ninterface SetDashboardFilter {\n type: typeof SET_DASHBOARD_FILTER; \n data: DashboardFilterModel;\n}\n\ninterface SetDashboardLoaded {\n type: typeof SET_DASHBOARD_LOADED;\n data: number;\n}\n\ninterface SetDashboardUsers {\n type: typeof SET_DASHBOARD_USERS; \n data: DashboardUserModel[];\n}\n\ninterface TriggerCheckedOnUser {\n type: typeof TRIGGER_CHECKED_ON_USER; \n data: DashboardUserModel;\n}\n\ninterface TriggerCheckedOnAllUsers {\n type: typeof TRIGGER_CHECKED_ON_ALL_USERS;\n data: boolean;\n}\n\ninterface ClearDashboardsLoaded {\n type: typeof CLEAR_DASHBOARDS_LOADED; \n}\n\ninterface TriggerCheckedOnDashboardFilterOptions {\n type: typeof DASHBOARD_FILTER_TRIGGER_CHECK_ON_ALL_USERS | typeof DASHBOARD_FILTER_TRIGGER_CHECK_ON_ALL_CONTACT_GROUPS;\n}\n\ninterface ResetDashboardFilters {\n type: typeof RESET_DASHBOARD_FILTERS;\n}\n\nexport interface DashboardDefaultState {\n dashboards: DashboardModel[];\n dashboardFilter: DashboardFilterModel;\n dashboardUsers: DashboardUserModel[];\n dashboardsLoaded: number[];\n filterOptions: DashboardFilterOptions;\n}\n\nexport type DashboardActionTypes = \n| ClearAllDashboardData\n| SetChart\n| SetDashboardFilter\n| SetDashboardLoaded\n| ClearDashboardsLoaded\n| SetDashboardUsers\n| TriggerCheckedOnUser \n| TriggerCheckedOnAllUsers\n| TriggerCheckedOnDashboardFilterOptions\n| ResetDashboardFilters;","import HealthLimitationModel from \"../../models/HealthLimitationModel\";\nimport { SearchListModel } from \"../../models/SearchListModel\";\n\nexport const SET_REQUIREMENT_OCCUPATIONS = 'SET_REQUIREMENT_OCCUPATIONS';\nexport const TRIGGER_CHECKED_OCCUPATIONS = 'TRIGGER_CHECKED_OCCUPATIONS';\n\n// HK møde er ved Kolding kommune\nexport const SET_REQUIREMENT_MUNICIPALITES = 'SET_REQUIREMENT_MUNICIPALITES';\nexport const TRIGGER_CHECKED_MUNICIPALITES = 'TRIGGER_CHECKED_MUNICIPALITES';\n\nexport const SET_REQUIREMENT_REGIONS = \"SET_REQUIREMENT_REGIONS\";\nexport const TRIGGER_CHECKED_REGIONS = \"TRIGGER_CHECKED_REGIONS\";\n\nexport const SET_TEMP_OCCUPATION_REQUIREMENT = \"SET_TEMP_OCCUPATION_REQUIREMENT\";\nexport const SET_TEMP_MUNICIPALITY_REQUIREMENT = \"SET_TEMP_MUNICIPALITY_REQUIREMENT\";\nexport const SET_TEMP_REGION_REQUIREMENT = \"SET_TEMP_REGION_REQUIREMENT\";\n\nexport const REMOVE_TEMP_OCCUPATION_REQUIREMENT = \"REMOVE_TEMP_OCCUPATION_REQUIREMENT\";\nexport const REMOVE_TEMP_MUNICIPALITY_REQUIREMENT = \"REMOVE_TEMP_MUNICIPALITY_REQUIREMENT\";\nexport const REMOVE_TEMP_REGION_REQUIREMENT = \"REMOVE_TEMP_REGION_REQUIREMENT\";\n\nexport const REMOVE_REQUIREMENT_OCCUPATION = \"REMOVE_REQUIREMENT_OCCUPATION\";\nexport const REMOVE_REQUIREMENT_MUNICIPALITY = \"REMOVE_REQUIREMENT_MUNICIPALITY\";\nexport const REMOVE_REQUIREMENT_REGION = \"REMOVE_REQUIREMENT_REGION\";\n\nexport const RESET_REQUIREMENTS = \"RESET_REQUIREMENTS\";\n\nexport const SET_OTHER_REQUIREMENTS_TEXT = \"SET_OTHER_REQUIREMENTS_TEXT\";\n\nexport const SET_HEATH_LIMITATION = \"SET_HEATH_LIMITATION\";\n\nexport const SET_EXPECTATION = \"SET_EXPECTATION\";\nexport const REMOVE_EXPECTATION = \"REMOVE_EXPECTATION\";\n\ninterface SetOccupations {\n type: typeof SET_REQUIREMENT_OCCUPATIONS;\n data: SearchListModel[];\n}\n\ninterface SetMunicipalities {\n type: typeof SET_REQUIREMENT_MUNICIPALITES;\n data: SearchListModel[];\n}\n\ninterface SetRegions {\n type: typeof SET_REQUIREMENT_REGIONS;\n data: SearchListModel[];\n}\n\ninterface TriggerChecked {\n type: typeof TRIGGER_CHECKED_OCCUPATIONS | typeof TRIGGER_CHECKED_MUNICIPALITES | typeof TRIGGER_CHECKED_REGIONS;\n data: SearchListModel;\n}\n\ninterface SetOrDeleteTempMunicipalityAndOccupation {\n type: typeof SET_TEMP_OCCUPATION_REQUIREMENT | typeof SET_TEMP_MUNICIPALITY_REQUIREMENT | typeof REMOVE_TEMP_OCCUPATION_REQUIREMENT | typeof REMOVE_TEMP_MUNICIPALITY_REQUIREMENT | typeof SET_TEMP_REGION_REQUIREMENT | typeof REMOVE_TEMP_REGION_REQUIREMENT;\n data: SearchListModel;\n}\n\ninterface ResetRequirements {\n type: typeof RESET_REQUIREMENTS; \n resetType: string; \n}\n\ninterface SetOtherRequirementsText {\n type: typeof SET_OTHER_REQUIREMENTS_TEXT; \n data: string;\n}\n\ninterface SetHealthLimitation {\n type: typeof SET_HEATH_LIMITATION; \n data: HealthLimitationModel;\n}\n\ninterface RemoveOccupationOrMunicipality {\n type: typeof REMOVE_REQUIREMENT_OCCUPATION | typeof REMOVE_REQUIREMENT_MUNICIPALITY | typeof REMOVE_REQUIREMENT_REGION;\n data: SearchListModel;\n}\n\ninterface SetOrRemoveExpectation {\n type: typeof SET_EXPECTATION | typeof REMOVE_EXPECTATION; \n data: string;\n}\n\nexport interface JobSearchRequirementDefaultState {\n occupationsRequirement: SearchListModel[];\n municipalitiesRequirement: SearchListModel[];\n regionsRequirement: SearchListModel[];\n tempOccupationsRequirement: SearchListModel[];\n tempMunicipalitiesRequirement: SearchListModel[];\n tempRegionsRequirement: SearchListModel[];\n otherRequirementsText: string;\n healthLimitation: HealthLimitationModel;\n otherExpectations: string[];\n}\n\nexport type JobSearchRequirementActionTypes = \n| SetOccupations\n| SetMunicipalities\n| TriggerChecked\n| SetOrDeleteTempMunicipalityAndOccupation\n| ResetRequirements\n| SetOtherRequirementsText\n| SetHealthLimitation\n| RemoveOccupationOrMunicipality\n| SetRegions\n| SetOrRemoveExpectation;","import { applyMiddleware, createStore } from 'redux';\nimport thunkMiddleware from 'redux-thunk';\nimport { composeWithDevTools } from 'redux-devtools-extension';\n\n// import monitorReducersEnhancer from './enhancers/monitorReducers'\n// import loggerMiddleware from './middleware/logger'\nimport { AppState } from './store';\nimport rootReducer from './store';\n\nexport default function configureStore(initialState: AppState) {\n const middlewares = [thunkMiddleware];\n const middlewareEnhancer = applyMiddleware(...middlewares);\n\n const enhancers = [middlewareEnhancer];\n const composedEnhancers = composeWithDevTools(...enhancers);\n\n // NOTE: used for production\n const store = createStore(rootReducer, initialState, middlewareEnhancer);\n\n // NOTE: used for development\n // const store = createStore(rootReducer, initialState, composedEnhancers);\n\n return store;\n}\n","module.exports = __webpack_public_path__ + \"static/media/chevron-left.790cad1e.svg\";","module.exports = __webpack_public_path__ + \"static/media/chevron-right.2040de34.svg\";","module.exports = __webpack_public_path__ + \"static/media/calendar-icon-2.b8931dfd.svg\";","module.exports = __webpack_public_path__ + \"static/media/map-pin-square.cda87089.svg\";","module.exports = __webpack_public_path__ + \"static/media/map-pin-triangle.d0601e89.svg\";","module.exports = __webpack_public_path__ + \"static/media/map-pin-star.08747695.svg\";","module.exports = __webpack_public_path__ + \"static/media/map-pin-line.9a254510.svg\";","module.exports = __webpack_public_path__ + \"static/media/map-pin-hexagon.5f4caccf.svg\";","module.exports = __webpack_public_path__ + \"static/media/map-pin-profile.6f661ba0.svg\";","module.exports = __webpack_public_path__ + \"static/media/map-pin-company.6c6dec3a.svg\";","module.exports = __webpack_public_path__ + \"static/media/remaining-jobpath-icon.8cabdb62.svg\";","module.exports = __webpack_public_path__ + \"static/media/remaining-jobpath-icon-DSA.bcf9ecf9.svg\";","module.exports = __webpack_public_path__ + \"static/media/jobpath-square-border.23e30b18.svg\";","module.exports = __webpack_public_path__ + \"static/media/jobpath-triangle-border.898f9aa0.svg\";","module.exports = __webpack_public_path__ + \"static/media/jobpath-star-border.cab7a4ef.svg\";","module.exports = __webpack_public_path__ + \"static/media/jobpath-line-border.75a1798b.svg\";","module.exports = __webpack_public_path__ + \"static/media/jobpath-hexagon-border.5a29b308.svg\";","module.exports = __webpack_public_path__ + \"static/media/job-without-jobpath.f9fcd646.svg\";","module.exports = __webpack_public_path__ + \"static/media/close-icon-searchbox.883f89e0.svg\";","module.exports = __webpack_public_path__ + \"static/media/red-arrow-downwards.e3ef32c6.svg\";","module.exports = __webpack_public_path__ + \"static/media/yellow-line-icon.0a00ae39.svg\";","module.exports = \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAYAAABWdVznAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAABXSURBVHgBjZLRCQAgCESlidpI91/CikIiT+2+hN6LIyOaUdVORYxZg+5wAvNhTJJIumB5D5wUwkgqYSBBuCEnmOHtViN7CAeDelzCoXQtTpKq8i7u+2sMDuXH+eEdA5UAAAAASUVORK5CYII=\"","module.exports = __webpack_public_path__ + \"static/media/StatisticButton.a381e515.svg\";","module.exports = __webpack_public_path__ + \"static/media/PersonButton.48ef531a.svg\";","module.exports = __webpack_public_path__ + \"static/media/agreementImg.2bbd2b81.svg\";","module.exports = __webpack_public_path__ + \"static/media/HelpButton.94e2671f.svg\";","module.exports = __webpack_public_path__ + \"static/media/CreateAgreementDsa.ea57329a.svg\";"],"sourceRoot":""}