graphdb-workbench
Version:
The web application for GraphDB APIs
1 lines • 2.29 kB
JavaScript
import{h}from"@stencil/core";import{ToastType,ToastMessageList,ToastrConfig,WindowService}from"../../../../../api/dist/ontotext-workbench-api";import{sanitizeHTML}from"../../utils/html-utils";const toastTypeToIconMap={[ToastType.INFO]:"fa-circle-info",[ToastType.SUCCESS]:"fa-circle-check",[ToastType.WARNING]:"fa-message-lines",[ToastType.ERROR]:"fa-triangle-exclamation"};export class OntoToastr{constructor(){this.toasts=new ToastMessageList([]),this.toastToTimeout=new Map,this.config=ToastrConfig.getDefaultConfig(),this.onToastMouseEnter=t=>()=>{this.clearToastTimeout(t)},this.onToastMouseLeave=t=>()=>{this.setTimeoutForToast(t)}}handleToastCreate(t){this.addToast(t.detail)}render(){var t;return h("section",{key:"82f87d92df2a596a810484d829b155cd74383013",style:{display:this.toasts.isEmpty()?"none":"flex"},class:`onto-toastr-container ${this.config.position}`},null===(t=this.toasts)||void 0===t?void 0:t.getItems().map(t=>h("div",{class:`onto-toast ${t.type}`,key:t.id,onMouseEnter:this.onToastMouseEnter(t),onMouseLeave:this.onToastMouseLeave(t)},h("i",{class:`fa-regular ${toastTypeToIconMap[t.type]}`}),h("span",{onClick:this.handleToastClick(t),class:"toast-message",innerHTML:sanitizeHTML(t.message)}))))}addToast(t){this.toasts.addToStart(t),this.setTimeoutForToast(t),this.updateToastrReference()}setTimeoutForToast(t){var s;const e=WindowService.getWindow().setTimeout(()=>{this.toasts.remove(t),this.clearToastTimeout(t)},(null===(s=t.config)||void 0===s?void 0:s.timeout)||this.config.timeout);this.toastToTimeout.set(t,e)}updateToastrReference(){this.toasts=new ToastMessageList(this.toasts.getItems())}clearToastTimeout(t){const s=this.toastToTimeout.get(t);clearTimeout(s),this.toastToTimeout.delete(t),this.updateToastrReference()}handleToastClick(t){return s=>{var e,o;(null===(e=t.config)||void 0===e?void 0:e.onClick)&&t.config.onClick(s),(null===(o=t.config)||void 0===o?void 0:o.removeOnClick)&&(this.toasts.remove(t),this.clearToastTimeout(t))}}static get is(){return"onto-toastr"}static get originalStyleUrls(){return{$:["onto-toastr.scss"]}}static get styleUrls(){return{$:["onto-toastr.css"]}}static get states(){return{toasts:{}}}static get listeners(){return[{name:"create-toast-event",method:"handleToastCreate",target:"body",capture:!1,passive:!1}]}}