1import{i as R,b7 as v,b as U,ad as N,J as I,G as C,R as E,u as f,v as $,aM as x,b8 as O,N as F,B,H as L,e as V,r as H,C as Y}from"./storefrontApp.5Jl33SLO.min.js";import{A as S}from"./chunk-availability_notifier_events.8Zgo8zG.js";import{W as k}from"./chunk-webapi_http_api.DK12lbX.js";import{S as D}from"./chunk-storefront_base_lit_element.BngXaMu.js";import{b as m,U as w,f as j,$ as d,w as M,e as n,t as b,P as g,c as z,d as A}from"./chunk-vendor-lit.NvY0u02.js";import{o as T}from"./chunk-observe_when_directive.DWgxaey.js";import{P as q}from"./chunk-product_stock_changed_handler.D1B5WJH.js";import{a as G,d as W}from"./chunk-vendor-rxjs.Dp7kflo.js";import{t as l}from"./chunk-translations_directive.GYGOaCp.js";import"./chunk-vendor-di.Bh23gdA.js";import"./chunk-storefront_settings_constants.DIF02Gz.js";import"./chunk-vendor-lodash.CWHFt7Z.js";import"./chunk-vendor-phoenix.cdKS79L.js";import"./chunk-product_events_constants.BHFu5GP.js";class Q extends R{constructor(t){super(),this.moduleName=v.api,this.#t=t}#t;async subscribe(t,i){return this.#t.subscribe(t,i)}async unsubscribe(t,i){return this.#t.unsubscribe(t,i)}}class J extends U{#t;#i;constructor({availabilityNotifierHttpApi:t,flashMessengerApi:i}){super(),this.#t=t,this.#i=i}async subscribe(t,i){if(!i)throw new Error("You cannot subscribe without email");try{const{response:s}=this.#t.subscribe(t,i),e=await s,{status:o,flashMessages:r}=e.data;return this._displayFlashMessages(r),o===N.success?(this.eventBus.emit(new I(S.subscribed,t)),!0):!1}catch(s){return this._doesErrorMessageExist(s)&&this.#i.addFlashMessage({type:"warning",content:s.response.data.validation_messages.email[0]}),!1}}async unsubscribe(t,i){if(!i)throw new Error("You cannot unsubscribe without email");try{const{response:s}=await this.#t.unsubscribe(t,i),e=await s,{status:o,flashMessages:r}=e.data;return this._displayFlashMessages(r),o===N.success?(this.eventBus.emit(new I(S.unsubscribed,t)),!0):!1}catch(s){return this._doesErrorMessageExist(s)&&this.#i.addFlashMessage({type:"warning",content:s.response.data.validation_messages.email[0]}),!1}}_displayFlashMessages(t){t&&this.#i.parseAndAddFlashMessages(t,C)}_doesErrorMessageExist(t){return t.response.data.validation_messages&&t.response.data.validation_messages.email instanceof Array}}class K{getAvailAbilityNotifications(t){return`/products/stock/${t}/availability-notification`}}class X extends k{#t;constructor(t){super(t),this.#t=new K}subscribe(t,i){const s={url:this.#t.getAvailAbilityNotifications(t),method:E.post,data:{email:i}};return this.fetch(s,{decorators:[f.status,f.flashMessages]})}unsubscribe(t,i){const s={url:this.#t.getAvailAbilityNotifications(t),method:E.delete,data:{email:i}};return this.fetch(s,{decorators:[f.status,f.flashMessages]})}}var Z=Object.defineProperty,u=(a,t,i,s)=>{for(var e=void 0,o=a.length-1,r;o>=0;o--)(r=a[o])&&(e=r(t,i,e)||e);return e&&Z(t,i,e),e};class c extends D{constructor(){super(),this.productName="",this.productImage="",this.productId=0,this.productVariantId=0,this._formId=$(),this._controlId=$(),this._variants=[],this._subscribeModalRef=m(),this._unsubscribeModalRef=m(),this._updateBtnOnProductStockChange=({body:t})=>{this.productId===t?.productId&&t&&(this._variants=t.optionValues??[],t?.isNotificationEnabled&&!t?.isBuyable?this._enableBtn(t):this._disableBtn())},this._enableBtn=t=>{this.productVariantId=t.stockId,w.show(this)},this._disableBtn=()=>{w.hide(this)},this._openSubscribeToNotifyModal=()=>{this._subscribeModalRef.value?.open()},this._openUnsubscribeFromNotifyModal=()=>{this._unsubscribeModalRef.value?.open()},this._subscribeUserToProductNotification=()=>{this._availabilityNotifierApi?.subscribe(this.productVariantId,this._userApi?.getUser()?.email)},this._unsubscribeUserFromProductNotification=async()=>{await this._unsubscribeModalRef.value?.close(),this._availabilityNotifierApi?.unsubscribe(this.productVariantId,this._userApi?.getUser()?.email)},this._subscribeAnonymousUserToProductNotification=async t=>{t.preventDefault();const{formService:i}=t.detail;i.submit(async()=>{const s=i.getFormControl(this._controlId)?.value;await this._subscribeModalRef.value?.close(),this._availabilityNotifierApi?.subscribe(this.productVariantId,s)})},this.getApi(x.api).then(t=>{this._userApi=t}),this.getApi(O.api).then(t=>{this._authenticationApi=t}),this.getApi(v.api).then(t=>{this._availabilityNotifierApi=t}),this._setupListeners()}static{this.moduleName=v.component}firstUpdated(t){super.firstUpdated(t),new q(this._updateBtnOnProductStockChange)}connectedCallback(){super.connectedCallback(),this.querySelector('[slot="unsubscribe"]')?.removeAttribute("hidden")}_setupListeners(){G(this,"click").pipe(W()).subscribe(()=>{if(this._userApi?.getUser()&&this._userApi.isProductNotificationPossible(this.productVariantId))return this._subscribeUserToProductNotification();if(this._userApi?.getUser()&&!this._userApi.isProductNotificationPossible(this.productVariantId))return this._openUnsubscribeFromNotifyModal();
1this._openSubscribeToNotifyModal()})}render(){return d` 2 ${j(this._userApi&&this._authenticationApi,()=>d`${T(this._userApi.selectIsProductNotificationPossible$(this.productVariantId),this.getSlot("subscribe"),d` 3 ${this.getSlot("unsubscribe")} 4 <availability-notifier-unsubscribe-modal 5 product-name=${this.productName} 6 product-image=${this.productImage} 7 user-email=${this._userApi?.getUser()?.email} 8 .modal=${this._unsubscribeModalRef} 9 @confirm=${this._unsubscribeUserFromProductNotification} 10 ></availability-notifier-unsubscribe-modal> 11 `)} 12 ${T(this._authenticationApi.selectIsAuthorized$(),M,d`<availability-notifier-subscribe-modal 13 product-name=${this.productName} 14 product-image=${this.productImage} 15 form-id=${this._formId} 16 control-id=${this._controlId} 17 .modal=${this._subscribeModalRef} 18 .variants=${this._variants} 19 @submit=${this._subscribeAnonymousUserToProductNotification} 20 ></availability-notifier-subscribe-modal>`)}`,()=>M)} 21 `}}u([n({type:String,attribute:"product-name"})],c.prototype,"productName");u([n({type:String,attribute:"product-image"})],c.prototype,"productImage");u([n({type:Number,attribute:"product-id"})],c.prototype,"productId");u([n({type:Number,attribute:"product-variant-id"})],c.prototype,"productVariantId");u([b()],c.prototype,"_availabilityNotifierApi");u([b()],c.prototype,"_authenticationApi");u([b()],c.prototype,"_userApi");u([b()],c.prototype,"_formId");u([b()],c.prototype,"_controlId");u([b()],c.prototype,"_variants");var tt=Object.defineProperty,it=(a,t,i,s)=>{for(var e=void 0,o=a.length-1,r;o>=0;o--)(r=a[o])&&(e=r(t,i,e)||e);return e&&tt(t,i,e),e};class P extends g{constructor(){super(),this.variants=[]}static{this.moduleName="availability-notifier-variant-list"}render(){return d`<ul class="list list_features mb-xs-2"> 22 ${z(this.variants,t=>t.id,t=>d` 23 <li class="list__item list__item_feature"> 24 <span class="list__feature-item-label">${t.label}</span> 25 <strong class="list__feature-item-value">${t.userValue}</strong> 26 </li> 27 `)} 28 </ul>`}}it([n({type:Array})],P.prototype,"variants");const et={submit:"submit"};var st=Object.defineProperty,p=(a,t,i,s)=>{for(var e=void 0,o=a.length-1,r;o>=0;o--)(r=a[o])&&(e=r(t,i,e)||e);return e&&st(t,i,e),e};class h extends g{constructor(){super(),this.productName="",this.productImage="",this.variants=[],this.formId="",this.controlId="",this.modal=m(),this._reactiveFormRef=m(),this._emitSubmitEvent=t=>{t.preventDefault();const i=this._getFormService();this.dispatchEvent(new CustomEvent(et.submit,{detail:{formService:i},bubbles:!0}))},this._getFormService=()=>{const t=this._reactiveFormRef.value;if(!t)throw"No form found";return t.formService}}static{this.moduleName="availability-notifier-subscribe-modal"}render(){return d`<h-modal 29 class="modal_availability-notifier" 30 ${A(this.modal)} 31 hidden 32 > 33 <h-modal-header> 34 <h2 class="font_semibold">${l("Notify me when the product is available")}</h2> 35 <h-modal-close 36 aria-label="${l("Close window")}" 37 class="btn btn_icon" 38 > 39 <h-icon 40 icon-name="icon-x" 41 role="button" 42 size="xl" 43 clickable 44 ></h-icon> 45 </h-modal-close> 46 </h-modal-header> 47 <h-modal-body> 48 <div class="grid__row grid__row_xs-vcenter mb-xs-2"> 49 <div class="grid__col grid__col_xs-auto"> 50 <img 51 src=${this.productImage} 52 alt=${this.productName} 53 /> 54 </div> 55 56 <div class="grid__col grid__col_xs-grow availability-notifier-modal__product-name">${this.productName}</div> 57 </div> 58 59 <availability-notifier-variant-list .variants=${this.variants}></availability-notifier-variant-list> 60 61 <form-connector ${A(this._reactiveFormRef)}> 62 <form 63 class="pb-xs-1" 64 id=${this.formId} 65 @submit=${this._emitSubmitEvent} 66 > 67 <control-connector 68 required 69 email 70 class="control" 71 > 72 <h-control> 73 <h-control-label class="control__label"> 74 <label 75 class="label" 76 for=${this.controlId} 77 >${l("Your e-mail address")}</label 78 > 79 </h-control-label> 80 81 <h-control-content class="control"> 82 <h-control-element class="control__element"> 83 <h-input 84 controlId=${this.controlId} 85 controlName=${this.controlId} 86 > 87 <h-input-control></h-input-control> 88 </h-input> 89 </h-control-element> 90 91 <control-errors></control-errors> 92 </h-control-content> 93 </h-control> 94 </control-connector> 95 </form> 96 </form-connector> 97 </h-modal-body> 98 <h-modal-footer> 99 <div class="availability-notifier-modal__footer"> 100 <h-modal-close class="btn btn_outline btn_full-width"> ${l("Cancel")} </h-modal-close> 101 <button 102 type="submit" 103 class="btn btn_primary btn_full-width" 104 @click=${this._emitSubmitEvent} 105 > 106 <h-icon 107 icon-name="icon-bell" 108 css-classes="btn__icon btn__icon_left" 109 ></h-icon> 110 ${l("Sign me up for notification")} 111 </button> 112 </div> 113 </h-modal-footer> 114 </h-modal>`}}p([n({type:String,attribute:"product-name"})],h.prototype,"productName");p([n({type:String,attribute:"product-image"})],h.prototype,"productImage");p([n({type:Array})],h.prototype,"variants");p([n({type:String,attribute:"form-id"})],h.prototype,"formId");p([n({type:String,attribute:"control-id"})],h.prototype,"controlId");p([n({type:Object})],h.prototype,"modal");const ot={confirm:"confirm"};var at=Object.defineProperty,y=(a,t,i,s)=>{for(var e=void 0,o=a.length-1,r;o>=0;o--)(r=a[o])&&(e=r(t,i,e)||e);return e&&at(t,i,e),e};class _ extends g{constructor(){super(),this.productName="",this.productImage="",this.userEmail="",this.modal=m(),this._emitConfirmEvent=()=>{this.dispatchEvent(new CustomEvent(ot.confirm,{bubbles:!0}))}}static{this.moduleName="availability-notifier-unsubscribe-modal"}render(){return d`<h-modal 115 class="modal_availability-notifier-unsubscribe" 116 ${A(this.modal)} 117 hidden 118 > 119 <h-modal-header> 120 <h2 class="font_semibold">${l("Opt out of availability notifications")}</h2> 121 <h-modal-close 122 aria-label="${l("Close window")}" 123 class="btn btn_icon" 124 > 125 <h-icon 126 icon-name="icon-x" 127 role="button" 128 size="l" 129 clickable 130 ></h-icon> 131 </h-modal-close> 132 </h-modal-header> 133 <h-modal-body> 134 <div class="grid__row grid__row_xs-vcenter mb-xs-2"> 135 <div class="grid__col grid__col_xs-auto"> 136 <img 137 src=${this.productImage} 138 alt=${this.productName} 139 /> 140 </div> 141 142 <div class="grid__col grid__col_xs-grow availability-notifier-modal__product-name">${this.productName}</div> 143 </div> 144 145 <p class="mb-xs-2 availability-notifier-modal__text"> 146 ${l("Currently, if this product is in stock, you will be notified at")} <strong>${this.userEmail}</strong>. 147 ${l("Do you want to unsubscribe from notifications about the availability of this product?")} 148 </p> 149 </h-modal-body> 150 <h-modal-footer> 151 <div class="availability-notifier-modal__footer"> 152 <h-modal-close class="btn btn_outline btn_full-width"> ${l("Remain signed up")} </h-modal-close> 153 <button 154 type="submit" 155 class="btn btn_secondary btn_full-width" 156 @click=${this._emitConfirmEvent} 157 > 158 <h-icon 159 icon-name="icon-bell-off" 160 css-classes="btn__icon btn__icon_left" 161 ></h-icon> 162 ${l("Opt out of notifications")} 163 </button> 164 </div> 165 </h-modal-footer> 166 </h-modal>`}}y([n({type:String,attribute:"product-name"})],_.prototype,"productName");y([n({type:String,attribute:"product-image"})],_.prototype,"productImage");y([n({type:String,attribute:"user-email"})],_.prototype,"userEmail");y([n({type:Object})],_.prototype,"modal");class At extends F{static{this.dependencies=[B.component]}static{this.featureName=v.component}
166async init(){const t=await this.getApi(L),i=await this.getApi(V.api),s=new X(t),e=new J({availabilityNotifierHttpApi:s,flashMessengerApi:i}),o=new Q(e);return{cores:[{type:H.api,instance:[o]},{type:Y,instance:[c,P,h,_]}]}}}export{At as AvailabilityNotifierInitializer};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.