{"version":3,"mappings":"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","names":["StatusType","BehandlerInnsynType","OppstartType","VerktoyKategori","LaeringsaktivitetStatusType","OpprettetAvType","VerktoyFormal","FagomradeType","Innholdstype","MalgruppeType","SprakType","GrafiskElementType","LenkeType","VerktoyType","SorteringType","VERKTOY_PROXY_NAME","ANONYM_VERKTOYLISTE","VERKTOYLISTE","MINE_VERKTOY","VERKTOY","ANONYM_VERKTOY","AVVIS_OPPGAVE","ANONYM_GRAFISKELEMENT","HttpStatusCode","verktoyFrontendProject","stringToLanguageLocales","languageString","LanguageLocales","convertFromStringToBool","val","filterToRequestParam","isLoggedIn","verktoyFilters","filterToRequestParamForSessionStorage","_a","_b","_c","DEFAULT_PROJECT_NAME","LANGUAGE","getResourceItem","projectName","language","defaultResources","getResources","resources","__variableDynamicImportRuntimeHelper","__vitePreload","HN_Verktoy_Frontend_nbNO","error","fetchVerktoyListeThunk","createAsyncThunk","rejectWithValue","fulfillWithValue","requestParams","response","get","_","getState","fetchLaeringsaktiviteterThunk","data","fetchVerktoyThunk","verktoyId","addLaeringsaktivitetThunk","verktoy","oppgaveId","post","updatedVerktoy","avvisOppgaveLaeringsaktivitetThunk","removeLaeringsaktivitetThunk","aktivitetsId","remove","loadResources","dispatch","fetchResources","getDefaultVerktoyFilters","initialState","reducer","createSlice","state","action","nyLaeringsaktivitetListe","item","builder","verktoyReducer","setIsFilterOpen","closeLightboxes","setEnteredDetailsPageFrom","setStartAktivitet","setVerktoyFilters","showRemoveAktivitetConfirmation","rootReducer","combineReducers","createLanguageReducer","Languages","hjelpeskuff","cmsTjenesteTekster","store","configureStore","getDefaultMiddleware","useAppDispatch","useDispatch","useAppSelector","selector","useSelector","useGetResources","useResources","AssuranceElement","extraClass","jsx","Icon","Shield","TagGroup","PageRoutes","QueryStrings","SessionStorageKeys","getCategoryCards","Hiker","Heart","Pregnant","HelpingHand","BandAid","MentalHealthAdult","React","Categories","navigate","useNavigate","categoryCards","toAlleVerktoyLinkClicked","handleCategoryClick","category","jsxs","Title","LinkList","card","ListHeader","Button","ArrowRight","tjenestePath","handleLogin","returnUrl","useLogin","appUrl","getAppUrl","ref","HNeventShowAppInvitation","fullAppUrl","useRef","LoginButton","buttonRef","login","isAuthorized","Lock","getVerktoyForLaeringsaktivitetSelector","createSelector","laeringsaktiviteter","getVerktoyForVerktoyLogoSelector","findAktivitetToRemoveIdSelector","aktivitetToRemove","placeholderImg","VerktoyLogo","grafiskeElementer","logo","x","link","PlaceholderImg","useState","LaeringsAktivitet","name","hoverStates","setHoverStates","focusStates","setFocusStates","isHovered","isFocused","handleHover","hover","verktoyIdAsNumber","prevStates","handleFocus","focus","getVerktoyLink","laeringsAktivitetClicked","Link","useEffect","MineVerktoyPreview","globalState","laeringsaktiviteterLoading","fetchLaeringsaktiviteterHandler","toMineVerktoyLinkClicked","Fragment","Loader","EmptyState","AboutVerktoy","EntryPage","harAktivtForeldreSamtykke","getHarAktivtForeldreSamtykke","erRepresentasjon","getErRepresentasjon","SharingStatus","Eye","AddVerktoyConfirmation","addedAktivitetName","handleClose","Modal","isLaeringsaktivitetCreatedByInnbygger","laeringsAktivitet","erApenVerktoy","kategori","erVerktoyTilgjengelig","gyldigFraOgTilDato","idag","nowDate","fjernTid","dato","hasValue","valueToCheck","fraDatoStr","tilDatoStr","fra","til","trackAnalyticsBasertPaaLenkeType","lenkeType","trackTool","removeTralingAndEmptyParamFromUrl","url","getDeleteButtonText","urlExists","lenker","lenke","getCurrentPageRoute","location","shouldScrollToTop","verktoyListe","pathName","scrollAndFocus","listElementRef","getUrlToReturnToAfterLogin","pathname","currentUrl","currentUrlWithoutVerktoyId","isGuid","value","pattern","erLaeringsaktivitetFn","DeleteVerktoyConfirmation","aktivitetToRemoveId","onConfirm","confirmButtonText","headerText","descriptionText","ModalsContainer","FAGOMRADE_QUERY_PARAM","VERKTOYTYPE_QUERY_PARAM","MALGRUPPE_QUERY_PARAM","KREVER_FORSKRIVNING_QUERY_PARAM","STOTTER_ANONYM_OPPSTART_QUERY_PARAM","SOK_QUERY","SORTERING_QUERY_PARAM","SORTERSTIGENDE_QUERY_PARAM","OPPGAVEID_QUERY_PARAM","OPPGAVE_RETURURL_QUERY_PARAM","isHelsenorgeProxyError","HelsenorgeProxyError","isHelsenorgeHttpError","HelsenorgeHttpError","getErrorLabel","genericErrorText","httpStatusCode","hasPageHeader","getReturnFromDetailsPageUrl","enteredDetailsPageFrom","verktoyIdParam","extractVerktoyIdFromPathname","extraPath","getBreadCrumbLinkTilOppgaveMelding","getDetailsPageBreadCrumbText","isLocationVerktoyDetailsPage","isLocationEntryPage","getBreadCrumbLink","verktoyFilterState","getQueryPartURLFromFilterState","queryParamPart","params","key","queryString","partToExtract","parts","extractOppgaveIdFromPathname","extractOppgaveReturUrlFraPathname","retururl","shouldShowDeleteButton","erLaeringsaktivitet","kommerFraOppgaveSide","EntryPageContainer","useLocation","fullPath","getPath","PageRoot","PageLoader","getFagomraadeTyperQueryMaps","resource","fagomraader","query","convertToQueryMapSetup","getFagomraadeVisningTekst","getVerktoyTyperQueryMaps","verktoytyper","getVerktoyTyperVisningTekst","getMalgrupperQueryMaps","malgrupper","getMalgrupperVisningTekst","getSorteringQueryMaps","sortering","displayname","hentSokParam","newParamsLowerCase","fagomraade","verktoytype","malgruppe","sort","LaunchContainer","showOnDetailsPage","erTilgjengelig","visVerktoyManglendeTilgang","visVerktoyIkkeTilgjengelig","visDuMaaLoggePaa","visVerktoyMaaForskrives","infotextContainerClassName","infotextClassName","infoIcon","InfoSignFill","hndsTheme","NotificationPanel","VerktoyInfoElement","label","children","TagComponent","tagTitle","tagValue","isPlainText","Tag","AntattTidTag","estimatedTime","AntattTidKalkulator","hours","minutes","hoursString","FagomradeTag","fagomrade","FormalTag","verktoyFormal","InnholdstypeTag","innholdstype","tagIcon","Toolbox","InfoSignStroke","VideoCamera","Podcast","Form","Puzzle","EChat","Website","Notepad","Graph","SpeechBubble","MalgruppeTag","malgruppeType","SprakTag","sprakType","VerktoyTypeTag","verktoyType","VerktoyTagsComponent","tagGroup","fagomrader","malgruppeTitle","verktoyTyper","innholdstyper","antattTid","visSprak","sprakTyper","fagligAnsvarlig","dataansvarligNavn","utvikletAv","TagList","group","AddVerktoyElement","showModal","setShowModal","isWaitingForAktivitetResponse","kanLeggTiliMineVerktoy","addVerktoy","urlToReturnToAfterLogin","PlusLarge","DeleteVerktoyElement","className","X","VerktoyDetails","addedDateText","ikon","moreInfoButtonClicked","LaeringsaktivitetElement","aktivitet","date","shortDateFullMonth","createdLabel","LaeringsaktivitetList","verktoyRef","verktoyIdFromUrl","LaeringsaktivitetListContainer","AvvisOppgaveConfirmationModal","onClose","EnrollOppgaveOptionModal","VerktoyOppgaveModalContainer","visEnrollVerktoyOption","setEnrollVerktoyOptionVisning","visVerktoyCancellation","setVerktoyCancellationVisning","isOppgaveAvvisSuccess","oppgaveReturUrl","visVerktoyCancellationModal","confirmVerktoyEnrollment","confirmVerktoyCancellation","cancelVerktoyCancellation","kanInnloggetBrukerSeAapneKnapp","kanAnonymBrukerSeAapneKnapp","maaLoggeInnForAaAapneVerktoy","launchAktivitet","lenkeUrl","win","launchWindow","sanitize","d","form","errorWindow","getBehandlerInnsynTypeTekst","type","getKategoriTekst","getVerktoyPersonvernTekst","internEllerEksternSection","behandlerInnsynSection","kategoriSection","ExternalLinkRenderer","renderProps","MarkdownContent","props","classes","designsystemtypography","ReactMarkdown","OpenUtvidetInfoLink","verktoyLenker","utvidetInfoLenke","v","AnchorLink","anchorLinkClick","appStoreSVG","googlePlayPNG","OpenVerktoyButtons","startVerktoy","VerktoyDetailsPage","startAktivitet","showLoginModal","setShowLoginModal","isPersonvernBubbleOpen","setIsPersonvernBubbleOpen","isOppgaveEnrollmentSuccess","topElementRef","personvernButtonRef","openVerktoyButtonRef","bilde","erIkkeOppgave","shouldShowOmPersonvernHjelp","kanViseSlettKnapp","startVerktoyAnonym","handleUserArrival","HelpQuestion","HelpBubble","SafeHTML","VerktoyDetailsPageWrapper","verktoyLoading","VerktoyDetailsContainer","useParams","VerktoyElement","useQueryParam","getQuery","setQuery","newVal","kanSetteParam","setEllerSlettQueryParam","protocol","host","newUrl","fjernSorterstigendeNarStandard","settKey","slettKey","erSortering","useQueryParamMulti","queryMaps","queryMapRule","arrayHasValue","array","f","erMinstEttFilterParameterSattUtenomSortering","verktoyFilter","setDefaultFilters","filters","keyprefix","filterValueFromUrl","filterValgt","fagqp","e","defaultValues","VerktoyFilter","antallVerktoy","changeFilterFn","isLoading","paramsLowerCase","kreverForskrivningChecked","setKreverForskrivningChecked","stotterAnonymOppstartChecked","setStotterAnonymOppstartChecked","fagomraderValgt","setFagomraderValgt","verktoytyperValgt","setVerktoyTyperValgt","malgrupperValgt","setMalgrupperValgt","searchValueUrl","setSearchValueUrl","valgtSortering","setValgtSortering","valgtSorterstigende","setValgtSorterstigende","brukerKlikkerPaaSokKnapp","newFilters","callUpdateFilters","updateFilters","verktoyFiltersSettings","getDefaultSortKey","sortDirection","setFilter","activeFilters","setDelayedFilter","searchQuery","setSearchQuery","sortKey","setSortKey","useFilters","isFilterOpen","handleSetIsFilterOpen","isOpen","createSortKey","field","direction","standardSort","verktoyNavnAsc","verktoyNavnDesc","publisertDatoAsc","publisertDatoDesc","parseSortValue","getFilterValue","allValues","queryParam","dropdownActiveDisplayname","getCurrentFilterSelection","fagomraderValues","malgrupperValues","verktoytyperValues","isAnonymCheckboxChecked","isInnloggetCheckboxChecked","currentFilter","Spacer","Filters","Status","showFilters","FilterSearch","kombinertSokOgFilter","Checkbox","Label","i","a","VerktoyList","isFirstUpdate","setIsFirstUpdate","laeringsAktiviteter","verktoyListeLoading","returnLocationFromSessionStorage","verktoySomSkalVises","handleFilterChange","handleFetch","handleScrollAndFocus","palette","VerktoyListContainer","AuthorizedRoute","redirectTo","Outlet","Navigate","routeObject","PageNotFound","router","createBrowserRouter","RouterWrapper","RouterProvider","renderApp","anchor","createRoot","Provider"],"ignoreList":[],"sources":["../../../src/types/minhelseentities.ts","../../../src/types/apiTypes.ts","../../../src/types/project-name-constants.ts","../../../src/utils/languageUtils.ts","../../../src/hooks/useFilterObject.ts","../../../src/utils/verktoyFilters.ts","../../../src/resources/index.ts","../../../src/store/verktoy/thunks.ts","../../../src/store/verktoy/slice/verktoySlice.ts","../../../src/store/index.ts","../../../src/hooks/useGetResources.ts","../../../src/components/container/assurance-element.tsx","../../../src/types/types.ts","../../../src/utils/category-utils.ts","../../../src/components/entry-page/categories.tsx","../../../src/types/url.ts","../../../src/hooks/useLogin.tsx","../../../src/components/container/loginButton.tsx","../../../src/store/selectors.ts","../../../src/assets/verktoyplaceholder400x400.png","../../../src/components/entry-page/VerktoyLogo.tsx","../../../src/components/entry-page/LaeringsAktivitet.tsx","../../../src/components/entry-page/mineVerktoy-preview.tsx","../../../src/components/entry-page/moreInfo.tsx","../../../src/components/entry-page/entryPage.tsx","../../../src/components/modals/add-verktoy-confirmation.tsx","../../../src/utils/utils.ts","../../../src/components/modals/delete-verktoy-confirmation.tsx","../../../src/components/modals/modals-container.tsx","../../../src/utils/constants.ts","../../../src/utils/verktoyContainer-utils.ts","../../../src/components/container/entry-page-container.tsx","../../../src/utils/queryParamUtil.ts","../../../src/components/verktoy-item/launch-container.tsx","../../../src/components/verktoy-item/verktoy-info-element.tsx","../../../src/components/tags-component/tag-component.tsx","../../../src/components/tags-component/antattTid-tag.tsx","../../../src/components/tags-component/fagomrade-tag.tsx","../../../src/components/tags-component/formal-tag.tsx","../../../src/components/tags-component/innholdstype-tag.tsx","../../../src/components/tags-component/malgruppe-tag.tsx","../../../src/components/tags-component/sprak-tag.tsx","../../../src/components/tags-component/verktoyType-tag.tsx","../../../src/components/tags-component/tags-component.tsx","../../../src/components/verktoy-liste/add-verktoy-element.tsx","../../../src/components/verktoy-liste/delete-verktoy-element.tsx","../../../src/components/verktoy-item/verktoy-details.tsx","../../../src/components/aktivitet-liste/laeringsaktivitet-element.tsx","../../../src/components/aktivitet-liste/laeringsaktivitet-list.tsx","../../../src/components/container/laeringsaktivitet-list-container.tsx","../../../src/components/modals/avvis_oppgave_confirmation.tsx","../../../src/components/modals/enroll-oppgave-option.tsx","../../../src/components/modals/verktoyoppgave-modal-container.tsx","../../../src/utils/aapneVerktoy-utils.ts","../../../src/utils/launch-aktivitet.ts","../../../src/utils/personvern.ts","../../../src/components/verktoy-item/markdownContent.tsx","../../../src/components/verktoy-item/open-utvidetinfo-link.tsx","../../../src/assets/appstore.svg","../../../src/assets/googleplay.png","../../../src/components/verktoy-item/open-verktoy-buttons.tsx","../../../src/components/verktoy-item/verktoy-details-page.tsx","../../../src/components/verktoy-item/verktoy-details-page-wrapper.tsx","../../../src/components/container/verktoydetails-container.tsx","../../../src/components/verktoy-liste/verktoy-element.tsx","../../../src/hooks/useQueryParams.ts","../../../src/hooks/useQueryParamsMultiValue.ts","../../../src/utils/filter-utils.ts","../../../src/components/verktoy-liste/verktoy-filter.tsx","../../../src/components/verktoy-liste/verktoy-list.tsx","../../../src/components/container/verktoylist-container.tsx","../../../src/routes.tsx","../../../src/index.tsx"],"sourcesContent":["export class TjenesteType {\n static TekniskTjeneste = -1;\n static IkkeInnloggetTjeneste = 0;\n static Timeavtaler = 1;\n static Fastlegetjenester = 6;\n static Legemidler = 7;\n static PersonligHelsearkiv = 8;\n static Fastlegevisning = 9;\n static InnsynPasientjournal = 10;\n static InnsynKjernejournal = 11;\n static Egenandeler = 12;\n static Profil = 13;\n static MinHelseForside = 15;\n static EksterneTjenester = 16;\n static Henvisninger = 17;\n static Pasientreiser = 18;\n static Forlopskoordinator = 19;\n static Meldinger = 20;\n static ByttFastlege = 21;\n static DialogForlop = 22;\n static DialogHelsehjelp = 23;\n static Fullmaktsadministrasjon = 24;\n static Helsekontakter = 25;\n static DialogOkonomi = 26;\n static Beslutningsstotte = 27;\n static DialogInnsyn = 28;\n static DialogPersonvern = 29;\n static Helseregistre = 30;\n static LoggOverBrukAvResepter = 31;\n static SykdomOgKritiskInformasjon = 32;\n static Forskning = 33;\n static MinHelse = 34;\n static Timeadministrasjon = 35;\n static Foreldresamtykke = 36;\n static DialogEgenHelseUngdom = 37;\n static KprTjenester = 38;\n static Vaksiner = 39;\n static LegemidlerLiB = 40;\n static InnsynRegisterinnhold = 41;\n static InnsynRegisterbruk = 42;\n static EKonsultasjon = 43;\n static Reseptfornyelse = 44;\n static EKontakt = 45;\n static Timebestilling = 46;\n static KritiskInfo = 47;\n static AapneKjernejournal = 48;\n static ProfildataOgKjernejournal = 49;\n static HelsekontakterIKjernejournal = 50;\n static LegemidlerFraKjernejournal = 51;\n static ProfildataOgKjernejournalReservasjon = 52;\n static PersonopplysningerFraKjernejournal = 53;\n static Donorkort = 54;\n static Samtykkeforesporsel = 55;\n static DialogForlopInformasjon = 56;\n static Pasientreiseradministrasjon = 57;\n static NyttHelsenorgeSamtykke = 58;\n static InngripendeForPersonvern = 59;\n static Skjemautfyller = 60;\n static SamvalgUtenLagring = 61;\n static MeldeFeilIBesokshistorikkKj = 62;\n static Verktoy = 63;\n static VerktoyUtforelse = 64;\n static InnsynRegisterinnholdReseptformidler = 65;\n}\n\nexport enum StatusType {\n UnderArbeid = 1,\n Publisert = 2,\n ErstattetAvNyereVersjon = 3,\n TrukketTilbake = 4,\n}\n\nexport enum BehandlerInnsynType {\n Ingen = 1,\n Krever = 2,\n TilbysIVerktoy = 3,\n}\n\nexport enum OppstartType {\n Ingen = 1,\n DirekteUrl = 2,\n Skjema = 3,\n LTIv1_1 = 4,\n OIDC = 5,\n}\n\nexport enum VerktoyKategori {\n IngenBrukerprofil = 1,\n LokalBrukerprofil = 2,\n EgenBrukerprofil = 3,\n SentralBrukerprofil = 4,\n SentralPseudonymisertBrukerprofil = 5,\n}\n\nexport enum LaeringsaktivitetStatusType {\n Unknown = 0,\n Enrolled = 1,\n Started = 2,\n Completed = 3,\n}\n\nexport enum OpprettetAvType {\n Unknown = 0,\n ProfilGuid = 1,\n Organization = 2,\n Hpr = 3,\n PseudoId = 4,\n Foedselnummer = 5,\n}\n\nexport enum VerktoyFormal {\n Informasjon = 1,\n Laring = 2,\n Veiledning = 3,\n Behandling = 4,\n Kartlegging = 5,\n Sjekkpunkt = 6,\n Kontrollsporsmal = 7,\n}\n\nexport enum FagomradeType {\n PSYKISK_HELSE = 1,\n SYKDOM_OG_SKADER = 2,\n LIVSSTIL_OG_TRENING = 3,\n TANKER_OG_FOLELSER = 4,\n GRAVIDITET_OG_FODSEL = 5,\n RAAD_OG_TIPS_I_HVERDAGEN = 6,\n}\n\nexport enum Innholdstype {\n Informasjon = 1,\n Video = 2,\n Podkast = 3,\n Oppgaver = 4,\n Spill = 5,\n Chat = 6,\n Forum = 7,\n Egenregistreringer = 8,\n Maaleverktoy = 9,\n AnbefalningerOgRaad = 10,\n}\n\nexport enum MalgruppeType {\n Barn = 1,\n Ungdom = 2,\n Voksne = 3,\n Eldre = 4,\n}\n\nexport enum SprakType {\n NorskBokmal = 1,\n NorskNynorsk = 2,\n Engelsk = 3,\n}\n\nexport enum GrafiskElementType {\n Ikon = 1,\n Bilde = 2,\n}\n\nexport enum LenkeType {\n Standard = 1,\n NedlastingAppAndroid = 2,\n NedlastingAppIphone = 3,\n Utvidetinformasjon = 4,\n}\n\nexport interface Verktoy {\n VerktoyId: string;\n Navn: string;\n Ingress: string;\n Beskrivelse: string;\n StatusType: StatusType;\n VerktoyFormal: VerktoyFormal;\n FagligAnsvarlig: string;\n UtvikletAv: string;\n SprakTyper: Array;\n OppstartType: OppstartType;\n VerktoyKategori: VerktoyKategori;\n InterntVerktoy: boolean;\n Fagomrader: Array;\n Malgrupper: Array;\n GrafiskeElementer: Array;\n Laeringsressurs: Laeringsressurs;\n Laeringsaktivitet?: Laeringsaktivitet;\n OpprettetDato: string;\n EndretDato: string;\n PublisertDato: string;\n HovedType: HovedType;\n KanUtforesRepresentasjon: boolean;\n KanStartesAvInnloggetBruker: boolean;\n HarBegrensetTilgang: boolean;\n Lenker: Array;\n GyldigFraDato?: string;\n GyldigTilDato?: string;\n VisSprak: boolean;\n}\n\nexport interface Laeringsressurs {\n Url: string;\n AntattTid: number;\n VerktoyTyper: Array;\n Innholdstyper: Array;\n BehandlerInnsynType: BehandlerInnsynType;\n KreverForskrivning: boolean;\n DataansvarligNavn: string;\n}\n\nexport interface Lenke {\n LenkeType: LenkeType;\n Url: string;\n}\n\nexport interface Laeringsaktivitet {\n LaeringsaktivitetId: number;\n OpprettetAvTypeId: OpprettetAvType;\n OpprettetAvNavn: string;\n Opprettet: string;\n Status: LaeringsaktivitetStatusType;\n}\n\nexport interface GraphicalElement {\n Id: number;\n TypeId: GrafiskElementType;\n B64Content: string;\n MimeType: string;\n AlternativTekst: string;\n}\n\nexport interface VerktoyRequestFilters {\n Sok?: string;\n Fagomrader?: Array;\n Malgrupper?: Array;\n VerktoyTyper?: Array;\n StotterAnonymOppstart?: boolean;\n KreverForskrivning?: boolean;\n Sortering?: string;\n SorterStigende?: boolean;\n}\n\nexport enum HovedType {\n Veiledningstjeneste = 1,\n Laeringsressurs = 2,\n Skjema = 3,\n Triagering = 4,\n}\n\nexport enum VerktoyType {\n App = 1,\n Weblosning = 2,\n}\n\nexport enum SorteringType {\n Standard = 0,\n PublisertDato = 1,\n VerktoyNavn = 2,\n}\n\n/*** Interface for et oppsett for hvordan query parameter verdiene skal mappes til korrekte enum verdier */\nexport interface QueryMapSetup {\n value: string;\n name: string;\n displayname: string;\n}\n","import { Action } from '@reduxjs/toolkit';\n\nimport { HelsenorgeHttpError, HelsenorgeProxyError } from '@helsenorge/framework-utils/hn-proxy-service';\n\nimport { Laeringsaktivitet, Verktoy } from './minhelseentities';\nimport { VerktoyFilterState } from './stateTypes';\n\nexport const VERKTOY_PROXY_NAME = 'verktoynetcore';\nexport const SCOPE_VERKTOYUTFORELSE = 'verktoyutforelse';\n\nexport const ANONYM_VERKTOYLISTE = 'api/v1/AnonymVerktoyliste';\nexport const VERKTOYLISTE = 'api/v1/MinHelse/Verktoyliste';\nexport const MINE_VERKTOY = 'api/v1/MineVerktoy';\nexport const VERKTOY = 'api/v1/MinHelse/Verktoy';\nexport const ANONYM_VERKTOY = 'api/v1/MinHelse/AnonymVerktoy';\nexport const AVVIS_OPPGAVE = 'api/v1/MinHelse/AvvisOppgave';\nexport const ANONYM_GRAFISKELEMENT = 'api/v1/GrafiskElement/AnonymBruk';\n\nexport interface GetVerktoyListeOperationResponse extends Response {\n Verktoyliste: Verktoy[];\n}\n\nexport interface GetVerktoyOperationResponse extends Response {\n Verktoy: Verktoy;\n}\n\nexport interface GetVerktoyLaunchOperationResponse extends Response {\n LaunchScript: string;\n RedirectUrl: string | null;\n}\n\nexport interface AddLaeringsaktivitetOperationRequest {\n VerktoyId: string;\n OppgaveId?: string;\n}\n\nexport interface AddLaeringsaktivitetOperationResponse extends Verktoy {\n Laeringsaktivitet: Laeringsaktivitet;\n}\n\nexport interface DeleteLaeringsaktivitetRequest {\n LaeringsaktivitetId: number;\n}\n\nexport interface AvvisOppgaveRequest {\n OppgaveId: string;\n VerktoyId: string;\n}\n\nexport type AvvisOppgaveResponse = Response;\n\nexport type VerktoyProxyErrorResponse = HelsenorgeProxyError | HelsenorgeHttpError | Error;\n\nexport enum HttpStatusCode {\n not_found = '404',\n}\nexport interface VerktoyAction extends Action {\n type: string;\n error?: VerktoyProxyErrorResponse;\n verktoyListe?: Array;\n laeringsaktiviteter?: Array;\n verktoy?: Verktoy;\n aktivitetId?: number;\n verktoyFilters?: VerktoyFilterState;\n isFilterOpen?: boolean;\n enteredDetailsPageFrom?: string;\n}\n","export const verktoyFrontendProject = 'HN.Verktoy.Frontend';\n","import LanguageLocales from '@helsenorge/core-utils/constants/languages';\n\nexport const stringToLanguageLocales = (languageString?: string | LanguageLocales): LanguageLocales => {\n const language = languageString?.toString().toLowerCase();\n switch (language) {\n case LanguageLocales.NORWEGIAN_NYNORSK.toLowerCase():\n return LanguageLocales.NORWEGIAN_NYNORSK;\n case LanguageLocales.ENGLISH.toLowerCase():\n return LanguageLocales.ENGLISH;\n case LanguageLocales.LITHUANIAN.toLowerCase():\n return LanguageLocales.LITHUANIAN;\n case LanguageLocales.POLISH.toLowerCase():\n return LanguageLocales.POLISH;\n case LanguageLocales.RUSSIAN.toLowerCase():\n return LanguageLocales.RUSSIAN;\n case LanguageLocales.ROMANIAN.toLowerCase():\n return LanguageLocales.ROMANIAN;\n case LanguageLocales.SAMI_NORTHERN.toLowerCase():\n return LanguageLocales.SAMI_NORTHERN;\n default:\n return LanguageLocales.NORWEGIAN;\n }\n};\n","export const convertFromStringToBool = (val?: string): boolean => {\n return val === undefined ? false : val.toLowerCase() === 'true';\n};\n","import { VerktoyRequestFilters } from '../types/minhelseentities';\nimport { VerktoyFilterState } from '../types/stateTypes';\n\nimport { convertFromStringToBool } from '../hooks/useFilterObject';\n\nexport const filterToRequestParam = (isLoggedIn: boolean, verktoyFilters?: VerktoyFilterState): VerktoyRequestFilters => {\n return verktoyFilters\n ? {\n ...(isLoggedIn && verktoyFilters.IsInnloggetCheckboxChecked && { KreverForskrivning: false }),\n ...(!isLoggedIn && verktoyFilters.IsAnonymCheckboxChecked && { StotterAnonymOppstart: true }),\n ...(verktoyFilters.SokeString && { Sok: encodeURIComponent(verktoyFilters.SokeString) }),\n ...(verktoyFilters.Fagomrader.length > 0 && { Fagomrader: verktoyFilters.Fagomrader }),\n ...(verktoyFilters.VerktoyTyper.length > 0 && { VerktoyTyper: verktoyFilters.VerktoyTyper }),\n ...(verktoyFilters.Malgrupper.length > 0 && { Malgrupper: verktoyFilters.Malgrupper }),\n ...(verktoyFilters.Sortering && { Sortering: verktoyFilters.Sortering }),\n ...(verktoyFilters.SorterStigende && { SorterStigende: convertFromStringToBool(verktoyFilters.SorterStigende) }),\n }\n : {};\n};\n\nexport const filterToRequestParamForSessionStorage = (isLoggedIn: boolean, verktoyFilters?: VerktoyFilterState): VerktoyRequestFilters => {\n return verktoyFilters\n ? {\n ...(isLoggedIn && verktoyFilters.IsInnloggetCheckboxChecked && { KreverForskrivning: false }),\n ...(!isLoggedIn && verktoyFilters.IsAnonymCheckboxChecked && { StotterAnonymOppstart: true }),\n ...(verktoyFilters.SokeString && { Sok: encodeURIComponent(verktoyFilters.SokeString) }),\n ...(verktoyFilters.Fagomrader?.length > 0 && { Fagomrade: verktoyFilters.Fagomrader }),\n ...(verktoyFilters.VerktoyTyper?.length > 0 && { Verktoytype: verktoyFilters.VerktoyTyper }),\n ...(verktoyFilters.Malgrupper?.length > 0 && { Malgruppe: verktoyFilters.Malgrupper }),\n ...(verktoyFilters.Sortering && { Sortering: verktoyFilters.Sortering }),\n ...(verktoyFilters.SorterStigende && { SorterStigende: convertFromStringToBool(verktoyFilters.SorterStigende) }),\n }\n : {};\n};\n","import { HNVerktoyFrontend } from '../types/Resources';\n\nimport LanguageLocales from '@helsenorge/core-utils/constants/languages';\nimport { getModifiedResourcesForTest } from '@helsenorge/framework-utils/resources';\n\nimport defaultResources from './HN.Verktoy.Frontend.nb-NO.json';\n\ntype ResourceItem = { [key: string]: string } | Record;\nexport const DEFAULT_PROJECT_NAME = 'HN.Verktoy.Frontend';\nconst LANGUAGE = LanguageLocales.NORWEGIAN;\n\nconst getResourceItem = (projectName: string, language: LanguageLocales): HNVerktoyFrontend | undefined => {\n if (projectName === DEFAULT_PROJECT_NAME && language === LANGUAGE) {\n return defaultResources satisfies HNVerktoyFrontend;\n }\n};\n\nexport const getResources = async (projectName: string, language: LanguageLocales): Promise => {\n const resources = getResourceItem(projectName, language);\n\n if (resources) {\n return Promise.resolve(resources as unknown as T);\n }\n\n try {\n const resources: { default: T } = await import(`./${projectName}.${language}.json`);\n\n return resources.default;\n } catch (error) {\n throw new Error(`Failed to load resources for ${projectName} in ${language}: ${error}`);\n }\n};\nexport function getResourcesTestHelper(): HNVerktoyFrontend {\n return getModifiedResourcesForTest(defaultResources) as HNVerktoyFrontend;\n}\n","import { createAsyncThunk } from '@reduxjs/toolkit';\nimport {\n GetVerktoyListeOperationResponse,\n AddLaeringsaktivitetOperationResponse,\n AddLaeringsaktivitetOperationRequest,\n DeleteLaeringsaktivitetRequest,\n VERKTOY_PROXY_NAME,\n VerktoyProxyErrorResponse,\n VERKTOYLISTE,\n ANONYM_VERKTOYLISTE,\n MINE_VERKTOY,\n GetVerktoyOperationResponse,\n ANONYM_VERKTOY,\n VERKTOY,\n AvvisOppgaveResponse,\n AvvisOppgaveRequest,\n AVVIS_OPPGAVE,\n} from '@src/types/apiTypes';\nimport { Verktoy } from '@src/types/minhelseentities';\nimport { verktoyFrontendProject } from '@src/types/project-name-constants';\nimport { VerktoyFilterState } from '@src/types/stateTypes';\nimport { stringToLanguageLocales } from '@utils/languageUtils';\nimport { filterToRequestParam } from '@utils/verktoyFilters';\n\nimport LanguageLocales from '@helsenorge/core-utils/constants/languages';\nimport { get, post, remove } from '@helsenorge/framework-utils/hn-proxy-service';\nimport { fetchResources } from '@helsenorge/framework-utils/resources';\nimport { TextMessage } from '@helsenorge/framework-utils/types/entities';\n\nimport { AppDispatch, VerktoyRootState } from '..';\nimport { getResources } from '../../resources';\n\ntype FetchVerktoyListeThunkPayload = { isLoggedIn: boolean; verktoyFilters?: VerktoyFilterState };\n\nexport const fetchVerktoyListeThunk = createAsyncThunk<\n GetVerktoyListeOperationResponse,\n FetchVerktoyListeThunkPayload,\n {\n dispatch: AppDispatch;\n rejectValue: VerktoyProxyErrorResponse | Error;\n fulfillWithValue: GetVerktoyListeOperationResponse;\n state: VerktoyRootState;\n }\n>(\n 'verktoy/fetchVerktoyListe',\n async ({ verktoyFilters, isLoggedIn }, { rejectWithValue, fulfillWithValue }) => {\n try {\n const params = filterToRequestParam(isLoggedIn, verktoyFilters);\n const requestParams = { ...params } as Record;\n\n const response = isLoggedIn\n ? await get(VERKTOY_PROXY_NAME, VERKTOYLISTE, requestParams)\n : await get(VERKTOY_PROXY_NAME, ANONYM_VERKTOYLISTE, requestParams);\n\n if (response === null) {\n return rejectWithValue(new Error('No data returned'));\n }\n return fulfillWithValue(response);\n } catch (error) {\n return rejectWithValue(error as VerktoyProxyErrorResponse);\n }\n },\n {\n condition: (_, { getState }) => {\n return !getState().verktoy.verktoyListeLoading;\n },\n }\n);\n\nexport const fetchLaeringsaktiviteterThunk = createAsyncThunk<\n GetVerktoyListeOperationResponse,\n void,\n {\n dispatch: AppDispatch;\n rejectValue: VerktoyProxyErrorResponse | Error;\n fulfillWithValue: GetVerktoyListeOperationResponse;\n state: VerktoyRootState;\n }\n>(\n 'verktoy/fetchLaeringsaktiviteter',\n async (_, { rejectWithValue, fulfillWithValue }) => {\n try {\n const data = await get(VERKTOY_PROXY_NAME, MINE_VERKTOY);\n if (data === null) {\n return rejectWithValue(new Error('No data returned'));\n }\n return fulfillWithValue(data);\n } catch (error) {\n return rejectWithValue(error as VerktoyProxyErrorResponse);\n }\n },\n {\n condition: (_, { getState }) => {\n return !getState().verktoy.laeringsaktiviteterLoading;\n },\n }\n);\n\nexport const fetchVerktoyThunk = createAsyncThunk<\n GetVerktoyOperationResponse,\n { isLoggedIn: boolean; verktoyId: string },\n {\n dispatch: AppDispatch;\n rejectValue: VerktoyProxyErrorResponse | Error;\n fulfillWithValue: GetVerktoyListeOperationResponse;\n state: VerktoyRootState;\n }\n>(\n 'verktoy/fetchVerktoy',\n async ({ verktoyId, isLoggedIn }, { rejectWithValue, fulfillWithValue }) => {\n try {\n const response = isLoggedIn\n ? await get(VERKTOY_PROXY_NAME, VERKTOY, {\n VerktoyId: verktoyId,\n IncludeLaeringsaktivitet: true,\n })\n : await get(VERKTOY_PROXY_NAME, ANONYM_VERKTOY, {\n VerktoyId: verktoyId,\n IncludeLaeringsaktivitet: true,\n });\n\n if (response === null) {\n return rejectWithValue(new Error('No data returned'));\n }\n return fulfillWithValue(response);\n } catch (error) {\n return rejectWithValue(error as VerktoyProxyErrorResponse);\n }\n },\n {\n condition: ({ verktoyId }, { getState }) => {\n return !getState().verktoy.verktoyLoading && !!verktoyId;\n },\n }\n);\n\ntype AddLaeringsaktivitetThunkPayload = { verktoy: Verktoy; oppgaveId?: string };\n\nexport const addLaeringsaktivitetThunk = createAsyncThunk<\n AddLaeringsaktivitetOperationResponse,\n AddLaeringsaktivitetThunkPayload,\n {\n dispatch: AppDispatch;\n rejectValue: VerktoyProxyErrorResponse | Error;\n fulfillWithValue: AddLaeringsaktivitetOperationResponse;\n state: VerktoyRootState;\n }\n>(\n 'verktoy/addLaeringsaktivitet',\n async ({ verktoy, oppgaveId }, { rejectWithValue, fulfillWithValue }) => {\n try {\n const response = await post(\n VERKTOY_PROXY_NAME,\n VERKTOY,\n {\n VerktoyId: verktoy.VerktoyId,\n OppgaveId: oppgaveId,\n }\n );\n if (response === null) {\n return rejectWithValue(new Error('No data returned'));\n }\n const updatedVerktoy: AddLaeringsaktivitetOperationResponse = {\n ...verktoy,\n Laeringsaktivitet: response.Laeringsaktivitet,\n };\n return fulfillWithValue(updatedVerktoy);\n } catch (error) {\n return rejectWithValue(error as VerktoyProxyErrorResponse);\n }\n },\n {\n condition: ({ verktoy }, { getState }) => {\n return !getState().verktoy.isWaitingForAktivitetResponse && !!verktoy.VerktoyId;\n },\n }\n);\n\ntype AvvisOppgavePayload = { verktoy: Verktoy; oppgaveId: string };\n\nexport const avvisOppgaveLaeringsaktivitetThunk = createAsyncThunk<\n null,\n AvvisOppgavePayload,\n {\n dispatch: AppDispatch;\n rejectValue: VerktoyProxyErrorResponse | Error;\n fulfillWithValue: void;\n }\n>(\n 'verktoy/avvisOppgaveLaeringsaktivitet',\n async ({ verktoy, oppgaveId }, { rejectWithValue, fulfillWithValue }) => {\n try {\n await post(VERKTOY_PROXY_NAME, AVVIS_OPPGAVE, {\n VerktoyId: verktoy.VerktoyId,\n OppgaveId: oppgaveId,\n });\n return fulfillWithValue(null);\n } catch (error) {\n return rejectWithValue(error as VerktoyProxyErrorResponse);\n }\n },\n {\n condition: ({ verktoy }) => {\n return !!verktoy.VerktoyId;\n },\n }\n);\n\ntype RemoveLaeringsaktivitetPayload = { aktivitetsId: number };\ntype RemoveLaeringsaktivitetResponse = { aktivitetsId: number };\n\nexport const removeLaeringsaktivitetThunk = createAsyncThunk<\n RemoveLaeringsaktivitetResponse,\n RemoveLaeringsaktivitetPayload,\n {\n dispatch: AppDispatch;\n rejectValue: VerktoyProxyErrorResponse | Error;\n fulfillWithValue: void;\n state: VerktoyRootState;\n }\n>(\n 'verktoy/removeLaeringsaktivitet',\n async ({ aktivitetsId }, { rejectWithValue, fulfillWithValue }) => {\n try {\n await remove(VERKTOY_PROXY_NAME, VERKTOY, {\n LaeringsaktivitetId: aktivitetsId,\n });\n return fulfillWithValue({ aktivitetsId });\n } catch (error) {\n return rejectWithValue(error as VerktoyProxyErrorResponse);\n }\n },\n {\n condition: ({ aktivitetsId }, { getState }) => {\n return !!aktivitetsId && !getState().verktoy.isWaitingForAktivitetResponse;\n },\n }\n);\n\ntype LoadResourcesPayload = {\n language: LanguageLocales | string;\n};\n\nexport const loadResources = createAsyncThunk<\n void,\n LoadResourcesPayload,\n {\n rejectValue: undefined | TextMessage;\n dispatch: AppDispatch;\n }\n>('verktoy/loadResources', async ({ language }, { dispatch, rejectWithValue }) => {\n try {\n dispatch(fetchResources({ project: verktoyFrontendProject, language: stringToLanguageLocales(language), getResources }));\n } catch (error) {\n return rejectWithValue(error as TextMessage | undefined);\n }\n});\n","import { createSlice, PayloadAction } from '@reduxjs/toolkit';\nimport { LaeringsaktivitetStatusType, Verktoy } from '@src/types/minhelseentities';\nimport { VerktoyFilterState, VerktoyState } from '@src/types/stateTypes';\n\nimport {\n addLaeringsaktivitetThunk,\n avvisOppgaveLaeringsaktivitetThunk,\n fetchLaeringsaktiviteterThunk,\n fetchVerktoyListeThunk,\n fetchVerktoyThunk,\n removeLaeringsaktivitetThunk,\n} from '../thunks';\n\nexport type VerktoyStatePayload = {\n verktoyFilters?: VerktoyFilterState;\n isFilterOpen?: boolean;\n};\nexport const getDefaultVerktoyFilters = (): VerktoyFilterState => {\n return {\n SokeString: '',\n IsInnloggetCheckboxChecked: false,\n IsAnonymCheckboxChecked: false,\n Fagomrader: [],\n VerktoyTyper: [],\n Malgrupper: [],\n };\n};\nexport const initialState: VerktoyState = {\n error: undefined,\n verktoyListe: [],\n laeringsaktiviteter: [],\n verktoy: undefined,\n verktoyListeLoading: false,\n laeringsaktiviteterLoading: false,\n verktoyLoading: false,\n isWaitingForAktivitetResponse: false,\n isOppgaveAvvisSuccess: false,\n isOppgaveEnrollmentSuccess: false,\n addedAktivitetName: '',\n aktivitetToRemove: undefined,\n isFilterOpen: false,\n verktoyFilters: {\n SokeString: '',\n IsInnloggetCheckboxChecked: false,\n IsAnonymCheckboxChecked: false,\n Fagomrader: [],\n VerktoyTyper: [],\n Malgrupper: [],\n },\n enteredDetailsPageFrom: '',\n};\nconst reducer = createSlice({\n name: 'verktoy',\n initialState,\n reducers: {\n setVerktoyFilters: (state, action: PayloadAction<{ verktoyFilters?: VerktoyFilterState }>) => {\n state.verktoyFilters = action.payload.verktoyFilters || initialState.verktoyFilters;\n },\n setIsFilterOpen: (state, action: PayloadAction<{ isFilterOpen: boolean }>) => {\n state.isFilterOpen = !!action.payload.isFilterOpen;\n },\n closeLightboxes: state => {\n state.addedAktivitetName = '';\n state.aktivitetToRemove = undefined;\n },\n showRemoveAktivitetConfirmation: (state, action: PayloadAction<{ verktoy: Verktoy }>) => {\n state.aktivitetToRemove = action.payload.verktoy;\n },\n setEnteredDetailsPageFrom: (state, action: PayloadAction<{ url?: string }>) => {\n state.enteredDetailsPageFrom = action.payload.url || '';\n },\n setStartAktivitet: (state, action: PayloadAction<{ aktivitetId: number }>) => {\n const nyLaeringsaktivitetListe = state.laeringsaktiviteter.map(item => {\n return item.Laeringsaktivitet && item.Laeringsaktivitet.LaeringsaktivitetId === action.payload.aktivitetId\n ? { ...item, Laeringsaktivitet: { ...item.Laeringsaktivitet, Status: LaeringsaktivitetStatusType.Started } }\n : item;\n });\n return {\n ...state,\n laeringsaktiviteter: nyLaeringsaktivitetListe,\n };\n },\n },\n extraReducers(builder) {\n builder.addCase(fetchVerktoyListeThunk.pending, (state, action) => {\n state.verktoyListeLoading = true;\n state.verktoyFilters = action.meta.arg.verktoyFilters ? action.meta.arg.verktoyFilters : initialState.verktoyFilters;\n state.isOppgaveEnrollmentSuccess = undefined;\n });\n builder.addCase(fetchVerktoyListeThunk.fulfilled, (state, action) => {\n state.verktoyListe = action.payload.Verktoyliste ? action.payload.Verktoyliste : [];\n state.verktoyListeLoading = false;\n });\n builder.addCase(fetchVerktoyListeThunk.rejected, (state, action) => {\n state.error = action.payload;\n state.verktoyListeLoading = false;\n });\n builder.addCase(fetchLaeringsaktiviteterThunk.pending, state => {\n state.laeringsaktiviteterLoading = true;\n state.isOppgaveEnrollmentSuccess = undefined;\n });\n builder.addCase(fetchLaeringsaktiviteterThunk.fulfilled, (state, action) => {\n state.laeringsaktiviteterLoading = false;\n state.laeringsaktiviteter = action.payload.Verktoyliste;\n });\n builder.addCase(fetchLaeringsaktiviteterThunk.rejected, (state, action) => {\n state.error = action.payload;\n state.laeringsaktiviteterLoading = false;\n });\n builder.addCase(fetchVerktoyThunk.pending, state => {\n state.verktoyLoading = true;\n state.isOppgaveEnrollmentSuccess = undefined;\n });\n builder.addCase(fetchVerktoyThunk.fulfilled, (state, action) => {\n state.verktoy = action.payload.Verktoy ?? undefined;\n state.verktoyLoading = false;\n });\n builder.addCase(fetchVerktoyThunk.rejected, (state, action) => {\n state.error = action.payload;\n state.verktoyLoading = false;\n });\n builder.addCase(addLaeringsaktivitetThunk.pending, state => {\n state.isWaitingForAktivitetResponse = true;\n state.isOppgaveEnrollmentSuccess = undefined;\n });\n builder.addCase(addLaeringsaktivitetThunk.fulfilled, (state, action) => {\n if (action.meta.arg?.oppgaveId) {\n state.isOppgaveEnrollmentSuccess = true;\n }\n state.isWaitingForAktivitetResponse = false;\n state.addedAktivitetName = action.meta.arg.verktoy ? action.meta.arg.verktoy.Navn : '';\n if (action.meta.arg.verktoy) state.laeringsaktiviteter.push(action.payload);\n });\n builder.addCase(addLaeringsaktivitetThunk.rejected, (state, action) => {\n if (!action.meta.arg?.oppgaveId) {\n state.isOppgaveEnrollmentSuccess = false;\n }\n state.error = action.payload;\n state.isWaitingForAktivitetResponse = false;\n });\n\n builder.addCase(avvisOppgaveLaeringsaktivitetThunk.pending, state => {\n state.isOppgaveAvvisSuccess = undefined;\n state.isOppgaveEnrollmentSuccess = undefined;\n });\n builder.addCase(avvisOppgaveLaeringsaktivitetThunk.fulfilled, state => {\n state.isOppgaveAvvisSuccess = true;\n });\n builder.addCase(avvisOppgaveLaeringsaktivitetThunk.rejected, (state, action) => {\n state.isOppgaveAvvisSuccess = false;\n state.error = action.payload;\n });\n builder.addCase(removeLaeringsaktivitetThunk.pending, state => {\n state.aktivitetToRemove = undefined;\n state.isWaitingForAktivitetResponse = true;\n state.isOppgaveEnrollmentSuccess = undefined;\n });\n builder.addCase(removeLaeringsaktivitetThunk.fulfilled, (state, action) => {\n const nyLaeringsaktivitetListe = state.laeringsaktiviteter.filter(item => {\n return item.Laeringsaktivitet && item.Laeringsaktivitet.LaeringsaktivitetId !== action.payload.aktivitetsId;\n });\n\n state.isWaitingForAktivitetResponse = false;\n state.laeringsaktiviteter = nyLaeringsaktivitetListe;\n });\n builder.addCase(removeLaeringsaktivitetThunk.rejected, (state, action) => {\n state.isWaitingForAktivitetResponse = false;\n state.error = action.payload;\n });\n },\n});\nexport const verktoyReducer = reducer.reducer;\nexport const {\n setIsFilterOpen,\n closeLightboxes,\n setEnteredDetailsPageFrom,\n setStartAktivitet,\n setVerktoyFilters,\n showRemoveAktivitetConfirmation,\n} = reducer.actions;\n","import { combineReducers, configureStore } from '@reduxjs/toolkit';\nimport { useDispatch, useSelector } from 'react-redux';\n\nimport hjelpeskuff from '@helsenorge/core-framework/prosesshjelp/hjelpeskuff/hjelpeskuff-state';\nimport Languages from '@helsenorge/core-utils/constants/languages';\nimport cmsTjenesteTekster from '@helsenorge/framework-utils/cms-tjeneste-tekster';\nimport { createLanguageReducer } from '@helsenorge/framework-utils/language';\nimport resources from '@helsenorge/framework-utils/resources';\n\nimport { verktoyReducer } from './verktoy/slice/verktoySlice';\n\nconst rootReducer = combineReducers({\n language: createLanguageReducer([Languages.NORWEGIAN]),\n resources,\n hjelpeskuff,\n cmsTjenesteTekster,\n verktoy: verktoyReducer,\n});\n\nexport const store = configureStore({ reducer: rootReducer, middleware: getDefaultMiddleware => getDefaultMiddleware() });\n\nexport type VerktoyRootState = ReturnType;\nexport type AppDispatch = typeof store.dispatch;\nexport type AppStore = typeof store;\n\n// eslint-disable-next-line @typescript-eslint/explicit-function-return-type\nexport const useAppDispatch = () => useDispatch();\n\nexport function useAppSelector(selector: (state: VerktoyRootState) => TSelected): TSelected {\n return useSelector(selector);\n}\n\nexport default rootReducer;\n","import { DEFAULT_PROJECT_NAME, getResources } from '@resources/index';\nimport { HNVerktoyFrontend } from '@src/types/Resources';\n\nimport useResources from '@helsenorge/framework-utils/resources/useResources';\nexport const useGetResources = (projectName: string = DEFAULT_PROJECT_NAME): HNVerktoyFrontend | undefined => {\n const resources = useResources(projectName, getResources);\n return resources ?? undefined;\n};\n","import React from 'react';\n\nimport { useGetResources } from '@hooks/useGetResources';\n\nimport Icon from '@helsenorge/designsystem-react/components/Icon';\nimport Shield from '@helsenorge/designsystem-react/components/Icons/Shield';\n\ninterface Props {\n extraClass?: string;\n}\n\nconst AssuranceElement = ({ extraClass }: Props): React.JSX.Element => {\n const resources = useGetResources();\n return (\n
\n \n

{resources?.entryPage_personvern}

\n
\n );\n};\nexport default AssuranceElement;\n","import type { SvgPathProps } from '@helsenorge/designsystem-react/components/Icon';\n\nimport { FagomradeType } from './minhelseentities';\n\nexport enum TagGroup {\n topTags = 0,\n detailTags = 1,\n}\n\nexport enum PageRoutes {\n baseUrl = '/verktoy',\n entryPage = '/',\n finnVerktoy = '/finn-verktoy',\n mineVerktoy = '/mine-verktoy',\n oppgave = 'oppgave',\n}\n\nexport enum QueryStrings {\n fagomrade = '?Fagomrade=',\n}\n\nexport enum SessionStorageKeys {\n verktoyId = 'verktoyId',\n openLenkeTypeClicked = 'openLenkeTypeClicked',\n filtersAndSorting = 'filtersAndSorting',\n returnLocation = 'returnLocation',\n}\n\nexport interface CategoryCard {\n category: FagomradeType;\n title: string | undefined;\n icon: React.FC;\n}\n","import { FagomradeType } from '../types/minhelseentities';\nimport { HNVerktoyFrontend } from '../types/Resources';\nimport { CategoryCard } from '../types/types';\n\nimport BandAid from '@helsenorge/designsystem-react/components/Icons/BandAid';\nimport Heart from '@helsenorge/designsystem-react/components/Icons/Heart';\nimport HelpingHand from '@helsenorge/designsystem-react/components/Icons/HelpingHand';\nimport Hiker from '@helsenorge/designsystem-react/components/Icons/Hiker';\nimport MentalHealthAdult from '@helsenorge/designsystem-react/components/Icons/MentalHealthAdult';\nimport Pregnant from '@helsenorge/designsystem-react/components/Icons/Pregnant';\n\nexport const getCategoryCards = (resources?: HNVerktoyFrontend): CategoryCard[] => {\n const categoryCards: CategoryCard[] = [\n {\n category: FagomradeType.LIVSSTIL_OG_TRENING,\n title: resources?.fagomrade_livsstilOgTrening,\n icon: Hiker,\n },\n {\n category: FagomradeType.TANKER_OG_FOLELSER,\n title: resources?.fagomrade_tankerOgFolelser,\n icon: Heart,\n },\n {\n category: FagomradeType.GRAVIDITET_OG_FODSEL,\n title: resources?.fagomrade_graviditetOgFodsel,\n icon: Pregnant,\n },\n {\n category: FagomradeType.RAAD_OG_TIPS_I_HVERDAGEN,\n title: resources?.fagomrade_raadOgTipsIHverdagen,\n icon: HelpingHand,\n },\n {\n category: FagomradeType.SYKDOM_OG_SKADER,\n title: resources?.fagomrade_sykdomOgSkader,\n icon: BandAid,\n },\n {\n category: FagomradeType.PSYKISK_HELSE,\n title: resources?.fagomrade_psykiskHelse,\n icon: MentalHealthAdult,\n },\n ];\n return categoryCards;\n};\n\nexport const getCategoryName = (fagomradeType: FagomradeType, resources?: HNVerktoyFrontend): string | undefined => {\n switch (fagomradeType) {\n case FagomradeType.LIVSSTIL_OG_TRENING:\n return resources?.fagomrade_livsstilOgTrening;\n case FagomradeType.TANKER_OG_FOLELSER:\n return resources?.fagomrade_tankerOgFolelser;\n case FagomradeType.GRAVIDITET_OG_FODSEL:\n return resources?.fagomrade_graviditetOgFodsel;\n case FagomradeType.RAAD_OG_TIPS_I_HVERDAGEN:\n return resources?.fagomrade_raadOgTipsIHverdagen;\n case FagomradeType.SYKDOM_OG_SKADER:\n return resources?.fagomrade_sykdomOgSkader;\n case FagomradeType.PSYKISK_HELSE:\n return resources?.fagomrade_psykiskHelse;\n default:\n return '';\n }\n};\n","import React from 'react';\n\nimport AssuranceElement from '@components/container/assurance-element';\nimport { useGetResources } from '@hooks/useGetResources';\nimport { FagomradeType } from '@src/types/minhelseentities';\nimport { CategoryCard, PageRoutes, QueryStrings } from '@src/types/types';\nimport { useAppDispatch } from '@store';\nimport { getDefaultVerktoyFilters, setVerktoyFilters } from '@store/verktoy/slice/verktoySlice';\nimport { getCategoryCards } from '@utils/category-utils';\nimport { useNavigate } from 'react-router-dom';\n\nimport Button from '@helsenorge/designsystem-react/components/Button';\nimport Icon from '@helsenorge/designsystem-react/components/Icon';\nimport ArrowRight from '@helsenorge/designsystem-react/components/Icons/ArrowRight';\nimport LinkList from '@helsenorge/designsystem-react/components/LinkList';\nimport ListHeader from '@helsenorge/designsystem-react/components/ListHeader';\nimport Title from '@helsenorge/designsystem-react/components/Title';\n\nexport const Categories = (): React.JSX.Element => {\n const navigate = useNavigate();\n const dispatch = useAppDispatch();\n const resources = useGetResources();\n const categoryCards: CategoryCard[] = getCategoryCards(resources);\n\n const toAlleVerktoyLinkClicked = (): void => {\n const verktoyFilters = getDefaultVerktoyFilters();\n dispatch(setVerktoyFilters({ verktoyFilters }));\n navigate(PageRoutes.finnVerktoy);\n };\n\n const handleCategoryClick = (category: FagomradeType): void => {\n navigate(`${PageRoutes.finnVerktoy}${QueryStrings.fagomrade}${category}`);\n };\n\n return (\n
\n \n {resources?.finnVerktoy_header}\n \n \n \n {categoryCards?.map(card => (\n handleCategoryClick(card.category)} key={card.category} icon={}>\n \n \n {card.title}\n \n \n \n ))}\n \n \n {resources?.entryPage_alleVerktoy_link}\n \n \n
\n );\n};\n","export const tjenestePath: string = '?tjeneste=verktoy';\n","import { tjenestePath } from '@src/types/url';\n\nimport { getAppUrl } from '@helsenorge/framework-utils/url';\nimport { HNeventShowAppInvitation } from '@helsenorge/framework-utils/web-component/events';\n\nconst handleLogin = (returnUrl?: string): void => {\n if (returnUrl) {\n window.history.replaceState(window.history.state, '', returnUrl);\n } else {\n window.history.replaceState(window.history.state, '', `/auth/signin?Source=${encodeURIComponent(window.location.href)}`);\n }\n window.location.reload();\n};\n\nexport const useLogin = (): {\n login: (ref?: React.MutableRefObject, returnUrl?: string) => void;\n} => {\n const appUrl = getAppUrl();\n\n const login = (ref?: React.MutableRefObject, returnUrl?: string): void => {\n if (appUrl) {\n HNeventShowAppInvitation(\n () => {\n const fullAppUrl = appUrl + tjenestePath;\n window.location.href = fullAppUrl;\n },\n () => {\n handleLogin(returnUrl);\n },\n () => {\n ref?.current?.focus();\n }\n );\n } else {\n handleLogin(returnUrl);\n }\n };\n return { login };\n};\n","import { useRef } from 'react';\n\nimport { useGetResources } from '@hooks/useGetResources';\nimport { useLogin } from '@hooks/useLogin';\n\nimport Button from '@helsenorge/designsystem-react/components/Button';\nimport Icon from '@helsenorge/designsystem-react/components/Icon';\nimport Lock from '@helsenorge/designsystem-react/components/Icons/Lock';\n\nimport { isAuthorized } from '@helsenorge/framework-utils/hn-authorize';\n\nexport const LoginButton = (): React.JSX.Element | null => {\n const resources = useGetResources();\n const buttonRef = useRef(null);\n const { login } = useLogin();\n\n return !isAuthorized() ? (\n {\n login(buttonRef);\n }}\n >\n \n {resources?.loginButtonText}\n \n ) : null;\n};\n","import { createSelector } from '@reduxjs/toolkit';\nimport { Verktoy } from '@src/types/minhelseentities';\nimport { VerktoyState } from '@src/types/stateTypes';\n\nimport { VerktoyRootState } from '.';\n\nexport const getVerktoySelector = (state: VerktoyRootState): VerktoyState => state.verktoy;\n\nexport const getVerktoyForLaeringsaktivitetSelector = createSelector(\n [(state: VerktoyRootState): Verktoy[] => state.verktoy.laeringsaktiviteter, (_: VerktoyRootState, verktoyId): string => verktoyId],\n (laeringsaktiviteter, verktoyId) => {\n const verktoy = laeringsaktiviteter.filter(verktoy => verktoy.VerktoyId === verktoyId);\n if (verktoy.length === 1) {\n return {\n id: verktoy[0].VerktoyId,\n name: verktoy[0].Navn,\n };\n } else {\n return {\n id: '',\n name: '',\n };\n }\n }\n);\nexport const getVerktoyForVerktoyLogoSelector = createSelector(\n [(state: VerktoyRootState): Verktoy[] => state.verktoy.laeringsaktiviteter, (_: VerktoyRootState, verktoyId): string => verktoyId],\n (laeringsaktiviteter, verktoyId) => {\n const verktoy = laeringsaktiviteter.filter(verktoy => verktoy.VerktoyId === verktoyId);\n if (verktoy.length === 1) {\n return {\n grafiskeElementer: verktoy[0].GrafiskeElementer,\n };\n } else {\n return {\n id: '',\n name: '',\n };\n }\n }\n);\n\nexport const findAktivitetToRemoveIdSelector = createSelector(\n [\n (state: VerktoyRootState): Verktoy[] => state.verktoy.laeringsaktiviteter,\n (state: VerktoyRootState): Verktoy | undefined => state.verktoy.aktivitetToRemove,\n ],\n (laeringsaktiviteter, aktivitetToRemove) => {\n return laeringsaktiviteter.filter(item => item.VerktoyId === aktivitetToRemove?.VerktoyId)?.[0]?.Laeringsaktivitet?.LaeringsaktivitetId;\n }\n);\n","export default \"data:image/png;base64,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\"","import PlaceholderImg from '@assets/verktoyplaceholder400x400.png';\nimport { VERKTOY_PROXY_NAME } from '@src/types/apiTypes';\nimport { GrafiskElementType } from '@src/types/minhelseentities';\nimport { useAppSelector } from '@store';\nimport { getVerktoyForVerktoyLogoSelector } from '@store/selectors';\n\nimport { link } from '@helsenorge/framework-utils/hn-proxy-service';\n\ntype Props = {\n verktoyId: string;\n};\n\nexport const VerktoyLogo = ({ verktoyId }: Props): React.JSX.Element => {\n const { grafiskeElementer } = useAppSelector(state => getVerktoyForVerktoyLogoSelector(state, verktoyId));\n\n const logo = grafiskeElementer?.find(x => x.TypeId === GrafiskElementType.Ikon);\n return (\n <>\n {logo ? (\n \n ) : (\n \"defaultverktoyicon\"\n )}\n \n );\n};\n","import { useState } from 'react';\n\nimport { useGetResources } from '@hooks/useGetResources';\nimport { useAppDispatch, useAppSelector } from '@src/store';\nimport { PageRoutes } from '@src/types/types';\nimport { getVerktoyForLaeringsaktivitetSelector } from '@store/selectors';\nimport { setEnteredDetailsPageFrom } from '@store/verktoy/slice/verktoySlice';\nimport { Link } from 'react-router-dom';\n\nimport Icon from '@helsenorge/designsystem-react/components/Icon';\nimport ArrowRight from '@helsenorge/designsystem-react/components/Icons/ArrowRight';\nimport Title from '@helsenorge/designsystem-react/components/Title';\n\nimport { VerktoyLogo } from './VerktoyLogo';\n\ntype HoverStates = {\n [key: string]: boolean;\n};\n\ntype Props = {\n verktoyId: string;\n};\n\nexport const LaeringsAktivitet = ({ verktoyId }: Props): React.JSX.Element => {\n const dispatch = useAppDispatch();\n const resources = useGetResources();\n const { name } = useAppSelector(state => getVerktoyForLaeringsaktivitetSelector(state, verktoyId));\n const [hoverStates, setHoverStates] = useState({});\n const [focusStates, setFocusStates] = useState({});\n const isHovered = (verktoyId: string): boolean => {\n const isHovered = hoverStates[verktoyId] === true;\n const isFocused = focusStates[verktoyId] === true;\n return isHovered || isFocused;\n };\n const handleHover = (verktoyId: string, hover: boolean): void => {\n const verktoyIdAsNumber = parseInt(verktoyId);\n if (verktoyIdAsNumber && focusStates[verktoyIdAsNumber]) {\n return;\n } else {\n setHoverStates(prevStates => ({\n ...prevStates,\n [verktoyId]: hover,\n }));\n }\n };\n\n const handleFocus = (verktoyId: string, focus: boolean): void => {\n setFocusStates(prevStates => ({\n ...prevStates,\n [verktoyId]: focus,\n }));\n };\n\n const getVerktoyLink = (verktoyId: string): string => {\n return `${PageRoutes.entryPage}${verktoyId}`;\n };\n\n const laeringsAktivitetClicked = (): void => {\n dispatch(setEnteredDetailsPageFrom({ url: PageRoutes.entryPage }));\n };\n return (\n laeringsAktivitetClicked()}\n className=\"entryPage__category_card\"\n aria-label={resources?.entryPage_mineVerktoy_ariaLabel}\n key={verktoyId}\n onMouseEnter={() => handleHover(verktoyId, true)}\n onMouseLeave={() => handleHover(verktoyId, false)}\n onFocus={() => handleFocus(verktoyId, true)}\n onBlur={() => handleFocus(verktoyId, false)}\n >\n \n
\n {name}\n
\n \n \n );\n};\n","import React, { useEffect } from 'react';\n\nimport { LoginButton } from '@components/container/loginButton';\nimport { useGetResources } from '@hooks/useGetResources';\nimport { PageRoutes } from '@src/types/types';\nimport { useAppDispatch, useAppSelector, VerktoyRootState } from '@store';\nimport { fetchLaeringsaktiviteterThunk } from '@store/verktoy/thunks';\nimport { useNavigate } from 'react-router-dom';\n\nimport Button from '@helsenorge/designsystem-react/components/Button';\nimport EmptyState from '@helsenorge/designsystem-react/components/EmptyState';\nimport Icon from '@helsenorge/designsystem-react/components/Icon';\nimport ArrowRight from '@helsenorge/designsystem-react/components/Icons/ArrowRight';\nimport Loader from '@helsenorge/designsystem-react/components/Loader';\nimport Title from '@helsenorge/designsystem-react/components/Title';\n\nimport { isAuthorized } from '@helsenorge/framework-utils/hn-authorize';\n\nimport { LaeringsAktivitet } from './LaeringsAktivitet';\n\nexport const MineVerktoyPreview = (): React.JSX.Element => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n const resources = useGetResources();\n const laeringsaktiviteter = useAppSelector((globalState: VerktoyRootState) => globalState.verktoy.laeringsaktiviteter);\n const laeringsaktiviteterLoading = useAppSelector((globalState: VerktoyRootState) => globalState.verktoy.laeringsaktiviteterLoading);\n const isLoggedIn: boolean = isAuthorized();\n\n const fetchLaeringsaktiviteterHandler = (): void => {\n if (isLoggedIn) {\n dispatch(fetchLaeringsaktiviteterThunk());\n }\n };\n\n useEffect(() => {\n fetchLaeringsaktiviteterHandler();\n }, []);\n\n useEffect(() => {\n if (location.pathname === PageRoutes.entryPage) {\n fetchLaeringsaktiviteterHandler();\n }\n }, [location]);\n\n const toMineVerktoyLinkClicked = (): void => {\n navigate(PageRoutes.mineVerktoy);\n };\n\n return (\n
\n \n {resources?.mineVerktoy_header}\n \n\n {!isLoggedIn && (\n <>\n
\n {resources?.entryPage_loginInfo}\n
\n \n \n )}\n\n {isLoggedIn && (\n <>\n {laeringsaktiviteterLoading && }\n {laeringsaktiviteter?.length === 0 && (\n
\n {!laeringsaktiviteterLoading && }\n
\n )}\n {!laeringsaktiviteterLoading && laeringsaktiviteter?.length > 0 && (\n <>\n
\n {laeringsaktiviteter.map(verktoy => (\n \n ))}\n
\n \n {resources?.entryPage_mineVerktoy_link}\n \n \n \n )}\n \n )}\n
\n );\n};\n","import { useGetResources } from '@hooks/useGetResources';\n\nimport { LinkList } from '@helsenorge/designsystem-react/components/LinkList';\nimport Title from '@helsenorge/designsystem-react/components/Title';\n\nexport const AboutVerktoy = (): React.JSX.Element => {\n const resources = useGetResources();\n\n return (\n
\n \n {resources?.entryPage_aboutVerktoy_title}\n \n \n {resources?.entryPage_aboutVerktoy_linkText}\n \n
\n );\n};\n","import { useGetResources } from '@hooks/useGetResources';\n\nimport Eye from '@helsenorge/designsystem-react/components/Icons/Eye';\nimport SharingStatus from '@helsenorge/designsystem-react/components/SharingStatus';\n\nimport { getErRepresentasjon, getHarAktivtForeldreSamtykke } from '@helsenorge/framework-utils/hn-user';\n\nimport { Categories } from './categories';\nimport { MineVerktoyPreview } from './mineVerktoy-preview';\nimport { AboutVerktoy } from './moreInfo';\n\nexport const EntryPage = (): React.JSX.Element => {\n const resources = useGetResources();\n const harAktivtForeldreSamtykke = getHarAktivtForeldreSamtykke();\n const erRepresentasjon = getErRepresentasjon();\n return (\n <>\n {harAktivtForeldreSamtykke && erRepresentasjon && (\n \n {resources?.aktivtForeldreSamtykke_label || ''}\n \n )}\n \n \n \n \n );\n};\n","import React from 'react';\n\nimport { useGetResources } from '@hooks/useGetResources';\n\nimport Modal from '@helsenorge/designsystem-react/components/Modal';\n\nimport { useAppDispatch, useAppSelector } from '../../store';\nimport { closeLightboxes } from '../../store/verktoy/slice/verktoySlice';\n\nexport const AddVerktoyConfirmation = (): React.JSX.Element => {\n const dispatch = useAppDispatch();\n const addedAktivitetName = useAppSelector(globalState => globalState.verktoy.addedAktivitetName);\n\n const resources = useGetResources();\n const handleClose = (): void => {\n dispatch(closeLightboxes());\n };\n return (\n \n );\n};\n","import {\n Laeringsaktivitet,\n Lenke,\n LenkeType,\n OpprettetAvType,\n StatusType,\n Verktoy,\n VerktoyKategori,\n VerktoyRequestFilters,\n} from '../types/minhelseentities';\nimport { HNVerktoyFrontend } from '../types/Resources';\nimport { PageRoutes, SessionStorageKeys } from '../types/types';\n\nimport { trackTool } from '@helsenorge/framework-utils/adobe-analytics';\n\nexport const getVerktoyById = (verktoyList: Verktoy[], verktoyId: string | null): Verktoy | undefined => {\n return verktoyList.find(verktoy => verktoy.VerktoyId === verktoyId);\n};\n\nexport const isLaeringsaktivitetCreatedByInnbygger = (laeringsAktivitet: Laeringsaktivitet): boolean => {\n return laeringsAktivitet.OpprettetAvTypeId === OpprettetAvType.ProfilGuid;\n};\n\nexport const erApenVerktoy = (kategori: VerktoyKategori): boolean => {\n return (\n kategori === VerktoyKategori.IngenBrukerprofil ||\n kategori === VerktoyKategori.EgenBrukerprofil ||\n kategori === VerktoyKategori.LokalBrukerprofil\n );\n};\n\nexport const erVerktoyTilgjengelig = (verktoy: Verktoy): boolean => {\n return verktoy.StatusType === StatusType.Publisert && gyldigFraOgTilDato(verktoy.GyldigFraDato, verktoy.GyldigTilDato);\n};\n\nexport const createHref = (pathname: string): string => {\n const linkEl = document.createElement('a');\n linkEl.href = pathname;\n return linkEl.href;\n};\n\nexport const idag = (): Date => {\n const nowDate = new Date();\n nowDate.setHours(0, 0, 0, 0);\n return nowDate;\n};\n\nconst fjernTid = (dato: Date): Date => {\n return new Date(dato.setHours(0, 0, 0, 0));\n};\n\nconst hasValue = (valueToCheck: string | null | undefined): boolean => {\n if (valueToCheck !== undefined && valueToCheck !== null) {\n return true;\n }\n return false;\n};\n\nexport const gyldigFraOgTilDato = (fraDatoStr: string | null | undefined, tilDatoStr: string | null | undefined): boolean => {\n if (hasValue(fraDatoStr) === false && hasValue(tilDatoStr) === false) {\n return true;\n }\n\n const i_dag = idag();\n if (i_dag === undefined) {\n throw new Error('Warning: Klarer ikke lese dagens dato');\n }\n\n if (hasValue(fraDatoStr) === true && hasValue(tilDatoStr) === false) {\n // Kun fra er satt\n return idag() >= fjernTid(new Date(fraDatoStr as string));\n }\n // Både fra og til er satt\n if (hasValue(fraDatoStr) === true && hasValue(tilDatoStr) === true) {\n const fra = fjernTid(new Date(fraDatoStr as string));\n const til = fjernTid(new Date(tilDatoStr as string));\n return idag() >= fra && idag() <= til;\n }\n // Bare til er satt\n if (hasValue(fraDatoStr) === false && hasValue(tilDatoStr) === true) {\n return idag() <= fjernTid(new Date(tilDatoStr as string));\n }\n return true;\n};\n\nexport function trackAnalyticsBasertPaaLenkeType(lenkeType: LenkeType, verktoy: Verktoy): void {\n switch (lenkeType) {\n case LenkeType.NedlastingAppAndroid:\n trackTool('Verktøy', '', verktoy.Navn, 'åpne verktøy i Google Play');\n break;\n case LenkeType.NedlastingAppIphone:\n trackTool('Verktøy', '', verktoy.Navn, 'åpne verktøy i App Store');\n break;\n default:\n trackTool('Verktøy', '', verktoy.Navn, 'åpne verktøy');\n break;\n }\n}\n\nexport function scrollBrukerenTilVerktoyet(verktoy: Verktoy): void {\n const guid = verktoy.VerktoyId;\n const findElem = `[data-verktoy-guid=\"${guid}\"]`;\n const elements = document.querySelectorAll(findElem);\n if (elements.length > 0) {\n const node = elements[0] as HTMLElement;\n window.scrollTo(0, node.offsetTop);\n }\n}\n\nexport function removeTralingAndEmptyParamFromUrl(url: string): string {\n if (url.endsWith('/')) {\n return url.slice(0, -1);\n }\n if (url.endsWith('/?')) {\n return url.slice(0, -2);\n }\n if (url.endsWith('//')) {\n return url.slice(0, -2);\n }\n if (url.endsWith('//?')) {\n return url.slice(0, -3);\n }\n return url;\n}\n\nexport const getDeleteButtonText = (verktoy: Verktoy, resources?: HNVerktoyFrontend): string | undefined => {\n if (verktoy.Laeringsressurs && verktoy.Laeringsressurs.KreverForskrivning) {\n return resources?.deleteVerktoyButtonText;\n }\n return resources?.removeVerktoyButtonText;\n};\n\nexport const urlExists = (lenker: Lenke[], lenkeType: LenkeType): boolean => {\n if (lenker && lenker.find(lenke => lenke.LenkeType === lenkeType)) return true;\n return false;\n};\n\nexport const urlHasMineVerktoyPath = (url: string): boolean => {\n return url.includes(PageRoutes.mineVerktoy);\n};\n\nexport const getCurrentPageRoute = (location: string): string => {\n if (location.includes(PageRoutes.mineVerktoy)) {\n return PageRoutes.mineVerktoy;\n } else if (location.includes(PageRoutes.finnVerktoy)) {\n return PageRoutes.finnVerktoy;\n } else {\n return PageRoutes.entryPage;\n }\n};\n\nexport function requestFiltersToQueryString(params: VerktoyRequestFilters): string {\n const queryParams = new URLSearchParams();\n for (const [key, value] of Object.entries(params)) {\n queryParams.append(key, String(value));\n }\n return queryParams.toString() ? `?${queryParams.toString()}` : '';\n}\n\nexport const shouldScrollToTop = (verktoyListe: Verktoy[], pathName: string): boolean => {\n const urlHasAVerktoyId = verktoyListe.some(verktoy => pathName.includes(verktoy.VerktoyId));\n return urlHasAVerktoyId ? false : true;\n};\n\nexport const scrollAndFocus = (verktoyListe: Verktoy[], listElementRef: React.RefObject): void => {\n if (shouldScrollToTop(verktoyListe, location.pathname)) {\n window.scrollTo(0, 0);\n } else {\n listElementRef?.current?.scrollIntoView();\n listElementRef?.current?.focus();\n }\n};\n\nexport const getUrlToReturnToAfterLogin = (pathname: string, verktoyId: string): string => {\n if (!pathname) {\n return '';\n }\n const currentUrl = window.location.href;\n if (pathname === PageRoutes.finnVerktoy) {\n return `/auth/signin?Source=${encodeURIComponent(currentUrl)}/${verktoyId}`;\n } else if (pathname.includes(PageRoutes.finnVerktoy)) {\n const currentUrlWithoutVerktoyId = currentUrl.split('/').slice(0, -1).join('/');\n return `/auth/signin?Source=${encodeURIComponent(currentUrlWithoutVerktoyId)}/${verktoyId}`;\n } else {\n return `/auth/signin?Source=${encodeURIComponent(currentUrl)}`;\n }\n};\n\nexport const removeSessionStorage = (sessionStorageKeys: SessionStorageKeys[]): void => {\n sessionStorageKeys.forEach(sessionStorageKey => {\n sessionStorage.removeItem(sessionStorageKey);\n });\n};\n\nexport const isGuid = (value: string): boolean => {\n const pattern = /^[0-9a-fA-F]{8}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{4}\\b-[0-9a-fA-F]{12}$/gi; // NOSONAR\n return value.match(pattern) !== null;\n};\nexport const erLaeringsaktivitetFn = (laeringsaktiviteter: Verktoy[], verktoyId: string | null): boolean => {\n return laeringsaktiviteter.filter(item => verktoyId === item.VerktoyId).length > 0;\n};\n","import { useGetResources } from '@hooks/useGetResources';\n\nimport Modal from '@helsenorge/designsystem-react/components/Modal';\n\nimport { trackTool } from '@helsenorge/framework-utils/adobe-analytics';\n\nimport { useAppDispatch, useAppSelector } from '../../store';\nimport { findAktivitetToRemoveIdSelector } from '../../store/selectors';\nimport { closeLightboxes } from '../../store/verktoy/slice/verktoySlice';\nimport { removeLaeringsaktivitetThunk } from '../../store/verktoy/thunks';\nimport { erVerktoyTilgjengelig } from '../../utils/utils';\n\nconst DeleteVerktoyConfirmation = (): React.JSX.Element | null => {\n const dispatch = useAppDispatch();\n const resources = useGetResources();\n const aktivitetToRemove = useAppSelector(state => state.verktoy.aktivitetToRemove);\n const aktivitetToRemoveId = useAppSelector(findAktivitetToRemoveIdSelector);\n if (!aktivitetToRemove) {\n return null;\n }\n const onConfirm = (): void => {\n if (aktivitetToRemoveId) {\n trackTool('Verktøy', '', aktivitetToRemove.Navn, 'fjern verktøy');\n dispatch(removeLaeringsaktivitetThunk({ aktivitetsId: aktivitetToRemoveId }));\n }\n };\n const handleClose = (): void => {\n dispatch(closeLightboxes());\n };\n\n let confirmButtonText = resources?.deleteVerktoyButtonText;\n let headerText = resources?.confirmFjernVerktoyHeader.replace('{0}', aktivitetToRemove.Navn);\n let descriptionText: string | undefined;\n if (!erVerktoyTilgjengelig(aktivitetToRemove)) {\n headerText = resources?.confirmSlettVerktoyHeader.replace('{0}', aktivitetToRemove.Navn);\n descriptionText = resources?.confirmSlettUtgattVerktoyBody.replace('{0}', aktivitetToRemove.Navn);\n } else if (aktivitetToRemove.Laeringsressurs.KreverForskrivning) {\n descriptionText = resources?.confirmFjernVerktoyBodyForskrivning.replace('{0}', aktivitetToRemove.Navn);\n } else {\n confirmButtonText = resources?.removeVerktoyButtonText;\n headerText = resources?.confirmFjernVerktoyHeader.replace('{0}', aktivitetToRemove.Navn);\n descriptionText = resources?.confirmFjernVerktoyBody.replace('{0}', aktivitetToRemove.Navn);\n }\n\n return (\n \n );\n};\n\nexport default DeleteVerktoyConfirmation;\n","import React from 'react';\n\nimport { AddVerktoyConfirmation } from './add-verktoy-confirmation';\nimport DeleteVerktoyConfirmation from './delete-verktoy-confirmation';\nimport { useAppSelector } from '../../store';\n\nexport const ModalsContainer = (): React.JSX.Element => {\n const addedAktivitetName = useAppSelector(globalState => globalState.verktoy.addedAktivitetName);\n const aktivitetToRemove = useAppSelector(globalState => globalState.verktoy.aktivitetToRemove);\n\n return (\n <>\n {aktivitetToRemove && }\n {addedAktivitetName && }\n \n );\n};\n\nexport default ModalsContainer;\n","export const FAGOMRADE_QUERY_PARAM = 'fagomrade';\nexport const VERKTOYTYPE_QUERY_PARAM = 'verktoytype';\nexport const MALGRUPPE_QUERY_PARAM = 'malgruppe';\nexport const KREVER_FORSKRIVNING_QUERY_PARAM = 'kreverforskrivning';\nexport const STOTTER_ANONYM_OPPSTART_QUERY_PARAM = 'stotteranonymoppstart';\nexport const visKunVerktoySomKanLeggesTil_checkBoxId = 'visKunVerktoySomKanLeggesTilId';\nexport const SOK_QUERY = 'sok';\nexport const SORTERING_QUERY_PARAM = 'sortering';\nexport const SORTERSTIGENDE_QUERY_PARAM = 'sorterstigende';\nexport const innloggetCheckbox_filterName = 'visKunVerktoySomKanLeggesTil';\nexport const anonymCheckbox_filterName = 'visKunVerktoySomKanStartesAnonymt';\nexport const OPPGAVEID_QUERY_PARAM = 'oppgaveid';\nexport const OPPGAVE_RETURURL_QUERY_PARAM = 'retururl';\nexport const IGNORE_CASE = true;\n\nexport enum FilterObject_Type {\n CheckBox = 'checkbox',\n Bool = 'bool',\n}\n\nexport enum UseQueryParamType {\n String = 'string',\n Bool = 'bool',\n}\n","import { HttpStatusCode, VerktoyProxyErrorResponse } from '../types/apiTypes';\nimport { Verktoy } from '../types/minhelseentities';\nimport { HNVerktoyFrontend } from '../types/Resources';\nimport { VerktoyFilterState } from '../types/stateTypes';\nimport { PageRoutes } from '../types/types';\n\nimport { BreadcrumbLink } from '@helsenorge/core-framework/breadcrumb';\nimport { isAuthorized } from '@helsenorge/framework-utils/hn-authorize';\nimport { HelsenorgeHttpError, HelsenorgeProxyError } from '@helsenorge/framework-utils/hn-proxy-service';\n\nimport { OPPGAVE_RETURURL_QUERY_PARAM, OPPGAVEID_QUERY_PARAM } from './constants';\nimport { isGuid } from './utils';\nimport { filterToRequestParamForSessionStorage } from './verktoyFilters';\n\nexport const isHelsenorgeProxyError = (error: HelsenorgeProxyError | HelsenorgeHttpError | Error): error is HelsenorgeProxyError => {\n return error instanceof HelsenorgeProxyError;\n};\n\nexport const isHelsenorgeHttpError = (error: HelsenorgeProxyError | HelsenorgeHttpError | Error): error is HelsenorgeHttpError => {\n return error instanceof HelsenorgeHttpError;\n};\n\nexport const getErrorLabel = (resources: HNVerktoyFrontend, error: VerktoyProxyErrorResponse, pathname?: string): string => {\n const genericErrorText = resources.verktoyErrorGeneric || 'feil';\n\n if (isHelsenorgeProxyError(error) || isHelsenorgeHttpError(error)) {\n if (error.statusCode) {\n const httpStatusCode = error.statusCode.toString();\n if (httpStatusCode === HttpStatusCode.not_found && pathname && isLocationVerktoyDetailsPage(pathname)) {\n return resources.verktoyDetailsPage_invalidGuid;\n }\n }\n }\n return error.message || genericErrorText;\n};\n\nexport const hasPageHeader = (pathname: string): boolean => {\n return pathname === PageRoutes.entryPage;\n};\n\nexport const userHasLaeringsaktivitet = (verktoyMedLaeringsaktivitet: Verktoy[]): boolean => {\n if (verktoyMedLaeringsaktivitet !== undefined && verktoyMedLaeringsaktivitet.length > 0) {\n return true;\n }\n return false;\n};\n\nexport const getReturnFromDetailsPageUrl = (pathname: string, enteredDetailsPageFrom: string): string => {\n const verktoyIdParam = extractVerktoyIdFromPathname(pathname, 1);\n\n const extraPath = verktoyIdParam ? `/${verktoyIdParam}` : '';\n switch (enteredDetailsPageFrom) {\n case PageRoutes.mineVerktoy:\n return `${PageRoutes.mineVerktoy}${extraPath}`;\n case PageRoutes.finnVerktoy:\n return `${PageRoutes.finnVerktoy}${extraPath}`;\n case PageRoutes.entryPage:\n return `${PageRoutes.entryPage}`;\n case PageRoutes.oppgave: {\n return getBreadCrumbLinkTilOppgaveMelding();\n }\n default:\n return `${PageRoutes.finnVerktoy}`;\n }\n};\n\nexport const getDetailsPageBreadCrumbText = (enteredDetailsPageFrom: string, resources: HNVerktoyFrontend): string => {\n switch (enteredDetailsPageFrom) {\n case PageRoutes.mineVerktoy:\n return resources.mineVerktoy_header;\n case PageRoutes.finnVerktoy:\n return resources.finnVerktoy_header;\n case PageRoutes.oppgave:\n return resources.innboks_breadcrumb;\n default:\n return resources.entryPage_header;\n }\n};\n\nexport const isLocationVerktoyDetailsPage = (pathname: string): boolean => {\n if (pathname === PageRoutes.entryPage || pathname.includes(PageRoutes.finnVerktoy) || pathname.includes(PageRoutes.mineVerktoy)) {\n return false;\n } else {\n return true;\n }\n};\n\nexport const isLocationEntryPage = (pathname: string): boolean => {\n return pathname === PageRoutes.entryPage;\n};\n\nexport const getBreadCrumbLink = (\n pathname: string,\n verktoyFilterState: VerktoyFilterState,\n enteredDetailsPageFrom: string,\n resources: HNVerktoyFrontend,\n error: VerktoyProxyErrorResponse | undefined\n): BreadcrumbLink | undefined => {\n if (isLocationVerktoyDetailsPage(pathname)) {\n const returnUrl = getReturnFromDetailsPageUrl(pathname, enteredDetailsPageFrom);\n const breadcrumbLink: BreadcrumbLink = {\n url: error ? `${PageRoutes.baseUrl}${PageRoutes.finnVerktoy}` : returnUrl + getQueryPartURLFromFilterState(verktoyFilterState),\n name: getDetailsPageBreadCrumbText(enteredDetailsPageFrom, resources),\n renderAsRouterLink: error ? false : true,\n };\n return breadcrumbLink;\n } else if (!isLocationEntryPage(pathname)) {\n const breadcrumbLink: BreadcrumbLink = { url: PageRoutes.entryPage, name: 'Verktøy', renderAsRouterLink: true };\n return breadcrumbLink;\n }\n};\n\nexport const getQueryPartURLFromFilterState = (verktoyFilterState: VerktoyFilterState): string => {\n if (verktoyFilterState === undefined) {\n return '';\n }\n const queryParamPart = filterToRequestParamForSessionStorage(false, verktoyFilterState);\n const params = new URLSearchParams();\n for (const [key, value] of Object.entries(queryParamPart)) {\n if (Array.isArray(value)) {\n value.forEach(val => params.append(key, val));\n } else {\n params.append(key, value);\n }\n }\n const queryString = params.toString();\n return queryString ? '?' + queryString : '';\n};\n\nexport const extractVerktoyIdFromPathname = (pathname: string, partToExtract: number): string | null => {\n const parts = pathname.split('/');\n return parts.length > 1 ? parts[partToExtract] : null;\n};\n\nexport const extractOppgaveIdFromPathname = (): string | undefined => {\n let oppgaveId = undefined;\n const params = new URLSearchParams(location.search);\n for (const [name, value] of params) {\n if (name.toLowerCase() === OPPGAVEID_QUERY_PARAM) {\n oppgaveId = value;\n }\n }\n return !!oppgaveId && isGuid(oppgaveId) ? oppgaveId : undefined;\n};\n\nexport const extractOppgaveReturUrlFraPathname = (): string => {\n let retururl = '';\n const params = new URLSearchParams(location.search);\n for (const [name, value] of params) {\n if (name.toLowerCase() === OPPGAVE_RETURURL_QUERY_PARAM) {\n retururl = value;\n }\n }\n return retururl;\n};\n\nexport const shouldShowDeleteButton = (erLaeringsaktivitet: boolean, enteredDetailsPageFrom: string): boolean => {\n return isAuthorized() && erLaeringsaktivitet && !kommerFraOppgaveSide(enteredDetailsPageFrom);\n};\n\nexport const kommerFraOppgaveSide = (enteredDetailsPageFrom: string): boolean => {\n return enteredDetailsPageFrom === PageRoutes.oppgave;\n};\n\nconst getBreadCrumbLinkTilOppgaveMelding = (): string => {\n const retururl = extractOppgaveReturUrlFraPathname();\n return retururl ? `${window.location.origin}${retururl}` : retururl;\n};\n","import { EntryPage } from '@components/entry-page/entryPage';\nimport ModalsContainer from '@components/modals/modals-container';\nimport { useGetResources } from '@hooks/useGetResources';\nimport { useAppSelector } from '@src/store';\nimport { getBreadCrumbLink, getErrorLabel, hasPageHeader } from '@utils/verktoyContainer-utils';\nimport { useLocation } from 'react-router-dom';\n\nimport PageLoader from '@helsenorge/core-framework/page-loader/page-loader';\nimport PageRoot from '@helsenorge/core-framework/pageroot';\nimport { getPath } from '@helsenorge/framework-utils/hn-page';\n\nexport const EntryPageContainer = (): React.JSX.Element | null => {\n const enteredDetailsPageFrom = useAppSelector(globalState => globalState.verktoy.enteredDetailsPageFrom);\n const error = useAppSelector(globalState => globalState.verktoy.error);\n const verktoyFilters = useAppSelector(globalState => globalState.verktoy.verktoyFilters);\n\n const resources = useGetResources();\n\n const location = useLocation();\n const fullPath = `/${getPath()}${location.pathname}`;\n\n if (!resources) {\n return null;\n }\n return (\n \n
\n \n \n \n \n
\n \n );\n};\n","import { FagomradeType, MalgruppeType, QueryMapSetup, SorteringType, VerktoyType } from '../types/minhelseentities';\nimport { HNVerktoyFrontend } from '../types/Resources';\n\nimport { SOK_QUERY, FAGOMRADE_QUERY_PARAM, VERKTOYTYPE_QUERY_PARAM, MALGRUPPE_QUERY_PARAM, SORTERING_QUERY_PARAM } from './constants';\n\nexport const getFagomraadeTyperQueryMaps = (resource?: HNVerktoyFrontend): QueryMapSetup[] => {\n const fagomraader: QueryMapSetup[] = [];\n\n const fagomraderValues: number[] = Object.values(FagomradeType).filter(value => typeof value === 'number');\n\n fagomraderValues.forEach(value => {\n const name = FagomradeType[value] as string;\n const query = convertToQueryMapSetup(value.toString(), name, getFagomraadeVisningTekst(value, resource));\n fagomraader.push(query);\n });\n return fagomraader;\n};\n\nexport const getVerktoyTyperQueryMaps = (resource?: HNVerktoyFrontend): QueryMapSetup[] => {\n const verktoytyper: QueryMapSetup[] = [];\n const verktoytyperValues: number[] = Object.values(VerktoyType).filter(value => typeof value === 'number');\n\n verktoytyperValues.forEach(value => {\n const name = VerktoyType[value] as string;\n const query = convertToQueryMapSetup(value.toString(), name, getVerktoyTyperVisningTekst(value, resource));\n verktoytyper.push(query);\n });\n return verktoytyper;\n};\n\nexport const getMalgrupperQueryMaps = (resource?: HNVerktoyFrontend): QueryMapSetup[] => {\n const malgrupper: QueryMapSetup[] = [];\n const malgrupperValues: number[] = Object.values(MalgruppeType).filter(value => typeof value === 'number');\n\n malgrupperValues.forEach(value => {\n const name = MalgruppeType[value] as string;\n const query = convertToQueryMapSetup(value.toString(), name, getMalgrupperVisningTekst(value, resource));\n malgrupper.push(query);\n });\n return malgrupper;\n};\n\nexport const getSorteringQueryMaps = (): QueryMapSetup[] => {\n const sortering: QueryMapSetup[] = [];\n const sorteringValues: number[] = Object.values(SorteringType).filter(value => typeof value === 'number');\n\n sorteringValues.forEach(value => {\n const name = SorteringType[value] as string;\n const query = convertToQueryMapSetup(value.toString(), name, '');\n sortering.push(query);\n });\n return sortering;\n};\n\nconst getFagomraadeVisningTekst = (value: FagomradeType | string, resource?: HNVerktoyFrontend): string => {\n if (!resource) {\n return '';\n }\n switch (value) {\n case FagomradeType.PSYKISK_HELSE:\n return resource?.fagomrade_psykiskHelse;\n case FagomradeType.SYKDOM_OG_SKADER:\n return resource?.fagomrade_sykdomOgSkader;\n case FagomradeType.LIVSSTIL_OG_TRENING:\n return resource?.fagomrade_livsstilOgTrening;\n case FagomradeType.TANKER_OG_FOLELSER:\n return resource?.fagomrade_tankerOgFolelser;\n case FagomradeType.GRAVIDITET_OG_FODSEL:\n return resource?.fagomrade_graviditetOgFodsel;\n case FagomradeType.RAAD_OG_TIPS_I_HVERDAGEN:\n return resource?.fagomrade_raadOgTipsIHverdagen;\n default:\n return '';\n }\n};\n\nconst getVerktoyTyperVisningTekst = (value: VerktoyType | string, resource?: HNVerktoyFrontend): string => {\n if (!resource) {\n return '';\n }\n switch (value) {\n case VerktoyType.App:\n return resource.verktoyType_App;\n case VerktoyType.Weblosning:\n return resource.verktoyType_Weblosning;\n default:\n return '';\n }\n};\n\nconst getMalgrupperVisningTekst = (value: MalgruppeType | string, resource?: HNVerktoyFrontend): string => {\n if (!resource) {\n return '';\n }\n switch (value) {\n case MalgruppeType.Barn:\n return resource.verktoyDetails_MalgruppeType_Barn;\n case MalgruppeType.Eldre:\n return resource.verktoyDetails_MalgruppeType_Eldre;\n case MalgruppeType.Ungdom:\n return resource.verktoyDetails_MalgruppeType_Ungdom;\n case MalgruppeType.Voksne:\n return resource.verktoyDetails_MalgruppeType_Voksne;\n default:\n return '';\n }\n};\n\nconst convertToQueryMapSetup = (value: string, name: string | undefined, displayname: string): QueryMapSetup => {\n return {\n value: value,\n name: name,\n displayname: displayname,\n } as QueryMapSetup;\n};\n\nexport const hentSokParam = (resources?: HNVerktoyFrontend): URLSearchParams => {\n const newParamsLowerCase = new URLSearchParams();\n const query = new URLSearchParams(window.location.search);\n const fagomraader = getFagomraadeTyperQueryMaps(resources);\n const verktoytyper = getVerktoyTyperQueryMaps(resources);\n const malgrupper = getMalgrupperQueryMaps(resources);\n const sortering = getSorteringQueryMaps();\n\n for (const [name, value] of query) {\n switch (name.toLowerCase()) {\n case SOK_QUERY:\n newParamsLowerCase.append(name.toLowerCase(), value);\n break;\n case FAGOMRADE_QUERY_PARAM:\n fagomraader.forEach(fagomraade => {\n if (fagomraade.name.toLowerCase() === value.toLowerCase() || fagomraade.value === value) {\n newParamsLowerCase.append(name.toLowerCase(), fagomraade.value);\n return;\n }\n });\n break;\n case VERKTOYTYPE_QUERY_PARAM:\n verktoytyper.forEach(verktoytype => {\n if (verktoytype.name.toLowerCase() === value.toLowerCase() || verktoytype.value === value) {\n newParamsLowerCase.append(name.toLowerCase(), verktoytype.value);\n return;\n }\n });\n break;\n case MALGRUPPE_QUERY_PARAM:\n malgrupper.forEach(malgruppe => {\n if (malgruppe.name.toLowerCase() === value.toLowerCase() || malgruppe.value === value) {\n newParamsLowerCase.append(name.toLowerCase(), malgruppe.value);\n return;\n }\n });\n break;\n case SORTERING_QUERY_PARAM:\n sortering.forEach(sort => {\n if (sort.name.toLowerCase() === value.toLowerCase()) {\n newParamsLowerCase.append(name.toLowerCase(), sort.name);\n return;\n }\n });\n break;\n default:\n newParamsLowerCase.append(name.toLowerCase(), value.toLowerCase());\n }\n }\n return newParamsLowerCase;\n};\n","import { useGetResources } from '@hooks/useGetResources';\nimport { Verktoy } from '@src/types/minhelseentities';\nimport { erApenVerktoy, erVerktoyTilgjengelig } from '@utils/utils';\n\nimport Icon from '@helsenorge/designsystem-react/components/Icon';\nimport InfoSignFill from '@helsenorge/designsystem-react/components/Icons/InfoSignFill';\nimport NotificationPanel from '@helsenorge/designsystem-react/components/NotificationPanel';\n\nimport { theme as hndsTheme } from '@helsenorge/designsystem-react';\nimport { isAuthorized } from '@helsenorge/framework-utils/hn-authorize';\n\ninterface Props {\n erLaeringsaktivitet: boolean;\n verktoy: Verktoy;\n showOnDetailsPage?: boolean;\n}\n\nconst LaunchContainer = ({ erLaeringsaktivitet, verktoy, showOnDetailsPage }: Props): React.JSX.Element => {\n const resources = useGetResources();\n const erTilgjengelig = erVerktoyTilgjengelig(verktoy);\n\n const visVerktoyManglendeTilgang = erTilgjengelig && isAuthorized() && !verktoy.KanStartesAvInnloggetBruker;\n const visVerktoyIkkeTilgjengelig = !erTilgjengelig;\n const visDuMaaLoggePaa =\n (verktoy.Laeringsressurs.KreverForskrivning || !erApenVerktoy(verktoy.VerktoyKategori)) && !isAuthorized() && erTilgjengelig;\n const visVerktoyMaaForskrives = verktoy.Laeringsressurs.KreverForskrivning && erTilgjengelig && !erLaeringsaktivitet;\n\n const infotextContainerClassName = showOnDetailsPage ? 'details__infotext_container' : 'verktoy__infotext_container';\n const infotextClassName = showOnDetailsPage ? 'details__infotext' : 'verktoy__infotext';\n const infoIcon = ;\n\n return (\n <>\n {visVerktoyIkkeTilgjengelig && (\n
\n \n
\n )}\n
\n {visVerktoyManglendeTilgang && (\n \n {infoIcon}\n {resources?.verktoyKanIkkeStartesManglendeTilgang}\n \n )}\n {visDuMaaLoggePaa && (\n \n {infoIcon}\n {resources?.verktoyElement_loginMessage}\n \n )}\n {visVerktoyMaaForskrives && (\n \n {infoIcon}\n {resources?.maForskrivesAvBehandler}\n \n )}\n
\n \n );\n};\n\nexport default LaunchContainer;\n","import React from 'react';\n\ninterface Props {\n label?: string;\n children: React.ReactNode;\n}\n\nconst VerktoyInfoElement = ({ label, children }: Props): React.JSX.Element => {\n return (\n <>\n
{label}
\n {children}\n \n );\n};\n\nexport default VerktoyInfoElement;\n","import React from 'react';\n\nimport Tag from '@helsenorge/designsystem-react/components/Tag';\n\nimport './tag.scss';\n\ninterface Props {\n tagTitle?: string;\n tagValue?: string;\n isPlainText?: boolean;\n}\n\nexport const TagComponent = ({ tagTitle, tagValue, isPlainText }: Props): React.JSX.Element | null => {\n if (!tagValue) {\n return null;\n } else {\n if (isPlainText) {\n return (\n <>\n {tagTitle != null &&
{tagTitle}
}\n
{tagValue}
\n \n );\n } else {\n return (\n <>\n {tagTitle != null &&
{tagTitle}
}\n {tagValue}\n \n );\n }\n }\n};\n\nexport default TagComponent;\n","import React from 'react';\n\nimport { useGetResources } from '@hooks/useGetResources';\nimport { HNVerktoyFrontend } from '@src/types/Resources';\n\nimport { TagComponent } from './tag-component';\n\ninterface Props {\n estimatedTime: number;\n}\n\nconst AntattTidTag = ({ estimatedTime }: Props): React.JSX.Element => {\n const resources = useGetResources();\n\n const AntattTidKalkulator = (estimatedTime: number, resources?: HNVerktoyFrontend): string => {\n const hours = Math.floor(estimatedTime / 60);\n const minutes = estimatedTime % 60;\n let hoursString = '';\n if (hours === 1) {\n hoursString = `${hours} ${resources?.verktoyDetails_hour}`;\n } else if (hours > 1) {\n hoursString = `${hours} ${resources?.verktoyDetails_hours}`;\n }\n const timeRequiredString = minutes ? hoursString + ` ${minutes} ${resources?.verktoyDetails_minutes}` : hoursString;\n return timeRequiredString.trim();\n };\n\n return (\n \n );\n};\n\nexport default AntattTidTag;\n","import React from 'react';\n\nimport { useGetResources } from '@hooks/useGetResources';\nimport { FagomradeType } from '@src/types/minhelseentities';\n\nimport { TagComponent } from './tag-component';\n\ninterface Props {\n fagomrade: FagomradeType;\n}\n\nconst FagomradeTag = ({ fagomrade }: Props): React.JSX.Element | null => {\n const resources = useGetResources();\n\n switch (fagomrade) {\n case FagomradeType.PSYKISK_HELSE:\n return ;\n case FagomradeType.SYKDOM_OG_SKADER:\n return ;\n case FagomradeType.LIVSSTIL_OG_TRENING:\n return ;\n case FagomradeType.TANKER_OG_FOLELSER:\n return ;\n case FagomradeType.GRAVIDITET_OG_FODSEL:\n return ;\n case FagomradeType.RAAD_OG_TIPS_I_HVERDAGEN:\n return ;\n default:\n return null;\n }\n};\n\nexport default FagomradeTag;\n","import React from 'react';\n\nimport { useGetResources } from '@hooks/useGetResources';\nimport { VerktoyFormal } from '@src/types/minhelseentities';\n\nimport { TagComponent } from './tag-component';\n\ninterface Props {\n verktoyFormal: VerktoyFormal;\n}\n\nconst FormalTag = ({ verktoyFormal }: Props): React.JSX.Element | null => {\n const resources = useGetResources();\n switch (verktoyFormal) {\n case VerktoyFormal.Behandling:\n return ;\n case VerktoyFormal.Informasjon:\n return ;\n case VerktoyFormal.Laring:\n return ;\n case VerktoyFormal.Veiledning:\n return ;\n case VerktoyFormal.Kartlegging:\n return ;\n case VerktoyFormal.Sjekkpunkt:\n return ;\n case VerktoyFormal.Kontrollsporsmal:\n return ;\n default:\n return null;\n }\n};\n\nexport default FormalTag;\n","import React from 'react';\n\nimport { useGetResources } from '@hooks/useGetResources';\nimport { Innholdstype } from '@src/types/minhelseentities';\n\nimport Icon from '@helsenorge/designsystem-react/components/Icon';\nimport EChat from '@helsenorge/designsystem-react/components/Icons/EChat';\nimport Form from '@helsenorge/designsystem-react/components/Icons/Form';\nimport Graph from '@helsenorge/designsystem-react/components/Icons/Graph';\nimport InfoSignStroke from '@helsenorge/designsystem-react/components/Icons/InfoSignStroke';\nimport Notepad from '@helsenorge/designsystem-react/components/Icons/Notepad';\nimport Podcast from '@helsenorge/designsystem-react/components/Icons/Podcast';\nimport Puzzle from '@helsenorge/designsystem-react/components/Icons/Puzzle';\nimport SpeechBubble from '@helsenorge/designsystem-react/components/Icons/SpeechBubble';\nimport Toolbox from '@helsenorge/designsystem-react/components/Icons/Toolbox';\nimport VideoCamera from '@helsenorge/designsystem-react/components/Icons/VideoCamera';\nimport Website from '@helsenorge/designsystem-react/components/Icons/Website';\n\nimport TagComponent from './tag-component';\n\ninterface Props {\n innholdstype: Innholdstype;\n}\n\nconst InnholdstypeTag = ({ innholdstype }: Props): React.JSX.Element | null => {\n const resources = useGetResources();\n let tagValue: string | undefined = '';\n let tagIcon = Toolbox;\n\n switch (innholdstype) {\n case Innholdstype.Informasjon:\n tagValue = resources?.verktoyInnholdstype_Informasjon;\n tagIcon = InfoSignStroke;\n break;\n case Innholdstype.Video:\n tagValue = resources?.verktoyInnholdstype_Video;\n tagIcon = VideoCamera;\n break;\n case Innholdstype.Podkast:\n tagValue = resources?.verktoyInnholdstype_Podkast;\n tagIcon = Podcast;\n break;\n case Innholdstype.Oppgaver:\n tagValue = resources?.verktoyInnholdstype_Oppgaver;\n tagIcon = Form;\n break;\n case Innholdstype.Spill:\n tagValue = resources?.verktoyInnholdstype_Spill;\n tagIcon = Puzzle;\n break;\n case Innholdstype.Chat:\n tagValue = resources?.verktoyInnholdstype_Chat;\n tagIcon = EChat;\n break;\n case Innholdstype.Forum:\n tagValue = resources?.verktoyInnholdstype_Forum;\n tagIcon = Website;\n break;\n case Innholdstype.Egenregistreringer:\n tagValue = resources?.verktoyInnholdstype_Egenregistreringer;\n tagIcon = Notepad;\n break;\n case Innholdstype.Maaleverktoy:\n tagValue = resources?.verktoyInnholdstype_Maaleverktoy;\n tagIcon = Graph;\n break;\n case Innholdstype.AnbefalningerOgRaad:\n tagValue = resources?.verktoyInnholdstype_AnbefalningerOgRaad;\n tagIcon = SpeechBubble;\n break;\n default:\n tagValue = '';\n tagIcon = Toolbox;\n break;\n }\n\n return (\n <>\n
\n \n \n
\n \n );\n};\n\nexport default InnholdstypeTag;\n","import React from 'react';\n\nimport { useGetResources } from '@hooks/useGetResources';\nimport { MalgruppeType } from '@src/types/minhelseentities';\n\nimport { TagComponent } from './tag-component';\n\ninterface Props {\n malgruppeType: MalgruppeType;\n}\n\nconst MalgruppeTag = ({ malgruppeType }: Props): React.JSX.Element | null => {\n const resources = useGetResources();\n switch (malgruppeType) {\n case MalgruppeType.Barn:\n return ;\n case MalgruppeType.Ungdom:\n return ;\n case MalgruppeType.Voksne:\n return ;\n case MalgruppeType.Eldre:\n return ;\n default:\n return null;\n }\n};\n\nexport default MalgruppeTag;\n","import React from 'react';\n\nimport { useGetResources } from '@hooks/useGetResources';\nimport { SprakType } from '@src/types/minhelseentities';\n\nimport { TagComponent } from './tag-component';\n\ninterface Props {\n sprakType: SprakType;\n}\n\nconst SprakTag = ({ sprakType }: Props): React.JSX.Element | null => {\n const resources = useGetResources();\n if (sprakType === SprakType.NorskBokmal) {\n return ;\n }\n if (sprakType === SprakType.NorskNynorsk) {\n return ;\n }\n if (sprakType === SprakType.Engelsk) {\n return ;\n }\n return null;\n};\n\nexport default SprakTag;\n","import React from 'react';\n\nimport { useGetResources } from '@hooks/useGetResources';\nimport { VerktoyType } from '@src/types/minhelseentities';\n\nimport { TagComponent } from './tag-component';\n\ninterface Props {\n verktoyType: VerktoyType;\n}\n\nconst VerktoyTypeTag = ({ verktoyType }: Props): React.JSX.Element => {\n const resources = useGetResources();\n if (verktoyType === VerktoyType.App) {\n return ;\n } else {\n return ;\n }\n};\n\nexport default VerktoyTypeTag;\n","import React from 'react';\n\nimport VerktoyInfoElement from '@components/verktoy-item/verktoy-info-element';\nimport { useGetResources } from '@hooks/useGetResources';\nimport { Verktoy } from '@src/types/minhelseentities';\nimport { TagGroup } from '@src/types/types';\n\nimport TagList from '@helsenorge/designsystem-react/components/TagList';\n\nimport AntattTidTag from './antattTid-tag';\nimport FagomradeTag from './fagomrade-tag';\nimport FormalTag from './formal-tag';\nimport InnholdstypeTag from './innholdstype-tag';\nimport MalgruppeTag from './malgruppe-tag';\nimport SprakTag from './sprak-tag';\nimport VerktoyTypeTag from './verktoyType-tag';\n\ninterface Props {\n verktoy: Verktoy;\n tagGroup?: TagGroup;\n}\n\nexport const VerktoyTagsComponent = ({ verktoy, tagGroup }: Props): React.JSX.Element | null => {\n const resources = useGetResources();\n\n const verktoyFormal = verktoy.VerktoyFormal;\n const fagomrader = verktoy.Fagomrader;\n const malgruppeTitle = resources?.tagTitle_maalgruppe;\n const verktoyTyper = verktoy.Laeringsressurs.VerktoyTyper;\n const malgrupper = verktoy.Malgrupper;\n const innholdstyper = verktoy.Laeringsressurs.Innholdstyper;\n const antattTid = verktoy.Laeringsressurs.AntattTid;\n const visSprak = verktoy.VisSprak;\n const sprakTyper = verktoy.SprakTyper;\n const fagligAnsvarlig = verktoy.FagligAnsvarlig;\n const dataansvarligNavn = verktoy.Laeringsressurs?.DataansvarligNavn;\n const utvikletAv = verktoy.UtvikletAv;\n\n switch (tagGroup) {\n case TagGroup.topTags:\n return (\n <>\n {!!fagomrader && fagomrader.length > 0 && (\n \n \n {fagomrader.map(fagomrade => (\n \n ))}\n \n )}\n \n );\n case TagGroup.detailTags:\n return (\n <>\n
\n
{resources?.tagTitle_verktoyType}
\n
\n \n {verktoyTyper.map(verktoyType => (\n \n ))}\n \n
\n
\n\n {!!malgrupper && malgrupper.length > 0 && (\n
\n
{malgruppeTitle}
\n
\n \n {malgrupper.map(group => (\n \n ))}\n \n
\n
\n )}\n\n
\n
{resources?.tagTitle_formaal}
\n
\n \n
\n\n {!!innholdstyper && innholdstyper.length > 0 && (\n
\n
{resources?.tagTitle_innholdsType}
\n {innholdstyper.map(innholdstype => (\n \n ))}\n
\n )}\n\n
\n
{resources?.tagTitle_helseomraade}
\n
\n \n {fagomrader.map(fagomrade => (\n \n ))}\n \n
\n
\n\n {!!antattTid && (\n
\n \n
\n )}\n\n {!!visSprak && !!sprakTyper && sprakTyper.length > 0 && (\n <>\n
\n
{resources?.tagTitle_spraak}
\n
\n \n {verktoy.SprakTyper.map(sprakType => (\n \n ))}\n \n
\n
\n \n )}\n\n {!!fagligAnsvarlig && (\n
\n \n
{fagligAnsvarlig}
\n
\n
\n )}\n\n {!!dataansvarligNavn && (\n
\n \n
{dataansvarligNavn}
\n
\n
\n )}\n {!!utvikletAv && (\n
\n \n
{utvikletAv}
\n
\n
\n )}\n \n );\n default:\n return null;\n }\n};\n\nexport default VerktoyTagsComponent;\n","import React, { useRef, useState } from 'react';\n\nimport { useGetResources } from '@hooks/useGetResources';\nimport { useLogin } from '@hooks/useLogin';\nimport { Verktoy } from '@src/types/minhelseentities';\nimport { useAppDispatch, useAppSelector } from '@store';\nimport { addLaeringsaktivitetThunk } from '@store/verktoy/thunks';\nimport { erVerktoyTilgjengelig, getUrlToReturnToAfterLogin } from '@utils/utils';\nimport { kommerFraOppgaveSide } from '@utils/verktoyContainer-utils';\n\nimport Button from '@helsenorge/designsystem-react/components/Button';\nimport Icon from '@helsenorge/designsystem-react/components/Icon';\nimport PlusLarge from '@helsenorge/designsystem-react/components/Icons/PlusLarge';\nimport Modal from '@helsenorge/designsystem-react/components/Modal';\n\nimport { trackTool } from '@helsenorge/framework-utils/adobe-analytics';\nimport { isAuthorized } from '@helsenorge/framework-utils/hn-authorize';\n\ninterface AddVerktoyElementProps {\n verktoy: Verktoy;\n erLaeringsaktivitet: boolean;\n}\n\nconst AddVerktoyElement = ({ verktoy, erLaeringsaktivitet }: AddVerktoyElementProps): React.JSX.Element | null => {\n const [showModal, setShowModal] = useState(false);\n const dispatch = useAppDispatch();\n\n const { isWaitingForAktivitetResponse, enteredDetailsPageFrom } = useAppSelector(globalState => globalState.verktoy);\n const resources = useGetResources();\n\n const buttonRef = useRef(null);\n const { login } = useLogin();\n const isLoggedIn = isAuthorized();\n\n const kanLeggTiliMineVerktoy =\n erVerktoyTilgjengelig(verktoy) &&\n !verktoy.Laeringsressurs.KreverForskrivning &&\n !erLaeringsaktivitet &&\n !kommerFraOppgaveSide(enteredDetailsPageFrom) &&\n isWaitingForAktivitetResponse !== null &&\n isWaitingForAktivitetResponse !== undefined;\n\n const addVerktoy = (): void => {\n if (isLoggedIn) {\n dispatch(addLaeringsaktivitetThunk({ verktoy }));\n trackTool('Verktøy', '', verktoy.Navn, 'legg til verktøy');\n } else {\n setShowModal(true);\n }\n };\n\n const urlToReturnToAfterLogin = getUrlToReturnToAfterLogin(location.pathname, verktoy.VerktoyId);\n if (!resources) {\n return null;\n }\n if (kanLeggTiliMineVerktoy) {\n return (\n <>\n {\n addVerktoy();\n }}\n disabled={isWaitingForAktivitetResponse}\n >\n {resources?.addVerktoyButtonText}\n \n \n {showModal && (\n {\n setShowModal(false);\n login(buttonRef, urlToReturnToAfterLogin);\n }}\n onClose={(): void => setShowModal(false)}\n />\n )}\n \n );\n } else {\n return <>;\n }\n};\n\nexport default AddVerktoyElement;\n","import { useGetResources } from '@hooks/useGetResources';\nimport { Verktoy } from '@src/types/minhelseentities';\nimport { useAppDispatch, useAppSelector } from '@store';\nimport { showRemoveAktivitetConfirmation } from '@store/verktoy/slice/verktoySlice';\nimport { getDeleteButtonText } from '@utils/utils';\nimport { shouldShowDeleteButton } from '@utils/verktoyContainer-utils';\n\nimport Button from '@helsenorge/designsystem-react/components/Button';\nimport Icon from '@helsenorge/designsystem-react/components/Icon';\nimport X from '@helsenorge/designsystem-react/components/Icons/X';\n\ninterface Props {\n verktoy: Verktoy;\n erLaeringsaktivitet: boolean;\n className?: string;\n}\n\nconst DeleteVerktoyElement = ({ verktoy, erLaeringsaktivitet, className }: Props): React.JSX.Element => {\n const enteredDetailsPageFrom = useAppSelector(globalState => globalState.verktoy.enteredDetailsPageFrom);\n const resources = useGetResources();\n const dispatch = useAppDispatch();\n\n const kanVise = shouldShowDeleteButton(erLaeringsaktivitet, enteredDetailsPageFrom);\n if (kanVise) {\n return (\n {\n dispatch(showRemoveAktivitetConfirmation({ verktoy }));\n }}\n >\n {getDeleteButtonText(verktoy, resources)}\n \n \n );\n } else {\n return <>;\n }\n};\n\nexport default DeleteVerktoyElement;\n","import PlaceholderImg from '@assets/verktoyplaceholder400x400.png';\nimport { useGetResources } from '@hooks/useGetResources';\nimport { VERKTOY_PROXY_NAME } from '@src/types/apiTypes';\nimport { Verktoy, GrafiskElementType } from '@src/types/minhelseentities';\nimport { PageRoutes, SessionStorageKeys, TagGroup } from '@src/types/types';\nimport { useAppDispatch } from '@store';\nimport { setEnteredDetailsPageFrom } from '@store/verktoy/slice/verktoySlice';\nimport { hentSokParam } from '@utils/queryParamUtil';\nimport { getCurrentPageRoute } from '@utils/utils';\nimport { useNavigate, useLocation } from 'react-router-dom';\n\nimport Button from '@helsenorge/designsystem-react/components/Button';\nimport Icon from '@helsenorge/designsystem-react/components/Icon';\nimport ArrowRight from '@helsenorge/designsystem-react/components/Icons/ArrowRight';\nimport Title from '@helsenorge/designsystem-react/components/Title';\n\nimport { link } from '@helsenorge/framework-utils/hn-proxy-service';\n\nimport LaunchContainer from './launch-container';\nimport VerktoyTagsComponent from '../tags-component/tags-component';\nimport AddVerktoyElement from '../verktoy-liste/add-verktoy-element';\nimport DeleteVerktoyElement from '../verktoy-liste/delete-verktoy-element';\n\ninterface Props {\n verktoy: Verktoy;\n erLaeringsaktivitet: boolean;\n addedDateText?: string;\n}\n\nconst VerktoyDetails = ({ verktoy, erLaeringsaktivitet, addedDateText }: Props): React.JSX.Element | null => {\n const dispatch = useAppDispatch();\n const navigate = useNavigate();\n const location = useLocation();\n const resources = useGetResources();\n\n const ikon = verktoy.GrafiskeElementer.find(x => x.TypeId === GrafiskElementType.Ikon);\n\n const moreInfoButtonClicked = (): void => {\n sessionStorage.setItem(\n SessionStorageKeys.returnLocation,\n PageRoutes.finnVerktoy + '/' + verktoy.VerktoyId + '?' + hentSokParam(resources)\n );\n\n const url = getCurrentPageRoute(location.pathname);\n dispatch(setEnteredDetailsPageFrom({ url }));\n\n navigate(`/${verktoy.VerktoyId}`);\n };\n if (!resources) {\n return null;\n }\n return (\n <>\n
\n
\n \n {addedDateText &&
{addedDateText}
}\n
\n
\n \n {verktoy.Navn}\n \n
\n
\n
\n {ikon ? (\n
\n \n
\n ) : (\n
\n \"defaultverktoyicon\"\n
\n )}\n
\n\n
{verktoy.Ingress}
\n\n
\n
\n \n \n \n
\n
\n \n
\n
\n \n );\n};\n\nexport default VerktoyDetails;\n","import VerktoyDetails from '@components/verktoy-item/verktoy-details';\nimport { useGetResources } from '@hooks/useGetResources';\nimport { Verktoy } from '@src/types/minhelseentities';\nimport { isLaeringsaktivitetCreatedByInnbygger } from '@utils/utils';\n\nimport { shortDateFullMonth } from '@helsenorge/core-utils/date-fns-utils';\n\ninterface Props {\n verktoy: Verktoy;\n}\n\nconst LaeringsaktivitetElement = ({ verktoy }: Props): React.JSX.Element => {\n const resources = useGetResources();\n\n const aktivitet = verktoy.Laeringsaktivitet;\n\n if (aktivitet === undefined || aktivitet === null || resources === undefined) {\n return <>;\n }\n\n const date = `${aktivitet.Opprettet ? shortDateFullMonth(new Date(aktivitet.Opprettet)) : ''}`;\n const createdLabel = isLaeringsaktivitetCreatedByInnbygger(aktivitet)\n ? `${resources?.createdByYouLabel} ${date}.`\n : `${resources?.createdByOtherLabel} ${aktivitet.OpprettetAvNavn}, ${date}.`;\n\n return (\n
\n
\n \n
\n
\n );\n};\n\nexport default LaeringsaktivitetElement;\n","import React, { useEffect, useRef } from 'react';\n\nimport AssuranceElement from '@components/container/assurance-element';\nimport { useGetResources } from '@hooks/useGetResources';\nimport { useAppDispatch, useAppSelector } from '@src/store';\nimport { fetchLaeringsaktiviteterThunk } from '@store/verktoy/thunks';\nimport { scrollAndFocus } from '@utils/utils';\nimport { extractVerktoyIdFromPathname } from '@utils/verktoyContainer-utils';\nimport { Link, useLocation } from 'react-router-dom';\n\nimport { PageRoutes } from '../../types/types';\n\nimport EmptyState from '@helsenorge/designsystem-react/components/EmptyState';\nimport Loader from '@helsenorge/designsystem-react/components/Loader';\nimport Title from '@helsenorge/designsystem-react/components/Title';\n\nimport { isAuthorized } from '@helsenorge/framework-utils/hn-authorize';\n\nimport LaeringsaktivitetElement from './laeringsaktivitet-element';\n\nexport const LaeringsaktivitetList = (): React.JSX.Element | null => {\n const dispatch = useAppDispatch();\n const resources = useGetResources();\n\n const { laeringsaktiviteter, laeringsaktiviteterLoading } = useAppSelector(globalState => globalState.verktoy);\n\n const location = useLocation();\n const verktoyRef = useRef(null);\n const verktoyIdFromUrl = extractVerktoyIdFromPathname(location.pathname, 2);\n useEffect(() => {\n if (isAuthorized()) {\n dispatch(fetchLaeringsaktiviteterThunk());\n }\n }, []);\n\n useEffect(() => {\n if (!laeringsaktiviteterLoading && laeringsaktiviteter?.length > 0) {\n scrollAndFocus(laeringsaktiviteter, verktoyRef);\n }\n }, [laeringsaktiviteterLoading, laeringsaktiviteter]);\n if (!resources) {\n return null;\n }\n return (\n <>\n \n {resources.mineVerktoy_header}\n \n \n
\n {laeringsaktiviteter?.length === 0 && (\n <>\n {laeringsaktiviteterLoading ? (\n \n ) : (\n \n {resources.emptyVerktoyListeFirstText} {resources.alleVerktoyTabTitle}{' '}\n {resources.emptyVerktoyListeLastText}\n \n }\n />\n )}\n \n )}\n {laeringsaktiviteter?.length > 0 && (\n <>\n
    \n {laeringsaktiviteter.map(item => (\n \n \n \n ))}\n
\n \n )}\n
\n \n );\n};\n\nexport default LaeringsaktivitetList;\n","import LaeringsaktivitetList from '@components/aktivitet-liste/laeringsaktivitet-list';\nimport ModalsContainer from '@components/modals/modals-container';\nimport { useGetResources } from '@hooks/useGetResources';\nimport { useAppSelector } from '@store';\nimport { getBreadCrumbLink, getErrorLabel, hasPageHeader } from '@utils/verktoyContainer-utils';\nimport { useLocation } from 'react-router-dom';\n\nimport Loader from '@helsenorge/designsystem-react/components/Loader';\n\nimport PageLoader from '@helsenorge/core-framework/page-loader/page-loader';\nimport PageRoot from '@helsenorge/core-framework/pageroot';\nimport { getPath } from '@helsenorge/framework-utils/hn-page';\n\nexport const LaeringsaktivitetListContainer = (): React.JSX.Element | null => {\n const location = useLocation();\n\n const resources = useGetResources();\n const { enteredDetailsPageFrom, error, isWaitingForAktivitetResponse, verktoyFilters } = useAppSelector(\n globalState => globalState.verktoy\n );\n const fullPath = `/${getPath()}${location.pathname}`;\n if (!resources) {\n return null;\n }\n return (\n \n
\n \n {isWaitingForAktivitetResponse && }\n \n \n \n
\n \n );\n};\n","import { FunctionComponent } from 'react';\n\nimport { useGetResources } from '@hooks/useGetResources';\n\nimport { Verktoy } from '../../types/minhelseentities';\n\nimport Modal from '@helsenorge/designsystem-react/components/Modal';\n\ninterface AvvisOppgaveConfirmationProps {\n verktoy: Verktoy;\n onConfirm: () => void;\n onClose: () => void;\n}\n\nconst AvvisOppgaveConfirmationModal: FunctionComponent = ({\n verktoy,\n onConfirm,\n onClose,\n}: AvvisOppgaveConfirmationProps) => {\n const resources = useGetResources();\n\n return (\n \n );\n};\n\nexport default AvvisOppgaveConfirmationModal;\n","import Button from '@helsenorge/designsystem-react/components/Button';\n\nimport './modals.scss';\nimport { useGetResources } from '@hooks/useGetResources';\n\ninterface EnrollOppgaveOptionProps {\n onConfirm: () => void;\n onClose: () => void;\n}\n\nconst EnrollOppgaveOptionModal = ({ onConfirm, onClose }: EnrollOppgaveOptionProps): React.JSX.Element => {\n const resources = useGetResources();\n return (\n
\n
\n
{resources?.modal_enroll_tekst}
\n
\n \n \n
\n
\n
\n );\n};\n\nexport default EnrollOppgaveOptionModal;\n","import { useEffect, useState } from 'react';\n\nimport { Verktoy } from '../../types/minhelseentities';\nimport { PageRoutes } from '../../types/types';\n\nimport { isAuthorized } from '@helsenorge/framework-utils/hn-authorize';\n\nimport AvvisOppgaveConfirmationModal from './avvis_oppgave_confirmation';\nimport EnrollOppgaveOptionModal from './enroll-oppgave-option';\nimport { useAppDispatch, useAppSelector } from '../../store';\nimport { setEnteredDetailsPageFrom } from '../../store/verktoy/slice/verktoySlice';\nimport { addLaeringsaktivitetThunk, avvisOppgaveLaeringsaktivitetThunk } from '../../store/verktoy/thunks';\nimport { extractOppgaveIdFromPathname, extractOppgaveReturUrlFraPathname } from '../../utils/verktoyContainer-utils';\n\ninterface VerktoyOppgaveModalContainerProps {\n verktoy: Verktoy;\n}\n\nconst VerktoyOppgaveModalContainer = ({ verktoy }: VerktoyOppgaveModalContainerProps): React.JSX.Element => {\n const [visEnrollVerktoyOption, setEnrollVerktoyOptionVisning] = useState(false);\n const [visVerktoyCancellation, setVerktoyCancellationVisning] = useState(false);\n\n const dispatch = useAppDispatch();\n const isOppgaveAvvisSuccess = useAppSelector(globalState => globalState.verktoy.isOppgaveAvvisSuccess);\n const isWaitingForAktivitetResponse = useAppSelector(globalState => globalState.verktoy.isWaitingForAktivitetResponse);\n\n const oppgaveId = extractOppgaveIdFromPathname();\n\n useEffect(() => {\n if (isAuthorized() && !!oppgaveId && !isWaitingForAktivitetResponse) {\n dispatch(setEnteredDetailsPageFrom({ url: PageRoutes.oppgave }));\n setEnrollVerktoyOptionVisning(true);\n }\n }, []);\n\n useEffect(() => {\n const oppgaveReturUrl = extractOppgaveReturUrlFraPathname();\n if (oppgaveReturUrl && !!isOppgaveAvvisSuccess) {\n window.history.replaceState(window.history.state, '', oppgaveReturUrl);\n window.location.reload();\n }\n }, [isOppgaveAvvisSuccess]);\n\n const visVerktoyCancellationModal = (): void => {\n setVerktoyCancellationVisning(true);\n setEnrollVerktoyOptionVisning(false);\n };\n\n const confirmVerktoyEnrollment = (): void => {\n if (oppgaveId) {\n dispatch(addLaeringsaktivitetThunk({ verktoy, oppgaveId }));\n }\n setEnrollVerktoyOptionVisning(false);\n dispatch(setEnteredDetailsPageFrom({ url: PageRoutes.mineVerktoy }));\n window.history.replaceState(window.history.state, '', `${PageRoutes.baseUrl}/${verktoy.VerktoyId}`);\n };\n\n const confirmVerktoyCancellation = (): void => {\n setVerktoyCancellationVisning(false);\n if (oppgaveId) {\n dispatch(avvisOppgaveLaeringsaktivitetThunk({ verktoy, oppgaveId }));\n }\n };\n\n const cancelVerktoyCancellation = (): void => {\n setVerktoyCancellationVisning(false);\n setEnrollVerktoyOptionVisning(true);\n };\n\n return (\n <>\n {visEnrollVerktoyOption && }\n {visVerktoyCancellation && (\n \n )}\n \n );\n};\n\nexport default VerktoyOppgaveModalContainer;\n","import { Verktoy } from '../types/minhelseentities';\n\nimport { isAuthorized } from '@helsenorge/framework-utils/hn-authorize';\n\nimport { erApenVerktoy, erVerktoyTilgjengelig } from './utils';\n\nexport const kanInnloggetBrukerSeAapneKnapp = (verktoy: Verktoy, erLaeringsaktivitet: boolean): boolean => {\n return (\n isAuthorized() &&\n erVerktoyTilgjengelig(verktoy) &&\n verktoy.KanStartesAvInnloggetBruker &&\n (erLaeringsaktivitet || !verktoy.Laeringsressurs.KreverForskrivning)\n );\n};\n\nexport const kanAnonymBrukerSeAapneKnapp = (verktoy: Verktoy): boolean => {\n return !isAuthorized() && !verktoy.Laeringsressurs.KreverForskrivning && erVerktoyTilgjengelig(verktoy);\n};\n\nexport const maaLoggeInnForAaAapneVerktoy = (verktoy: Verktoy): boolean => {\n return erApenVerktoy(verktoy.VerktoyKategori) ? false : true;\n};\n","/* eslint-disable @typescript-eslint/no-empty-object-type */\nimport { GetVerktoyLaunchOperationResponse, VERKTOY_PROXY_NAME } from '../types/apiTypes';\nimport { OppstartType, Verktoy, LenkeType } from '../types/minhelseentities';\n\nimport { isAuthorized } from '@helsenorge/framework-utils/hn-authorize';\nimport { get } from '@helsenorge/framework-utils/hn-proxy-service';\nimport { sanitize } from '@helsenorge/framework-utils/trusted-types';\n\nexport const launchAktivitet = (verktoy: Verktoy, lenkeType: LenkeType): void => {\n const lenkeUrl = verktoy.Lenker?.find(lenke => lenke.LenkeType === lenkeType)?.Url;\n if (\n (!isAuthorized() || !verktoy.KanStartesAvInnloggetBruker) &&\n (verktoy.OppstartType === OppstartType.DirekteUrl || lenkeType !== LenkeType.Standard) &&\n lenkeUrl\n ) {\n const win = window.open(lenkeUrl, '_blank');\n if (win) {\n win.focus();\n }\n } else if (\n isAuthorized() &&\n (verktoy.OppstartType === OppstartType.DirekteUrl || verktoy.OppstartType === OppstartType.OIDC || lenkeType !== LenkeType.Standard) &&\n lenkeUrl\n ) {\n get(VERKTOY_PROXY_NAME, `api/v1/MinHelse/LoggStartVerktoy?verktoyId=${verktoy.VerktoyId}`);\n const win = window.open(lenkeUrl, '_blank');\n if (win) {\n win.focus();\n }\n } else if (verktoy.OppstartType === OppstartType.LTIv1_1) {\n const launchWindow = window.open('', '_blank'); // lag nytt vindu som respons på launch-klikk, for å unngå popup-blocker\n // LTI launch, gjør en GET til server først, og så POST LaunchScript form som kommer tilbake, eller åpne RedirectUrl\n if (launchWindow) {\n launchWindow.document.body.innerHTML = sanitize('Åpner verktøy...');\n launchWindow.focus();\n }\n get(VERKTOY_PROXY_NAME, `api/v1/MinHelse/StartLtiVerktoy?verktoyId=${verktoy.VerktoyId}`)\n .then((data: Response | {} | null) => {\n const response = data as GetVerktoyLaunchOperationResponse;\n if (response.LaunchScript && launchWindow) {\n const d = launchWindow.document.createElement('div');\n d.innerHTML = sanitize(response.LaunchScript);\n const form = d.firstChild as HTMLFormElement;\n launchWindow.document.body.appendChild(form);\n form.submit();\n launchWindow.focus();\n } else if (response.RedirectUrl && launchWindow) {\n launchWindow.location.href = response.RedirectUrl;\n launchWindow.focus();\n }\n })\n .catch(() => {\n if (launchWindow) {\n launchWindow.document.body.innerHTML = sanitize('Kunne ikke åpne verktøyet.');\n launchWindow.focus();\n }\n });\n } else {\n const errorWindow = window.open('', '_blank');\n if (errorWindow) {\n errorWindow.document.body.innerHTML = sanitize('Kunne ikke åpne verktøyet.');\n errorWindow.focus();\n }\n }\n};\n","import { Verktoy, BehandlerInnsynType, VerktoyKategori } from '../types/minhelseentities';\nimport { HNVerktoyFrontend } from '../types/Resources';\n\nconst getBehandlerInnsynTypeTekst = (resources?: HNVerktoyFrontend, type?: BehandlerInnsynType): string | null | undefined => {\n if (type === BehandlerInnsynType.Krever) {\n return resources?.behandlerInnsynAlltid;\n } else if (type === BehandlerInnsynType.TilbysIVerktoy) {\n return resources?.behandlerInnsynVelges;\n }\n return null;\n};\n\nconst getKategoriTekst = (resources?: HNVerktoyFrontend, kategori?: VerktoyKategori): string | null | undefined => {\n if (kategori === VerktoyKategori.SentralBrukerprofil) {\n return resources?.verktoyKategoriSentralProfil;\n }\n if (kategori === VerktoyKategori.SentralPseudonymisertBrukerprofil) {\n return resources?.verktoyKategoriSentralPseudonymisertProfil;\n }\n return null;\n};\n\nexport const getVerktoyPersonvernTekst = (resources?: HNVerktoyFrontend, verktoy?: Verktoy): string => {\n const internEllerEksternSection = verktoy?.InterntVerktoy ? resources?.internVerktoyVillkar : resources?.eksterntVerktoyVillkar;\n const behandlerInnsynSection = getBehandlerInnsynTypeTekst(resources, verktoy?.Laeringsressurs.BehandlerInnsynType);\n const kategoriSection = getKategoriTekst(resources, verktoy?.VerktoyKategori);\n return [internEllerEksternSection, kategoriSection, behandlerInnsynSection].filter(Boolean).join('\\n\\n');\n};\n","import React from 'react';\n\nimport ReactMarkdown from 'react-markdown';\n\nimport designsystemtypography from '@helsenorge/designsystem-react/scss/typography.module.scss';\n\nexport const ExternalLinkRenderer = (renderProps: { href: string; children: JSX.Element }): JSX.Element => {\n return (\n \n {renderProps.children}\n \n );\n};\n\nexport const MarkdownContent = (props: ReactMarkdown.ReactMarkdownProps): React.JSX.Element => {\n const classes = `${props.className || ''} ${designsystemtypography['anchorlink-wrapper']} verktoy__markdown`.trim();\n return ;\n};\n","import React from 'react';\n\nimport { useGetResources } from '@hooks/useGetResources';\nimport { LenkeType, Lenke } from '@src/types/minhelseentities';\nimport { HNVerktoyFrontend } from '@src/types/Resources';\n\nimport AnchorLink from '@helsenorge/designsystem-react/components/AnchorLink';\n\nimport { trackTool } from '@helsenorge/framework-utils/adobe-analytics';\n\ninterface Props {\n verktoyLenker: Array;\n}\n\nconst OpenUtvidetInfoLink = ({ verktoyLenker }: Props): React.JSX.Element => {\n const resources = useGetResources();\n\n const utvidetInfoLenke = verktoyLenker !== undefined ? verktoyLenker.find(v => v.LenkeType === LenkeType.Utvidetinformasjon) : undefined;\n\n return (\n
\n {utvidetInfoLenke && utvidetInfoLenke.Url && (\n <>\n
\n anchorLinkClick(resources)} href={utvidetInfoLenke.Url} target={'_blank'}>\n {resources?.utvidetLenke_anchorLink_text}\n \n
\n \n )}\n
\n );\n};\n\nfunction anchorLinkClick(resources?: HNVerktoyFrontend): void {\n trackTool(\n resources?.adobeAnalytics_trackTool_utvidetLenke_name || '',\n resources?.adobeAnalytics_trackTool_utvidetLenke_type || '',\n resources?.adobeAnalytics_trackTool_utvidetLenke_labels || '',\n resources?.adobeAnalytics_trackTool_utvidetLenke_action || ''\n );\n}\n\nexport default OpenUtvidetInfoLink;\n","export default \"__VITE_ASSET__QXmx5Bsv__\"","export default \"__VITE_ASSET__CdtUu15E__\"","import appStoreSVG from '@assets/appstore.svg';\nimport googlePlayPNG from '@assets/googleplay.png';\nimport { useGetResources } from '@hooks/useGetResources';\nimport { LenkeType, Lenke } from '@src/types/minhelseentities';\nimport { urlExists } from '@utils/utils';\n\nimport Button from '@helsenorge/designsystem-react/components/Button';\n\ninterface Props {\n verktoyLenker: Array;\n buttonRef?: React.RefObject;\n startVerktoy: (lenkeType: LenkeType) => void;\n}\n\nconst OpenVerktoyButtons = ({ verktoyLenker, buttonRef, startVerktoy }: Props): React.JSX.Element | null => {\n const resources = useGetResources();\n if (!resources) {\n return null;\n }\n return (\n <>\n {urlExists(verktoyLenker, LenkeType.Standard) && (\n
\n {\n startVerktoy(LenkeType.Standard);\n }}\n >\n {resources?.openButtonText}\n \n
\n )}\n {urlExists(verktoyLenker, LenkeType.NedlastingAppIphone) && (\n
\n {\n startVerktoy(LenkeType.NedlastingAppIphone);\n }}\n >\n {resources.appstore_altText}\n \n
\n )}\n {urlExists(verktoyLenker, LenkeType.NedlastingAppAndroid) && (\n
\n {\n startVerktoy(LenkeType.NedlastingAppAndroid);\n }}\n >\n {resources.googleplay_altText}\n \n
\n )}\n \n );\n};\n\nexport default OpenVerktoyButtons;\n","import React, { useEffect, useRef, useState } from 'react';\n\nimport placeholderImg from '@assets/verktoyplaceholder400x400.png';\nimport VerktoyTagsComponent from '@components/tags-component/tags-component';\nimport AddVerktoyElement from '@components/verktoy-liste/add-verktoy-element';\nimport DeleteVerktoyElement from '@components/verktoy-liste/delete-verktoy-element';\nimport { useGetResources } from '@hooks/useGetResources';\nimport { useLogin } from '@hooks/useLogin';\nimport { ANONYM_GRAFISKELEMENT, VERKTOY_PROXY_NAME } from '@src/types/apiTypes';\nimport { GrafiskElementType, Verktoy, LenkeType } from '@src/types/minhelseentities';\nimport { TagGroup } from '@src/types/types';\nimport { useAppSelector } from '@store';\nimport { kanAnonymBrukerSeAapneKnapp, kanInnloggetBrukerSeAapneKnapp, maaLoggeInnForAaAapneVerktoy } from '@utils/aapneVerktoy-utils';\nimport { launchAktivitet } from '@utils/launch-aktivitet';\nimport { getVerktoyPersonvernTekst } from '@utils/personvern';\nimport { erVerktoyTilgjengelig, trackAnalyticsBasertPaaLenkeType } from '@utils/utils';\nimport { kommerFraOppgaveSide, shouldShowDeleteButton } from '@utils/verktoyContainer-utils';\n\nimport HelpBubble from '@helsenorge/designsystem-react/components/HelpBubble';\nimport HelpQuestion from '@helsenorge/designsystem-react/components/HelpQuestion';\nimport Modal from '@helsenorge/designsystem-react/components/Modal';\nimport NotificationPanel from '@helsenorge/designsystem-react/components/NotificationPanel';\nimport Title from '@helsenorge/designsystem-react/components/Title';\nimport designsystemtypography from '@helsenorge/designsystem-react/scss/typography.module.scss';\n\nimport SafeHTML from '@helsenorge/framework-utils/components/safe-html';\nimport { link } from '@helsenorge/framework-utils/hn-proxy-service';\n\nimport LaunchContainer from './launch-container';\nimport { MarkdownContent, ExternalLinkRenderer } from './markdownContent';\nimport OpenUtvidetInfoLink from './open-utvidetinfo-link';\nimport OpenVerktoyButtons from './open-verktoy-buttons';\nimport VerktoyInfoElement from './verktoy-info-element';\n\ninterface VerktoyDetailsPageProps {\n verktoy: Verktoy;\n erLaeringsaktivitet: boolean;\n startAktivitet?: () => void;\n}\n\nconst VerktoyDetailsPage = ({ verktoy, erLaeringsaktivitet, startAktivitet }: VerktoyDetailsPageProps): React.JSX.Element => {\n const [showLoginModal, setShowLoginModal] = useState(false);\n const [isPersonvernBubbleOpen, setIsPersonvernBubbleOpen] = useState(false);\n\n const resources = useGetResources();\n\n const enteredDetailsPageFrom = useAppSelector(globalState => globalState.verktoy.enteredDetailsPageFrom);\n const isWaitingForAktivitetResponse = useAppSelector(globalState => globalState.verktoy.isWaitingForAktivitetResponse);\n const isOppgaveEnrollmentSuccess = useAppSelector(globalState => globalState.verktoy.isOppgaveEnrollmentSuccess);\n\n const topElementRef = useRef(null);\n const personvernButtonRef = useRef(null);\n const openVerktoyButtonRef = useRef(null);\n const { login } = useLogin();\n\n const ikon = verktoy.GrafiskeElementer.find(x => x.TypeId === GrafiskElementType.Ikon);\n const bilde = verktoy.GrafiskeElementer.filter(x => x.TypeId === GrafiskElementType.Bilde);\n const erIkkeOppgave = !kommerFraOppgaveSide(enteredDetailsPageFrom);\n const shouldShowOmPersonvernHjelp =\n (kanInnloggetBrukerSeAapneKnapp(verktoy, erLaeringsaktivitet) && verktoy.Lenker) ||\n (kanAnonymBrukerSeAapneKnapp(verktoy) && verktoy.Lenker);\n const kanViseSlettKnapp = shouldShowDeleteButton(erLaeringsaktivitet, enteredDetailsPageFrom);\n\n const startVerktoyAnonym = (lenkeType: LenkeType): void => {\n if (maaLoggeInnForAaAapneVerktoy(verktoy)) {\n setShowLoginModal(true);\n } else {\n startVerktoy(lenkeType);\n }\n };\n\n const startVerktoy = (lenkeType: LenkeType): void => {\n if (startAktivitet) {\n startAktivitet();\n }\n trackAnalyticsBasertPaaLenkeType(lenkeType, verktoy);\n launchAktivitet(verktoy, lenkeType);\n };\n\n const scrollAndFocus = (): void => {\n window.scrollTo(0, 0);\n if (topElementRef.current) {\n topElementRef.current?.focus();\n }\n };\n\n const handleUserArrival = (): void => {\n scrollAndFocus();\n };\n\n useEffect(() => {\n handleUserArrival();\n }, []);\n\n return (\n <>\n {isOppgaveEnrollmentSuccess && !isWaitingForAktivitetResponse && (\n
\n \n {resources?.enroll_ok_tekst.replace('{0}', verktoy.Navn)}\n \n
\n )}\n
\n
\n \n {verktoy.Navn}\n \n
{verktoy.Ingress}
\n
\n
\n {ikon ? (\n
\n \n
\n ) : (\n
\n \"defaultverktoyicon\"\n
\n )}\n
\n
\n\n \n\n
\n {erIkkeOppgave && kanInnloggetBrukerSeAapneKnapp(verktoy, erLaeringsaktivitet) && verktoy.Lenker && (\n \n )}\n\n {erIkkeOppgave && kanAnonymBrukerSeAapneKnapp(verktoy) && verktoy.Lenker && (\n \n )}\n\n {shouldShowOmPersonvernHjelp && (\n
\n
\n setIsPersonvernBubbleOpen(!isPersonvernBubbleOpen)}\n >\n {resources?.omPersonvernButton || ''}\n \n
\n
\n )}\n setIsPersonvernBubbleOpen(false)}\n variant=\"positionbelow\"\n >\n \n \n \n \n
\n \n {kanViseSlettKnapp && (\n
\n \n
\n )}\n
\n
\n\n {bilde.length > 0 && erVerktoyTilgjengelig(verktoy) && (\n \n )}\n\n
\n \n {'Om verktøyet'}\n \n \n {verktoy.Beskrivelse}\n \n
\n\n
\n \n \n \n
\n
\n \n {'Informasjon'}\n \n
\n\n
\n \n
\n\n {showLoginModal && (\n <>\n {\n login(openVerktoyButtonRef);\n }}\n onClose={(): void => setShowLoginModal(false)}\n />\n \n )}\n \n );\n};\n\nexport default VerktoyDetailsPage;\n","import VerktoyOppgaveModalContainer from '@components/modals/verktoyoppgave-modal-container';\nimport { Verktoy } from '@src/types/minhelseentities';\nimport { useAppDispatch } from '@store';\nimport { setStartAktivitet } from '@store/verktoy/slice/verktoySlice';\n\nimport Loader from '@helsenorge/designsystem-react/components/Loader';\n\nimport VerktoyDetailsPage from './verktoy-details-page';\n\ninterface VerktoyDetailsPageWrapperProps {\n verktoyLoading: boolean;\n verktoy: Verktoy | undefined;\n erLaeringsaktivitet: (verktoyId: string) => boolean;\n}\nexport const VerktoyDetailsPageWrapper = ({\n verktoyLoading,\n verktoy,\n erLaeringsaktivitet,\n}: VerktoyDetailsPageWrapperProps): React.JSX.Element => {\n const dispatch = useAppDispatch();\n\n return (\n <>\n {verktoyLoading && }\n {!verktoyLoading && verktoy && (\n <>\n dispatch(setStartAktivitet({ aktivitetId: verktoy.Laeringsaktivitet!.LaeringsaktivitetId })),\n })}\n />\n {}\n \n )}\n \n );\n};\n","import { useEffect } from 'react';\n\nimport ModalsContainer from '@components/modals/modals-container';\nimport { VerktoyDetailsPageWrapper } from '@components/verktoy-item/verktoy-details-page-wrapper';\nimport { useGetResources } from '@hooks/useGetResources';\nimport { useAppDispatch, useAppSelector } from '@store';\nimport { fetchLaeringsaktiviteterThunk, fetchVerktoyThunk } from '@store/verktoy/thunks';\nimport { getBreadCrumbLink, getErrorLabel, hasPageHeader } from '@utils/verktoyContainer-utils';\nimport { useLocation, useParams } from 'react-router-dom';\n\nimport Loader from '@helsenorge/designsystem-react/components/Loader';\n\nimport PageLoader from '@helsenorge/core-framework/page-loader/page-loader';\nimport PageRoot from '@helsenorge/core-framework/pageroot';\nimport { isAuthorized } from '@helsenorge/framework-utils/hn-authorize';\nimport { getPath } from '@helsenorge/framework-utils/hn-page';\n\nexport const VerktoyDetailsContainer = (): React.JSX.Element | null => {\n const dispatch = useAppDispatch();\n const location = useLocation();\n\n const { verktoyId } = useParams();\n const isLoggedIn = isAuthorized();\n\n const resources = useGetResources();\n const { enteredDetailsPageFrom, error, isWaitingForAktivitetResponse, verktoyLoading, verktoy, laeringsaktiviteter, verktoyFilters } =\n useAppSelector(globalState => globalState.verktoy);\n\n useEffect(() => {\n if (verktoyId) {\n dispatch(fetchVerktoyThunk({ isLoggedIn, verktoyId }));\n\n if (isLoggedIn) {\n dispatch(fetchLaeringsaktiviteterThunk());\n }\n }\n }, [verktoyId]);\n\n if (!resources) {\n return null;\n }\n\n const fullPath = `/${getPath()}${location.pathname}`;\n\n const erLaeringsaktivitet = (verktoyId: string | null): boolean => {\n return laeringsaktiviteter.filter(item => verktoyId === item.VerktoyId).length > 0;\n };\n\n return (\n \n
\n \n {isWaitingForAktivitetResponse && }\n \n erLaeringsaktivitet(verktoyId)}\n />\n \n
\n \n );\n};\n","import VerktoyDetails from '@components/verktoy-item/verktoy-details';\nimport { Verktoy } from '@src/types/minhelseentities';\nimport { useAppSelector } from '@store';\nimport { erLaeringsaktivitetFn } from '@utils/utils';\n\ninterface Props {\n verktoy: Verktoy;\n}\n\nconst VerktoyElement = ({ verktoy }: Props): React.JSX.Element => {\n const laeringsaktiviteter = useAppSelector(globalState => globalState.verktoy.laeringsaktiviteter);\n const erLaeringsaktivitet = erLaeringsaktivitetFn(laeringsaktiviteter, verktoy.VerktoyId);\n\n return (\n
\n \n
\n );\n};\n\nexport default VerktoyElement;\n","import { useState } from 'react';\n\nimport { SorteringType } from '@src/types/minhelseentities';\nimport {\n KREVER_FORSKRIVNING_QUERY_PARAM,\n SOK_QUERY,\n SORTERING_QUERY_PARAM,\n SORTERSTIGENDE_QUERY_PARAM,\n STOTTER_ANONYM_OPPSTART_QUERY_PARAM,\n} from '@utils/constants';\nimport { getSorteringQueryMaps } from '@utils/queryParamUtil';\nimport { removeTralingAndEmptyParamFromUrl } from '@utils/utils';\n\nimport { convertFromStringToBool } from './useFilterObject';\n\n/*** React Hook for å synke state med et spesfikt parameter */\nconst useQueryParam = (key: string, getQuery: URLSearchParams): [string | undefined, (val: string) => void] => {\n const [query, setQuery] = useState(getQuery.get(key) || undefined);\n\n /** Callback metode som oppdaterer selve URL'en basert på parameter key og verdi */\n const updateUrl = (newVal: string): void => {\n setQuery(newVal);\n let kanSetteParam = false;\n\n switch (key) {\n case STOTTER_ANONYM_OPPSTART_QUERY_PARAM:\n kanSetteParam = newVal.trim() !== '' && convertFromStringToBool(newVal);\n break;\n case KREVER_FORSKRIVNING_QUERY_PARAM:\n kanSetteParam = newVal.trim() !== '' && !convertFromStringToBool(newVal);\n break;\n case SOK_QUERY:\n kanSetteParam = typeof newVal === 'string' && newVal !== '';\n break;\n case SORTERING_QUERY_PARAM:\n case SORTERSTIGENDE_QUERY_PARAM:\n kanSetteParam = newVal?.trim() !== '' && newVal !== undefined && newVal !== null;\n break;\n }\n\n setEllerSlettQueryParam(getQuery, kanSetteParam, key, newVal);\n\n if (typeof window !== 'undefined') {\n const { protocol, pathname, host } = window.location;\n let newUrl = '';\n fjernSorterstigendeNarStandard(getQuery);\n\n if (getQuery.toString() !== '') {\n newUrl = `${protocol}//${host}${pathname}?${getQuery.toString()}`;\n } else {\n newUrl = `${protocol}//${host}${pathname}`;\n }\n newUrl = removeTralingAndEmptyParamFromUrl(newUrl);\n window.history.replaceState({}, '', newUrl);\n }\n };\n\n return [query, updateUrl];\n};\n\nexport default useQueryParam;\n\nconst setEllerSlettQueryParam = (params: URLSearchParams, kanSetteParam: boolean, key: string, value: string): void => {\n if (kanSetteParam) {\n settKey(params, key, value);\n } else {\n slettKey(params, key);\n }\n};\n\nconst slettKey = (params: URLSearchParams, key: string): void => {\n if (!erSortering(key)) {\n params.delete(key);\n }\n};\n\nconst settKey = (params: URLSearchParams, key: string, value: string): void => {\n params.delete(key);\n params.append(key, value);\n};\n\nconst erSortering = (key: string): boolean => {\n return key === SORTERING_QUERY_PARAM || key === SORTERSTIGENDE_QUERY_PARAM;\n};\n\nconst fjernSorterstigendeNarStandard = (params: URLSearchParams): void => {\n if (params.has(SORTERING_QUERY_PARAM)) {\n const sortering = getSorteringQueryMaps();\n if (params.get(SORTERING_QUERY_PARAM) === sortering[SorteringType.Standard].name) {\n params.delete(SORTERSTIGENDE_QUERY_PARAM);\n }\n }\n};\n","import { useState } from 'react';\n\nimport { QueryMapSetup } from '@src/types/minhelseentities';\nimport { removeTralingAndEmptyParamFromUrl } from '@utils/utils';\n\n/*** React Hook for å synke state med et spesfikt parameter som kan være multivalue\n * Eksempel: localhost:3000/verktoy?=fagomrade=1&fagomrade=2 osv.\n */\nconst useQueryParamMulti = (key: string, getQuery: URLSearchParams, queryMaps: QueryMapSetup[]): [string[], (val: string[]) => void] => {\n const [query, setQuery] = useState(getQuery.getAll(key) || []);\n const updateUrl = (newVal: string[]): void => {\n setQuery(newVal);\n getQuery.delete(key);\n queryMaps.forEach(queryMapRule => {\n if (arrayHasValue(newVal, queryMapRule.value)) {\n getQuery.append(key, queryMapRule.value);\n }\n });\n if (typeof window !== 'undefined') {\n const { protocol, pathname, host } = window.location;\n let newUrl = `${protocol}//${host}${pathname}?${getQuery.toString()}`;\n newUrl = removeTralingAndEmptyParamFromUrl(newUrl);\n window.history.replaceState({}, '/', newUrl);\n }\n };\n\n return [query, updateUrl];\n};\n\n/** Hjelpemetode som sjekker om string array har en bestemt verdi - ignoreCasing kan settes som param */\nexport const arrayHasValue = (array: string[], valueToCheck: string): boolean => {\n return array.findIndex(f => f === valueToCheck) > -1;\n};\n\nexport default useQueryParamMulti;\n","import { QueryMapSetup } from '../types/minhelseentities';\nimport { VerktoyFilterState } from '../types/stateTypes';\n\nimport {\n FAGOMRADE_QUERY_PARAM,\n KREVER_FORSKRIVNING_QUERY_PARAM,\n MALGRUPPE_QUERY_PARAM,\n STOTTER_ANONYM_OPPSTART_QUERY_PARAM,\n VERKTOYTYPE_QUERY_PARAM,\n} from './constants';\n\nexport type Filters = {\n [key: string]: string | undefined | boolean;\n};\n\nexport interface VerktoyFiltersSettings {\n kreverForskrivningChecked: string | undefined;\n kreverForskrivningCheckedValue: string | undefined;\n stotterAnonymOppstartChecked: string | undefined;\n stotterAnonymOppstartCheckedValue: string | undefined;\n fagomraadeValueFromUrl: QueryMapSetup[];\n fagomraadeValgt: string[];\n malgrupperValueFromUrl: QueryMapSetup[];\n malgrupperValgt: string[];\n verktoytyperValueFromUrl: QueryMapSetup[];\n verktoytyperValgt: string[];\n}\n\n/** Hjelpemetode som forhindrer unødvendige kall til APIet når filteret ikke har noen reelle endringer */\nexport const erMinstEttFilterParameterSatt = (verktoyFilter: VerktoyFilterState): boolean => {\n return (\n verktoyFilter.Fagomrader.length > 0 ||\n verktoyFilter.Malgrupper.length > 0 ||\n verktoyFilter.VerktoyTyper.length > 0 ||\n verktoyFilter.IsAnonymCheckboxChecked === true ||\n verktoyFilter.IsInnloggetCheckboxChecked === true ||\n (verktoyFilter.SokeString !== '' && verktoyFilter.SokeString !== undefined) ||\n (verktoyFilter.Sortering !== '' && verktoyFilter.Sortering !== undefined) ||\n (verktoyFilter.SorterStigende !== '' && verktoyFilter.SorterStigende !== undefined)\n );\n};\n\n/** Hjelpemetode som forhindrer unødvendige kall til APIet når filteret ikke har noen reelle endringer */\nexport const erMinstEttFilterParameterSattUtenomSortering = (verktoyFilter: VerktoyFilterState): boolean => {\n return (\n verktoyFilter.Fagomrader.length > 0 ||\n verktoyFilter.Malgrupper.length > 0 ||\n verktoyFilter.VerktoyTyper.length > 0 ||\n verktoyFilter.IsAnonymCheckboxChecked === true ||\n verktoyFilter.IsInnloggetCheckboxChecked === true ||\n (verktoyFilter.SokeString !== '' && verktoyFilter.SokeString !== undefined)\n );\n};\n\nconst setDefaultFilters = (filters: Filters, keyprefix: string, filterValueFromUrl: QueryMapSetup[], filterValgt: string[]): void => {\n const filteredFagomraader = filterValueFromUrl.filter(fagqp => filterValgt.includes(fagqp.value));\n filteredFagomraader.forEach(e => {\n filters[`${keyprefix}-${e.displayname}`] = e.displayname;\n });\n};\n\nexport const getDefaultVerktoyFilters = (verktoyFilters: VerktoyFiltersSettings): Filters => {\n const defaultValues: Filters = {};\n setDefaultFilters(defaultValues, FAGOMRADE_QUERY_PARAM, verktoyFilters.fagomraadeValueFromUrl, verktoyFilters.fagomraadeValgt);\n setDefaultFilters(defaultValues, MALGRUPPE_QUERY_PARAM, verktoyFilters.malgrupperValueFromUrl, verktoyFilters.malgrupperValgt);\n setDefaultFilters(defaultValues, VERKTOYTYPE_QUERY_PARAM, verktoyFilters.verktoytyperValueFromUrl, verktoyFilters.verktoytyperValgt);\n if (verktoyFilters.kreverForskrivningChecked) {\n defaultValues[KREVER_FORSKRIVNING_QUERY_PARAM] = verktoyFilters.kreverForskrivningCheckedValue;\n }\n if (verktoyFilters.stotterAnonymOppstartChecked) {\n defaultValues[STOTTER_ANONYM_OPPSTART_QUERY_PARAM] = verktoyFilters.stotterAnonymOppstartCheckedValue;\n }\n return defaultValues;\n};\n","import { useEffect } from 'react';\n\nimport { convertFromStringToBool } from '@hooks/useFilterObject';\nimport { useGetResources } from '@hooks/useGetResources';\nimport useQueryParam from '@hooks/useQueryParams';\nimport useQueryParamMulti from '@hooks/useQueryParamsMultiValue';\nimport { QueryMapSetup } from '@src/types/minhelseentities';\nimport { VerktoyFilterState } from '@src/types/stateTypes';\nimport { SortDirection, SortField, SortValue } from '@src/types/verktoyFilterTypes';\nimport { useAppDispatch, useAppSelector } from '@store';\nimport { setIsFilterOpen } from '@store/verktoy/slice/verktoySlice';\n\nimport Checkbox from '@helsenorge/designsystem-react/components/Checkbox';\nimport Label from '@helsenorge/designsystem-react/components/Label';\nimport Spacer from '@helsenorge/designsystem-react/components/Spacer';\n\nimport Filters, { Status } from '@helsenorge/filter/components/filter';\nimport FilterSearch from '@helsenorge/filter/components/filter/filter-search';\nimport { useFilters } from '@helsenorge/filter/components/filter/useFilters';\nimport { isAuthorized } from '@helsenorge/framework-utils/hn-authorize';\n\nimport {\n FAGOMRADE_QUERY_PARAM,\n KREVER_FORSKRIVNING_QUERY_PARAM,\n MALGRUPPE_QUERY_PARAM,\n SOK_QUERY,\n SORTERING_QUERY_PARAM,\n SORTERSTIGENDE_QUERY_PARAM,\n STOTTER_ANONYM_OPPSTART_QUERY_PARAM,\n VERKTOYTYPE_QUERY_PARAM,\n} from '../../utils/constants';\nimport { erMinstEttFilterParameterSattUtenomSortering, getDefaultVerktoyFilters, VerktoyFiltersSettings } from '../../utils/filter-utils';\nimport { getFagomraadeTyperQueryMaps, getMalgrupperQueryMaps, getVerktoyTyperQueryMaps, hentSokParam } from '../../utils/queryParamUtil';\n\ninterface VerktoyFilterProps {\n antallVerktoy: number;\n changeFilterFn: (verktoyFilters: VerktoyFilterState) => void;\n isLoading: boolean;\n}\n\nexport type Filters = {\n [key: string]: string | undefined | boolean;\n};\n\nconst VerktoyFilter = ({ antallVerktoy, changeFilterFn, isLoading }: VerktoyFilterProps): React.JSX.Element | null => {\n const resources = useGetResources();\n const dispatch = useAppDispatch();\n\n const paramsLowerCase = hentSokParam(resources);\n const fagomraader = getFagomraadeTyperQueryMaps(resources);\n const verktoytyper = getVerktoyTyperQueryMaps(resources);\n const malgrupper = getMalgrupperQueryMaps(resources);\n const [kreverForskrivningChecked, setKreverForskrivningChecked] = useQueryParam(KREVER_FORSKRIVNING_QUERY_PARAM, paramsLowerCase);\n const [stotterAnonymOppstartChecked, setStotterAnonymOppstartChecked] = useQueryParam(\n STOTTER_ANONYM_OPPSTART_QUERY_PARAM,\n paramsLowerCase\n );\n\n // Benytter custom Query Param Hooks for å håndtere multi-valg/ single valg for å støtte at\n // valgene i filterkomponenten er synkronisert med URL'en og omvendt\n const [fagomraderValgt, setFagomraderValgt] = useQueryParamMulti(FAGOMRADE_QUERY_PARAM, paramsLowerCase, fagomraader);\n const [verktoytyperValgt, setVerktoyTyperValgt] = useQueryParamMulti(VERKTOYTYPE_QUERY_PARAM, paramsLowerCase, verktoytyper);\n const [malgrupperValgt, setMalgrupperValgt] = useQueryParamMulti(MALGRUPPE_QUERY_PARAM, paramsLowerCase, malgrupper);\n const [searchValueUrl, setSearchValueUrl] = useQueryParam(SOK_QUERY, paramsLowerCase);\n const [valgtSortering, setValgtSortering] = useQueryParam(SORTERING_QUERY_PARAM, paramsLowerCase);\n const [valgtSorterstigende, setValgtSorterstigende] = useQueryParam(SORTERSTIGENDE_QUERY_PARAM, paramsLowerCase);\n\n const brukerKlikkerPaaSokKnapp = (newFilters: VerktoyFilterState): void => {\n changeFilterFn(newFilters);\n };\n\n const callUpdateFilters = (): void => {\n updateFilters();\n };\n\n const verktoyFiltersSettings: VerktoyFiltersSettings = {\n kreverForskrivningChecked: kreverForskrivningChecked,\n kreverForskrivningCheckedValue: resources?.laeringsAktivitetFilter_Checkbox_Label,\n stotterAnonymOppstartChecked: stotterAnonymOppstartChecked,\n stotterAnonymOppstartCheckedValue: resources?.visKunVerktoySomKanApnesAnonymt,\n fagomraadeValueFromUrl: fagomraader,\n fagomraadeValgt: fagomraderValgt,\n malgrupperValueFromUrl: malgrupper,\n malgrupperValgt: malgrupperValgt,\n verktoytyperValueFromUrl: verktoytyper,\n verktoytyperValgt: verktoytyperValgt,\n };\n\n const defaultValues = getDefaultVerktoyFilters(verktoyFiltersSettings);\n\n const getDefaultSortKey = (valgtSortering?: string, valgtSorterstigende?: string): SortValue => {\n if (!valgtSortering) {\n return 'Standard';\n }\n const sortDirection = convertFromStringToBool(valgtSorterstigende).toString();\n return `${valgtSortering}-${sortDirection}` as SortValue;\n };\n\n const { filters, setFilter, updateFilters, activeFilters, setDelayedFilter, searchQuery, setSearchQuery, sortKey, setSortKey } =\n useFilters({\n defaultValues: defaultValues,\n sortKey: getDefaultSortKey(valgtSortering, valgtSorterstigende),\n });\n\n const isFilterOpen = useAppSelector(globalState => globalState.verktoy.isFilterOpen);\n\n const handleSetIsFilterOpen = (isOpen: boolean): void => {\n dispatch(setIsFilterOpen({ isFilterOpen: isOpen }));\n };\n const createSortKey = (field: SortField, direction: SortDirection): SortValue => `${field}-${direction}`;\n const standardSort: SortValue = 'Standard';\n const verktoyNavnAsc: SortValue = createSortKey('VerktoyNavn', 'true');\n const verktoyNavnDesc: SortValue = createSortKey('VerktoyNavn', 'false');\n const publisertDatoAsc: SortValue = createSortKey('PublisertDato', 'true');\n const publisertDatoDesc: SortValue = createSortKey('PublisertDato', 'false');\n\n const parseSortValue = (value: string): { field: string; direction: string } => {\n if (value === 'Standard') {\n return { field: 'Standard', direction: '' };\n }\n const [field, direction] = value.split('-');\n return { field, direction };\n };\n\n const getFilterValue = (allValues: QueryMapSetup[], queryParam: string): string[] => {\n const filteredValuesFromDropdown = activeFilters?.filter(e => e.name.includes(queryParam)) ?? [];\n const dropdownActiveDisplayname = filteredValuesFromDropdown.map(e => e.value);\n return allValues.filter(e => dropdownActiveDisplayname.includes(e.displayname)).map(e => e.value);\n };\n\n const getCurrentFilterSelection = (): VerktoyFilterState => {\n const fagomraderValues = getFilterValue(fagomraader, FAGOMRADE_QUERY_PARAM);\n const malgrupperValues = getFilterValue(malgrupper, MALGRUPPE_QUERY_PARAM);\n const verktoytyperValues = getFilterValue(verktoytyper, VERKTOYTYPE_QUERY_PARAM);\n const isAnonymCheckboxChecked = filters ? filters[STOTTER_ANONYM_OPPSTART_QUERY_PARAM] : '';\n const isInnloggetCheckboxChecked = filters ? filters[KREVER_FORSKRIVNING_QUERY_PARAM] : '';\n\n const currentFilter: VerktoyFilterState = {\n SokeString: searchValueUrl ?? '',\n IsAnonymCheckboxChecked: !!isAnonymCheckboxChecked,\n IsInnloggetCheckboxChecked: !!isInnloggetCheckboxChecked,\n Fagomrader: fagomraderValues,\n Malgrupper: malgrupperValues,\n VerktoyTyper: verktoytyperValues,\n Sortering: valgtSortering,\n SorterStigende: valgtSorterstigende,\n };\n return currentFilter;\n };\n\n useEffect(() => {\n const currentFilter = getCurrentFilterSelection();\n changeFilterFn(currentFilter);\n }, [filters, valgtSortering, valgtSorterstigende]);\n\n // Bruker har trykket på reset filters knappen og vi resetter Query utenom sortering\n useEffect(() => {\n const currentFilter = getCurrentFilterSelection();\n if (erMinstEttFilterParameterSattUtenomSortering(currentFilter) === false) {\n setMalgrupperValgt([]);\n setVerktoyTyperValgt([]);\n setFagomraderValgt([]);\n setVerktoyTyperValgt([]);\n }\n }, [filters]);\n if (!resources) return null;\n return (\n
\n \n handleSetIsFilterOpen(showFilters ?? false)}\n searchFilter={\n {\n setSearchValueUrl(e.target.value);\n setSearchQuery(e.target.value);\n }}\n onSearch={() => {\n const kombinertSokOgFilter: VerktoyFilterState = {\n SokeString: searchValueUrl ?? '',\n IsAnonymCheckboxChecked: convertFromStringToBool(stotterAnonymOppstartChecked),\n IsInnloggetCheckboxChecked:\n kreverForskrivningChecked === undefined ? false : !convertFromStringToBool(kreverForskrivningChecked),\n Fagomrader: fagomraderValgt,\n Malgrupper: malgrupperValgt,\n VerktoyTyper: verktoytyperValgt,\n Sortering: valgtSortering,\n SorterStigende: valgtSorterstigende,\n };\n brukerKlikkerPaaSokKnapp(kombinertSokOgFilter);\n setSearchValueUrl(searchQuery ?? '');\n setValgtSortering(searchQuery ?? '');\n }}\n />\n }\n filterOptions={[\n {\n type: 'inline',\n\n children: (\n
\n {isAuthorized() ? (\n \n }\n checked={filters && !!filters[KREVER_FORSKRIVNING_QUERY_PARAM]}\n onChange={e => {\n setFilter(KREVER_FORSKRIVNING_QUERY_PARAM, e.target.checked ? e.target.value : '');\n if (e.target.checked === true) {\n setKreverForskrivningChecked(e.target.checked ? 'false' : '');\n } else {\n setKreverForskrivningChecked('true');\n }\n }}\n />\n ) : (\n \n }\n checked={filters && !!filters[STOTTER_ANONYM_OPPSTART_QUERY_PARAM]}\n onChange={e => {\n setFilter(STOTTER_ANONYM_OPPSTART_QUERY_PARAM, e.target.checked ? e.target.value : '');\n setStotterAnonymOppstartChecked(e.target.checked ? 'true' : '');\n }}\n />\n )}\n
\n ),\n },\n {\n placeholder: resources?.verktoyFilterHelseomrade,\n label: resources?.verktoyFilterHelseomrade,\n type: 'dropdown',\n onClose: () => callUpdateFilters(),\n children: fagomraader.map(x => (\n {\n // Oppdaterer fagområder med valgt verdi med hensyn til eksisterende valg\n setFagomraderValgt(\n e.target.checked\n ? [...fagomraderValgt, x.value].filter((v, i, a) => a.indexOf(v) === i)\n : fagomraderValgt.filter(v => v !== x.value)\n );\n setDelayedFilter(`${FAGOMRADE_QUERY_PARAM}-${x.displayname}`, e.target.checked ? e.target.value : '');\n }}\n />\n )),\n },\n {\n placeholder: resources?.verktoyFilterMalgrupper,\n label: resources?.verktoyFilterMalgrupper,\n type: 'dropdown',\n onClose: () => callUpdateFilters(),\n children: malgrupper.map(x => (\n {\n // Oppdaterer målgrupper med valgt verdi med hensyn til eksisterende valg\n setMalgrupperValgt(\n e.target.checked\n ? [...malgrupperValgt, x.value].filter((v, i, a) => a.indexOf(v) === i)\n : malgrupperValgt.filter(v => v !== x.value)\n );\n setDelayedFilter(`${MALGRUPPE_QUERY_PARAM}-${x.displayname}`, e.target.checked ? e.target.value : '');\n }}\n />\n )),\n },\n {\n placeholder: resources?.verktoyFilterVerktoytyper,\n label: resources?.verktoyFilterVerktoytyper,\n type: 'dropdown',\n onClose: () => callUpdateFilters(),\n children: verktoytyper.map(x => (\n {\n // Oppdaterer verktoytyper med valgt verdi med hensyn til eksisterende valg\n setVerktoyTyperValgt(\n e.target.checked\n ? [...verktoytyperValgt, x.value].filter((v, i, a) => a.indexOf(v) === i)\n : verktoytyperValgt.filter(v => v !== x.value)\n );\n\n setDelayedFilter(`${VERKTOYTYPE_QUERY_PARAM}-${x.displayname}`, e.target.checked ? e.target.value : '');\n }}\n />\n )),\n },\n ]}\n footerContent={[\n {\n type: 'sort',\n label: resources?.verktoySorteringLabel,\n defaultValue: sortKey,\n onSort: (sortKey: string): void => {\n setSortKey(sortKey);\n const { field, direction } = parseSortValue(sortKey);\n setValgtSortering(field);\n setValgtSorterstigende(direction);\n },\n children: [\n { key: '1', value: standardSort, label: resources?.verktoySorteringStandard },\n { key: '2', value: verktoyNavnAsc, label: resources?.verktoySorteringNavnAsc },\n { key: '3', value: verktoyNavnDesc, label: resources?.verktoySorteringNavnDesc },\n { key: '4', value: publisertDatoAsc, label: resources?.verktoySorteringPublisertDatoAsc },\n { key: '5', value: publisertDatoDesc, label: resources?.verktoySorteringPublisertDatoDesc },\n ],\n },\n ]}\n />\n
\n );\n};\n\nexport default VerktoyFilter;\n","import { useEffect, useRef, useState } from 'react';\n\nimport AssuranceElement from '@components/container/assurance-element';\nimport { useGetResources } from '@hooks/useGetResources';\nimport { StatusType, VerktoyFormal } from '@src/types/minhelseentities';\nimport { VerktoyFilterState } from '@src/types/stateTypes';\nimport { SessionStorageKeys } from '@src/types/types';\nimport { useAppDispatch, useAppSelector } from '@store';\nimport { fetchLaeringsaktiviteterThunk, fetchVerktoyListeThunk } from '@store/verktoy/thunks';\nimport { gyldigFraOgTilDato, scrollAndFocus } from '@utils/utils';\nimport { extractVerktoyIdFromPathname } from '@utils/verktoyContainer-utils';\nimport { useLocation, useNavigate } from 'react-router-dom';\n\nimport Icon from '@helsenorge/designsystem-react/components/Icon';\nimport Toolbox from '@helsenorge/designsystem-react/components/Icons/Toolbox';\nimport Title from '@helsenorge/designsystem-react/components/Title';\nimport { palette } from '@helsenorge/designsystem-react/theme/palette';\n\nimport { isAuthorized } from '@helsenorge/framework-utils/hn-authorize';\n\nimport VerktoyElement from './verktoy-element';\nimport VerktoyFilter from './verktoy-filter';\n\nimport './verktoy-list.scss';\n\nexport const VerktoyList = (): React.JSX.Element | null => {\n const [isFirstUpdate, setIsFirstUpdate] = useState(true);\n\n const location = useLocation();\n const navigate = useNavigate();\n const dispatch = useAppDispatch();\n\n const resources = useGetResources();\n\n const laeringsAktiviteter = useAppSelector(globalState => globalState.verktoy.laeringsaktiviteter);\n const verktoyListeLoading = useAppSelector(globalState => globalState.verktoy.verktoyListeLoading);\n const verktoyFilters = useAppSelector(globalState => globalState.verktoy.verktoyFilters);\n const verktoyListe = useAppSelector(globalState => globalState.verktoy.verktoyListe);\n\n const verktoyRef = useRef(null);\n const verktoyIdFromUrl = extractVerktoyIdFromPathname(location.pathname, 2);\n const returnLocationFromSessionStorage = sessionStorage.getItem(SessionStorageKeys.returnLocation);\n\n const verktoySomSkalVises = verktoyListe.filter(item => {\n return (\n item.StatusType === StatusType.Publisert &&\n item.VerktoyFormal !== VerktoyFormal.Informasjon &&\n gyldigFraOgTilDato(item.GyldigFraDato, item.GyldigTilDato)\n );\n });\n\n const handleFilterChange = (verktoyFilters: VerktoyFilterState): void => {\n dispatch(fetchVerktoyListeThunk({ isLoggedIn: isAuthorized(), verktoyFilters }));\n };\n\n const handleFetch = (): void => {\n if (!location.search) {\n dispatch(fetchVerktoyListeThunk({ isLoggedIn: isAuthorized(), verktoyFilters }));\n }\n if (isAuthorized() && !laeringsAktiviteter.length) {\n dispatch(fetchLaeringsaktiviteterThunk());\n }\n };\n\n const handleScrollAndFocus = (): void => {\n if (returnLocationFromSessionStorage) {\n sessionStorage.removeItem(SessionStorageKeys.returnLocation);\n navigate(returnLocationFromSessionStorage);\n } else if (!verktoyListeLoading && verktoyListe.length > 0 && isFirstUpdate) {\n scrollAndFocus(verktoyListe, verktoyRef);\n setIsFirstUpdate(false);\n }\n };\n\n useEffect(() => {\n setIsFirstUpdate(true);\n handleFetch();\n }, []);\n\n useEffect(() => {\n handleScrollAndFocus();\n }, [verktoyListeLoading, verktoyListe]);\n if (!resources) {\n return null;\n }\n return (\n <>\n \n {resources.finnVerktoy_header}\n \n \n \n {!verktoyListeLoading && verktoySomSkalVises.length === 0 && (\n
\n

{resources.alleVerktoyIsEmpty}

\n \n
\n )}\n {!verktoyListeLoading && verktoySomSkalVises.length > 0 && (\n
\n
    \n {verktoySomSkalVises.map(item => (\n \n \n \n ))}\n
\n
\n )}\n \n );\n};\n\nexport default VerktoyList;\n","import ModalsContainer from '@components/modals/modals-container';\nimport VerktoyList from '@components/verktoy-liste/verktoy-list';\nimport { useGetResources } from '@hooks/useGetResources';\nimport { useAppSelector } from '@store';\nimport { getBreadCrumbLink, getErrorLabel, hasPageHeader } from '@utils/verktoyContainer-utils';\nimport { useLocation } from 'react-router-dom';\n\nimport Loader from '@helsenorge/designsystem-react/components/Loader';\n\nimport PageLoader from '@helsenorge/core-framework/page-loader/page-loader';\nimport PageRoot from '@helsenorge/core-framework/pageroot';\nimport { getPath } from '@helsenorge/framework-utils/hn-page';\n\nexport const VerktoyListContainer = (): React.JSX.Element | null => {\n const location = useLocation();\n\n const { enteredDetailsPageFrom, error, isWaitingForAktivitetResponse, verktoyFilters } = useAppSelector(\n globalState => globalState.verktoy\n );\n const resources = useGetResources();\n\n const fullPath = `/${getPath()}${location.pathname}`;\n\n if (!resources) {\n return null;\n }\n return (\n \n
\n \n {isWaitingForAktivitetResponse && }\n \n \n \n
\n \n );\n};\n","import React, { useEffect } from 'react';\n\nimport { useAppDispatch } from '@src/store';\nimport { loadResources } from '@store/verktoy/thunks';\nimport { createBrowserRouter, Navigate, Outlet, RouteObject, RouterProvider } from 'react-router-dom';\n\nimport PageNotFound from '@helsenorge/core-framework/page-not-found';\nimport LanguageLocales from '@helsenorge/core-utils/constants/languages';\nimport { isAuthorized } from '@helsenorge/framework-utils/hn-authorize';\nimport { getPath } from '@helsenorge/framework-utils/hn-page';\n\nimport { EntryPageContainer } from './components/container/entry-page-container';\nimport { LaeringsaktivitetListContainer } from './components/container/laeringsaktivitet-list-container';\nimport { VerktoyDetailsContainer } from './components/container/verktoydetails-container';\nimport { VerktoyListContainer } from './components/container/verktoylist-container';\n\nconst AuthorizedRoute = ({ redirectTo = '/' }: { redirectTo?: string }): React.JSX.Element => {\n return isAuthorized() ? : ;\n};\n\nexport const routeObject: RouteObject[] = [\n {\n path: '/',\n element: ,\n },\n {\n path: '/mine-verktoy/:verktoyId?',\n element: ,\n children: [\n {\n path: '',\n element: ,\n },\n ],\n },\n {\n path: '/finn-verktoy/:verktoyId?',\n element: ,\n },\n {\n path: '/:verktoyId',\n element: ,\n },\n\n {\n path: '*',\n element: ,\n },\n];\n\nexport const router = createBrowserRouter(routeObject, { basename: `/${getPath()}` });\n\nexport const RouterWrapper = (): React.JSX.Element => {\n const dispatch = useAppDispatch();\n\n useEffect(() => {\n dispatch(loadResources({ language: LanguageLocales.NORWEGIAN }));\n }, []);\n return ;\n};\n","import React from 'react';\n\nimport { store } from '@src/store';\nimport { createRoot } from 'react-dom/client';\nimport { Provider } from 'react-redux';\n\nimport { RouterWrapper } from './routes';\n\nimport '@styles/verktoy.scss';\nimport '@styles/entryPage.scss';\nimport '@styles/verktoyDetails.scss';\n\nconst renderApp = (): void => {\n const anchor: Element | null = document.getElementById('main-content-wrapper');\n\n if (anchor) {\n const root = createRoot(anchor);\n\n root.render(\n \n \n \n \n \n );\n }\n};\n\nif (import.meta.env.MODE === 'mocks') {\n import('./mocks/browser')\n .then(({ worker }) =>\n worker.start({\n onUnhandledRequest: 'bypass',\n })\n )\n .then(() => renderApp());\n} else {\n renderApp();\n}\n"],"file":"static/js/index.AjBbm4JA.js"}