UNPKG

@digital-blueprint/formalize-app

Version:

[GitHub Repository](https://github.com/digital-blueprint/formalize-app) | [npmjs package](https://www.npmjs.com/package/@digital-blueprint/formalize-app) | [Unpkg CDN](https://unpkg.com/browse/@digital-blueprint/formalize-app/) | [Formalize Bundle](https:

68 lines • 6.31 kB
/*! * License: LGPL-2.1-or-later * Dependencies: * * @webcomponents/scoped-custom-element-registry: BSD-3-Clause * @dbp-toolkit/app-shell: LGPL-2.1-or-later * lit-html: BSD-3-Clause * @dbp-toolkit/language-select: LGPL-2.1-or-later * @dbp-toolkit/auth: LGPL-2.1-or-later * @dbp-toolkit/theme-switcher: LGPL-2.1-or-later * universal-router: MIT * @dbp-toolkit/matomo: LGPL-2.1-or-later * cssfilter: MIT * xss: MIT * @dbp-toolkit/form-elements: LGPL-2.1-or-later * html2pdf.js: MIT * exceljs: MIT * jspdf-autotable: MIT * keycloak-js: Apache-2.0 * pdfjs-dist: Apache-2.0 * jszip: (MIT OR GPL-3.0-or-later) * @babel/runtime: MIT * fflate: MIT * iobuffer: MIT * pako: (MIT AND Zlib) * fast-png: MIT * jspdf: MIT * core-js: MIT * performance-now: MIT * raf: MIT * rgbcolor: MIT OR SEE LICENSE IN FEEL-FREE.md * svg-pathdata: MIT * stackblur-canvas: MIT * canvg: MIT * dompurify: (MPL-2.0 OR Apache-2.0) * i18next: MIT * @dbp-toolkit/common: LGPL-2.1-or-later * @lit/reactive-element: BSD-3-Clause * lit-element: BSD-3-Clause * @open-wc/dedupe-mixin: MIT * @open-wc/scoped-elements: MIT * dialog-polyfill: BSD * jquery: MIT * select2: MIT * @dbp-toolkit/notification: LGPL-2.1-or-later * @dbp-toolkit/tabulator-table: LGPL-2.1-or-later * tabulator-tables: MIT * @dbp-toolkit/file-handling: LGPL-2.1-or-later * webdav: MIT * jose: MIT * file-saver: MIT * @dbp-toolkit/grant-permission-dialog: LGPL-2.1-or-later * @dbp-toolkit/pdf-viewer: LGPL-2.1-or-later * @dbp-toolkit/resource-select: LGPL-2.1-or-later * @popperjs/core: MIT * tippy.js: MIT * @dbp-toolkit/tooltip: LGPL-2.1-or-later */ import{y as e}from"./ref.DqB7ABXf.js";import{F as t,J as n,k as r}from"./directive-helpers.C6Xz79AM.js";import{t as i}from"./resource-select.Bx5DnWv9.js";import{n as a}from"./string.qUj92gVq.js";var o=class t extends i{constructor(){super(),this._courseI18n=e(),this.resourcePath=`/base/courses`,this.fetchMode=`search`,this.placeholder=this._getCoursePlaceholder()}update(e){e.has(`lang`)&&(this._courseI18n.changeLanguage(this.lang),this.placeholder=this._getCoursePlaceholder()),super.update(e)}_getCoursePlaceholder(){return this._courseI18n.t(`render-form.course-select.placeholder`)}getCollectionQueryParameters(e){return[[`includeLocal`,`semesterKey,typeKey,lecturers`],[`filter[localData.semesterKey][operator]`,`IN`],...t.getSemesterKeys().map(e=>[`filter[localData.semesterKey][value][]`,e])]}getSearchQueryParameters(e,t){return{search:t.replaceAll(`.`,``).trim()}}getItemQueryParameters(e){return{includeLocal:`semesterKey,typeKey,lecturers`}}static getSemesterKeys(){let e=/* @__PURE__ */ new Date,t=e.getMonth()+1,n=e.getFullYear();if(t>=10||t<=2){let e=t>=10&&t<=12?n:n-1,r=e+1;return[`"${e}S"`,`"${e}W"`,`"${r}S"`]}return[`"${n-1}W"`,`"${n}S"`,`"${n}W"`]}formatResource(e,t){return this.formatCourse(t)}formatCourse(e){let t=e.code??``,n=e.name??``,r=e.localData?.typeKey??``,i=e.localData?.semesterKey??``,a=this.parseSemesterKey(i);return a&&(i=a.term===`W`?this._courseI18n.t(`render-form.course-select.winter-term`,{year:a.year,nextYear:a.year+1}):this._courseI18n.t(`render-form.course-select.summer-term`,{year:a.year})),`${t}: ${n} (${r}, ${i})`}parseSemesterKey(e){if(typeof e!=`string`)return null;let t=e.match(/^(\d{4})([WS])$/i);return t?{year:Number(t[1]),term:t[2].toUpperCase()}:null}},s=class extends r(a){getToken(){if(!this.auth?.token)throw Error(`Authentication token is not available`);return this.auth.token}constructor(){super(),this.entryPointUrl=null,this.courseIdentifier=null,this._presettingCourse=!1,this._userSelectedValue=null}static get properties(){return{...super.properties,entryPointUrl:{type:String,attribute:`entry-point-url`},courseIdentifier:{type:String,attribute:`course-identifier`}}}static get scopedElements(){return{"dbp-course-select":o}}async fetchGermanCourseData(e){let t=await fetch(this.entryPointUrl+e,{headers:{"Content-Type":`application/ld+json`,"Accept-Language":`de`,Authorization:`Bearer `+this.getToken()}});if(t.ok)try{return await t.json()}catch{return null}return null}async handleInputValue(e){e.stopPropagation();let t=e.detail.object,n=t;if(t!=null){let e=t.localData.typeKey,n=t.localData.semesterKey;if(this.lang!==`de`){let e=await this.fetchGermanCourseData(t[`@id`]);e!=null&&(t=e)}let r=`${t.code}: ${t.name} (${e}, ${n})`;this._presettingCourse||(this._userSelectedValue=r),this.value=r}else this._presettingCourse||(this._userSelectedValue=``),this.value=``;if(this._presettingCourse){this._presettingCourse=!1;return}this.dispatchEvent(new CustomEvent(`dbp-course-changed`,{detail:{course:n},bubbles:!0,composed:!0}))}_extractCourseCode(e){if(!e)return null;let t=e.indexOf(`:`);return t===-1?null:e.slice(0,t).trim()}async _presetCourse(e,t){let n=this.renderRoot.querySelector(`#`+this.name+`-picker`);if(!n)return;if(t){let e=`/base/courses/${encodeURIComponent(t)}`;if(n.value===e)return;this._presettingCourse=!0,n.value=e;return}let r=this._extractCourseCode(e);if(!r)return;let i=new URLSearchParams({includeLocal:`semesterKey,typeKey,lecturers`,"filter[foo][condition][path]":`code`,"filter[foo][condition][operator]":`EQUALS`,"filter[foo][condition][value]":`"${r}"`}),a=await fetch(`${this.entryPointUrl}/base/courses?${i.toString()}`,{headers:{Authorization:`Bearer `+this.getToken(),"Accept-Language":`de`}});if(!a.ok)return;let o=((await a.json())[`hydra:member`]??[]).filter(t=>`${t.code}: ${t.name} (${t.localData?.typeKey}, ${t.localData?.semesterKey})`===e);if(o.length!==1)return;let s=o[0];s?.[`@id`]&&n.value!==s[`@id`]&&(this._presettingCourse=!0,n.value=s[`@id`])}updated(e){if(super.updated(e),e.has(`value`)&&this._userSelectedValue===this.value){this._userSelectedValue=null;return}(e.has(`value`)||e.has(`courseIdentifier`)||e.has(`auth`))&&typeof this.value==`string`&&this.value&&this.auth?.token&&this._presetCourse(this.value,this.courseIdentifier)}renderInput(){return n` <div class="control"> <dbp-course-select id="${this.name}-picker" name="${this.name}Picker" subscribe="lang,auth,entry-point-url" @change="${e=>this.handleInputValue(e)}"></dbp-course-select> </div> `}};t(`dbp-course-select-element`,s);export{s as t}; //# sourceMappingURL=courseselect.B3SACy-o.js.map