t(),this._openModal(t)}_openModal({productId:t}){this._isModalLoading||(this._isModalLoading=!0,this._firstLoad=!0,this._currentProductId=t,this._pseudoModal=new n.Z(this._carouselTemplateUtil.create([this._carouselTemplateUtil.createItem(I.getTemplate(),"",!0)])),this._pseudoModal.open(this._fetchWindow.bind(this,t)),this._addPluginClasses(this._pseudoModal),this.$emitter.publish(x.MODAL_OPENED,this))}_addPluginClasses(t){t.getModal().classList.add(this.options.modalClass),l.Z.querySelector(t.getModal(),".modal-dialog").classList.add("modal-dialog-centered","modal-xl"),l.Z.querySelector(t.getModal(),".modal-header").remove()}_fetchWindow(t){const e=this._getSibling(t,-1,this._products),i=this._getSibling(t,1,this._products);this._updateProductQuickview(e),this._updateProductQuickview(t),this._updateProductQuickview(i)}_updateProductQuickview(t){this._fetchQuickview(t,this._setProductQuickview.bind(this,t))}_fetchQuickview(t,e){this._products.get(t).loaded?e(this._products.get(t).quickview):this._client.get(`${window.router[this.options.quickviewControllerRoute]}/${t}`,e.bind(this))}_fetchVariantQuickview(t,e,i){const s=window.router[this.options.quickviewControllerVariantRoute];this._client.get(`${s}/${t}?${c.stringify(e)}`,i.bind(this))}_setProductQuickview(t,e){this._products.get(t).loaded=!0,this._products.get(t).quickview=e,this._syncProductsAndDom(t)}_setVariantQuickview(t,e,i){const s=this._products.get(t),r=new F(e,!1,i);s.variants.set(r.id,r),s.variantId=r.id,this._syncProductsAndDom(t)}_syncProductsAndDom(t){if(this._firstLoad){const t=[];this._products.forEach((e=>{t.push(this._carouselTemplateUtil.createItem(e.quickview,e.id,e.id===this._currentProductId))})),this._pseudoModal.updateContent(this._carouselTemplateUtil.create(t)),this._registerCarouselListener(),this._firstLoad=!1}const e=this._products.get(t),i=e.variantId;this._updateCarouselItemContent(t,i?e.variants.get(i).quickview:e.quickview),this._isModalLoading=!1}_registerBuyFormListener(t){this._addEventListener(x.BUY_FORM_BEFORE_SUBMIT,this._pseudoModal.close.bind(this._pseudoModal),l.Z.querySelector(t,this.options.addToCartSelector))}_registerTaxLinkListener(t){this._addEventListener("click",this._onTaxLinkClick,l.Z.querySelector(t,this.options.taxLinkSelector))}_registerVariantSwitchListener(t){this._addEventListener(w.VARIANT_SWITCHED,this._onVariantSwitch,l.Z.querySelector(t,this.options.variantSwitchSelector,!1))}_registerCarouselListener(){l.Z.querySelector(document,`#${k}`,!1).addEventListener(x.BS_CAROUSEL_SLIDE,this._onCarouselSlide.bind(this))}_onCarouselSlide(t){const e="left"===t.direction?-1:1,i=t.relatedTarget.dataset.swagCmsExtensionsQuickviewCarouselProductId,s=this._getSibling(i,e,this._products);this._fetchWindow(i),this._currentProductId=s}_updateCarouselItemContent(t,e){const i=this._getCarouselItem(t,this._pseudoModal.getModal());i&&(i.innerHTML=e,o.Z.initializePlugins(),this._registerBuyFormListener(i),this._registerVariantSwitchListener(i),this._registerTaxLinkListener(i),this._scrollPos>0&&(this._setContainerScrollPosition(t,this._scrollPos),this._scrollPos=0))}_getCarouselItem(t,e){return l.Z.querySelector(e,`[${O}="${t}"]`,!1)}_onVariantSwitch(t){const e=t.detail.listingProductId,i={switched:t.detail.switched,options:t.detail.options,parentId:t.detail.parentId},s=this._setVariantQuickview.bind(this,e,this._joinValues(JSON.parse(i.options)));this._scrollPos=this._getContainerScrollPosition(e),this._fetchVariantQuickview(e,i,s)}_onTaxLinkClick(t){t.preventDefault(),this._client.get(t.target.dataset.url,(t=>{this._pseudoModal.close(),new n.Z(t).open()}))}_addEventListener(t,e,i){const r=e.bind(this);i&&(i.$emitter||new s.Z(i),this._listenerPresent(i,t,r)||i.$emitter.subscribe(t,r))}_listenerPresent(t,e,i=null){return!!t.$emitter&&t.$emitter.listeners.some((t=>t.splitEventName[0]===e&&function(t){return null===i||t.cb===i}(t)))}_setContainerScrollPosition(t,e){l.Z.querySelector(this._getCarouselItem(t,this._pseudoModal.getModal()),this.options.quickviewContainerSelector).scrollTop=e}_getContainerScrollPosition(t){return l.Z.que 'id' => array( 'description' => __( 'The ID for the autosave.' ), 'type' => 'integer', ), ), array( 'methods' => WP_REST_Server::READABLE, 'callback' => array( $this, 'get_item' ), 'permission_callback' => array( $this->revisions_controller, 'get_item_permissions_check' ), 'args' => array( 'context' => $this->get_context_param( array( 'default' => 'view' ) ), ), ), 'schema' => array( $this, 'get_public_item_schema' ), ) ); } /** * Prepares the item for the REST response. * * @since 6.4.0 * * @param WP_Post $item Post revision object. * @param WP_REST_Request $request Request object. * @return WP_REST_Response Response object. */ public function prepare_item_for_response( $item, $request ) { $template = _build_block_template_result_from_post( $item ); $response = $this->parent_controller->prepare_item_for_response( $template, $request ); // Don't prepare the response body for HEAD requests. if ( $request->is_method( 'HEAD' ) ) { return $response; } $fields = $this->get_fields_for_response( $request ); $data = $response->get_data(); if ( in_array( 'parent', $fields, true ) ) { $data['parent'] = (int) $item->post_parent; } $context = ! empty( $request['context'] ) ? $request['context'] : 'view'; $data = $this->filter_response_by_context( $data, $context ); // Wrap the data in a response object. $response = new WP_REST_Response( $data ); if ( rest_is_field_included( '_links', $fields ) || rest_is_field_included( '_embedded', $fields ) ) { $links = $this->prepare_links( $template ); $response->add_links( $links ); } return $response; } /** * Gets the autosave, if the ID is valid. * * @since 6.4.0 * * @param WP_REST_Request $request Full details about the request. * @return WP_Post|WP_Error Autosave post object if ID is valid, WP_Error otherwise. */ public function get_item( $request ) { $parent = $this->get_parent( $request['parent'] ); if ( is_wp_error( $parent ) ) { return $parent; } $autosave = wp_get_post_autosave( $parent->ID ); if ( ! $autosave ) { return new WP_Error( 'rest_post_no_autosave', __( 'There is no autosave revision for this template.' ), array( 'status' => 404 ) ); } $response = $this->prepare_item_for_response( $autosave, $request ); return $response; } /** * Get the parent post. * * @since 6.4.0 * * @param int $parent_id Supplied ID. * @return WP_Post|WP_Error Post object if ID is valid, WP_Error otherwise. */ protected function get_parent( $parent_id ) { return $this->revisions_controller->get_parent( $parent_id ); } /** * Prepares links for the request. * * @since 6.4.0 * * @param WP_Block_Template $template Template. * @return array Links for the given post. */ protected function prepare_links( $template ) { $links = array( 'self' => array( 'href' => rest_url( sprintf( '/%s/%s/%s/%s/%d', $this->namespace, $this->parent_base, $template->id, $this->rest_base, $template->wp_id ) ), ), 'parent' => array( 'href' => rest_url( sprintf( '/%s/%s/%s', $this->namespace, $this->parent_base, $template->id ) ), ), ); return $links; } /** * Retrieves the autosave's schema, conforming to JSON Schema. * * @since 6.4.0 * * @return array Item schema data. */ public function get_item_schema() { if ( $this->schema ) { return $this->add_additional_fields_schema( $this->schema ); } $this->schema = $this->revisions_controller->get_item_schema(); return $this->add_additional_fields_schema( $this->schema ); } }