{"version":3,"sources":["estore/cart/views/order-discount-progress-bar.ts"],"names":["html","render","nothing","unsafeHTML","createRef","ref","determineTranslation","format","CmsTooltip","TooltipPlacement","OrderDiscountApi","OrderDiscountProgressBar","HTMLElement","constructor","super","this","translations","en","nextGoal","goalReached","totalSum","discountTableTitle","no","template","orderDiscountLines","length","labels","amountUntilAppliesFormated","discountPercent","toString","buildTooltip","maximumOrderDiscount","progressBar","api","eventHandlers","setVisibility","visible","removeAttribute","setAttribute","load","await","getOrderDiscounts","sort","a","b","slice","find","element","willApply","value","percent","progress","tooltipBody","document","createElement","tooltipLitMarkup","classList","add","map","line","name","discountDetailsTooltip","placement","Top","context","triggerSelector","bodyTemplate","window","PubSub","subscribe","ignore","initDetails","status","connectedCallback","customElements","define"],"mappings":"OAASA,KAAMC,OAAQC,OAAwB,KAAV,kBAC5BC,UAAmD,KAAjC,yCAClBC,UAAWC,GAAoC,KAAzB,iCACtBC,oBAAwD,KAA5B,mCAE9B,yCACEC,MAAwC,KAA1B,kCACdC,WAAYC,gBAAyD,KAAjC,yCAEpCC,gBAA4E,KAApD,2DAEpBC,iCAAiCC,YAI1CC,cACIC,MAAK,EAiBDC,KAAAC,aAAyD,CAC7DC,GAAI,CACAC,SAAU,+CACVC,YAAa,wBACbC,SAAU,YACVC,mBAAoB,U,EAExBC,GAAI,CACAJ,SAAU,6CACVC,YAAa,sBACbC,SAAU,YACVC,mBAAoB,Q,GAMpBN,KAAAQ,SAAW,IAAMR,KAAKS,mBAAmBC,OAASzB;gCAC9Be,KAAKG,SAAW,cAAe;cACjDH,KAAKG,SAAWlB;oCACMG,WAAWI,OAAOQ,KAAKW,OAAOR,SAAUH,KAAKG,SAASS,2BAA4BZ,KAAKG,SAASU,gBAAgBC,SAAQ,CAAE,CAAC;;;;;;kBAM7Id,KAAKe,aAAY;cACnB9B;;;;oCAIoBG,WAAWI,OAAOQ,KAAKW,OAAOP,YAAaJ,KAAKgB,qBAAqBH,gBAAgBC,SAAQ,CAAE,CAAC;;;wBAG5GxB,IAAIU,KAAKiB,WAAW;UAChC9B,QAIAa,KAAAkB,IAAM,IAAIvB,iBAIVK,KAAAiB,YAAc5B,UAAS,EA3D3BW,KAAKW,OAASpB,qBAAqBS,KAAKC,YAAY,EACpDD,KAAKS,mBAAqB,KAC1BT,KAAKmB,cAAa,CACtB,CAGOC,cAAcC,GACdA,EACCrB,KAAKsB,gBAAgB,QAAQ,EAE7BtB,KAAKuB,aAAa,SAAU,EAAE,CAEtC,CAkDQC,aACJxB,KAAKS,mBAAqBgB,MAAMzB,KAAKkB,IAAIQ,kBAAiB,EAC1D1B,KAAKS,mBAAmBkB,KAAK,CAACC,EAAGC,IAAMD,EAAEf,gBAAkBgB,EAAEhB,eAAe,EAC5Eb,KAAKgB,qBAAuBhB,KAAKS,mBAAmBqB,MAAM,CAAC,CAAC,EAAE,GAE9D9B,KAAKG,SAAWH,KAAKS,mBAAmBsB,KAAK,IACzC,GAAyB,GAArBC,EAAQC,UACZ,OAAOD,CACX,CAAC,EAED9C,OAAOc,KAAKQ,SAAQ,EAAIR,IAAI,EAExBA,KAAKiB,YAAYiB,QACjBlC,KAAKiB,YAAYiB,MAAMC,QAAUnC,KAAKG,SAAWH,KAAKG,SAASiC,SAAW,IAElF,CAEQrB,eACJ,IAAMsB,EAAcC,SAASC,cAAc,OAAO,EAE5CC,GADNH,EAAYI,UAAUC,IAAI,sBAAsB,EACvBzD;;0BAEPe,KAAKW,OAAON;0BACZL,KAAKW,OAAOL;;;sBAGhBN,KAAKS,mBAAmBkC,IAAIC,GAAQ3D;oDACN2D,EAAKC;qEACYD,EAAK/B;0BAChD;;eAMZiC,GAFN5D,OAAOsD,EAAkBH,CAAW,EAEL,IAAI5C,WAAW,CAC1CsD,UAAWrD,iBAAiBsD,IAC5BC,QAASjD,KACTkD,gBAAiB,mCACjBC,aAAcd,C,CACjB,GAED,OAAOS,CACX,CAEQ3B,gBACJiC,OAAOC,OAAOC,UAAU,2BAA6B,CAACC,EAAaC,KACrC,OAAvBA,EAAYC,QACXzD,KAAKwB,KAAI,CAEjB,CAAC,CACL,CAGAkC,0BACIjC,MAAMzB,KAAKwB,KAAI,CACnB,C,CAGJmC,eAAeC,OAAO,8BAA+BhE,wBAAwB,SA/HhEA,wBA+HiE","file":"order-discount-progress-bar.js","sourcesContent":["import { html, render, nothing} from \"lit-html\";\r\nimport { unsafeHTML } from \"lit-html/directives/unsafe-html\";\r\nimport { createRef, ref } from \"lit-html/directives/ref\";\r\nimport { determineTranslation } from \"../../../utils/language.js\";\r\nimport { ProgressBar } from \"../../../common/progress-bar.js\";\r\nimport \"../../../common/progress-bar.js\";\r\nimport { format } from '../../../utils/string.js';\r\nimport { CmsTooltip, TooltipPlacement } from \"../../../website/cms-tooltip.js\";\r\nimport { IOrderDiscount } from \"../../../api/estore/discount/interfaces/order-discount.js\";\r\nimport { OrderDiscountApi } from \"../../../api/estore/discount/order-discount-api.js\";\r\n\r\nexport class OrderDiscountProgressBar extends HTMLElement {\r\n ///TODO:\r\n /// Use number formating from number.ts (test with decimals). Did not found it useful in this specific component.\r\n\r\n constructor() {\r\n super();\r\n this.labels = determineTranslation(this.translations);\r\n this.orderDiscountLines = null;\r\n this.eventHandlers(); \r\n }\r\n\r\n /* #region Public */\r\n public setVisibility(visible: boolean): void {\r\n if(visible) {\r\n this.removeAttribute(\"hidden\")\r\n } else {\r\n this.setAttribute(\"hidden\", \"\");\r\n }\r\n }\r\n /* #endregion */\r\n\r\n /* #region Translations */\r\n private translations: { [key:string]: {[key:string]: string} } = {\r\n en: {\r\n nextGoal: \"{0} left till {1}% discount\",\r\n goalReached: \"You got {0}% discount\",\r\n totalSum: \"Total sum\",\r\n discountTableTitle: \"Discount\",\r\n },\r\n no: {\r\n nextGoal: \"{0} igjen til {1}% rabatt\",\r\n goalReached: \"Du fikk {0}% rabatt\",\r\n totalSum: \"Total sum\",\r\n discountTableTitle: \"Rabatt\",\r\n }\r\n };\r\n /* #endregion */\r\n\r\n /* #region Markup */\r\n private template = () => this.orderDiscountLines.length ? html`\r\n
\r\n ${this.nextGoal ? html`\r\n
${unsafeHTML(format(this.labels.nextGoal, this.nextGoal.amountUntilAppliesFormated, this.nextGoal.discountPercent.toString()))}
\r\n \r\n ${this.buildTooltip()}\r\n ` : html`\r\n \r\n \r\n \r\n
${unsafeHTML(format(this.labels.goalReached, this.maximumOrderDiscount.discountPercent.toString()))}
\r\n ` }\r\n
\r\n \r\n ` : nothing;\r\n /* #endregion */\r\n\r\n /* #region Private */\r\n private api = new OrderDiscountApi();\r\n private orderDiscountLines: IOrderDiscount[];\r\n private nextGoal: IOrderDiscount;\r\n private maximumOrderDiscount: IOrderDiscount;\r\n private progressBar = createRef();\r\n protected labels: { [key: string]:any };\r\n\r\n private async load(): Promise {\r\n this.orderDiscountLines = await this.api.getOrderDiscounts();\r\n this.orderDiscountLines.sort((a, b) => a.discountPercent - b.discountPercent);\r\n this.maximumOrderDiscount = this.orderDiscountLines.slice(-1)[0];\r\n\r\n this.nextGoal = this.orderDiscountLines.find((element: IOrderDiscount) => {\r\n if (element.willApply == false)\r\n return element;\r\n });\r\n\r\n render(this.template(), this);\r\n\r\n if (this.progressBar.value){\r\n this.progressBar.value.percent = this.nextGoal ? this.nextGoal.progress : 100;\r\n }\r\n }\r\n\r\n private buildTooltip() {\r\n const tooltipBody = document.createElement(\"table\");\r\n tooltipBody.classList.add(\"order-discount-table\");\r\n const tooltipLitMarkup = html`\r\n \r\n ${this.labels.totalSum}\r\n ${this.labels.discountTableTitle}\r\n \r\n \r\n ${this.orderDiscountLines.map(line => html`\r\n ${line.name}\r\n ${line.discountPercent}%\r\n `)}\r\n \r\n `;\r\n\r\n render(tooltipLitMarkup, tooltipBody);\r\n\r\n const discountDetailsTooltip = new CmsTooltip({\r\n placement: TooltipPlacement.Top,\r\n context: this,\r\n triggerSelector: \".btn-show-order-discount-tooltip\",\r\n bodyTemplate: tooltipBody,\r\n });\r\n\r\n return discountDetailsTooltip;\r\n }\r\n\r\n private eventHandlers(){\r\n window.PubSub.subscribe('estore.callback.shopcart', (ignore: any, initDetails: any) => {\r\n if(initDetails.status === \"Ok\"){\r\n this.load();\r\n }\r\n });\r\n }\r\n\r\n /* #endregion */\r\n async connectedCallback() {\r\n await this.load();\r\n }\r\n}\r\n\r\ncustomElements.define(\"order-discount-progress-bar\", OrderDiscountProgressBar);"]}