From cf737d979e05432bbabf3ff7dea1b327282d2fab Mon Sep 17 00:00:00 2001 From: Jere Ljungberg Date: Fri, 20 Feb 2026 16:42:46 +0200 Subject: [PATCH] UHF-12620: Fix generating course url --- dist/js/linkedevents.min.js | 2 +- .../cross-institution-studies/components/ResultCard.tsx | 4 ++-- src/js/types/drupalSettings.d.ts | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/dist/js/linkedevents.min.js b/dist/js/linkedevents.min.js index 5d60eebc0..b8999740c 100644 --- a/dist/js/linkedevents.min.js +++ b/dist/js/linkedevents.min.js @@ -74,4 +74,4 @@ Url: ${hb(e)}`),!0}return!1}o(ute,"_shouldDropEvent");function lte(e,t){return t card ${s?` ${s}`:""} ${h?" card--external":""} - `,G=f?`h${f}`:"h4";return(0,At.jsxs)("div",{className:V,children:[a&&(0,At.jsx)("div",{className:"card__image",children:a}),(0,At.jsxs)("div",{className:"card__text",children:[(0,At.jsx)(G,{className:"card__title",children:h?(0,At.jsx)(D0,{href:m,title:d,className:"card__link",rel:"bookmark"}):(0,At.jsx)("a",{href:m,className:"card__link",rel:"bookmark",children:d})}),e&&(0,At.jsx)("div",{className:"card__category",children:(0,At.jsx)(SD,{tags:[e],insideCard:!0})}),t&&(0,At.jsx)("div",{className:"card__description",children:r?C0(t):(0,At.jsx)("p",{...y,children:t})}),n&&(0,At.jsx)("div",{className:"card__helptext",children:i?C0(n):(0,At.jsx)("p",{children:n})}),(0,At.jsxs)("div",{className:"card__metas",children:[g?.top&&g.top.length>0&&g.top,D&&(0,At.jsx)(ea,{icon:"location",label:P||Drupal.t("Location",{},{context:"React search"}),content:D}),_&&(0,At.jsx)(ea,{icon:"map",label:Drupal.t("Distance",{},{context:"React search"}),content:_}),v&&(0,At.jsx)(ea,{icon:"clock",label:w||Drupal.t("Date",{},{context:"React search"}),content:v}),E&&(0,At.jsx)(ea,{icon:"calendar",label:x||Drupal.t("Estimated schedule",{},{context:"React search"}),content:E,langAttribute:y}),F&&(0,At.jsx)(ea,{icon:"locate",label:M||Drupal.t("Theme",{},{context:"React search"}),content:F}),L&&(0,At.jsx)(ea,{icon:"layers",label:Drupal.t("Weighted curriculum education",{},{context:"TPR Ontologyword details schools"}),content:L}),k&&(0,At.jsx)(ea,{icon:"group",label:Drupal.t("Language offering",{},{context:"TPR Ontologyword details schools"}),content:k}),S&&(0,At.jsx)(ea,{icon:"globe",label:A||Drupal.t("Language",{},{context:"React search"}),content:S}),z&&(0,At.jsx)(ea,{icon:"calendar",label:B||Drupal.t("Time",{},{context:"Time of event"}),content:z}),R&&(0,At.jsx)(ea,{icon:"bell",label:Drupal.t("Registration time",{},{context:"Event signup period"}),content:R,langAttribute:y}),C&&(0,At.jsx)(ea,{icon:"info-circle",label:Drupal.t("Additional information",{},{context:"Event additional information label"}),content:Drupal.t("The event requires registration or a ticket.",{},{context:"Event additional information value"})}),g?.bottom&&g.bottom.length>0&&g.bottom]}),l&&l.length>0&&(0,At.jsx)("div",{className:"card__tags",children:(0,At.jsx)(SD,{tags:l,langAttribute:y,insideCard:!0})})]})]})}o(Yge,"CardItem");var Kx=Yge;var ED=q(pe()),Kge="helsinki:internet",Zge=o((e,t)=>e.toDateString()!==t.toDateString(),"overDayApart"),Qge=o((e,t)=>e.getFullYear()===t.getFullYear()?e.getMonth()===t.getMonth()?e.getDate():`${e.getDate()}.${e.getMonth()+1}.`:e.toLocaleDateString("fi-FI"),"formatStartDate"),Zx=o(({end_time:e,enrolment_end_time:t,enrolment_start_time:r,id:n,images:i,location:a,name:s,offers:l,start_time:d,type_id:f})=>{let{currentLanguage:m}=drupalSettings.path,{baseUrl:h,imagePlaceholder:g}=drupalSettings.helfi_events,{useCrossInstitutionalStudiesForm:v}=St(wa),w=s?.[m]||s?.fi||Object.values(s)[0]||"",E=o(z=>z.toLocaleTimeString("fi-FI",{hour:"2-digit",minute:"2-digit"}),"formatTime"),x=o(()=>{let z,B,L;try{z=new Date(d),B=new Date(e),L=e?Zge(z,B):!1}catch(V){throw new Error(`DATE ERROR ${V}`)}return L?`${Qge(z,B)} - ${B.toLocaleDateString("fi-FI")}`:`${z.toLocaleDateString("fi-FI")}, ${Drupal.t("at",{},{context:"Indication that events take place in a certain timeframe"})} ${E(z)} - ${E(B)}`},"getDate"),_=o(()=>{let z="",B=a?.name?.[m],L=a?.street_address?.[m];return B&&(z+=B),L&&(B?z+=`, ${L}`:z+=L),z},"getLocation");function y(z){return z?/^(http|https):\/\/[^ "]+$/.test(z):!1}o(y,"isValidUrl");let S=o(()=>l?.some(({info_url:z})=>z!=null&&z[m]!=null&&y(z[m]))??!1,"getOffers"),k=o(z=>{let B={};return z.url&&(B.src=z.url),z.photographer_name&&(B["data-photographer"]=z.photographer_name),(0,ED.jsx)("img",{alt:"",...B})},"imageToElement"),A=o(()=>{let z=i?.find(B=>B.url);return z?k(z):g?C0(g):(0,ED.jsx)("div",{className:"image-placeholder"})},"getImage"),D=o(()=>{if(!(!f||f==="Volunteering"))return f==="Course"?{tag:Drupal.t("Hobby",{},{context:"Event search: hobby tag"}),color:"gold"}:{tag:Drupal.t("Event",{},{context:"Event search: event tag"}),color:"fog-medium-light"}},"getCardCategoryTag"),P=a&&a.id===Kge,C=l?.some(({is_free:z})=>z),R=o(()=>{let z=[];return P&&z.push({tag:Drupal.t("Remote participation",{},{context:"Label for remote events"}),color:"silver"}),C&&z.push({tag:Drupal.t("Free",{},{context:"Label for free events"}),color:"silver"}),z},"getCardTags"),F=o(()=>{if(!t&&!r)return;let z=new Date(r),B=`${z.toLocaleDateString("fi-FI")} ${Drupal.t("at",{},{context:"Indication that events take place in a certain timeframe"})} ${E(z)}`;if(!t)return B;let L=new Date(t);return`${B} - ${L.toLocaleDateString("fi-FI")} ${Drupal.t("at",{},{context:"Indication that events take place in a certain timeframe"})} ${E(L)}`},"getSignUp"),M=o(()=>{if(v){let B=s?.[m]?m:"fi",L="";switch(B){case"fi":L="ristiinopiskelu";break;case"sv":L="kosstudier";break;default:L="cross-institutional-studies"}return`${h}/${B}/${L}/${n}`}if(f&&f==="Course"){let B={fi:"kurssit",sv:"kurser"}[m]??"courses";return`${jb}/${m}/${B}/${n}`}let z={fi:"tapahtumat",sv:"kurser"}[m]??"events";return`${h}/${m}/${z}/${n}`},"getUrl");return{cardCategoryTag:D(),cardImage:A(),cardTags:R(),cardTitle:w,cardUrl:M(),location:P?"Internet":_(),registrationRequired:S(),signUp:F(),time:x()}},"useResultCardProps");var Cq=q(pe());function Jge({cardModifierClass:e,...t}){let r=Zx(t);return(0,Cq.jsx)(Kx,{...r,cardModifierClass:e,cardUrlExternal:!0})}o(Jge,"ResultCard");var Iq=Jge;var Qc=q(pe());function Xge(){let e=St(wa),t=St(u8)||"",{seeAllButtonOverride:r}=drupalSettings?.helfi_events||null,{eventListType:n}=e;return(0,Qc.jsxs)("div",{className:"see-all-button__container",children:[["events","events_and_hobbies"].includes(n)&&(0,Qc.jsx)("div",{className:"see-all-button see-all-button--centered",children:(0,Qc.jsx)(D0,{"data-hds-component":"button","data-hds-variant":"secondary",href:t,title:r||Drupal.t("Search for more events on the Events website",{},{context:"Events search"})})}),["hobbies","events_and_hobbies"].includes(n)&&(0,Qc.jsx)("div",{className:"see-all-button see-all-button--centered",children:(0,Qc.jsx)(D0,{"data-hds-component":"button","data-hds-variant":"secondary",href:jb,title:Drupal.t("Search for more events on the Hobbies website",{},{context:"Events search"})})})]})}o(Xge,"SeeAllButton");var Oq=Xge;var Fr=q(pe());function e0e({addressRequired:e,countNumber:t,error:r,events:n,loading:i,ResultCardComponent:a,retriesExhausted:s,resultHeaderFunction:l,sort:d,validating:f}){let m=a??Iq,{seeAllNearYouLink:h,cardsWithBorders:g}=drupalSettings.helfi_events,v=St(wa),w=v.eventCount,E=(0,Rp.createRef)(),x=Yl(F=>F(hf)),y=!!St(vk),S=Yl((0,Rp.useCallback)(F=>F(_k),[])),k=xe(_k);if(zH(E,S()&&y&&!i&&!f),(0,Rp.useEffect)(()=>{!S()&&!i&&!f&&E.current&&k(!0)},[i,S,E,k,f]),r)return s?(0,Fr.jsx)(VH,{error:r,errorMessage:Drupal.t("Failed to fetch events. You can reload the page or try again later.",{},{context:"Events search: Fetch failed message"}),ref:E}):(0,Fr.jsx)(Sp,{bordered:g,count:w});let A=x(),D=Math.floor(t/w),P=t>w&&t%w,C=t.toString();return(0,Fr.jsxs)("div",{className:`react-search__list-container${i?" loading":""}`,children:[o(()=>i&&!n.length?(0,Fr.jsx)(Sp,{bordered:g,count:w}):e&&!A?(0,Fr.jsx)(m0,{resultText:Drupal.t("Start by searching with your address.",{},{context:"Helsinki near you events search"}),ref:E}):n.length>0?(0,Fr.jsxs)(Fr.Fragment,{children:[(0,Fr.jsx)(m0,{actions:d||void 0,resultText:(0,Fr.jsxs)(Fr.Fragment,{children:[l?l(t):Drupal.formatPlural(C,"1 result","@count results",{},{context:"Events search: result count"}),v.useLocationSearch&&A?` ${Drupal.t("using address",{},{context:"React search: Address result display"})} ${A}`:""]}),ref:E}),i?(0,Fr.jsx)(Sp,{bordered:g,count:w}):n.map(F=>(0,Fr.jsx)(m,{...F,...g&&{cardModifierClass:"card--border"}},F.id)),!v.hidePagination&&(0,Fr.jsx)(GH,{pages:5,totalPages:P?D+1:D})]}):(0,Fr.jsx)(qH,{wrapperClass:"event-list__no-results",ref:E}),"getContent")(),h?(0,Fr.jsx)("div",{className:"see-all-button see-all-button--near-results",children:(0,Fr.jsx)("a",{"data-hds-component":"button",href:h,children:Drupal.t("See all events near you",{},{context:"Helsinki near you events search"})})}):(0,Fr.jsx)(Oq,{})]})}o(e0e,"ResultsContainer");var TD=e0e;async function kD(e,t,r=8e3){let n=new AbortController,i=setTimeout(()=>n.abort(),r),a=await fetch(e,{...t,signal:n.signal});return clearTimeout(i),a}o(kD,"timeoutFetch");var dl=new Map([["helsinki:contact_learning",Drupal.t("Contact teaching",{},{context:"Cross-institutional studies: Teaching mode filter option"})],["helsinki:remote_learning",Drupal.t("Remote teaching",{},{context:"Cross-institutional studies: Teaching mode filter option"})],["helsinki:hybrid_learning",Drupal.t("Hybrid teaching",{},{context:"Cross-institutional studies: Teaching mode filter option"})],["helsinki:online_learning",Drupal.t("Online teaching",{},{context:"Cross-institutional studies: Teaching mode filter option"})]]);var Mp={disabled:!1,isGroupLabel:!1,label:"",selected:!1,value:"",visible:!0};var t0e=["name","start_time"],A0=t0e.map(e=>{let t="";switch(e){case"name":t=Drupal.t("Alphabetical order",{},{context:"Cross-institutional studies: sort option"});break;case"start_time":t=Drupal.t("Start time",{},{context:"Cross-institutional studies: start time filter label"});break}return{...Mp,label:t,value:e}});var N0=ze(""),R0=ze([]),M0=ze([]),ID=ze([A0[0]]),qa=[ge.COMBINED_TEXT,ge.END,ge.LANGUAGE,ge.SORT,ge.START,ge.KEYWORDS,"page"],Dq=ze(null,(e,t,r)=>{let n=new URLSearchParams(window.location.search);if(n.get(ge.COMBINED_TEXT)&&t(N0,n.get(ge.COMBINED_TEXT)?.trim()||""),n.has(ge.END)&&n.has(ge.START)){let s=n.get(ge.START),l=n.get(ge.END);if(s&&l){let d=Array.from(r.entries()).find(([f,{start:m,end:h}])=>m?.toISO()===s&&h?.toISO()===l);d&&t(M0,[{...Mp,label:d[0],value:d[0]}])}}if(n.has(ge.LANGUAGE)){let s=["fi","en","sv"],l=n.get(ge.LANGUAGE)?.split(",").filter(d=>s.includes(d)).map(d=>({...Mp,label:zc[d]||d,selected:!0,value:d}))||[];t(_s,l)}if(n.has(ge.KEYWORDS)){let l=(n.get(ge.KEYWORDS)?.split(",").map(d=>d.trim())||[]).filter(d=>dl.has(d)).map(d=>({...Mp,label:dl.get(d),selected:!0,value:d}));t(R0,l)}if(n.has(ge.SORT)){let s=n.get(ge.SORT),l=A0.find(d=>d.value===s);l&&t(ID,[l])}n.has("page")&&t(gf,parseInt(n.get("page")||"1",10));for(let s of[...n.keys()])qa.includes(s)||n.delete(s);let i=e(hs),a=new URLSearchParams(i);for(let[s,l]of n.entries())a.set(s,l);t(hs,a),t(xa,a)});var Nq=q(pe()),Aq=o(()=>{let[e,t]=dt(N0),[r]=dt(o8),n=xe(sn),i=xe(Pt),{currentLanguage:a}=drupalSettings.path,s=o(()=>{if(r.state!=="hasData")return null;let g=new URL(r.data);return g.searchParams.set(ge.COMBINED_TEXT,e),g.toString()},"getRequestUrl"),{data:l,error:d}=zb(e?.length?s():null,async g=>{let v=await fetch(g);if(!v.ok)throw new Error("Failed to fetch search suggestions");return v.json()},{revalidateOnFocus:!1,revalidateOnReconnect:!1,shouldRetryOnError:!1}),f=o(async()=>d||!l?[]:l.data.map(g=>({value:Iu(g.name,a)?.trim()}))||[],"getSuggestions"),m=o(g=>{i({[ge.COMBINED_TEXT]:g}),t(g)},"handleChange"),h=o(g=>{m(g),n()},"handleSubmit");return(0,Nq.jsx)(Ag,{className:"hdbt-search__filter",clearButtonAriaLabel:Drupal.t("Clear",{},{context:"React search"}),getSuggestions:f,label:Drupal.t("Search word",{},{context:"Cross-institutional studies: search input label"}),onChange:m,onSubmit:h,placeholder:Drupal.t("E.g. biology",{},{context:"Cross-institutional studies: search input placeholder"}),searchButtonAriaLabel:Drupal.t("Search",{},{context:"React search: submit button label"}),suggestionLabelField:"value",value:e||""})},"SearchBar");var CD=q(pe()),Rq=o(({dateOptions:e})=>{let t=xe(Gb),[r,n]=dt(M0),i=o(l=>{if(!l.length){t({end:void 0,start:void 0}),n([]);return}let d=l[0].value,f=e.get(d);if(!f)throw new Error(`No date option found for value: ${d}`);n(l),t({end:f.end,start:f.start})},"handleChange"),a=Drupal.t("Start time",{},{context:"Cross-institutional studies: start time filter label"}),s=Array.from(e.keys()).map(l=>({label:l,value:l}));return(0,CD.jsx)("div",{className:"hdbt-search__filter",children:(0,CD.jsx)(Qr,{className:"hdbt-search__dropdown",clearable:!0,id:"start-date-select",onChange:l=>i(l),options:s,value:r,noTags:!0,texts:{...wp(a),placeholder:Drupal.t("All start times",{},{context:"Cross-institutional studies: start time filter placeholder"})}})})},"StartDateFilter");var Uq=q(me());var Pq=q(pe()),Mq=o(()=>(0,Pq.jsx)(kx,{includeLanguages:["fi","en","sv"],labelOverride:Drupal.t("Language of instruction",{},{context:"Cross-institutional studies: language of instruction filter label"}),placeholderOverride:Drupal.t("All languages of instruction",{},{context:"Cross-institutional studies: language of instruction filter placeholder"})}),"InstructionLanguageFilter");var OD=q(pe()),Lq=o(()=>{let[e,t]=dt(R0),r=xe(Pt);return(0,OD.jsx)("div",{className:"hdbt-search__filter",children:(0,OD.jsx)(Qr,{className:"hdbt-search__dropdown",id:"teaching-mode-filter",multiSelect:!0,noTags:!0,onChange:o(i=>{t(i);let a=i.map(s=>s.value);r({[ge.KEYWORDS]:a.join(",")})},"handleChange"),options:[...dl].map(([i,a])=>({value:i,label:a})).toSorted((i,a)=>i.label.localeCompare(a.label)),texts:{...wp(Drupal.t("Mode of teaching",{},{context:"Cross-institutional studies: Teaching mode filter label"})),placeholder:Drupal.t("All modes of teaching",{},{context:"Cross-institutional studies: Teaching mode filter placeholder"})},theme:Pa,value:e})})},"TeachingModeFilter");var Fq=q(me());var Pp=q(pe()),r0e=(0,Fq.memo)(({submittedParams:e,startDate:t,setStartDate:r,teachingMode:n,setTeachingMode:i,instructionLanguage:a,setInstructionLanguage:s})=>{let l=xe(Yb),d=xe(sn),f=xe(Pt),m=xe(Gb),h=xe(N0),g=[];if(e.has(ge.END)&&e.has(ge.START)&&g.push((0,Pp.jsx)(Fa,{value:t[0]?.label||"",clearSelection:()=>{r([]),m({end:void 0,start:void 0}),d(qa)}},"startDate")),e.has(ge.LANGUAGE)){let w=e.get(ge.LANGUAGE)?.split(",")??[],E=a.filter(x=>w.includes(x.value));g.push(...E.map(x=>(0,Pp.jsx)(Fa,{value:x.label,clearSelection:()=>{let _=a.filter(y=>y.value!==x.value);s(_),f({[ge.LANGUAGE]:_.map(y=>y.value)}),d(qa)}},x.value)))}if(e.has(ge.KEYWORDS)){let w=e.get(ge.KEYWORDS)?.split(",")??[],E=n.filter(x=>w.includes(x.value));g.push(...E.map(x=>(0,Pp.jsx)(Fa,{value:x.label,clearSelection:()=>{let _=n.filter(y=>y.value!==x.value);i(_),f({[ge.KEYWORDS]:_.map(y=>y.value)}),d(qa)}},x.value)))}let v=o(()=>{r([]),i([]),h(""),l(),d(qa)},"resetForm");return(0,Pp.jsx)(Ox,{showClearButton:g.length||e.has(ge.COMBINED_TEXT),resetForm:v,children:g})},(e,t)=>e.submittedParams.toString()===t.submittedParams.toString()),Bq=o(()=>{let e=St(xa),[t,r]=dt(M0),[n,i]=dt(R0),[a,s]=dt(_s);return(0,Pp.jsx)(r0e,{submittedParams:e,startDate:t,setStartDate:r,teachingMode:n,setTeachingMode:i,instructionLanguage:a,setInstructionLanguage:s})},"SelectionsContainer");var ta=q(pe()),n0e={autumn:{end:{month:12,day:31},label:Drupal.t("Autumn",{},{context:"Cross-institutional studies: date filter option"}),start:{month:8,day:1}},spring:{end:{month:5,day:31},label:Drupal.t("Spring",{},{context:"Cross-institutional studies: date filter option"}),start:{month:1,day:1}},summer:{end:{month:7,day:31},label:Drupal.t("Summer",{},{context:"Cross-institutional studies: date filter option"}),start:{month:6,day:1}}},o0e=["spring","summer","autumn"],i0e=o(e=>{let t=e??gt.now(),r=new Map,n=[0,1].flatMap(a=>o0e.map(s=>{let{start:l,end:d,label:f}=n0e[s];return{end:gt.fromObject({day:d.day,month:d.month,year:t.year+a}).endOf("day"),label:f,season:s,start:gt.fromObject({day:l.day,month:l.month,year:t.year+a}).startOf("day")}})),i=n.findIndex(({end:a})=>t<=a);for(i===-1&&(i=0);r.size<3&&i{let n=St(vf),i=xe(sn),a=xe(Dq),s=(0,Uq.useMemo)(()=>i0e(r),[r]);return t||(a(s),e()),(0,ta.jsx)("form",{className:"hdbt-search--react__form-container",onSubmit:o(d=>{d.preventDefault(),i(qa)},"handleSubmit"),role:"search",children:(0,ta.jsxs)("div",{className:"event-form__filters-container",children:[(0,ta.jsx)(Aq,{}),(0,ta.jsxs)("div",{className:"event-form__filter-section-container",children:[(0,ta.jsx)(Rq,{dateOptions:s}),(0,ta.jsx)(Lq,{}),(0,ta.jsx)(Mq,{})]}),(0,ta.jsx)(Ix,{disabled:n.invalidStartDate}),(0,ta.jsx)(Bq,{})]})})},"CrossStudiesFormContainer");var $q=q(pe()),Hq=o(e=>{let{cardTitle:t,location:r,time:n}=Zx(e),{id:i,name:a,keywords:s,in_language:l}=e,{currentLanguage:d}=drupalSettings.path,f=o(()=>{let g=a?.[d]?d:"fi",v="";switch(g){case"fi":v="ristiinopiskelu";break;case"sv":v="korsstudier";break;default:v="cross-institutional-studies"}return`${drupalSettings.helfi_events.baseUrl}/${g}/${v}/${i}`},"getUrl"),m=o(()=>{let g=[];for(let v of s??[]){let w="@id"in v?/\/([^/]+)\/?$/.exec(v["@id"])?.[1]:void 0;w&&dl.has(w)&&g.push(dl.get(w)?.toLowerCase()||"")}return g.join(", ")},"getTheme");return(0,$q.jsx)(Kx,{language:o(()=>{let g=new Set(["fi","sv","en"]),v=[];for(let w of l??[]){let E="@id"in w?/\/([^/?]+)\/?(?:\?.*)?$/.exec(w["@id"])?.[1]:void 0;E&&g.has(E)&&E in zc&&v.push(zc[E]?.toLowerCase()||"")}return v.join(", ")},"getLanguage")(),languageLabel:Drupal.t("Language of instruction",{},{context:"Cross-institutional studies: language of instruction filter label"}),theme:m(),themeLabel:Drupal.t("Mode of teaching",{},{context:"Cross-institutional studies: Teaching mode filter label"}),timeLabel:Drupal.t("Date and time",{},{context:"Cross-institutional studies"}),cardUrl:f(),cardTitle:t,location:r,time:n})},"ResultCard");var jq=q(pe()),qq=o(()=>{let[e,t]=dt(ID),r=xe(Pt),n=xe(sn),i=o(a=>{t(a),r({[ge.SORT]:a[0]?.value}),n(qa)},"handleChange");return(0,jq.jsx)(Qr,{className:"hdbt-search--react__results--sort",options:A0,texts:{label:Drupal.t("Sort search results",{},{context:"Cross-institutional studies: sort label"})},value:e,onChange:i})},"ResultsSort");var jo=q(pe()),Vq={errorRetryCount:3,revalidateOnMount:!0,revalidateIfStale:!1,revalidateOnFocus:!1,revalidateOnReconnect:!1,refreshInterval:6e6},a0e=o(()=>{let[e,t]=(0,Jc.useState)(!1),r=St(wa),[n]=dt(Kb),i=St(l8),a=xe(sn),s=(0,Jc.useRef)(!1),l=(0,Jc.useRef)(!1),{useCrossInstitutionalStudiesForm:d}=r;(0,Jc.useEffect)(()=>{if(s.current)return;new URLSearchParams(window.location.search).get("address")&&(a(),s.current=!0)},[a]);let f=o(()=>{l.current||(l.current=!0)},"setInitialStateInitialized"),m=o(async y=>{let S=await nb({name:"Linkedevents api call",op:"external.api"},async()=>await kD(y,void 0,1e4));if(S.status===200){let k=await S.json();if(k.meta&&k.meta.count>=0)return k}throw new Error("Failed to get data from the API")},"getEvents"),h=!i&&n.state==="hasData"&&(!r.useLocationSearch||n.data.includes(ge.COORDINATES)),{data:g,error:v,isLoading:w,isValidating:E}=zb(h?n.data:null,m,{...Vq,onErrorRetry(y,S,k,A,D){if(D.retryCount>=Vq.errorRetryCount){t(!0);return}A({...D})},keepPreviousData:!0});if(i)return(0,jo.jsxs)(jo.Fragment,{children:[(0,jo.jsx)(F6,{}),(0,jo.jsx)(TD,{countNumber:i?.meta.count||0,loading:!1,events:i?.data||[],validating:!1})]});let x=d&&!l.current||w||n.state==="loading",_=o(y=>Drupal.formatPlural(y,"1 course","@count courses",{},{context:"Cross institutional studies search: result count"}),"getCrossInstitutionalStudiesHeader");return(0,jo.jsxs)(jo.Fragment,{children:[d?(0,jo.jsx)(zq,{initialized:l.current,initialize:f}):(0,jo.jsx)(F6,{}),(0,jo.jsx)(TD,{addressRequired:!h,countNumber:g?.meta?.count||0,error:v,events:g?.data||[],loading:x,ResultCardComponent:d&&Hq||void 0,resultHeaderFunction:d?_:void 0,retriesExhausted:e,sort:d?(0,jo.jsx)(qq,{}):void 0,validating:E})]})},"SearchContainer"),Wq=a0e;var P0=q(pe()),s0e=o(()=>{k5(.05);let e=document.getElementById(xh);if(!e){console.warn("Root id missing for Events filter",{ROOT_ID:xh});return}Gq.default.render((0,P0.jsx)(Qx.default.StrictMode,{children:(0,P0.jsx)(Qx.Suspense,{fallback:(0,P0.jsx)(Sp,{count:30}),children:(0,P0.jsx)(Wq,{})})}),e)},"start");document.addEventListener("DOMContentLoaded",s0e);})(); + `,G=f?`h${f}`:"h4";return(0,At.jsxs)("div",{className:V,children:[a&&(0,At.jsx)("div",{className:"card__image",children:a}),(0,At.jsxs)("div",{className:"card__text",children:[(0,At.jsx)(G,{className:"card__title",children:h?(0,At.jsx)(D0,{href:m,title:d,className:"card__link",rel:"bookmark"}):(0,At.jsx)("a",{href:m,className:"card__link",rel:"bookmark",children:d})}),e&&(0,At.jsx)("div",{className:"card__category",children:(0,At.jsx)(SD,{tags:[e],insideCard:!0})}),t&&(0,At.jsx)("div",{className:"card__description",children:r?C0(t):(0,At.jsx)("p",{...y,children:t})}),n&&(0,At.jsx)("div",{className:"card__helptext",children:i?C0(n):(0,At.jsx)("p",{children:n})}),(0,At.jsxs)("div",{className:"card__metas",children:[g?.top&&g.top.length>0&&g.top,D&&(0,At.jsx)(ea,{icon:"location",label:P||Drupal.t("Location",{},{context:"React search"}),content:D}),_&&(0,At.jsx)(ea,{icon:"map",label:Drupal.t("Distance",{},{context:"React search"}),content:_}),v&&(0,At.jsx)(ea,{icon:"clock",label:w||Drupal.t("Date",{},{context:"React search"}),content:v}),E&&(0,At.jsx)(ea,{icon:"calendar",label:x||Drupal.t("Estimated schedule",{},{context:"React search"}),content:E,langAttribute:y}),F&&(0,At.jsx)(ea,{icon:"locate",label:M||Drupal.t("Theme",{},{context:"React search"}),content:F}),L&&(0,At.jsx)(ea,{icon:"layers",label:Drupal.t("Weighted curriculum education",{},{context:"TPR Ontologyword details schools"}),content:L}),k&&(0,At.jsx)(ea,{icon:"group",label:Drupal.t("Language offering",{},{context:"TPR Ontologyword details schools"}),content:k}),S&&(0,At.jsx)(ea,{icon:"globe",label:A||Drupal.t("Language",{},{context:"React search"}),content:S}),z&&(0,At.jsx)(ea,{icon:"calendar",label:B||Drupal.t("Time",{},{context:"Time of event"}),content:z}),R&&(0,At.jsx)(ea,{icon:"bell",label:Drupal.t("Registration time",{},{context:"Event signup period"}),content:R,langAttribute:y}),C&&(0,At.jsx)(ea,{icon:"info-circle",label:Drupal.t("Additional information",{},{context:"Event additional information label"}),content:Drupal.t("The event requires registration or a ticket.",{},{context:"Event additional information value"})}),g?.bottom&&g.bottom.length>0&&g.bottom]}),l&&l.length>0&&(0,At.jsx)("div",{className:"card__tags",children:(0,At.jsx)(SD,{tags:l,langAttribute:y,insideCard:!0})})]})]})}o(Yge,"CardItem");var Kx=Yge;var ED=q(pe()),Kge="helsinki:internet",Zge=o((e,t)=>e.toDateString()!==t.toDateString(),"overDayApart"),Qge=o((e,t)=>e.getFullYear()===t.getFullYear()?e.getMonth()===t.getMonth()?e.getDate():`${e.getDate()}.${e.getMonth()+1}.`:e.toLocaleDateString("fi-FI"),"formatStartDate"),Zx=o(({end_time:e,enrolment_end_time:t,enrolment_start_time:r,id:n,images:i,location:a,name:s,offers:l,start_time:d,type_id:f})=>{let{currentLanguage:m}=drupalSettings.path,{baseUrl:h,imagePlaceholder:g}=drupalSettings.helfi_events,{useCrossInstitutionalStudiesForm:v}=St(wa),w=s?.[m]||s?.fi||Object.values(s)[0]||"",E=o(z=>z.toLocaleTimeString("fi-FI",{hour:"2-digit",minute:"2-digit"}),"formatTime"),x=o(()=>{let z,B,L;try{z=new Date(d),B=new Date(e),L=e?Zge(z,B):!1}catch(V){throw new Error(`DATE ERROR ${V}`)}return L?`${Qge(z,B)} - ${B.toLocaleDateString("fi-FI")}`:`${z.toLocaleDateString("fi-FI")}, ${Drupal.t("at",{},{context:"Indication that events take place in a certain timeframe"})} ${E(z)} - ${E(B)}`},"getDate"),_=o(()=>{let z="",B=a?.name?.[m],L=a?.street_address?.[m];return B&&(z+=B),L&&(B?z+=`, ${L}`:z+=L),z},"getLocation");function y(z){return z?/^(http|https):\/\/[^ "]+$/.test(z):!1}o(y,"isValidUrl");let S=o(()=>l?.some(({info_url:z})=>z!=null&&z[m]!=null&&y(z[m]))??!1,"getOffers"),k=o(z=>{let B={};return z.url&&(B.src=z.url),z.photographer_name&&(B["data-photographer"]=z.photographer_name),(0,ED.jsx)("img",{alt:"",...B})},"imageToElement"),A=o(()=>{let z=i?.find(B=>B.url);return z?k(z):g?C0(g):(0,ED.jsx)("div",{className:"image-placeholder"})},"getImage"),D=o(()=>{if(!(!f||f==="Volunteering"))return f==="Course"?{tag:Drupal.t("Hobby",{},{context:"Event search: hobby tag"}),color:"gold"}:{tag:Drupal.t("Event",{},{context:"Event search: event tag"}),color:"fog-medium-light"}},"getCardCategoryTag"),P=a&&a.id===Kge,C=l?.some(({is_free:z})=>z),R=o(()=>{let z=[];return P&&z.push({tag:Drupal.t("Remote participation",{},{context:"Label for remote events"}),color:"silver"}),C&&z.push({tag:Drupal.t("Free",{},{context:"Label for free events"}),color:"silver"}),z},"getCardTags"),F=o(()=>{if(!t&&!r)return;let z=new Date(r),B=`${z.toLocaleDateString("fi-FI")} ${Drupal.t("at",{},{context:"Indication that events take place in a certain timeframe"})} ${E(z)}`;if(!t)return B;let L=new Date(t);return`${B} - ${L.toLocaleDateString("fi-FI")} ${Drupal.t("at",{},{context:"Indication that events take place in a certain timeframe"})} ${E(L)}`},"getSignUp"),M=o(()=>{if(v){let B=s?.[m]?m:"fi",L="";switch(B){case"fi":L="ristiinopiskelu";break;case"sv":L="kosstudier";break;default:L="cross-institutional-studies"}return`${h}/${B}/${L}/${n}`}if(f&&f==="Course"){let B={fi:"kurssit",sv:"kurser"}[m]??"courses";return`${jb}/${m}/${B}/${n}`}let z={fi:"tapahtumat",sv:"kurser"}[m]??"events";return`${h}/${m}/${z}/${n}`},"getUrl");return{cardCategoryTag:D(),cardImage:A(),cardTags:R(),cardTitle:w,cardUrl:M(),location:P?"Internet":_(),registrationRequired:S(),signUp:F(),time:x()}},"useResultCardProps");var Cq=q(pe());function Jge({cardModifierClass:e,...t}){let r=Zx(t);return(0,Cq.jsx)(Kx,{...r,cardModifierClass:e,cardUrlExternal:!0})}o(Jge,"ResultCard");var Iq=Jge;var Qc=q(pe());function Xge(){let e=St(wa),t=St(u8)||"",{seeAllButtonOverride:r}=drupalSettings?.helfi_events||null,{eventListType:n}=e;return(0,Qc.jsxs)("div",{className:"see-all-button__container",children:[["events","events_and_hobbies"].includes(n)&&(0,Qc.jsx)("div",{className:"see-all-button see-all-button--centered",children:(0,Qc.jsx)(D0,{"data-hds-component":"button","data-hds-variant":"secondary",href:t,title:r||Drupal.t("Search for more events on the Events website",{},{context:"Events search"})})}),["hobbies","events_and_hobbies"].includes(n)&&(0,Qc.jsx)("div",{className:"see-all-button see-all-button--centered",children:(0,Qc.jsx)(D0,{"data-hds-component":"button","data-hds-variant":"secondary",href:jb,title:Drupal.t("Search for more events on the Hobbies website",{},{context:"Events search"})})})]})}o(Xge,"SeeAllButton");var Oq=Xge;var Fr=q(pe());function e0e({addressRequired:e,countNumber:t,error:r,events:n,loading:i,ResultCardComponent:a,retriesExhausted:s,resultHeaderFunction:l,sort:d,validating:f}){let m=a??Iq,{seeAllNearYouLink:h,cardsWithBorders:g}=drupalSettings.helfi_events,v=St(wa),w=v.eventCount,E=(0,Rp.createRef)(),x=Yl(F=>F(hf)),y=!!St(vk),S=Yl((0,Rp.useCallback)(F=>F(_k),[])),k=xe(_k);if(zH(E,S()&&y&&!i&&!f),(0,Rp.useEffect)(()=>{!S()&&!i&&!f&&E.current&&k(!0)},[i,S,E,k,f]),r)return s?(0,Fr.jsx)(VH,{error:r,errorMessage:Drupal.t("Failed to fetch events. You can reload the page or try again later.",{},{context:"Events search: Fetch failed message"}),ref:E}):(0,Fr.jsx)(Sp,{bordered:g,count:w});let A=x(),D=Math.floor(t/w),P=t>w&&t%w,C=t.toString();return(0,Fr.jsxs)("div",{className:`react-search__list-container${i?" loading":""}`,children:[o(()=>i&&!n.length?(0,Fr.jsx)(Sp,{bordered:g,count:w}):e&&!A?(0,Fr.jsx)(m0,{resultText:Drupal.t("Start by searching with your address.",{},{context:"Helsinki near you events search"}),ref:E}):n.length>0?(0,Fr.jsxs)(Fr.Fragment,{children:[(0,Fr.jsx)(m0,{actions:d||void 0,resultText:(0,Fr.jsxs)(Fr.Fragment,{children:[l?l(t):Drupal.formatPlural(C,"1 result","@count results",{},{context:"Events search: result count"}),v.useLocationSearch&&A?` ${Drupal.t("using address",{},{context:"React search: Address result display"})} ${A}`:""]}),ref:E}),i?(0,Fr.jsx)(Sp,{bordered:g,count:w}):n.map(F=>(0,Fr.jsx)(m,{...F,...g&&{cardModifierClass:"card--border"}},F.id)),!v.hidePagination&&(0,Fr.jsx)(GH,{pages:5,totalPages:P?D+1:D})]}):(0,Fr.jsx)(qH,{wrapperClass:"event-list__no-results",ref:E}),"getContent")(),h?(0,Fr.jsx)("div",{className:"see-all-button see-all-button--near-results",children:(0,Fr.jsx)("a",{"data-hds-component":"button",href:h,children:Drupal.t("See all events near you",{},{context:"Helsinki near you events search"})})}):(0,Fr.jsx)(Oq,{})]})}o(e0e,"ResultsContainer");var TD=e0e;async function kD(e,t,r=8e3){let n=new AbortController,i=setTimeout(()=>n.abort(),r),a=await fetch(e,{...t,signal:n.signal});return clearTimeout(i),a}o(kD,"timeoutFetch");var dl=new Map([["helsinki:contact_learning",Drupal.t("Contact teaching",{},{context:"Cross-institutional studies: Teaching mode filter option"})],["helsinki:remote_learning",Drupal.t("Remote teaching",{},{context:"Cross-institutional studies: Teaching mode filter option"})],["helsinki:hybrid_learning",Drupal.t("Hybrid teaching",{},{context:"Cross-institutional studies: Teaching mode filter option"})],["helsinki:online_learning",Drupal.t("Online teaching",{},{context:"Cross-institutional studies: Teaching mode filter option"})]]);var Mp={disabled:!1,isGroupLabel:!1,label:"",selected:!1,value:"",visible:!0};var t0e=["name","start_time"],A0=t0e.map(e=>{let t="";switch(e){case"name":t=Drupal.t("Alphabetical order",{},{context:"Cross-institutional studies: sort option"});break;case"start_time":t=Drupal.t("Start time",{},{context:"Cross-institutional studies: start time filter label"});break}return{...Mp,label:t,value:e}});var N0=ze(""),R0=ze([]),M0=ze([]),ID=ze([A0[0]]),qa=[ge.COMBINED_TEXT,ge.END,ge.LANGUAGE,ge.SORT,ge.START,ge.KEYWORDS,"page"],Dq=ze(null,(e,t,r)=>{let n=new URLSearchParams(window.location.search);if(n.get(ge.COMBINED_TEXT)&&t(N0,n.get(ge.COMBINED_TEXT)?.trim()||""),n.has(ge.END)&&n.has(ge.START)){let s=n.get(ge.START),l=n.get(ge.END);if(s&&l){let d=Array.from(r.entries()).find(([f,{start:m,end:h}])=>m?.toISO()===s&&h?.toISO()===l);d&&t(M0,[{...Mp,label:d[0],value:d[0]}])}}if(n.has(ge.LANGUAGE)){let s=["fi","en","sv"],l=n.get(ge.LANGUAGE)?.split(",").filter(d=>s.includes(d)).map(d=>({...Mp,label:zc[d]||d,selected:!0,value:d}))||[];t(_s,l)}if(n.has(ge.KEYWORDS)){let l=(n.get(ge.KEYWORDS)?.split(",").map(d=>d.trim())||[]).filter(d=>dl.has(d)).map(d=>({...Mp,label:dl.get(d),selected:!0,value:d}));t(R0,l)}if(n.has(ge.SORT)){let s=n.get(ge.SORT),l=A0.find(d=>d.value===s);l&&t(ID,[l])}n.has("page")&&t(gf,parseInt(n.get("page")||"1",10));for(let s of[...n.keys()])qa.includes(s)||n.delete(s);let i=e(hs),a=new URLSearchParams(i);for(let[s,l]of n.entries())a.set(s,l);t(hs,a),t(xa,a)});var Nq=q(pe()),Aq=o(()=>{let[e,t]=dt(N0),[r]=dt(o8),n=xe(sn),i=xe(Pt),{currentLanguage:a}=drupalSettings.path,s=o(()=>{if(r.state!=="hasData")return null;let g=new URL(r.data);return g.searchParams.set(ge.COMBINED_TEXT,e),g.toString()},"getRequestUrl"),{data:l,error:d}=zb(e?.length?s():null,async g=>{let v=await fetch(g);if(!v.ok)throw new Error("Failed to fetch search suggestions");return v.json()},{revalidateOnFocus:!1,revalidateOnReconnect:!1,shouldRetryOnError:!1}),f=o(async()=>d||!l?[]:l.data.map(g=>({value:Iu(g.name,a)?.trim()}))||[],"getSuggestions"),m=o(g=>{i({[ge.COMBINED_TEXT]:g}),t(g)},"handleChange"),h=o(g=>{m(g),n()},"handleSubmit");return(0,Nq.jsx)(Ag,{className:"hdbt-search__filter",clearButtonAriaLabel:Drupal.t("Clear",{},{context:"React search"}),getSuggestions:f,label:Drupal.t("Search word",{},{context:"Cross-institutional studies: search input label"}),onChange:m,onSubmit:h,placeholder:Drupal.t("E.g. biology",{},{context:"Cross-institutional studies: search input placeholder"}),searchButtonAriaLabel:Drupal.t("Search",{},{context:"React search: submit button label"}),suggestionLabelField:"value",value:e||""})},"SearchBar");var CD=q(pe()),Rq=o(({dateOptions:e})=>{let t=xe(Gb),[r,n]=dt(M0),i=o(l=>{if(!l.length){t({end:void 0,start:void 0}),n([]);return}let d=l[0].value,f=e.get(d);if(!f)throw new Error(`No date option found for value: ${d}`);n(l),t({end:f.end,start:f.start})},"handleChange"),a=Drupal.t("Start time",{},{context:"Cross-institutional studies: start time filter label"}),s=Array.from(e.keys()).map(l=>({label:l,value:l}));return(0,CD.jsx)("div",{className:"hdbt-search__filter",children:(0,CD.jsx)(Qr,{className:"hdbt-search__dropdown",clearable:!0,id:"start-date-select",onChange:l=>i(l),options:s,value:r,noTags:!0,texts:{...wp(a),placeholder:Drupal.t("All start times",{},{context:"Cross-institutional studies: start time filter placeholder"})}})})},"StartDateFilter");var Uq=q(me());var Pq=q(pe()),Mq=o(()=>(0,Pq.jsx)(kx,{includeLanguages:["fi","en","sv"],labelOverride:Drupal.t("Language of instruction",{},{context:"Cross-institutional studies: language of instruction filter label"}),placeholderOverride:Drupal.t("All languages of instruction",{},{context:"Cross-institutional studies: language of instruction filter placeholder"})}),"InstructionLanguageFilter");var OD=q(pe()),Lq=o(()=>{let[e,t]=dt(R0),r=xe(Pt);return(0,OD.jsx)("div",{className:"hdbt-search__filter",children:(0,OD.jsx)(Qr,{className:"hdbt-search__dropdown",id:"teaching-mode-filter",multiSelect:!0,noTags:!0,onChange:o(i=>{t(i);let a=i.map(s=>s.value);r({[ge.KEYWORDS]:a.join(",")})},"handleChange"),options:[...dl].map(([i,a])=>({value:i,label:a})).toSorted((i,a)=>i.label.localeCompare(a.label)),texts:{...wp(Drupal.t("Mode of teaching",{},{context:"Cross-institutional studies: Teaching mode filter label"})),placeholder:Drupal.t("All modes of teaching",{},{context:"Cross-institutional studies: Teaching mode filter placeholder"})},theme:Pa,value:e})})},"TeachingModeFilter");var Fq=q(me());var Pp=q(pe()),r0e=(0,Fq.memo)(({submittedParams:e,startDate:t,setStartDate:r,teachingMode:n,setTeachingMode:i,instructionLanguage:a,setInstructionLanguage:s})=>{let l=xe(Yb),d=xe(sn),f=xe(Pt),m=xe(Gb),h=xe(N0),g=[];if(e.has(ge.END)&&e.has(ge.START)&&g.push((0,Pp.jsx)(Fa,{value:t[0]?.label||"",clearSelection:()=>{r([]),m({end:void 0,start:void 0}),d(qa)}},"startDate")),e.has(ge.LANGUAGE)){let w=e.get(ge.LANGUAGE)?.split(",")??[],E=a.filter(x=>w.includes(x.value));g.push(...E.map(x=>(0,Pp.jsx)(Fa,{value:x.label,clearSelection:()=>{let _=a.filter(y=>y.value!==x.value);s(_),f({[ge.LANGUAGE]:_.map(y=>y.value)}),d(qa)}},x.value)))}if(e.has(ge.KEYWORDS)){let w=e.get(ge.KEYWORDS)?.split(",")??[],E=n.filter(x=>w.includes(x.value));g.push(...E.map(x=>(0,Pp.jsx)(Fa,{value:x.label,clearSelection:()=>{let _=n.filter(y=>y.value!==x.value);i(_),f({[ge.KEYWORDS]:_.map(y=>y.value)}),d(qa)}},x.value)))}let v=o(()=>{r([]),i([]),h(""),l(),d(qa)},"resetForm");return(0,Pp.jsx)(Ox,{showClearButton:g.length||e.has(ge.COMBINED_TEXT),resetForm:v,children:g})},(e,t)=>e.submittedParams.toString()===t.submittedParams.toString()),Bq=o(()=>{let e=St(xa),[t,r]=dt(M0),[n,i]=dt(R0),[a,s]=dt(_s);return(0,Pp.jsx)(r0e,{submittedParams:e,startDate:t,setStartDate:r,teachingMode:n,setTeachingMode:i,instructionLanguage:a,setInstructionLanguage:s})},"SelectionsContainer");var ta=q(pe()),n0e={autumn:{end:{month:12,day:31},label:Drupal.t("Autumn",{},{context:"Cross-institutional studies: date filter option"}),start:{month:8,day:1}},spring:{end:{month:5,day:31},label:Drupal.t("Spring",{},{context:"Cross-institutional studies: date filter option"}),start:{month:1,day:1}},summer:{end:{month:7,day:31},label:Drupal.t("Summer",{},{context:"Cross-institutional studies: date filter option"}),start:{month:6,day:1}}},o0e=["spring","summer","autumn"],i0e=o(e=>{let t=e??gt.now(),r=new Map,n=[0,1].flatMap(a=>o0e.map(s=>{let{start:l,end:d,label:f}=n0e[s];return{end:gt.fromObject({day:d.day,month:d.month,year:t.year+a}).endOf("day"),label:f,season:s,start:gt.fromObject({day:l.day,month:l.month,year:t.year+a}).startOf("day")}})),i=n.findIndex(({end:a})=>t<=a);for(i===-1&&(i=0);r.size<3&&i{let n=St(vf),i=xe(sn),a=xe(Dq),s=(0,Uq.useMemo)(()=>i0e(r),[r]);return t||(a(s),e()),(0,ta.jsx)("form",{className:"hdbt-search--react__form-container",onSubmit:o(d=>{d.preventDefault(),i(qa)},"handleSubmit"),role:"search",children:(0,ta.jsxs)("div",{className:"event-form__filters-container",children:[(0,ta.jsx)(Aq,{}),(0,ta.jsxs)("div",{className:"event-form__filter-section-container",children:[(0,ta.jsx)(Rq,{dateOptions:s}),(0,ta.jsx)(Lq,{}),(0,ta.jsx)(Mq,{})]}),(0,ta.jsx)(Ix,{disabled:n.invalidStartDate}),(0,ta.jsx)(Bq,{})]})})},"CrossStudiesFormContainer");var $q=q(pe()),Hq=o(e=>{let{cardTitle:t,location:r,time:n}=Zx(e),{id:i,name:a,keywords:s,in_language:l}=e,{currentLanguage:d}=drupalSettings.path,f=o(()=>{let g=a?.[d]?d:"fi",v="";switch(g){case"fi":v="ristiinopiskelu";break;case"sv":v="korsstudier";break;default:v="cross-institutional-studies"}return`${drupalSettings.helfi_events.baseUrls[g]}/${v}/${i}`},"getUrl"),m=o(()=>{let g=[];for(let v of s??[]){let w="@id"in v?/\/([^/]+)\/?$/.exec(v["@id"])?.[1]:void 0;w&&dl.has(w)&&g.push(dl.get(w)?.toLowerCase()||"")}return g.join(", ")},"getTheme");return(0,$q.jsx)(Kx,{language:o(()=>{let g=new Set(["fi","sv","en"]),v=[];for(let w of l??[]){let E="@id"in w?/\/([^/?]+)\/?(?:\?.*)?$/.exec(w["@id"])?.[1]:void 0;E&&g.has(E)&&E in zc&&v.push(zc[E]?.toLowerCase()||"")}return v.join(", ")},"getLanguage")(),languageLabel:Drupal.t("Language of instruction",{},{context:"Cross-institutional studies: language of instruction filter label"}),theme:m(),themeLabel:Drupal.t("Mode of teaching",{},{context:"Cross-institutional studies: Teaching mode filter label"}),timeLabel:Drupal.t("Date and time",{},{context:"Cross-institutional studies"}),cardUrl:f(),cardTitle:t,location:r,time:n})},"ResultCard");var jq=q(pe()),qq=o(()=>{let[e,t]=dt(ID),r=xe(Pt),n=xe(sn),i=o(a=>{t(a),r({[ge.SORT]:a[0]?.value}),n(qa)},"handleChange");return(0,jq.jsx)(Qr,{className:"hdbt-search--react__results--sort",options:A0,texts:{label:Drupal.t("Sort search results",{},{context:"Cross-institutional studies: sort label"})},value:e,onChange:i})},"ResultsSort");var jo=q(pe()),Vq={errorRetryCount:3,revalidateOnMount:!0,revalidateIfStale:!1,revalidateOnFocus:!1,revalidateOnReconnect:!1,refreshInterval:6e6},a0e=o(()=>{let[e,t]=(0,Jc.useState)(!1),r=St(wa),[n]=dt(Kb),i=St(l8),a=xe(sn),s=(0,Jc.useRef)(!1),l=(0,Jc.useRef)(!1),{useCrossInstitutionalStudiesForm:d}=r;(0,Jc.useEffect)(()=>{if(s.current)return;new URLSearchParams(window.location.search).get("address")&&(a(),s.current=!0)},[a]);let f=o(()=>{l.current||(l.current=!0)},"setInitialStateInitialized"),m=o(async y=>{let S=await nb({name:"Linkedevents api call",op:"external.api"},async()=>await kD(y,void 0,1e4));if(S.status===200){let k=await S.json();if(k.meta&&k.meta.count>=0)return k}throw new Error("Failed to get data from the API")},"getEvents"),h=!i&&n.state==="hasData"&&(!r.useLocationSearch||n.data.includes(ge.COORDINATES)),{data:g,error:v,isLoading:w,isValidating:E}=zb(h?n.data:null,m,{...Vq,onErrorRetry(y,S,k,A,D){if(D.retryCount>=Vq.errorRetryCount){t(!0);return}A({...D})},keepPreviousData:!0});if(i)return(0,jo.jsxs)(jo.Fragment,{children:[(0,jo.jsx)(F6,{}),(0,jo.jsx)(TD,{countNumber:i?.meta.count||0,loading:!1,events:i?.data||[],validating:!1})]});let x=d&&!l.current||w||n.state==="loading",_=o(y=>Drupal.formatPlural(y,"1 course","@count courses",{},{context:"Cross institutional studies search: result count"}),"getCrossInstitutionalStudiesHeader");return(0,jo.jsxs)(jo.Fragment,{children:[d?(0,jo.jsx)(zq,{initialized:l.current,initialize:f}):(0,jo.jsx)(F6,{}),(0,jo.jsx)(TD,{addressRequired:!h,countNumber:g?.meta?.count||0,error:v,events:g?.data||[],loading:x,ResultCardComponent:d&&Hq||void 0,resultHeaderFunction:d?_:void 0,retriesExhausted:e,sort:d?(0,jo.jsx)(qq,{}):void 0,validating:E})]})},"SearchContainer"),Wq=a0e;var P0=q(pe()),s0e=o(()=>{k5(.05);let e=document.getElementById(xh);if(!e){console.warn("Root id missing for Events filter",{ROOT_ID:xh});return}Gq.default.render((0,P0.jsx)(Qx.default.StrictMode,{children:(0,P0.jsx)(Qx.Suspense,{fallback:(0,P0.jsx)(Sp,{count:30}),children:(0,P0.jsx)(Wq,{})})}),e)},"start");document.addEventListener("DOMContentLoaded",s0e);})(); diff --git a/src/js/react/apps/linkedevents/modules/cross-institution-studies/components/ResultCard.tsx b/src/js/react/apps/linkedevents/modules/cross-institution-studies/components/ResultCard.tsx index 8a393f0b4..d75ee340f 100644 --- a/src/js/react/apps/linkedevents/modules/cross-institution-studies/components/ResultCard.tsx +++ b/src/js/react/apps/linkedevents/modules/cross-institution-studies/components/ResultCard.tsx @@ -10,7 +10,7 @@ export const ResultCard = (props: ResultCardProps) => { const { currentLanguage } = drupalSettings.path; const getUrl = () => { - const resolvedLanguage = name?.[currentLanguage] ? currentLanguage : 'fi'; + const resolvedLanguage: 'fi' | 'sv' | 'en' = name?.[currentLanguage] ? currentLanguage : 'fi'; let courseParam = ''; switch (resolvedLanguage) { @@ -24,7 +24,7 @@ export const ResultCard = (props: ResultCardProps) => { courseParam = 'cross-institutional-studies'; } - return `${drupalSettings.helfi_events.baseUrl}/${resolvedLanguage}/${courseParam}/${id}`; + return `${drupalSettings.helfi_events.baseUrls[resolvedLanguage]}/${courseParam}/${id}`; }; const getTheme = () => { diff --git a/src/js/types/drupalSettings.d.ts b/src/js/types/drupalSettings.d.ts index f4533a1b8..38e377795 100644 --- a/src/js/types/drupalSettings.d.ts +++ b/src/js/types/drupalSettings.d.ts @@ -2,6 +2,9 @@ declare namespace drupalSettings { const path: { currentLanguage: 'fi' | 'en' | 'sv' }; const helfi_events: { baseUrl: string; + baseUrls: { + [key in 'fi' | 'en' | 'sv']: string; + }; imagePlaceholder: string; data: { [key: string]: {