{"version":3,"names":["actionHeaderSelectorCss","ActionHeaderSelectorStyle0","ActionHeaderSelector","this","scAddToListSent","cursor","LoadingCursor","dispatchProductClickEvent","engine","_a","bindings","productClick","loadProductActions","searchController","interfaceElement","type","buildSearch","buildProductListing","responseId","state","Object","keys","actionBatchStore","selectedProducts","forEach","id","product","payload","position","name","ec_name","price","ec_price","productId","ec_product_id","dispatch","connectedCallback","initializeBindings","host","store","onChange","selectedCount","showDropdown","disconnectedCallback","addToCart","products","map","quantity","ProductNumber","Quantity","UnitOfMeasure","additionalFields","catalog","catalogs","length","actionHeaderRequestInfo","numberOfProducts","setLoadingCursor","window","sc_addToCart","then","response","deselectAll","showMessageForBatchAddToCart","emit","clearLoadingCursor","addToList","storedProduct","RowIndex","rowIndex","sc_addToList","jsonStrResponse","JSON","stringify","showMessageForBatchAddToList","on_sc_addToList","detail","renderDropDown","h","class","href","onClick","e","preventDefault","render","key","disabled"],"sources":["src/components/result-actions-batch/action-header-selector.css?tag=action-header-selector","src/components/result-actions-batch/action-header-selector.tsx"],"sourcesContent":[":host {\r\n display: block;\r\n margin-left: 0;\r\n margin-right: 0;\r\n}\r\n\r\n.dropdown.show .dropdown-toggle:not(.dropdown-item)::after {\r\n -webkit-transform: rotate(180deg);\r\n transform: rotate(180deg);\r\n -webkit-transition-duration: 0.3s;\r\n transition-duration: 0.3s;\r\n}\r\n\r\n.dropdown .dropdown-toggle:not(.dropdown-item)::after {\r\n -webkit-transform: rotate(0deg);\r\n transform: rotate(0deg);\r\n -webkit-transition-duration: 0.3s;\r\n transition-duration: 0.3s;\r\n}\r\n\r\n.dropdown.show .btn.dropdown-toggle {\r\n color: #333333;\r\n background-color: #f8f9fa;\r\n border-color: #f8f9fa;\r\n}\r\n\r\n.dropdown .btn.dropdown-toggle {\r\n box-shadow: none;\r\n font-weight: 600;\r\n color: var(--main-color);\r\n}","import { Component, State, h, Event, EventEmitter, Listen, Element } from \"@stencil/core\";\r\nimport actionBatchStore from \"./action-batch-store\";\r\nimport { sc_Product } from \"../../model/sc\";\r\nimport { actionHeaderRequestInfo } from \"./action-header-request-info\";\r\nimport { LoadingCursor } from \"../../common/loading-cursor\";\r\nimport { CommerceBindings, initializeBindings } from \"@coveo/atomic\";\r\nimport { buildProductListing, buildSearch, loadProductActions, ProductClickPayload } from \"@coveo/headless/commerce\";\r\n\r\n@Component({\r\n tag: \"action-header-selector\",\r\n styleUrl: \"action-header-selector.css\",\r\n shadow: false,\r\n})\r\nexport class ActionHeaderSelector {\r\n @Element() private host!: Element;\r\n @State() selectedCount: number = 0;\r\n @State() showDropdown: boolean = false;\r\n @Event() showMessageForBatchAddToList!: EventEmitter;\r\n @Event() showMessageForBatchAddToCart!: EventEmitter;\r\n private scAddToListSent: Boolean = false;\r\n private cursor = new LoadingCursor();\r\n private bindings!: CommerceBindings;\r\n\r\n\r\n public async connectedCallback() {\r\n this.bindings = await initializeBindings(this.host);\r\n actionBatchStore.store.onChange('selectedCount', (selectedCount) => {\r\n this.selectedCount = selectedCount;\r\n if(!this.selectedCount){\r\n this.showDropdown = false; \r\n }\r\n })\r\n }\r\n \r\n\r\n public disconnectedCallback() {\r\n }\r\nprivate dispatchProductClickEvent = () => {\r\n const engine = this.bindings?.engine;\r\n const { productClick } = loadProductActions();\r\n let searchController =\r\n this.bindings.interfaceElement.type == \"search\"\r\n ? buildSearch(engine)\r\n : buildProductListing(engine);\r\n\r\n let responseId: string = searchController.state.responseId;\r\n\r\n Object.keys(actionBatchStore.selectedProducts).forEach((id) => { \r\n const {product} = actionBatchStore.selectedProducts[id];\r\n const payload: ProductClickPayload = {\r\n position: product.position,\r\n responseId: responseId,\r\n product: {\r\n name: product.ec_name as string,\r\n price: product.ec_price as number,\r\n productId: product.ec_product_id as string,\r\n },\r\n };\r\n engine.dispatch(productClick(payload));\r\n }) \r\n \r\n //in the case of a single addToList (not massive/batch) we would redeive here an empty object\r\n //That's because the user is shown a model to select which list to add to.\r\n //When modal will close, a custom DOM event will be catchable on doucment element.\r\n }\r\n private addToCart(){\r\n this.dispatchProductClickEvent();\r\n const selectedProducts = actionBatchStore.selectedProducts;\r\n const products: sc_Product[] = Object.keys(selectedProducts).map((id) => { \r\n const {product, quantity} = selectedProducts[id];\r\n return {\r\n ProductNumber: product.ec_product_id!,\r\n Quantity: quantity,\r\n UnitOfMeasure: product.additionalFields['ec_linde_uom_code'] as string\r\n }\r\n }) \r\n //select first catalog as catalog parameter\r\n let catalog = '';\r\n for(const id in selectedProducts){ \r\n const catalogs = selectedProducts[id].product.additionalFields['ec_linde_catalogs'] as string[];\r\n if(catalogs && !catalog){\r\n catalog = catalogs.length ? catalogs[0] : '';\r\n break;\r\n }\r\n }\r\n //set number of product for message\r\n actionHeaderRequestInfo.numberOfProducts = products.length;\r\n //set waiting cursor\r\n this.cursor.setLoadingCursor();\r\n //call integration function\r\n window.sc_addToCart(products, catalog).then((response) => { \r\n actionBatchStore.deselectAll();\r\n //emit mesage for batch addtocart message to appear\r\n this.showMessageForBatchAddToCart.emit(response);\r\n this.cursor.clearLoadingCursor();\r\n });\r\n }\r\n\r\n private addToList(){\r\n this.dispatchProductClickEvent();\r\n const selectedProducts = actionBatchStore.selectedProducts;\r\n const products: sc_Product[] = Object.keys(selectedProducts).map((productId) => { \r\n const storedProduct = selectedProducts[productId];\r\n return {\r\n RowIndex: storedProduct.rowIndex,\r\n ProductNumber: storedProduct.product.ec_product_id!,\r\n Quantity: 1,\r\n UnitOfMeasure: storedProduct.product.additionalFields['ec_linde_uom_code'] as string\r\n }\r\n }) \r\n //set number of product for message\r\n actionHeaderRequestInfo.numberOfProducts = products.length;\r\n\r\n //set waiting cursor\r\n this.cursor.setLoadingCursor();\r\n //call integration function\r\n this.scAddToListSent = true; \r\n window.sc_addToList(products).then((response) => { \r\n const jsonStrResponse = JSON.stringify(response);\r\n //when calling sc_addToList, SmarterCommerce might reutnr an empty response when\r\n // a list-selector modal appears. When this happens, there will be a subsequent event raise\r\n // (name: sc_addToList). In that case, when sc_addToList() returns an empty object, we have to wait\r\n // for the event to raise before emitting showMessageForBatchAddToList.\r\n if(jsonStrResponse == '{}'){\r\n //do nothing; waiting for event sc_addToList to trigger (see this.on_sc_addToList)\r\n }\r\n else{\r\n actionBatchStore.deselectAll();\r\n //emit mesage for batch addtolist message to appear\r\n this.showMessageForBatchAddToList.emit(response);\r\n this.cursor.clearLoadingCursor();\r\n }\r\n });\r\n }\r\n\r\n @Listen('sc_addToList', {target: 'document'}) //expected when a list-selector was displayed to user\r\n on_sc_addToList(response: CustomEvent){\r\n //is it for us?\r\n if(this.scAddToListSent){\r\n this.scAddToListSent = false; //done: down the flag; now sent even to show msg\r\n this.showMessageForBatchAddToList.emit(response.detail);\r\n this.cursor.clearLoadingCursor();\r\n }\r\n } \r\n\r\n private renderDropDown(){\r\n return (\r\n \r\n )\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n Actions\r\n \r\n {this.renderDropDown()}\r\n
\r\n )\r\n }\r\n}\r\n"],"mappings":"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","ignoreList":[]}