@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
JavaScript
/*!
* 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[``]);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?.[``]&&n.value!==s[``]&&(this._presettingCourse=!0,n.value=s[``])}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"
="${e=>this.handleInputValue(e)}"></dbp-course-select>
</div>
`}};t(`dbp-course-select-element`,s);export{s as t};
//# sourceMappingURL=courseselect.B3SACy-o.js.map