JezK
Edit File: sc-line-items-provider.cjs.entry.js.map
{"file":"sc-line-items-provider.entry.cjs.js","mappings":";;;;;;;MASa,mBAAmB;;;;;yBAKuE,EAAE;;;IAOvG,oBAAoB,CAAC,CAAc;QACjC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAsB,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;KACtC;;IAID,oBAAoB,CAAC,CAAc;QACjC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAsB,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;KACtC;;IAID,iBAAiB,CAAC,CAAc;QAC9B,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAsB,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;KACnC;;IAID,oBAAoB,CAAC,CAAc;QACjC,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAsB,CAAC;QAC1C,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;KACtC;;IAID,MAAM,gBAAgB,CAAC,GAAG;QACxB,IAAI,EAAC,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,MAAM,CAAA;YAAE,OAAO;QACzB,UAAU,CAAC;;YACT,IAAI,EAAC,MAAA,IAAI,CAAC,SAAS,0CAAE,MAAM,CAAA;gBAAE,OAAO;YACpC,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;YACtC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;SACrB,EAAE,GAAG,CAAC,CAAC;KACT;;IAGD,WAAW,CAAC,IAA4C,EAAE,OAAqB;QAC7E,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;KAC9D;;IAGD,gBAAgB;;;QAEd,IAAI,YAAY,GAAGA,sCAA8B,CAAC,CAAA,MAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,0CAAE,UAAU,KAAI,EAAE,CAAC,CAAC;QAEjF,MAAM,GAAG,GAAG;YACV,MAAM,EAAE,IAAI,CAAC,UAAU;YACvB,GAAG,EAAE,IAAI,CAAC,OAAO;YACjB,MAAM,EAAE,IAAI,CAAC,UAAU;YACvB,MAAM,EAAE,IAAI,CAAC,UAAU;SACxB,CAAC;;QAGF,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,EAAE,OAAO,CAAC,IAAI;YACjC,YAAY,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,YAAY,CAAQ,CAAC;SAClE,CAAC,CAAC;QAEH,OAAO,YAAY,CAAC;KACrB;;IAGD,OAAO,CAAC,IAAkB,EAAE,gBAAqC;QAC/D,OAAO,CAAC,GAAG,gBAAgB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;KACzC;;IAGD,UAAU,CAAC,IAAkB,EAAE,gBAAqC;;;QAElE,MAAM,eAAe,GAAG,MAAA,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,0CAAE,QAAQ,CAAC;;QAEjG,gBAAgB,GAAG,eAAe,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,IAAI,eAAe,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,gBAAgB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;;QAE3I,OAAO,gBAAgB,CAAC;KACzB;;IAGD,UAAU,CAAC,IAAkB,EAAE,gBAAqC;QAClE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAAE,OAAO,gBAAgB,CAAC;QAC5C,OAAO,gBAAgB,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;KACzE;;IAGD,UAAU,CAAC,IAAkB,EAAE,gBAAqC;;QAElE,MAAM,gBAAgB,GAAG,gBAAgB,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,QAAQ,CAAC,CAAC;;QAE7F,IAAI,gBAAgB,KAAK,CAAC,CAAC,EAAE;YAC3B,gBAAgB,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;;SAE3C;aAAM;YACL,OAAO,CAAC,GAAG,gBAAgB,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;SACzC;QAED,OAAO,gBAAgB,CAAC;KACzB;IAED,MAAM;QACJ,OAAOC,oEAAQ,CAAC;KACjB;;;;;;;;","names":["convertLineItemsToLineItemData","h"],"sources":["src/components/providers/line-items-provider/sc-line-items-provider.tsx"],"sourcesContent":["import { Component, Event, EventEmitter, h, Listen, Prop, State, Watch } from '@stencil/core';\n\nimport { convertLineItemsToLineItemData } from '../../../functions/line-items';\nimport { Checkout, LineItemData } from '../../../types';\n\n@Component({\n tag: 'sc-line-items-provider',\n shadow: true,\n})\nexport class ScLineItemsProvider {\n /** Order Object */\n @Prop() order: Checkout;\n\n /** Holds items to sync */\n @State() syncItems: Array<{ type: 'toggle' | 'add' | 'remove' | 'update'; payload: LineItemData }> = [];\n\n /** Update line items event */\n @Event() scUpdateLineItems: EventEmitter<Array<LineItemData>>;\n\n /** Handle line item toggle */\n @Listen('scToggleLineItem')\n handleLineItemToggle(e: CustomEvent) {\n const lineItem = e.detail as LineItemData;\n this.addSyncItem('toggle', lineItem);\n }\n\n /** Handle line item remove */\n @Listen('scRemoveLineItem')\n handleLineItemRemove(e: CustomEvent) {\n const lineItem = e.detail as LineItemData;\n this.addSyncItem('remove', lineItem);\n }\n\n /** Handle line item add */\n @Listen('scAddLineItem')\n handleLineItemAdd(e: CustomEvent) {\n const lineItem = e.detail as LineItemData;\n this.addSyncItem('add', lineItem);\n }\n\n /** Handle line item add */\n @Listen('scUpdateLineItem')\n handleLineItemUpdate(e: CustomEvent) {\n const lineItem = e.detail as LineItemData;\n this.addSyncItem('update', lineItem);\n }\n\n /** We listen to the syncItems array and run it on the next render in batch */\n @Watch('syncItems')\n async syncItemsHandler(val) {\n if (!val?.length) return;\n setTimeout(() => {\n if (!this.syncItems?.length) return;\n const items = this.processSyncItems();\n this.scUpdateLineItems.emit(items);\n this.syncItems = [];\n }, 100);\n }\n\n /** Add item to sync */\n addSyncItem(type: 'add' | 'remove' | 'toggle' | 'update', payload: LineItemData) {\n this.syncItems = [...this.syncItems, ...[{ type, payload }]];\n }\n\n /** Batch process items to sync before sending */\n processSyncItems() {\n // get existing line item data.\n let existingData = convertLineItemsToLineItemData(this?.order?.line_items || []);\n\n const map = {\n toggle: this.toggleItem,\n add: this.addItem,\n remove: this.removeItem,\n update: this.updateItem,\n };\n\n // run existing data through chain of sync updates.\n (this.syncItems || []).forEach(item => {\n existingData = map[item.type](item.payload, existingData) as any;\n });\n\n return existingData;\n }\n\n /** Add item */\n addItem(item: LineItemData, existingLineData: Array<LineItemData>) {\n return [...existingLineData, ...[item]];\n }\n\n /** Toggle item */\n toggleItem(item: LineItemData, existingLineData: Array<LineItemData>) {\n // find existing item.\n const existingPriceId = existingLineData.find(line => line.price_id === item.price_id)?.price_id;\n // toggle it.\n existingLineData = existingPriceId ? existingLineData.filter(item => existingPriceId !== item.price_id) : [...existingLineData, ...[item]];\n // return.\n return existingLineData;\n }\n\n /** Remove item */\n removeItem(item: LineItemData, existingLineData: Array<LineItemData>) {\n if (!item.price_id) return existingLineData;\n return existingLineData.filter(data => data.price_id !== item.price_id);\n }\n\n /** Update the item item */\n updateItem(item: LineItemData, existingLineData: Array<LineItemData>) {\n // find existing item.\n const existingLineItem = existingLineData.findIndex(line => line.price_id === item.price_id);\n // if we found it, update it\n if (existingLineItem !== -1) {\n existingLineData[existingLineItem] = item;\n // otherwise, add it\n } else {\n return [...existingLineData, ...[item]];\n }\n\n return existingLineData;\n }\n\n render() {\n return <slot />;\n }\n}\n"],"version":3}