@tet/tet-components 1.3.68-testing → 1.3.69-production
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{address-41ac19c2.js → address-7fde1462.js} +1 -1
- package/dist/cjs/{assets-0bdcfba7.js → assets-81eb2ab8.js} +1 -1
- package/dist/cjs/{async-request-42567909.js → async-request-f7162bb5.js} +1 -1
- package/dist/cjs/compare-cards-tab-products-filters-6a634be2.js +96 -0
- package/dist/cjs/{http-codes-bec9330b.js → http-codes-5b982e01.js} +2 -2
- package/dist/cjs/{index-84ede372.js → index-457201e1.js} +1 -1
- package/dist/cjs/{index-f559cb2e.js → index-66913c99.js} +11 -7
- package/dist/cjs/loader.cjs.js +2 -2
- package/dist/cjs/{old-utils-ff6ab3d4.js → old-utils-4ba8b736.js} +1 -1
- package/dist/cjs/{phone-96a87ac9.js → phone-54eba6d6.js} +2 -2
- package/dist/cjs/tet-accordion.cjs.entry.js +7 -7
- package/dist/cjs/{tet-compare-card_4.cjs.entry.js → tet-address-offers-filters-products_4.cjs.entry.js} +234 -554
- package/dist/cjs/tet-address-offers-view.cjs.entry.js +7 -7
- package/dist/cjs/tet-address-offers_4.cjs.entry.js +110 -105
- package/dist/cjs/tet-address-search.cjs.entry.js +7 -7
- package/dist/cjs/tet-asset-addresses.cjs.entry.js +3 -3
- package/dist/cjs/tet-autocomplete-dropdown.cjs.entry.js +2 -2
- package/dist/cjs/tet-autocomplete_2.cjs.entry.js +4 -4
- package/dist/cjs/tet-b2b-service-calculator.cjs.entry.js +4 -4
- package/dist/cjs/tet-banner-nav.cjs.entry.js +3 -3
- package/dist/cjs/tet-bar-graph.cjs.entry.js +1 -1
- package/dist/cjs/tet-border-radius.cjs.entry.js +2 -2
- package/dist/cjs/tet-business-card.cjs.entry.js +1 -1
- package/dist/cjs/tet-business-compare-card.cjs.entry.js +3 -3
- package/dist/cjs/tet-business-lines.cjs.entry.js +5 -5
- package/dist/cjs/tet-business-round-stepper.cjs.entry.js +1 -1
- package/dist/cjs/tet-button.cjs.entry.js +1 -1
- package/dist/cjs/tet-card-list.cjs.entry.js +5 -5
- package/dist/cjs/tet-carousel.cjs.entry.js +3 -3
- package/dist/cjs/tet-checkbox.cjs.entry.js +1 -1
- package/dist/cjs/tet-cloud-application-form-dialog.cjs.entry.js +3 -3
- package/dist/cjs/tet-cloud-configurator.cjs.entry.js +3 -3
- package/dist/cjs/tet-colors.cjs.entry.js +5 -5
- package/dist/cjs/tet-compare-cards-tab.cjs.entry.js +32 -18
- package/dist/cjs/{tet-compare-cards.cjs.entry.js → tet-compare-cards_2.cjs.entry.js} +140 -7
- package/dist/cjs/tet-components.cjs.js +2 -2
- package/dist/cjs/tet-contact-form.cjs.entry.js +6 -6
- package/dist/cjs/tet-contact-info.cjs.entry.js +1 -1
- package/dist/cjs/tet-container_2.cjs.entry.js +1 -1
- package/dist/cjs/tet-customer-assets.cjs.entry.js +4 -4
- package/dist/cjs/tet-datepicker-header_4.cjs.entry.js +6 -6
- package/dist/cjs/tet-datepicker.cjs.entry.js +5 -5
- package/dist/cjs/tet-dialog.cjs.entry.js +3 -3
- package/dist/cjs/tet-expandable-input.cjs.entry.js +1 -1
- package/dist/cjs/tet-expansion-panel.cjs.entry.js +2 -2
- package/dist/cjs/tet-font-weight.cjs.entry.js +2 -2
- package/dist/cjs/tet-fonts.cjs.entry.js +2 -2
- package/dist/cjs/tet-grid.cjs.entry.js +2 -2
- package/dist/cjs/tet-icon.cjs.entry.js +3 -3
- package/dist/cjs/tet-inline-message.cjs.entry.js +1 -1
- package/dist/cjs/tet-input.cjs.entry.js +3 -3
- package/dist/cjs/tet-label.cjs.entry.js +5 -5
- package/dist/cjs/tet-layout.cjs.entry.js +2 -2
- package/dist/cjs/tet-link.cjs.entry.js +2 -2
- package/dist/cjs/tet-loader.cjs.entry.js +2 -2
- package/dist/cjs/tet-macd-view.cjs.entry.js +6 -6
- package/dist/cjs/tet-menu-mobile.cjs.entry.js +1 -1
- package/dist/cjs/tet-menu.cjs.entry.js +1 -1
- package/dist/cjs/tet-multi-step-dialog.cjs.entry.js +4 -4
- package/dist/cjs/tet-navigation-mobile.cjs.entry.js +4 -4
- package/dist/cjs/tet-news-card-list.cjs.entry.js +2 -2
- package/dist/cjs/tet-notification.cjs.entry.js +2 -2
- package/dist/cjs/tet-number-input_2.cjs.entry.js +4 -4
- package/dist/cjs/tet-placeholder.cjs.entry.js +2 -2
- package/dist/cjs/tet-price-view.cjs.entry.js +1 -1
- package/dist/cjs/tet-radio.cjs.entry.js +1 -1
- package/dist/cjs/tet-range-slider_2.cjs.entry.js +8 -8
- package/dist/cjs/tet-referral.cjs.entry.js +7 -7
- package/dist/cjs/tet-round-stepper.cjs.entry.js +1 -1
- package/dist/cjs/tet-spacing.cjs.entry.js +2 -2
- package/dist/cjs/tet-stepper-v2.cjs.entry.js +1 -1
- package/dist/cjs/tet-stepper-v3.cjs.entry.js +6 -3
- package/dist/cjs/tet-stepper.cjs.entry.js +1 -1
- package/dist/cjs/tet-tab-header.cjs.entry.js +434 -0
- package/dist/cjs/tet-table.cjs.entry.js +1 -1
- package/dist/cjs/tet-tag.cjs.entry.js +44 -0
- package/dist/cjs/tet-text-list.cjs.entry.js +1 -1
- package/dist/cjs/tet-textarea.cjs.entry.js +3 -3
- package/dist/cjs/tet-thank-you-view-v2.cjs.entry.js +3 -3
- package/dist/cjs/tet-thank-you-view-v3.cjs.entry.js +4 -4
- package/dist/cjs/tet-thank-you-view.cjs.entry.js +1 -1
- package/dist/cjs/tet-tooltip.cjs.entry.js +2 -2
- package/dist/cjs/tet-tv-gift-block.cjs.entry.js +2 -2
- package/dist/cjs/tet-tv-gift-list.cjs.entry.js +3 -3
- package/dist/cjs/{theme-wrapper-a5bbadf6.js → theme-wrapper-d753e207.js} +2 -2
- package/dist/cjs/{translations-9c00ed63.js → translations-bb8512bf.js} +1 -1
- package/dist/collection/collection-manifest.json +1 -0
- package/dist/collection/components/advanced/address/tet-address-offers/address-offers.store.js +4 -1
- package/dist/collection/components/advanced/address/tet-address-offers/address-product-offers.store.js +21 -0
- package/dist/collection/components/advanced/address/tet-address-offers/tet-address-offers.css +58 -0
- package/dist/collection/components/advanced/address/tet-address-offers/tet-address-offers.js +115 -83
- package/dist/collection/components/advanced/address/tet-address-offers-filters/address-offers-filters.js +21 -8
- package/dist/collection/components/advanced/address/tet-address-offers-filters-products/address-offers-products-filters.js +95 -0
- package/dist/collection/components/advanced/address/tet-address-offers-filters-products/test/tet-address-offers-filters-products.spec.js +23 -0
- package/dist/collection/components/advanced/address/tet-address-offers-filters-products/tet-address-offers-filters-products.css +411 -0
- package/dist/collection/components/advanced/address/tet-address-offers-filters-products/tet-address-offers-filters-products.js +314 -0
- package/dist/collection/components/advanced/address/tet-address-search/tet-address-search.js +3 -3
- package/dist/collection/components/advanced/address/tet-autocomplete-dropdown/tet-autocomplete-dropdown.js +1 -1
- package/dist/collection/components/advanced/cards/tet-business-compare-card/tet-business-compare-card.js +2 -2
- package/dist/collection/components/advanced/cards/tet-card-list/tet-card-list.js +4 -4
- package/dist/collection/components/advanced/cards/tet-compare-card/test/tet-compare-card.spec.js +6 -0
- package/dist/collection/components/advanced/cards/tet-compare-card/tet-compare-card.css +8 -0
- package/dist/collection/components/advanced/cards/tet-compare-card/tet-compare-card.js +23 -3
- package/dist/collection/components/advanced/cards/tet-compare-cards/tet-compare-cards.css +0 -1
- package/dist/collection/components/advanced/cards/tet-compare-cards/tet-compare-cards.js +3 -3
- package/dist/collection/components/advanced/cards/tet-compare-cards-tab/compare-cards-tab-products-filters.js +93 -0
- package/dist/collection/components/advanced/cards/tet-compare-cards-tab/tet-compare-cards-tab.css +5 -0
- package/dist/collection/components/advanced/cards/tet-compare-cards-tab/tet-compare-cards-tab.js +30 -15
- package/dist/collection/components/advanced/customer/tet-customer-assets/tet-customer-assets.js +1 -1
- package/dist/collection/components/advanced/customer/tet-referral/tet-referral.js +2 -2
- package/dist/collection/components/advanced/dialog/tet-multi-step-dialog/tet-multi-step-dialog.js +1 -1
- package/dist/collection/components/advanced/forms/tet-availability-contact-form/tet-availability-contact-form.js +1 -1
- package/dist/collection/components/advanced/forms/tet-contact-form/tet-contact-form.js +1 -1
- package/dist/collection/components/advanced/promotions/tv-gift/tet-tv-gift-block/tet-tv-gift-block.js +1 -1
- package/dist/collection/components/advanced/promotions/tv-gift/tet-tv-gift-list/tet-tv-gift-list.js +2 -2
- package/dist/collection/components/basic/buttons/tet-tabs/tet-tab-content/tet-tab-content.js +2 -2
- package/dist/collection/components/basic/buttons/tet-tabs/tet-tab-header/tet-tab-header.js +2 -2
- package/dist/collection/components/basic/buttons/tet-tag/tet-tag.css +19 -3
- package/dist/collection/components/basic/buttons/tet-tag/tet-tag.js +21 -2
- package/dist/collection/components/basic/buttons/tet-tag-group/tet-tag-group.js +2 -2
- package/dist/collection/components/basic/carousel/tet-carousel/tet-carousel.js +2 -2
- package/dist/collection/components/basic/icon/tet-icon.js +1 -1
- package/dist/collection/components/basic/loaders/tet-loader/tet-loader.js +1 -1
- package/dist/collection/components/basic/loaders/tet-placeholder/tet-placeholder.js +1 -1
- package/dist/collection/components/basic/loaders/tet-spinner/tet-spinner.js +3 -3
- package/dist/collection/components/basic/misc/tet-label/tet-label.js +2 -2
- package/dist/collection/components/basic/steppers/tet-stepper-v3/tet-stepper-v3.css +34 -7
- package/dist/collection/components/basic/steppers/tet-stepper-v3/tet-stepper-v3.js +4 -1
- package/dist/collection/components/simple/inputs/tet-datepicker/partials/tet-datepicker-header/tet-datepicker-header.js +2 -2
- package/dist/collection/components/simple/inputs/tet-datepicker/partials/tet-datepicker-month-view/tet-datepicker-month-view.js +1 -1
- package/dist/collection/components/simple/inputs/tet-datepicker/partials/tet-datepicker-multi-year-view/tet-datepicker-multi-year-view.js +1 -1
- package/dist/collection/components/simple/inputs/tet-datepicker/partials/tet-datepicker-year-view/tet-datepicker-year-view.js +1 -1
- package/dist/collection/components/simple/inputs/tet-datepicker/tet-datepicker.js +4 -4
- package/dist/collection/components/simple/inputs/tet-range-slider/tet-range-slider.js +7 -7
- package/dist/collection/components/simple/inputs/tet-stepper-input/tet-stepper-input.js +1 -1
- package/dist/collection/components/simple/inputs/tet-textarea/tet-textarea.js +2 -2
- package/dist/collection/components/simple/lists/tet-news-card-list/tet-news-card-list.js +1 -1
- package/dist/collection/components/simple/menu/tet-navigation-mobile/tet-navigation-mobile.js +3 -3
- package/dist/collection/components/simple/structural/tet-accordion/tet-accordion.js +6 -6
- package/dist/collection/components/simple/structural/tet-expansion-panel/tet-expansion-panel.js +1 -1
- package/dist/collection/components/simple/text-blocks/tet-notification/tet-notification.js +1 -1
- package/dist/collection/components/simple/text-blocks/tet-tooltip/tet-tooltip.js +1 -1
- package/dist/collection/components/views/tet-address-offers-view/tet-address-offers-view.css +2 -4
- package/dist/collection/components/views/tet-address-offers-view/tet-address-offers-view.js +3 -3
- package/dist/collection/components/views/tet-b2b-service-calculator/tet-b2b-service-calculator.js +1 -1
- package/dist/collection/components/views/tet-business-lines/tet-business-lines.js +1 -1
- package/dist/collection/components/views/tet-thank-you-view-v3/tet-thank-you-view-v3.css +12 -4
- package/dist/collection/docs/styling/border-radius/tet-border-radius.js +1 -1
- package/dist/collection/docs/styling/colors/tet-colors.js +4 -4
- package/dist/collection/docs/styling/font-weight/tet-font-weight.js +1 -1
- package/dist/collection/docs/styling/fonts/tet-fonts.js +1 -1
- package/dist/collection/docs/styling/layout/tet-layout.js +1 -1
- package/dist/collection/docs/styling/link/tet-link.js +1 -1
- package/dist/collection/docs/styling/spacing/tet-spacing.js +1 -1
- package/dist/collection/docs/styling/tet-grid/tet-grid.js +1 -1
- package/dist/components/index.js +3 -1
- package/dist/components/{p-1c3075c7.js → p-004a1783.js} +2 -2
- package/dist/components/{p-1f8c84e9.js → p-03e69bb8.js} +2 -2
- package/dist/components/{p-13051901.js → p-06f249ce.js} +3 -3
- package/dist/components/{p-72dc8bb7.js → p-084b6798.js} +1 -1
- package/dist/components/{p-8bf4c1bc.js → p-15c94fd5.js} +2 -2
- package/dist/components/{p-4c25d5fb.js → p-1d44a94e.js} +3 -3
- package/dist/components/{p-cd8f3a84.js → p-1e39449b.js} +3 -3
- package/dist/components/{p-fde9ecef.js → p-3032ed77.js} +5 -5
- package/dist/components/{p-93e9c848.js → p-36109fb0.js} +13 -13
- package/dist/components/{p-aea191fd.js → p-38ad9047.js} +2 -2
- package/dist/components/{p-ceb45b17.js → p-3919b539.js} +4 -4
- package/dist/components/{p-74ff4f72.js → p-3e987c51.js} +1 -1
- package/dist/components/{p-8caa2e3e.js → p-430ff09c.js} +2 -2
- package/dist/components/{p-c44c8848.js → p-480ccc8d.js} +2 -2
- package/dist/components/{p-a0d406ca.js → p-4d00761a.js} +1 -1
- package/dist/components/{p-4f1c7348.js → p-505aaed1.js} +8 -6
- package/dist/components/{p-470276e6.js → p-5841617c.js} +1 -1
- package/dist/components/{p-37ed3ebb.js → p-599035b8.js} +1 -1
- package/dist/components/{p-50f47d0c.js → p-5d62e662.js} +5 -5
- package/dist/components/{p-fe0cc309.js → p-5e6c2118.js} +10 -10
- package/dist/components/{p-d0c96e9c.js → p-5e9de7d5.js} +3 -3
- package/dist/components/{p-ed7db4de.js → p-618e07b7.js} +2 -2
- package/dist/components/{p-b215fe36.js → p-680ce735.js} +1 -1
- package/dist/components/{p-39e60f54.js → p-6e0f6f88.js} +2 -2
- package/dist/components/{p-5cba049c.js → p-77f8b5db.js} +11 -11
- package/dist/components/{p-a63d3582.js → p-798cf5b6.js} +3 -3
- package/dist/components/{p-22444d39.js → p-7ef501a2.js} +7 -7
- package/dist/components/{p-ae1f41ee.js → p-84b6941e.js} +1 -1
- package/dist/components/p-8a25fdd3.js +360 -0
- package/dist/components/{p-9361fcb4.js → p-94622def.js} +7 -4
- package/dist/components/{p-a16b2429.js → p-95d6c397.js} +7 -7
- package/dist/components/{p-e51cbb09.js → p-97c791b8.js} +2 -2
- package/dist/components/{p-b5c85303.js → p-9a3121bc.js} +2 -2
- package/dist/components/{p-8c37c237.js → p-9bc13031.js} +1 -1
- package/dist/components/{p-f854817f.js → p-a22521b3.js} +1 -1
- package/dist/components/{p-3b3af880.js → p-a2f0236d.js} +4 -4
- package/dist/components/{p-aca37faa.js → p-a7cf4a7a.js} +7 -7
- package/dist/components/{p-9cb78c6f.js → p-ab1270fa.js} +103 -105
- package/dist/components/{p-f7de89c3.js → p-b38f9875.js} +3 -3
- package/dist/components/{p-447e727f.js → p-b9bc2f1a.js} +26 -10
- package/dist/components/{p-6f457b76.js → p-c753ab82.js} +1 -1
- package/dist/components/{p-139b55b9.js → p-ca44877c.js} +3 -3
- package/dist/components/{p-2e1448b5.js → p-cd90d45c.js} +3 -3
- package/dist/components/{p-80cbecdd.js → p-e165a4cc.js} +13 -13
- package/dist/components/{p-72b8586b.js → p-e2f0e8da.js} +1 -1
- package/dist/components/{p-8b7e53db.js → p-e5451722.js} +12 -9
- package/dist/components/{p-815407aa.js → p-ec157aef.js} +2 -2
- package/dist/components/{p-a6d99476.js → p-f60762e2.js} +3 -3
- package/dist/components/{p-c3552274.js → p-fbea31dc.js} +2 -2
- package/dist/components/{p-ffeb7385.js → p-ff2a5e22.js} +3 -3
- package/dist/components/tet-accordion.js +8 -8
- package/dist/components/tet-address-offers-filters-products.d.ts +11 -0
- package/dist/components/tet-address-offers-filters-products.js +6 -0
- package/dist/components/tet-address-offers-filters.js +1 -1
- package/dist/components/tet-address-offers-view.js +48 -54
- package/dist/components/tet-address-offers.js +1 -1
- package/dist/components/tet-address-search.js +1 -1
- package/dist/components/tet-asset-addresses.js +13 -13
- package/dist/components/tet-asset-availability-addresses.js +1 -1
- package/dist/components/tet-autocomplete-dropdown.js +6 -6
- package/dist/components/tet-autocomplete.js +1 -1
- package/dist/components/tet-availability-contact-form.js +1 -1
- package/dist/components/tet-b2b-service-calculator.js +9 -9
- package/dist/components/tet-banner-nav.js +3 -3
- package/dist/components/tet-bar-graph.js +1 -1
- package/dist/components/tet-border-radius.js +2 -2
- package/dist/components/tet-business-card.js +1 -1
- package/dist/components/tet-business-compare-card.js +5 -5
- package/dist/components/tet-business-lines.js +6 -6
- package/dist/components/tet-business-round-stepper.js +2 -2
- package/dist/components/tet-button.js +1 -1
- package/dist/components/tet-card-list.js +1 -1
- package/dist/components/tet-carousel.js +5 -5
- package/dist/components/tet-checkbox.js +1 -1
- package/dist/components/tet-cloud-application-form-dialog.js +8 -8
- package/dist/components/tet-cloud-configurator.js +11 -11
- package/dist/components/tet-colors.js +5 -5
- package/dist/components/tet-compare-card.js +1 -1
- package/dist/components/tet-compare-cards-tab.js +69 -37
- package/dist/components/tet-compare-cards.js +1 -1
- package/dist/components/tet-contact-form.js +10 -10
- package/dist/components/tet-contact-info.js +1 -1
- package/dist/components/tet-container.js +1 -1
- package/dist/components/tet-customer-assets.js +9 -9
- package/dist/components/tet-datepicker-header.js +1 -1
- package/dist/components/tet-datepicker-month-view.js +1 -1
- package/dist/components/tet-datepicker-multi-year-view.js +1 -1
- package/dist/components/tet-datepicker-year-view.js +1 -1
- package/dist/components/tet-datepicker.js +10 -10
- package/dist/components/tet-dialog.js +1 -1
- package/dist/components/tet-dropdown.js +1 -1
- package/dist/components/tet-expandable-input.js +3 -3
- package/dist/components/tet-expansion-panel.js +2 -2
- package/dist/components/tet-font-weight.js +2 -2
- package/dist/components/tet-fonts.js +2 -2
- package/dist/components/tet-grid.js +2 -2
- package/dist/components/tet-icon.js +1 -1
- package/dist/components/tet-inline-message.js +2 -2
- package/dist/components/tet-input.js +1 -1
- package/dist/components/tet-label.js +5 -5
- package/dist/components/tet-layout.js +2 -2
- package/dist/components/tet-link.js +2 -2
- package/dist/components/tet-loader.js +1 -1
- package/dist/components/tet-macd-view.js +11 -11
- package/dist/components/tet-menu-mobile.js +2 -2
- package/dist/components/tet-menu.js +2 -2
- package/dist/components/tet-multi-step-dialog.js +6 -6
- package/dist/components/tet-navigation-mobile.js +5 -5
- package/dist/components/tet-news-card-list.js +5 -5
- package/dist/components/tet-notification.js +1 -1
- package/dist/components/tet-number-input.js +1 -1
- package/dist/components/tet-placeholder.js +1 -1
- package/dist/components/tet-price-view.js +1 -1
- package/dist/components/tet-radio.js +1 -1
- package/dist/components/tet-range-slider.js +1 -1
- package/dist/components/tet-referral.js +9 -9
- package/dist/components/tet-round-stepper.js +2 -2
- package/dist/components/tet-selection-list.js +1 -1
- package/dist/components/tet-spacing.js +2 -2
- package/dist/components/tet-spinner.js +1 -1
- package/dist/components/tet-stepper-input.js +1 -1
- package/dist/components/tet-stepper-v2.js +1 -1
- package/dist/components/tet-stepper-v3.js +1 -1
- package/dist/components/tet-stepper.js +1 -1
- package/dist/components/tet-switch.js +1 -1
- package/dist/components/tet-tab-content.js +1 -1
- package/dist/components/tet-tab-header.js +1 -1
- package/dist/components/tet-table.js +3 -3
- package/dist/components/tet-tag-group.js +1 -1
- package/dist/components/tet-tag.js +1 -1
- package/dist/components/tet-text-list.js +1 -1
- package/dist/components/tet-textarea.js +3 -3
- package/dist/components/tet-thank-you-view-v2.js +5 -5
- package/dist/components/tet-thank-you-view-v3.js +6 -6
- package/dist/components/tet-thank-you-view.js +4 -4
- package/dist/components/tet-tooltip.js +1 -1
- package/dist/components/tet-tv-gift-block.js +2 -2
- package/dist/components/tet-tv-gift-list.js +4 -4
- package/dist/esm/{address-9dfd3c9e.js → address-446e44d1.js} +1 -1
- package/dist/esm/{assets-c074d2b9.js → assets-fba60496.js} +1 -1
- package/dist/esm/{async-request-754d6810.js → async-request-3be8369e.js} +1 -1
- package/dist/esm/compare-cards-tab-products-filters-094fdd08.js +94 -0
- package/dist/esm/{http-codes-42779195.js → http-codes-94d247ea.js} +2 -2
- package/dist/esm/{index-7f1e2a22.js → index-ce62f11b.js} +11 -7
- package/dist/esm/{index-1bf36cb9.js → index-d502e34e.js} +1 -1
- package/dist/esm/loader.js +3 -3
- package/dist/esm/{old-utils-e93e9607.js → old-utils-bb8e99c5.js} +1 -1
- package/dist/esm/{phone-66ff151d.js → phone-3dfebff1.js} +2 -2
- package/dist/esm/tet-accordion.entry.js +7 -7
- package/dist/esm/{tet-compare-card_4.entry.js → tet-address-offers-filters-products_4.entry.js} +233 -553
- package/dist/esm/tet-address-offers-view.entry.js +7 -7
- package/dist/esm/tet-address-offers_4.entry.js +110 -105
- package/dist/esm/tet-address-search.entry.js +7 -7
- package/dist/esm/tet-asset-addresses.entry.js +3 -3
- package/dist/esm/tet-autocomplete-dropdown.entry.js +2 -2
- package/dist/esm/tet-autocomplete_2.entry.js +4 -4
- package/dist/esm/tet-b2b-service-calculator.entry.js +4 -4
- package/dist/esm/tet-banner-nav.entry.js +3 -3
- package/dist/esm/tet-bar-graph.entry.js +1 -1
- package/dist/esm/tet-border-radius.entry.js +2 -2
- package/dist/esm/tet-business-card.entry.js +1 -1
- package/dist/esm/tet-business-compare-card.entry.js +3 -3
- package/dist/esm/tet-business-lines.entry.js +5 -5
- package/dist/esm/tet-business-round-stepper.entry.js +1 -1
- package/dist/esm/tet-button.entry.js +1 -1
- package/dist/esm/tet-card-list.entry.js +5 -5
- package/dist/esm/tet-carousel.entry.js +3 -3
- package/dist/esm/tet-checkbox.entry.js +1 -1
- package/dist/esm/tet-cloud-application-form-dialog.entry.js +3 -3
- package/dist/esm/tet-cloud-configurator.entry.js +3 -3
- package/dist/esm/tet-colors.entry.js +5 -5
- package/dist/esm/tet-compare-cards-tab.entry.js +32 -18
- package/dist/esm/{tet-compare-cards.entry.js → tet-compare-cards_2.entry.js} +140 -8
- package/dist/esm/tet-components.js +3 -3
- package/dist/esm/tet-contact-form.entry.js +6 -6
- package/dist/esm/tet-contact-info.entry.js +1 -1
- package/dist/esm/tet-container_2.entry.js +1 -1
- package/dist/esm/tet-customer-assets.entry.js +4 -4
- package/dist/esm/tet-datepicker-header_4.entry.js +6 -6
- package/dist/esm/tet-datepicker.entry.js +5 -5
- package/dist/esm/tet-dialog.entry.js +3 -3
- package/dist/esm/tet-expandable-input.entry.js +1 -1
- package/dist/esm/tet-expansion-panel.entry.js +2 -2
- package/dist/esm/tet-font-weight.entry.js +2 -2
- package/dist/esm/tet-fonts.entry.js +2 -2
- package/dist/esm/tet-grid.entry.js +2 -2
- package/dist/esm/tet-icon.entry.js +3 -3
- package/dist/esm/tet-inline-message.entry.js +1 -1
- package/dist/esm/tet-input.entry.js +3 -3
- package/dist/esm/tet-label.entry.js +5 -5
- package/dist/esm/tet-layout.entry.js +2 -2
- package/dist/esm/tet-link.entry.js +2 -2
- package/dist/esm/tet-loader.entry.js +2 -2
- package/dist/esm/tet-macd-view.entry.js +6 -6
- package/dist/esm/tet-menu-mobile.entry.js +1 -1
- package/dist/esm/tet-menu.entry.js +1 -1
- package/dist/esm/tet-multi-step-dialog.entry.js +4 -4
- package/dist/esm/tet-navigation-mobile.entry.js +4 -4
- package/dist/esm/tet-news-card-list.entry.js +2 -2
- package/dist/esm/tet-notification.entry.js +2 -2
- package/dist/esm/tet-number-input_2.entry.js +4 -4
- package/dist/esm/tet-placeholder.entry.js +2 -2
- package/dist/esm/tet-price-view.entry.js +1 -1
- package/dist/esm/tet-radio.entry.js +1 -1
- package/dist/esm/tet-range-slider_2.entry.js +8 -8
- package/dist/esm/tet-referral.entry.js +7 -7
- package/dist/esm/tet-round-stepper.entry.js +1 -1
- package/dist/esm/tet-spacing.entry.js +2 -2
- package/dist/esm/tet-stepper-v2.entry.js +1 -1
- package/dist/esm/tet-stepper-v3.entry.js +6 -3
- package/dist/esm/tet-stepper.entry.js +1 -1
- package/dist/esm/tet-tab-header.entry.js +430 -0
- package/dist/esm/tet-table.entry.js +1 -1
- package/dist/esm/tet-tag.entry.js +40 -0
- package/dist/esm/tet-text-list.entry.js +1 -1
- package/dist/esm/tet-textarea.entry.js +3 -3
- package/dist/esm/tet-thank-you-view-v2.entry.js +3 -3
- package/dist/esm/tet-thank-you-view-v3.entry.js +4 -4
- package/dist/esm/tet-thank-you-view.entry.js +1 -1
- package/dist/esm/tet-tooltip.entry.js +2 -2
- package/dist/esm/tet-tv-gift-block.entry.js +2 -2
- package/dist/esm/tet-tv-gift-list.entry.js +3 -3
- package/dist/esm/{theme-wrapper-6e6b2089.js → theme-wrapper-bf063190.js} +2 -2
- package/dist/esm/{translations-5c723a5f.js → translations-7cd34c7f.js} +1 -1
- package/dist/tet-components/{p-5786fab1.entry.js → p-06f46328.entry.js} +1 -1
- package/dist/tet-components/{p-325515ed.entry.js → p-070a8a51.entry.js} +1 -1
- package/dist/tet-components/{p-2de3f58f.entry.js → p-08a4652a.entry.js} +1 -1
- package/dist/tet-components/{p-d6c31a48.entry.js → p-0ae0c699.entry.js} +1 -1
- package/dist/tet-components/{p-f55a4508.entry.js → p-0bc0b0a2.entry.js} +1 -1
- package/dist/tet-components/p-0bec7586.entry.js +1 -0
- package/dist/tet-components/{p-87b47774.js → p-0d1e7cd6.js} +1 -1
- package/dist/tet-components/{p-faaf4f9e.entry.js → p-0e9714d1.entry.js} +1 -1
- package/dist/tet-components/{p-e0bb4410.entry.js → p-0f364200.entry.js} +1 -1
- package/dist/tet-components/{p-6a703ebb.entry.js → p-1097442d.entry.js} +1 -1
- package/dist/tet-components/{p-433fa62c.entry.js → p-11437185.entry.js} +1 -1
- package/dist/tet-components/{p-ca27b8cd.entry.js → p-14a302cb.entry.js} +1 -1
- package/dist/tet-components/{p-95877586.entry.js → p-14ea4439.entry.js} +1 -1
- package/dist/tet-components/{p-c4ba2330.entry.js → p-18e44b52.entry.js} +1 -1
- package/dist/tet-components/{p-8d198756.entry.js → p-1976e991.entry.js} +1 -1
- package/dist/tet-components/{p-bc1748c1.entry.js → p-1a5ed4b2.entry.js} +1 -1
- package/dist/tet-components/p-1d14c865.js +2 -0
- package/dist/tet-components/{p-3287547c.entry.js → p-20d5a05d.entry.js} +1 -1
- package/dist/tet-components/{p-6821b8e3.entry.js → p-239c5d3c.entry.js} +1 -1
- package/dist/tet-components/{p-82f39730.entry.js → p-251db7ef.entry.js} +1 -1
- package/dist/tet-components/{p-3dd44730.entry.js → p-2566226a.entry.js} +1 -1
- package/dist/tet-components/{p-4026fd82.entry.js → p-296f1706.entry.js} +1 -1
- package/dist/tet-components/{p-a96ad9aa.entry.js → p-30c078c5.entry.js} +1 -1
- package/dist/tet-components/{p-428dff99.entry.js → p-337cac3f.entry.js} +1 -1
- package/dist/tet-components/{p-520c7411.entry.js → p-34c9374c.entry.js} +1 -1
- package/dist/tet-components/{p-c47d5e36.entry.js → p-3659fe95.entry.js} +1 -1
- package/dist/tet-components/{p-257ee876.entry.js → p-3723442c.entry.js} +1 -1
- package/dist/tet-components/{p-dacff13f.entry.js → p-3819d28c.entry.js} +1 -1
- package/dist/tet-components/{p-11d5cdb7.entry.js → p-43d1a3f3.entry.js} +1 -1
- package/dist/tet-components/{p-1f33c4d8.entry.js → p-4d26aaca.entry.js} +1 -1
- package/dist/tet-components/{p-17219f8f.js → p-513c1986.js} +1 -1
- package/dist/tet-components/{p-9174fad4.entry.js → p-530d8ebd.entry.js} +1 -1
- package/dist/tet-components/{p-ac290b65.entry.js → p-53dfd0d1.entry.js} +1 -1
- package/dist/tet-components/{p-d51fb8f0.entry.js → p-5478765f.entry.js} +1 -1
- package/dist/tet-components/{p-6b022547.entry.js → p-564b1597.entry.js} +1 -1
- package/dist/tet-components/{p-13834305.entry.js → p-565aa846.entry.js} +1 -1
- package/dist/tet-components/{p-f52944ee.entry.js → p-571028b6.entry.js} +1 -1
- package/dist/tet-components/{p-7123c8cb.js → p-5f102998.js} +1 -1
- package/dist/tet-components/p-611377f2.entry.js +1 -0
- package/dist/tet-components/{p-138065a5.entry.js → p-616daa7e.entry.js} +1 -1
- package/dist/tet-components/p-63b7e0d0.entry.js +1 -0
- package/dist/tet-components/{p-b6fc2059.entry.js → p-6439c804.entry.js} +1 -1
- package/dist/tet-components/{p-1338b2c9.entry.js → p-652e2b67.entry.js} +1 -1
- package/dist/tet-components/{p-99dfcd9d.entry.js → p-683df0c1.entry.js} +1 -1
- package/dist/tet-components/{p-9c0ed718.entry.js → p-684d453b.entry.js} +1 -1
- package/dist/tet-components/{p-25498380.entry.js → p-6a8ebb69.entry.js} +1 -1
- package/dist/tet-components/{p-4b9d2f1e.js → p-6e6dafb1.js} +1 -1
- package/dist/tet-components/{p-91aebae3.entry.js → p-74940338.entry.js} +1 -1
- package/dist/tet-components/{p-1ae8df7d.js → p-766fd113.js} +1 -1
- package/dist/tet-components/p-7b21d33f.entry.js +1 -0
- package/dist/tet-components/p-7c136b44.entry.js +1 -0
- package/dist/tet-components/{p-8cadf068.entry.js → p-7eecadbc.entry.js} +1 -1
- package/dist/tet-components/{p-46a33f5c.entry.js → p-80c10282.entry.js} +1 -1
- package/dist/tet-components/{p-07081ea1.entry.js → p-88ff4729.entry.js} +1 -1
- package/dist/tet-components/p-8b9f2ed6.js +1 -0
- package/dist/tet-components/{p-01d2c9b2.entry.js → p-8e19e1de.entry.js} +1 -1
- package/dist/tet-components/{p-0e44600c.entry.js → p-8e59bc6e.entry.js} +1 -1
- package/dist/tet-components/{p-10271e23.entry.js → p-8fd66a80.entry.js} +1 -1
- package/dist/tet-components/p-a2e7d95d.entry.js +1 -0
- package/dist/tet-components/{p-8a211672.entry.js → p-a77d95aa.entry.js} +1 -1
- package/dist/tet-components/{p-010608e8.js → p-a9820b87.js} +1 -1
- package/dist/tet-components/{p-77372984.js → p-aba811f3.js} +1 -1
- package/dist/tet-components/{p-a89b07db.entry.js → p-ae6af193.entry.js} +1 -1
- package/dist/tet-components/{p-747fa00c.entry.js → p-b20f2137.entry.js} +1 -1
- package/dist/tet-components/{p-8e64a695.entry.js → p-b245b2cf.entry.js} +1 -1
- package/dist/tet-components/{p-2024adb8.entry.js → p-b324cfd1.entry.js} +1 -1
- package/dist/tet-components/{p-39de75af.js → p-b66cbe8a.js} +1 -1
- package/dist/tet-components/{p-f4786b25.entry.js → p-ba9dcdb2.entry.js} +1 -1
- package/dist/tet-components/{p-771146d4.entry.js → p-bd19cb33.entry.js} +1 -1
- package/dist/tet-components/p-c0be9da7.js +1 -0
- package/dist/tet-components/{p-1f61bc97.entry.js → p-c0d1f124.entry.js} +1 -1
- package/dist/tet-components/{p-3b5a822d.entry.js → p-c3934b44.entry.js} +1 -1
- package/dist/tet-components/{p-9eafff73.entry.js → p-c892bc9f.entry.js} +1 -1
- package/dist/tet-components/{p-76fc9aa4.entry.js → p-d96d0258.entry.js} +1 -1
- package/dist/tet-components/{p-ff769397.entry.js → p-decb5ec7.entry.js} +1 -1
- package/dist/tet-components/{p-8b174961.entry.js → p-df4e82bc.entry.js} +1 -1
- package/dist/tet-components/{p-d7b12aa8.entry.js → p-e412616e.entry.js} +1 -1
- package/dist/tet-components/{p-dce3f9e4.entry.js → p-e84bba1a.entry.js} +1 -1
- package/dist/tet-components/{p-e5a15112.entry.js → p-eab907b1.entry.js} +1 -1
- package/dist/tet-components/p-ee684ac3.entry.js +1 -0
- package/dist/tet-components/{p-4b3fc9e2.entry.js → p-f1bdb246.entry.js} +1 -1
- package/dist/tet-components/{p-121d2baf.entry.js → p-f1e5cd46.entry.js} +1 -1
- package/dist/tet-components/{p-d635d4b3.entry.js → p-faff3a4c.entry.js} +1 -1
- package/dist/tet-components/{p-3d20ced4.entry.js → p-fc19ac2a.entry.js} +1 -1
- package/dist/tet-components/tet-components.esm.js +1 -1
- package/dist/types/components/advanced/address/tet-address-offers/address-product-offers.store.d.ts +14 -0
- package/dist/types/components/advanced/address/tet-address-offers/tet-address-offers.d.ts +16 -12
- package/dist/types/components/advanced/address/tet-address-offers-filters/address-offers-filters.d.ts +2 -0
- package/dist/types/components/advanced/address/tet-address-offers-filters-products/address-offers-products-filters.d.ts +25 -0
- package/dist/types/components/advanced/address/tet-address-offers-filters-products/tet-address-offers-filters-products.d.ts +70 -0
- package/dist/types/components/advanced/cards/old-utils.d.ts +2 -2
- package/dist/types/components/advanced/cards/tet-compare-card/tet-compare-card.d.ts +5 -1
- package/dist/types/components/advanced/cards/tet-compare-cards/tet-compare-cards.d.ts +1 -0
- package/dist/types/components/advanced/cards/tet-compare-cards-tab/compare-cards-tab-products-filters.d.ts +36 -0
- package/dist/types/components/advanced/cards/tet-compare-cards-tab/tet-compare-cards-tab.d.ts +13 -5
- package/dist/types/components/advanced/cards/utils.d.ts +2 -2
- package/dist/types/components/basic/buttons/tet-tag/tet-tag.d.ts +2 -0
- package/dist/types/components/basic/buttons/tet-tag-group/tet-tag-group.d.ts +2 -0
- package/dist/types/components.d.ts +133 -2
- package/dist/types/services/api/index.d.ts +2 -2
- package/dist/types/services/api/services/catalog/product-comparison.d.ts +21 -14
- package/dist/types/services/api/services/catalog/service-availability-services.d.ts +19 -1
- package/package.json +1 -1
- package/dist/cjs/tet-tag_2.cjs.entry.js +0 -68
- package/dist/esm/tet-tag_2.entry.js +0 -63
- package/dist/tet-components/p-1ec7f341.js +0 -2
- package/dist/tet-components/p-3053f5a3.entry.js +0 -1
- package/dist/tet-components/p-49e636bb.entry.js +0 -1
- package/dist/tet-components/p-5d02dddb.entry.js +0 -1
- package/dist/tet-components/p-80a612b2.entry.js +0 -1
- package/dist/tet-components/p-ad9e7b19.entry.js +0 -1
- package/dist/tet-components/p-b2b384d2.js +0 -1
- package/dist/tet-components/p-fe5d035f.entry.js +0 -1
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { createStore } from "@stencil/store";
|
|
2
|
+
const { state, onChange } = createStore({
|
|
3
|
+
catalog: {
|
|
4
|
+
addressKey: '',
|
|
5
|
+
structure: [],
|
|
6
|
+
productTags: [],
|
|
7
|
+
meta: []
|
|
8
|
+
},
|
|
9
|
+
availableTvProducts: [],
|
|
10
|
+
activeTvFilters: ['']
|
|
11
|
+
});
|
|
12
|
+
function clearFilters() {
|
|
13
|
+
state.activeTvFilters = [''];
|
|
14
|
+
state.availableTvProducts = state.availableTvProducts.map((availableTvFilter) => {
|
|
15
|
+
availableTvFilter.active = availableTvFilter.id === '';
|
|
16
|
+
return availableTvFilter;
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
;
|
|
20
|
+
export default state;
|
|
21
|
+
export { state, onChange, clearFilters };
|
package/dist/collection/components/advanced/address/tet-address-offers/tet-address-offers.css
CHANGED
|
@@ -472,6 +472,12 @@
|
|
|
472
472
|
flex-direction: column;
|
|
473
473
|
gap: 1rem;
|
|
474
474
|
}
|
|
475
|
+
.subcategory-filters {
|
|
476
|
+
display: flex;
|
|
477
|
+
justify-content: center;
|
|
478
|
+
margin-top: 1.5rem;
|
|
479
|
+
margin-bottom: 1.5rem;
|
|
480
|
+
}
|
|
475
481
|
|
|
476
482
|
.product {
|
|
477
483
|
width: 100%;
|
|
@@ -485,6 +491,58 @@
|
|
|
485
491
|
padding: 0;
|
|
486
492
|
}
|
|
487
493
|
}
|
|
494
|
+
.product .upsell-block {
|
|
495
|
+
display: flex;
|
|
496
|
+
flex-direction: column;
|
|
497
|
+
}
|
|
498
|
+
.product .upsell-block--title {
|
|
499
|
+
margin-bottom: 0.5rem;
|
|
500
|
+
font: 500 0.875rem/1.25rem Inter, Gilroy, Arial, sans-serif;
|
|
501
|
+
color: var(--tc-text-secondary);
|
|
502
|
+
}
|
|
503
|
+
.product .upsell-block--title.dark {
|
|
504
|
+
color: rgb(153, 160, 174);
|
|
505
|
+
}
|
|
506
|
+
.product .upsell-block--content {
|
|
507
|
+
background: rgb(255, 255, 255);
|
|
508
|
+
padding: 0.75rem;
|
|
509
|
+
display: flex;
|
|
510
|
+
flex-direction: row;
|
|
511
|
+
align-items: center;
|
|
512
|
+
margin-bottom: 1.5rem;
|
|
513
|
+
border-radius: 0.5rem;
|
|
514
|
+
}
|
|
515
|
+
.product .upsell-block--content.dark {
|
|
516
|
+
background: var(--tc-grey-minus-10-dark);
|
|
517
|
+
}
|
|
518
|
+
.product .upsell-block--icon {
|
|
519
|
+
width: 1.5rem;
|
|
520
|
+
height: 1.5rem;
|
|
521
|
+
margin-right: 0.75rem;
|
|
522
|
+
}
|
|
523
|
+
.product .upsell-block--name {
|
|
524
|
+
color: var(--tc-text-primary);
|
|
525
|
+
font: 500 0.875rem/1.25rem Inter, Gilroy, Arial, sans-serif;
|
|
526
|
+
margin-right: auto;
|
|
527
|
+
}
|
|
528
|
+
.product .upsell-block--name.dark {
|
|
529
|
+
color: var(--tc-grey-110-dark);
|
|
530
|
+
}
|
|
531
|
+
.product .upsell-block--amount {
|
|
532
|
+
color: var(--tc-text-primary);
|
|
533
|
+
font: 500 0.875rem/1.25rem Inter, Gilroy, Arial, sans-serif;
|
|
534
|
+
background: var(--tc-background-secondary);
|
|
535
|
+
border-radius: 0.25rem;
|
|
536
|
+
padding: 0.125rem 0.25rem;
|
|
537
|
+
margin-right: 0.75rem;
|
|
538
|
+
}
|
|
539
|
+
.product .upsell-block--amount.dark {
|
|
540
|
+
background: var(--tc-grey-10-dark);
|
|
541
|
+
color: var(--tc-grey-110-dark);
|
|
542
|
+
}
|
|
543
|
+
.product .upsell-block--tooltip {
|
|
544
|
+
cursor: pointer;
|
|
545
|
+
}
|
|
488
546
|
|
|
489
547
|
.placeholder-section {
|
|
490
548
|
margin-bottom: 2rem;
|
package/dist/collection/components/advanced/address/tet-address-offers/tet-address-offers.js
CHANGED
|
@@ -6,11 +6,6 @@ import { generateFormUrl } from "../../../../services/url/build-form-url";
|
|
|
6
6
|
import { formatPrice } from "../../../../services/utils/index";
|
|
7
7
|
import { Host, forceUpdate, h } from "@stencil/core";
|
|
8
8
|
import { sprintf } from "sprintf-js";
|
|
9
|
-
import tetTvPlusLogo from "../../../../assets/images/tet-tv-plus-logo.svg";
|
|
10
|
-
import tetTvPlusLogoWhite from "../../../../assets/images/tet-tv-plus-logo-white.svg";
|
|
11
|
-
import tetTvLogo from "../../../../assets/images/tet-tv-logo.svg";
|
|
12
|
-
import tetTvLogoWhite from "../../../../assets/images/tet-tv-logo-white.svg";
|
|
13
|
-
import netflixLogo from "../../../../assets/images/netflix-logo.svg";
|
|
14
9
|
/**
|
|
15
10
|
* This component displays the available Tet catalog offers in the given address.
|
|
16
11
|
*/
|
|
@@ -31,19 +26,15 @@ export class TetAddressOffers {
|
|
|
31
26
|
* @param category
|
|
32
27
|
*/
|
|
33
28
|
this.filterCategoryProducts = (category) => {
|
|
29
|
+
const filteredCodes = this.subcategoryProductFilters[category.key] || [];
|
|
30
|
+
if (filteredCodes.length > 0) {
|
|
31
|
+
return category.products.filter(product => filteredCodes.includes(product.productCode));
|
|
32
|
+
}
|
|
34
33
|
const { activeFilters } = addressOffersStore;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
const isNetflixPremiumProduct = (_a = product.attributes) === null || _a === void 0 ? void 0 : _a.some((attr) => attr.key === 'isNetflixPremiumProduct' && attr.value === true);
|
|
40
|
-
if (isNetflixPremiumProduct) {
|
|
41
|
-
return false;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
// Apply active filters logic
|
|
45
|
-
return activeFilters.includes('promotions') ? this.productHasPromotion(product) : true;
|
|
46
|
-
});
|
|
34
|
+
if (activeFilters.includes('promotions')) {
|
|
35
|
+
return category.products.filter(this.productHasPromotion.bind(this));
|
|
36
|
+
}
|
|
37
|
+
return category.products;
|
|
47
38
|
};
|
|
48
39
|
/**
|
|
49
40
|
* Determines whether the particular category should be rendered.
|
|
@@ -59,7 +50,8 @@ export class TetAddressOffers {
|
|
|
59
50
|
return ((!category.tag ||
|
|
60
51
|
['all', (_b = category.tag) !== null && _b !== void 0 ? _b : ''].some((tag) => activeFilters.includes(tag)) ||
|
|
61
52
|
(activeFilters.includes('promotions') && this.categoryContainsPromotions(category))) &&
|
|
62
|
-
this.categoryContainsContractTerms(category)
|
|
53
|
+
this.categoryContainsContractTerms(category) &&
|
|
54
|
+
this.filterCategoryProducts(category).length > 0);
|
|
63
55
|
};
|
|
64
56
|
this.renderSubCategoryHeader = ({ displayTitle, name, landingPage, isOneTv }) => {
|
|
65
57
|
const categoryName = this.translateProperty(name);
|
|
@@ -78,12 +70,15 @@ export class TetAddressOffers {
|
|
|
78
70
|
})));
|
|
79
71
|
};
|
|
80
72
|
this.addressKey = undefined;
|
|
73
|
+
this.catalog = undefined;
|
|
81
74
|
this.theme = 'light';
|
|
82
75
|
this.darkMode = false;
|
|
83
76
|
this.termText = undefined;
|
|
84
77
|
this.formParameters = '';
|
|
85
78
|
this.language = 'lv';
|
|
79
|
+
this.allowedTvProductCodes = [];
|
|
86
80
|
this.showLoader = true;
|
|
81
|
+
this.subcategoryProductFilters = {};
|
|
87
82
|
}
|
|
88
83
|
/**
|
|
89
84
|
* Loads new data on addressKey change
|
|
@@ -98,6 +93,12 @@ export class TetAddressOffers {
|
|
|
98
93
|
await processTranslations(this.translationsGroup, language);
|
|
99
94
|
forceUpdate(this);
|
|
100
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* @param event The event containing the filtered product IDs for the particular subcategory.
|
|
98
|
+
*/
|
|
99
|
+
handleFilteredProductsChanged(event) {
|
|
100
|
+
this.subcategoryProductFilters = Object.assign(Object.assign({}, this.subcategoryProductFilters), { [event.detail.subcategoryId]: event.detail.filteredProductIds });
|
|
101
|
+
}
|
|
101
102
|
/**
|
|
102
103
|
* Prepares the translations before the component is rendered.
|
|
103
104
|
*/
|
|
@@ -110,7 +111,6 @@ export class TetAddressOffers {
|
|
|
110
111
|
async componentDidLoad() {
|
|
111
112
|
await this.loadCatalogData();
|
|
112
113
|
this.initFilterChangeEvent();
|
|
113
|
-
this.handleTabContentInit();
|
|
114
114
|
}
|
|
115
115
|
/**
|
|
116
116
|
* Initializes the active filter change event on the component.
|
|
@@ -125,21 +125,8 @@ export class TetAddressOffers {
|
|
|
125
125
|
activeFilters: addressOffersStore.activeFilters,
|
|
126
126
|
availableFilters: translatedFilters
|
|
127
127
|
});
|
|
128
|
-
this.handleTabContentInit();
|
|
129
128
|
});
|
|
130
129
|
}
|
|
131
|
-
/**
|
|
132
|
-
* Handle the init of tab conents.
|
|
133
|
-
*/
|
|
134
|
-
async handleTabContentInit() {
|
|
135
|
-
await new Promise(requestAnimationFrame);
|
|
136
|
-
const tabContents = this.element.shadowRoot.querySelectorAll('tet-tab-content');
|
|
137
|
-
if (tabContents) {
|
|
138
|
-
tabContents.forEach((tabContent) => {
|
|
139
|
-
tabContent.parentContainer = this.element.shadowRoot;
|
|
140
|
-
});
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
130
|
/**
|
|
144
131
|
* Loads the catalog data from the gateway.
|
|
145
132
|
*/
|
|
@@ -147,9 +134,11 @@ export class TetAddressOffers {
|
|
|
147
134
|
this.showLoader = true;
|
|
148
135
|
addressOffersStore.availableFilters = [];
|
|
149
136
|
try {
|
|
150
|
-
|
|
137
|
+
const catalogData = await serviceAvailabilityServices(this.addressKey);
|
|
138
|
+
this.catalog = catalogData;
|
|
139
|
+
addressOffersStore.catalog = catalogData;
|
|
151
140
|
this.catalogChange.emit({
|
|
152
|
-
catalog:
|
|
141
|
+
catalog: catalogData,
|
|
153
142
|
activeFilters: addressOffersStore.activeFilters,
|
|
154
143
|
availableFilters: addressOffersStore.availableFilters
|
|
155
144
|
});
|
|
@@ -212,56 +201,44 @@ export class TetAddressOffers {
|
|
|
212
201
|
renderTopCategories() {
|
|
213
202
|
var _a, _b;
|
|
214
203
|
return (_b = (_a = addressOffersStore.catalog) === null || _a === void 0 ? void 0 : _a.structure) === null || _b === void 0 ? void 0 : _b.filter(this.showCategory).map((structure) => {
|
|
204
|
+
var _a;
|
|
215
205
|
const categoryName = this.translateProperty(structure.name);
|
|
216
|
-
return (h("section", { class: { 'category': true, [`category--${this.theme}`]: !!this.theme, [this.theme]: true } }, categoryName && h("h2", { class: { 'category-title': true, [`category-title--${this.theme}`]: !!this.theme, [this.theme]: true } }, categoryName), h("div", { class: { 'category-subcategories': true, [`category-subcategories--${this.theme}`]: !!this.theme, [this.theme]: true } }, this.renderSubCategories(structure.subgroups || []))));
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Filters products based on whether they are Netflix or non-Netflix.
|
|
221
|
-
*
|
|
222
|
-
* @param category The category structure model containing products and attributes.
|
|
223
|
-
* @param isNetflix If true, returns only Netflix products. If false, returns non-Netflix products.
|
|
224
|
-
*/
|
|
225
|
-
filterProductsByNetflix(category, isNetflix) {
|
|
226
|
-
// Return all products if there's no Netflix toggle
|
|
227
|
-
if (!category.hasNetflixToggle) {
|
|
228
|
-
return category.products;
|
|
229
|
-
}
|
|
230
|
-
return category.products.filter((product) => {
|
|
231
|
-
var _a, _b;
|
|
232
|
-
// Exclude Netflix premium products
|
|
233
|
-
const isNetflixPremiumProduct = (_a = product.attributes) === null || _a === void 0 ? void 0 : _a.some((attr) => attr.key === 'isNetflixPremiumProduct' && attr.value === true);
|
|
234
|
-
if (isNetflixPremiumProduct) {
|
|
235
|
-
return false;
|
|
236
|
-
}
|
|
237
|
-
// Check if the product is a Netflix product
|
|
238
|
-
const isNetflixProduct = (_b = product.attributes) === null || _b === void 0 ? void 0 : _b.some((attr) => attr.key === 'isNetflixProduct' && attr.value === true);
|
|
239
|
-
// Return based on the `isNetflix` flag
|
|
240
|
-
return isNetflix ? isNetflixProduct : !isNetflixProduct;
|
|
206
|
+
return (h("section", { class: { 'category': true, [`category--${this.theme}`]: !!this.theme, [this.theme]: true } }, categoryName && h("h2", { class: { 'category-title': true, [`category-title--${this.theme}`]: !!this.theme, [this.theme]: true } }, categoryName), h("div", { class: { 'category-subcategories': true, [`category-subcategories--${this.theme}`]: !!this.theme, [this.theme]: true } }, this.renderSubCategories(structure.subgroups || [], (_a = addressOffersStore.catalog) === null || _a === void 0 ? void 0 : _a.meta))));
|
|
241
207
|
});
|
|
242
208
|
}
|
|
243
209
|
/**
|
|
244
210
|
* Renders sub-category blocks.
|
|
245
211
|
*
|
|
246
212
|
* @param {StructureModel[]} categories
|
|
213
|
+
* @param {MetaModel[]} meta
|
|
247
214
|
* @returns {FunctionalComponent[]}
|
|
248
215
|
*/
|
|
249
|
-
renderSubCategories(categories) {
|
|
216
|
+
renderSubCategories(categories, meta) {
|
|
250
217
|
return categories.filter(this.showCategory).map((category) => {
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
const nonNetflixProducts = this.filterProductsByNetflix(category, false);
|
|
254
|
-
const netflixProducts = this.filterProductsByNetflix(category, true);
|
|
255
|
-
const isIptvCategory = category.key === "iptv";
|
|
256
|
-
return (h("div", { class: "subcategory" }, h("div", { class: { 'subcategory-header': true, [`subcategory-header--${this.theme}`]: !!this.theme, [this.theme]: true } }, this.renderSubCategoryHeader(category)), h("div", { class: "tab-header" }, h("tet-tab-header", { class: "header-switch", theme: this.theme, position: "center", "data-name": category.key, "default-tab": category.key + '1', segmented: true, sizing: "web", "hide-header-underline": false }, h("button", { class: { 'text-first': true, [`text-first--${this.theme}`]: !!this.theme, [this.theme]: true }, "data-name": category.key + '1' }, h("img", { src: isIptvCategory
|
|
257
|
-
? (this.theme === 'dark' ? tetTvLogoWhite : tetTvLogo)
|
|
258
|
-
: (this.theme === 'dark' ? tetTvPlusLogoWhite : tetTvPlusLogo), alt: "tet-tv-logo", class: "tab-header-image", style: { maxHeight: '1.5rem' } }), t('components-tab-subscriptions')), h("button", { class: { 'text-first': true, [`text-first--${this.theme}`]: !!this.theme, [this.theme]: true }, "data-name": category.key + '2', "data-image": netflixLogo, "data-image-alt": "netflix" }, isIptvCategory ? t('components-tab-tet-tv') : t('components-tab-tet-tv-plus')))), h("tet-tab-content", { class: "tab-content", "data-name": category.key, "default-tab": category.key + '1', "use-visibility": false }, h("div", { "data-name": category.key + '1' }, h("div", { class: "subcategory-tab" }, nonNetflixProducts.map((product) => this.renderProduct(product, category.theme)))), h("div", { "data-name": category.key + '2' }, h("div", { class: "subcategory-tab" }, netflixProducts.map((product) => this.renderProduct(product, category.theme)))))));
|
|
259
|
-
}
|
|
260
|
-
// For categories without Netflix toggle, render normally
|
|
261
|
-
const filteredProducts = this.filterCategoryProducts(category);
|
|
262
|
-
return (h("div", { class: "subcategory" }, h("div", { class: "subcategory-header" }, this.renderSubCategoryHeader(category)), h("div", { class: "subcategory-products" }, filteredProducts.map((product) => this.renderProduct(product, category.theme)))));
|
|
218
|
+
return (h("div", { class: "subcategory" }, h("div", { class: "subcategory-header" }, this.renderSubCategoryHeader(category)), category.hasProductTags &&
|
|
219
|
+
h("div", { class: "subcategory-filters" }, h("tet-address-offers-filters-products", { catalog: this.catalog, class: `center`, language: this.language, clearFilterButton: true, subcategoryId: category.key, onFilteredProductsChanged: event => this.handleFilteredProductsChanged(event), category: category, theme: this.theme })), h("div", { class: "subcategory-products" }, this.filterCategoryProducts(category).map((product) => this.renderProduct(product, category.theme, meta)))));
|
|
263
220
|
});
|
|
264
221
|
}
|
|
222
|
+
renderUpsellBlock(name, icons, amount) {
|
|
223
|
+
let icon = icons.find(icon => icon.key === 'upsell-adjust-offers-light');
|
|
224
|
+
const isDarkTheme = this.theme === 'dark';
|
|
225
|
+
if (isDarkTheme) {
|
|
226
|
+
icon = icons.find(icon => icon.key === 'upsell-adjust-offers-dark');
|
|
227
|
+
}
|
|
228
|
+
return (h("div", { class: "upsell-block" }, h("div", { class: {
|
|
229
|
+
'upsell-block--title': true,
|
|
230
|
+
'dark': isDarkTheme
|
|
231
|
+
} }, t('components-max-sport-upsell-title')), h("div", { class: {
|
|
232
|
+
'upsell-block--content': true,
|
|
233
|
+
'dark': isDarkTheme
|
|
234
|
+
} }, h("img", { src: icon.icon, class: { 'upsell-block--icon': true } }), h("div", { class: {
|
|
235
|
+
'upsell-block--name': true,
|
|
236
|
+
'dark': isDarkTheme
|
|
237
|
+
} }, name), h("div", { class: {
|
|
238
|
+
'upsell-block--amount': true,
|
|
239
|
+
'dark': isDarkTheme
|
|
240
|
+
} }, "+", amount, " Eur"), h("div", { class: { 'upsell-block--tooltip': true } }, h("tet-icon", { class: "icon", name: "info-circle", focusable: true, theme: this.theme }), h("tet-tooltip", { theme: this.theme }, t('components-max-sport-upsell-tooltip-info'))))));
|
|
241
|
+
}
|
|
265
242
|
/**
|
|
266
243
|
* Renders a single product.
|
|
267
244
|
*
|
|
@@ -269,15 +246,15 @@ export class TetAddressOffers {
|
|
|
269
246
|
* @param {ServiceAvailabilityServicesCategoryTheme} theme
|
|
270
247
|
* @returns {FunctionalComponent}
|
|
271
248
|
*/
|
|
272
|
-
renderProduct(product, theme = 'light') {
|
|
273
|
-
var _a, _b, _c, _d, _e;
|
|
249
|
+
renderProduct(product, theme = 'light', meta) {
|
|
250
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
274
251
|
if (!this.getContractTerm(product)) {
|
|
275
252
|
return;
|
|
276
253
|
}
|
|
277
254
|
const tp = (property) => this.translateProperty(property);
|
|
278
255
|
const tooltip = (text) => `
|
|
279
|
-
<tet-icon class="icon" name="info-circle" focusable={true}></tet-icon>
|
|
280
|
-
<tet-tooltip>${text}</tet-tooltip>
|
|
256
|
+
<tet-icon class="icon" name="info-circle" focusable="${true}"></tet-icon>
|
|
257
|
+
<tet-tooltip theme="${this.theme}">${text}</tet-tooltip>
|
|
281
258
|
`.trim();
|
|
282
259
|
const buttonTheme = this.darkMode ? 'dark' : 'light';
|
|
283
260
|
const button = (text, link) => `
|
|
@@ -295,13 +272,22 @@ export class TetAddressOffers {
|
|
|
295
272
|
const priceDescription = tp(this.getContractTermProperty(product, 'priceDescription'));
|
|
296
273
|
const contract = this.getContractTermProperty(product, 'contract');
|
|
297
274
|
const bestChoice = (_b = (_a = this.getAttribute(product.attributes, 'isBestChoice')) === null || _a === void 0 ? void 0 : _a.value) !== null && _b !== void 0 ? _b : false;
|
|
275
|
+
const showMaxSportUpsell = (_d = (_c = this.getAttribute(product.attributes, 'showMaxSportUpsell')) === null || _c === void 0 ? void 0 : _c.value) !== null && _d !== void 0 ? _d : false;
|
|
276
|
+
let upsellBlock = null;
|
|
277
|
+
if (showMaxSportUpsell && Object.keys(meta)[0] === 'hboMaxSport') {
|
|
278
|
+
const upsellProduct = Object.values(meta)[0];
|
|
279
|
+
const name = upsellProduct.name ? upsellProduct.name[this.language] : '';
|
|
280
|
+
const icons = upsellProduct.icons ? upsellProduct.icons : [];
|
|
281
|
+
const amount = upsellProduct.amount ? upsellProduct.amount : null;
|
|
282
|
+
upsellBlock = this.renderUpsellBlock(name, icons, amount);
|
|
283
|
+
}
|
|
298
284
|
let termText = null;
|
|
299
285
|
if (this.termText) {
|
|
300
286
|
const contractTerm = this.getContractTermProperty(product, 'term');
|
|
301
287
|
if (contractTerm !== 0) {
|
|
302
288
|
termText = sprintf(this.termText, contractTerm);
|
|
303
289
|
}
|
|
304
|
-
if ((
|
|
290
|
+
if ((_f = (_e = this.getAttribute(product.attributes, 'availabilityTermUnlimitedOverride')) === null || _e === void 0 ? void 0 : _e.value) !== null && _f !== void 0 ? _f : false) {
|
|
305
291
|
termText = t('components-indefinite');
|
|
306
292
|
}
|
|
307
293
|
}
|
|
@@ -313,6 +299,16 @@ export class TetAddressOffers {
|
|
|
313
299
|
}
|
|
314
300
|
}
|
|
315
301
|
const benefitItems = benefits === null || benefits === void 0 ? void 0 : benefits.split('\n').filter(Boolean);
|
|
302
|
+
let productDescription = null;
|
|
303
|
+
if ((_g = this.getAttribute(product.attributes, 'isNetflixProduct')) === null || _g === void 0 ? void 0 : _g.value) {
|
|
304
|
+
productDescription = t('components-netflix-card-description');
|
|
305
|
+
}
|
|
306
|
+
else if ((_h = this.getAttribute(product.attributes, 'isNetflixMaxProduct')) === null || _h === void 0 ? void 0 : _h.value) {
|
|
307
|
+
productDescription = t('components-netflix-max-card-description');
|
|
308
|
+
}
|
|
309
|
+
else if ((_j = this.getAttribute(product.attributes, 'isMaxProduct')) === null || _j === void 0 ? void 0 : _j.value) {
|
|
310
|
+
productDescription = t('components-max-card-description');
|
|
311
|
+
}
|
|
316
312
|
const options = {
|
|
317
313
|
mainTitle: tp(product.name),
|
|
318
314
|
subTitle: this.getProductSubtitle(product),
|
|
@@ -330,13 +326,11 @@ export class TetAddressOffers {
|
|
|
330
326
|
secondaryLink: contract,
|
|
331
327
|
secondaryLinkText: t('components-offers-contract-term-link'),
|
|
332
328
|
secondaryLinkOpenBlank: true,
|
|
333
|
-
netflixProductDescription:
|
|
334
|
-
? t('components-netflix-card-description')
|
|
335
|
-
: null,
|
|
329
|
+
netflixProductDescription: productDescription,
|
|
336
330
|
};
|
|
337
331
|
return (h("tet-compare-card", { class: { 'product': true, 'best-choice': bestChoice }, options: options, cardType: "wide60-40", minWideWidth: 768, theme: theme, bestChoice: bestChoice,
|
|
338
332
|
// Resets the best choice card height to 100% and removes negative margin
|
|
339
|
-
cardList: true, darkMode: this.darkMode }));
|
|
333
|
+
cardList: true, darkMode: this.darkMode, darkModeOverride: this.theme == "dark" }, h("div", { slot: "upsell-block-slot" }, upsellBlock)));
|
|
340
334
|
}
|
|
341
335
|
/**
|
|
342
336
|
* Returns the product subtitle with the dynamic broadband speed if the product is broadband or a TV/TV+ hard bundle.
|
|
@@ -424,7 +418,7 @@ export class TetAddressOffers {
|
|
|
424
418
|
return generateFormUrl(baseUrl, parameters);
|
|
425
419
|
}
|
|
426
420
|
render() {
|
|
427
|
-
return (h(Host, { key: '
|
|
421
|
+
return (h(Host, { key: '2995d979e507e7ceafe7a8c51712314a35d59c1e' }, this.showLoader ? this.renderLoader() : addressOffersStore.catalog && this.renderTopCategories()));
|
|
428
422
|
}
|
|
429
423
|
static get is() { return "tet-address-offers"; }
|
|
430
424
|
static get encapsulation() { return "shadow"; }
|
|
@@ -457,6 +451,27 @@ export class TetAddressOffers {
|
|
|
457
451
|
"attribute": "address-key",
|
|
458
452
|
"reflect": false
|
|
459
453
|
},
|
|
454
|
+
"catalog": {
|
|
455
|
+
"type": "unknown",
|
|
456
|
+
"mutable": false,
|
|
457
|
+
"complexType": {
|
|
458
|
+
"original": "AvailableServicesModel",
|
|
459
|
+
"resolved": "AvailableServicesModel",
|
|
460
|
+
"references": {
|
|
461
|
+
"AvailableServicesModel": {
|
|
462
|
+
"location": "import",
|
|
463
|
+
"path": "@services/api/services/catalog/service-availability-services",
|
|
464
|
+
"id": "src/services/api/services/catalog/service-availability-services.ts::AvailableServicesModel"
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
},
|
|
468
|
+
"required": false,
|
|
469
|
+
"optional": false,
|
|
470
|
+
"docs": {
|
|
471
|
+
"tags": [],
|
|
472
|
+
"text": "The catalog data."
|
|
473
|
+
}
|
|
474
|
+
},
|
|
460
475
|
"theme": {
|
|
461
476
|
"type": "string",
|
|
462
477
|
"mutable": false,
|
|
@@ -551,12 +566,29 @@ export class TetAddressOffers {
|
|
|
551
566
|
"attribute": "language",
|
|
552
567
|
"reflect": false,
|
|
553
568
|
"defaultValue": "'lv'"
|
|
569
|
+
},
|
|
570
|
+
"allowedTvProductCodes": {
|
|
571
|
+
"type": "unknown",
|
|
572
|
+
"mutable": false,
|
|
573
|
+
"complexType": {
|
|
574
|
+
"original": "string[]",
|
|
575
|
+
"resolved": "string[]",
|
|
576
|
+
"references": {}
|
|
577
|
+
},
|
|
578
|
+
"required": false,
|
|
579
|
+
"optional": false,
|
|
580
|
+
"docs": {
|
|
581
|
+
"tags": [],
|
|
582
|
+
"text": "The currently active tv product filters."
|
|
583
|
+
},
|
|
584
|
+
"defaultValue": "[]"
|
|
554
585
|
}
|
|
555
586
|
};
|
|
556
587
|
}
|
|
557
588
|
static get states() {
|
|
558
589
|
return {
|
|
559
|
-
"showLoader": {}
|
|
590
|
+
"showLoader": {},
|
|
591
|
+
"subcategoryProductFilters": {}
|
|
560
592
|
};
|
|
561
593
|
}
|
|
562
594
|
static get events() {
|
|
@@ -49,13 +49,14 @@ class AddressOffersFilters {
|
|
|
49
49
|
this.resolveFilters = (serviceAvailabilityData) => {
|
|
50
50
|
const filtersCount = this.calculateFilterCounts(serviceAvailabilityData);
|
|
51
51
|
return (this.allFilters
|
|
52
|
-
// Show
|
|
52
|
+
// Show filters that have some products and filters without product as disabled.
|
|
53
53
|
.filter(({ id }) => filtersCount[id])
|
|
54
54
|
.map((filter) => ({
|
|
55
55
|
id: filter.id,
|
|
56
56
|
title: filter.titleTranslationKey,
|
|
57
57
|
count: filtersCount[filter.id],
|
|
58
58
|
active: filter.active,
|
|
59
|
+
showIcon: filter.id === 'all' ? false : filter.active,
|
|
59
60
|
clickAction: this.filterClickAction.bind(this, filter)
|
|
60
61
|
})));
|
|
61
62
|
};
|
|
@@ -104,22 +105,34 @@ class AddressOffersFilters {
|
|
|
104
105
|
return;
|
|
105
106
|
}
|
|
106
107
|
if (this.singleSelectionFilters.includes(availableFilter.id)) {
|
|
107
|
-
|
|
108
|
-
this.availableFilters.forEach((forEachFilter) => (forEachFilter.active = false));
|
|
108
|
+
this.deSelectAllFilers(availableFilter);
|
|
109
109
|
}
|
|
110
110
|
else {
|
|
111
|
-
|
|
112
|
-
this.availableFilters
|
|
113
|
-
.filter(({ id }) => this.singleSelectionFilters.includes(id))
|
|
114
|
-
.forEach((forEachFilter) => (forEachFilter.active = false));
|
|
111
|
+
this.deSelectSingleSelectionFilters();
|
|
115
112
|
}
|
|
116
113
|
availableFilter.active = !availableFilter.active;
|
|
114
|
+
availableFilter.showIcon = availableFilter.id === 'all' ? false : !availableFilter.showIcon;
|
|
117
115
|
// If all filters become de-selected, then automatically select all offers filter.
|
|
118
116
|
if (!this.availableFilters.some(({ active }) => active)) {
|
|
119
|
-
this.availableFilters.find(({ id }) => id === 'all')
|
|
117
|
+
const allSelectedFilters = this.availableFilters.find(({ id }) => id === 'all');
|
|
118
|
+
allSelectedFilters.active = true;
|
|
120
119
|
}
|
|
121
120
|
this.onFilterSelect(this.availableFilters);
|
|
122
121
|
};
|
|
122
|
+
// De-select all filters if all filter tab or not active single selection tab clicked.
|
|
123
|
+
this.deSelectAllFilers = (availableFilter) => {
|
|
124
|
+
const { id, active } = availableFilter;
|
|
125
|
+
if (id === 'all' || !active) {
|
|
126
|
+
this.availableFilters
|
|
127
|
+
.forEach((forEachFilter) => { forEachFilter.active = false; forEachFilter.showIcon = false; });
|
|
128
|
+
}
|
|
129
|
+
};
|
|
130
|
+
//De-select those filters that cannot be included in multiple filter selection.
|
|
131
|
+
this.deSelectSingleSelectionFilters = () => {
|
|
132
|
+
this.availableFilters
|
|
133
|
+
.filter(({ id }) => this.singleSelectionFilters.includes(id))
|
|
134
|
+
.forEach((forEachFilter) => { forEachFilter.active = false; forEachFilter.showIcon = false; });
|
|
135
|
+
};
|
|
123
136
|
}
|
|
124
137
|
}
|
|
125
138
|
export { AddressOffersFilters };
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
class AddressOffersProductsFilters {
|
|
2
|
+
constructor(onFilterSelect) {
|
|
3
|
+
this.onFilterSelect = onFilterSelect;
|
|
4
|
+
this.availableTvFilters = [];
|
|
5
|
+
this.allFilters = [];
|
|
6
|
+
this.initialize = (serviceAvailabilityData, category) => {
|
|
7
|
+
if (serviceAvailabilityData.productTags) {
|
|
8
|
+
this.availableTvFilters = this.resolveFilters(serviceAvailabilityData, category);
|
|
9
|
+
}
|
|
10
|
+
this.updateDisabledFilters();
|
|
11
|
+
this.onFilterSelect([...this.availableTvFilters], this.getActiveFilterIds(), this.getFilteredProductIds(category));
|
|
12
|
+
};
|
|
13
|
+
this.getAvailableFilters = () => {
|
|
14
|
+
return [...this.availableTvFilters];
|
|
15
|
+
};
|
|
16
|
+
this.clearFilters = (category) => {
|
|
17
|
+
this.availableTvFilters.forEach(filter => (filter.active = false));
|
|
18
|
+
this.updateDisabledFilters();
|
|
19
|
+
this.onFilterSelect([...this.availableTvFilters], [], this.getFilteredProductIds(category));
|
|
20
|
+
};
|
|
21
|
+
this.resolveFilters = (serviceAvailabilityData, category) => {
|
|
22
|
+
const subcategoryProductCodes = new Set(category.products.map(product => product.productCode));
|
|
23
|
+
const productTags = serviceAvailabilityData.productTags || [];
|
|
24
|
+
return productTags
|
|
25
|
+
.map(tag => {
|
|
26
|
+
const localProducts = (tag.products || []).filter(productCode => subcategoryProductCodes.has(productCode));
|
|
27
|
+
return {
|
|
28
|
+
id: tag.tag,
|
|
29
|
+
title: tag.title,
|
|
30
|
+
products: localProducts,
|
|
31
|
+
active: false,
|
|
32
|
+
disabled: false,
|
|
33
|
+
showIcon: false,
|
|
34
|
+
clickAction: this.filterClickAction.bind(this)
|
|
35
|
+
};
|
|
36
|
+
})
|
|
37
|
+
.filter(filter => filter.products.length > 0); // Only include if products present in this group
|
|
38
|
+
};
|
|
39
|
+
this.updateDisabledFilters = () => {
|
|
40
|
+
const activeFilters = this.availableTvFilters.filter(f => f.active);
|
|
41
|
+
const activeCount = activeFilters.length;
|
|
42
|
+
let intersection = null;
|
|
43
|
+
if (activeCount > 0) {
|
|
44
|
+
intersection = new Set(activeFilters[0].products);
|
|
45
|
+
for (let i = 1; i < activeFilters.length; i++) {
|
|
46
|
+
intersection = new Set([...intersection].filter(productCode => activeFilters[i].products.includes(productCode)));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
for (const filter of this.availableTvFilters) {
|
|
50
|
+
if (filter.active || activeCount === 0) {
|
|
51
|
+
filter.disabled = false;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
let simulatedIntersection = intersection ? [...intersection] : filter.products;
|
|
55
|
+
if (intersection) {
|
|
56
|
+
simulatedIntersection = simulatedIntersection.filter(code => filter.products.includes(code));
|
|
57
|
+
}
|
|
58
|
+
filter.disabled = simulatedIntersection.length <= 1;
|
|
59
|
+
filter.showIcon = false;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
this.filterClickAction = (filter, category) => {
|
|
64
|
+
const availableFilter = this.availableTvFilters.find(({ id }) => id === filter.id);
|
|
65
|
+
if (!availableFilter)
|
|
66
|
+
return;
|
|
67
|
+
if (availableFilter.disabled)
|
|
68
|
+
return;
|
|
69
|
+
availableFilter.active = !availableFilter.active;
|
|
70
|
+
availableFilter.showIcon = !availableFilter.showIcon;
|
|
71
|
+
this.updateDisabledFilters();
|
|
72
|
+
this.onFilterSelect([...this.availableTvFilters], this.getActiveFilterIds(), this.getFilteredProductIds(category));
|
|
73
|
+
};
|
|
74
|
+
this.getActiveFilterIds = () => {
|
|
75
|
+
return this.availableTvFilters.filter(filter => filter.active).map(filter => filter.id);
|
|
76
|
+
};
|
|
77
|
+
this.getFilteredProductIds = (category = null) => {
|
|
78
|
+
if (!category || !category.products) {
|
|
79
|
+
return [];
|
|
80
|
+
}
|
|
81
|
+
const activeTags = this.availableTvFilters.filter(tag => tag.active);
|
|
82
|
+
if (activeTags.length === 0) {
|
|
83
|
+
return category.products.map(product => product.productCode);
|
|
84
|
+
}
|
|
85
|
+
let intersection = [...activeTags[0].products];
|
|
86
|
+
for (let i = 1; i < activeTags.length; i++) {
|
|
87
|
+
intersection = intersection.filter(productCode => activeTags[i].products.includes(productCode));
|
|
88
|
+
}
|
|
89
|
+
const productsInCategory = new Set(category.products.map(product => product.productCode));
|
|
90
|
+
intersection = intersection.filter(productCode => productsInCategory.has(productCode));
|
|
91
|
+
return intersection;
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
export { AddressOffersProductsFilters };
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { newSpecPage } from "@stencil/core/testing";
|
|
2
|
+
import { TetAddressOffersFiltersProducts } from "../tet-address-offers-filters-products";
|
|
3
|
+
describe('tet-address-offers-filters-products', () => {
|
|
4
|
+
it('renders', async () => {
|
|
5
|
+
const page = await newSpecPage({
|
|
6
|
+
components: [TetAddressOffersFiltersProducts],
|
|
7
|
+
html: `<tet-address-offers-filters-products></tet-address-offers-filters-products>`
|
|
8
|
+
});
|
|
9
|
+
expect(page.root).toEqualHtml(`
|
|
10
|
+
<tet-address-offers-filters-products>
|
|
11
|
+
<mock:shadow-root>
|
|
12
|
+
<div class="loader">
|
|
13
|
+
<tet-placeholder class="tag-placeholder" height="2rem" width="8rem"></tet-placeholder>
|
|
14
|
+
<tet-placeholder class="tag-placeholder" height="2rem" width="8rem"></tet-placeholder>
|
|
15
|
+
<tet-placeholder class="tag-placeholder" height="2rem" width="8rem"></tet-placeholder>
|
|
16
|
+
<tet-placeholder class="tag-placeholder" height="2rem" width="8rem"></tet-placeholder>
|
|
17
|
+
</div>
|
|
18
|
+
<tet-tag-group language="lv" theme="light"></tet-tag-group>
|
|
19
|
+
</mock:shadow-root>
|
|
20
|
+
</tet-address-offers-filters-products>
|
|
21
|
+
`);
|
|
22
|
+
});
|
|
23
|
+
});
|