@digital-blueprint/sublibrary-app
Version:
[GitHub Repository](https://github.com/digital-blueprint/sublibrary-app) | [npmjs package](https://www.npmjs.com/package/@digital-blueprint/sublibrary-app) | [Unpkg CDN](https://unpkg.com/browse/@digital-blueprint/sublibrary-app/) | [Sublibrary Bundle](ht
128 lines (122 loc) • 11.8 kB
JavaScript
let e=e=>e,t,n;function r(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?r(Object(n),!0).forEach(function(t){a(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):r(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function a(e,t,n){return(t=o(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e){var t=s(e,`string`);return typeof t==`symbol`?t:t+``}function s(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}
/*!
* License: LGPL-2.1-or-later
* Dependencies:
*
* @webcomponents/scoped-custom-element-registry: BSD-3-Clause
* @dbp-toolkit/app-shell: LGPL-2.1-or-later
* @dbp-toolkit/language-select: LGPL-2.1-or-later
* @dbp-toolkit/auth: LGPL-2.1-or-later
* lit-html: BSD-3-Clause
* @dbp-toolkit/notification: 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
*/
import{a as c,d as l,i as u,s as d,t as f}from"./shared/library-select.DEl5HMBb.js";import{A as p,B as m,D as h,E as g,I as _,M as v,S as y,T as b,V as x,_ as S,b as C,d as w,j as T,t as E}from"./shared/styles.Cw9eAWXA.js";import{t as D}from"./shared/src.BHFEA-pi.js";import{i as O,t as k}from"./shared/utils.Bvuc5ewV.js";import{t as A}from"./shared/library-user-select.Cu2-phSe.js";var j=l(u(),1);v(`dbp-sublibrary-renew-loan`,class extends g(c){constructor(){super(),this.auth={},this._i18n=d(),this.lang=this._i18n.language,this.entryPointUrl=``,this.personIri=``,this.person=null,this.loans=[],this.sublibraryIri=``,this.sublibrary=null}static get scopedElements(){return{"dbp-library-select":f,"dbp-library-user-select":A,"dbp-mini-spinner":h,"dbp-button":S,"dbp-data-table-view":D}}static get properties(){return i(i({},super.properties),{},{lang:{type:String},entryPointUrl:{type:String,attribute:`entry-point-url`},personIri:{type:String,attribute:`person-id`,reflect:!0},loans:{type:Object,attribute:!1},sublibraryIri:{type:String,attribute:`sublibrary-iri`,reflect:!0},auth:{type:Object}})}$(e){return(0,j.default)(this._(e))}getSublibraryCode(){return this.sublibrary.code}connectedCallback(){super.connectedCallback();let e=this;this.updateComplete.then(()=>{this._(`dbp-data-table-view`).setCSSStyle(`
@media (min-width: 900px) {
td .date-col, td .button-col {
white-space: nowrap;
}
}
@media (max-width: 900px) {
td .date-col input[type="time"] {
margin-top: 5px;
}
}
table.dataTable thead th, table.dataTable thead td { padding: 10px; }
.button-col > dbp-button {
margin-right: 5px;
margin-bottom: 5px;
display: inline-block;
}
table.dataTable tbody tr.odd {
background-color: var(--dbp-background);
}
`);let t=e.$(`dbp-library-user-select`),n=e.$(`#renew-loan-block`);t.change(function(){e.person=(0,j.default)(this).data(`object`),e.person!==void 0&&(e.personIri=e.person[`@id`],e.setAttribute(`person-id`,e.personIri),e.dispatchEvent(new CustomEvent(`change`,{detail:{type:`person-id`,value:e.personIri}})),e.loadTable())}).on(`unselect`,function(e){n.hide()})})}loadTable(){let e=this,t=this._i18n,n=this.personIri.split(`/`),r=n[n.length-1],i=this.sublibraryIri.split(`/`),a=i[i.length-1],o=this.entryPointUrl+`/sublibrary/book-loans?perPage=9999999&sublibrary=`+a+`&borrower=`+r,s=this.$(`#no-loans-block`),c=this.$(`#loans-loading`),l=this.$(`#renew-loan-block`);this.person==null||this.sublibraryIri===``||(l.hide(),s.hide(),c.show(),_(()=>this.sublibraryIri===``?!1:(fetch(o,{headers:{"Content-Type":`application/ld+json`,Authorization:`Bearer `+this.auth.token}}).then(e=>{if(!e.ok)throw e;return e.json()}).then(n=>{if(e.loans=n[`hydra:member`],e.loans.length>0){let n=e._(`#book-loans-1`);if(n!==null){let r=new Date().toISOString(),i=[{title:t.t(`renew-loan.book`)},{title:t.t(`book-list.book-description`)},{title:t.t(`renew-loan.end-date`)},null,``],a=[{targets:[3],visible:!1},{targets:[2],orderData:[3]},{targets:[3,4],searchable:!1},{targets:[4],sortable:!1},{targets:[2,4],createdCell:(t,n,r,i,a)=>{let o=e.createScopedElement(`div`);for(o.innerHTML=n;t.lastChild;)t.removeChild(t.lastChild);t.append(...o.children)}}],o=[];e.loans.forEach(function(n){let i=`dbp-button`,a=[k(n.object.name),n.object.description,`<div class="date-col">
<input data-date-id="${n[`@id`]}"
type="date" min="${p(r)}"
value="${p(n.endTime)}">
<input data-time-id="${n[`@id`]}"
type="time" class="hidden" value="23:59:59">
</div>`,n.endTime,`<div class="button-col">
<${i} data-id="${n[`@id`]}" data-type="renew"
value="Ok" name="send" type="is-small"
title="${t.t(`renew-loan.renew-loan`)}" no-spinner-on-click></${i}>
<${i} data-id="${n[`@id`]}" data-type="contact" data-book-name="${k(n.object.name)}"
value="${t.t(`renew-loan.contact-value`)}" name="send" type="is-small"
title="${t.t(`renew-loan.contact-title`,{personName:O(e.person)})}" no-spinner-on-click></${i}>
</div>`];o.push(a)}),n.set_columns(i).set_columnDefs(a).set_datatable(o)}l.show()}else s.show();c.hide()}).catch(n=>{e.handleFetchError(n,t.t(`renew-loan.error-load-loans-summary`)),c.hide()}),!0),1e4,100))}update(e){e.forEach((e,t)=>{t===`lang`?(this._i18n.changeLanguage(this.lang),this.$(`dbp-library-user-select`).change()):t===`sublibraryIri`&&this.loadTable()}),super.update(e)}onLanguageChanged(e){this.lang=e.detail.lang}onDataTableClick(e){let t=e.composedPath(),n=this._i18n,r,i=-1;if(t.some((e,t)=>{if(e.nodeName!==void 0&&e.nodeName.toUpperCase()===`DBP-BUTTON`)return r=e,i=t,!0}),i===-1||(e.preventDefault(),r.hasAttribute(`disabled`)))return;let a=r.getAttribute(`data-type`),o=r.getAttribute(`data-id`);switch(a){case`renew`:{r.start();let e=this._(`#book-loans-1`),t=e.shadowRoot.querySelector(`input[data-date-id='${o}']`),i=e.shadowRoot.querySelector(`input[data-time-id='${o}']`),a=t.value;i.value&&(a+=`T`+i.value);let s=new Date(a);if(s<new Date){E({summary:n.t(`renew-loan.error-renew-loan-summary`),body:n.t(`renew-loan.error-renew-loan-date-in-past`),type:`warning`,timeout:5}),r.stop();return}let c={endTime:s.toISOString()},l=this.entryPointUrl+o;fetch(l,{method:`PATCH`,body:JSON.stringify(c),headers:{"Content-Type":`application/merge-patch+json`,Authorization:`Bearer `+this.auth.token}}).then(e=>{if(!e.ok)throw e;return e.json()}).then(e=>{E({summary:n.t(`renew-loan.info-renew-loan-success-summary`),body:n.t(`renew-loan.info-renew-loan-success-body`),type:`info`,timeout:5}),t.value=p(e.endTime),i.value=T(e.endTime)}).catch(e=>{this.handleFetchError(e,n.t(`renew-loan.error-renew-loan-summary`))}).finally(()=>{r.stop()});break}case`contact`:{let e=r.getAttribute(`data-book-name`),t=n.t(`renew-loan.contact-subject`,{bookName:e});location.href=`mailto:${this.person.email}?subject=${t}`;break}}}static get styles(){return x(t||=e`
${0}
${0}
${0}
.hidden {
display: none;
}
#renew-loan-block {
display: none;
}
form,
table {
width: 100%;
}
#no-loans-block {
font-weight: bold;
}
`,b(),C(),y())}onSublibraryChanged(e){this.sublibraryIri=e.detail.value,this.sublibrary=e.detail.object}_onLoginClicked(e){this.sendSetPropertyEvent(`requested-login-status`,`logged-in`),e.preventDefault()}render(){let t=this._i18n;return m(n||=e`
<form
class="${0}">
<div class="field">
<label class="label">${0}</label>
<div class="control">
<dbp-library-select
subscribe="lang:lang,entry-point-url:entry-point-url,auth:auth"
value="${0}"
@change="${0}"></dbp-library-select>
</div>
</div>
<div class="field">
<label class="label">${0}</label>
<div class="control">
<dbp-library-user-select
subscribe="lang:lang,entry-point-url:entry-point-url,auth:auth"
value="${0}"
show-reload-button
reload-button-title="${0}"></dbp-library-user-select>
</div>
</div>
<dbp-mini-spinner
id="loans-loading"
text="${0}"
style="font-size: 2em; display: none;"></dbp-mini-spinner>
<div id="renew-loan-block" class="field">
<label class="label">${0}</label>
<div class="control">
<dbp-data-table-view
searching
paging
exportable
export-name="${0}"
subscribe="lang:lang"
id="book-loans-1"
@click="${0}"></dbp-data-table-view>
</div>
</div>
<div id="no-loans-block" style="display: none;">
${0}
</div>
</form>
<div
class="notification is-warning ${0}">
${0}
<a href="#" @click="${0}">${0}</a>
</div>
<div
class="notification is-danger ${0}">
${0}
</div>
<div class="${0}">
<dbp-mini-spinner></dbp-mini-spinner>
</div>
`,w({hidden:!this.isLoggedIn()||!this.hasLibraryPermissions()||this.isLoading()}),t.t(`organization-select.label`),this.sublibraryIri,this.onSublibraryChanged,t.t(`library-user-select.headline`),this.personIri,this.person?t.t(`renew-loan.button-refresh-title`,{personName:O(this.person)}):``,t.t(`renew-loan.mini-spinner-text`),t.t(`renew-loan.loans`),t.t(`renew-loan.loans`),e=>this.onDataTableClick(e),t.t(`renew-loan.no-loans`),w({hidden:this.isLoggedIn()||this.isLoading()}),t.t(`error-login-message`),this._onLoginClicked,t.t(`error-login-link`),w({hidden:this.hasLibraryPermissions()||!this.isLoggedIn()||this.isLoading()}),t.t(`error-permission-message`),w({hidden:!this.isLoading()}))}});
//# sourceMappingURL=dbp-sublibrary-renew-loan.js.map