{"version":3,"file":"roperetail-ngx-ionic-ecommerce.mjs","sources":["../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/order.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/log.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/mock.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/storage.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/core.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/outfit.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/window-ref-service.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/analytics.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/cookie.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/user.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/auth.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/cart.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/common-header/common-header.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/common-header/common-header.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/wizard/wizard-animations.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/wizard/wizard.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/wizard/wizard.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/wizard/wizard.step.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/review.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/common-footer/common-footer.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/common-footer/common-footer.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/screensize.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/chat.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/branch.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/footer/footer.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/footer/footer.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/order-line.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/wishlist.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/reservation.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/product-add-to-cart/product-add-to-cart.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/product-add-to-cart/product-add-to-cart.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/header-dropdown/header-dropdown.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/header-dropdown/header-dropdown.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/product-container/product-container.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/product-container/product-container.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/search-results/search-results.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/search-results/search-results.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/order.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/promo-banner/promo-banner.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/promo-banner/promo-banner.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/header/header.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/header/header.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/favourite.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/shipment.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/loading/loading.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/loading/loading.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-overview/cart-overview.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-overview/cart-overview.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/product-slider/product-slider.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/product-slider/product-slider.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/featured-product/featured-product.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/featured-product/featured-product.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/banners/banners.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/banners/banners.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/text-block/text-block.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/text-block/text-block.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/newsletter-signup/newsletter-signup.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/newsletter-signup/newsletter-signup.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/usp-container/usp-global.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/usp-container/usp-container.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/usp-container/usp-container.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/usp-item/usp-item.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/usp-item/usp-item.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/points/points.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/points/points.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/menu/menu.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/menu/menu.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/wishlist-overview/wishlist-overview.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/wishlist-overview/wishlist-overview.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/search/search.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/search/search.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-summary/cart-summary.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-summary/cart-summary.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/payment.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-do-payment/cart-do-payment.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-do-payment/cart-do-payment.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-check-payment/cart-check-payment.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-check-payment/cart-check-payment.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-result-payment/cart-result-payment.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-result-payment/cart-result-payment.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/subscription.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-main/subscription-main.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-main/subscription-main.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-info/subscription-info.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-info/subscription-info.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-transaction/subscription-transaction.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-transaction/subscription-transaction.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-transaction-archive/subscription-transaction-archive.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-transaction-archive/subscription-transaction-archive.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-note/subscription-note.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-note/subscription-note.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-review/subscription-review.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-review/subscription-review.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-consent/subscription-consent.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-consent/subscription-consent.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/employee.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-employee/subscription-employee.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-employee/subscription-employee.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-test/subscription-test.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/subscription-test/subscription-test.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/user-address-details/user-address-details.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/user-address-details/user-address-details.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/user-basic-details/user-basic-details.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/user-basic-details/user-basic-details.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/story-viewer/story-viewer.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/story-viewer/story-viewer.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/option.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/seo.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/product-overview/product-overview.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/product-overview/product-overview.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/coupon.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/coupon-check/coupon-check.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/coupon-check/coupon-check.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/appointment.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/blog.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/event.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/script.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/loyalty.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/website.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/newsletter-signup-modal/newsletter-signup-modal.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/newsletter-signup-modal/newsletter-signup-modal.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/spin-the-wheel/spin-the-wheel.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/spin-the-wheel/spin-the-wheel.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/campaign.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/initialize/initialize.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/initialize/initialize.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/branch.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/product-add-to-cart-modal/product-add-to-cart-modal.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/product-add-to-cart-modal/product-add-to-cart-modal.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/add-to-cart-success-modal/add-to-cart-success-modal.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/add-to-cart-success-modal/add-to-cart-success-modal.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/product-variant.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/reservation.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/reservation-request.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/reservation-response.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/back-button/back-button.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/back-button/back-button.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/product-family-overview/product-family-overview.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/product-family-overview/product-family-overview.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/product-detail/product-detail.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/product-detail/product-detail.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/campaign-detail/campaign-detail.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/campaign-detail/campaign-detail.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/services/service-request.service.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/chat/chat.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/chat/chat.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/online-shopping/online-shopping.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/online-shopping/online-shopping.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/login/login.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/login/login.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/register/register.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/register/register.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/newsletter/newsletter.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/newsletter/newsletter.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/shipment.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-shipment/cart-shipment.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-shipment/cart-shipment.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/review-overview/review-overview.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/review-overview/review-overview.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/shop-window-product-overview/shop-window-product-overview.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/shop-window-product-overview/shop-window-product-overview.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/order-overview/order-overview.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/order-overview/order-overview.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/directives/hide-header.directive.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/promo-image-grid/promo-image-global.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/promo-image/promo-image.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/promo-image/promo-image.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/promo-image-grid/promo-image-grid.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/misc/promo-image-grid/promo-image-grid.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/product-option-overview/product-option-overview.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/shopping/product-option-overview/product-option-overview.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/webshop-filters/webshop-filters.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/webshop-filters/webshop-filters.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/customer-membership/customer-membership.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/customer-membership/customer-membership.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/appointment-agenda/appointment-agenda.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/appointment-agenda/appointment-agenda.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/appointment.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/create-appointment/create-appointment.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/create-appointment/create-appointment.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/page-menu/page-menu.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/page-menu/page-menu.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/my-account/my-account.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/my-account/my-account.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/customer-service-overview/customer-service-overview.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/customer-service-overview/customer-service-overview.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/about-overview/about-overview.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/about-overview/about-overview.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/terms-overview/terms-overview.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/terms-overview/terms-overview.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/default-page/default-page.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/default-page/default-page.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/store-stock/store-stock.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/store-stock/store-stock.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/webshop-theme-detail/webshop-theme-detail.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/webshop-theme-detail/webshop-theme-detail.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/webshop-outfit-mediaset-categories/webshop-outfit-mediaset-categories.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/webshop-outfit-mediaset-categories/webshop-outfit-mediaset-categories.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/loyalty-gift-shop/loyalty-gift-shop.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/loyalty-gift-shop/loyalty-gift-shop.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/startup-loading/startup-loading.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/core/startup-loading/startup-loading.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/loyalty-gift-detail/loyalty-gift-detail.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/loyalty-gift-detail/loyalty-gift-detail.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/loyalty-gift-vouchers/loyalty-gift-vouchers.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/loyalty-gift-vouchers/loyalty-gift-vouchers.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-payment/cart-payment.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-payment/cart-payment.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-checkout/cart-checkout.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/cart-checkout/cart-checkout.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/submit-return/submit-return.component.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/components/pages/submit-return/submit-return.component.html","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/roperetail-ngx-ionic-ecommerce.module.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/blog.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/employee.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/image.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/option.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/outfit.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/payment.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/payment-method.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/product.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/review.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/shipping-method.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/stats.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/lib/models/stock.ts","../../../../projects/roperetail/ngx-ionic-ecommerce/src/roperetail-ngx-ionic-ecommerce.ts"],"sourcesContent":["import { Payment } from './payment';\nimport { Shipment } from './shipment';\nimport { OrderLine } from './order-line';\nimport { Branch } from './branch';\n\nexport class Order {\n\n    id: number;\n    payment: Payment;\n    shipment: Shipment;\n    order_lines: OrderLine[];\n    branch: Branch;\n    status: string;\n    coupon: any;\n    promocode: any;\n    version: any;\n    user_agent: any;\n    timestamp_start;\n    fbp_cookie;\n    fbc_cookie;\n\n    shipments: any[];\n    payments: any[];\n    transaction_lines: any[];\n    sub_total: any;\n    employee: any;\n\n    constructor() {\n        this.order_lines = new Array<OrderLine>();\n    }\n\n}\n","import { Injectable, isDevMode } from '@angular/core';\nimport { v4 as uuid } from 'uuid';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LogService {\n\n  public debug;\n\n  public lastLog: number;\n  public logs: any[] = [];\n\n  public latestHash: string;\n\n  public enableLog = false;\n  \n  constructor(\n    \n  ) {\n    this.enableLog = isDevMode();\n  }\n  \n  public info(message: string, registerTime?: boolean, color?: string) {\n      \n    if (!this.enableLog) {\n      return;\n    }\n\n    const logEntries = [];\n    const currentTime = new Date().getTime();\n    const time = currentTime - this.lastLog;\n    let timestamp = this.zeroFill(time, 3);\n\n    if (registerTime && registerTime === true && this.logs.length > 0) {\n\n      // Get latest log\n      const entry = this.logs.find(e => e.hash === this.latestHash);\n      entry.messages.push({\n        text: message,\n        timestamp: timestamp,\n        color: color ? color : undefined\n      });\n\n    } else {\n\n      const hash = uuid();\n      logEntries.push({\n        id: this.logs.length + 1,\n        hash: hash,\n        currentTime: new Date().getTime(),\n        header: message,\n        messages: [{\n          text: message,\n          timestamp: this.zeroFill(0, 3)\n        }],\n        style: 'color:' + color,\n      });\n      this.lastLog = currentTime;\n      this.latestHash = hash;\n\n    }\n\n    for (const entry of logEntries) {\n      this.logs.push(entry);\n    }\n\n    if (!registerTime) {\n      console.log('%c [RopeApp] -- LOG ENTRY ----------------------', 'color: lightblue; background: black; padding: 10px 0px;');\n      timestamp = '000';\n    }\n\n    console.log('%c [RopeApp] ' + (timestamp === 'NaN' ? '000' : timestamp) + 'ms -- ' + message, 'color: ' + color);\n\n  }\n\n  public warning(message: string, registerTime?: boolean) {\n\n    if (!this.enableLog) {\n      return;\n    }\n    this.info(message, registerTime, 'orange');\n\n  }\n  \n  public obj(obj: any) {\n\n    if (!this.enableLog) {\n      return;\n    }\n    console.log(obj);\n    \n  }\n  \n  private zeroFill(number, width ) {\n    width -= number.toString().length;\n    if ( width > 0 ) {\n        return new Array( width + (/\\./.test( number ) ? 2 : 1) ).join( '0' ) + number;\n    }\n    return number + '';\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class MockService {\n  constructor() {}\n\n  public httpEmptyResponse(obj?): BehaviorSubject<any> {\n    return new BehaviorSubject(obj ? obj : []);\n  }\n\n  public getStore(storeUuid) {\n    return {\n      store_uuid: storeUuid,\n      store_name: \"Debug Store\",\n      store_identifier: \"debug_store\",\n      store_logo: \"/assets/images/noimage.png\",\n    };\n  }\n\n  public getOnlineBranch() {\n    return {\n      id: 1,\n      name: \"Debug Branch Online\",\n      branch_opening_hours: []\n    };\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Storage } from '@ionic/storage-angular';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class StorageService {\n\n  public _storage: Storage | null = null;;\n  public storeUuid;\n\n  constructor(\n  ) { }\n\n  public async ready(storage: Storage) {\n    await storage.create();\n    return Promise.resolve(true);\n  }\n\n  public init(storage, storeUuid) {\n    this._storage = storage;\n    this.storeUuid = storeUuid;\n    return Promise.resolve(true);\n  }\n\n  public get(key: string) {\n\n    const defKey = this.storeUuid + '-' + key;\n    return this._storage.get(defKey).then((val) => {\n      return val;\n    });\n\n  }\n\n  public set(key: string, value) {\n    const defKey = this.storeUuid + '-' + key;\n    return this._storage.set(defKey, value).then((v) => {\n      return v;\n    });\n  }\n\n  public remove(key: string) {\n    const defKey = this.storeUuid + '-' + key\n    return this._storage.remove(defKey).then((v) => {\n      //void\n    });\n  }\n\n}\n","import { Injectable, isDevMode } from '@angular/core';\nimport { Platform, AlertController } from '@ionic/angular';\nimport { BehaviorSubject, lastValueFrom, ReplaySubject, Subject } from 'rxjs';\nimport { HttpHeaders, HttpParams, HttpClient } from '@angular/common/http';\nimport { StorageService } from './storage.service';\nimport { MockService } from './mock.service';\nimport { LogService } from './log.service';\nimport { Capacitor } from '@capacitor/core';\nimport { Browser } from '@capacitor/browser';\n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class CoreService {\n\n  public isReady: Promise<any>;\n  public initObjectLoaded: ReplaySubject<boolean> = new ReplaySubject<boolean>(1);\n  public offlineMode = false;\n\n  public filters: Array<any>;\n  public reloading: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n  public filtersChanged: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n  public onlineShoppingOpen: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\n  public cookiesAccepted: BehaviorSubject<boolean> = new BehaviorSubject<boolean>(false);\n\n  public version;\n  public storeUuid;\n  public store;\n  public pages;\n\n  public onlineBranch;\n  public mainTitle;\n  public promoBanner;\n  public promoBannerDismissed = false;\n\n  public wizardEvent: Subject<any> = new Subject();\n  public newSubscriptionDetails: Subject<boolean> = new Subject();\n\n  public loyaltyColor;\n  public websiteMeta;\n\n  public initObject;\n  public viewReady;\n  public submenuValues = new Map();\n\n  public usps = [];\n\n  // 2 days expiration on recently viewed outfits\n  public RECENTLY_VIEWED_OUTFIT_EXPIRATION = 1000 * 60 * 60 * 48;\n\n  constructor(\n    public plt: Platform,\n    public logService: LogService,\n    public alertCtrl: AlertController,\n    public mockService: MockService,\n    public http: HttpClient,\n    public storageService: StorageService\n  ) {\n\n  }\n\n  public refreshApp() {\n    setTimeout(() => location.reload(), 500);\n  }\n\n  public setVersion(version) {\n    this.version = version;\n    this.storageService.set('dev_version', version);\n  }\n\n  public isOfflineMode() {\n    return this.offlineMode;\n  }\n\n  public setOnlineBranch(branch) {\n    this.onlineBranch = branch;\n  }\n\n  public getOnlineBranch() {\n    return this.onlineBranch;\n  }\n\n  public setMainTitle(mainTitle) {\n    this.mainTitle = mainTitle;\n  }\n\n  public getMainTitle() {\n    return this.mainTitle;\n  }\n\n  public setPromoBanner(promoBanner) {\n    this.promoBanner = promoBanner;\n  }\n\n  public getPromoBanner() {\n    return this.promoBanner;\n  }\n\n  public setUsps(usps) {\n    this.usps = usps;\n  }\n\n  public getUsps() {\n    return this.usps;\n  }\n\n  public setLoyaltyColor(loyaltyColor) {\n    this.loyaltyColor = loyaltyColor;\n  }\n\n  public setPages(pages) {\n    this.pages = pages;\n  }\n\n  public getPages() {\n    return this.pages;\n  }\n\n  public getAllChildrenPages() {\n    const allChildrenPages = [];\n    for (let p of this.pages) {\n      for (let child of p.children) {\n        if (child.children && child.children.length > 0) {\n          for (let cc of child.children) {\n            allChildrenPages.push(cc);\n          }\n        } else {\n          allChildrenPages.push(child);\n        }\n      }\n    }\n\n    return allChildrenPages;\n  }\n\n  public getAllPagesMap() {\n    const children = this.pages.flatMap(p => p.children);\n    const babies = children.filter(c => c.children && c.children.length > 0).flatMap(p => p.children);\n    const all = this.pages.concat(children).concat(babies);\n    return all;\n  }\n\n  public replacePage(page) {\n\n    if (this.pages.some(p => p.id === page.id)) {\n      this.pages = this.pages.map(p => p.id !== page.id ? p : page);\n      return;\n    }\n\n    for (let pp of this.pages) {\n      \n      if (pp.children) {\n\n        if (pp.children.some(p => p.id === page.id)) {\n          pp.children = pp.children.map(p => p.id !== page.id ? p : page);\n          return;\n        }\n\n        for (let child of pp.children) {\n          if (child.children && child.children.some(p => p.id === page.id)) {\n            child.children = child.children.map(p => p.id !== page.id ? p : page);\n          }\n        }\n\n      }\n\n    }\n\n  }\n\n  public getInitObject(storeUuid) {\n\n    this.storeUuid = storeUuid;\n    const params: HttpParams = new HttpParams().set(\"store_uuid\", storeUuid);\n\n    const requestOptions = {\n      params: params,\n      headers: this.getHeaders(),\n    };\n\n    const url = this.getBaseUrl() + \"website/initialize\";\n    return this.http.get<any>(\n      url,\n      requestOptions\n    );\n\n  }\n\n  public setupStore(storeUuid) {\n    this.storeUuid = storeUuid;\n    const params: HttpParams = new HttpParams().set(\"store_uuid\", storeUuid);\n    const requestOptions = {\n      params: params,\n      headers: this.getHeaders(),\n    };\n    return this.http.get<any>(\n      this.getBaseUrl() + \"store/get_info\",\n      requestOptions\n    );\n  }\n\n  public getStoreMeta() {\n    const params: HttpParams = new HttpParams();\n    const requestOptions = {\n      params: params,\n      headers: this.getHeaders(),\n    };\n    return this.http.get<any>(\n      this.getBaseUrl() + \"store/get_meta\",\n      requestOptions\n    );\n  }\n\n  public getHeaders(): HttpHeaders {\n    const headers: HttpHeaders = new HttpHeaders().set(\n      \"X-RopeRetail-StoreUuid\",\n      this.storeUuid\n    );\n    return headers;\n  }\n\n  public async ready(storeUuid: string, offlineMode) {\n    \n    this.offlineMode = offlineMode;\n\n    const initObjectString = await lastValueFrom(this.http.get('assets/data/init_object.json', { responseType: 'text' }));\n    const initObject = JSON.parse(initObjectString);\n    this.initObject = initObject;\n\n    let store;\n    if (!offlineMode) {\n      store = initObject.store_info;\n    } else {\n      this.storeUuid = storeUuid;\n      store = this.mockService.getStore(storeUuid);\n    }\n\n    this.store = store;\n    this.websiteMeta = initObject.website_metas;\n\n    this.getInitObject(storeUuid).subscribe(initObject => {\n\n      this.pages = initObject.website_pages;\n\n      // Get submenu values\n      const optionSets = initObject.option_set_types;\n      if (optionSets) {\n        const submenuChildren = [];\n        for (let optionSet of optionSets) {\n          submenuChildren.push({\n            optionSet: optionSet,\n            title: optionSet.name\n          });\n        }\n        this.submenuValues.set('product_types', submenuChildren);\n      }\n\n      for (let page of this.pages) {\n\n        if (page.category && page.category === 'account') {\n          page.showLogOut = true;\n        }\n\n        this.convertPageModel(page);\n        if (page.children && page.children.length > 0) {\n\n          page.children.forEach(child => {\n\n            this.convertPageModel(child);\n            if (child.children && child.children.length > 0) {\n              child.children.forEach(baby => {\n                this.convertPageModel(baby);\n              });\n            } else {\n              child.children = undefined;\n            }\n\n          });\n\n        } else {\n          page.children = undefined;\n        }\n\n      }\n\n      if (initObject.promotional_banners.length > 0) {\n        this.setPromoBanner(initObject.promotional_banners[0])\n      }\n\n      this.initObject = initObject;\n      this.initObjectLoaded.next(true);\n\n    });\n\n    return Promise.resolve();\n    \n  }\n\n  public convertPageModel(page) {\n\n    page.useInDesktopHeader = page.is_in_desktop_header;\n    page.desktopHeaderSortIndex = page.desktop_header_sort_index;\n    page.auth = page.auth_type;\n\n    if (page.submenu_key) {\n      const childs = this.submenuValues.get(page.submenu_key);\n      page.submenu = {\n        children: childs\n      };\n    }\n\n  }\n\n  public reload() {\n    this.reloading.next(true);\n  }\n\n  public getBaseUrl(): string {\n\n    if (isDevMode() && this.version) {\n      return 'https://'+this.version+'-dot-kiba-fashion-api.appspot.com/webapp/';\n    }\n\n    return \"https://api.roperetail.com/webapp/\";\n  }\n\n  public addFilter(filterId: number) {\n    if (this.filters.indexOf(filterId) !== -1) {\n      return;\n    }\n\n    this.filters.push(filterId);\n    this.storageService.set(\"filters\", this.filters);\n  }\n\n  public addFilters(filterIds: any[]) {\n    for (const num of filterIds) {\n      this.addFilter(num);\n    }\n  }\n\n  public removeFilter(filterId: any) {\n    const index = this.filters.indexOf(filterId);\n    this.filters.splice(index, 1);\n    this.storageService.set(\"filters\", this.filters);\n  }\n\n  public removeFilters(filterIds: any[]) {\n    for (const num of filterIds) {\n      this.removeFilter(num);\n    }\n  }\n\n  public resetFilters() {\n    this.filters = [];\n    this.storageService.set(\"filters\", this.filters);\n  }\n\n  public getFilters(): Array<any> {\n    if (!this.filters) {\n      this.filters = [];\n    }\n    return this.filters;\n  }\n\n  public triggerFiltersChanged() {\n    this.filtersChanged.next(true);\n  }\n\n  public getNewsletter(identifier?) {\n    const requestOptions = {\n      headers: this.getHeaders(),\n    };\n    return this.http.get<any[]>(\n      this.getBaseUrl() + 'newsletter/get' + (identifier ? '?identifier=' + identifier : ''),\n      requestOptions\n    );\n  }\n\n  public subcribeToNewsletter(identifier, email) {\n    const body = \"identifier=\" + identifier + \"|username=\" + email;\n    const requestOptions = {\n      headers: this.getHeaders(),\n    };\n    return this.http.post<any>(\n      this.getBaseUrl() + \"newsletter/subscribe\",\n      body,\n      requestOptions\n    );\n  }\n\n  public getWebsiteMeta() {\n    const requestOptions = {\n      headers: this.getHeaders(),\n    };\n\n    return this.http.get<any[]>(\n      this.getBaseUrl() + \"website/meta\",\n      requestOptions\n    );\n  }\n\n  public getWebsitePages() {\n    const requestOptions = {\n      headers: this.getHeaders(),\n    };\n\n    return this.http.get<any[]>(\n      this.getBaseUrl() + \"website/page\",\n      requestOptions\n    );\n  }\n\n  public getPromotionalBanners() {\n    const requestOptions = {\n      headers: this.getHeaders(),\n    };\n\n    if (this.offlineMode) {\n      return this.mockService.httpEmptyResponse();\n    }\n\n    return this.http.get<any[]>(\n      this.getBaseUrl() + \"promotional_banner/get\",\n      requestOptions\n    );\n  }\n\n  public async openUrl(url: string, target?) {\n\n    if (Capacitor.isNativePlatform()) {\n      await Browser.open({ url: url, toolbarColor: '#222222' });\n    } else {\n      if (target) {\n        window.open(url, target);\n      } else {\n        window.open(url, \"_self\");\n      }\n    }\n  }\n\n  public async showMessage(header, msg) {\n    const alert = await this.alertCtrl.create({\n      header: header,\n      message: msg,\n      buttons: [\"Oke.\"],\n    });\n    await alert.present();\n  }\n\n  public async showSuccess(header, subHeader, msg) {\n    \n    const alert = await this.alertCtrl.create({\n      header: header,\n      subHeader: subHeader,\n      message: msg,\n      cssClass: \"success-alert\",\n      buttons: [\"Sluit\"],\n    });\n    await alert.present();\n    return alert;\n  }\n\n  public async showAlert(error) {\n    console.error(error);\n    const err = error.error;\n    const alert = await this.alertCtrl.create({\n      header: \"Oeps!\",\n      subHeader: \"Er gaat iets fout...\",\n      message: err\n        ? err.localized_message\n          ? err.localized_message\n          : \"Er ging helaas iets fout.. Probeer het later opnieuw. (err: \" +\n            error.message +\n            \")\"\n        : error,\n      cssClass: \"error-alert\",\n      buttons: [\"Oke.\"],\n    });\n    await alert.present();\n    return alert;\n  }\n\n  public shuffleArray(array) {\n    for (let i = array.length - 1; i > 0; i--) {\n      const j = Math.floor(Math.random() * (i + 1));\n      [array[i], array[j]] = [array[j], array[i]];\n    }\n    return array;\n  }\n\n  public hexToRgb(hex) {\n    var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n    return result\n      ? {\n          r: parseInt(result[1], 16),\n          g: parseInt(result[2], 16),\n          b: parseInt(result[3], 16),\n        }\n      : null;\n  }\n\n  public shadeColor(color: string, decimal: number): string {\n    const base = color.startsWith('#') ? 1 : 0;\n\n    let r = parseInt(color.substring(base, 3), 16);\n    let g = parseInt(color.substring(base + 2, 5), 16);\n    let b = parseInt(color.substring(base + 4, 7), 16);\n\n    r = Math.round(r / decimal);\n    g = Math.round(g / decimal);\n    b = Math.round(b / decimal);\n\n    r = (r < 255)? r : 255;\n    g = (g < 255)? g : 255;\n    b = (b < 255)? b : 255;\n\n    const rr = ((r.toString(16).length === 1)? `0${r.toString(16)}` : r.toString(16));\n    const gg = ((g.toString(16).length === 1)? `0${g.toString(16)}` : g.toString(16));\n    const bb = ((b.toString(16).length === 1)? `0${b.toString(16)}` : b.toString(16));\n\n    return `#${rr}${gg}${bb}`;\n  }\n\n  public getTextColor(color, highContrast?) {\n    let rgbArr = this.hexToRgb(color);\n    let L: number = 0.299 * rgbArr.r + 0.587 * rgbArr.g + 0.114 * rgbArr.b;\n    let textColor = L > 149 ? (highContrast ? 'black' : 'dark') : highContrast ? 'white' : 'light';\n    return textColor;\n  }\n\n  public async getRecentlyViewedOutfits() {\n\n    const list = await this.storageService.get('recently_viewed_outfits');\n    const llist = [];\n    \n    let deleted = 0;\n    if (list) {\n      for (let o of list) {\n        if (new Date().getTime() - o['timestamp_stored'] > this.RECENTLY_VIEWED_OUTFIT_EXPIRATION) {\n          deleted++;\n        } else {\n          llist.push(o);\n        }\n      }\n    }\n\n    if (deleted > 0 || !list) {\n      await this.storageService.set('recently_viewed_outfits', llist);\n    }\n\n    return llist;\n\n  }\n\n  public async addRecentlyViewedOutfit(outfit) {\n\n    const existingList = await this.getRecentlyViewedOutfits();\n    if (!existingList.some(e => e.id === outfit.id)) {\n\n      outfit.custom_fields = {\n        min_product_price: String(outfit.price),\n        number_of_products: String(outfit.products.length)\n      };\n      outfit.timestamp_stored = new Date().getTime();\n      existingList.push(outfit);\n\n    } else {\n\n      const o = existingList.find(e => e.id === outfit.id);\n      o.timestamp_stored = new Date().getTime();\n      await this.storageService.set('recently_viewed_outfits', existingList);\n\n    }\n\n    await this.storageService.set('recently_viewed_outfits', existingList);\n\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { CoreService } from './core.service';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { lastValueFrom, Observable } from 'rxjs';\nimport { Outfit } from '../models/outfit';\nimport { Product } from '../models/product';\nimport { Stats } from '../models/stats';\nimport { StorageService } from './storage.service';\nimport algoliasearch from 'algoliasearch/lite';\n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class OutfitService {\n  \n  public useMediasets;\n  public outfitMediasetCategories;\n  public outfitMediasetMetas;\n\n  public outfitMode;\n  public outfitMediasetCategoryId;\n\n  public shopThemeInMenu;\n\n  public searchClient;\n\n  constructor(\n    private coreService: CoreService,\n    private http: HttpClient,\n    private storageService: StorageService\n  ) {}\n\n  public setupSearchClient() {\n\n    const algoliaClient = algoliasearch(\n      '17MGBIUYJZ', \n      '93521791d2d21b04c478631c79cdbeae'\n    );\n\n    return Promise.resolve(algoliaClient);\n\n  }\n\n  public async getSearchClient() {\n\n    if (!this.searchClient) {\n      this.searchClient = await this.setupSearchClient();\n    }\n    return Promise.resolve(this.searchClient);\n\n  }\n\n  public async ready() {\n\n    const shopThemes = this.coreService.initObject.shop_themes;\n    if (shopThemes && shopThemes.length > 0) {\n      this.shopThemeInMenu = shopThemes[0];\n    }\n\n    const mode = await this.storageService.get(\"outfit-mode\");\n    if (mode) {\n      this.outfitMode = mode;\n    } else {\n      this.outfitMode = \"simple\";\n    }\n\n    this.outfitMediasetMetas = this.coreService.initObject.outfit_mediaset_metas;\n    this.useMediasets = this.outfitMediasetMetas && this.outfitMediasetMetas.some(\n      (m) => m.key_ === \"use_mediasets\"\n    )\n      ? this.outfitMediasetMetas.find((m) => m.key_ === \"use_mediasets\")\n          .value_ === \"1\"\n      : false;\n\n    this.outfitMediasetCategories = this.coreService.initObject.outfit_mediaset_categories;\n\n    const outfitMediasetCategoryId = await this.storageService.get(\n      \"outfit_mediaset_category_id\"\n    );\n    if (outfitMediasetCategoryId) {\n      this.outfitMediasetCategoryId = outfitMediasetCategoryId;\n    } else {\n      if (this.getOutfitMediasetCategories && this.outfitMediasetCategories.length > 0) {\n        this.outfitMediasetCategoryId = this.outfitMediasetCategories.find(\n          (c) => c.is_default\n        ).id;\n      }\n    }\n\n    //Check shop theme in menu\n    if (this.shopThemeInMenu) {\n\n      let page = this.coreService.getAllPagesMap().find((p) => p.template === \"SHOP_THEME\");\n      if (page) {\n        page = {\n          id: page.id,\n          title: 'Thema: '+this.shopThemeInMenu.menu_item_text,\n          url: \"webshop-theme/\" + this.shopThemeInMenu.title.toLowerCase().replace(\" \", \"-\"),\n          icon: \"storefront-outline\",\n          auth: 0,\n          color: this.shopThemeInMenu.menu_item_color\n        }\n        this.coreService.replacePage(page);\n      }\n\n    }\n\n    return Promise.resolve(true);\n\n  }\n\n  public setOutfitMode(mode: string) {\n    this.outfitMode = mode;\n    this.storageService.set(\"outfit-mode\", mode);\n  }\n\n  public setOutfitMediasetCategory(id: string) {\n    this.outfitMediasetCategoryId = id;\n    this.storageService.set(\"outfit_mediaset_category_id\", id);\n  }\n\n  public getOutfitMediasetMeta(key, def) {\n    return this.outfitMediasetMetas.some((m) => m.key_ === key)\n      ? this.outfitMediasetMetas.find((m) => m.key_ === key).value_\n      : def;\n  }\n\n  public getOutfitMode() {\n    return this.outfitMode;\n  }\n\n  public getOne(id: number): Observable<Outfit> {\n    let params: HttpParams = new HttpParams()\n      .set(\"is_active\", \"1\")\n      .set(\"outfit_id\", id.toString())\n      .set(\"get_images\", \"1\");\n\n    if (this.useMediasets) {\n      params = params.append(\n        \"get_outfit_mediaset\",\n        this.useMediasets ? \"1\" : \"0\"\n      );\n      params = params.append(\n        \"outfit_mediaset_category_id\",\n        this.outfitMediasetCategoryId\n      );\n    }\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<Outfit>(\n      this.coreService.getBaseUrl() + \"outfit/get\",\n      requestOptions\n    );\n  }\n\n  public search(query, type): Observable<Outfit[]> {\n    const params: HttpParams = new HttpParams()\n      .set(\"q\", query)\n      .set(\"type\", type);\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<Outfit[]>(\n      this.coreService.getBaseUrl() + \"outfit/search\",\n      requestOptions\n    );\n  }\n\n  public getFeatured(): Observable<Outfit[]> {\n    const params: HttpParams = new HttpParams()\n      .set(\"is_active\", \"1\")\n      .set(\"is_featured\", \"1\")\n      .set(\"get_images\", \"1\");\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<Outfit[]>(\n      this.coreService.getBaseUrl() + \"outfit/get\",\n      requestOptions\n    );\n  }\n\n  public getOutfitMediasetMetas(): Observable<any[]> {\n    const params: HttpParams = new HttpParams();\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n    return this.http.get<any[]>(\n      this.coreService.getBaseUrl() + \"outfit/mediaset/meta\",\n      requestOptions\n    );\n  }\n\n  public getOutfitMediasetCategories(): Observable<any[]> {\n    const params: HttpParams = new HttpParams();\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n    return this.http.get<any[]>(\n      this.coreService.getBaseUrl() + \"outfit/mediaset/category\",\n      requestOptions\n    );\n  }\n\n  public getOutfitAssociates(productId): Observable<Outfit[]> {\n    const params: HttpParams = new HttpParams()\n      .set(\"product_id\", productId);\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n    return this.http.get<Outfit[]>(\n      this.coreService.getBaseUrl() + \"outfit/associates\",\n      requestOptions\n    );\n  }\n\n  public getOutfitVideos(): Observable<Outfit[]> {\n    const params: HttpParams = new HttpParams();\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n    return this.http.get<Outfit[]>(\n      this.coreService.getBaseUrl() + \"outfit/video\",\n      requestOptions\n    );\n  }\n\n  public getSubtitleForMedia(mediaId): Observable<any> {\n    let params: HttpParams = new HttpParams();\n    params = params.set('media_id', mediaId);\n    const requestOptions: any = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n      responseType: 'text'\n    };\n    return this.http.get<any>(\n      this.coreService.getBaseUrl() + \"media/subtitle\",\n      requestOptions\n    );\n  }\n\n  public getVideoForOutfit(outfitId): Observable<any[]> {\n    let params: HttpParams = new HttpParams();\n    params = params.set('outfit_id', outfitId);\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n    return this.http.get<any[]>(\n      this.coreService.getBaseUrl() + \"outfit/video/get\",\n      requestOptions\n    );\n  }\n\n  public getOutfitSuggestions(outfitId, category): Observable<Outfit[]> {\n    const params: HttpParams = new HttpParams()\n      .set(\"outfit_id\", outfitId)\n      .set(\"outfit_type\", category);\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n    return this.http.get<Outfit[]>(\n      this.coreService.getBaseUrl() + \"outfit/suggestions\",\n      requestOptions\n    );\n  }\n\n  public getLatest(offset?, limit?, type: string = 'musthaves'): Observable<Outfit[]> {\n    let params: HttpParams = new HttpParams()\n      .set(\"type\", type)\n      .set(\"offset\", !offset ? \"0\" : offset);\n\n    if (limit) {\n      params = params.set(\"limit\", limit);\n    }\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<Outfit[]>(\n      this.coreService.getBaseUrl().replace(\"webapp\", \"narrowcasting\") +\n        \"get_latest_outfits\",\n      requestOptions\n    );\n  }\n\n  public getBestsellers(outfitType?, limit?, filters?, weeks?): Observable<Outfit[]> {\n    \n    let params = new HttpParams();\n    if (outfitType) {\n      params = params.set(\"outfit_type\", outfitType);\n    }\n\n    if (limit) {\n      params = params.set(\"limit\", limit);\n    }\n\n    if (weeks) {\n      params = params.set(\"weeks\", weeks);\n    }\n\n    if (filters && filters.length > 0) {\n      for (const filter of filters) {\n        params = params.append(\"get_filters\", filter.toString());\n      }\n    }\n\n    const requestOptions = {\n      headers: this.coreService.getHeaders(),\n      params: params,\n    };\n\n    return this.http.get<Outfit[]>(\n      this.coreService.getBaseUrl() + \"outfit/bestsellers\",\n      requestOptions\n    );\n  }\n\n  public getShopWindowOutfits(branchId?, filters?): Observable<Outfit[]> {\n    let params = new HttpParams();\n    params = params.set(\"branch_id\", branchId);\n\n    if (filters && filters.length > 0) {\n      for (const filter of filters) {\n        params = params.append(\"get_filters\", filter.toString());\n      }\n    }\n\n    const requestOptions = {\n      headers: this.coreService.getHeaders(),\n      params: params,\n    };\n\n    return this.http.get<Outfit[]>(\n      this.coreService.getBaseUrl() + \"outfit/shop_window\",\n      requestOptions\n    );\n  }\n\n  public getCategoryCount(\n    cat: string,\n    filters?: Array<any>,\n    onlyPreorders?: boolean,\n    onlyNoos?: boolean,\n    categoryId?\n  ): Observable<Stats> {\n    let params: HttpParams = new HttpParams()\n      .set(\"is_active\", \"1\")\n      .set(\"outfit_type\", cat);\n\n    if (onlyPreorders) {\n      params = params.set(\"get_only_preorders\", \"1\");\n    }\n\n    if (onlyNoos) {\n      params = params.set(\"get_only_noos\", \"1\");\n    }\n\n    if (categoryId) {\n      params = params.set(\"get_category_id\", categoryId);\n    }\n\n    if (filters && filters.length > 0) {\n      for (const filter of filters) {\n        params = params.append(\"get_filters\", filter.toString());\n      }\n    }\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<Stats>(\n      this.coreService.getBaseUrl() + \"outfit/count\",\n      requestOptions\n    );\n  }\n\n  public getAllFromCategory(cat: string): Observable<Outfit[]> {\n    return this.getAllFromCategoryPagination(cat, null, null);\n  }\n\n  public getViewCount() {\n    const params: HttpParams = new HttpParams();\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n    return this.http.get<Stats>(\n      this.coreService.getBaseUrl() + \"metrics/real_time_visitors\",\n      requestOptions\n    );\n  }\n\n  public getAllFromCategoryPagination(\n    cat: string,\n    start: number,\n    end: number,\n    filters?: Array<any>,\n    sort?,\n    onlyPreorders?,\n    onlyNoos?,\n    categoryId?\n  ): Observable<Outfit[]> {\n    let params: HttpParams = new HttpParams()\n      .set(\"is_active\", \"1\")\n      .set(\"outfit_type\", cat)\n      .set(\"get_images\", \"0\");\n\n    if (start !== null) {\n      params = params.set(\"get_start\", start.toString());\n    }\n    if (end !== null) {\n      params = params.set(\"get_end\", end.toString());\n    }\n\n    if (onlyPreorders) {\n      params = params.set(\"get_only_preorders\", \"1\");\n    }\n\n    if (onlyNoos) {\n      params = params.set(\"get_only_noos\", \"1\");\n    }\n\n    if (categoryId) {\n      params = params.set(\"get_category_id\", categoryId);\n    }\n\n    if (filters && filters.length > 0) {\n      for (const filter of filters) {\n        params = params.append(\"get_filters\", filter.toString());\n      }\n    }\n\n    if (sort && sort.value && sort.value !== \"0\") {\n      params = params.append(\"get_sort\", sort.value);\n    }\n\n    if (this.useMediasets) {\n      params = params.append(\n        \"get_outfit_mediaset\",\n        this.useMediasets ? \"1\" : \"0\"\n      );\n      params = params.append(\n        \"outfit_mediaset_category_id\",\n        this.outfitMediasetCategoryId\n      );\n    }\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<Outfit[]>(\n      this.coreService.getBaseUrl() + \"outfit/get\",\n      requestOptions\n    );\n  }\n\n  public getBrandCount(cat: string, brand: string): Observable<Stats> {\n    const params: HttpParams = new HttpParams()\n      .set(\"is_active\", \"1\")\n      .set(\"get_brand\", brand)\n      .set(\"outfit_type\", cat);\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n    return this.http.get<Stats>(\n      this.coreService.getBaseUrl() + \"outfit/count\",\n      requestOptions\n    );\n  }\n\n  public getAllFromBrandPagination(\n    cat: string,\n    brand: string,\n    start: number,\n    end: number\n  ): Observable<Outfit[]> {\n    let params: HttpParams = new HttpParams()\n      .set(\"is_active\", \"1\")\n      .set(\"get_brand\", brand)\n      .set(\"get_images\", \"0\")\n      .set(\"outfit_type\", cat);\n    if (start && start !== null) {\n      params = params.set(\"get_start\", start.toString());\n    }\n    if (end && end !== null) {\n      params = params.set(\"get_end\", end.toString());\n    }\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n    return this.http.get<Outfit[]>(\n      this.coreService.getBaseUrl() + \"outfit/get\",\n      requestOptions\n    );\n  }\n\n  public getProducts(\n    outfitId: number,\n    getNettStock = true\n  ): Observable<Product[]> {\n    const params: HttpParams = new HttpParams()\n      .set(\"outfit_id\", outfitId.toString())\n      .set(\"get_size\", \"1\")\n      .set(\"get_product_variant\", \"1\")\n      .set(\"get_stock\", \"1\")\n      .set(\"get_nett_stock\", getNettStock ? \"1\" : \"0\");\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<Product[]>(\n      this.coreService.getBaseUrl() + \"product/get\",\n      requestOptions\n    );\n  }\n\n  public getProductSingle(productId: any): Observable<Product> {\n    const params: HttpParams = new HttpParams().set(\n      \"product_id\",\n      productId.toString()\n    );\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<Product>(\n      this.coreService.getBaseUrl() + \"product/single\",\n      requestOptions\n    );\n  }\n\n  public getProductWithOptions(productId: any): Observable<Product> {\n    const params: HttpParams = new HttpParams().set(\n      \"product_id\",\n      productId.toString()\n    );\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<Product>(\n      this.coreService.getBaseUrl() + \"product/options\",\n      requestOptions\n    );\n  }\n\n  public getAvailableSizes(): Observable<any[]> {\n    const requestOptions = {\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<Product[]>(\n      this.coreService.getBaseUrl() + \"product/available_sizes\",\n      requestOptions\n    );\n  }\n\n  public getProduct(\n    productId: any,\n    outfitId: any,\n    getNettStock = true\n  ): Observable<Product[]> {\n    const params: HttpParams = new HttpParams()\n      .set(\"outfit_id\", outfitId.toString())\n      .set(\"product_id\", productId.toString())\n      .set(\"get_size\", \"1\")\n      .set(\"get_product_variant\", \"1\")\n      .set(\"get_stock\", \"1\")\n      .set(\"get_nett_stock\", getNettStock ? \"1\" : \"0\");\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<Product[]>(\n      this.coreService.getBaseUrl() + \"product/get\",\n      requestOptions\n    );\n  }\n\n  public getDiscover() {\n    const requestOptions = {\n      headers: this.coreService.getHeaders(),\n    };\n    return this.http.get(\n      this.coreService.getBaseUrl() + \"discover/get\",\n      requestOptions\n    );\n  }\n\n  public postLike(outfitId: number) {\n    const params: HttpParams = new HttpParams().set(\n      \"outfit_id\",\n      outfitId.toString()\n    );\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<any>(\n      this.coreService.getBaseUrl() + \"outfit/like\",\n      requestOptions\n    );\n  }\n\n  public getShopThemes() {\n    const params: HttpParams = new HttpParams();\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n    return this.http.get<any[]>(\n      this.coreService.getBaseUrl() + \"shop_theme/get\",\n      requestOptions\n    );\n  }\n\n  public getShopThemesByTitle(title) {\n    const params: HttpParams = new HttpParams();\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n    return this.http.get<any[]>(\n      this.coreService.getBaseUrl() + \"shop_theme/get?title=\"+title,\n      requestOptions\n    );\n  }\n\n  public getShopThemesForMenu() {\n    const params: HttpParams = new HttpParams();\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n    return this.http.get<any[]>(\n      this.coreService.getBaseUrl() + \"shop_theme/get?is_menu_item=1\",\n      requestOptions\n    );\n  }\n\n}\n","import { Injectable } from '@angular/core';\n\nfunction getWindow(): any {\n  return window;\n}\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WindowRefService {\n  get nativeWindow(): Window {\n    return getWindow();\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Platform } from '@ionic/angular';\nimport { Angulartics2 } from 'angulartics2';\nimport { Product } from '../models/product';\nimport { OutfitService } from './outfit.service';\nimport { Observable, forkJoin } from 'rxjs';\nimport { StorageService } from './storage.service';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { CoreService } from './core.service';\nimport { WindowRefService } from './window-ref-service.service';\nimport { LogService } from './log.service';\nimport { OrderLine } from '../models/order-line';\nimport { v5 as uuidv5 } from 'uuid';\nimport { getAnalytics, logEvent } from \"@angular/fire/analytics\";\nimport { fetchAndActivate, getRemoteConfig, getValue } from \"@angular/fire/remote-config\";\nimport { FirebaseApp } from '@angular/fire/app';\n\ndeclare var dataLayer: any;\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class AnalyticsService {\n\n  readonly CONTENT_TYPE = 'product_group';\n\n  public isReady = false;\n  public ordersTracked = [];\n\n  public window;\n\n  public algoliaUserToken;\n\n  constructor(\n    private app: FirebaseApp,\n    public platform: Platform,\n    public angulartics2: Angulartics2,\n    public storageService: StorageService,\n    public outfitService: OutfitService,\n    public router: Router,\n    public windowRef: WindowRefService,\n    public coreService: CoreService,\n    public logService: LogService\n  ) {\n    this.window = windowRef.nativeWindow;\n  }\n\n  public ready() {\n\n    this.loadGoogleTagManagerScript();\n    this.loadRemoteConfig();\n\n    return this.storageService.get('kiba-orders-tracked').then((val) => {\n\n      if (!this.isReady) {\n        if (val) {\n            this.ordersTracked = val;\n        } else {\n            this.ordersTracked = new Array();\n        }\n\n        this.router.events.subscribe((val) => {\n          if (val instanceof NavigationEnd) {\n            this.trackView(val.url);\n          }\n        });\n\n        this.isReady = true;\n      }\n\n    });\n\n  }\n\n  public loadGoogleTagManagerScript() {\n\n    const document = this.window.document;\n\n    // Load the GTM script in the HTML\n    let isFound = false;\n    const scripts = document.getElementsByTagName('script');\n    for (let i = 0; i < scripts.length; ++i) {\n\n      if (scripts[i].innerHTML.indexOf('(function(w,d,s,l,i){w[l]=w[l]||[];w[l]') !== -1) {\n      // if (scripts[i].getAttribute('src') != null && scripts[i].getAttribute('src').includes('loader')) {\n        isFound = true;\n      }\n\n    }\n\n    const containerId = this.coreService.store.gtm_container_id;\n    const serverUrl = this.coreService.store.gtm_server_url ? this.coreService.store.gtm_server_url : 'https://www.googletagmanager.com';\n\n    if (!isFound) {\n\n      const dynamicScriptHead = '(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({\\'gtm.start\\':new Date().getTime(),event:\\'gtm.js\\'});' +\n        'var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!=\\'dataLayer\\'?\\'&l=\\'+l:\\'\\';j.async=true;' +\n        'j.src=\\''+serverUrl+'/gtm.js?id=\\'+i+dl;f.parentNode.insertBefore(j,f);})(window,document,\\'script\\',\\'dataLayer\\',\\''+containerId+'\\');';\n\n      const headerNode = document.createElement('script');\n      headerNode.text = dynamicScriptHead;\n      headerNode.type = 'text/javascript';\n      const head = document.getElementsByTagName('head')[0];\n      head.insertBefore(headerNode, head.childNodes[0]);\n\n      const dynamicScriptBody = '<iframe src=\"'+serverUrl+'/ns.html?id='+containerId+'\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe>';\n\n      const bodyNode = document.createElement('noscript');\n      bodyNode.innerHTML = dynamicScriptBody;\n      const body = document.getElementsByTagName('body')[0];\n      body.insertBefore(bodyNode, body.childNodes[0]);\n\n    } else {\n      this.logService.info('The GTM script is already present.', true);\n    }\n\n  }\n\n  public loadRemoteConfig() {\n\n    const remoteConfig = getRemoteConfig(this.app);\n\n    fetchAndActivate(remoteConfig).then(() => {\n      \n    }).catch((err) => {\n      \n    });\n\n  }\n\n  public getRemoteConfigValue(key) {\n    const remoteConfig = getRemoteConfig();\n    return getValue(remoteConfig, key);\n  }\n\n  public getGoogleAnalyticsClientId() {\n\n    const googleAnalytics = this.window.ga;\n\n    if (googleAnalytics) {\n      const tracker = googleAnalytics.getAll()[0];\n      return tracker ? tracker.get('clientId') : '';\n    } else {\n      return '';\n    }\n  }\n\n  public async getAlgoliaUserToken(user) {\n\n    let token = this.algoliaUserToken;\n    if (!token) {\n      token = await this.setAlgoliaUserToken(user);\n    }\n\n    return token;\n\n  } \n\n  private async getUniqueId() {\n    const FingerprintJS = await import('@fingerprintjs/fingerprintjs');\n    const fp = await FingerprintJS.load();\n    const result = await fp.get();\n    const visitorId = result.visitorId;\n    return visitorId;\n  }\n\n  public async setAlgoliaUserToken(user) {\n\n    if (this.algoliaUserToken) {\n      return this.algoliaUserToken;\n    }\n\n    let hash;\n    const namespace = '2a774e12-3828-4e71-9149-ff83a73a74f8';\n    const storeUuid = this.coreService.storeUuid;\n    if (user && user.username) {\n\n      const email = user.username;\n      const data = 'rr-'+storeUuid+'-'+email;\n      hash = uuidv5(data, namespace);\n      hash = btoa(hash);\n\n    } else {\n\n      //Misuse the analytics id here\n      let gaId = this.getGoogleAnalyticsClientId();\n      if (gaId === '') {\n        gaId = await this.getUniqueId();\n      }\n\n      const data = 'rr-'+storeUuid+'-'+gaId;\n      hash = uuidv5(data, namespace);\n      hash = btoa(hash);\n\n    }\n\n    dataLayer.push({ algolia_userToken: hash });\n    this.algoliaUserToken = hash;\n    return hash;\n\n  }\n\n  /*\n    Save the transaction in the local storage to enable extra security for deduplication\n  */\n  public transactionTracked(orderId) {\n    return this.ordersTracked.indexOf('' + orderId) !== -1;\n  }\n\n  public async trackTransaction(orderId) {\n    this.ordersTracked.push(orderId);\n    await this.storageService.set('kiba-orders-tracked', this.ordersTracked);\n  }\n\n  public resetEcommerceDataLayer() {\n    dataLayer.push({ ecommerce: null });\n  }\n\n  public clearUserData() {\n    dataLayer.push({ user_data: null });\n  }\n\n  public setUserData(user) {\n\n    dataLayer.push({ user_data: null });\n\n    let userData = {\n      email_address: user.email\n    };\n\n    if (user.id) {\n\n      userData['first_name'] = user.first_name;\n      userData['last_name'] = user.last_name;\n\n      if (user.telephone_number) {\n\n        let ph = user.telephone_number.replace(/^0+/, '');\n        ph = user.country_code === 'NL' ? '31'+ph : ph;\n        ph = user.country_code === 'BE' ? '32'+ph : ph;\n        userData['phone_number'] = ph;\n\n      }\n\n      userData['street'] = user.street;\n      userData['postal_code'] = user.postal_code;\n      userData['city'] = user.city;\n      userData['country'] = user.country_code;\n\n    }\n\n    dataLayer.push({\n      user_data: userData\n    });\n\n  }\n\n  public ga4ItemData(products: Product[]) {\n\n    const productDatas = products.map(p => {\n      return {\n        item_id: String(p.id),\n        item_name: p.name,\n        currency: 'EUR',\n        content_type: this.CONTENT_TYPE,\n        price: p.discount_price ? p.discount_price : p.unit_price,\n        quantity: 1\n      }\n    });\n    return productDatas;\n\n  }\n\n  public ga4ItemDataSimple(productIds) {\n\n    const productDatas = productIds.map(pId => {\n      return {\n        item_id: String(pId),\n        content_type: this.CONTENT_TYPE,\n        quantity: 1\n      }\n    });\n    return productDatas;\n\n  }\n\n  /*\n    TRACKING EVENTS\n  */\n\n  public trackView(url) {\n    //Tracking of page views is automatically done by Angulartics2 GTM\n    this.firebaseTrackView(url);\n  }\n\n  public firebaseTrackView(url) {\n\n    const analytics = getAnalytics();\n    logEvent(analytics, 'screen_view', {\n      firebase_screen: url, \n      firebase_screen_class: 'default'\n    });\n\n  }\n\n  /**\n   * Track View Content\n   */\n\n  public trackViewContent(url, value, productIds, products: Product[], queryID) {\n\n    this.universalAnalyticsTrackViewContent(products);\n    this.ga4TrackViewContent(products, queryID);\n\n  }\n\n  public universalAnalyticsTrackViewContent(products: Product[]) {\n\n    const productDatas = products.map(p => {\n      return {\n        name: p.name,\n        id: String(p.id),\n        price: String(p.discount_price ? p.discount_price : p.unit_price)\n      }\n    });\n\n    this.resetEcommerceDataLayer();\n    this.angulartics2.eventTrack.next({ \n      properties: {\n        event: 'productDetail',\n        gtmCustom: {\n          ecommerce: {\n            detail: {\n              products: productDatas\n            }\n          }\n        }\n      }\n    });\n\n  }\n\n  public ga4TrackViewContent(products: Product[], queryID) {\n\n    this.resetEcommerceDataLayer();\n    this.angulartics2.eventTrack.next({ \n      properties: {\n        event: 'view_item',\n        gtmCustom: {\n          ecommerce: {\n            items: this.ga4ItemData(products)\n          },\n          algolia: {\n            queryID: queryID\n          }\n        }\n      }\n    });\n\n  }\n\n  /**\n   * Track View Cart\n   */\n\n  public trackViewCart(url, value, productIds, orderLines: OrderLine[]) {\n    this.ga4TrackViewCart(value, orderLines);\n  }\n\n  public ga4TrackViewCart(value, orderLines: OrderLine[]) {\n\n    this.resetEcommerceDataLayer();\n    this.angulartics2.eventTrack.next({ \n      properties: {\n        event: 'view_cart',\n        gtmCustom: {\n          ecommerce: {\n            currency: 'EUR',\n            value: value,\n            items: this.ga4ItemData(orderLines.map(ol => ol.product))\n          }\n        }\n      }\n    });\n\n  }\n\n  public trackAddToCartInit(url?) {\n\n     // Track 'AddToCartInit' uses content data to make sure to count conversion levels\n     // Note: AddToCartInit is not present in Facebook App Tracking\n    // this.eventTrack('Sales', 'AddToCartInit', url);\n\n  }\n\n  /**\n   * Track Add to Cart\n   */\n\n  public trackAddToCart(url, value, productId, product: Product, queryID?) {\n\n    this.universalAnalyticsTrackAddToCart(product);\n    this.ga4TrackAddToCart(product, queryID);\n\n  }\n\n  public universalAnalyticsTrackAddToCart(p: Product) {\n\n    const productDatas = [{\n      name: p.name,\n      id: String(p.id),\n      price: String(p.discount_price ? p.discount_price : p.unit_price),\n      quantity: 1\n    }];\n\n    this.resetEcommerceDataLayer();\n    this.angulartics2.eventTrack.next({ \n      properties: {\n        event: 'addToCart',\n        gtmCustom: {\n          ecommerce: {\n            currencyCode: 'EUR',\n            add: {\n              products: productDatas\n            }\n          }\n        }\n      }\n    });\n\n  }\n\n  public ga4TrackAddToCart(p: Product, queryID) {\n\n    this.resetEcommerceDataLayer();\n    this.angulartics2.eventTrack.next({ \n      properties: {\n        event: 'add_to_cart',\n        gtmCustom: {\n          ecommerce: {\n            items: this.ga4ItemData([p])\n          },\n          algolia: {\n            queryID: queryID\n          }\n        }\n      }\n    });\n\n  }\n\n  /**\n   * Track Checkout\n   */\n\n  public trackInitiateCheckout(value, productIds) {\n    this.ga4TrackInitiateCheckout(value, productIds);\n  }\n\n  public ga4TrackInitiateCheckout(value, productIds: any[]) {\n\n    this.resetEcommerceDataLayer();\n    this.angulartics2.eventTrack.next({ \n      properties: {\n        event: 'begin_checkout',\n        gtmCustom: {\n          ecommerce: {\n            items: this.ga4ItemDataSimple(productIds),\n            value: value\n          },\n        }\n      }\n    });\n\n  }\n\n  public trackGoToPayment(value) {\n\n    // Track 'Go To Payment' does not use any extra data\n    // this.eventTrack('Sales', 'GoToPayment', undefined, value);\n\n  }\n\n  public trackAddShippingInfo(value, products) {\n    this.ga4TrackAddShippingInfo(value, products);\n  }\n\n  public ga4TrackAddShippingInfo(value, products) {\n\n    this.resetEcommerceDataLayer();\n    this.angulartics2.eventTrack.next({ \n      properties: {\n        event: 'add_shipping_info',\n        gtmCustom: {\n          ecommerce: {\n            value: value,\n            currency: 'EUR',\n            items: this.ga4ItemData(products)\n          }\n        }\n      }\n    });\n\n  }\n\n  public trackAddPaymentInfo(value, products) {\n    this.ga4TrackAddPaymentInfo(value, products);\n  }\n\n  public ga4TrackAddPaymentInfo(value, products) {\n\n    this.resetEcommerceDataLayer();\n    this.angulartics2.eventTrack.next({ \n      properties: {\n        event: 'add_payment_info',\n        gtmCustom: {\n          ecommerce: {\n            value: value,\n            currency: 'EUR',\n            items: this.ga4ItemData(products)\n          }\n        }\n      }\n    });\n\n  }\n\n  /**\n   * Track Purchase\n   */\n\n  public trackPurchase(revenue, productIds, numItems, orderId) {\n\n    if (!Array.isArray(productIds)) {\n      productIds = [productIds.toString()];\n    }\n\n    const observables: Observable<Product>[] = new Array();\n    for (const pr of productIds) {\n      const obs = this.outfitService.getProductSingle(pr);\n      observables.push(obs);\n    }\n\n    forkJoin(observables).subscribe((res) => {\n\n      const products = res;\n      this.universalAnalyticsTrackPurchase(orderId, revenue, products);\n      this.ga4TrackPurchase(orderId, revenue, products);\n\n      this.trackTransaction(orderId);\n\n    });\n\n  }\n\n  private universalAnalyticsTrackPurchase(orderId, revenue, products: Product[]) {\n\n    const productDatas = products.map(p => {\n      return {\n        name: p.name,\n        id: String(p.id),\n        price: String(p.discount_price ? p.discount_price : p.unit_price),\n        quantity: 1\n      }\n    });\n\n    this.resetEcommerceDataLayer();\n    this.angulartics2.eventTrack.next({ \n      properties: {\n        event: 'purchase',\n        gtmCustom: {\n          ecommerce: {\n            purchase: {\n              actionField: {\n                id: String(orderId),\n                affiliation: 'Online Store',\n                revenue: String(revenue),\n                tax: String((revenue / 121 * 21))\n              },\n              products: productDatas\n            }\n          }\n        }\n      }\n    });\n\n  }\n\n  private ga4TrackPurchase(orderId, revenue, products: Product[]) {\n\n    this.resetEcommerceDataLayer();\n    this.angulartics2.eventTrack.next({ \n      properties: {\n        event: 'purchase',\n        gtmCustom: {\n          ecommerce: {\n            transaction_id: String(orderId),\n            affiliation: 'Online store',\n            value: revenue,\n            tax: (revenue / 121 * 21),\n            currency: 'EUR',\n            items: this.ga4ItemData(products)\n          }\n        }\n      }\n    });\n\n  }\n\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { CookieService } from 'ngx-cookie-service';\nimport { ToastController, NavController, Platform } from '@ionic/angular';\nimport { AnalyticsService } from './analytics.service';\nimport { WindowRefService } from './window-ref-service.service';\nimport { StorageService } from './storage.service';\nimport { DOCUMENT } from '@angular/common';\nimport { CoreService } from './core.service';\nimport { ActivatedRoute } from '@angular/router';\nimport { Capacitor } from '@capacitor/core';\n\nimport {\n  AppTrackingTransparency,\n  AppTrackingStatusResponse,\n} from 'capacitor-plugin-app-tracking-transparency';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CookieConsentService {\n\n  public cookiesChecked = false;\n  public window: Window;\n\n  public cookies = [\n    {\n      name: 'essential',\n      accepted : true\n    },\n    {\n      name: 'marketing',\n      accepted: false\n    },\n    {\n      name: 'statistics',\n      accepted: false\n    },\n  ];\n\n  public isNativePlatform;\n  public isIos;\n\n  constructor(\n    private cookieService: CookieService,\n    private coreService: CoreService,\n    private route: ActivatedRoute,\n    public toastController: ToastController,\n    public navCtrl: NavController,\n    public analyticsService: AnalyticsService,\n    public storageService: StorageService,\n    public platform: Platform,\n    public windowRef: WindowRefService\n  ) {\n\n    this.window = windowRef.nativeWindow;\n    this.isNativePlatform = Capacitor.isNativePlatform();\n    this.isIos = Capacitor.getPlatform() === 'ios';\n\n  }\n\n  public async ready() {\n\n    this.setCookie('cookieconsent_essential', '1');\n    \n    const overrideTracking = this.route.snapshot.queryParamMap.get('override_tracking');\n    let forceTracking = overrideTracking ? overrideTracking === '1' : false;\n\n    for (let cookie of this.cookies) {\n\n      let key = 'cookieconsent_' + cookie.name;\n      if (this.isNativePlatform) {\n        cookie.accepted = await this.storageService.get(key) && await this.storageService.get(key) === '1' ? true : false;\n      } else {\n        cookie.accepted = this.cookieService.check(key) && this.cookieService.get(key) === '1' ? true : false;\n      }\n\n      if (forceTracking) {\n        cookie.accepted = forceTracking;\n      }\n\n      if (cookie.accepted && this.window['dataLayer']) {\n        this.window['dataLayer'].push({\n          [key]: '1'\n        });\n      }\n\n    }\n\n    let cookiesCheckedCookie = this.cookieService.check('cookies_checked');\n    let cookiesCheckedStorage = await this.storageService.get('cookies_checked');\n\n    let cookiesChecked = cookiesCheckedCookie || cookiesCheckedStorage || forceTracking;\n    if (cookiesChecked) {\n      this.cookiesChecked = true;\n      if (!(await this.storageService.get('cookies_checked'))) {\n        await this.storageService.set('cookies_checked', '1');\n      }\n    }\n\n    if (!this.cookiesChecked) {\n      this.showCookieBanner();\n    } else {\n      this.coreService.cookiesAccepted.next(true);\n    }\n\n    return Promise.resolve(true);\n\n  }\n\n  public getCookie(key) {\n    return this.cookies.find(c => c.name === key);\n  }\n\n  public acceptAllCookies() {\n    for (let cookie of this.cookies) {\n      this.setCookie('cookieconsent_'+cookie.name, '1');\n    }\n    this.setCookiesChecked();\n  }\n\n  public setCookie(key, value) {\n\n    this.cookies.find(c => 'cookieconsent_'+c.name === key).accepted = (value === '1');\n\n    if (this.isNativePlatform) {\n      if (this.storageService.get(key)) {\n        this.storageService.remove(key);\n      }\n      this.storageService.set(key, value);\n    } else {\n      if (this.cookieService.check(key)) {\n        this.cookieService.delete(key);\n      }\n      this.cookieService.set(key, value, 365);\n    }\n\n    if (this.window['dataLayer']) {\n      this.window['dataLayer'].push({\n        [key]: value\n      });\n    }\n\n  }\n\n  public async setCookiesChecked() {\n\n    this.cookiesChecked = true;\n\n    if (this.isNativePlatform) {\n      await this.storageService.set('cookies_checked', '1');\n    } else {\n      this.cookieService.set('cookies_checked', '1', 365);\n    }\n\n  }\n\n  public async showCookieBanner() {\n\n    this.coreService.cookiesAccepted.next(false);\n\n    // Make sure the cookie banner is not shown on native, because there are no cookies there\n    if (this.isNativePlatform && this.isIos) {\n\n      const check = await AppTrackingTransparency.getStatus();\n      if (check.status === 'notDetermined') {\n\n        const response = await AppTrackingTransparency.requestPermission();\n        if (response.status === 'authorized') {\n          this.acceptAllCookies();\n        }\n        this.coreService.cookiesAccepted.next(true);\n\n      }\n\n    } else {\n\n      const toast = await this.toastController.create({\n        header: 'Wij gebruiken cookies',\n        message: 'Door op \\'Akkoord\\' te klikken of door gebruik te blijven maken van onze website, geef je toestemming en ga je akkoord met het gebruik van deze cookies.',\n        position: 'bottom',\n        cssClass: 'custom-toast',\n        buttons: [\n          {\n            side: 'start',\n            icon: 'information-circle',\n            cssClass: 'custom-toast-button',\n            handler: () => {\n              this.navCtrl.navigateRoot('/cookies');\n            }\n          },\n          {\n            text: 'Akkoord',\n            role: 'cancel',\n            handler: () => {\n              this.acceptAllCookies();\n            }\n          }\n        ]\n      });\n\n      toast.onDidDismiss().then(() => {\n        this.coreService.cookiesAccepted.next(true);\n      });\n\n      await toast.present();\n\n    }\n\n  }\n\n}\n","export class User {\n    id: number;\n    authHeader: string;\n    username: string;\n    password: string;\n    email: string;\n    first_name: string;\n    last_name: string;\n    street: string;\n    house_number: number;\n    house_number_extension: string;\n    postal_code: string;\n    city: string;\n    telephone_number: string;\n    country_code: string;\n\n    tops_size_avg;\n    tops_size_std;\n    jeans_size_avg;\n    jeans_size_std;\n\n    medias: any[];\n\n    has_newsletter;\n    had_newsletter_promo;\n\n    constructor() { }\n}\n","import { Injectable } from '@angular/core';\nimport { User } from '../models/user';\nimport { lastValueFrom, Observable, throwError } from 'rxjs';\nimport { map, catchError, tap } from 'rxjs/operators';\nimport { HttpClient, HttpHeaders, HttpParams, HttpResponse } from '@angular/common/http';\nimport { CoreService } from './core.service';\nimport { StorageService } from './storage.service';\nimport { AnalyticsService } from './analytics.service';\n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class AuthService {\n  public user: User;\n  public isGuestMode = false;\n\n  constructor(\n    public storageService: StorageService,\n    public http: HttpClient,\n    public coreProvider: CoreService,\n    public analyticsService: AnalyticsService\n  ) {}\n\n  async ready() {\n    const val = await this.storageService.get(\"user\");\n    if (val) {\n      this.user = val;\n      if (!this.checkAuthHeader(this.user)) {\n        await this.storageService.remove(\"user\");\n        this.user = new User();\n      } else {\n        this.updateUserDetails();\n      }\n    } else {\n      this.user = new User();\n    }\n    return Promise.resolve(true);\n  }\n\n  checkAuthHeader(user) {\n    if (user && user.authHeader) {\n      const authJson = JSON.parse(user.authHeader);\n      const header = authJson['user_info'];\n      if (header && header.startsWith(\"0_\")) {\n        return false;\n      } else if (header) {\n        return true;\n      }\n    } else {\n      return false;\n    }\n  }\n\n  isAuthenticated() {\n\n    const headerCorrect = this.checkAuthHeader(this.user);\n    if (!headerCorrect) {\n      return false;\n    }\n\n    return this.user && this.user.authHeader !== undefined;\n  }\n\n  updateUserDetails() {\n\n    if (this.isAuthenticated()) { \n      this.doUpdateUserDetails().subscribe();\n    }\n\n  }\n\n  doUpdateUserDetails() {\n    const currentUser = this.getCurrentUser();\n    return this.getUserDetails(currentUser).pipe(tap(userDetails => {\n      currentUser.has_newsletter = userDetails.has_newsletter;\n      currentUser.had_newsletter_promo = userDetails.had_newsletter_promo;\n      currentUser.id = userDetails.customer_id;\n      currentUser.street = userDetails.street;\n      currentUser.postal_code = userDetails.postal_code;\n      currentUser.house_number = userDetails.house_number;\n      currentUser.house_number_extension = userDetails.house_number_extension;\n      currentUser.telephone_number = userDetails.telephone_number;\n      currentUser.city = userDetails.city;\n      currentUser.first_name = userDetails.first_name;\n      currentUser.last_name = userDetails.last_name;\n      currentUser.tops_size_avg = userDetails.tops_size_avg;\n      currentUser.tops_size_std = userDetails.tops_size_std;\n      currentUser.jeans_size_avg = userDetails.jeans_size_avg;\n      currentUser.jeans_size_std = userDetails.jeans_size_std;\n      this.storeUser(currentUser);\n      this.analyticsService.setUserData(currentUser);\n    }, error => {\n      // Something is wrong with this user, log out\n      this.logOut(currentUser);\n    })); \n  }\n\n  getCurrentUser(): User {\n    return this.user;\n  }\n\n  storeUser(user: User): Promise<User> {\n    this.user = user;\n    return this.storageService.set(\"user\", this.user);\n  }\n\n  logIn(user: User): Observable<User> {\n    const credentials: string = \"credentials= \" + JSON.stringify(user);\n    const requestOptions = {\n      headers: this.coreProvider.getHeaders(),\n      observe: \"response\" as \"body\",\n    };\n    return this.http\n      .post(\n        this.coreProvider.getBaseUrl() + \"user/login\",\n        credentials,\n        requestOptions\n      )\n      .pipe(\n        map((res: any) => {\n          const u = res.body;\n          u[\"authHeader\"] = res.headers.get(\"x-kiba-auth\");\n          return u;\n        }),\n        catchError((e: any) => throwError(e))\n      );\n  }\n\n  logOut(user: User) {\n    this.user = new User();\n    this.analyticsService.clearUserData();\n    return this.storageService.remove(\"user\");\n  }\n\n  register(user: User): Observable<User> {\n    const customer: string =\n      \"customer=\" + encodeURIComponent(JSON.stringify(user));\n    const requestOptions = {\n      headers: this.coreProvider.getHeaders(),\n      observe: \"response\" as \"body\",\n    };\n\n    return this.http\n      .post(\n        this.coreProvider.getBaseUrl() + \"user/register\",\n        customer,\n        requestOptions\n      )\n      .pipe(\n        map((res: any) => {\n          const u = res.body;\n          u[\"authHeader\"] = res.headers.get(\"x-kiba-auth\");\n          return u;\n        }),\n        catchError((e: any) => throwError(e))\n      );\n  }\n\n  public getAddress(user: any): Observable<any> {\n    let params: HttpParams = new HttpParams()\n      .set(\"country\", user.country)\n      .set(\"postal_code\", user.postal_code)\n      .set(\"house_number\", user.house_number.toString());\n\n    if (user.house_number_extension) {\n      params = params.set(\n        \"house_number_extension\",\n        user.house_number_extension.toString()\n      );\n    }\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreProvider.getHeaders(),\n    };\n\n    return this.http.get<any>(\n      this.coreProvider.getBaseUrl() + \"shipment/get_address\",\n      requestOptions\n    );\n  }\n\n  getTotalAddressBe = (user: any): Observable<any> => {\n\n    let params: HttpParams = new HttpParams()\n      .set(\"address_query\", user.address_query)\n      .set(\"context\", user.address_context)\n      .set(\"autocomplete_session_id\", user.session_id)\n      .set(\"country\", user.country)\n      .set(\"type\", \"total_address\");\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreProvider.getHeaders(),\n    };\n\n    return this.http\n      .get<any>(\n        this.coreProvider.getBaseUrl() + \"shipment/get_address\",\n        requestOptions\n      ).pipe(\n        map((r) => {\n          return r.matches;\n        })\n      );\n\n  };\n\n  getAddressDetailsBe = (user: any): Observable<any> => {\n\n    let params: HttpParams = new HttpParams()\n      .set(\"context\", user.context)\n      .set(\"autocomplete_session_id\", user.session_id)\n      .set(\"country\", user.country)\n      .set(\"type\", \"address_details\");\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreProvider.getHeaders(),\n    };\n\n    return this.http\n      .get<any>(\n        this.coreProvider.getBaseUrl() + \"shipment/get_address\",\n        requestOptions\n      );\n\n  };\n\n  getAddressBe = (user: any): Observable<any> => {\n    let params: HttpParams = new HttpParams()\n      .set(\"postal_code\", user.postal_code)\n      .set(\"country\", user.country)\n      .set(\"type\", \"postal_area\");\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreProvider.getHeaders(),\n    };\n\n    return this.http\n      .get<any>(\n        this.coreProvider.getBaseUrl() + \"shipment/get_address\",\n        requestOptions\n      )\n      .pipe(\n        tap((r) => {\n          for (let res of r) {\n            res[\"parsedMunicipalityNisCode\"] =\n              \"NIS Code: \" + res[\"municipalityNisCode\"];\n          }\n        })\n      );\n  };\n\n  getStreetBe = (user: any): Observable<any> => {\n    let params: HttpParams = new HttpParams()\n      .set(\"nis_code\", user.nis_code)\n      .set(\"street\", user.street)\n      .set(\"country\", user.country)\n      .set(\"type\", \"street\");\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreProvider.getHeaders(),\n    };\n\n    return this.http\n      .get<any>(\n        this.coreProvider.getBaseUrl() + \"shipment/get_address\",\n        requestOptions\n      )\n      .pipe(\n        tap((r) => {\n          for (let res of r) {\n            res[\"houseNumberRange\"] =\n              res.houseNumberFrom !== null\n                ? \"Huisnummers \" +\n                  res[\"houseNumberFrom\"] +\n                  \" t/m \" +\n                  res[\"houseNumberTo\"]\n                : \"\";\n          }\n        })\n      );\n  };\n\n  getHousenumberBe = (user: any): Observable<any> => {\n    let params: HttpParams = new HttpParams()\n      .set(\"nis_code\", user.nis_code)\n      .set(\"street_id\", user.street_id)\n      .set(\"language\", user.language)\n      .set(\"postal_code\", user.postal_code)\n      .set(\"country\", user.country)\n      .set(\"house_number\", user.house_number)\n      .set(\"type\", \"house_number\");\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreProvider.getHeaders(),\n    };\n\n    return this.http\n      .get<any>(\n        this.coreProvider.getBaseUrl() + \"shipment/get_address\",\n        requestOptions\n      )\n      .pipe(\n        tap((r) => {\n          for (let res of r) {\n            // res['houseNumberRange'] = res.houseNumberFrom !== null ? 'Huisnummers ' + res['houseNumberFrom'] + ' t/m ' + res['houseNumberTo'] : '';\n          }\n        })\n      );\n  };\n\n  updateUser(user: User): Observable<any> {\n    const updatedUser = new User();\n    updatedUser.username = user.username;\n    updatedUser.first_name = user.first_name;\n    updatedUser.last_name = user.last_name;\n    updatedUser.postal_code = user.postal_code;\n    updatedUser.house_number = user.house_number;\n    updatedUser.house_number_extension = user.house_number_extension;\n    updatedUser.street = user.street;\n    updatedUser.city = user.city;\n    updatedUser.telephone_number = user.telephone_number;\n\n    const body = \"customer=\" + JSON.stringify(updatedUser);\n    const headers: HttpHeaders = this.coreProvider\n      .getHeaders()\n      .set(\"X-KiBa-Auth\", user.authHeader);\n\n    const requestOptions = {\n      headers: headers,\n    };\n\n    return this.http.put(\n      this.coreProvider.getBaseUrl() + \"user/update\",\n      body,\n      requestOptions\n    );\n  }\n\n  public updateUserPhoneNumber(user, phoneNumber) {\n    const body =\n      \"telephone_number=\" + phoneNumber;\n\n    const headers: HttpHeaders = this.coreProvider\n      .getHeaders()\n      .set(\"X-KiBa-Auth\", user.authHeader);\n    const requestOptions = {\n      headers: headers,\n    };\n    return this.http.put(\n      this.coreProvider.getBaseUrl() + \"user/update/telephone_number\",\n      body,\n      requestOptions\n    );\n  }\n\n  public updateUserForSubscription(user, questions, employeeId) {\n    const body =\n      \"questions=\" + JSON.stringify(questions) + \"|employee_id=\" + employeeId;\n\n    const headers: HttpHeaders = this.coreProvider\n      .getHeaders()\n      .set(\"X-KiBa-Auth\", user.authHeader);\n    const requestOptions = {\n      headers: headers,\n    };\n    return this.http.put(\n      this.coreProvider.getBaseUrl() + \"user/update/subscription_details\",\n      body,\n      requestOptions\n    );\n  }\n\n  public updateUserForDetails(user, details) {\n    const body = \"online_shopping_details=\" + JSON.stringify(details);\n\n    const headers: HttpHeaders = this.coreProvider\n      .getHeaders()\n      .set(\"X-KiBa-Auth\", user.authHeader);\n    const requestOptions = {\n      headers: headers,\n    };\n    return this.http.put(\n      this.coreProvider.getBaseUrl() + \"user/update/details\",\n      body,\n      requestOptions\n    );\n  }\n\n  public forgotPassword(username: string) {\n    const usernameJson: string = \"username=\" + username;\n    const headers: HttpHeaders = this.coreProvider.getHeaders();\n    const requestOptions = {\n      headers: headers,\n    };\n    return this.http.post(\n      this.coreProvider.getBaseUrl() + \"user/reset_password\",\n      usernameJson,\n      requestOptions\n    );\n  }\n\n  public resetPassword(uuid: string, password: string, password2: string) {\n    const data: string =\n      \"uuid=\" + uuid + \"&password=\" + password + \"&password2=\" + password2;\n    const headers: HttpHeaders = this.coreProvider.getHeaders();\n    const requestOptions = {\n      headers: headers,\n    };\n    return this.http.post(\n      this.coreProvider.getBaseUrl() + \"user/update_password\",\n      data,\n      requestOptions\n    );\n  }\n\n  public getUser(email, hash) {\n    const headers: HttpHeaders = this.coreProvider\n      .getHeaders();\n    const requestOptions = {\n      headers: headers,\n      params: new HttpParams()\n                .set('username', email)\n                .set('hash', hash)\n    };\n    return this.http.get<any>(\n      this.coreProvider.getBaseUrl() + \"user/get\",\n      requestOptions\n    );\n  }\n\n  public getUserDetails(usr) {\n    const headers: HttpHeaders = this.coreProvider\n      .getHeaders()\n      .set(\"X-KiBa-Auth\", usr.authHeader);\n    const requestOptions = {\n      headers: headers,\n    };\n    return this.http.get<any>(\n      this.coreProvider.getBaseUrl() + \"user/details\",\n      requestOptions\n    );\n  }\n\n  public getCustomerProfile(usr) {\n    const headers: HttpHeaders = this.coreProvider\n      .getHeaders()\n      .set(\"X-KiBa-Auth\", usr.authHeader);\n    const requestOptions = {\n      headers: headers,\n    };\n    return this.http.get<any>(\n      this.coreProvider.getBaseUrl() + \"user/customer_profile\",\n      requestOptions\n    );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Order } from '../models/order';\nimport { AuthService } from './auth.service';\nimport { CoreService } from './core.service';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { ProductVariant } from '../models/product-variant';\nimport { lastValueFrom, Observable, of } from 'rxjs';\nimport { OrderLine } from '../models/order-line';\nimport { StorageService } from './storage.service';\nimport { AnalyticsService } from './analytics.service';\nimport * as uuid from 'uuid';\nimport { CookieConsentService } from './cookie.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CartService {\n\n  public order: Order = new Order();\n  public isReady = false;\n\n  public excludedOptionsText;\n\n  constructor(\n    private coreService: CoreService,\n    private http: HttpClient,\n    private cookieService: CookieConsentService,\n    private authService: AuthService,\n    private storageService: StorageService,\n    private analyticsService: AnalyticsService\n  ) {\n\n  }\n\n  public ready() {\n\n    return this.storageService.get('order').then((val) => {\n\n      if (!this.isReady) {\n\n        if (val) {\n          this.order = val;\n        } else {\n          this.order = new Order();\n        }\n\n        if (!this.coreService.isOfflineMode()) {\n          const activePromocode = this.getPromoCodeActive();\n          if (activePromocode) {\n            if (activePromocode['timestamp_to'] < new Date().getTime()) {\n              this.order.promocode = undefined;\n              this.storeOrder();\n            }\n          }\n        }\n\n        this.isReady = true;\n\n      }\n\n    });\n\n  }\n\n  public finalizeCart(orderId): Observable<any> {\n\n    const headers: HttpHeaders = this.coreService.getHeaders();\n    const params: HttpParams = new HttpParams().set('transaction_id', orderId);\n\n    const requestOptions = {\n      headers: headers,\n      params: params\n    };\n\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'cart/finalize', requestOptions);\n\n  }\n\n  public isSyncing = false;\n  public async syncWithServer() {\n\n    if (this.isSyncing) {\n      return;\n    }\n\n    this.isSyncing = true;\n\n    const headers: HttpHeaders = this.coreService.getHeaders()\n    .set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n\n    const requestOptions = {\n      headers: headers\n    };\n\n    const data = {\n      identifier: this.order['identifier'],\n      customer_cart_lines: this.order.order_lines.map(ol => {\n        return { product_variant: { id: ol.productVariant.id }, timestamp_added: ol['timestamp_added'], count: ol.count };\n      }),\n      version: this.order.version,\n      user_agent: this.order.user_agent,\n      status: this.order['status']\n    };\n\n    const postData = 'cart=' + encodeURIComponent(JSON.stringify(data))+'|status='+this.order['status'];\n    await lastValueFrom(this.http.post<any>(this.coreService.getBaseUrl() + 'cart/sync', postData, requestOptions));\n\n    this.isSyncing = false;\n\n  }\n\n  public getCart(identifier) {\n\n    const headers: HttpHeaders = this.coreService.getHeaders();\n    const params: HttpParams = new HttpParams().set('identifier', identifier);\n\n    const requestOptions = {\n      headers: headers,\n      params: params\n    };\n\n    return this.http.get<any>(this.coreService.getBaseUrl() + 'cart/get', requestOptions);\n\n  }\n\n  getCurrentOrder(): Order {\n    return this.order;\n  }\n\n  getCartIdentifier() {\n\n    let id = 'cart';\n    id += ''+this.authService.getCurrentUser().id;\n\n    id += ''+this.order.shipment.postal_code;\n    id += ''+this.order.shipment.house_number;\n\n    id += ''+this.order.shipment.timeframe_start;\n\n    this.order.order_lines.sort((a, b) => a.productVariant.id - b.productVariant.id).forEach(ord => {\n      id += ''+ord.count;\n      id += ''+ord.productVariant.id;\n      id += ''+ord.subtotal.toString().replace('.','');\n    });\n\n    return btoa(id);\n\n  }\n\n  inShoppingBag(productVariant) {\n    const ols = this.order.order_lines.filter(ol => ol.productVariant.id === productVariant.id);\n    if (ols.length === 0) {\n      return 0;\n    } else {\n      return ols[0].count;\n    }\n  }\n\n  getOrderCount() {\n    return this.order ? this.order.order_lines.length : 0;\n  }\n\n  getTotalCount() {\n    let count = 0;\n    this.order.order_lines.forEach(ord => {\n        count = Number(count) + Number(ord.count);\n    });\n\n    return count;\n  }\n\n  getSubtotal() {\n    let total = 0;\n    this.order.order_lines.forEach(ord => {\n        total = Number(total) + Number(ord.subtotal);\n    });\n    return total;\n  }\n\n  getSubtotalWithoutCoupons() {\n    let discount = 0;\n    if (this.order && this.order['coupon']) {\n      discount = discount + this.order['coupon'].value;\n    }\n    return this.getSubtotal() - discount;\n  }\n\n  getDiscount() {\n\n    let discount = 0;\n    if (this.order && this.order['coupon']) {\n      discount = discount + this.order['coupon'].value;\n    }\n    if (this.order && this.order['promocode']) {\n      if (this.order.promocode.type === 'VALUE') {\n        discount = discount + this.order['promocode'].amount;\n      } else if (this.order.promocode.type === 'PERCENTAGE') {\n        const percDiscount = this.calculatePromocodePercentageDiscount();\n        discount = discount + percDiscount;\n      }\n    }\n    return discount;\n\n  }\n\n  calculatePromocodePercentageDiscount() {\n\n    if (!this.order.promocode) {\n      return 0.00;\n    }\n\n    let exclude = 0.0;\n\n    const alreadyExcluded = [];\n    if (this.order.promocode['excluded_options']) {\n      \n      const optionsArr = JSON.parse(this.order.promocode['excluded_options']);\n      const excludedOrderLines = this.order.order_lines.filter(ol => ol.product['options'].some(o => optionsArr.indexOf(o.id) != -1));\n      exclude += excludedOrderLines.reduce((a, b) => a + b.subtotal, 0);\n\n      if (excludedOrderLines.length > 0) {\n\n        this.excludedOptionsText = 'Niet geldig op: ';\n        let globalCount = 1;\n        for (let ol of excludedOrderLines) {\n\n          const exOptions = ol.product['options'].filter(o => optionsArr.indexOf(o.id) != -1);\n          \n          let count = 1;\n          for (let exOpt of exOptions) {\n            this.excludedOptionsText += exOpt.name + ((count < exOptions.length || globalCount < excludedOrderLines.length) ? ', ' : '');\n            count++;\n          }\n\n          alreadyExcluded.push(ol.productVariant.id);\n          globalCount++;\n\n        }\n      }\n\n    }\n\n    if (this.order.promocode['exclude_sale']) {\n\n      const excludedOrderLines = this.order.order_lines.filter(ol => {\n        const bool1 = ol.product.discount_price !== undefined;\n        const bool2 = alreadyExcluded.indexOf(ol.productVariant.id) === -1;\n        return bool1 && bool2;\n      });\n      exclude += excludedOrderLines.reduce((a, b) => a + b.subtotal, 0);\n\n      if (excludedOrderLines.length > 0) {\n        if (this.excludedOptionsText) {\n          this.excludedOptionsText += ', SALE';\n        } else {\n          this.excludedOptionsText += 'Niet geldig op: SALE';\n        }\n        for (let ol of excludedOrderLines) {\n          alreadyExcluded.push(ol.productVariant.id);\n        }\n      }\n\n    }\n\n    for (let ol of this.order.order_lines) {\n      if (alreadyExcluded.indexOf(ol.productVariant.id) !== -1) {\n        ol['promo_discount_calculated'] = 0.00;\n      } else {\n        ol['promo_discount_calculated'] = ol.subtotal * this.order.promocode.amount;\n      }\n    }\n\n    const subtotal = this.getSubtotalWithoutCoupons();\n    const num = (subtotal - exclude) * this.order.promocode.amount;\n    return Math.round(num * 100) / 100;\n\n  }\n\n  getTotalCost() {\n\n    let total = 0;\n    this.order.order_lines.forEach(ord => {\n        total = Number(total) + Number(ord.subtotal);\n    });\n\n    if (this.order.shipment) {\n      const costObj = this.order.shipment.shipping_method[\n        \"shipping_method_prices\"\n      ].filter((smp) => !smp.timestamp_end)[0];\n      const shippingCost = (this.getSubtotal()-this.getDiscount()) >= costObj.threshold_order_total ? costObj.threshold_price : costObj.price;\n      total = total + shippingCost;\n    }\n\n    return total;\n\n  }\n\n  getProductIds() {\n    const productIds = [];\n    for (const line of this.order.order_lines) {\n      productIds.push(line.product.id);\n    }\n    return productIds;\n  }\n\n  storeOrder(): void {\n\n    this.storageService.set('order', this.order);\n\n    if (this.authService.isAuthenticated()) {\n      this.syncWithServer();\n    }\n\n  }\n\n  clearOrder(status?, syncServer = true): Promise<Order> {\n\n    this.order['status'] = status ? status : 'DELETED';\n    if (syncServer) {\n      this.syncWithServer();\n    }\n\n    return this.storageService.remove('order').then(() => {\n      this.order = new Order();\n      return this.order;\n    });\n  }\n\n  checkOrderLine(productVariant: ProductVariant): Observable<boolean> {\n\n    let b = false;\n    this.order.order_lines.forEach(o => {\n        if (o.productVariant.id === productVariant.id) {\n            b = true;\n        }\n    });\n\n    if (productVariant.stocks && productVariant.stocks[0].stock_level <= 0 && productVariant['all_stocks'].reduce((a, c) => a + c.stock_level, 0) <= 0) {\n        return of(true);\n    }\n\n    return of(b);\n\n  }\n\n  checkPromotionDiscounts() {\n\n    for (const orderLine of this.order.order_lines) {\n          \n        const promotion = orderLine.product['promotion'];\n        if (promotion) {\n            \n            const promotionLines = this.order.order_lines.filter(x => x.product.promotion && x.product.promotion.id === promotion.id);\n            if (promotionLines.length > 0) {\n                \n                if (promotion.type === 'PERCENTAGE_INCREMENT') {\n                    \n                    const size = promotionLines.length;\n                    const promotionArray = JSON.parse(promotion.rules);\n                    const rule = promotionArray.length > size ? promotionArray[size - 1] : promotionArray[promotionArray.length - 1];\n                    const percentageDiscount = rule['p'];\n\n                    orderLine.promotionDiscount = percentageDiscount;\n                    this.recalculateOrderLineSubtotal(orderLine);\n                    \n                }\n                \n            }\n            \n        }\n        \n    }\n\n  }\n\n  recalculateOrderLineSubtotal(orderLine) {\n    let price = orderLine.promotionDiscount ? (1 - (orderLine.promotionDiscount/100))*orderLine.product.unit_price : (orderLine.product.discount_price ? orderLine.product.discount_price : orderLine.product.unit_price);\n    let _subtotal: number = price*orderLine.count;\n    orderLine.subtotal = _subtotal;\n  }\n\n  addOrderLine(orderLine: OrderLine): void {\n\n    if (this.order.order_lines.length === 0 && this.order['identifier'] == undefined) {\n      this.order['identifier'] = uuid.v4();\n      this.order['status'] = 'PENDING';\n    }\n\n    let existingOrderLine: OrderLine = null;\n    this.order.order_lines.forEach(ol => {\n      if (ol.productVariant.id === orderLine.productVariant.id) {\n        existingOrderLine = ol;\n      }\n    });\n\n    if (existingOrderLine !== null) {\n      existingOrderLine.count = Number(existingOrderLine.count) + Number(orderLine.count);\n      existingOrderLine.subtotal = existingOrderLine.subtotal + orderLine.subtotal;\n    } else {\n      orderLine['timestamp_added'] = new Date().getTime();\n      this.order.order_lines.push(orderLine);\n    }\n\n    this.storeOrder();\n\n  }\n\n  removeOrderLine(orderLine: OrderLine): void {\n    this.order.order_lines.splice(this.order.order_lines.indexOf(orderLine), 1);\n    this.checkPromotionDiscounts();\n    this.storeOrder();\n  }\n\n  resetCart(): void {\n    this.order = new Order();\n  }\n\n  setCoupon(coupon) {\n    this.order['coupon'] = coupon;\n    this.storeOrder();\n  }\n\n  setPromoCode(promocode) {\n    this.order['promocode'] = promocode;\n    this.storeOrder();\n  }\n\n  setWheelOfFortuneSigning(sign) {\n    this.order['wheel_of_fortune_signing'] = sign;\n    this.storeOrder();\n  }\n\n  getPromoCode() {\n    return this.order['promocode'];\n  }\n\n  getPromoCodeActive() {\n    if (this.order['promocode'] && this.order['promocode'].active_pricing === true) {\n      return this.order['promocode'];\n    } else {\n      return undefined;\n    }\n  }\n\n  setAddress(address, addressInvalid) {\n    this.order['address'] = address;\n    this.order['addressInvalid'] = addressInvalid;\n    this.storeOrder();\n  }\n\n  placeOrder(beta?: number, cartIdentifier?): Observable<any> {\n\n    const data = {\n      order_lines: [],\n      // payment:  this.order.payment,\n      shipment: this.order.shipment,\n      coupon: this.order['coupon'],\n      promocode: this.order['promocode'],\n      version: this.order.version,\n      user_agent: this.order.user_agent,\n      cart_identifier: cartIdentifier ? cartIdentifier : undefined,\n      suggested_total: this.getTotalCost()-this.getDiscount(),\n      customer_cart_identifier: this.order['identifier'],\n      newsletter_signup: this.order['newsletterSignUp'],\n      is_tracking_enabled: this.cookieService.getCookie('marketing').accepted,\n      fbp_cookie: this.order.fbp_cookie,\n      fbc_cookie: this.order.fbc_cookie,\n      ga_cookie: this.analyticsService.getGoogleAnalyticsClientId()\n    };\n\n    if (this.order['wheel_of_fortune_signing']) {\n      data['wheel_of_fortune_signing'] = this.order['wheel_of_fortune_signing'];\n    }\n    \n    let total = 0;\n    \n    for (const orderLine of this.order.order_lines) {\n      data.order_lines.push({\n        id: orderLine.productVariant.id,\n        quantity: orderLine.count.toString()\n      });\n      total = total + orderLine.subtotal;\n    }\n    total = total - this.getDiscount();\n\n    const costObj = this.order.shipment.shipping_method[\n      \"shipping_method_prices\"\n    ].filter((smp) => !smp.timestamp_end)[0];\n    const shippingCost = (this.getSubtotal() - this.getDiscount()) >= costObj.threshold_order_total ? costObj.threshold_price : costObj.price;\n    total = total + shippingCost;\n\n    const productIds: string[] = new Array<string>();\n    this.order.order_lines.forEach(ol => {\n      productIds.push(ol.product.id.toString());\n    });\n\n    const headers: HttpHeaders = this.coreService.getHeaders()\n      .set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n\n    const requestOptions = {\n      headers: headers\n    };\n\n    console.log(data);\n    const postData = 'transaction=' + encodeURIComponent(JSON.stringify(data)) + ((beta && beta === 1) ? '|beta=1' : '');\n    return this.http.post<any>(this.coreService.getBaseUrl() + 'transaction/insert', postData, requestOptions);\n  }\n\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { CartService } from '../../../services/cart.service';\n\n@Component({\n  selector: 'rope-common-header',\n  templateUrl: './common-header.component.html',\n  styleUrls: ['./common-header.component.scss']\n})\nexport class CommonHeaderComponent implements OnInit {\n\n  @Input() title: string;\n  @Input() showSearch: boolean;\n  @Input() showCart: boolean = true;\n\n  @Output() navigateToCart = new EventEmitter();\n\n  constructor(\n    public cartService: CartService,\n  ) {\n  }\n\n  ngOnInit() {\n  }\n\n  count() {\n    return this.cartService.getTotalCount();\n  }\n\n  public goToCart() {\n    this.navigateToCart.emit();\n  }\n\n}\n","<ion-toolbar color=\"primary\">\n  <ion-buttons slot=\"start\">\n    <ion-menu-button color=\"dark\" autoHide=\"true\"></ion-menu-button>\n  </ion-buttons>\n  <ion-title>{{ title }}</ion-title>\n</ion-toolbar>\n","import { trigger, state, animate, style, transition, keyframes } from '@angular/animations';\n\nexport class WizardAnimations {\n\n    // Buttons Animations\n    static btnZoom = [\n        trigger('btnState', [\n            transition(':enter', [\n                style({ opacity: 0, transform: 'scale(0)' }),\n                animate('400ms ease-in', style({ opacity: 1, transform: 'scale(1)' }))\n            ]),\n            transition(':leave', [\n                animate('400ms ease-out', style({ opacity: 0, transform: 'scale(0)' }))\n            ])\n        ])\n    ];\n    static btn_none = [\n        trigger('btnState', [\n            state('enter', style({ position: 'relative', top: 0 , width: '100%' })),\n            state('leave', style({ display: 'none', position: 'relative', top: 0 }))\n            \n        ])\n    ];\n    static btnflipY = [\n        trigger('btnState', [\n            transition(':enter', [\n                animate('400ms 200ms ease-in',\n                    keyframes([\n                        style({ transform: 'perspective(100px) rotate3d(0, 1, 0, 90deg)', opacity: '0', offset: 0 }),\n                        style({ transform: 'perspective(100px) rotate3d(0, 1, 0, -20deg)', offset: 0.4 }),\n                        style({ transform: 'perspective(100px) rotate3d(0, 1, 0, 10deg)', opacity: '1', offset: 0.6 }),\n                        style({ transform: 'perspective(100px) rotate3d(0, 1, 0, -5deg)', opacity: '1', offset: 0.8 }),\n                        style({ transform: 'perspective(100px)', opacity: '1', offset: 1 })\n                    ]))\n            ]), transition(':leave', [\n                animate('100ms 400ms ease-in',\n                    keyframes([\n                        style({ transform: 'perspective(100px)', opacity: '1', offset: 0 }),\n                        style({ transform: 'perspective(100px) rotate3d(0, 1, 0, -20deg)', opacity: '1', offset: 0.3 }),\n                        style({ transform: 'perspective(100px) rotate3d(0, 1, 0, 90deg)', opacity: '0', offset: 1 })\n                    ]))\n            ])\n        ])\n    ];\n\n    static btnRotate = [\n        trigger('btnState', [\n            transition(':enter', [\n                animate('400ms 200ms ease-in',\n                    keyframes([\n                        style({ transform: 'rotate3d(0, 0, 1, -200deg)', opacity: '0', transformOrigin: 'center', offset: 0 }),\n                        style({ transform: 'none', opacity: '1', transformOrigin: 'center', offset: 1 })\n                    ]))\n            ]), transition(':leave', [\n                animate(400,\n                    keyframes([\n                        style({ transform: 'none', opacity: '1', transformOrigin: 'center', offset: 0 }),\n                        style({ transform: 'rotate3d(0, 0, 1, 200deg)', opacity: '0', transformOrigin: 'center', offset: 1 })\n                    ]))\n            ])\n        ])\n    ];\n\n    // Steps Animations\n    static carruselRight = [\n        trigger('WizardAnimations', [\n            state('enter', style({ position: 'absolute', top: 0, width: '100%' })),\n            state('leave', style({ visibility: 'hidden', position: 'absolute', top: 0 })),\n            transition('*=>enter', [\n                style({ visibility: 'visible', opacity: 0, transform: 'translateX(-100%)' }),\n                animate('500ms ease-in-out', style({ opacity: 1, transform: 'translateX(0%)' }))\n            ]),\n            transition('*=>leave', [\n                style({ transform: 'translateX(0%)' }),\n                animate('500ms ease-in-out', style({ opacity: 0, transform: 'translateX(100%)' }))\n            ])\n        ])\n    ];\n    static zoom = [\n        trigger('WizardAnimations', [\n            state('enter', style({ position: 'absolute', top: 0 , width: '100%' })),\n            state('leave', style({ visibility: 'hidden', position: 'absolute', top: 0 })),\n            transition('*=>enter', [\n                style({visibility: 'visible', opacity: 0, transform: 'scale(0)' }),\n                animate('300ms ease-in', style({ opacity: 1, transform: 'scale(1)' , top: 0 }))\n            ]),\n            transition('*=>leave', [\n                animate('300ms ease-out', style({ opacity: 0, transform: 'scale(0)', top: 0  }))\n            ])\n        ])\n    ];\n     static none = [\n        trigger('WizardAnimations', [\n            state('enter', style({ position: 'relative', top: 0 , width: '100%' })),\n            state('leave', style({ display: 'none', position: 'relative', top: 0 }))\n            \n        ])\n    ];\n    static carruselLeft = [\n        trigger('WizardAnimations', [\n            state('enter', style({ position: 'absolute', top: 0, width: '100%' })),\n            state('leave', style({ visibility: 'hidden', position: 'absolute', top: 0 })),\n            transition('*=>enter', [\n                style({ visibility: 'visible', opacity: 0, transform: 'translateX(100%)' }),\n                animate('500ms ease-in-out', style({ opacity: 1, transform: 'translateX(0%)' }))\n            ]),\n            transition('*=>leave', [\n                style({ transform: 'translateX(0%)' }),\n                animate('500ms ease-in-out', style({ opacity: 0, transform: 'translateX(-100%)' }))\n            ])\n        ])\n    ];\n    static carruselBottom = [\n        trigger('WizardAnimations', [\n            state('enter', style({ position: 'absolute', top: 0 , width: '100%'})),\n            state('leave', style({ visibility: 'hidden', position: 'absolute', top: 0 })),\n            transition('*=>enter', [\n                style({ visibility: 'visible', opacity: 0, transform: 'translateY(-100%)' }),\n                animate('500ms ease-in-out', style({ opacity: 1, transform: 'translateY(0%)' }))\n            ]),\n            transition('*=>leave', [\n                style({ transform: 'translateY(0%)' }),\n                animate('500ms ease-in-out', style({ opacity: 0, transform: 'translateY(100%)' }))\n            ])\n        ])\n    ];\n    static carruselTop = [\n        trigger('WizardAnimations', [\n            state('enter', style({ position: 'absolute', top: 0 , width: '100%'})),\n            state('leave', style({ visibility: 'hidden', position: 'absolute', top: 0 })),\n            transition('*=>enter', [\n                style({ visibility: 'visible', opacity: 0, transform: 'translateY(100%)' }),\n                animate('500ms ease-in-out', style({ opacity: 1, transform: 'translateY(0%)' }))\n            ]),\n            transition('*=>leave', [\n                style({ transform: 'translateY(0%)' }),\n                animate('500ms ease-in-out', style({ opacity: 0, transform: 'translateY(-100%)' }))\n            ])\n        ])\n    ];\n    static flipY = [\n        trigger('WizardAnimations', [\n            state('enter', style({ position: 'absolute', top: 0 , width: '100%'})),\n            state('leave', style({ visibility: 'hidden', position: 'absolute', top: 0 })),\n            transition('*=>enter', [\n                style({ visibility: 'visible' }),\n                animate('400ms ease-in',\n                    keyframes([\n                        style({ transform: 'perspective(400px) rotate3d(0, 1, 0, 90deg)', opacity: '0', offset: 0 }),\n                        style({ transform: 'perspective(400px) rotate3d(0, 1, 0, -20deg)', offset: 0.4 }),\n                        style({ transform: 'perspective(400px) rotate3d(0, 1, 0, 10deg)', opacity: '0.5', offset: 0.6 }),\n                        style({ transform: 'perspective(400px) rotate3d(0, 1, 0, -5deg)', opacity: '1', offset: 0.8 }),\n                        style({ transform: 'perspective(400px)', opacity: '1', offset: 1 })\n                    ]))\n            ]), transition('*=>leave', [\n                style({ visibility: 'visible' }),\n                animate('400ms ease-in-out',\n                    keyframes([\n                        style({ transform: 'perspective(400px)', opacity: '1', offset: 0 }),\n                        style({ transform: 'perspective(400px) rotate3d(0, 1, 0, -20deg)', opacity: '0.5', offset: 0.3 }),\n                        style({ transform: 'perspective(400px) rotate3d(0, 1, 0, 90deg)', opacity: '0', offset: 1 })\n                    ]))\n            ])\n        ])\n    ];\n    static flipX = [\n        trigger('WizardAnimations', [\n            state('enter', style({ position: 'absolute', top: 0 ,width:'100%'})),\n            state('leave', style({ visibility: 'hidden', position: 'absolute', top: 0 })),\n            transition('*=>enter', [\n                style({ visibility: 'visible' }),\n                animate('400ms 200ms ease-in',\n                    keyframes([\n                        style({ transform: 'perspective(400px) rotate3d(1, 0, 0, 90deg)', opacity: '0', offset: 0 }),\n                        style({ transform: 'perspective(400px) rotate3d(1, 0, 0, -20deg)', offset: 0.4 }),\n                        style({ transform: 'perspective(400px) rotate3d(1, 0, 0, 10deg)', opacity: '0.5', offset: 0.6 }),\n                        style({ transform: 'perspective(400px) rotate3d(1, 0, 0, -5deg)', opacity: '1', offset: 0.8 }),\n                        style({ transform: 'perspective(400px)', opacity: '1', offset: 1 })\n                    ]))\n            ]),\n            transition('*=>leave', [\n                style({ visibility: 'visible' }),\n                animate('400ms 200ms ease-in',\n                    keyframes([\n                        style({ transform: 'perspective(400px)', opacity: '1', offset: 0 }),\n                        style({ transform: 'perspective(400px) rotate3d(1, 0, 0, -20deg)', opacity: '0.5', offset: 0.3 }),\n                        style({ transform: 'perspective(400px) rotate3d(1, 0, 0, 90deg)', opacity: '0', offset: 1 })\n                    ]))\n            ])\n        ])\n    ];\n   \n}\n","import { Component, OnInit, Input, Output, EventEmitter, SimpleChanges, OnChanges } from '@angular/core';\nimport { WizardAnimations } from './wizard-animations';\nimport { CoreService } from '../../services/core.service';\n\n@Component({\n  selector: 'app-wizard',\n  templateUrl: './wizard.component.html',\n  styleUrls: ['./wizard.component.scss'],\n  animations: WizardAnimations.btnZoom\n})\nexport class WizardComponent implements OnInit, OnChanges {\n\n  @Input() finishIcon = 'send';\n  @Input() showSteps = true;\n  @Input() step = 1;\n  @Output() finish = new EventEmitter();\n  @Output() stepChange = new EventEmitter();\n  public steps = 0;\n  public hideWizard = false;\n  @Input() stepCondition = true;\n\n  constructor(\n    public coreService: CoreService\n  ) {\n\n  }\n\n  ngOnInit() {\n\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n\n    if (changes.stepCondition) {\n      this.stepCondition = changes.stepCondition.currentValue;\n    }\n\n  }\n\n  public addStep() {\n    const newSteps = this.steps + 1;\n    this.steps = newSteps;\n    return newSteps;\n  }\n  isOnFinalStep() {\n    return this.step === this.steps;\n  }\n  getCondition() {\n    return this.stepCondition;\n  }\n  isOnFirstStep() {\n    return this.step === 1;\n  }\n  back() {\n    this.stepChange.emit(this.step - 1);\n    this.coreService.wizardEvent.next(this.step - 1);\n\n  }\n  next() {\n    this.stepChange.emit(this.step + 1);\n    this.coreService.wizardEvent.next(this.step + 1);\n  }\n\n}\n","<ng-content></ng-content>\n<div [hidden]=\"hideWizard\">\n  <div class=\"ion-wizard-footer\">\n    <!--Back Button-->\n    <ion-fab [@btnState] *ngIf=\"!isOnFirstStep()\" horizontal=\"start\" vertical=\"bottom\">\n      <ion-fab-button (click)=\"back()\" color=\"tertiary\">\n        <ion-icon name=\"arrow-back\"></ion-icon>\n      </ion-fab-button>\n    </ion-fab>\n    <!--Steps count-->   \n    <ion-badge *ngIf=\"showSteps\">{{step}} / {{steps}}</ion-badge>\n    <!--Next Button-->\n    <ion-fab [@btnState] *ngIf=\"(!isOnFinalStep() && getCondition())\" horizontal=\"end\" vertical=\"bottom\">\n      <ion-fab-button (click)=\"next()\" color=\"tertiary\">\n        <ion-icon name=\"arrow-forward\"></ion-icon>\n      </ion-fab-button>\n    </ion-fab>\n    <!--Finish Button-->\n    <ion-fab [@btnState] *ngIf=\"(isOnFinalStep() && getCondition())\" horizontal=\"end\" vertical=\"bottom\">\n      <ion-fab-button (click)=\"finish.emit(step + 1)\" color=\"tertiary\">\n        <ion-icon [name]=\"finishIcon\"></ion-icon>\n      </ion-fab-button>\n    </ion-fab>\n  </div>\n</div>\n","import { Component } from '@angular/core';\nimport { WizardAnimations } from './wizard-animations';\nimport { WizardComponent } from './wizard.component';\n\n@Component({\n    selector: 'app-wizard-step',\n    host: {\n        '[@WizardAnimations]': 'isCurrent ? \"enter\" : \"leave\"'\n    },\n    template: `<ng-content></ng-content>`,\n    animations: WizardAnimations.none\n})\nexport class WizardStepComponent {\n\n    public isCurrent;\n    public step;\n\n    constructor(public parent: WizardComponent) {\n\n        this.step = this.parent.addStep();\n        this.isCurrent = this.step === this.parent.step;\n        this.parent.stepChange.subscribe(step => {\n            this.isCurrent = this.step === step;\n            if (this.isCurrent) {\n                // this.evts.publish('step:changed', this.step);\n            }\n\n        });\n        \n    }\n\n}\n","import { Injectable } from '@angular/core';\nimport { CoreService } from './core.service';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { Review } from '../models/review';\nimport { MockService } from './mock.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ReviewService {\n\n  constructor(\n    private coreService: CoreService,\n    private mockService: MockService,\n    private http: HttpClient\n  ) {\n      \n  }\n\n  public get(start: number, limit: number): Observable<Review[]> {\n      \n    const params: HttpParams = new HttpParams()\n    .set('start', start.toString())\n    .set('limit', limit.toString());\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders()\n    };\n    \n    return this.http.get<Review[]>(this.coreService.getBaseUrl() + 'review/get', requestOptions);\n      \n  }\n\n  public getAverage(): any {\n\n    if (this.coreService.isOfflineMode()) {\n      return this.mockService.httpEmptyResponse({});\n    } else {\n\n      const requestOptions = {\n        headers: this.coreService.getHeaders()\n      };\n      return this.http.get<any>(this.coreService.getBaseUrl() + 'review/avg', requestOptions);\n\n    }\n\n  }\n\n}\n","import { Component, OnInit, ViewChild, Input } from '@angular/core';\nimport { CoreService } from '../../../services/core.service';\nimport { ReviewService } from '../../../services/review.service';\nimport { NgxStarsComponent } from 'ngx-stars';\nimport { NavController } from '@ionic/angular';\nimport { first, lastValueFrom } from 'rxjs';\n\n@Component({\n  selector: 'rope-common-footer',\n  templateUrl: './common-footer.component.html',\n  styleUrls: ['./common-footer.component.scss'],\n})\nexport class CommonFooterComponent implements OnInit {\n\n  @Input() public author: string;\n  @Input() public version: string;\n\n  @ViewChild(NgxStarsComponent) public starsComponent: NgxStarsComponent;\n  public reviewRating;\n\n  constructor(\n    public coreService: CoreService,\n    private reviewService: ReviewService,\n    public navCtrl: NavController\n  ) { }\n\n  async ngOnInit() {\n\n    await lastValueFrom(this.coreService.initObjectLoaded.asObservable().pipe(first()));\n\n    let reviewRatingObj = this.coreService.initObject.avg_review_rating;\n    this.reviewRating = reviewRatingObj.avg_rating;\n    setTimeout(() => {\n      if (this.starsComponent) {\n        this.starsComponent.setRating(this.reviewRating*2);\n      }\n    }, 1000);\n\n  }\n\n}\n","<div class=\"block footer-block\" style=\"padding-bottom: 100px;\">\n\n  <ion-card-content class=\"ion-text-center\" style=\"padding-left: 15px; padding-right: 15px;\">\n\n    <ion-grid>\n\n      <ion-row>\n\n        <ion-col size=\"12\" size-lg=\"3\">\n          <div class=\"footer-child\">\n            <div class=\"r-h2 r-text-color-white\" style=\"margin-bottom: 25px;\">Volg ons op de socials</div>\n            <div class=\"social-container child-container\">\n              <!-- <ion-icon name=\"logo-facebook\" color=\"light\"\n                (click)=\"coreService.openUrl('https://www.facebook.com/KiBa.Fashion', '_target')\"></ion-icon>\n              <ion-icon name=\"logo-instagram\" color=\"light\"\n                (click)=\"coreService.openUrl('https://www.instagram.com/kibafashion/', '_target')\"></ion-icon>\n              <ion-icon name=\"logo-tiktok\" color=\"light\"\n                (click)=\"coreService.openUrl('https://www.tiktok.com/@kibafashion', '_target')\"></ion-icon>\n              <ion-icon name=\"logo-snapchat\" color=\"light\"\n                (click)=\"coreService.openUrl('https://www.snapchat.com/add/kibafashion', '_target')\"></ion-icon> -->\n            </div>\n          </div>\n        </ion-col>\n\n        <ion-col size=\"12\" size-lg=\"3\">\n\n          <div class=\"footer-child\">\n            <div class=\"r-h2 r-text-color-white\">Onze klanten beoordelen ons met een <b>{{ reviewRating*2 | number:'1.1-1' }}</b>!</div>\n            <div class=\"child-container\">\n              <ngx-stars [readonly]=\"true\" [initialStars]=\"reviewRating\" [color]=\"'#FFCC00'\" [maxStars]=\"10\" [size]=\"1\"\n                (click)=\"navCtrl.navigateForward('/review')\"></ngx-stars>\n            </div>\n          </div>\n\n        </ion-col>\n\n        <ion-col size=\"12\" size-lg=\"3\">\n\n          <div class=\"footer-child\">\n          \n            <ion-grid>\n              <ion-row>\n                <ion-col size=\"6\">\n                  <div class=\"r-h2 r-text-color-white\">Service</div>\n                  <div class=\"child-container links-container\">\n                    <ion-button (click)=\"navCtrl.navigateRoot('/terms-and-conditions')\" fill=\"outline\" size=\"small\" color=\"light\"\n                      class=\"ion-text-wrap\">\n                      <ion-icon slot=\"start\" name=\"document\"></ion-icon>\n                      <div class=\"r-h3 r-text-color-white\">Voorwaarden</div>\n                    </ion-button>\n                    <ion-button (click)=\"navCtrl.navigateRoot('/returns-policy')\" fill=\"outline\" size=\"small\" color=\"light\"\n                      class=\"ion-text-wrap\">\n                      <ion-icon slot=\"start\" name=\"swap-horizontal\"></ion-icon>\n                      <div class=\"r-h3 r-text-color-white\">Retourneren</div>\n                    </ion-button>\n                    <ion-button (click)=\"navCtrl.navigateRoot('/terms')\" fill=\"outline\" size=\"small\" color=\"light\"\n                      class=\"ion-text-wrap\">\n                      <ion-icon slot=\"start\" name=\"document-text\"></ion-icon>\n                      <div class=\"r-h3 r-text-color-white\">Algemene voorwaarden</div>\n                    </ion-button>\n                  </div>\n          \n                </ion-col>\n                <ion-col size=\"6\">\n          \n                  <div class=\"r-h2 r-text-color-white\">Contact</div>\n                  <div class=\"child-container links-container\">\n                    <ion-button (click)=\"navCtrl.navigateRoot('/about')\" fill=\"outline\" size=\"small\" color=\"light\"\n                      class=\"ion-text-wrap\">\n                      <ion-icon slot=\"start\" name=\"today\"></ion-icon>\n                      <div class=\"r-h3 r-text-color-white\">Over ons</div>\n                    </ion-button>\n                    <ion-button (click)=\"navCtrl.navigateRoot('/contact')\" fill=\"outline\" size=\"small\" color=\"light\"\n                      class=\"ion-text-wrap\">\n                      <ion-icon slot=\"start\" name=\"person\"></ion-icon>\n                      <div class=\"r-h3 r-text-color-white\">Contact</div>\n                    </ion-button>\n                    <ion-button (click)=\"navCtrl.navigateRoot('/branches')\" fill=\"outline\" size=\"small\" color=\"light\"\n                      class=\"ion-text-wrap\">\n                      <ion-icon slot=\"start\" name=\"home\"></ion-icon>\n                      <div class=\"r-h3 r-text-color-white\">Winkels</div>\n                    </ion-button>\n                  </div>\n          \n                </ion-col>\n              </ion-row>\n            </ion-grid>\n          \n          </div>\n        </ion-col>\n\n        <ion-col size=\"12\" size-lg=\"3\">\n          <div class=\"footer-child\">\n          \n            <!-- <div class=\"r-h2 r-text-color-white\">KIBA Fashion E-commerce B.V.</div> -->\n            <div style=\"margin-top: 15px;\">\n              <!-- <ion-icon style=\"padding-right: 7px;\" name=\"call\"></ion-icon> <a href=\"tel:0031735470717\"\n                style=\"color: var(--ion-color-primary);\">(+31)\n                073-5470717</a><br>\n              <ion-icon style=\"padding-right: 7px;\" name=\"mail\"></ion-icon> <a href=\"\"\n                style=\"color: var(--ion-color-primary);\"></a> -->\n            </div>\n          \n            <div style=\"margin-top: 15px;\">\n              <!-- KVK: 81184239<br>\n              BTW Nr.: NL861974979B01 -->\n            </div>\n          \n          </div>\n        </ion-col>\n\n      </ion-row>\n\n    </ion-grid>\n\n  </ion-card-content>\n\n  <div class=\"ion-text-center\" *ngIf=\"author && version\">\n    <b>{{ author }}</b> - v{{ version }} - <b>Made with</b> ♥\n  </div>\n\n</div>\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { distinctUntilChanged } from 'rxjs/operators';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ScreensizeService {\n\n  private isDesktop = new BehaviorSubject<boolean>(false);\n\n  constructor() { }\n\n  onResize(size) {\n    if (size < 991) {\n      this.isDesktop.next(false);\n    } else {\n      this.isDesktop.next(true);\n    }\n  }\n\n  isDesktopView(): Observable<boolean> {\n    return this.isDesktop.asObservable().pipe(distinctUntilChanged());\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { AuthService } from './auth.service';\nimport { BehaviorSubject, Observable, Subscription } from 'rxjs';\nimport { getApp } from '@angular/fire/app';\nimport { addDoc, collection, collectionData, Firestore, getFirestore, orderBy, query, where } from '@angular/fire/firestore/lite';\nimport { createUserWithEmailAndPassword, signInWithEmailAndPassword } from '@angular/fire/auth';\nimport { browserLocalPersistence, indexedDBLocalPersistence, initializeAuth } from 'firebase/auth';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ChatService {\n\n  public chatStarted = new BehaviorSubject(false);\n  public chatsUnread = new BehaviorSubject(0);\n\n  public chatObservable: Observable<unknown[]>;\n  public chatSubscription: Subscription;\n\n  public currentNumberOfChats;\n\n  public auth;\n\n  constructor(\n    public authService: AuthService,\n    public firestore: Firestore,\n  ) { \n\n    this.firestore = getFirestore(getApp('rope-retail-chat'));\n    this.auth = initializeAuth(getApp('rope-retail-chat'), {\n      persistence: [indexedDBLocalPersistence, browserLocalPersistence]\n    });\n\n  }\n\n  public async loginForChat() {\n\n    const user = this.authService.getCurrentUser();\n\n    let firebaseUid;\n    try {\n      const loginResponse = await signInWithEmailAndPassword(this.auth, user.username, user.authHeader);\n      firebaseUid = loginResponse.user.uid;\n\n    } catch (error: any) {\n\n      if (error.code && error.code === 'auth/user-not-found') {\n        const registerResponse = await createUserWithEmailAndPassword(this.auth, user.username, user.authHeader);\n        firebaseUid = registerResponse.user.uid;\n      }\n\n    }\n\n    if (firebaseUid) {\n      user['firebase_uid'] = firebaseUid;\n      this.authService.storeUser(user);\n      return true;\n    } else {\n      return false;\n    }\n\n  }\n\n  public listenChatStarted() {\n    return this.chatStarted;\n  }\n\n  public startChat() {\n    this.chatStarted.next(true);\n  }\n\n  public stopChat() {\n    this.chatStarted.next(false);\n  }\n\n  public listenToChatsUnread() {\n    return this.chatsUnread;\n  }\n\n  public resetChatsUnread() {\n    this.chatsUnread.next(0);\n  }\n\n  public getChatsByUserObs(serviceRequestId) {\n\n    const q = query(collection(this.firestore, 'chats'), \n      where('user_id', '==', this.authService.getCurrentUser()['firebase_uid']),\n      where('service_request_id', '==', serviceRequestId + ''),\n      orderBy('timestamp', 'asc')\n    );\n\n    return collectionData(q);\n\n  }\n\n  public getChatsByUser(serviceRequestId) {\n\n    if (!this.chatObservable) {\n\n      this.chatObservable = this.getChatsByUserObs(serviceRequestId);\n      this.chatSubscription = this.chatObservable.subscribe(r => {\n\n        const numOfChatsEmpl = r.filter(rr => rr['is_own']).length;\n        if (!this.currentNumberOfChats) {\n          this.currentNumberOfChats = numOfChatsEmpl;\n        } else {\n          if (this.currentNumberOfChats < numOfChatsEmpl) {\n            this.chatsUnread.next(1);\n            this.currentNumberOfChats = numOfChatsEmpl;\n          }\n        }\n        \n      });\n\n    }\n\n    return this.chatObservable;\n  }\n\n  public async addChat(chat) {\n    await addDoc(collection(this.firestore, 'chats'), chat);\n  }\n\n}\n\n","import { Injectable } from '@angular/core';\nimport { AuthService } from './auth.service';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { Branch } from '../models/branch';\nimport { CoreService } from './core.service';\nimport { MockService } from './mock.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class BranchService {\n\n  constructor(\n    private authService: AuthService,\n    private http: HttpClient,\n    private coreService: CoreService,\n    public mockService: MockService\n  ) { }\n\n  public async ready() {\n\n    let onlineBranch;\n    if (this.coreService.isOfflineMode()) {\n      onlineBranch = this.mockService.getOnlineBranch();\n    } else {\n      onlineBranch = this.coreService.initObject.online_branch;\n    }\n\n    this.coreService.setOnlineBranch(onlineBranch);\n    return Promise.resolve(true);\n  }\n\n  public getAll(): Observable<Branch[]> {\n\n    const params: HttpParams = new HttpParams()\n    .set('get_images', '1');\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders()\n    };\n\n    return this.http.get<Branch[]>(this.coreService.getBaseUrl() + 'branch/get', requestOptions);\n\n  }\n\n  public getById(id: any): Observable<Branch[]> {\n    \n    const params: HttpParams = new HttpParams()\n    .set('get_images', '1')\n    .set('branch_id', id)\n    .set('get_employee', '1');\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders()\n    };\n\n    return this.http.get<Branch[]>(this.coreService.getBaseUrl() + 'branch/get', requestOptions);\n\n  }\n\n  public checkOpen(onlineBranch, dayOfWeek, currentHour, currentMinute) {\n\n    if (!onlineBranch) {\n      return null;\n    }\n\n    let responseObj = {\n      shopIsOpen: false,\n      headerData: {\n        text: undefined,\n        color: undefined\n      },\n      popupData: {\n        text: undefined,\n        color: undefined,\n        icon: undefined\n      }\n    };\n\n    let opensAnotherDay = false;\n    const branchOpeningHour = onlineBranch['branch_opening_hours'].find(boh => boh.day_of_week === dayOfWeek);\n    if (branchOpeningHour) {\n\n      if (branchOpeningHour.open && branchOpeningHour.closed) {\n\n        const openHour = Number(branchOpeningHour.open.split(':')[0]);\n        const openMinute = Number(branchOpeningHour.open.split(':')[1]);\n\n        const closedHour = Number(branchOpeningHour.closed.split(':')[0]);\n        const closedMinute = Number(branchOpeningHour.closed.split(':')[1]);\n\n        //Check if open\n        if ((currentHour > openHour || (currentHour === openHour && currentMinute >= openMinute)) && (currentHour < closedHour || (currentHour === closedHour && currentMinute <= closedMinute))) {\n\n          //Today\n          responseObj.shopIsOpen = true;\n          responseObj.headerData.text = 'Nu open';\n          responseObj.headerData.color = 'success';\n\n          responseObj.popupData.text = '\\'Écht online winkelen\\' is nu geopend tot ' + branchOpeningHour.closed;\n          responseObj.popupData.color = 'lightgreen';\n          responseObj.popupData.icon = 'arrow-down';\n\n        } else if (currentHour > closedHour || (currentHour === closedHour && currentMinute >= closedMinute)) {\n\n          //Does not open today\n          responseObj.shopIsOpen = false;\n          opensAnotherDay = true;\n\n        } else {\n\n          //Does open today\n          responseObj.shopIsOpen = false;\n          responseObj.headerData.text = 'Opent om '+branchOpeningHour.open;\n          responseObj.headerData.color = 'warning';\n\n          responseObj.popupData.text = '\\'Écht online winkelen\\' gaat open om ' + branchOpeningHour.open;\n          responseObj.popupData.color = 'var(--ion-color-warning)';\n          responseObj.popupData.icon = 'time';\n\n        }\n\n      } else {\n        responseObj.shopIsOpen = false;\n        opensAnotherDay = true;\n      }\n\n    } else {\n      opensAnotherDay = true;\n    }\n\n    if (opensAnotherDay) {\n\n      const openDays = onlineBranch['branch_opening_hours'].filter(boh => boh.open && boh.closed);\n      if (openDays.length === 0) {\n\n        responseObj.headerData.text = 'Gesloten';\n        responseObj.headerData.color = 'danger';\n\n        responseObj.popupData.text = '\\'Écht online winkelen\\' is gesloten';\n        responseObj.popupData.color = 'var(--ion-color-danger)';\n        responseObj.popupData.icon = 'close-outline';\n\n      } else {\n\n        //Find first open day after this day\n        const potentialDayAfter = openDays.filter(boh => boh.day_of_week > dayOfWeek).find(boh => boh.open && boh.closed);\n        if (potentialDayAfter) {\n\n          responseObj.headerData.text = 'Opent ' + this.getDayOfWeek(potentialDayAfter.day_of_week).substring(0, 2) + ' ' + potentialDayAfter.open;\n          responseObj.headerData.color = 'warning';\n\n          responseObj.popupData.text = '\\'Écht online winkelen\\' gaat open op ' + this.getDayOfWeek(potentialDayAfter.day_of_week) + ' om ' + potentialDayAfter.open;\n          responseObj.popupData.color = 'var(--ion-color-warning)';\n          responseObj.popupData.icon = 'time';\n\n        } else {\n\n          const otherDay = openDays.find(boh => boh.open && boh.closed);\n\n          responseObj.headerData.text = 'Opent ' + this.getDayOfWeek(otherDay.day_of_week).substring(0, 2) + ' ' + otherDay.open;\n          responseObj.headerData.color = 'warning';\n\n          responseObj.popupData.text = '\\'Écht online winkelen\\' gaat open op ' + this.getDayOfWeek(otherDay.day_of_week) + ' om ' + otherDay.open;\n          responseObj.popupData.color = 'var(--ion-color-warning)';\n          responseObj.popupData.icon = 'time';\n\n        }\n\n      }\n\n    }\n\n    return responseObj;\n\n  }\n\n  public getDayOfWeek(dayOfWeek) {\n\n    if (dayOfWeek === 1) {\n      return 'maandag';\n    } else if (dayOfWeek === 2) {\n      return 'dinsdag';\n    } else if (dayOfWeek === 3) {\n      return 'woensdag';\n    } else if (dayOfWeek === 4) {\n      return 'donderdag';\n    } else if (dayOfWeek === 5) {\n      return 'vrijdag';\n    } else if (dayOfWeek === 6) {\n      return 'zaterdag';\n    } else {\n      return 'zondag';\n    }\n\n  }\n\n}\n","import { Component, OnInit, ViewChild, Input, ElementRef, Output, EventEmitter } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { IonContent, IonFooter } from '@ionic/angular';\nimport { Subscription, first, lastValueFrom } from 'rxjs';\nimport { BranchService } from '../../../services/branch.service';\nimport { ChatService } from '../../../services/chat.service';\nimport { CoreService } from '../../../services/core.service';\nimport { ReviewService } from '../../../services/review.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\nimport { StorageService } from '../../../services/storage.service';\n\n@Component({\n  selector: \"rope-footer\",\n  templateUrl: \"./footer.component.html\",\n  styleUrls: [\"./footer.component.scss\"],\n})\nexport class FooterComponent implements OnInit {\n  @Input() content: IonContent;\n  @Input() isModal: boolean = false;\n\n  @Output() public modalOnlineShopping = new EventEmitter();\n  @Output() public navigate = new EventEmitter<String>();\n\n  @ViewChild(\"footer\") footer: IonFooter;\n  public footerHeight = 0;\n\n  public isDesktop;\n\n  public openingStatus;\n\n  public chatSubscriber: Subscription;\n  public numberOfUnreadChats = 0;\n  public chatStarted = false;\n\n  public reviewRatingObj;\n\n  public showReviewBanner = false;\n  public simpleView = false;\n\n  constructor(\n    private coreService: CoreService,\n    private screensizeService: ScreensizeService,\n    public chatService: ChatService,\n    public branchService: BranchService,\n    public reviewService: ReviewService,\n    public storageService: StorageService,\n    private router: Router\n  ) {}\n\n  async ngOnInit() {\n\n    this.screensizeService.isDesktopView().subscribe((isDesktop) => {\n      this.isDesktop = isDesktop;\n    });\n\n    await lastValueFrom(this.coreService.initObjectLoaded.asObservable().pipe(first()));\n\n    this.showReviewBanner = !(await this.storageService.get(\n      \"hide_review_banner\"\n    ));\n    this.reviewRatingObj = this.coreService.initObject.avg_review_rating;\n    const onlineBranch = this.coreService.getOnlineBranch();\n\n    const dayOfWeek = ((new Date().getDay() + 6) % 7) + 1;\n    const currentHour = new Date().getHours();\n    const currentMinute = new Date().getMinutes();\n    this.openingStatus = this.branchService.checkOpen(\n      onlineBranch,\n      dayOfWeek,\n      currentHour,\n      currentMinute\n    );\n\n    if (!this.isDesktop) {\n      let unreadChatsCount: Subscription;\n      this.chatSubscriber = this.chatService\n        .listenChatStarted()\n        .subscribe((started) => {\n          this.chatStarted = started;\n\n          if (started && !unreadChatsCount) {\n            unreadChatsCount = this.chatService\n              .listenToChatsUnread()\n              .subscribe((numberOfUnreadChats) => {\n                if (numberOfUnreadChats === 1) {\n                  this.numberOfUnreadChats =\n                    this.numberOfUnreadChats + numberOfUnreadChats;\n                } else {\n                  this.numberOfUnreadChats = 0;\n                }\n              });\n          } else if (!started && unreadChatsCount) {\n            unreadChatsCount.unsubscribe();\n          }\n        });\n    }\n\n    const routesForSimpleView = ['/shopping-bag', '/cart-summary', '/cart-do-payment', '/cart-check-payment', '/cart-payment-status', '/cart-checkout'];\n    this.simpleView = routesForSimpleView.indexOf(this.router.url) !== -1;\n    if (this.simpleView) {\n      this.showReviewBanner = false;\n    }\n\n  }\n\n  ngAfterViewInit() {\n    setTimeout(() => {\n      if (this.footer) {\n        this.footerHeight = this.footer[\"el\"].offsetHeight;\n        document.documentElement.style.setProperty(\n          \"--webwinkel-keur-offset-bottom\",\n          40 - this.footerHeight + \"px\"\n        );\n      }\n    }, 500);\n  }\n\n  public doShowReviewBanner() {\n    this.showReviewBanner = true;\n    this.storageService.set(\"hide_review_banner\", false);\n  }\n\n  public hideReviewBanner() {\n    this.showReviewBanner = false;\n    this.storageService.set(\"hide_review_banner\", true);\n  }\n\n  public openOnlineShopping() {\n    this.modalOnlineShopping.emit({\n      event: undefined,\n      isDesktop: this.isDesktop,\n    });\n  }\n\n  public goToReviews() {\n    this.navigate.emit(\"/review\");\n  }\n\n  public scrollToTop() {\n    this.content.scrollToTop(500);\n  }\n\n  public openFbMessenger() {\n    this.coreService.openUrl(\"https://m.me/kiba.fashion\");\n  }\n}\n","<ion-footer class=\"placeholder-footer\" *ngIf=\"!showReviewBanner && !simpleView\" (click)=\"doShowReviewBanner()\">\n  <ion-chip style=\"--background: var(--ion-color-tertiary-shade); margin-bottom: 8px;\">\n    <div class=\"r-h3\">Klantenservice</div>\n    <ion-icon name=\"arrow-up-circle-outline\" style=\"font-size: 1.3rem;\"></ion-icon>\n  </ion-chip>\n</ion-footer>\n\n<ion-footer #footer *ngIf=\"!(isDesktop && isModal) && showReviewBanner\">\n  \n  <div style=\"background-color: var(--ion-color-tertiary-shade); width: 100%;\" class=\"r-flex r-flex-h-center r-flex-v-center\">\n    <div class=\"r-flex r-flex-h-space-between r-flex-v-center\" style=\"background-color: var(--ion-color-tertiary-shade); border-top-left-radius: 15px; border-top-right-radius: 15px; width: 90%; max-width: 450px;\">\n      <ion-title class=\"r-h3 r-b\" style=\"padding-top: 5px; padding-bottom: 5px; font-size: 0.9rem; user-select: none; cursor: pointer;\" (click)=\"goToReviews()\">\n        <div class=\"r-flex r-flex-h-start r-flex-v-center\">\n          <img src=\"https://cdn.roperetail.com/kiba-fashion/misc/webwinkelkeur_logo.webp\" style=\"height: 15px;\">\n          <div style=\"margin-left: 15px; font-size: 1.1rem;\">Wij scoren een <span style=\"font-weight: 700;\">{{ reviewRatingObj?.avg_rating*2 | number:'1.1-1' }}</span>/10 ({{ reviewRatingObj?.amount | number:'1.0-0' }} reviews)</div>\n        </div>\n      </ion-title>\n      <ion-buttons slot=\"end\">\n        <ion-button class=\"ion-no-padding\" style=\"--padding-top: 2px; --padding-bottom: 2px; height: 100%;\" (click)=\"hideReviewBanner()\">\n          <div class=\"r-h3\">Sluit</div>\n          <ion-icon slot=\"end\" name=\"close-circle-outline\" style=\"font-size: 1.9rem !important;\"></ion-icon>\n        </ion-button>\n      </ion-buttons>\n    </div>\n  </div>\n\n  <ion-toolbar color=\"tertiary\" style=\"--min-height: 40px;\">\n\n    <ion-buttons slot=\"start\">\n      <ion-button *ngIf=\"isDesktop\" fill=\"solid\" color=\"tertiary\" shape=\"round\" (click)=\"scrollToTop()\">\n        <ion-icon slot=\"icon-only\" name=\"chevron-up-outline\" style=\"font-size: 1.8rem !important; color: var(--ion-color-dark);\"></ion-icon>\n      </ion-button>\n      <ion-button *ngIf=\"!isDesktop\" fill=\"solid\" shape=\"round\" color=\"tertiary\" (click)=\"openOnlineShopping()\">\n        <ion-icon *ngIf=\"numberOfUnreadChats === 0\" slot=\"start\" name=\"people-circle-outline\"\n          style=\"font-size: 1.8rem !important;\" [ngStyle]=\"{ 'color': chatStarted ? 'indianred' : 'var(--ion-color-dark)' }\">\n        </ion-icon>\n        <ion-badge *ngIf=\"numberOfUnreadChats > 0\" style=\"margin-right: 7px; background-color: indianred;\">\n          {{ numberOfUnreadChats }}\n        </ion-badge>\n        <div class=\"shopping-button\">\n          <div>Chat met ons</div>\n          <div class=\"opening-text\" *ngIf=\"openingStatus\">\n            <div>{{ chatStarted ? 'Aan het chatten' : openingStatus.headerData.text }}</div>\n            <ion-icon name=\"ellipse\" [color]=\"openingStatus.headerData.color\"></ion-icon>\n          </div>\n          <div class=\"opening-text\" *ngIf=\"!openingStatus\">\n            <div>Ophalen...</div>\n            <ion-icon name=\"ellipse\" color=\"warning\"></ion-icon>\n          </div>\n        </div>\n      </ion-button>\n    </ion-buttons>\n\n    <ion-buttons slot=\"end\">\n      <ion-button fill=\"solid\" color=\"tertiary\" shape=\"round\" (click)=\"openFbMessenger()\">\n        <ion-icon slot=\"start\" name=\"logo-whatsapp\" style=\"font-size: 1.8rem !important; color: var(--ion-color-dark);\"></ion-icon>\n        <div class=\"r-h3\" style=\"color: var(--ion-color-dark);\">Vragen?</div>\n      </ion-button>\n    </ion-buttons>\n\n  </ion-toolbar>\n\n</ion-footer>\n","import { ProductVariant } from \"./product-variant\";\nimport { Product } from \"./product\";\n\nexport class OrderLine {\n\n    count: number;\n    subtotal: number;\n    productVariant: ProductVariant;\n    productPreorder: any;\n    product: Product;\n    outfitImage: string;\n    promotionDiscount;\n\n    constructor(_count: number, _productVariant: ProductVariant, _product: Product, _outfitImage: string) {\n\n        this.count = _count;\n        this.productVariant = _productVariant;\n\n        if (!this.productVariant.stocks) {\n            this.productVariant.stocks = _productVariant['all_stocks'].filter(st => st.branch.id === 2);\n        }\n\n        this.product = _product;\n        this.outfitImage = _outfitImage;\n\n        let price = this.promotionDiscount ? this.promotionDiscount*this.product.unit_price : (this.product.discount_price ? this.product.discount_price : this.product.unit_price);\n        let _subtotal: number = price*this.count;\n        this.subtotal = _subtotal;\n\n    }\n\n}\n","import { Injectable } from '@angular/core';\nimport { CoreService } from './core.service';\nimport { AuthService } from './auth.service';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { tap } from 'rxjs/operators';\nimport { BehaviorSubject, defer, from, of } from 'rxjs';\nimport { StorageService } from './storage.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WishlistService {\n\n  public changed = new BehaviorSubject<boolean>(false);\n\n  public items: any[] = [];\n\n  constructor(\n    public coreService: CoreService,\n    public storageService: StorageService,\n    public authService: AuthService,\n    public http: HttpClient\n  ) { }\n\n  public async sync() {\n    let items;\n    if (this.authService.isAuthenticated()) {\n      items = await this.get().toPromise();\n    } else {\n      items = await this.storageService.get('wishlist');\n      items = await this.getUnauthenticated(items).toPromise();\n    }\n    this.items = items;\n    return Promise.resolve();\n  }\n\n  public get() {\n\n    if (this.authService.isAuthenticated()) {\n\n      const currentUser = this.authService.getCurrentUser();\n      const requestOptions = {\n        headers: this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader)\n      };\n      return this.http.get<any[]>(this.coreService.getBaseUrl() + 'wishlist/get', requestOptions);\n\n    } else {\n      return defer(() => from(this.storageService.get('wishlist')));\n    }\n\n  }\n\n  public getUnauthenticated(items) {\n\n    const requestOptions = {\n      headers: this.coreService.getHeaders()\n    };\n    const body = JSON.stringify(items);\n    return this.http.post<any[]>(this.coreService.getBaseUrl() + 'wishlist/get/unauthenticated', body, requestOptions);\n\n  }\n\n  public check(pv) {\n    return this.items.find(cwl => cwl.product_variant.id === pv.id) !== undefined;\n  }\n\n  public add(pv) {\n\n    if (this.authService.isAuthenticated()) {\n\n      const currentUser = this.authService.getCurrentUser();\n      const requestOptions = {\n        headers: this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader)\n      };\n      const body = 'product_variant_id=' + pv.id;\n      return this.http.post<any[]>(this.coreService.getBaseUrl() + 'wishlist/add', body, requestOptions).pipe(tap(r=> {\n        this.items.push(r);\n        this.changed.next(true);\n      }));\n\n    } else {\n\n      const line = {\n        product_variant: pv,\n        timestamp_added: new Date().getTime()\n      };\n      this.items.push(line);\n      return this.getUnauthenticated(this.items).pipe(tap(r => {\n        this.items = r;\n        this.storageService.set('wishlist', this.items).then();\n        this.changed.next(true);\n      }));\n\n    }\n\n  }\n\n  public remove(pv) {\n\n    if (this.authService.isAuthenticated()) {\n\n      const currentUser = this.authService.getCurrentUser();\n      const requestOptions = {\n        headers: this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader)\n      };\n      const body = 'product_variant_id=' + pv.id;\n      return this.http.put<any[]>(this.coreService.getBaseUrl() + 'wishlist/remove', body, requestOptions).pipe(tap(r => {\n        this.items = this.items.filter(i => i.product_variant.id !== pv.id);\n        this.changed.next(true);\n      }));\n\n    } else {\n\n      this.items = this.items.filter(i => i.product_variant.id !== pv.id);\n      this.storageService.set('wishlist', this.items).then();\n      this.changed.next(true);\n\n      return of(this.items);\n\n    } \n\n  }\n\n  public clearAll() {\n\n    if (this.authService.isAuthenticated()) {\n\n      const currentUser = this.authService.getCurrentUser();\n      const requestOptions = {\n        headers: this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader)\n      };\n      return this.http.get<any[]>(this.coreService.getBaseUrl() + 'wishlist/clear', requestOptions).pipe(tap(r => {\n        this.items = [];\n        this.changed.next(true);\n      }));\n\n    } else {\n\n      this.items = [];\n      this.storageService.set('wishlist', this.items).then();\n      this.changed.next(true);\n\n      return of(this.items);\n\n    }\n\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { CoreService } from './core.service';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { AuthService } from './auth.service';\nimport { Observable } from 'rxjs';\nimport { Reservation } from '../models/reservation';\nimport { tap } from 'rxjs/operators';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ReservationService {\n\n  constructor(\n    private coreService: CoreService,\n    private http: HttpClient,\n    private authService: AuthService\n  ) { }\n\n  public getReservations(): Observable<Reservation[]> {\n      \n    const headers: HttpHeaders = this.coreService.getHeaders()\n    .set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n    \n    const requestOptions = {\n      headers: headers\n    };\n    \n    return this.http.get<Reservation[]>(this.coreService.getBaseUrl() + 'reservation', requestOptions);\n    \n  }\n\n  public postReservation(reservation: Reservation): Observable<Reservation> {\n\n    const headers: HttpHeaders = this.coreService.getHeaders()\n    .set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n    \n    const requestOptions = {\n      headers: headers\n    };\n    \n    return this.http.post<Reservation>(this.coreService.getBaseUrl() + 'reservation/post', 'reservation=' + JSON.stringify(reservation), requestOptions);\n\n  }\n\n  public postFutureReservation(futureReservation: any): Observable<any> {\n\n    const requestOptions = {\n      headers: this.coreService.getHeaders()\n    };\n    return this.http.post<Reservation>(this.coreService.getBaseUrl() + 'reservation/future/post', 'future_reservation=' + JSON.stringify(futureReservation), requestOptions);\n\n  }\n\n  public getFutureReservations(): Observable<any[]> {\n\n    const headers: HttpHeaders = this.coreService.getHeaders()\n      .set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n\n    const requestOptions = {\n      headers: headers\n    };\n\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'reservation/future', requestOptions).pipe(tap(r => {\n      for (let rr of r) {\n        rr.timestamp_expiration = rr.timestamp_created + 1000 * 60 * 60 * 24 * 30;\n      }\n    }));\n\n  }\n\n  public deleteFutureReservation(futureReservation: any): Observable<any> {\n\n    const requestOptions = {\n      headers: this.coreService.getHeaders().set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader)\n    };\n\n    const body = 'future_reservation_id='+futureReservation.id;\n\n    return this.http.put<Reservation>(this.coreService.getBaseUrl() + 'reservation/future/remove', body, requestOptions);\n\n  }\n\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { Product } from '../../../models/product';\nimport { CartService } from '../../../services/cart.service';\nimport { OrderLine } from '../../../models/order-line';\nimport { ToastController, ModalController, AlertController } from '@ionic/angular';\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport { Outfit } from '../../../models/outfit';\nimport { WishlistService } from '../../../services/wishlist.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { ReservationService } from '../../../services/reservation.service';\n\n@Component({\n  selector: \"rope-product-add-to-cart\",\n  templateUrl: \"./product-add-to-cart.component.html\",\n  styleUrls: [\"./product-add-to-cart.component.scss\"],\n})\nexport class ProductAddToCartComponent implements OnInit {\n  @Input() product: Product;\n  @Input() outfit: Outfit;\n  @Input() type: string;\n\n  @Output() modalFitAssistant = new EventEmitter();\n  @Output() modalStoreStock = new EventEmitter();\n\n  @Output() navigateToWatchlist = new EventEmitter();\n  @Output() navigateToCart = new EventEmitter();\n\n  @Output() changeCurrentOutfit = new EventEmitter();\n\n  public productFit;\n\n  public isPreorder;\n  public isTemporarySoldOut;\n\n  public currentFamilyIndex = 3;\n\n  constructor(\n    public cartService: CartService,\n    public analyticsService: AnalyticsService,\n    public wishlistService: WishlistService,\n    public reservationService: ReservationService,\n    public toastCtrl: ToastController,\n    public alertCtrl: AlertController,\n    public modalCtrl: ModalController,\n    public authService: AuthService\n  ) {}\n\n  ngOnInit() {\n\n    if (this.outfit.products) {\n      for (let pr of this.outfit.products) {\n        if (pr.product_preorders && pr.product_preorders.length > 0) {\n          this.isPreorder = true;\n        }\n      }\n    }\n\n    const fitOption = this.product[\"options\"].find(\n      (o) => o.property.id === 8\n    );\n    if (fitOption) {\n      this.productFit = fitOption.name;\n    }\n\n    this.product.product_variants.sort(\n      (pv1, pv2) => pv1.size.sort_index - pv2.size.sort_index\n    );\n    for (let pv of this.product.product_variants) {\n      pv[\"current_stock_level\"] =\n        this.getStock(pv) - this.amountInShoppingBag(pv);\n    }\n\n    this.isTemporarySoldOut = this.product.product_variants.every(pv => pv['stock_expected']);\n\n    if (this.product['product_family_members']) {\n\n      const ownEl = this.product['product_family_members'].find(pp => pp.id === this.product.id);\n      this.product[\"product_family_members\"] = [\n        ownEl,\n        ...this.product[\"product_family_members\"].filter(\n          (pp) => pp.id !== this.product.id\n        ),\n      ];\n      if (this.product[\"product_family_members\"].length === 4) {\n        this.currentFamilyIndex = 4;\n      }\n\n    }\n\n    this.analyticsService.trackAddToCartInit(\n      \"/shop/add-to-cart/\" + this.outfit.id\n    );\n  }\n\n  public getFamilyMemberImage(pr) {\n    const sameTypeOutfit = pr.outfits.find(\n      (o) => o.outfit_type === this.outfit.outfit_type && o.is_active\n    );\n    if (sameTypeOutfit) {\n\n      if (sameTypeOutfit.medias && sameTypeOutfit.medias.length > 0) {\n        return sameTypeOutfit.medias[0].url;\n      }\n\n      return sameTypeOutfit.main_media_url;\n    }\n  }\n\n  public doChangeCurrentOutfit(pr) {\n    const sameTypeOutfit = pr.outfits.find(\n      (o) => o.outfit_type === this.outfit.outfit_type && o.is_active\n    );\n    this.changeCurrentOutfit.emit(sameTypeOutfit);\n  }\n\n  public amountInShoppingBag(pv) {\n    return this.cartService.inShoppingBag(pv);\n  }\n\n  public getStock(pv) {\n    return pv[\"all_stocks\"].reduce((a, b) => a + b.stock_level, 0);\n  }\n\n  public getPreorderDeliveryDate() {\n    let product = this.outfit[\"products\"].filter(\n      (p) => p.product_preorders && p.product_preorders.length > 0\n    )[0];\n    let timestampDelivery = product.product_preorders[0].timestamp_delivery;\n    return timestampDelivery;\n  }\n\n  public getPromoDiscountPriceForProduct() {\n    const promocode = this.cartService.getPromoCode();\n    if (!promocode) {\n      return 0.0;\n    }\n\n    if (promocode[\"excluded_options\"]) {\n      const optionsArr = JSON.parse(promocode[\"excluded_options\"]);\n      const excludedOutfit = this.product[\"options\"].find(\n        (ol) => optionsArr.indexOf(ol.id) != -1\n      );\n      if (excludedOutfit) {\n        return undefined;\n      }\n    }\n\n    if (promocode[\"exclude_sale\"]) {\n      if (this.product.discount_price) {\n        return undefined;\n      }\n    }\n\n    const subtotal = this.product.discount_price\n      ? this.product.discount_price\n      : this.product.unit_price;\n    const num = subtotal * (1 - promocode.amount);\n    return Math.round(num * 100) / 100;\n  }\n\n  public async openFitAssistant() {\n    const fitProduct = JSON.parse(JSON.stringify(this.product));\n    this.modalFitAssistant.emit({\n      product: fitProduct,\n    });\n  }\n\n  public async goToStoreStock() {\n    this.modalStoreStock.emit({\n      outfit_id: this.outfit.id,\n    });\n  }\n\n  public onWishlist(pv) {\n    if (this.authService.isAuthenticated()) {\n      return this.wishlistService.check(pv);\n    } else {\n      return false;\n    }\n  }\n\n  public async toggleWishlist(pv) {\n    if (this.wishlistService.check(pv)) {\n      this.wishlistService.remove(pv).subscribe((r) => {\n      });\n    } else {\n      this.wishlistService.add(pv).subscribe((r) => {\n      });\n    }\n  }\n\n  public async createFutureReservation(productVariant) {\n\n    let alert = await this.alertCtrl.create({\n      header: \"We houden je op de hoogte\",\n      subHeader: \"Als dit product weer beschikbaar is\",\n      message:\n        \"Helaas is deze maat nu uitverkocht, maar we kunnen je even mailen als deze weer beschikbaar is.<br><br>Waar mogen we naartoe mailen?\",\n      cssClass: \"custom-alert\",\n      inputs: [\n        {\n          name: \"customer_email\",\n          value: this.authService.isAuthenticated()\n            ? this.authService.getCurrentUser().email\n            : \"\",\n          type: \"email\",\n          placeholder: \"Je e-mailadres\",\n        },\n      ],\n      buttons: [\n        {\n          text: \"Annuleer\",\n          role: \"cancel\",\n        },\n        {\n          text: \"Meld aan\",\n          handler: (d) => {\n            const customerEmail = d.customer_email;\n            if (!customerEmail) {\n              return;\n            }\n\n            const futureReservation = {\n              product_variant: {\n                id: productVariant.id,\n              },\n              customer_email: customerEmail,\n              timestamp_created: new Date().getTime(),\n              branch: {\n                id: 2,\n              },\n              customer: undefined,\n            };\n\n            if (this.authService.isAuthenticated()) {\n              futureReservation.customer = {\n                id: this.authService.getCurrentUser().id,\n              };\n            }\n\n            this.reservationService\n              .postFutureReservation(futureReservation)\n              .subscribe(async (r) => {\n                if (this.type === \"modal\") {\n                  this.modalCtrl.dismiss();\n                }\n\n                const toast = await this.toastCtrl.create({\n                  message:\n                    \"Toegevoegd aan de watchlist, we houden je op de hoogte!\",\n                  duration: 5000,\n                  position: \"top\",\n                  color: \"tertiary\",\n                  buttons: [\n                    {\n                      icon: \"eye-outline\",\n                      text: \"Bekijk\",\n                      role: \"cancel\",\n                      handler: () => {\n                        this.navigateToWatchlist.emit();\n                        // this.navCtrl.navigateRoot('/future-reservations');\n                      },\n                    },\n                  ],\n                });\n                return await toast.present();\n              });\n          },\n        },\n      ],\n    });\n\n    return await alert.present();\n    \n  }\n\n  public setAmountToAdd(event, pv) {\n    const amountToAdd = event.detail.value;\n    pv.amount_to_add = amountToAdd;\n  }\n\n  public async addToOrder(pv?, counter?) {\n\n    const count = counter | 1;\n    const productVariant = pv;\n\n    const pproduct = JSON.parse(JSON.stringify(this.product));\n    delete pproduct['cost_price'];\n\n    const orderLine: OrderLine = new OrderLine(\n      count,\n      productVariant,\n      pproduct,\n      this.outfit.images[0].url\n    );\n\n    let optionalOutfitProduct = this.outfit.products.find(\n      (pr) =>\n        this.product.id === pr.id &&\n        pr.product_preorders &&\n        pr.product_preorders.length > 0\n    );\n\n    let preorderObj;\n    if (optionalOutfitProduct) {\n      preorderObj = optionalOutfitProduct.product_preorders[0];\n    } else {\n      preorderObj = undefined;\n    }\n\n    if (preorderObj) {\n      orderLine.productPreorder = preorderObj;\n    }\n\n    this.cartService.addOrderLine(orderLine);\n    this.analyticsService.trackAddToCart(\n      \"/shop/add-to-cart/\" + this.outfit.id,\n      orderLine.subtotal,\n      orderLine.product.id,\n      orderLine.product\n    );\n\n    if (this.type === \"modal\") {\n      this.modalCtrl.dismiss();\n    }\n\n    const toast = await this.toastCtrl.create({\n      message:\n        count +\n        \" stuk\" +\n        (count > 1 ? \"s\" : \"\") +\n        \" succesvol toegevoegd aan shopping bag\",\n      duration: 5000,\n      position: \"bottom\",\n      color: \"tertiary\",\n      buttons: [\n        {\n          icon: \"cart-outline\",\n          text: \"Bekijk\",\n          role: \"cancel\",\n          handler: () => {\n            this.navigateToCart.emit();\n          },\n        },\n      ],\n    });\n    return await toast.present();\n\n  }\n\n}\n","<div class=\"block\" style=\"padding-top: 40px; padding-bottom: 60px;\">\n\n  <div style=\"padding-left: 15px; padding-right: 15px;\">\n\n    <div style=\"display: flex; justify-content: space-between; align-items: center; width: 100%;\">\n      <div>\n        <div class=\"webshop-item-bottom-n\">\n          <div class=\"outfit-title ion-text-wrap r-h2\">\n            {{ product.name }}\n          </div>\n          <p style=\"margin: 0; padding: 2px;\" class=\"r-h3\">Productnummer: #{{ product.id }}</p>\n          <p style=\"margin: 0; padding: 2px;\" class=\"r-h3\">Leveranciersnummer: {{ product.supplier_code }}</p>\n\n          <div style=\"margin-top: 2px; margin-bottom: 2px;\" *ngIf=\"productFit && productFit !== 'Normaal'\">\n            <ion-chip style=\"--background: var(--ion-color-warning); height: 24px !important;\">\n              <ion-icon style=\"font-size: 1.2rem;\" name=\"shirt\"></ion-icon>\n              <ion-label class=\"r-h3\">Product valt {{ productFit.toLowerCase() }}</ion-label>\n            </ion-chip>\n          </div>\n\n          <div>\n            <div class=\"webshop-item-outfit-price\">\n              <div [ngClass]=\"(product.discount_price || (cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct() !== undefined)) ? 'old-price' : ''\" class=\"r-h1\">{{ product.unit_price | currency:'EUR':'symbol' }}</div>\n              <div *ngIf=\"product.discount_price  && !(cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct() !== undefined)\" style=\"color: indianred;\" class=\"r-h1\">{{ product.discount_price | currency:'EUR':'symbol' }}</div>\n              <div *ngIf=\"cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct() !== undefined\" class=\"promo-price r-h1\">Nu: {{ getPromoDiscountPriceForProduct() | currency:'EUR':'symbol' }}</div>\n            </div>\n          </div>\n\n        </div>\n      </div>\n    </div>\n\n    <div *ngIf=\"product['product_family_members'] && product['product_family_members'].length > 0\" class=\"family-block\">\n      <div class=\"r-h2\" style=\"margin-left: 2px; margin-top: 5px; margin-bottom: 5px;\">Ook verkrijgbaar in:</div>\n      <ion-grid>\n        <ion-row>\n          <ion-col *ngFor=\"let pr of product['product_family_members'] | slice:0:currentFamilyIndex\" size=\"3\">\n            <div [ngClass]=\"pr['id'] === product.id ? 'bordered-family' : ''\" class=\"family-member\" style=\"margin-right: 10px;\" (click)=\"doChangeCurrentOutfit(pr)\">\n              <ion-img [src]=\"getFamilyMemberImage(pr)\" class=\"bordered-image\"></ion-img>\n            </div>\n          </ion-col>\n          <ion-col *ngIf=\"product['product_family_members'].length > currentFamilyIndex\">\n            <div class=\"placeholder-family-member\" (click)=\"currentFamilyIndex = currentFamilyIndex + 3\">\n              +{{ product['product_family_members'].length - currentFamilyIndex }}\n            </div>\n          </ion-col>\n        </ion-row>\n      </ion-grid>\n    </div>\n\n    <div style=\"display: flex; justify-content: space-between; align-items: center; width: 100%;\">\n      <div>\n        <div class=\"r-warning r-h3\" *ngIf=\"isPreorder\">\n          <strong>Levertijd</strong><br/>\n          Dit product staat in pre-order en wordt daarom vanaf {{ getPreorderDeliveryDate() | date:'shortDate' }} geleverd.\n        </div>\n\n        <div class=\"r-warning r-h3\" *ngIf=\"isTemporarySoldOut\">\n          <strong>Tijdelijk uitverkocht</strong><br/>\n          Dit product is tijdelijk uitverkocht, maar nieuwe voorraad wordt verwacht. Kijk hieronder voor wanneer jouw maat weer beschikbaar is.\n        </div>\n      </div>\n    </div>\n\n    <br>\n    <br>\n\n    <div>\n\n      <div class=\"size-block\" *ngFor=\"let pv of product.product_variants\" [ngClass]=\"amountInShoppingBag(pv) > 0 ? 'in-shopping-bag' : ''\">\n\n        <div class=\"size-info-container\" style=\"flex: 1;\">\n          <div class=\"r-h2\">{{ pv.size.name }}</div>\n          <p class=\"size-stock-container ion-text-wrap r-h3\">\n            <ng-container *ngIf=\"amountInShoppingBag(pv) > 0\">{{ amountInShoppingBag(pv) }} in shopping bag &#9642; </ng-container>\n            <ng-container *ngIf=\"getStock(pv) > 3\">Op voorraad</ng-container>\n            <ng-container *ngIf=\"getStock(pv) <= 3 && getStock(pv) > 0\">Nog maar {{ getStock(pv) }} op voorraad\n            </ng-container>\n            <ng-container *ngIf=\"getStock(pv) <= 0\">\n              <div style=\"color: var(--ion-color-danger); font-weight: 700;\">Niet op voorraad</div>\n              <ng-container *ngIf=\"pv['stock_expected']\">\n                <b>Let op!</b> Op {{ pv['stock_expected_timestamp'] | date:'dd-MM-yyyy \\'om\\' HH:mm' }} nieuwe voorraad beschikbaar\n              </ng-container>\n            </ng-container>\n          </p>\n        </div>\n\n        <div *ngIf=\"pv['current_stock_level']-amountInShoppingBag(pv) > 0\" style=\"width: 40px; margin-right: 5px;\"\n          class=\"size-amount-container\" [ngClass]=\"amountInShoppingBag(pv) > 0 ? 'in-shopping-bag' : ''\">\n          <ion-input type=\"number\" value=\"1\" min=\"1\" [max]=\"getStock(pv)-amountInShoppingBag(pv)\" (ionChange)=\"setAmountToAdd($event, pv)\" style=\"height: 36px; border: 1px solid darkgrey; border-radius: 5px;\">\n          </ion-input>\n        </div>\n\n        <div *ngIf=\"pv['current_stock_level']-amountInShoppingBag(pv) > 0\" class=\"size-button\">\n          <ion-button style=\"--padding-start: 0px; --padding-end: 0px;\" expand=\"block\" (click)=\"addToOrder(pv, pv['amount_to_add'])\" color=\"cta\">\n            <ion-icon slot=\"icon-only\" name=\"cart-outline\" style=\"padding-left: 15.4px; padding-right: 15.4px;\"></ion-icon>\n            <ion-icon name=\"add-circle\" style=\"font-size: 1.3rem; position: absolute; right: 5px;\"></ion-icon>\n          </ion-button>\n        </div>\n\n        <div *ngIf=\"pv['current_stock_level']-amountInShoppingBag(pv) <= 0\" class=\"size-button\">\n          <ion-button expand=\"block\" color=\"cta\" (click)=\"createFutureReservation(pv)\">\n            <ion-icon slot=\"icon-only\" name=\"mail-outline\"></ion-icon>\n          </ion-button>\n        </div>\n\n        <div class=\"size-button\">\n          <ion-button (click)=\"toggleWishlist(pv)\" fill=\"clear\" color=\"secondary\" style=\"font-size: 0.8rem; --padding-start: 3px; --padding-end: 3px;\" [disabled]=\"!authService.isAuthenticated()\">\n            <ion-icon style=\"font-size: 2.0rem;\" slot=\"icon-only\" [name]=\"onWishlist(pv) ? 'heart' : 'heart-outline'\" [ngStyle]=\"{ 'color': onWishlist(pv) ? 'var(--ion-color-danger)' : 'var(--ion-color-secondary)' }\"></ion-icon>\n          </ion-button>\n        </div>\n\n      </div>\n\n      <ion-button color=\"secondary\" expand=\"block\" fill=\"outline\" (click)=\"openFitAssistant()\">\n        <ion-icon slot=\"start\" name=\"help-circle-outline\"></ion-icon>\n        <div class=\"r-h2\">Pasvorm assistent</div>\n      </ion-button>\n\n    </div>\n\n    <div style=\"margin-top: 35px;\">\n      <p class=\"ion-text-center r-h3\">Winkel je graag in een van onze winkels? Reserveer direct dit product en kom het\n        passen in een van de winkels!</p>\n      <ion-button color=\"secondary\" expand=\"block\" fill=\"outline\" (click)=\"goToStoreStock()\">\n        <ion-icon slot=\"start\" name=\"home-outline\"></ion-icon>\n        <div class=\"r-h2\">Bekijk winkelvoorraad</div>\n      </ion-button>\n    </div>\n\n  </div>\n\n</div>","import { Component, OnInit, Input } from '@angular/core';\nimport { PopoverController, AlertController } from '@ionic/angular';\nimport { Router } from '@angular/router';\nimport { AuthService } from '../../../services/auth.service';\n\n@Component({\n  selector: 'lib-header-dropdown',\n  templateUrl: './header-dropdown.component.html',\n  styleUrls: ['./header-dropdown.component.scss']\n})\nexport class HeaderDropdownComponent implements OnInit {\n\n  @Input() page;\n\n  constructor(\n    public popoverCtrl: PopoverController,\n    public router: Router,\n    public authService: AuthService,\n    public alertCtrl: AlertController\n  ) { }\n\n  ngOnInit(): void {\n    \n  }\n\n  public navigateToPage(child) {\n    this.popoverCtrl.dismiss({\n      url: child.url\n    });\n  }\n\n  public checkActive(child) {\n    return '/'+child.url === this.router.url;\n  }\n\n  public async logout() {\n\n    this.popoverCtrl.dismiss();\n    const alert = await this.alertCtrl.create({\n      header: 'Uitloggen',\n      message: 'Weet je zeker dat je wilt uitloggen?',\n      buttons: [\n        {\n          text: 'Annuleer',\n          role: 'cancel'\n        },\n        {\n          text: 'Uitloggen',\n          role: 'logout',\n          handler: () => {\n            this.authService.logOut(this.authService.getCurrentUser()).then((val) => {\n\n            });\n          }\n        }\n      ]\n    });\n    await alert.present();\n\n  }\n\n}\n","<ion-list>\n    <ng-container *ngFor=\"let child of page.children\">\n        <ion-item (click)=\"navigateToPage(child)\" *ngIf=\"child.auth === 0 || (child.auth === 1 && authService.isAuthenticated()) || (child.auth === -1 && !authService.isAuthenticated())\">\n            <ion-icon slot=\"start\" [name]=\"child.icon\" color=\"secondary\" style=\"font-size: 1.2rem;\"></ion-icon>\n            <ion-label class=\"submenu-container ion-text-wrap\" style=\"margin: 0; cursor: pointer;\" [ngClass]=\"checkActive(child) ? 'header-item-active' : ''\">{{ child.title }}</ion-label>\n        </ion-item>\n    </ng-container>\n    <ng-container *ngIf=\"page.showLogOut && authService.isAuthenticated()\">\n        <ion-item (click)=\"logout()\">\n            <ion-icon slot=\"start\" name=\"log-out\" color=\"secondary\" style=\"font-size: 1.2rem;\"></ion-icon>\n            <ion-label class=\"submenu-container ion-text-wrap\" style=\"margin: 0; cursor: pointer;\">\n                Uitloggen\n            </ion-label>\n        </ion-item>\n    </ng-container>\n</ion-list>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { Outfit } from '../../../models/outfit';\nimport { OutfitService } from '../../../services/outfit.service';\nimport { CoreService } from '../../../services/core.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\nimport { lastValueFrom, Subscription } from 'rxjs';\nimport { CartService } from '../../../services/cart.service';\nimport { WishlistService } from '../../../services/wishlist.service';\nimport { AlertController } from '@ionic/angular';\n\n@Component({\n  selector: 'rope-product-container',\n  templateUrl: './product-container.component.html',\n  styleUrls: ['./product-container.component.scss'],\n})\nexport class ProductContainerComponent implements OnInit {\n\n  @Input() public outfit;\n  @Input() public showSoldOut = false;\n  @Input() public showLikeButton = true;\n  @Input() public onlyPreorders = false;\n  @Input() public height;\n  @Input() public maxLengthDescription;\n\n  @Output() public navigateToShopDetail = new EventEmitter();\n\n  public category;\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  constructor(\n    private outfitService: OutfitService,\n    private coreService: CoreService,\n    private wishlistService: WishlistService,\n    private screensizeService: ScreensizeService,\n    public cartService: CartService,\n    public alertCtrl: AlertController\n  ) { }\n\n  ngOnInit() {\n    \n    this.category = this.outfit.outfit_type;\n    this.screensizeObserver = this.screensizeService.isDesktopView().subscribe(isDesktop => {\n      this.isDesktop = isDesktop;\n    });\n\n    let pvsString = this.outfit.custom_fields ? this.outfit.custom_fields.product_variant_ids_with_sizes : undefined;\n    if (!pvsString) {\n      pvsString = '';\n    }\n\n    const pvs = pvsString.split(',');\n    for (let pv of pvs) {\n      \n      const pvId = +pv.split('-')[0];\n      const onWishlist = this.wishlistService.check({ id: pvId });\n      this.outfit['on_wishlist'] = onWishlist;\n\n      if (onWishlist) {\n        this.outfit['wishlist_product_variant_id'] = pvId;\n        break;\n      }\n\n    }\n\n  }\n\n  ngOnDestroy() {\n    if (this.screensizeObserver) {\n      this.screensizeObserver.unsubscribe();\n    }\n  }\n\n  public getImage(outfit: Outfit) {\n    if (outfit.medias && outfit.medias.length > 0) {\n      return outfit.medias.sort((a, b) => a.sort_index - b.sort_index)[0].url;\n    } else if (outfit.outfit_mediasets && outfit.outfit_mediasets.length > 0) {\n      return outfit.outfit_mediasets.filter(om => om.outfit_mediaset_category.id === this.outfitService.outfitMediasetCategoryId)[0].medias.sort((a, b) => a.sort_index - b.sort_index)[0].url;\n    }\n  }\n\n  public goToShopDetail(outfit: Outfit) {\n    this.navigateToShopDetail.emit(outfit);\n  }\n\n  public getPromoDiscountPriceForProduct() {\n\n    if (!this.outfit.custom_fields) {\n      return undefined;\n    }\n\n    const promocode = this.cartService.getPromoCode();\n    if (!promocode) {\n      return 0.00;\n    }\n\n    if (promocode['excluded_options']) {\n      const optionsArr = JSON.parse(promocode['excluded_options']);\n      const excludedOutfit = this.outfit.outfit_filters.find(ol => optionsArr.indexOf(ol.option.id) != -1);\n      if (excludedOutfit) {\n        return undefined;\n      }\n    }\n\n    if (promocode['exclude_sale']) {\n      if (+this.outfit.custom_fields.min_discount_price) {\n        return undefined;\n      }\n    }\n\n    const subtotal = +this.outfit.custom_fields.min_discount_price ? +this.outfit.custom_fields.min_discount_price : +this.outfit.custom_fields.min_product_price;\n    const num = (subtotal) * (1-promocode.amount);\n    return Math.round(num * 100) / 100;\n\n  }\n\n  public getPreorderHours(outfit: Outfit) {\n    let product = outfit['products'].filter(p => p.product_preorders && p.product_preorders.length > 0)[0];\n    let timestampEnd = product.product_preorders[0].timestamp_end;\n    let hours = Math.floor(Math.abs(timestampEnd - (new Date().getTime())) / 36e5);\n    return hours;\n  }\n\n  public getPreorderMinutes(outfit: Outfit) {\n    let product = outfit['products'].filter(p => p.product_preorders && p.product_preorders.length > 0)[0];\n    let timestampEnd = product.product_preorders[0].timestamp_end;\n    let minutes = Math.floor((Math.abs(timestampEnd - (new Date().getTime())) % 36e5) / 36e5 * 60);\n    return minutes;\n  }\n\n  public getPreorderDeliveryDate(outfit: Outfit) {\n    let product = outfit['products'].filter(p => p.product_preorders && p.product_preorders.length > 0)[0];\n    let timestampDelivery = product.product_preorders[0].timestamp_delivery;\n    return timestampDelivery;\n  }\n\n  public getOutfitDescription(outfit) {\n    const maxLength = this.maxLengthDescription || 25;\n    if (outfit.description && outfit.description.length > maxLength) {\n      return outfit.description.slice(0, maxLength - 1) + '...';\n    } else {\n      return outfit.description;\n    }\n\n  }\n\n  public async toggleWishlist(outfit: Outfit) {\n\n    if (outfit['on_wishlist']) {\n\n      const pvId = outfit['wishlist_product_variant_id'];\n      \n      await lastValueFrom(this.wishlistService.remove({ id: pvId }));\n      outfit['wishlist_product_variant_id'] = undefined;\n      outfit['on_wishlist'] = false;\n\n    } else {\n\n      const sizeInputs = [];\n      let pvsString = this.outfit.custom_fields.product_variant_ids_with_sizes;\n      if (!pvsString) {\n        pvsString = '';\n      }\n      const pvs = pvsString.split(',');\n      for (let pv of pvs) {\n\n        const pvId = +pv.split('-')[0];\n        const sizeName = pv.split('-')[1];\n\n        sizeInputs.push({\n          name: 'radio1',\n          type: 'radio',\n          label: 'Maat '+sizeName,\n          value: ''+pvId,\n        });\n\n      }\n\n      const alert = await this.alertCtrl.create({\n        header: 'Toevoegen aan wishlist',\n        message: 'Welke maat wil je op de wishlist zetten?',\n        cssClass: 'warning-alert',\n        inputs: sizeInputs,\n        buttons: [\n          {\n            text: 'Annuleer',\n            role: 'cancel',\n          }, {\n            text: 'Oke',\n          }\n        ],\n      });\n\n      alert.onDidDismiss().then(async d => {\n\n        if (d.data && d.data.values && (!d.role || (d.role && d.role !== 'cancel'))) {\n\n          const pvId = Number(d.data.values);\n          await lastValueFrom(this.wishlistService.add({ id: pvId }));\n          outfit['wishlist_product_variant_id'] = pvId;\n          outfit['on_wishlist'] = true;\n\n        }\n        \n      });\n\n      await alert.present();\n\n    }\n\n  }\n\n  public likeOutfit(outfit: Outfit) {\n\n    if (outfit['disable_like']) {\n      return;\n    }\n\n    outfit['disable_like'] = true;\n    this.outfitService.postLike(outfit.id).subscribe(r => {\n\n      outfit.likes = r['likes'];\n      setTimeout(() => {\n        outfit['disable_like'] = false;\n      }, 750);\n\n    }, error => {\n      outfit['disable_like'] = false;\n      this.coreService.showAlert(error);\n    });\n\n  }\n\n}\n","<div>\n\n  <div class=\"outfit-container\" style=\"cursor:pointer\">\n\n    <div style=\"position: relative; overflow: hidden; margin-bottom: 2px; border-radius: 10px;\">\n      \n      <img \n        (click)=\"goToShopDetail(outfit)\" \n        [src]=\"outfit.mainMediaUrl ? outfit.mainMediaUrl : (outfit.main_media_url ? outfit.main_media_url : getImage(outfit))\" \n        class=\"webshop-item-container-n-ion-img\" \n        draggable=\"false\" \n        [ngClass]=\"(!isDesktop) ? 'webshop-item-container-n-notdesktop' : ''\"\n        [ngStyle]=\"{ 'height': height ? height+'px' : '465px' }\"\n        loading=\"lazy\"\n      >\n\n      <ng-container>\n        \n        <ion-chip *ngIf=\"cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct() !== undefined\" color=\"secondary\" class=\"tag\" style=\"background-color: rgba(247, 227, 230, 0.5);\">\n          <ion-icon style=\"font-size: 1.0rem;\" name=\"pricetag-outline\"></ion-icon>\n          <div style=\"font-family: var(--normal-font) !important; font-size: var(--h3-font-size) !important; font-weight: 700;\">{{ -cartService.getPromoCodeActive().amount | percent }}</div>\n        </ion-chip>\n\n        <ion-chip *ngIf=\"outfit['new_tag'] && !(cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct() !== undefined)\" color=\"secondary\" class=\"tag\" style=\"background-color: rgba(247, 227, 230, 0.5);\">\n          <ion-icon style=\"font-size: 1.0rem;\" name=\"star-outline\"></ion-icon>\n          <div style=\"font-family: var(--normal-font) !important; font-size: var(--h3-font-size) !important;\">Nieuw</div>\n        </ion-chip>\n\n        <ion-chip *ngIf=\"outfit['fire_tag']\" color=\"warning\" class=\"tag\" style=\"background-color: rgba(247, 227, 230, 0.5); top: 65% !important;\">\n          <ion-icon style=\"font-size: 1.0rem;\" name=\"flame-outline\"></ion-icon>\n          <div style=\"font-family: var(--normal-font) !important; font-size: var(--h3-font-size) !important;\">On fire</div>\n        </ion-chip>\n\n        <div *ngIf=\"outfit['promotion_discount_tag']\" class=\"tag tag-promo-discount promotion-discount-tag\" [ngClass]=\"isDesktop ? 'tag-desktop' : 'tag-mobile'\">{{ outfit['promotion'] }}</div>\n\n      </ng-container>\n\n      <div *ngIf=\"outfit.custom_fields?.total_stock_level <= 0 && showSoldOut\" class=\"sold-out-banner\" [ngClass]=\"isDesktop ? 'sob-desktop' : 'sob-mobile'\">\n        UITVERKOCHT\n      </div>\n\n    </div>\n\n    <div style=\"display: flex; justify-content: space-between; align-items: center; width: 100%;\">\n      \n      <div (click)=\"goToShopDetail(outfit)\">\n        <div class=\"webshop-item-bottom-n\">\n          <div class=\"outfit-title r-h3 r-text-color-light\">\n            {{ outfit.name.toLowerCase() }}\n          </div>\n          <div class=\"outfit-desc r-h3 r-text-color-light\">\n            {{ getOutfitDescription(outfit) }}\n          </div>\n          <div>\n\n            <div *ngIf=\"outfit.price && outfit.custom_fields\" class=\"webshop-item-outfit-price\">\n\n              <ng-container *ngIf=\"+outfit.custom_fields.number_of_products === 1\">\n                <ng-container *ngIf=\"+outfit.custom_fields.min_discount_price && !(cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct() !== undefined)\">\n                  <div style=\"display: flex; justify-content: flex-start; align-items: center;\">\n                    <div style=\"text-decoration: line-through;\">\n                      {{ +outfit.custom_fields.min_product_price | currency:'EUR':'symbol' }}\n                    </div>\n                    <div style=\"margin-left: 14px; color: var(--ion-color-danger);\">\n                      {{ +outfit.custom_fields.min_discount_price | currency:'EUR':'symbol' }}\n                    </div>\n                  </div>\n                </ng-container>\n                <ng-container *ngIf=\"cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct() !== undefined\">\n                  <div style=\"display: flex; justify-content: flex-start; align-items: center;\">\n                    <div style=\"text-decoration: line-through;\">\n                      {{ +outfit.custom_fields.min_product_price | currency:'EUR':'symbol' }}\n                    </div>\n                    <div style=\"margin-left: 14px;\" class=\"promo-price\">\n                      Nu: {{ getPromoDiscountPriceForProduct() | currency:'EUR':'symbol' }}\n                    </div>\n                  </div>\n                </ng-container>\n                <ng-container *ngIf=\"!(+outfit.custom_fields.min_discount_price) && !(cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct() !== undefined)\">\n                  {{ outfit.price | currency:'EUR':'symbol' }}\n                </ng-container>\n              </ng-container>\n\n              <ng-container *ngIf=\"+outfit.custom_fields.number_of_products > 1\">\n                <div *ngIf=\"!(cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct() !== undefined)\">\n                  vanaf {{ +outfit.custom_fields.min_product_price | currency:'EUR':'symbol' }}\n                </div>\n                <div *ngIf=\"cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct() !== undefined\">\n                  <span  class=\"promo-price\">Nu vanaf: {{ getPromoDiscountPriceForProduct() | currency:'EUR':'symbol' }}</span>\n                </div>\n              </ng-container>\n\n            </div>\n\n            <div *ngIf=\"outfit.price && !outfit.custom_fields\" class=\"webshop-item-outfit-price\">\n              {{ outfit.price | currency:'EUR':'symbol' }}\n            </div>\n\n          </div>\n        </div>\n      </div>\n      <div *ngIf=\"showLikeButton && outfit.custom_fields && outfit.custom_fields.number_of_products && +outfit.custom_fields.number_of_products === 1\"\n        style=\"display: flex; justify-content: center; align-items: space-between; margin-right: 5px;\">\n\n        <div style=\"display: flex; justify-content: center; align-items: center; flex-direction: column; margin-right: 7px;\">\n          <ion-icon (click)=\"likeOutfit(outfit)\" [name]=\"outfit.disable_like ? 'happy' : 'happy-outline'\"\n            style=\"font-size: 2.0rem; cursor: pointer;\"\n            [ngStyle]=\"{ 'color': outfit.disable_like ? 'var(--ion-color-cta)' : 'rgb(184, 184, 184)' }\"></ion-icon>\n          <div class=\"r-h3\" style=\"color: rgb(184, 184, 184);\">{{ outfit.likes }}</div>\n        </div>\n        <ion-icon (click)=\"toggleWishlist(outfit)\" [name]=\"outfit.on_wishlist ? 'heart' : 'heart-outline'\" style=\"font-size: 2.0rem; cursor: pointer;\" [ngStyle]=\"{ 'color': outfit.on_wishlist ? 'var(--ion-color-danger)' : 'var(--ion-color-secondary)' }\"></ion-icon>\n      </div>\n    </div>\n  </div>\n\n</div>\n\n<div *ngIf=\"onlyPreorders\" class=\"ion-text-center ion-text-wrap\"\n  style=\"margin-top: 4px; font-family: 'Source Sans Pro', sans-serif; font-size: 1.4rem;\">\n  Nog {{ getPreorderHours(outfit) }} uur en {{ getPreorderMinutes(outfit) }} min om te bestellen\n  <br><b>Levering vanaf {{ getPreorderDeliveryDate(outfit) | date:'shortDate' }}</b>\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { PopoverController } from '@ionic/angular';\nimport { BehaviorSubject } from 'rxjs';\n\n@Component({\n  selector: 'rope-search-results',\n  templateUrl: './search-results.component.html',\n  styleUrls: ['./search-results.component.scss']\n})\nexport class SearchResultsComponent implements OnInit {\n\n  @Input() public hits: BehaviorSubject<any>;\n\n  public queryID;\n  public query;\n  public suggestions = [];\n  public hhits = [];\n\n  constructor(\n    public popoverController: PopoverController\n  ) { }\n\n  ngOnInit(): void {\n\n    this.hits.subscribe(r => {\n      if (r.source !== 'RESULTS') {\n        this.queryID = r.queryID;\n        this.query = r.query;\n        this.suggestions = r.suggestions.filter(s => s.query !== this.query).slice(0,7);\n        this.hhits = r.hits.slice(0, this.suggestions.length > 0 ? 4 : 5);\n      }\n    });\n\n  }\n\n  ngOnDestroy() {\n    this.hits.unsubscribe();\n  }\n\n  public chooseSuggestion(suggestion) {\n    this.hits.next({\n      source: 'RESULTS',\n      query: suggestion.query\n    });\n  }\n\n  public goToShopDetail(hit) {\n    this.popoverController.dismiss({\n      navigateToProduct: hit,\n      queryID: this.queryID\n    });\n  }\n\n  public showMoreResults() {\n    this.popoverController.dismiss({\n      navigateToSearch: true\n    });\n  }\n\n}\n","<ion-grid style=\"--ion-grid-columns: 24\">\n    <ion-row>\n        <ion-col size=\"4\" *ngIf=\"suggestions.length > 0\">\n            <ion-list>\n                <ion-item *ngFor=\"let suggestion of suggestions\" detail=\"true\" style=\"cursor: pointer;\" (click)=\"chooseSuggestion(suggestion)\">\n                    <ion-label>\n                        <div class=\"r-h3\">{{ suggestion.query }}</div>\n                    </ion-label>\n                </ion-item>\n            </ion-list>\n        </ion-col>\n        <ion-col size=\"4\" *ngFor=\"let hit of hhits\">\n            <rope-product-container\n                (click)=\"goToShopDetail(hit)\"\n                [outfit]=\"hit\"\n                [height]=\"300\"\n            ></rope-product-container>\n        </ion-col>\n        <ion-col size=\"4\" *ngIf=\"hhits && hhits.length > 0\">\n            <ion-button expand=\"block\" color=\"secondary\" fill=\"clear\" (click)=\"showMoreResults()\" style=\"height: 100%;\">\n                <div class=\"r-h2\">\n                    Bekijk<br>\n                    meer<br>\n                    resultaten<br>\n                    <ion-icon style=\"color: black; font-size: 2.3rem; margin-top: 5px;\" name=\"arrow-forward-circle-outline\"></ion-icon>\n                </div>\n            </ion-button>\n        </ion-col>\n        <ion-col size=\"4\" *ngIf=\"!hhits || hhits.length === 0\">\n            <ion-label class=\"r-h2\">Geen resultaten gevonden</ion-label>\n        </ion-col>\n    </ion-row>\n</ion-grid>\n","import { Injectable } from '@angular/core';\nimport { CoreService } from './core.service';\nimport { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\nimport { AuthService } from './auth.service';\nimport { Observable } from 'rxjs';\nimport { Order } from '../models/order';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class OrderService {\n\n  constructor(\n    private coreService: CoreService,\n    private http: HttpClient,\n    private authService: AuthService\n  ) { }\n\n  public getReturnReasons() {\n\n    const headers: HttpHeaders = this.coreService.getHeaders();\n    const requestOptions = {\n      headers: headers\n    };\n\n    return this.http.get<any>(this.coreService.getBaseUrl() + 'return/reason/get', requestOptions);\n\n  }\n\n  public getReturnPickupDates() {\n\n    const headers: HttpHeaders = this.coreService.getHeaders();\n    const requestOptions = {\n      headers: headers\n    };\n\n    return this.http.get<any>(this.coreService.getBaseUrl() + 'return/pickup_dates', requestOptions);\n\n  }\n\n  public getOrders(): Observable<Order[]> {\n\n    const params: HttpParams = new HttpParams()\n    .set('get_transaction_line', '1')\n    .set('get_payment', '1')\n    .set('get_shipment', '1')\n    .set('get_return', '1')\n    .set('get_branch', '1')\n    .set('get_employee', '1');\n\n    const headers: HttpHeaders = this.coreService.getHeaders()\n    .set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n\n    const requestOptions = {\n      params: params,\n      headers: headers\n    };\n\n    return this.http.get<Order[]>(this.coreService.getBaseUrl() + 'transaction/get', requestOptions);\n\n  }\n\n  public getOpenOrder(): any {\n\n    const headers: HttpHeaders = this.coreService.getHeaders()\n      .set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n\n    const requestOptions = {\n      headers: headers\n    };\n\n    return this.http.get<any>(this.coreService.getBaseUrl() + 'transaction/open', requestOptions);\n\n  }\n\n  public cancelOrder(transactionId): any {\n\n    const headers: HttpHeaders = this.coreService.getHeaders()\n      .set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n\n    const params: HttpParams = new HttpParams().set('transaction_id', transactionId);\n\n    const requestOptions = {\n      headers: headers,\n      params: params\n    };\n\n    return this.http.get<any>(this.coreService.getBaseUrl() + 'transaction/cancel', requestOptions);\n\n  }\n\n  public getOne(orderId, authKey?): Observable<Order[]> {\n\n    const params: HttpParams = new HttpParams()\n    .set('get_transaction_line', '1')\n    .set('get_payment', '1')\n    .set('get_shipment', '1')\n    .set('get_return', '1')\n    .set('get_branch', '1')\n    .set('get_employee', '1')\n    .set('transaction_id', orderId);\n\n    let headers: HttpHeaders = this.coreService.getHeaders();\n    if (authKey) {\n      headers = headers.set('X-RopeRetail-TempKey', authKey);\n    } else {\n      headers = headers.set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n    }\n\n    const requestOptions = {\n      params: params,\n      headers: headers\n    };\n\n    return this.http.get<Order[]>(this.coreService.getBaseUrl() + 'transaction/get', requestOptions);\n\n  }\n\n\n\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { AlertController } from '@ionic/angular';\nimport { CartService } from '../../../services/cart.service';\nimport { CoreService } from '../../../services/core.service';\n\n@Component({\n  selector: 'rope-promo-banner',\n  templateUrl: './promo-banner.component.html',\n  styleUrls: ['./promo-banner.component.scss']\n})\nexport class PromoBannerComponent implements OnInit {\n\n  @Input() public isDesktop;\n  @Input() public promoBanner;\n\n  @Output() public navigate = new EventEmitter();\n\n  public isDismissed = false;\n\n  constructor(\n    public cartService: CartService,\n    public coreService: CoreService,\n    public alertCtrl: AlertController\n  ) { }\n\n  ngOnInit(): void {\n    if (this.isDesktop) {\n      this.promoBanner.text = this.promoBanner.text.replace('<br>', '');\n    }\n  }\n\n  public doHref() {\n    if (this.promoBanner.href) {\n      this.navigate.emit(this.promoBanner.href);\n    }\n  }\n\n  public async addPromoCode(promoCode) {\n    \n    let alert = await this.alertCtrl.create({\n      header: 'Code '+promoCode.code+' toevoegen',\n      subHeader: 'De code wordt al toegevoegd aan je winkelwagen.',\n      message: 'Door het toevoegen van de code worden al de prijzen op de site al voor je aangepast. Wel zo handig!',\n      buttons: [\n        'Oké!'\n      ]\n    });\n    alert.onDidDismiss().then(() => {\n      this.cartService.setPromoCode(promoCode);\n    });\n\n    await alert.present();\n\n  }\n\n}\n","<div class=\"banner-container\" *ngIf=\"promoBanner && !coreService.promoBannerDismissed\" [ngStyle]=\"{ 'background-color': promoBanner.color ? promoBanner.color : 'var(--ion-color-secondary)', 'cursor': promoBanner.href ? 'pointer' : 'default' }\" (click)=\"doHref()\">\n    <div class=\"inner-container\">\n        <div class=\"promo-text\" [innerHTML]=\"promoBanner.text\"></div>\n        <div *ngIf=\"promoBanner.action && promoBanner.action === 'ADD_PROMOCODE'\">\n            <ion-button *ngIf=\"!cartService.getPromoCodeActive()\" class=\"action-btn\" color=\"warning\" (click)=\"addPromoCode(promoBanner.promocode)\">\n                <ion-icon name=\"add-outline\" slot=\"start\"></ion-icon>\n                Voeg '{{ promoBanner.promocode.code }}' toe\n            </ion-button>\n            <ion-button *ngIf=\"cartService.getPromoCodeActive()\" class=\"action-btn\" color=\"warning\" readonly=\"true\">\n                <ion-icon name=\"checkmark-circle\" slot=\"start\" style=\"color: black;\"></ion-icon>\n                <div style=\"color: black;\">'{{ promoBanner.promocode.code }}' toegepast</div>\n            </ion-button>\n        </div>\n        <ion-button *ngIf=\"promoBanner.is_dismissable\" fill=\"clear\" shape=\"round\" (click)=\"coreService.promoBannerDismissed = true;\" size=\"small\">\n            <ion-icon slot=\"icon-only\" name=\"close-circle-outline\"></ion-icon>\n        </ion-button>\n    </div>\n</div>","import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { CartService } from '../../../services/cart.service';\nimport { WishlistService } from '../../../services/wishlist.service';\nimport { OrderService } from '../../../services/order.service';\nimport { Router } from '@angular/router';\nimport { AuthService } from '../../../services/auth.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\nimport { CoreService } from '../../../services/core.service';\nimport { IonHeader, MenuController, PopoverController } from '@ionic/angular';\nimport { HeaderDropdownComponent } from '../header-dropdown/header-dropdown.component';\nimport { BranchService } from '../../../services/branch.service';\nimport { ChatService } from '../../../services/chat.service';\nimport { BehaviorSubject, Subject, Subscription, first, lastValueFrom, tap, timer } from 'rxjs';\nimport { OutfitService } from '../../../services/outfit.service';\nimport { SearchResultsComponent } from '../../misc/search-results/search-results.component';\n// import { SearchResponse } from 'instantsearch.js/es/types';\nimport { AnalyticsService } from '../../../services/analytics.service';\n\n@Component({\n  selector: 'rope-header',\n  templateUrl: './header.component.html',\n  styleUrls: ['./header.component.scss'],\n})\nexport class HeaderComponent implements OnInit {\n\n  @ViewChild(IonHeader) header: IonHeader;\n  @ViewChild('textSlider') textSlider;\n\n  @Input() mode: string;\n  @Input() title: string;\n  @Input() titleClass: string;\n\n  @Input() defaultHref: string;\n\n  @Input() useSearch: boolean;\n  @Input() useWishlist: boolean;\n  @Input() useShoppingBag: boolean;\n\n  @Input() clearCondition: boolean;\n  @Input() notifyOnOpenOrder: boolean = true;\n  \n  @Output() clearAction: EventEmitter<any> = new EventEmitter();\n  @Output() navigate = new EventEmitter<String>();\n  @Output() navigateToHome = new EventEmitter();\n  @Output() navigateToSearch = new EventEmitter();\n  @Output() navigateToWishlist = new EventEmitter();\n  @Output() navigateToCart = new EventEmitter();\n  @Output() navigateToOpenOrderPayment = new EventEmitter();\n\n  @Output() modalOnlineShopping = new EventEmitter();\n\n  public openOrderPresent = false;\n  public openOrder;\n\n  public openingStatus;\n\n  public isDesktop;\n  public desktopPages;\n\n  public chatSubscriber: Subscription;\n  public numberOfUnreadChats = 0;\n  public chatStarted = false;\n\n  public promoBanner;\n\n  public textSliderTimer: Subscription;\n  public usps = [];\n  public currentUsp;\n\n  public simpleView = false;\n\n  constructor(\n    public cartService: CartService,\n    public chatService: ChatService,\n    public analyticsService: AnalyticsService,\n    public screensizeService: ScreensizeService,\n    public coreService: CoreService,\n    public wishlistService: WishlistService,\n    public popoverController: PopoverController,\n    public branchService: BranchService,\n    public orderService: OrderService,\n    public outfitService: OutfitService,\n    public authService: AuthService,\n    public menuCtrl: MenuController,\n    public router: Router\n  ) { }\n\n  async ngOnInit() {\n\n    this.screensizeService.isDesktopView().subscribe(isDesktop => {\n      this.isDesktop = isDesktop;\n    });\n\n    await lastValueFrom(this.coreService.initObjectLoaded.asObservable().pipe(first()));\n\n    let pages = this.coreService.getPages();\n    const extraDesktopPages = [];\n    for (let page of pages) {\n      for (let child of page.children) {\n        if (child.useInDesktopHeader === true) {\n          extraDesktopPages.push(child);\n        }\n        if (child.children && child.children.length > 0) {\n          for (let c of child.children) {\n            if (c.useInDesktopHeader === true && c.title) {\n              c.title = c.title.replace('Campagne: ', '');\n              extraDesktopPages.push(c);\n            }\n          }\n        }\n      }\n    }\n\n    const onlineBranch = this.coreService.getOnlineBranch();\n\n    const dayOfWeek = ((new Date().getDay() + 6) % 7) + 1;\n    const currentHour = new Date().getHours();\n    const currentMinute = new Date().getMinutes();\n    this.openingStatus = this.branchService.checkOpen(onlineBranch, dayOfWeek, currentHour, currentMinute);\n\n    pages = pages.filter((p) => p.useInDesktopHeader === true);\n    const desktopPages = pages.concat(extraDesktopPages);\n    desktopPages.sort((a, b) => a.desktopHeaderSortIndex - b.desktopHeaderSortIndex);\n\n    this.desktopPages = desktopPages;\n\n    if (this.notifyOnOpenOrder) {\n\n      const order = this.cartService.getCurrentOrder();\n      if (order.id && order.id !== 0 && this.authService.isAuthenticated()) {\n\n        //Probably an open order which is not paid\n        this.orderService.getOpenOrder().subscribe(r => {\n          if (r.status === '0') {\n            this.openOrderPresent = false;\n          } else {\n            this.openOrderPresent = true;\n            this.openOrder = r;\n          }\n        });\n\n      }\n\n    }\n\n    if (this.isDesktop) {\n\n      let unreadChatsCount: Subscription;\n      this.chatSubscriber = this.chatService.listenChatStarted().subscribe(started => {\n\n        this.chatStarted = started;\n\n        if (started && !unreadChatsCount) {\n          unreadChatsCount = this.chatService.listenToChatsUnread().subscribe(numberOfUnreadChats => {\n            if (numberOfUnreadChats === 1) {\n              this.numberOfUnreadChats = this.numberOfUnreadChats + numberOfUnreadChats;\n            } else {\n              this.numberOfUnreadChats = 0;\n            }\n          });\n        } else if (!started && unreadChatsCount) {\n          unreadChatsCount.unsubscribe();\n        }\n\n      });\n\n    }\n\n    if (!this.title) {\n      this.title = this.coreService.getMainTitle();\n    }\n\n    this.promoBanner = this.coreService.getPromoBanner();\n\n    this.usps = this.coreService.getUsps();\n    this.usps = this.usps\n      .map(value => ({ value, sort: Math.random() }))\n      .sort((a, b) => a.sort - b.sort)\n      .map(({ value }) => value);\n\n    let uspIndex = 0;\n    this.currentUsp = this.usps[uspIndex];\n    uspIndex++;\n\n    this.textSliderTimer = timer(7000, 8000).pipe(\n    tap(() => {\n\n      if (this.textSlider) {\n\n        this.textSlider.nativeElement.classList.remove('slide-in');\n        this.textSlider.nativeElement.classList.add('slide-out');\n        \n        setTimeout(() => {\n\n          if (this.usps[uspIndex] !== undefined) {\n            this.currentUsp = this.usps[uspIndex];\n            uspIndex++;\n          } else {\n            this.currentUsp = this.usps[0];\n            uspIndex = 1;\n          }\n\n          this.textSlider.nativeElement.classList.remove('slide-out');\n          this.textSlider.nativeElement.classList.add('slide-in');\n\n        }, 1000);\n\n      }\n\n    })).subscribe();\n\n    const routesForSimpleView = ['/shopping-bag', '/cart-summary', '/cart-do-payment', '/cart-check-payment', '/cart-payment-status' , '/cart-checkout'];\n    this.simpleView = routesForSimpleView.indexOf(this.router.url) !== -1;\n\n  }\n\n  ngOnDestroy() {\n    if (this.chatSubscriber) {\n      this.chatSubscriber.unsubscribe();\n    }\n    if (this.textSliderTimer) {\n      this.textSliderTimer.unsubscribe();\n    }\n  }\n\n  public showNotifyOnOpenOrder() {\n\n    const skippedRoutes = ['/shopping-bag', '/cart-summary', '/cart-do-payment', '/cart-check-payment', '/cart-payment-status', '/cart-checkout'];\n    const skip = skippedRoutes.indexOf(this.router.url) !== -1;\n\n    return !skip && this.openOrderPresent;\n\n  }\n\n  public checkChildActive(page) {\n    for (let child of page.children) {\n      if (!child.useInDesktopHeader && ('/'+child.url) === this.router.url) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  public async openMenu() {\n    if (! (await this.menuCtrl.isOpen())) {\n      this.menuCtrl.open();\n    }\n  }\n\n  public doNavigate(url: string) {\n    this.navigate.emit(url);\n  }\n\n  public async doSearch(event) {\n\n    const storeIdentifier = this.coreService.store.store_identifier;\n    const searchClient = await this.outfitService.getSearchClient();\n    const index = searchClient.initIndex(storeIdentifier+'_outfit');\n    const suggestionsIndex = searchClient.initIndex(storeIdentifier+'_outfit_query_suggestions');\n\n    const user = this.authService.getCurrentUser();\n    const userToken = await this.analyticsService.getAlgoliaUserToken(user);\n\n    const query = event.detail.value;\n    this.searchQuery = query;\n\n    if (!query || query.length === 0) {\n      this.searchPopover.dismiss();\n      return;\n    }\n\n    if (this.searchHits.closed) {\n      this.searchHits = new BehaviorSubject<any>([]);\n    }\n\n    const p1 = suggestionsIndex.search(query);\n    const p2 = index.search(query, {\n      clickAnalytics: true,\n    });\n\n    Promise.all([p1, p2]).then(r => {\n\n\n      //TODO\n      // const queryID = (r[1] as SearchResponse<any>).queryID;\n\n      // const suggestions = (r[0] as SearchResponse<any>).hits;\n      // const hits = (r[1] as SearchResponse<any>).hits;\n\n      // this.searchHits.next({\n      //   source: 'INPUT',\n      //   queryID: queryID,\n      //   query: query,\n      //   suggestions: suggestions,\n      //   hits: hits\n      // });\n\n      // this.showSearchResults(event, query);\n\n    });\n\n  }\n\n  public searchQuery;\n  public searchPopover;\n  public searchHits = new BehaviorSubject<any>([]);\n  public searchPopoverShowing = false;\n  public async showSearchResults(ev, query) {\n\n    if (this.searchPopoverShowing) {\n      return;\n    }\n    this.searchPopoverShowing = true;\n\n    this.searchPopover = await this.popoverController.create({\n      component: SearchResultsComponent,\n      componentProps: {\n        hits: this.searchHits\n      },\n      cssClass: 'search-popover',\n      animated: true,\n      event: ev,\n      translucent: true,\n      showBackdrop: true,\n      keyboardClose: false\n    });\n\n    this.searchHits.subscribe(r => {\n      if (r.source === 'RESULTS') {\n        this.searchQuery = r.query;\n      }\n    });\n\n    this.searchPopover.onDidDismiss().then((d) => {\n      this.searchPopoverShowing = false;\n      if (d && d.data && d.data.navigateToProduct) {\n        this.navigate.emit('/shop/basics/'+d.data.navigateToProduct.id+'?queryID='+d.data.queryID);\n      }\n      if (d && d.data && d.data.navigateToSearch) {\n        this.navigate.emit('/webshop-search?q='+this.searchQuery);\n      }\n      this.searchHits.unsubscribe();\n    });\n\n    await this.searchPopover.present();\n\n  }\n\n  public home() {\n    this.navigate.emit('/home');\n  }\n\n  public searching() {\n    this.navigateToSearch.emit();\n  }\n\n  public wishlist() {\n    this.navigateToWishlist.emit();\n  }\n\n  public shoppingBag() {\n    this.navigateToCart.emit();\n  }\n\n  public navigateToShop() {\n    this.navigate.emit('/shop/basics');\n  }\n\n  public goToOpenOrderPayment() {\n    this.navigateToOpenOrderPayment.emit();\n  }\n\n  public headerItemClick(page) {\n    if (page.children) {\n\n    } else {\n      this.doNavigate(page.url);\n    }\n  }\n\n  public openOnlineShopping(event) {\n    this.modalOnlineShopping.emit({\n      event: event,\n      isDesktop: this.isDesktop,\n    });\n  }\n\n  public async presentPopover(ev: any, page) {\n\n    if (!page.children) {\n      return;\n    }\n    ev.preventDefault();\n\n    const popover = await this.popoverController.create({\n      component: HeaderDropdownComponent,\n      componentProps: {\n        page: page\n      },\n      animated: false,\n      event: ev,\n      translucent: true,\n      showBackdrop: false\n    });\n\n    popover.onDidDismiss().then(r => {\n      if (r.data && r.data['url']) {\n        this.doNavigate(r.data['url']);\n      }\n    })\n\n    return await popover.present();\n\n  }\n\n}\n","<ion-header [ngClass]=\"isDesktop ? 'header-border' : ''\" #header>\n\n  <ion-toolbar color=\"tertiary\" [ngClass]=\"isDesktop ? 'top-bar-smaller' : ''\">\n\n    <ion-buttons slot=\"start\" *ngIf=\"!isDesktop && !simpleView\">\n      <div style=\"display: flex; align-items: center; justify-content: space-between;\" *ngIf=\"mode === 'root'\">\n        <ion-menu-button color=\"dark\"></ion-menu-button>\n        <div class=\"r-header-font menu-title\" (click)=\"openMenu()\">Menu</div>\n      </div>\n      <ion-back-button *ngIf=\"mode === 'forward'\" color=\"dark\" text=\"\" [defaultHref]=\"defaultHref\"></ion-back-button>\n    </ion-buttons>\n\n    <ion-buttons slot=\"start\" *ngIf=\"simpleView\">\n      <ion-button (click)=\"navigateToShop()\">\n        <ion-icon slot=\"start\" name=\"arrow-back-circle-outline\" style=\"font-size: 1.8rem !important; color: var(--ion-color-dark);\">\n        </ion-icon>\n        <div class=\"r-h3\">{{ isDesktop ? 'Verder winkelen' : 'Terug naar shop' }}</div>\n      </ion-button>\n    </ion-buttons>\n\n    <ion-buttons slot=\"start\" style=\"min-width: 300px;\" *ngIf=\"isDesktop && !simpleView\">\n\n      <ion-searchbar \n        *ngIf=\"useSearch\"\n        [(ngModel)]=\"searchQuery\"\n        (ionChange)=\"doSearch($event)\" \n        color=\"tertiary\" \n        debounce=\"500\"\n        placeholder=\"Waar ben je naar op zoek?\" \n        class=\"r-h3 searcher\" \n        searchIcon=\"search-outline\"\n      ></ion-searchbar>\n\n      <!-- <ion-button [disabled]=\"!useSearch\" (click)=\"searching()\" fill=\"solid\" shape=\"round\" color=\"tertiary\">\n        <ion-icon slot=\"icon-only\" name=\"search\" style=\"font-size: 1.8rem !important; color: var(--ion-color-dark);\">\n        </ion-icon>\n      </ion-button> -->\n\n      <!-- <ion-button fill=\"solid\" shape=\"round\" color=\"tertiary\" (click)=\"openOnlineShopping($event)\">\n        <ion-icon *ngIf=\"numberOfUnreadChats === 0\" slot=\"start\" name=\"people-circle-outline\" style=\"font-size: 1.8rem !important;\" [ngStyle]=\"{ 'color': chatStarted ? 'indianred' : 'var(--ion-color-dark)' }\">\n        </ion-icon>\n        <ion-badge *ngIf=\"numberOfUnreadChats > 0\" style=\"margin-right: 7px; color: indianred;\">\n          {{ numberOfUnreadChats }}\n        </ion-badge>\n        <div class=\"shopping-button\">\n          <div>Chat met ons</div>\n          <div class=\"opening-text\" *ngIf=\"openingStatus\">\n            <div>{{ chatStarted ? 'Aan het chatten' : openingStatus.headerData.text }}</div>\n            <ion-icon name=\"ellipse\" [color]=\"openingStatus.headerData.color\"></ion-icon>\n          </div>\n          <div class=\"opening-text\" *ngIf=\"!openingStatus\">\n            <div>Ophalen...</div>\n            <ion-icon name=\"ellipse\" color=\"warning\"></ion-icon>\n          </div>\n        </div>\n      </ion-button> -->\n    </ion-buttons>\n\n    <ion-title *ngIf=\"title\" [ngClass]=\"titleClass ? titleClass : (isDesktop ? 'normal-title-desktop' : 'normal-title')\" style=\"cursor: pointer; user-select: none;\" (click)=\"home()\">{{ title }}</ion-title>\n\n    <ion-buttons slot=\"end\">\n      <ion-button (click)=\"clearAction.emit()\" fill=\"solid\" shape=\"round\" *ngIf=\"clearCondition\" color=\"tertiary\">\n        <ion-icon style=\"font-size: 1.8rem !important; color: var(--ion-color-danger);\" slot=\"icon-only\" name=\"trash\"></ion-icon>\n      </ion-button>\n      <ion-button [disabled]=\"!useSearch\" *ngIf=\"!isDesktop && !simpleView\" (click)=\"searching()\" fill=\"solid\" shape=\"round\" color=\"tertiary\">\n        <ion-icon slot=\"icon-only\" name=\"search\" style=\"font-size: 1.8rem !important; color: var(--ion-color-dark);\"></ion-icon>\n      </ion-button>\n      <ion-button [disabled]=\"!useWishlist\" *ngIf=\"!simpleView\" (click)=\"wishlist()\" fill=\"solid\" shape=\"round\" color=\"tertiary\">\n        <ion-icon slot=\"start\" [name]=\"wishlistService.items.length > 0 ? 'heart' : 'heart-outline'\" style=\"font-size: 1.8rem !important;\" [ngStyle]=\"{ color: wishlistService.items.length > 0 ? 'var(--ion-color-danger)' : 'var(--ion-color-secondary)' }\"></ion-icon>\n        <ion-badge style=\"background-color: var(--ion-color-dark); color: var(--ion-color-light);\" slot=\"end\">{{ wishlistService.items.length }}\n        </ion-badge>\n      </ion-button>\n      <ion-button [disabled]=\"!useShoppingBag\" *ngIf=\"!simpleView\" (click)=\"shoppingBag()\" fill=\"solid\" shape=\"round\" color=\"tertiary\">\n        <ion-icon slot=\"start\" name=\"bag-handle-outline\" style=\"font-size: 1.8rem !important; color: var(--ion-color-dark);\"></ion-icon>\n        <ion-badge style=\"background-color: var(--ion-color-dark); color: var(--ion-color-light);\" slot=\"end\">{{ cartService.getTotalCount() }}</ion-badge>\n      </ion-button>\n    </ion-buttons>\n\n  </ion-toolbar>\n\n  <ion-toolbar *ngIf=\"isDesktop && desktopPages && !simpleView\" class=\"header-navigation-toolbar\" color=\"tertiary\">\n\n    <div class=\"desktop-header\">\n      <div class=\"ion-no-padding\" style=\"display: flex; justify-content: space-evenly; align-items: center; width: 100%;\">\n          <div class=\"header-item ion-no-padding\" *ngFor=\"let page of desktopPages\">\n            <div class=\"header-router-link\" *ngIf=\"page.children\" (click)=\"presentPopover($event, page)\" [ngClass]=\"checkChildActive(page) ? 'header-item-active' : ''\">\n              <div class=\"header-link\">\n                {{ page.title }}\n                <ion-icon name=\"arrow-down-outline\" color=\"secondary\"></ion-icon>\n              </div>\n            </div>\n            <div class=\"header-router-link\" *ngIf=\"!page.children\" [routerLink]=\"'/' + page.url\" [routerDirection]=\"'root'\" [routerLinkActive]=\"[page.url.startsWith('campaign') ? 'header-item-active-campaign' : 'header-item-active']\" [queryParams]=\"page.queryParams ? page.queryParams : undefined\">\n              <div class=\"header-link\" [ngClass]=\"page.explicit ? 'explicit-router-link' : (page.url.startsWith('campaign') ? 'lined-router-link' : '')\">\n                {{ page.title }}\n              </div>\n            </div>\n          </div>\n      </div>\n    </div>\n    \n  </ion-toolbar>\n\n  <ion-toolbar *ngIf=\"!simpleView && usps.length > 0 && !promoBanner && !showNotifyOnOpenOrder()\" style=\"--background: var(--ion-color-tertiary-shade); --padding-top: 2px; --padding-bottom: 2px; --min-height: 0px;\">\n    <ion-title class=\"ion-text-center r-h3\" style=\"padding-inline: 0px; text-transform: none !important;\">\n      <div #textSlider class=\"r-flex r-flex-h-center slide-in\" style=\"width: 100%; user-select: none;\">\n        <div class=\"r-flex r-flex-h-center r-flex-v-center\" style=\"width: fit-content;\">\n          <ion-icon [name]=\"currentUsp.icon\" style=\"margin-right: 8px;\"></ion-icon>\n          <div [innerHTML]=\"currentUsp.message\"></div>\n        </div>\n      </div>\n    </ion-title>\n  </ion-toolbar>\n\n  <ion-toolbar *ngIf=\"!simpleView && promoBanner && !showNotifyOnOpenOrder()\" style=\"--padding-top: 0px; --padding-bottom: 0px; --min-height: 0px;\">\n    <rope-promo-banner [isDesktop]=\"isDesktop\" [promoBanner]=\"promoBanner\" (navigate)=\"doNavigate($event)\"></rope-promo-banner>\n  </ion-toolbar>\n\n  <ion-toolbar *ngIf=\"showNotifyOnOpenOrder()\" color=\"warning\" style=\"--min-height: 40px;\" (click)=\"goToOpenOrderPayment()\">\n    <ion-title>\n      <ion-label class=\"ion-text-wrap\" style=\"font-family: 'Source Sans Pro'; font-size: 1.3rem;\">\n        Bestelling <b>#{{ openOrder.id }}</b> wacht op een betaling van {{ openOrder.total | currency:'EUR':'symbol' }}\n      </ion-label>\n    </ion-title>\n    <ion-buttons slot=\"end\">\n      <ion-button>\n        <ion-icon slot=\"icon-only\" name=\"arrow-forward-circle-outline\">\n        </ion-icon>\n      </ion-button>\n    </ion-buttons>\n  </ion-toolbar>\n\n</ion-header>","import { Injectable } from '@angular/core';\nimport { CoreService } from './core.service';\nimport { StorageService } from './storage.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class FavouriteService {\n\n  public isReady: Promise<boolean>;\n  public favourites: Array<any> = [];\n\n  constructor(\n    private coreService: CoreService,\n    private storageService: StorageService\n  ) {\n\n    this.isReady = this.storageService.get('favourites').then(favourites => {\n      if (favourites) {\n          this.favourites = favourites;\n      } else {\n          this.favourites = [];\n      }\n      return true;\n    });\n\n  }\n\n  public ready() {\n    return this.isReady;\n  }\n\n  public getAll() {\n    return this.favourites;\n  }\n\n  public saveFavourite(outfitId) {\n    this.favourites.push(outfitId);\n    this.storageService.set('favourites', this.favourites);\n  }\n\n  public removeFavourite(outfitId) {\n    this.favourites = this.favourites.filter(f => f !== outfitId);\n    this.storageService.set('favourites', this.favourites);\n  }\n\n  public clearAll() {\n    this.favourites = [];\n    return this.storageService.remove('favourites');\n  }\n\n  public checkFavourite(outfitId) {\n    return this.favourites.some(f => f === outfitId);\n  }\n\n  public getTotal() {\n    return this.favourites.length;\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { CoreService } from './core.service';\nimport { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\nimport { AuthService } from './auth.service';\nimport { Shipment } from '../models/shipment';\nimport { lastValueFrom, Observable, ReplaySubject } from 'rxjs';\nimport { first, retry, tap } from 'rxjs/operators';\nimport { ShippingMethod } from '../models/shipping-method';\nimport { MockService } from './mock.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ShipmentService {\n\n  public shippingMethods = [];\n\n  public shippingMethodsLoaded: ReplaySubject<boolean> = new ReplaySubject<boolean>(1);\n\n  constructor(\n    private coreService: CoreService,\n    private http: HttpClient,\n    private authService: AuthService,\n    private mockService: MockService\n  ) { }\n\n  public async ready() {\n    this.shippingMethods = await lastValueFrom(this.getShippingMethods());\n    this.shippingMethodsLoaded.next(true);\n    return Promise.resolve(true);\n  }\n\n  public async checkTimeTillCutOff() {\n\n    await lastValueFrom(this.shippingMethodsLoaded.asObservable().pipe(first()));\n    \n    const shippingCouriers = [];\n    for (let sm of this.shippingMethods) {\n      if (!shippingCouriers.some(sc => sc.id === sm.shipping_courier.id) && sm.shipping_courier.delivery_active) {\n        shippingCouriers.push(sm.shipping_courier);\n      }\n    }\n\n    const weekday = [\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];\n    \n    const d = new Date();\n    const dayOfWeek = weekday[d.getDay()];\n    const hour = d.getHours();\n    const minutes = d.getMinutes();\n\n    const cutoffData = [];\n    for (let sc of shippingCouriers) {\n\n      const pickupDays = JSON.parse(sc.pickup_days).map(o => o.day);\n      const deliveryDays = JSON.parse(sc.delivery_days).map(o => o.day);\n      const cutOffTime = {\n        hours: Number(sc.cutoff_time.split(':')[0]),\n        minutes: Number(sc.cutoff_time.split(':')[1])\n      };\n\n      const daysTillDelivery = sc.days_till_delivery;\n\n      let cutOffDate = new Date();\n      cutOffDate.setHours(cutOffTime.hours);\n      cutOffDate.setMinutes(cutOffTime.minutes);\n      cutOffDate.setSeconds(0);\n      cutOffDate.setMilliseconds(0);\n\n      const isBeforeCutOffTime = hour < cutOffTime.hours || (hour === cutOffTime.hours && minutes < cutOffTime.minutes);\n      const isOnPickupDay = pickupDays.indexOf(dayOfWeek) !== -1;\n\n      let calculationDate;\n      let deliveryDate;\n      if (isBeforeCutOffTime && isOnPickupDay) {\n        //Do nothing here\n      } else if (!isBeforeCutOffTime) {\n        \n        cutOffDate = new Date(cutOffDate.getTime() + (1000 * 60 * 60 * 24));\n        let tries = 0;\n        while (pickupDays.indexOf(weekday[cutOffDate.getDay()]) === -1 && tries < 7) {\n          cutOffDate = new Date(cutOffDate.getTime() + (1000 * 60 * 60 * 24));\n          tries++;\n        }\n        \n      }\n\n      calculationDate = cutOffDate;\n      deliveryDate = new Date(cutOffDate.getTime() + ((daysTillDelivery || 1) * (1000 * 60 * 60 * 24)));\n      deliveryDate.setHours(0);\n      deliveryDate.setMinutes(0);\n      deliveryDate.setSeconds(0);\n      deliveryDate.setMilliseconds(0);\n\n      let tries = 0;\n      while (deliveryDays.indexOf(weekday[deliveryDate.getDay()]) === -1 && tries < 7) {\n        deliveryDate = new Date(deliveryDate.getTime() + (1000 * 60 * 60 * 24));\n        tries++;\n      }\n\n      cutoffData.push({\n        shipping_courier: sc,\n        calculation_date: calculationDate.getTime(),\n        delivery_date: deliveryDate.getTime()\n      });\n\n    }\n\n    return cutoffData;\n\n  }\n\n  public getShippingMethods() {\n\n    if (this.coreService.isOfflineMode()) {\n      return this.mockService.httpEmptyResponse([]);\n    }\n\n    const urlPart = 'shipping_method/get';\n    const requestOptions = {\n      headers: this.coreService.getHeaders()\n    };\n    return this.http.get<ShippingMethod[]>(this.coreService.getBaseUrl() + urlPart, requestOptions);\n  }\n\n  public getShippingCouriers() {\n    const urlPart = \"shipping_courier/get\";\n    const requestOptions = {\n      headers: this.coreService.getHeaders(),\n    };\n    return this.http.get<any[]>(\n      this.coreService.getBaseUrl() + urlPart,\n      requestOptions\n    );\n  }\n\n  public getShippingTimeFrames(sh: Shipment, delay: any, extraDelay: any, productVariants?): Observable<Shipment[]> {\n    const urlPart = 'shipping_method/timeframes/get';\n    return this.doShippingRequest(sh, delay, urlPart, extraDelay, productVariants);\n  }\n\n  public getShippingLocations(sh: Shipment, delay: any, extraDelay: any, productVariants?): Observable<Shipment[]> {\n    const urlPart = 'shipping_method/locations/get';\n    return this.doShippingRequest(sh, delay, urlPart, extraDelay, productVariants);\n  }\n\n  public doShippingRequest(sh: Shipment, delay: any, urlPart: string, extraDelay: number, productVariants?): Observable<Shipment[]> {\n    \n    let params: HttpParams = new HttpParams()\n    .set('beta', '1')\n    .set('shipment', JSON.stringify(sh))\n    .set('delay', delay)\n    .set('product_delay', extraDelay.toString());\n\n    if (productVariants) {\n      params = params.set('product_variant_ids', JSON.stringify(productVariants));\n    }\n    \n    const headers: HttpHeaders = this.coreService.getHeaders()\n    .set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n    \n    const requestOptions = {\n      params: params,\n      headers: headers\n    };\n    \n    return this.http.get<Shipment[]>(this.coreService.getBaseUrl() + urlPart, requestOptions);\n\n  }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'rope-loading',\n  templateUrl: './loading.component.html',\n  styleUrls: ['./loading.component.scss']\n})\nexport class LoadingComponent implements OnInit {\n\n  @Input() public text: string;\n\n  constructor() { }\n\n  ngOnInit(): void {\n  }\n\n}\n","<div class=\"rope-loading\">\n    <div class=\"middle-container\">\n        <ion-spinner name=\"crescent\"></ion-spinner>\n        <div *ngIf=\"text\" class=\"text rope-h2\">\n            {{ text }}\n        </div>\n    </div>\n</div>","import { Component, OnInit, Input, ChangeDetectorRef, Output, EventEmitter } from '@angular/core';\nimport { NavController, AlertController, ModalController, LoadingController, Platform } from '@ionic/angular';\nimport { CartService } from '../../../services/cart.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { FavouriteService } from '../../../services/favourite.service';\nimport { OutfitService } from '../../../services/outfit.service';\nimport { ShipmentService } from '../../../services/shipment.service';\nimport { CoreService } from '../../../services/core.service';\nimport { OrderLine } from '../../../models/order-line';\nimport { Order } from '../../../models/order';\nimport { Outfit } from '../../../models/outfit';\nimport { tap } from 'rxjs/operators';\nimport { forkJoin, lastValueFrom, Subscription } from 'rxjs';\nimport { ScreensizeService } from '../../../services/screensize.service';\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport { Router } from '@angular/router';\nimport { Shipment } from '../../../models/shipment';\n\n@Component({\n  selector: \"rope-cart-overview\",\n  templateUrl: \"./cart-overview.component.html\",\n  styleUrls: [\"./cart-overview.component.scss\"],\n})\nexport class CartOverviewComponent implements OnInit {\n\n  @Input() title: string;\n  @Input() identifier: string;\n  @Input() public readonly = false;\n\n  @Output() onInitOrder = new EventEmitter();\n  @Output() onGoToTerms = new EventEmitter();\n  @Output() onGoToShop = new EventEmitter();\n  @Output() onGoToShopDetail = new EventEmitter<any>();\n\n  public order;\n\n  public category = \"bag\";\n\n  public wishlist: any;\n  public outfits: any = new Array();\n\n  public images: any = new Array();\n\n  public isMobile: boolean;\n  public lowestCostShippingMethod;\n\n  public shippingMethods;\n  public countryCode;\n\n  public stockChecking;\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n  public extraSmallDisplay = false;\n\n  public loading;\n\n  constructor(\n    public navCtrl: NavController,\n    public cartService: CartService,\n    public alertCtrl: AlertController,\n    public authService: AuthService,\n    public modalCtrl: ModalController,\n    public loadingCtrl: LoadingController,\n    public favouriteService: FavouriteService,\n    public analyticsService: AnalyticsService,\n    public outfitService: OutfitService,\n    public router: Router,\n    public platform: Platform,\n    public changeDetector: ChangeDetectorRef,\n    public shipmentService: ShipmentService,\n    public coreService: CoreService,\n    public screensizeService: ScreensizeService\n  ) {}\n\n  ngOnInit() {\n    \n    this.extraSmallDisplay = this.platform.width() < 400;\n\n    this.screensizeObserver = this.screensizeService\n      .isDesktopView()\n      .subscribe((isDesktop) => {\n        this.isDesktop = isDesktop;\n      });\n\n    const currentUser = this.authService.getCurrentUser();\n    if (currentUser && currentUser.country_code) {\n      this.countryCode = currentUser.country_code;\n    } else {\n      this.countryCode = \"NL\";\n    }\n\n    this.loading = true;\n    this.cartService.ready().then(async (res) => {\n\n      this.order = this.cartService.getCurrentOrder();\n      if (this.identifier) {\n\n        if (this.orderIsEmpty() || (!this.orderIsEmpty() && this.order.identifier !== this.identifier)) {\n          \n          const cart = await lastValueFrom(this.cartService.getCart(this.identifier));\n\n          if (cart.status === 'TRANSACTED') {\n\n            let alert = await this.alertCtrl.create({\n              header: 'Je bestelling is al afgerond...',\n              subHeader: 'Bedankt voor je bestelling!',\n              message: 'We willen je bedanken voor je bestelling! Deze winkelwagen is reeds afgerond.',\n              cssClass: 'warning-alert',\n              buttons: [\n                {\n                  text: 'Oke'\n                }\n              ]\n            });\n\n            await alert.present();\n\n          } else {\n\n            this.order = await this.cartService.clearOrder();\n            this.order.identifier = this.identifier;\n            this.order.status = 'PENDING';\n\n            for (let cartLine of cart.customer_cart_lines) {\n              \n              const imageUrl = cartLine.product_variant.product.outfits[0].main_media_url;\n              let orderLine = new OrderLine(\n                cartLine.count,\n                cartLine.product_variant,\n                cartLine.product_variant.product,\n                imageUrl\n              );\n              this.cartService.addOrderLine(orderLine);\n\n            }\n\n          }\n\n        }\n\n      }\n\n      this.shippingMethods = await this.shipmentService.getShippingMethods().toPromise();\n      this.lowestCostShippingMethod = this.shippingMethods\n        .filter((sm) => sm[\"country_code\"] === this.countryCode && sm['shipping_courier'].delivery_active)\n        .sort((s1, s2) => {\n          let c =\n            s1[\"shipping_method_prices\"][0].threshold_price -\n            s2[\"shipping_method_prices\"][0].threshold_price;\n\n          if (c === 0) {\n            c =\n              s1[\"shipping_method_prices\"][0].price -\n              s2[\"shipping_method_prices\"][0].price;\n          }\n\n          return c;\n        })[0];\n\n\n      if (!this.orderIsEmpty()) {\n\n        const indices = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n        let lastIndex;\n        for (const index of indices) {\n          const orderLine: OrderLine = this.order.order_lines[index];\n          if (orderLine) {\n            lastIndex = index;\n            this.images.push(orderLine.outfitImage);\n          } else {\n            this.images.push(\n              this.order.order_lines[\n                Math.floor(Math.random() * (lastIndex + 1))\n              ].outfitImage\n            );\n          }\n        }\n\n        this.checkStock();\n        this.checkOptions();\n        this.cartService.checkPromotionDiscounts();\n\n        this.trackViewCart();\n        \n      }\n\n      this.loading = false\n\n    });\n    \n  }\n\n  ngOnDestroy() {\n    if (this.screensizeObserver) {\n      this.screensizeObserver.unsubscribe();\n    }\n  }\n\n  public trackViewCart() {\n\n    const productIds: string[] = new Array();\n\n    let totalPrice = this.cartService.getTotalCost();\n    for (const ol of this.order.order_lines) {\n      productIds.push(ol.product.id.toString());\n    }\n\n    this.analyticsService.trackViewCart(this.router.url, totalPrice, productIds, this.order.order_lines);\n\n  }\n\n  public selectCountry(event) {\n    const countryCode = event.detail.value;\n    this.countryCode = countryCode;\n    this.lowestCostShippingMethod = this.shippingMethods\n      .filter((sm) => sm[\"country_code\"] === this.countryCode)\n      .sort(\n        (s1, s2) =>\n          s1[\"shipping_method_prices\"][0].price -\n          s2[\"shipping_method_prices\"][0].price\n      )[0];\n  }\n\n  public async checkOptions() {\n    const allOptionsLoaded = this.order.order_lines.every(\n      (ol) => ol.product.options\n    );\n    if (!allOptionsLoaded) {\n      this.cartService.clearOrder().then(() => {\n        this.coreService.showAlert(\n          \"Door een probleem hebben we je shopping bag leeg gemaakt.\"\n        );\n      });\n    }\n  }\n\n  public async checkStock() {\n    \n    this.stockChecking = true;\n\n    let observables = [];\n    for (const orderLine of this.order.order_lines) {\n      let obs = this.outfitService\n        .getProduct(orderLine.product.id, orderLine.product.outfits[0].id)\n        .pipe(\n          tap((products) => {\n            const pv = products[0].product_variants.find(\n              (pp) => pp.id === orderLine[\"productVariant\"].id\n            );\n            orderLine[\"total_stock\"] = pv[\"all_stocks\"].reduce(\n              (a, b) => a + b.stock_level,\n              0\n            );\n\n            const onlineStockId = orderLine.productVariant.stocks[0].id;\n            const newOnlineStockLevel = pv[\"all_stocks\"].find(\n              (s) => s.id === onlineStockId\n            ).stock_level;\n            orderLine.productVariant.stocks[0].stock_level = newOnlineStockLevel;\n          })\n        );\n      observables.push(obs);\n    }\n\n    forkJoin(observables).subscribe(() => {\n      this.stockChecking = false;\n    });\n  }\n\n  public getFreeShippingGap() {\n    return (\n      this.lowestCostShippingMethod.shipping_method_prices[0]\n        .threshold_order_total - this.getSubtotal()\n    );\n  }\n\n  public getShippingCost(shipment?: Shipment) {\n    if (this.order && !this.order.shipment) {\n      return undefined;\n    }\n    const costObj = this.order.shipment.shipping_method[\n      \"shipping_method_prices\"\n    ].filter((smp) => !smp.timestamp_end)[0];\n    const shippingCost =\n      this.cartService.getSubtotal() - this.cartService.getDiscount() >=\n      costObj.threshold_order_total\n        ? costObj.threshold_price\n        : costObj.price;\n    return shippingCost;\n  }\n\n  public hasUnsufficientStock() {\n    return (\n      this.order.order_lines.find((ol) => ol[\"total_stock\"] <= 0) !== undefined\n    );\n  }\n\n  public getStockColor(orderLine) {\n    if (orderLine[\"total_stock\"] > 0) {\n      return \"positive\";\n    } else if (orderLine[\"total_stock\"] <= 0) {\n      return \"negative\";\n    }\n  }\n\n  public goToTerms() {\n    this.onGoToTerms.emit();\n  }\n\n  public goToShop() {\n    this.onGoToShop.emit();\n    this.navCtrl.navigateRoot(\"shop/basics\");\n  }\n\n  public goToShopDetail(outfit: Outfit) {\n    this.onGoToShopDetail.emit({\n      category: outfit.outfit_type.toLowerCase(),\n      id: outfit.id,\n    });\n  }\n\n  public async clearCart() {\n    const alert = await this.alertCtrl.create({\n      header: \"Bestelling leegmaken\",\n      message: \"Weet je zeker dat je deze bestelling wil leegmaken?\",\n      buttons: [\n        {\n          text: \"Annuleer\",\n          role: \"cancel\",\n        },\n        {\n          text: \"Leegmaken\",\n          role: \"clear\",\n        },\n      ],\n    });\n\n    await alert.present();\n\n    alert.onDidDismiss().then((data) => {\n      if (data.role === \"clear\") {\n        this.clearCartForce();\n        this.order = new Order();\n      }\n    });\n  }\n\n  public clearCartForce() {\n    this.cartService.clearOrder().then((ord) => {\n      this.order = ord;\n      // this.changeDetector.markForCheck();\n    });\n  }\n\n  public orderIsEmpty() {\n    return this.cartService.getOrderCount() === 0;\n  }\n\n  public getTotalCount() {\n    return this.cartService.getTotalCount();\n  }\n\n  public getSubtotal() {\n    return this.cartService.getSubtotal();\n  }\n\n  public getTotal() {\n    if (this.lowestCostShippingMethod) {\n      const costObj = this.lowestCostShippingMethod.shipping_method_prices.filter(\n        (smp) => !smp.timestamp_end\n      )[0];\n      const subtotal = this.getSubtotal();\n      const shippingCost =\n        subtotal >= costObj.threshold_order_total\n          ? costObj.threshold_price\n          : costObj.price;\n      return subtotal + (this.readonly ? (this.getShippingCost() || 0) : shippingCost);\n    } else {\n      return 0.0;\n    }\n  }\n\n  public removeFromCart(orderLine: OrderLine) {\n    this.cartService.removeOrderLine(orderLine);\n    if (this.order.order_lines.length === 0) {\n      this.clearCartForce();\n    }\n  }\n\n  public removeFromWishlist(id) {\n    this.favouriteService.removeFavourite(id);\n  }\n}\n","<div *ngIf=\"loading\" style=\"width: 100%; height: 50vh;\">\n  <rope-loading [text]=\"'Shopping bag laden...'\"></rope-loading>\n</div>\n\n<ng-container *ngIf=\"!loading\">\n\n  <ng-container *ngIf=\"orderIsEmpty()\">\n\n    <div\n      style=\"height: 100%; width: 100%; display: flex; justify-content: center; align-items: center; flex-direction: column; background-color: #efefef;\">\n      <ion-icon style=\"font-size: 20.0rem;\" name=\"bag-handle-outline\" color=\"secondary\"></ion-icon>\n      <div style=\"font-size: 1.6rem; margin-top: 10px; font-family: 'Source Sans Pro';\">\n        De {{ title?.toLowerCase() }} is leeg\n      </div>\n    </div>\n\n  </ng-container>\n\n  <ng-container *ngIf=\"order && !orderIsEmpty()\">\n\n    <ion-grid class=\"ion-no-padding\">\n\n      <ion-row class=\"ion-no-padding\">\n\n        <ion-col size=\"12\" size-lg=\"6\" class=\"ion-no-padding\" *ngIf=\"isDesktop && !readonly\">\n\n          <div [ngStyle]=\"{ 'margin-left': isDesktop ?  '50px' : '0px', 'margin-right': isDesktop ? '50px' : '0px', 'padding-top': isDesktop ? '' : '0px', 'padding-bottom': isDesktop ? '' : '10px', 'padding-left': isDesktop ? '' : '0px', 'padding-right': isDesktop ? '' : '0px' }\"\n                class=\"ion-padding block\" [ngClass]=\"isDesktop ? 'min-height' : ''\">\n\n            <div class=\"grid-card\" style=\"background-color: var(--ion-color-light);\">\n            \n              <div class=\"shopping-bag-title\">\n                {{ title }}\n              </div>\n            \n              <ion-grid class=\"insta-grid ion-no-padding\" [ngClass]=\"isDesktop ? 'insta-grid-desktop' : ''\">\n                <ion-row class=\"ion-no-padding\">\n            \n                  <ion-col size=\"4\" class=\"ion-no-padding\">\n                    <div class=\"bg-container\" [ngStyle]=\"{'background-image': 'url(' + images[0] + ')'}\">\n                    </div>\n                  </ion-col>\n                  <ion-col size=\"2\" class=\"ion-no-padding\">\n                    <ion-row class=\"ion-no-padding\">\n                      <ion-col size=\"12\" class=\"ion-no-padding\">\n                        <div class=\"bg-container\" [ngStyle]=\"{'background-image': 'url(' + images[1] + ')'}\">\n                        </div>\n                      </ion-col>\n                    </ion-row>\n                    <ion-row class=\"ion-no-padding\">\n                      <ion-col size=\"12\" class=\"ion-no-padding\">\n                        <div class=\"bg-container\" [ngStyle]=\"{'background-image': 'url(' + images[2] + ')'}\">\n                        </div>\n                      </ion-col>\n                    </ion-row>\n                  </ion-col>\n            \n                  <ion-col size=\"4\" class=\"ion-no-padding\">\n                    <div class=\"bg-container\" [ngStyle]=\"{'background-image': 'url(' + images[3] + ')'}\">\n                    </div>\n                  </ion-col>\n                  <ion-col size=\"2\" class=\"ion-no-padding\">\n                    <ion-row class=\"ion-no-padding\">\n                      <ion-col size=\"12\" class=\"ion-no-padding\">\n                        <div class=\"bg-container\" [ngStyle]=\"{'background-image': 'url(' + images[4] + ')'}\">\n                        </div>\n                      </ion-col>\n                    </ion-row>\n                    <ion-row class=\"ion-no-padding\">\n                      <ion-col size=\"12\" class=\"ion-no-padding\">\n                        <div class=\"bg-container\" [ngStyle]=\"{'background-image': 'url(' + images[5] + ')'}\">\n                        </div>\n                      </ion-col>\n                    </ion-row>\n                  </ion-col>\n            \n                </ion-row>\n              </ion-grid>\n\n            </div>\n\n          </div>\n\n        </ion-col>\n\n        <ion-col size=\"12\" [sizeLg]=\"readonly ? '12' : '6'\">\n\n            <div [ngStyle]=\"{ 'margin-top': isDesktop && !readonly ? '30px' : (readonly ? '0px' : '15px') }\">\n              \n              <div>\n\n                <div class=\"r-h1\" [ngStyle]=\"{ 'margin-left': isDesktop && !readonly ? '15px' : (readonly ? '0px' : '15px') }\">Shopping bag</div>\n      \n                <ion-card-content style=\"margin-bottom: 0px; padding-bottom: 0px; margin-top: 0px;\">\n            \n                  <ion-item *ngFor=\"let orderLine of order.order_lines\">\n                    <div slot=\"start\" style=\"display: flex; flex-direction: column; justify-content: center; align-items: center;\" *ngIf=\"!extraSmallDisplay\">\n            \n                      <ion-avatar class=\"custom-avatar\" (click)=\"goToShopDetail(orderLine.product.outfits[0])\">\n                        <img [src]=\"orderLine.outfitImage\">\n                      </ion-avatar>\n            \n                      <ion-button *ngIf=\"!readonly\" size=\"small\" color=\"danger\" (click)=\"removeFromCart(orderLine)\" class=\"button-extra-small\">\n                        <ion-icon name=\"trash\" slot=\"icon-only\" style=\"font-size: 1.3rem;\"></ion-icon>\n                      </ion-button>\n            \n                    </div>\n                    <ion-label (click)=\"goToShopDetail(orderLine.product.outfits[0])\">\n\n                      <h2 class=\"ion-text-wrap r-h2\">\n                        {{ orderLine.product.name.replace('Dameskleding', '') }} {{ orderLine.productVariant.size.name }}</h2>\n\n                      <p class=\"ion-text-wrap r-h3\">{{ orderLine.count }} stuk<ng-container *ngIf=\"orderLine.count > 1\">s</ng-container> x\n                        {{ (orderLine.product.discount_price ? orderLine.product.discount_price : orderLine.product.unit_price) | currency:'EUR':'symbol' }}\n                      </p>\n\n                      <div *ngIf=\"orderLine['total_stock'] !== undefined && !stockChecking\" class=\"stock-status ion-text-wrap\"\n                        [ngClass]=\"getStockColor(orderLine)\" style=\"display: inline-block;\">\n                        <ion-chip color=\"medium\">\n                          <ion-icon name=\"checkmark-circle-outline\" class=\"marg-icon\"\n                            [color]=\"orderLine['total_stock'] > 0 ? 'secondary' : 'danger'\"></ion-icon>\n                          <div style=\"font-family: var(--normal-font) !important; font-size: var(--h3-font-size) !important;\">\n                            <ng-container *ngIf=\"orderLine['total_stock'] > 3\">Op voorraad</ng-container>\n                            <ng-container *ngIf=\"orderLine['total_stock'] <= 3 && orderLine['total_stock'] > 0\">Nog maar\n                              {{ orderLine['total_stock'] }} op voorraad</ng-container>\n                            <ng-container *ngIf=\"orderLine['total_stock'] <= 0\">Niet meer op voorraad</ng-container>\n                          </div>\n                          </ion-chip>\n                      </div>\n\n                      <div *ngIf=\"stockChecking\" class=\"stock-status\">\n                        <ion-chip color=\"medium\">\n                          <ion-spinner name=\"crescent\" class=\"marg-icon\" style=\"height: 9px;\"></ion-spinner>\n                          <div style=\"font-family: var(--normal-font) !important; font-size: var(--h3-font-size) !important;\">Voorraad ophalen...</div>\n                        </ion-chip>\n                      </div>\n\n                      <div *ngIf=\"!readonly\">\n                        <ion-chip *ngIf=\"orderLine['productFit'] && orderLine['productFit'].name !== 'Normaal'\" color=\"warning\">\n                          <ion-icon name=\"alert-circle-outline\"></ion-icon>\n                          <div style=\"font-family: var(--normal-font) !important; font-size: var(--h3-font-size) !important;\">Valt {{ orderLine['productFit'].name.toLowerCase() }}</div>\n                        </ion-chip>\n                      </div>\n\n                      <div *ngIf=\"orderLine.promotionDiscount\" class=\"stock-status\">\n                        <div class=\"stock-holder ion-text-wrap\">\n                          <ion-icon name=\"pricetags\" class=\"marg-icon\" color=\"tertiary\"></ion-icon>\n                          <div>\n                            <div style=\"font-size: 0.8rem;\">{{ orderLine.product.promotion.name }}</div>\n                            <div><b>Huidige korting: {{ (orderLine.promotionDiscount/100) | percent }}</b></div>\n                          </div>\n                        </div>\n                      </div>\n\n                    </ion-label>\n                    <div slot=\"end\" (click)=\"goToShopDetail(orderLine.product.outfits[0])\" style=\"display: flex; flex-direction: column; align-items: flex-end; justify-content: center;\">\n                      <div class=\"r-h2\">{{ orderLine.subtotal | currency:'EUR':'symbol' }}</div>\n                      <ion-button *ngIf=\"extraSmallDisplay\" size=\"small\" color=\"danger\" (click)=\"removeFromCart(orderLine)\" class=\"button-extra-small\">\n                        <ion-icon name=\"trash\" slot=\"icon-only\" style=\"font-size: 1.3rem;\"></ion-icon>\n                      </ion-button>\n                    </div>\n                  </ion-item>\n            \n                  <ion-item class=\"top-border\" lines=\"none\">\n                    <ion-label>\n                      <div class=\"r-h2\">Subtotaal</div>\n                      <p class=\"r-h3\">\n                        {{ order.order_lines.length }}\n                        product<span *ngIf=\"order.order_lines.length > 1\">en</span> - {{ getTotalCount() }} stuks\n                      </p>\n                    </ion-label>\n                    <div slot=\"end\">\n                      <div class=\"r-h2\">{{ getSubtotal() | currency:'EUR':'symbol' }}</div>\n                    </div>\n                  </ion-item>\n            \n                  <ng-container *ngIf=\"lowestCostShippingMethod && !readonly\">\n            \n                    <ion-item class=\"top-border\" style=\"--background: var(--ion-color-light);\">\n                      <ion-label position=\"stacked\" class=\"r-h3\">Verzending naar</ion-label>\n                      <ion-select (ionChange)=\"selectCountry($event)\" [value]=\"countryCode\" >\n                        <ion-select-option value=\"NL\" class=\"r-h2\">Nederland</ion-select-option>\n                        <ion-select-option value=\"BE\" class=\"r-h2\">België</ion-select-option>\n                      </ion-select>\n                    </ion-item>\n            \n                    <ion-item lines=\"none\" style=\"--background: var(--ion-color-light);\">\n                      <ion-label>\n                        <div class=\"r-h2\">\n                          {{ lowestCostShippingMethod.shipping_method_prices[0].price === 0.00 ? 'Gratis verzending' : 'Verzending vanaf' }}\n                        </div>\n                        <p *ngIf=\"lowestCostShippingMethod.shipping_method_prices[0].threshold_order_total\" class=\"r-h3\">\n                          {{ lowestCostShippingMethod.shipping_method_prices[0] === 0.00 ? 'Verzending is altijd gratis' : 'Gratis verzending vanaf ' + (lowestCostShippingMethod.shipping_method_prices[0].threshold_order_total | currency:'EUR':'symbol') }}\n                        </p>\n                      </ion-label>\n                      <div slot=\"end\">\n                        <div class=\"r-h2\">{{ (getSubtotal() >= lowestCostShippingMethod.shipping_method_prices[0].threshold_order_total ? lowestCostShippingMethod.shipping_method_prices[0].threshold_price : lowestCostShippingMethod.shipping_method_prices[0].price) | currency:'EUR':'symbol' }}</div>\n                      </div>\n                    </ion-item>\n            \n                  </ng-container>\n\n                  <ng-container *ngIf=\"readonly && getShippingCost() !== undefined\">\n\n                    <ion-item lines=\"none\" style=\"--background: var(--ion-color-light);\">\n                      <ion-label>\n                        <div class=\"r-h2\">\n                          Verzendkosten\n                        </div>\n                      </ion-label>\n                      <div slot=\"end\">\n                        <div class=\"r-h2\">{{ getShippingCost() | currency:'EUR':'symbol' }}</div>\n                      </div>\n                    </ion-item>\n\n                  </ng-container>\n            \n                  <ion-item class=\"top-border\" lines=\"none\" style=\"margin-top: 0px !important;\">\n                    <ion-label>\n                      <div class=\"r-h2 r-b\">\n                        Totaal\n                      </div>\n                    </ion-label>\n                    <div slot=\"end\">\n                      <div class=\"r-h2\">{{ getTotal() | currency:'EUR':'symbol' }}</div>\n                    </div>\n                  </ion-item>\n\n                  <ion-item lines=\"none\" style=\"margin-top: 0px !important;\" *ngIf=\"readonly && order.coupon\">\n                    <ion-label>\n                      <div class=\"r-h2\">\n                        Korting vanwege kortingsbon\n                      </div>\n                    </ion-label>\n                    <div slot=\"end\">\n                      <div class=\"r-h2\">{{ order.coupon.value | currency:'EUR':'symbol' }}</div>\n                    </div>\n                  </ion-item>\n\n                  <ion-item lines=\"none\" style=\"margin-top: 0px !important;\" *ngIf=\"cartService.getPromoCode()\">\n                    <ion-label>\n                      <div class=\"ion-text-wrap r-h2\">\n                        Korting vanwege code '{{ cartService.getPromoCode().code }}'\n                      </div>\n                    </ion-label>\n                    <div slot=\"end\" class=\"promo-price\">\n                      <div class=\"r-h2\">- {{ cartService.calculatePromocodePercentageDiscount() | currency:'EUR':'symbol' }}</div>\n                    </div>\n                  </ion-item>\n                  <ion-item class=\"top-border\" lines=\"none\" style=\"margin-top: 0px !important;\" *ngIf=\"cartService.getPromoCode() || order.coupon\">\n                    <ion-label>\n                      <div class=\"ion-text-wrap\">\n                        <div class=\"r-h2 r-b\">Te betalen</div>\n                        <p class=\"r-h3 r-text-color-light\" *ngIf=\"!readonly\">(bij standaard verzending)</p>\n                      </div>\n                    </ion-label>\n                    <div slot=\"end\">\n                      {{ (getTotal() - (readonly ? cartService.getDiscount() : cartService.calculatePromocodePercentageDiscount())) | currency:'EUR':'symbol' }}\n                    </div>\n                  </ion-item>\n            \n                  <ion-item-divider (click)=\"goToTerms()\" color=\"light\" style=\"cursor: pointer;\">\n                    <ion-label class=\"ion-text-wrap r-h3\">\n                      Bekijk onze voorwaarden voordat je bestelt\n                    </ion-label>\n                    <ion-buttons slot=\"end\" style=\"margin-right: 5px; z-index: 1;\">\n                      <ion-button slot=\"icon-only\" fill=\"solid\" color=\"light\">\n                        <ion-icon size=\"small\" name=\"arrow-forward-circle-outline\"></ion-icon>\n                      </ion-button>\n                    </ion-buttons>\n                  </ion-item-divider>\n            \n                </ion-card-content>\n\n              </div>\n            \n            <div style=\"margin-left: 20px; margin-right: 20px;\">  \n\n              <div style=\"width: 100%; margin-top: 15px;\"\n                *ngIf=\"!readonly && lowestCostShippingMethod && lowestCostShippingMethod.shipping_method_prices[0].threshold_order_total && lowestCostShippingMethod.shipping_method_prices[0].threshold_order_total > 0.00 && getFreeShippingGap() > 0\">\n          \n                <ion-chip color=\"warning\" style=\"width: 100%;\" class=\"r-flex r-flex-h-space-between r-flex-v-center\">\n                  <ion-icon name=\"bulb-outline\"></ion-icon>\n                  <div class=\"text\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">Als je nog voor <b>{{\n                      getFreeShippingGap() | currency:'EUR':'symbol' }}</b> bijbesteld,\n                    <ng-container *ngIf=\"lowestCostShippingMethod.shipping_method_prices[0].threshold_price === 0.00\">dan\n                      betalen wij de verzendkosten!</ng-container>\n                    <ng-container *ngIf=\"lowestCostShippingMethod.shipping_method_prices[0].threshold_price > 0.00\">dan betaal\n                      je nog maar\n                      {{ lowestCostShippingMethod.shipping_method_prices[0].threshold_price | currency:'EUR':'symbol' }}\n                      verzendkosten!</ng-container>\n                  </div>\n                </ion-chip>\n\n                <!-- <div class=\"free-shipping-box\">\n                  <ion-icon name=\"bulb-outline\"></ion-icon>\n                  <div class=\"text\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">Als je nog voor <b>{{ getFreeShippingGap() | currency:'EUR':'symbol' }}</b> bijbesteld,\n                    <ng-container *ngIf=\"lowestCostShippingMethod.shipping_method_prices[0].threshold_price === 0.00\">dan\n                      betalen wij de verzendkosten!</ng-container>\n                    <ng-container *ngIf=\"lowestCostShippingMethod.shipping_method_prices[0].threshold_price > 0.00\">dan betaal\n                      je nog maar\n                      {{ lowestCostShippingMethod.shipping_method_prices[0].threshold_price | currency:'EUR':'symbol' }}\n                      verzendkosten!</ng-container>\n                  </div>\n                </div> -->\n          \n              </div>\n\n              <div class=\"ion-text-center\" style=\"margin-top: 20px;\" *ngIf=\"!readonly\">\n                <ion-button color=\"secondary\" (click)=\"onGoToShop.emit()\" expand=\"block\">\n                  <div class=\"r-h2\" style=\"color: white; font-weight: 700;\">Verder winkelen</div>\n                  <ion-icon slot=\"end\" name=\"arrow-forward-circle-outline\" style=\"font-size: 1.5rem; color: white;\"></ion-icon>\n                </ion-button>\n              </div>\n          \n              <div class=\"ion-text-center\" style=\"margin-top: 10px; margin-bottom: 20px;\" *ngIf=\"!readonly\">\n                <ion-button color=\"cta\" (click)=\"onInitOrder.emit()\" [disabled]=\"hasUnsufficientStock()\" expand=\"block\" size=\"large\">\n                  <div class=\"r-h2\" style=\"color: black; font-weight: 700;\">Naar bestellen</div>\n                  <ion-icon slot=\"end\" name=\"arrow-forward-circle-outline\" style=\"font-size: 1.5rem; color: black;\"></ion-icon>\n                </ion-button>\n                <br>\n                <ion-note style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">De voorraad wordt voor je gereserveerd zodra de bestelling is afgerond.</ion-note>\n              </div>\n\n            </div>\n\n          </div>\n          \n        </ion-col>\n\n      </ion-row>\n\n    </ion-grid>\n\n  </ng-container>\n\n</ng-container>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { OutfitService } from '../../../services/outfit.service';\nimport { Outfit } from '../../../models/outfit';\nimport { CoreService } from '../../../services/core.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\nimport { IonicSlides } from '@ionic/angular';\n\n@Component({\n  selector: 'rope-product-slider',\n  templateUrl: './product-slider.component.html',\n  styleUrls: ['./product-slider.component.scss'],\n})\nexport class ProductSliderComponent implements OnInit {\n\n  @Input() public type;\n  @Input() public title;\n  @Input() public subtitle;\n  @Input() public products;\n\n  @Output() navigateToShopDetail = new EventEmitter();\n  @Output() navigateToDefaultShop = new EventEmitter();\n\n  public outfits;\n  public isDesktop;\n\n  public sliderConfig;\n  public swiperModules = [IonicSlides];\n\n  constructor(\n    public outfitService: OutfitService,\n    public coreService: CoreService,\n    public screensizeService: ScreensizeService\n  ) { }\n\n  ngOnInit() {\n\n    this.screensizeService.isDesktopView().subscribe(isDesktop => {\n      this.isDesktop = isDesktop;\n      if (isDesktop) {\n        this.sliderConfig = {\n          slidesPerView: 4.4,\n          spaceBetween: 12,\n          grabCursor: true,\n        }\n      } else {\n        this.sliderConfig = {\n          slidesPerView: 2.4,\n          spaceBetween: 8,\n          grabCursor: true,\n        }\n      }\n    });\n\n    this.products.subscribe(res => {\n      this.outfits = res;\n    });\n\n  }\n\n  public getOutfitDescription(outfit) {\n    const maxLength = 30;\n    if (outfit.description.length > maxLength) {\n      return outfit.description.slice(0, maxLength - 1) + '...';\n    } else {\n      return outfit.description;\n    }\n  }\n\n  public getImage(outfit: Outfit) {\n    const storeBucketName = this.coreService.store.store_bucket_name;\n    return 'https://storage.googleapis.com/' + storeBucketName + '-bucket/image/outfit/' + outfit.id + '.jpg';\n  }\n\n  public goToShopDetail(outfit: Outfit) {\n    this.navigateToShopDetail.emit(outfit);\n  }\n\n  public goToMusthaves() {\n    this.navigateToDefaultShop.emit();\n    // this.navCtrl.navigateRoot('/shop/musthaves');\n  }\n\n}\n","<div class=\"new-container\">\n\n  <div class=\"title\">\n    <div class=\"r-h1\">{{ title }}</div>\n    <div class=\"r-h3\" *ngIf=\"subtitle\">{{ subtitle }}</div>\n  </div>\n\n  <div class=\"spinner-container\" style=\"height: 250px;\" *ngIf=\"!outfits\">\n    <ion-spinner name=\"crescent\"></ion-spinner>\n  </div>\n\n  <swiper-container [config]=\"sliderConfig\" [modules]=\"swiperModules\" *ngIf=\"outfits\" [ngStyle]=\"{ 'height': isDesktop ? '500px' : '300px' }\">\n\n    <swiper-slide *ngFor=\"let outfit of outfits\">\n      <div class=\"outfit-container\">\n        <div (click)=\"goToShopDetail(outfit)\"\n          [ngStyle]=\"{ 'background-image': 'url(' + (outfit.main_media_url ? outfit.main_media_url : getImage(outfit)) + ')', 'height': isDesktop ? '425px' : '225px' }\"\n          class=\"webshop-item-container\">\n          <div *ngIf=\"type === 'new'\" class=\"new-tag\">Nieuw</div>\n          <div *ngIf=\"type === 'bestsellers'\" class=\"fire-tag\">🔥 On fire</div>\n        </div>\n        <div class=\"webshop-item-bottom\">\n          <div class=\"outfit-title\">\n            {{ outfit.name }}\n          </div>\n          <div class=\"outfit-desc\">\n            {{ getOutfitDescription(outfit) }}\n          </div>\n          <div>\n            <div *ngIf=\"outfit.price\" class=\"webshop-item-outfit-price\">\n              <ng-container *ngIf=\"+outfit.custom_fields.number_of_products === 1\">\n                {{ outfit.price | currency:'EUR':'symbol' }}\n              </ng-container>\n              <ng-container *ngIf=\"+outfit.custom_fields.number_of_products > 1\">vanaf\n                {{ +outfit.custom_fields.min_product_price | currency:'EUR':'symbol' }}</ng-container>\n            </div>\n          </div>\n        </div>\n      </div>\n    </swiper-slide>\n\n    <swiper-slide>\n      <div class=\"outfit-container\" style=\"height: 350px;\">\n        <ion-button fill=\"outline\" expand=\"full\" color=\"secondary\" style=\"height: 100%;\" (click)=\"goToMusthaves()\">\n          Bekijk alles\n        </ion-button>\n      </div>\n    </swiper-slide>\n\n  </swiper-container>\n\n</div>","import { Component, OnInit, Input, SimpleChanges, Output, EventEmitter } from '@angular/core';\nimport { NavController } from '@ionic/angular';\nimport { Observable, Subscription } from 'rxjs';\nimport { Outfit } from '../../../models/outfit';\nimport { CoreService } from '../../../services/core.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\n\n@Component({\n  selector: 'rope-featured-product',\n  templateUrl: './featured-product.component.html',\n  styleUrls: ['./featured-product.component.scss'],\n})\nexport class FeaturedProductComponent implements OnInit {\n\n  @Input() public title;\n  @Input() public subtitle;\n  @Input() public product;\n\n  @Output() public navigateToShopDetail = new EventEmitter();\n\n  public productObj;\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  constructor(\n    public coreService: CoreService,\n    public screensizeService: ScreensizeService\n  ) { }\n\n  ngOnInit() {\n\n    this.screensizeObserver = this.screensizeService.isDesktopView().subscribe(isDesktop => {\n      this.isDesktop = isDesktop;\n    });\n\n    this.setProductObj();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.product) {\n      this.product = changes.product.currentValue;\n      this.setProductObj();\n    }\n  }\n\n  public setProductObj() {\n    if (this.product instanceof Observable) {\n\n    } else {\n      this.productObj = this.product;\n      if (this.productObj && this.productObj.medias && this.productObj.medias.length > 0) {\n        this.productObj.medias = this.productObj.medias.slice(0, 3 );\n      }\n    }\n  }\n\n  public getImage(outfit: Outfit) {\n    const storeBucketName = this.coreService.store.store_bucket_name;\n    return 'https://storage.googleapis.com/' + storeBucketName + '-bucket/image/outfit/' + outfit.id + '.jpg';\n  }\n\n  public goToShopDetail(outfit: Outfit) {\n    this.navigateToShopDetail.emit(outfit);\n  }\n\n}\n","<div class=\"title\">\n  <div class=\"r-h1\">{{ title }}</div>\n  <div class=\"r-h3\" *ngIf=\"subtitle\">{{ subtitle }}</div>\n</div>\n\n<div style=\"padding: 0px !important;\" class=\"ion-text-center\">\n\n  <ng-container *ngIf=\"!isDesktop\">\n    <div class=\"spinner-container\" style=\"height: 512px;\" *ngIf=\"!productObj\">\n      <ion-spinner name=\"crescent\"></ion-spinner>\n    </div>\n    <img *ngIf=\"productObj\" [src]=\"productObj?.main_media_url ? productObj?.main_media_url : getImage(productObj)\"\n      (click)=\"goToShopDetail(productObj)\" style=\"width: 100%;\">\n  </ng-container>\n\n  <ng-container *ngIf=\"isDesktop\">\n    <div class=\"spinner-container\" style=\"height: 512px;\" *ngIf=\"!productObj\">\n      <ion-spinner name=\"crescent\"></ion-spinner>\n    </div>\n    <ion-grid *ngIf=\"productObj\">\n      <ion-row>\n        <ion-col size=\"4\" *ngFor=\"let media of productObj?.medias\">\n          <img [src]=\"media.url+''\"\n            (click)=\"goToShopDetail(productObj)\">\n        </ion-col>\n      </ion-row>\n    </ion-grid>\n  </ng-container>\n\n  \n</div>","import { Component, OnInit, ViewChild, Input, Output, EventEmitter } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ScreensizeService } from '../../../services/screensize.service';\nimport { IonicSlides } from '@ionic/angular';\nimport { Swiper, SwiperOptions } from 'swiper/types';\n\n@Component({\n  selector: 'rope-banners',\n  templateUrl: './banners.component.html',\n  styleUrls: ['./banners.component.scss'],\n})\nexport class BannersComponent implements OnInit {\n\n  @ViewChild('slides') slides: Swiper;\n  @Input() public banners;\n  public bannersObj;\n\n  @Output() navigate = new EventEmitter();\n\n  public options: SwiperOptions;\n  public swiperModules = [IonicSlides];\n  public isDesktop;\n\n  constructor(\n    public screensizeService: ScreensizeService\n  ) {\n\n    this.screensizeService.isDesktopView().subscribe(isDesktop => {\n\n      this.isDesktop = isDesktop;\n      if (isDesktop) {\n        this.options = {\n          autoplay: true,\n          loop: true,\n          slidesPerView: 1,\n          spaceBetween: 0,\n          speed: 3000,\n          pagination: {\n            el: '.swiper-pagination',\n            type: 'bullets',\n            clickable: true\n          }\n        };\n      } else {\n        this.options = {\n          autoplay: true,\n          loop: true,\n          speed: 2000,\n          pagination: {\n            el: '.swiper-pagination',\n            type: 'bullets',\n            clickable: true\n          }\n        };\n      }\n\n    });\n\n  }\n\n  ngOnInit() {\n\n    if (this.banners instanceof Observable) {\n      \n      this.banners.subscribe(res => {\n        this.bannersObj = res;\n      });\n\n    } else {\n\n    }\n\n  }\n\n  public navigateFromBanner(banner) {\n    if (!banner.call_to_action_url) {\n      return;\n    }\n    this.navigate.emit(banner.call_to_action_url);\n  }\n\n\n}\n","<div class=\"spinner-container\" style=\"height: 65vh;\" *ngIf=\"!bannersObj\">\n  <ion-spinner name=\"crescent\"></ion-spinner>\n</div>\n<swiper-container [config]=\"options\" [modules]=\"swiperModules\" #slides *ngIf=\"bannersObj\">\n\n  <swiper-slide *ngFor=\"let banner of bannersObj\">\n    <div (click)=\"navigateFromBanner(banner)\" style=\"width: 100%;\">\n      <div class=\"slide\" [ngStyle]=\"{'background-image': 'url(' + (isDesktop ? banner.image_url : (banner.mobile_image_url || banner.image_url)) + ')'}\"></div>\n      <div class=\"slide-title-container\" *ngIf=\"banner.call_to_action_text\" (click)=\"navigateFromBanner(banner)\">\n        <div class=\"slide-title\">\n          {{ banner.call_to_action_text }}\n          <div *ngIf=\"banner.call_to_action_url\" style=\"display: flex; justify-content: center; align-items: center; margin-left: 2px;\">\n            <ion-icon name=\"chevron-forward\"></ion-icon>\n          </div>\n        </div>\n      </div>\n    </div>\n  </swiper-slide>\n\n</swiper-container>","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n  selector: 'rope-text-block',\n  templateUrl: './text-block.component.html',\n  styleUrls: ['./text-block.component.scss'],\n})\nexport class TextBlockComponent implements OnInit {\n\n  @Input() public title;\n  @Input() public htmlContent;\n\n  constructor() { }\n\n  ngOnInit() {}\n\n}\n","<ion-card-header>\n  <ion-card-title>{{ title }}</ion-card-title>\n</ion-card-header>\n\n<ion-card-content>\n  <div [innerHTML]=\"htmlContent\"></div>\n</ion-card-content>","import { Component, OnInit, Input } from '@angular/core';\nimport { AlertController, LoadingController } from '@ionic/angular';\nimport { CoreService } from '../../../services/core.service';\n\n@Component({\n  selector: 'rope-newsletter-signup',\n  templateUrl: './newsletter-signup.component.html',\n  styleUrls: ['./newsletter-signup.component.scss'],\n})\nexport class NewsletterSignupComponent implements OnInit {\n\n  @Input() public identifier;\n  @Input() public title;\n  @Input() public subtitle;\n  @Input() public htmlContent;\n  @Input() public image;\n\n  constructor(\n    public alertCtrl: AlertController,\n    public loadingCtrl: LoadingController,\n    public coreService: CoreService,\n  ) { }\n\n  ngOnInit() {}\n\n  public async subscribeToNewsletter() {\n\n    let alert = await this.alertCtrl.create({\n      header: 'E-mailadres',\n      subHeader: 'Voor de nieuwsbrief',\n      inputs: [\n        {\n          name: 'mail_address',\n          type: 'text',\n          placeholder: 'E-mailadres'\n        }\n      ],\n      buttons: [\n        {\n          role: 'cancel',\n          text: 'Annuleer'\n        },\n        {\n          text: 'Inschrijven',\n          handler: async (d) => {\n\n            const mail = d.mail_address;\n            const re = /\\S+@\\S+\\.\\S+/;\n            const valid = re.test(mail);\n            if (valid) {\n\n              let load = await this.loadingCtrl.create({\n                message: 'Inschrijven voor nieuwsbrief...'\n              });\n              await load.present();\n\n              this.coreService.subcribeToNewsletter(this.identifier, mail).subscribe(r => {\n                load.dismiss();\n                this.coreService.showMessage('Yes!', 'Je bent nu ingeschreven voor onze nieuwsbrief.');\n              }, error => {\n                load.dismiss();\n                this.coreService.showAlert(error);\n              });\n\n            } else {\n              this.coreService.showAlert('Er lijkt een fout te zitten in het ingevulde e-mailadres.');\n            }\n\n          }\n        }\n      ]\n    });\n\n    await alert.present();\n\n  }\n\n}\n","<div>\n\n  <ng-container *ngIf=\"image\">\n    <div class=\"default-image\" style=\"height: 400px; width: 600px; max-width: 90vw; margin-bottom: 10px;\" [ngStyle]=\"{ 'background-image': 'url('+image+')' }\">\n    </div>\n  </ng-container>\n\n  <div class=\"title\">\n    <div class=\"r-h1\">{{ title }}</div>\n    <div class=\"r-h3\" *ngIf=\"subtitle\">{{ subtitle }}</div>\n  </div>\n\n  <div style=\"padding-left: 20px; margin-right: 5px;\">\n\n    <div class=\"r-h3\" [innerHTML]=\"htmlContent\"></div>\n    <br>\n    <ion-button color=\"tertiary\" (click)=\"subscribeToNewsletter()\">\n      <div class=\"r-h2\">Direct inschrijven</div>\n      <ion-icon name=\"arrow-forward-circle-outline\" slot=\"end\"></ion-icon>\n    </ion-button>\n\n  </div>\n\n</div>","export class UspGlobal {\n}","import { Component, OnInit, ContentChildren, QueryList, Input } from '@angular/core';\nimport { UspGlobal } from './usp-global';\n\n@Component({\n  selector: 'rope-usp-container',\n  templateUrl: './usp-container.component.html',\n  styleUrls: ['./usp-container.component.scss'],\n})\nexport class UspContainerComponent implements OnInit {\n\n  @Input() public title;\n  @ContentChildren(UspGlobal) items: QueryList<UspGlobal>;\n\n  constructor() { }\n\n  ngOnInit() {}\n\n}\n","<div class=\"usps-container\">\n\n  <div class=\"r-h1\" style=\"margin-left: 20px; margin-bottom: 10px;\">{{ title }}</div>  \n\n  <div style=\"padding-left: 25px;\">\n    <ng-container *ngFor=\"let item of items\">\n      <ng-template [ngTemplateOutlet]=\"item['template']\"></ng-template>\n    </ng-container>\n  </div>\n</div>\n","import { Component, OnInit, Input, ViewChild, TemplateRef } from '@angular/core';\nimport { UspGlobal } from '../usp-container/usp-global';\n\n@Component({\n  selector: 'rope-usp-item',\n  templateUrl: './usp-item.component.html',\n  styleUrls: ['./usp-item.component.scss'],\n  providers: [{ provide: UspGlobal, useExisting: UspItemComponent }],\n})\nexport class UspItemComponent implements OnInit {\n\n  @Input() public firstText;\n  @Input() public secondText;\n  @Input() public iconName;\n\n  @ViewChild('template') public template: TemplateRef<any>;\n\n  constructor() { }\n\n  ngOnInit() {}\n\n}\n","<ng-template #template>\n  <ion-item class=\"usp-container\" style=\"--background: var(--ion-color-tertiary);\" lines=\"none\">\n    <ion-icon slot=\"start\" [name]=\"iconName\" color=\"secondary\"></ion-icon>\n    <ion-label>\n      <div class=\"r-h2 r-b\">{{ firstText }}</div>\n      <div class=\"r-h3\">{{ secondText }}</div>\n    </ion-label>\n  </ion-item>\n</ng-template>","import { Component, OnInit, Input } from '@angular/core';\nimport { CoreService } from '../../../services/core.service';\n\n@Component({\n  selector: 'rope-points',\n  templateUrl: './points.component.html',\n  styleUrls: ['./points.component.scss']\n})\nexport class PointsComponent implements OnInit {\n\n  @Input()\n  public value: number;\n\n  @Input()\n  public size;\n  @Input()\n  public widthAuto = false;\n  @Input() public color;\n\n  public startChar;\n  public sizes;\n\n  public textColor;\n\n  constructor(\n    public coreService: CoreService\n  ) { \n    if (!this.color) {\n      this.color = this.coreService.loyaltyColor;\n    }\n    this.textColor = 'light';\n  }\n\n  ngOnInit() { \n\n    this.startChar = this.coreService.getMainTitle().substring(0, 1).toUpperCase();\n\n    if (this.size === 'big') {\n      this.sizes = {\n        iconWidth: '26px',\n        iconFontSize: '4.0rem',\n        iconSize: 'large'\n      };\n    } else {\n      this.sizes = {\n        iconWidth: '18px',\n        iconFontSize: '2.5rem',\n        iconSize: 'small'\n      };\n    }\n\n  }\n\n}\n","<div class=\"container\" [ngStyle]=\"{ 'background-color': color ? color : '#00A591' }\" [ngClass]=\"size && size === 'big' ? 'big' : ''\" [style.width]=\"widthAuto ? 'auto' : '100%'\">\n    \n    <div class=\"value\" *ngIf=\"value !== undefined\" [ngStyle]=\"{ 'color': 'var(--ion-color-'+textColor+')' }\">{{ value | number:'':'nl-NL' }}</div>\n    <div [ngStyle]=\"{'width': sizes.iconWidth, 'height': sizes.iconWidth, 'border': '2px solid var(--ion-color-'+textColor+')' }\" style=\"position: relative; display: flex; justify-content: center; align-items: center; overflow: hidden; border-radius: 50%; transform: scale(0.8);\">\n        <ion-icon style=\"position: absolute; margin-right: 0px !important;\" name=\"ellipse\" [size]=\"sizes.iconSize\" [color]=\"textColor\"></ion-icon>\n        <div style=\"margin-left: 2px; position: absolute; font-family: 'Source Sans Pro'; font-weight: 700;\" [ngStyle]=\"{ 'font-size': sizes.iconFontSize, 'color': color }\">{{ startChar }}</div>\n    </div>\n\n</div>","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport { CartService } from '../../../services/cart.service';\nimport { ShipmentService } from '../../../services/shipment.service';\nimport { WishlistService } from '../../../services/wishlist.service';\nimport { MenuController, AlertController, NavController } from '@ionic/angular';\nimport { AuthService } from '../../../services/auth.service';\nimport { Router, NavigationEnd } from '@angular/router';\nimport { CoreService } from '../../../services/core.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { first, lastValueFrom } from 'rxjs';\n\n@Component({\n  selector: 'rope-menu',\n  templateUrl: './menu.component.html',\n  styleUrls: ['./menu.component.scss']\n})\nexport class MenuComponent implements OnInit {\n\n  @Input() public topImage: string;\n  @Input() public author: string;\n  @Input() public version: string;\n  @Input() public closeChildrenOnNotUrl: string;\n  \n  @Output() public scrollTop = new EventEmitter();\n  @Output() public onLogOut = new EventEmitter();\n  \n  public pages;\n  public typeActivated = -1;\n\n  public lowestCostShippingMethod;\n\n  public campaign;\n  public campaignPresent;\n\n  public shopTheme;\n  public shopThemePresent;\n\n  public submenuPage = undefined;\n\n  constructor(\n    public cartService: CartService,\n    public wishlistService: WishlistService,\n    public coreService: CoreService,\n    public navCtrl: NavController,\n    public shipmentService: ShipmentService,\n    public authService: AuthService,\n    public menuController: MenuController,\n    public alertCtrl: AlertController,\n    public sanitizer: DomSanitizer,\n    public router: Router\n  ) { }\n\n  async ngOnInit() {\n\n    await lastValueFrom(this.coreService.initObjectLoaded.asObservable().pipe(first()));\n\n    this.pages = this.coreService.getPages();\n    for (let page of this.pages) {\n      page.children = page.children.filter(p => p.is_in_mobile_menu).sort((p1, p2) => p1.mobile_menu_sort_index - p2.mobile_menu_sort_index);\n    }\n\n    const allChildrenPages = this.coreService.getAllChildrenPages();\n    \n    this.campaign = allChildrenPages.find(p => p && p.url && p.url.startsWith('campaign'));\n    this.campaignPresent = this.campaign !== undefined;\n\n    this.shopTheme = allChildrenPages.find(p => p && p.url && p.url.startsWith('webshop-theme'));\n    this.shopThemePresent = this.shopTheme !== undefined;\n\n    this.shipmentService.getShippingMethods().subscribe(shippingMethods => {\n      console.log(shippingMethods);\n      shippingMethods = shippingMethods.filter(sm => sm['shipping_method_prices'] && sm['shipping_method_prices'][0]);\n      this.lowestCostShippingMethod = shippingMethods.length > 0 ? shippingMethods.sort((s1, s2) => s1['shipping_method_prices'][0].price - s2['shipping_method_prices'][0].price)[0] : undefined;\n    });\n\n    // Check if there is a customer logged in\n    await this.wishlistService.sync();\n\n    if (this.closeChildrenOnNotUrl) {\n\n      this.router.events.subscribe((val) => {\n        if (val instanceof NavigationEnd) {\n          for (let p of this.pages) {\n            if (p.collectionsOpen && val.url !== this.closeChildrenOnNotUrl) {\n              p.collectionsOpen = false;\n              this.typeActivated = -1;\n            }\n          }\n          this.menuController.close();\n        }\n      });\n\n    }\n\n  }\n\n  public getCartTotal() {\n\n    if (this.cartService.getTotalCount() === 0 || !this.lowestCostShippingMethod) {\n      return 0.00;\n    }\n\n    const costObj = this.lowestCostShippingMethod ? this.lowestCostShippingMethod.shipping_method_prices[0] : undefined;\n    const subtotal = this.cartService.getSubtotal();\n    const shippingCost = costObj ? (subtotal >= costObj.threshold_order_total ? costObj.threshold_price : costObj.price) : 0;\n    return subtotal + shippingCost;\n\n  }\n\n  public getWishlistTotal() {\n    return this.wishlistService.items.length;\n  }\n\n  public async logout() {\n\n    this.menuController.close();\n    const alert = await this.alertCtrl.create({\n      header: 'Uitloggen',\n      message: 'Weet je zeker dat je wilt uitloggen?',\n      cssClass: 'custom-alert',\n      buttons: [\n        {\n          text: 'Annuleer',\n          role: 'cancel'\n        },\n        {\n          text: 'Uitloggen',\n          role: 'logout',\n          handler: () => {\n            this.authService.logOut(this.authService.getCurrentUser()).then((val) => {\n              this.onLogOut.emit();\n            });\n          }\n        }\n      ]\n    });\n    await alert.present();\n\n  }\n\n  public async openPage(page) {\n\n    if (page.modal && page.modal === true) {\n      this.menuController.close();\n      // const modal = await this.modalCtrl.create({\n      //   component: page.component,\n      //   componentProps: { origin: 'cart' },\n      //   cssClass: 'fullscreen-modal'\n      // });\n      // await modal.present();\n    } else {\n      this.navCtrl.navigateRoot('/' + page.url);\n    }\n\n  }\n\n  public openSubmenu(page) {\n    this.submenuPage = page;\n    this.scrollTop.emit();\n  }\n\n  public closeSubmenu() {\n    this.submenuPage = undefined;\n  }\n\n  public followOptionSet(optionSet) {\n    this.coreService.resetFilters();\n    for (let option of optionSet.options) {\n      this.coreService.addFilter(option.id);\n    }\n    this.coreService.triggerFiltersChanged();\n    this.menuController.close();\n    this.navCtrl.navigateRoot('/shop/basics');\n  }\n\n  public goToPage() {\n    if (this.pages.length > 0) {\n      this.openPage(this.pages[0]);\n      this.menuController.close();\n    }\n  }\n\n  public goToHome() {\n    this.openPage({ 'url': 'home' });\n  }\n\n  public openCart() {\n    this.openPage({ 'url': 'shopping-bag' });\n  }\n\n  public openWishlist() {\n    this.openPage({ 'url': 'wishlist' });\n  }\n\n}\n","<div class=\"ion-custom-menu\">\n\n    <ion-list>\n\n        <div *ngIf=\"submenuPage\" class=\"fashion-bg submenu\">\n            <ion-item lines=\"none\" color=\"tertiary\">\n                <ion-icon slot=\"start\" color=\"dark\" name=\"chevron-back-outline\" (click)=\"closeSubmenu()\" style=\"cursor: pointer;\"></ion-icon>\n                <ion-label>\n                    <div class=\"r-h1\">{{ submenuPage.title }}</div>\n                </ion-label>\n            </ion-item>\n\n            <ion-list style=\"padding: 0px;\">\n                <ion-item class=\"flex-button\" lines=\"none\" color=\"tertiary\" *ngFor=\"let page of submenuPage.submenu.children\" detail=\"true\" (click)=\"followOptionSet(page.optionSet)\">\n                    <ion-label>{{ page.title }}</ion-label>\n                </ion-item>\n            </ion-list>\n\n        </div>\n\n        <div *ngIf=\"topImage\" class=\"top-header\" style=\"padding-top: 15px;\" (click)=\"goToHome()\" [ngStyle]=\"{ 'background-image': 'url(' + topImage + ')' }\"></div>\n\n        <!-- <ion-menu-toggle autoHide=\"false\">\n            <ion-item lines=\"none\" class=\"flex-button\" [routerLink]=\"['/home']\" [routerDirection]=\"'root'\"\n                [routerLinkActive]=\"['button-active']\" detail=\"true\">\n                <ion-icon slot=\"start\" name=\"home-outline\" color=\"dark\"></ion-icon>\n                <div class=\"menu-item-container\">\n                    <div class=\"r-h2\">Home</div>\n                </div>\n            </ion-item>\n        </ion-menu-toggle> -->\n\n        <div class=\"fashion-bg\">\n\n            <div class=\"fashion-bg\">\n\n                <div style=\"padding-bottom: 35px;\" *ngFor=\"let category of pages; let i = index;\">\n\n                    <ion-item-divider color=\"tertiary\">\n                        <ion-label class=\"r-h2 r-b\">{{ category.title }}</ion-label>\n                    </ion-item-divider>\n\n                    <ng-container *ngFor=\"let p of category.children\">\n\n                        <ng-container *ngIf=\"p.auth === 0 || (p.auth === 1 && authService.isAuthenticated()) || (p.auth === -1 && !authService.isAuthenticated())\">\n                            <ng-container *ngIf=\"!p.children\">\n\n                                <ng-container *ngIf=\"p.submenu\">\n\n                                    <ion-item lines=\"none\" class=\"flex-button fashion-item user-hand\" (click)=\"openSubmenu(p)\">\n                                        <ion-icon slot=\"start\" [name]=\"p.icon\" color=\"dark\"></ion-icon>\n                                        <div class=\"menu-item-container\">\n                                            <div class=\"r-h2\" [ngClass]=\"p.explicit ? 'explicit-router-link' : ''\">{{ p.title }}</div>\n                                        </div>\n                                        <ion-icon class=\"dropdown\" slot=\"end\" name=\"list\" color=\"dark\"></ion-icon>\n                                    </ion-item>\n\n                                </ng-container>\n\n                                <ng-container *ngIf=\"!p.submenu\">\n\n                                    <ion-item lines=\"none\" class=\"flex-button fashion-item user-hand\" [routerLink]=\"['/'+p.url]\" [routerDirection]=\"'root'\" [routerLinkActive]=\"['button-active-dark']\" [queryParams]=\"p.queryParams ? p.queryParams : undefined\" detail=\"true\">\n                                        <ion-icon slot=\"start\" [name]=\"p.icon\" color=\"dark\"></ion-icon>\n                                        <div class=\"menu-item-container\">\n                                            <div class=\"r-h2\" [ngClass]=\"p.explicit ? 'explicit-router-link' : ''\">{{ p.title }}</div>\n                                            <ion-badge *ngIf=\"p.hotItem === true\" color=\"danger\" class=\"r-flex r-flex-h-space-between r-flex-v-center \">\n                                                <ion-icon name=\"flame-outline\" color=\"light\" style=\"margin-right: 1px;\"></ion-icon>\n                                                <div class=\"r-note r-b\" style=\"color: white;\">HOT</div>\n                                            </ion-badge>\n                                            <rope-points *ngIf=\"p.points\" [value]=\"authService.getCurrentUser()['points']\"></rope-points>\n                                        </div>\n                                    </ion-item>\n\n                                </ng-container>\n\n                            </ng-container>\n                            <ng-container *ngIf=\"p.children && p.children.length > 0\">\n                                <ion-item lines=\"none\" class=\"flex-button fashion-item user-hand\" (click)=\"p.collectionsOpen = !p.collectionsOpen;\">\n                                    <ion-icon slot=\"start\" [name]=\"p.icon\" color=\"dark\"></ion-icon>\n                                    <div class=\"menu-item-container\">\n                                        <div class=\"r-h2\">{{ p.title }}</div>\n                                    </div>\n                                    <ion-icon class=\"dropdown\" slot=\"end\" [name]=\"p.collectionsOpen ? 'arrow-up' : 'arrow-down'\" color=\"dark\"></ion-icon>\n                                </ion-item>\n                                <ng-container *ngIf=\"p.collectionsOpen\">\n                                    <ion-item *ngFor=\"let child of p.children\" lines=\"none\" class=\"flex-button fashion-item-light user-hand\" style=\"--min-height: 35px;\" [routerLink]=\"['/'+child.url]\" [routerDirection]=\"'root'\" [routerLinkActive]=\"['button-active-dark']\" [queryParams]=\"p.queryParams ? p.queryParams : undefined\" detail=\"true\">\n                                        <div\n                                            style=\"display: flex; align-items: center; justify-content: space-between; width: 100%; padding-right: 20px; padding-left: 33px;\">\n                                            <div class=\"r-h2\">{{ child.title }}</div>\n                                        </div>\n                                    </ion-item>\n                                </ng-container>\n                            </ng-container>\n                        </ng-container>\n\n                    </ng-container>\n                    <ng-container *ngIf=\"category.showLogOut && authService.isAuthenticated()\">\n                        <ion-item lines=\"none\" class=\"flex-button fashion-item user-hand\" (click)=\"logout()\">\n                            <ion-icon slot=\"start\" name=\"log-out-outline\" color=\"dark\"></ion-icon>\n                            <div class=\"menu-item-container\">\n                                <div class=\"r-h2\">Uitloggen</div>\n                            </div>\n                        </ion-item>\n                    </ng-container>\n\n                    <ng-container *ngIf=\"i === 0\">\n\n                        <div style=\"margin-top: 25px;\" class=\"ion-padding\" *ngIf=\"shopThemePresent\">\n                            <ion-item lines=\"none\" class=\"flex-button fashion-item user-hand lined-router-link\" [routerLink]=\"['/'+shopTheme.url]\" [routerDirection]=\"'root'\"\n                                [routerLinkActive]=\"['button-active-dark']\" detail=\"true\" [attr.style]=\"sanitizer.bypassSecurityTrustStyle('--background: '+ shopTheme.color)\">\n                                <ion-icon slot=\"start\" [name]=\"shopTheme.icon\" style=\"font-size: 3.0rem;\"></ion-icon>\n                                <div class=\"menu-item-container\">\n                                    <div class=\"r-h3 ion-text-wrap\">\n                                        Shop thema: \n                                        <br>\n                                        <span class=\"r-h1\" style=\"font-size: 1.9rem !important;\">{{ shopTheme.title.replace('Thema: ', '') }}</span>\n                                    </div>\n                                </div>\n                            </ion-item>\n                        </div>\n\n                    </ng-container>\n\n                    <ng-container *ngIf=\"i === 1\">\n\n                        <div class=\"ion-padding\" *ngIf=\"campaignPresent\">\n                            <ion-item lines=\"none\" class=\"flex-button fashion-item user-hand lined-router-link\"\n                                [routerLink]=\"['/'+campaign.url]\" [routerDirection]=\"'root'\" [routerLinkActive]=\"['button-active-dark']\"\n                                detail=\"true\">\n                                <ion-icon slot=\"start\" [name]=\"campaign.icon\" style=\"font-size: 3.0rem;\"></ion-icon>\n                                <div class=\"menu-item-container\">\n                                    <div class=\"r-h3 ion-text-wrap\">\n                                        Shop campagne:\n                                        <br>\n                                        <span class=\"r-h1\" style=\"font-size: 1.9rem !important;\">{{ campaign.title.replace('Campagne: ', '')\n                                            }}</span>\n                                    </div>\n                                </div>\n                            </ion-item>\n                        </div>\n\n                    </ng-container>\n\n                </div>\n\n            </div>\n\n            <ion-item-divider color=\"tertiary\">\n                <ion-label class=\"r-h2 r-b\">Mijn shopping bag</ion-label>\n            </ion-item-divider>\n\n            <ion-item lines=\"none\" class=\"flex-button fashion-item user-hand\" [routerLink]=\"['/shopping-bag']\" [routerDirection]=\"'root'\"\n                [routerLinkActive]=\"['button-active']\" detail=\"true\">\n                <ion-icon slot=\"start\" name=\"cart-outline\" color=\"dark\"></ion-icon>\n                <div class=\"menu-item-container\">\n                    <div class=\"r-h2\">Shopping Bag</div>\n                    <ion-badge color=\"secondary\">\n                        <div class=\"r-h3 r-b\" style=\"color: white;\">\n                            {{ getCartTotal() | currency:'EUR':'symbol' }}\n                        </div>\n                    </ion-badge>\n                </div>\n            </ion-item>\n            \n            <ion-item lines=\"none\" class=\"flex-button fashion-item user-hand\" [routerLink]=\"['/wishlist']\" [routerDirection]=\"'root'\"\n                [routerLinkActive]=\"['button-active']\" detail=\"true\">\n                <ion-icon slot=\"start\" name=\"heart-outline\" color=\"dark\"></ion-icon>\n                <div class=\"menu-item-container\">\n                    <div class=\"r-h2\">Wishlist</div>\n                    <ion-badge color=\"secondary\">\n                        <div class=\"r-h3 r-b\" style=\"color: white;\">\n                            {{ getWishlistTotal() }} item<ng-container *ngIf=\"getWishlistTotal() > 1 || getWishlistTotal() === 0\">s\n                            </ng-container>\n                        </div>\n                    </ion-badge>\n                </div>\n            </ion-item>\n\n            <ion-item class=\"author-container ion-text-center\" color=\"tertiary\" style=\"margin-top: 40px; padding-bottom: 15px;\">\n                <ion-label class=\"ion-no-margin\">\n                    <ion-note style=\"width: 100%;\" class=\"author-text ion-text-center\">\n                        <b>{{ author }}</b> - v{{ version }} - <b>Made with</b> ♥\n                    </ion-note>\n                </ion-label>\n            </ion-item>\n\n        </div>\n\n    </ion-list>\n\n</div>","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { NavController, AlertController, ModalController, LoadingController, Platform, ToastController } from '@ionic/angular';\nimport { CartService } from '../../../services/cart.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { WishlistService } from '../../../services/wishlist.service';\nimport { OutfitService } from '../../../services/outfit.service';\nimport { Outfit } from '../../../models/outfit';\nimport { forkJoin, lastValueFrom, Observable, Subscription, tap } from 'rxjs';\nimport { OrderLine } from '../../../models/order-line';\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\n\n@Component({\n  selector: 'rope-wishlist-overview',\n  templateUrl: './wishlist-overview.component.html',\n  styleUrls: ['./wishlist-overview.component.scss'],\n})\nexport class WishlistOverviewComponent implements OnInit {\n\n  @Output() navigateToShopDetail = new EventEmitter();\n  @Output() navigateToCart = new EventEmitter();\n\n  public wishlist: any = [];\n  public loading: boolean = true;\n\n  public images = [];\n  public stockChecking = false;\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  constructor(\n    public navCtrl: NavController,\n    public cartService: CartService,\n    public alertCtrl: AlertController,\n    public authService: AuthService,\n    public modalCtrl: ModalController,\n    public loadingCtrl: LoadingController,\n    public wishlistService: WishlistService,\n    public analyticsService: AnalyticsService,\n    public screensizeService: ScreensizeService,\n    public outfitService: OutfitService,\n    public toastCtrl: ToastController,\n    public platform: Platform\n  ) { }\n\n  async ngOnInit() {\n\n    this.screensizeObserver = this.screensizeService\n      .isDesktopView()\n      .subscribe((isDesktop) => {\n        this.isDesktop = isDesktop;\n    });\n\n    await this.wishlistService.sync();\n    this.wishlist = this.wishlistService.items;\n    for (let item of this.wishlist) {\n      item.in_cart = await this.checkInCart(item.product_variant);\n    }\n\n    if (this.wishlist.length > 0) {\n      this.checkStock();\n      this.setupImages();\n    }\n\n    this.loading = false;\n\n  }\n\n  public setupImages() {\n\n    this.images = [];\n    if (this.wishlist.length === 0) {\n      return;\n    }\n\n    const indices = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];\n    let lastIndex;\n    for (const index of indices) {\n\n      const orderLine = this.wishlist[index];\n      if (orderLine) {\n        lastIndex = index;\n        this.images.push(this.getImage(orderLine));\n      } else {\n        this.images.push(this.getImage(this.wishlist[Math.floor(Math.random() * (lastIndex + 1))]));\n      }\n\n    }\n\n  }\n\n  public wishlistEmpty() {\n    return this.wishlist.length === 0;\n  }\n\n  public getImage(item) {\n\n    const sortStrings = ['BASICS', 'MUSTHAVES'];\n    const outfits = item.product_variant.product.outfits.sort((a, b) => {\n\n      const indexA = sortStrings.indexOf(a.outfit_type);\n      const indexB = sortStrings.indexOf(b.outfit_type);\n\n      const timeA = a.timestamp_online;\n      const timeB = b.timestamp_online;\n\n      if (indexA == indexB) {\n        return (timeA < timeB) ? 1 : (timeA > timeB) ? -1 : 0;\n      } else {\n        return (indexA < indexB) ? -1 : 1;\n      }\n\n    });\n    return outfits[0].main_media_url;\n\n  }\n\n  public getStockColor(item) {\n\n    if (item['total_stock'] > 0) {\n      return 'positive';\n    } else if (item['total_stock'] <= 0) {\n      return 'negative';\n    }\n\n  }\n\n  public async checkStock() {\n\n    this.stockChecking = true;\n\n    let observables = [];\n    for (const orderLine of this.wishlist) {\n      let obs = this.outfitService\n        .getProduct(orderLine.product_variant.product.id, orderLine.product_variant.product.outfits[0].id)\n        .pipe(\n          tap((products) => {\n            const pv = products[0].product_variants.find(\n              (pp) => pp.id === orderLine[\"product_variant\"].id\n            );\n            orderLine[\"total_stock\"] = pv[\"all_stocks\"].reduce(\n              (a, b) => a + b.stock_level,\n              0\n            );\n          })\n        );\n      observables.push(obs);\n    }\n\n    forkJoin(observables).subscribe(() => {\n      this.stockChecking = false;\n    });\n  }\n\n  public removeFromWishlist(item) {\n    this.wishlistService.remove(item.product_variant).subscribe(r => {\n      this.wishlist = this.wishlistService.items;\n      this.setupImages();\n    });\n  }\n\n  public goToShopDetail(outfit: Outfit) {\n    this.navigateToShopDetail.emit(outfit);\n  }\n\n  public getTotalCount() {\n    return this.wishlist.length;\n  }\n\n  public getSubtotal() {\n    return this.wishlist.reduce((a, b) => a + b.product_variant.product.unit_price, 0);\n  }\n\n  public getDiscount() {\n    return this.getTotal() - this.getSubtotal();\n  }\n\n  public getTotal() {\n    return this.wishlist.reduce((a, b) => a + (b.product_variant.product.discount_price ? b.product_variant.product.discount_price : b.product_variant.product.unit_price), 0);\n  }\n\n  public async checkInCart(pv) {\n    return await lastValueFrom(this.cartService.checkOrderLine(pv));\n  }\n\n  public async addToOrder(item, pv?, counter?) {\n\n    const count = counter | 1;\n    let productVariant = pv;\n\n    let product = productVariant.product;\n    const outfit = product.outfits[0];\n\n    const products = await lastValueFrom(this.outfitService.getProducts(outfit.id));\n    product = products[0];\n    productVariant = product.product_variants.find(p => p.id === productVariant.id);\n\n    const orderLine: OrderLine = new OrderLine(\n      count,\n      productVariant,\n      product,\n      outfit.main_media_url\n    );\n\n    this.cartService.addOrderLine(orderLine);\n    this.analyticsService.trackAddToCart(\n      \"/shop/add-to-cart/\" + outfit.id,\n      orderLine.subtotal,\n      orderLine.product.id,\n      orderLine.product\n    );\n\n    item.in_cart = true;\n\n    const toast = await this.toastCtrl.create({\n      message:\n        count +\n        \" stuk\" +\n        (count > 1 ? \"s\" : \"\") +\n        \" succesvol toegevoegd aan shopping bag\",\n      duration: 5000,\n      position: \"bottom\",\n      color: \"tertiary\",\n      buttons: [\n        {\n          icon: \"cart-outline\",\n          text: \"Bekijk\",\n          role: \"cancel\",\n          handler: () => {\n            this.navigateToCart.emit();\n          },\n        },\n      ],\n    });\n    return await toast.present();\n  }\n\n}\n","<div *ngIf=\"loading\" style=\"width: 100%; height: 70vh; display: flex; align-items: center; justify-content: center;\">\n    <ion-spinner name=\"crescent\"></ion-spinner>\n</div>\n\n<ng-container *ngIf=\"wishlistEmpty() && !loading\">\n\n    <div\n        style=\"height: 100%; width: 100%; display: flex; justify-content: center; align-items: center; flex-direction: column; background-color: #efefef;\">\n        <ion-icon style=\"font-size: 20.0rem;\" name=\"sad-outline\"></ion-icon>\n        <div style=\"font-size: 1.6rem; margin-top: 10px; font-family: 'Source Sans Pro';\">\n            De wishlist is leeg\n        </div>\n    </div>\n\n</ng-container>\n\n<ng-container *ngIf=\"!wishlistEmpty() && !loading\">\n\n<div class=\"blocks ion-padding\" [ngStyle]=\"{ 'padding': isDesktop ? '' : '0px' }\">\n\n    <ion-grid class=\"ion-no-padding\">\n\n        <ion-row class=\"ion-no-padding\">\n\n            <ion-col size=\"12\" size-lg=\"6\" class=\"ion-no-padding\">\n            \n                <div [ngStyle]=\"{ 'margin-left': isDesktop ?  '50px' : '0px', 'margin-right': isDesktop ? '50px' : '0px', 'padding-top': isDesktop ? '' : '0px', 'padding-bottom': isDesktop ? '' : '10px', 'padding-left': isDesktop ? '' : '0px', 'padding-right': isDesktop ? '' : '0px' }\"\n                    class=\"ion-padding block\" [ngClass]=\"isDesktop ? 'min-height' : ''\">\n            \n                    <div class=\"grid-card\" style=\"background-color: var(--ion-color-light);\">\n                        <div class=\"shopping-bag-title\">\n                            Wishlist\n                        </div>\n\n                        <ion-grid class=\"insta-grid ion-no-padding\" [ngClass]=\"isDesktop ? 'insta-grid-desktop' : ''\">\n                            <ion-row class=\"ion-no-padding\">\n                        \n                                <ion-col size=\"4\" class=\"ion-no-padding\">\n                                    <div class=\"bg-container\" [ngStyle]=\"{'background-image': 'url(' + images[0] + ')'}\">\n                                    </div>\n                                </ion-col>\n                                <ion-col size=\"2\" class=\"ion-no-padding\">\n                                    <ion-row class=\"ion-no-padding\">\n                                        <ion-col size=\"12\" class=\"ion-no-padding\">\n                                            <div class=\"bg-container\" [ngStyle]=\"{'background-image': 'url(' + images[1] + ')'}\">\n                                            </div>\n                                        </ion-col>\n                                    </ion-row>\n                                    <ion-row class=\"ion-no-padding\">\n                                        <ion-col size=\"12\" class=\"ion-no-padding\">\n                                            <div class=\"bg-container\" [ngStyle]=\"{'background-image': 'url(' + images[2] + ')'}\">\n                                            </div>\n                                        </ion-col>\n                                    </ion-row>\n                                </ion-col>\n                        \n                                <ion-col size=\"4\" class=\"ion-no-padding\">\n                                    <div class=\"bg-container\" [ngStyle]=\"{'background-image': 'url(' + images[3] + ')'}\">\n                                    </div>\n                                </ion-col>\n                                <ion-col size=\"2\" class=\"ion-no-padding\">\n                                    <ion-row class=\"ion-no-padding\">\n                                        <ion-col size=\"12\" class=\"ion-no-padding\">\n                                            <div class=\"bg-container\" [ngStyle]=\"{'background-image': 'url(' + images[4] + ')'}\">\n                                            </div>\n                                        </ion-col>\n                                    </ion-row>\n                                    <ion-row class=\"ion-no-padding\">\n                                        <ion-col size=\"12\" class=\"ion-no-padding\">\n                                            <div class=\"bg-container\" [ngStyle]=\"{'background-image': 'url(' + images[5] + ')'}\">\n                                            </div>\n                                        </ion-col>\n                                    </ion-row>\n                                </ion-col>\n                        \n                            </ion-row>\n                        </ion-grid>\n\n                    </div>\n            \n                </div>\n            \n            </ion-col>\n\n            <ion-col size=\"12\" size-lg=\"6\" class=\"ion-no-padding\">\n\n                <div class=\"block block-wide\" [ngClass]=\"(isDesktop) ? 'boundary' : ''\">\n                \n                    <div class=\"boundary-block\" [ngClass]=\"(isDesktop) ? '' : 'mobile-block'\">\n                \n                        <ion-item-divider style=\"height: 49px; border-radius: 5px;\">\n                            <ion-label style=\"color: black; margin: 2px;\">\n                                <div class=\"r-h2 r-b\">Producten op je wishlist</div>\n                            </ion-label>\n                        </ion-item-divider>\n                \n                        <ion-card-content>\n                \n                            <ion-item *ngFor=\"let item of wishlist\">\n                                <div slot=\"start\"\n                                    style=\"display: flex; flex-direction: column; justify-content: center; align-items: center;\">\n                \n                                    <ion-avatar class=\"custom-avatar\" (click)=\"goToShopDetail(item.product_variant.product.outfits[0])\">\n                                        <img [src]=\"getImage(item)\">\n                                    </ion-avatar>\n                \n                                    <ion-button size=\"small\" color=\"danger\" (click)=\"removeFromWishlist(item)\"\n                                        class=\"button-extra-small\">\n                                        <ion-icon name=\"trash\" slot=\"icon-only\" style=\"font-size: 1.3rem;\"></ion-icon>\n                                    </ion-button>\n                \n                                </div>\n                                <ion-label (click)=\"goToShopDetail(item.product_variant.product.outfits[0])\">\n\n                                    <h2 class=\"ion-text-wrap\" style=\"font-family: 'Source Sans Pro', sans-serif;\">\n                                        {{ item.product_variant.product.name.replace('Dameskleding', '') }}\n                                        {{ item.product_variant.size.name }}</h2>\n                                    <p text-wrap>1 stuk x\n                                        {{ (item.product_variant.product.discount_price ? item.product_variant.product.discount_price : item.product_variant.product.unit_price) | currency:'EUR':'symbol' }}\n                                    </p>\n\n                                    <div *ngIf=\"item['total_stock'] !== undefined && !stockChecking\" class=\"stock-status ion-text-wrap\"\n                                        [ngClass]=\"getStockColor(item)\" style=\"display: inline-block;\">\n                                        <div class=\"stock-holder\" style=\"padding-right: 10px;\">\n                                            <ion-icon name=\"checkmark-circle-outline\" class=\"marg-icon\"\n                                                [color]=\"item['total_stock'] > 0 ? 'secondary' : 'danger'\"></ion-icon>\n                                            <ng-container *ngIf=\"item['total_stock'] > 3\">Op voorraad</ng-container>\n                                            <ng-container *ngIf=\"item['total_stock'] <= 3 && item['total_stock'] > 0\">Nog maar\n                                                {{ item['total_stock'] }} op voorraad</ng-container>\n                                            <ng-container *ngIf=\"item['total_stock'] <= 0\">Niet meer op voorraad</ng-container>\n                                        </div>\n                                    </div>\n                                    \n                                    <div *ngIf=\"stockChecking\" class=\"stock-status\">\n                                        <div class=\"stock-holder ion-text-wrap\">\n                                            <ion-spinner name=\"crescent\" class=\"marg-icon\" style=\"height: 9px;\"></ion-spinner>\n                                            Voorraad ophalen...\n                                        </div>\n                                    </div>\n\n                                </ion-label>\n                                <div slot=\"end\">\n                                    <ion-button style=\"--padding-start: 0px; --padding-end: 0px;\" expand=\"block\"\n                                        (click)=\"addToOrder(item, item.product_variant, 1)\" color=\"tertiary\" [disabled]=\"item.in_cart\">\n                                        <ion-icon slot=\"icon-only\" name=\"cart-outline\" style=\"padding-left: 15.4px; padding-right: 15.4px;\"></ion-icon>\n                                        <ion-icon name=\"add-circle\" color=\"secondary\" style=\"font-size: 1.3rem; position: absolute; right: 5px;\"></ion-icon>\n                                    </ion-button>\n                                </div>\n                            </ion-item>\n                \n                            <ion-item class=\"top-border\" lines=\"none\">\n                                <ion-label>\n                                    <h2 style=\"font-family: 'Source Sans Pro', sans-serif;\">Subtotaal</h2>\n                                    <p>\n                                        {{ wishlist.length }} product<span *ngIf=\"wishlist.length > 1\">en</span> -\n                                        {{ getTotalCount() }} stuks\n                                    </p>\n                                </ion-label>\n                                <div slot=\"end\">\n                                    {{ getSubtotal() | currency:'EUR':'symbol' }}\n                                </div>\n                            </ion-item>\n                \n                            <ion-item lines=\"none\">\n                                <ion-label>\n                                    <h2 style=\"font-family: 'Source Sans Pro', sans-serif;\">Korting</h2>\n                                </ion-label>\n                                <div slot=\"end\">\n                                    {{ getDiscount() | currency:'EUR':'symbol' }}\n                                </div>\n                            </ion-item>\n                \n                            <ion-item class=\"top-border\" lines=\"none\" style=\"margin-top: 0px !important;\">\n                                <ion-label>\n                                    <div class=\"r-h2 r-b\">\n                                        Totaal\n                                    </div>\n                                </ion-label>\n                                <div slot=\"end\">\n                                    {{ getTotal() | currency:'EUR':'symbol' }}\n                                </div>\n                            </ion-item>\n                \n                            <br>\n                \n                        </ion-card-content>\n                \n                    </div>\n                \n                </div>\n\n            </ion-col>\n\n        </ion-row>\n\n    </ion-grid>\n\n</div>\n\n</ng-container>\n","import { Component, OnInit, Input, Output, EventEmitter, ViewChild } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n// import { NgAisSearchBox } from 'angular-instantsearch/search-box/search-box';\nimport { Subscription } from 'rxjs';\nimport { Outfit } from '../../../models/outfit';\nimport { CoreService } from '../../../services/core.service';\nimport { OutfitService } from '../../../services/outfit.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\n\n@Component({\n  selector: 'rope-search',\n  templateUrl: './search.component.html',\n  styleUrls: ['./search.component.scss'],\n})\nexport class SearchComponent implements OnInit {\n\n  @Input() public title;\n  @Input() public subtitle;\n  @Input() public placeholder;\n\n  @Output() public navigateToShopDetail = new EventEmitter();\n\n  //TODO\n  // @ViewChild('searchBox', { static: false }) searchBox: NgAisSearchBox;\n  @ViewChild('searchBox', { static: false }) searchBox;\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  public config;\n\n  constructor(\n    private coreService: CoreService,\n    public screensizeService: ScreensizeService,\n    private outfitService: OutfitService,\n    private route: ActivatedRoute\n  ) { }\n\n  async ngOnInit() {\n\n    this.screensizeObserver = this.screensizeService.isDesktopView().subscribe(isDesktop => {\n      this.isDesktop = isDesktop;\n    });\n\n    const storeIdentifier = this.coreService.store.store_identifier;\n\n    const searchClient = await this.outfitService.getSearchClient();\n    this.config = {\n      indexName: storeIdentifier + '_outfit',\n      searchClient\n    };\n\n    setTimeout(() => {\n      const q = this.route.snapshot.queryParams['q'];\n      if (q) {\n        this.searchBox.searchBox.nativeElement.value = q;\n        this.searchBox.searchBox.nativeElement.dispatchEvent(new Event('input'));\n      }\n    }, 100);\n\n  }\n\n  ngOnDestroy() {\n    if (this.screensizeObserver) {\n      this.screensizeObserver.unsubscribe();\n    }\n  }\n\n  public getImage(outfit: any) {\n    const storeBucketName = this.coreService.store.store_bucket_name;\n    return 'https://storage.googleapis.com/'+storeBucketName+'-bucket/image/outfit/' + outfit.id + '.jpg';\n  }\n\n  public goToShopDetail(outfit: Outfit, queryID) {\n    this.navigateToShopDetail.emit({\n      outfit: outfit,\n      queryID: queryID\n    });\n  }\n\n}\n","<!-- <ais-instantsearch *ngIf=\"config\" [config]=\"config\">\n\n  <ais-configure [searchParameters]=\"{ clickAnalytics: true }\"></ais-configure>\n\n  <div [ngClass]=\"isDesktop ? 'blocks' : ''\">\n\n    <div class=\"block top-block\" *ngIf=\"isDesktop\">\n\n      <ion-card-header>\n        <ion-card-title>{{ title }}</ion-card-title>\n      </ion-card-header>\n      <ion-card-content>\n        <div style=\"display: flex; justify-content: center; align-items: center; margin-top: 20px; margin-bottom: 5px;\">\n          <ais-search-box #searchBox [placeholder]=\"'Zoek een product...'\"></ais-search-box>\n        </div>\n      </ion-card-content>\n\n    </div>\n\n    <div *ngIf=\"!isDesktop\" style=\"padding: 10px;\">\n      <ais-search-box #searchBox [placeholder]=\"'Zoek een product...'\"></ais-search-box>\n    </div>\n\n    <ais-infinite-hits>\n      <ng-template let-hits=\"hits\" let-results=\"results\" let-refineNext=\"showMore\" let-isLastPage=\"isLastPage\">\n\n        <div [ngClass]=\"isDesktop ? 'block bg-alt' : ''\" *ngIf=\"results && results.query && results.query.length > 0\">\n\n          <ion-card-content style=\"padding-left: 0px; padding-right: 0px;\">\n\n            <ion-grid class=\"ion-no-padding\">\n              <ion-row>\n                <ion-col *ngFor=\"let hit of hits; let i = index;\" size=\"6\" size-xl=\"3\" size-lg=\"3\" size-md=\"3\" style=\"padding: 5px;\">\n                  <rope-product-container\n                    *ngIf=\"hit\"\n                    [outfit]=\"hit\"\n                    [showLikeButton]=\"false\"\n                    [onlyPreorders]=\"false\"\n                    (navigateToShopDetail)=\"goToShopDetail($event, hit.__queryID)\"\n                  ></rope-product-container>\n                </ion-col>\n              </ion-row>\n            </ion-grid>\n\n            <div *ngIf=\"results && results.query && results.query.length > 0 && hits && hits.length === 0\" class=\"no-results\">\n              <div class=\"no-results-text\">Geen producten gevonden...</div>\n            </div>\n\n            <ion-infinite-scroll (ionInfinite)=\"refineNext($event)\" *ngIf=\"!isLastPage\">\n              <ion-infinite-scroll-content loadingSpinner=\"crescent\" loadingText=\"Meer laden...\">\n              </ion-infinite-scroll-content>\n            </ion-infinite-scroll>\n\n          </ion-card-content>\n\n        </div>\n\n      </ng-template>\n    </ais-infinite-hits>\n\n  </div>\n\n</ais-instantsearch> -->","import { Component, OnInit, isDevMode, Output, EventEmitter, Input } from '@angular/core';\nimport { Order } from '../../../models/order';\nimport { CartService } from '../../../services/cart.service';\nimport { AlertController, ModalController, LoadingController, Platform } from '@ionic/angular';\nimport { AuthService } from '../../../services/auth.service';\nimport { DatePipe, CurrencyPipe } from '@angular/common';\nimport { CoreService } from '../../../services/core.service';\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport { ShipmentService } from '../../../services/shipment.service';\nimport { Shipment } from '../../../models/shipment';\nimport { ScreensizeService } from '../../../services/screensize.service';\nimport { lastValueFrom, Subscription } from 'rxjs';\nimport { CookieService } from 'ngx-cookie-service';\n\n@Component({\n  selector: \"rope-cart-summary\",\n  templateUrl: \"./cart-summary.component.html\",\n  styleUrls: [\"./cart-summary.component.scss\"],\n})\nexport class CartSummaryComponent implements OnInit {\n  \n  @Input() version;\n\n  @Output() public navigateToCart = new EventEmitter();\n\n  @Output() public onAddressDetail = new EventEmitter();\n  @Output() public onShipmentChoice = new EventEmitter();\n  @Output() public onDiscountCheck = new EventEmitter();\n\n  @Output() public onLogin = new EventEmitter();\n  @Output() public onPlaceOrder = new EventEmitter();\n\n  public order: Order;\n  public collapseInfo;\n\n  public isDevMode = false;\n  public testNewPayment = true;\n\n  public toggleDiscount = false;\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n  public extraSmallDisplay = false;\n\n  constructor(\n    public cartService: CartService,\n    public platform: Platform,\n    public alertCtrl: AlertController,\n    public modalCtrl: ModalController,\n    public authService: AuthService,\n    public datePipe: DatePipe,\n    public currencyPipe: CurrencyPipe,\n    public coreService: CoreService,\n    public cookieService: CookieService,\n    public loadingCtrl: LoadingController,\n    public analyticsService: AnalyticsService,\n    public shipmentService: ShipmentService,\n    public screensizeService: ScreensizeService\n  ) {}\n\n  ngOnInit() {\n\n    this.extraSmallDisplay = this.platform.width() < 400;\n\n    this.screensizeObserver = this.screensizeService\n      .isDesktopView()\n      .subscribe((isDesktop) => {\n        this.isDesktop = isDesktop;\n      });\n\n    const fbpCookie = this.cookieService.get('_fbp');\n    const fbcCookie = this.cookieService.get('_fbc');\n\n    this.isDevMode = isDevMode();\n    this.cartService.ready().then(async (res) => {\n\n      this.order = this.cartService.getCurrentOrder();\n      const productIds = this.cartService.getProductIds();\n\n      this.cartService.calculatePromocodePercentageDiscount();\n\n      this.analyticsService.trackInitiateCheckout(\n        this.getTotalCost(),\n        productIds\n      );\n\n      this.order.version = this.version;\n      this.order.user_agent = window.navigator.userAgent;\n      this.order.fbp_cookie = fbpCookie;\n      this.order.fbc_cookie = fbcCookie;\n\n      // Check address\n      await lastValueFrom(this.authService.doUpdateUserDetails());\n      const currentUser = this.authService.getCurrentUser();\n\n      this.order['user'] = currentUser;\n      if (\n        !currentUser.street ||\n        !currentUser.postal_code ||\n        !currentUser.house_number ||\n        !currentUser.city\n      ) {\n        this.cartService.setAddress(undefined, true);\n      } else {\n        const address = [];\n        address[\"street\"] = currentUser.street;\n        address[\"house_number\"] = currentUser.house_number;\n        address[\"house_number_extension\"] = currentUser.house_number_extension;\n        address[\"postal_code\"] = currentUser.postal_code;\n        address[\"city\"] = currentUser.city;\n        address[\"country_code\"] = currentUser.country_code;\n        this.cartService.setAddress(address, false);\n        this.order['address'] = address;\n      }\n\n      // Check if the chosen options are still correct\n      if (this.order.shipment) {\n        const delay = this.order.order_lines.some(\n          (ol) => ol.productVariant.stocks[0].stock_level === 0\n        );\n\n        let extraDelay = 0;\n        let orderLinesDelayed = this.order.order_lines.filter(\n          (ol) => ol.productPreorder !== undefined\n        );\n        if (orderLinesDelayed.length > 0) {\n          let deliveryDate = Math.max(\n            ...orderLinesDelayed.map(\n              (ol) => ol.productPreorder.timestamp_delivery\n            )\n          );\n          let diff = Math.ceil(\n            (deliveryDate - new Date().getTime()) / (1000 * 60 * 60 * 24)\n          );\n          extraDelay = diff;\n        }\n\n        if (!this.shipmentIsPickup(this.order.shipment)) {\n          this.shipmentService\n            .getShippingTimeFrames(\n              this.order.shipment,\n              delay === true ? \"1\" : \"0\",\n              extraDelay\n            )\n            .subscribe((r) => {\n              let first;\n              if (this.order.shipment.shipping_method[\"shipping_courier\"]) {\n                first = r.filter(\n                  (s) =>\n                    s.shipping_method[\"shipping_courier\"].id ===\n                    this.order.shipment.shipping_method[\"shipping_courier\"].id\n                )[0];\n              } else {\n                first = r[0];\n              }\n\n              if (\n                !first ||\n                this.order.shipment.timeframe_start < first.timeframe_start\n              ) {\n                this.order.shipment = undefined;\n                this.cartService.storeOrder();\n                this.coreService.showAlert(\n                  \"We kunnen helaas de gevraagde leverdatum voor de bezorging niet meer halen.<br><br> <b>Selecteer een andere datum a.u.b.</b>\"\n                );\n              }\n            });\n        } else {\n          \n        }\n      }\n    });\n\n    //Sync the cart after customer registered\n    this.cartService.syncWithServer();\n\n  }\n\n  ngOnDestroy() {\n    if (this.screensizeObserver) {\n      this.screensizeObserver.unsubscribe();\n    }\n  }\n\n  goBack() {\n    this.navigateToCart.emit();\n  }\n\n  public getTotalCount() {\n    return this.cartService.getTotalCount();\n  }\n\n  public getSubtotal() {\n    return this.cartService.getSubtotal();\n  }\n\n  public getDiscount() {\n    return this.cartService.getDiscount();\n  }\n\n  public getTotalCost() {\n    return this.cartService.getTotalCost() - this.cartService.getDiscount();\n  }\n\n  public getShippingCost(shipment?: Shipment) {\n    if (this.order && !this.order.shipment) {\n      return \"n.v.t.\";\n    }\n    const costObj = this.order.shipment.shipping_method[\n      \"shipping_method_prices\"\n    ].filter((smp) => !smp.timestamp_end)[0];\n    const shippingCost =\n      this.cartService.getSubtotal() - this.cartService.getDiscount() >=\n      costObj.threshold_order_total\n        ? costObj.threshold_price\n        : costObj.price;\n    if (shippingCost === 0.0) {\n      return \"Gratis\";\n    } else {\n      return this.currencyPipe.transform(shippingCost, \"EUR\", \"symbol\");\n    }\n  }\n\n  public getShippingThresholdOrderTotal(shipment?: Shipment) {\n    if (this.order && !this.order.shipment) {\n      return \"\";\n    }\n    const costObj = this.order.shipment.shipping_method[\n      \"shipping_method_prices\"\n    ].filter((smp) => !smp.timestamp_end)[0];\n    if (costObj.threshold_order_total && costObj.threshold_order_total > 0.00) {\n      return (\n        \"Vanaf een subtotaal van \" +\n        this.currencyPipe.transform(\n          costObj.threshold_order_total,\n          \"EUR\",\n          \"symbol\"\n        ) +\n        \" \" +\n        (costObj.threshold_price === 0.00 ? 'is deze verzendmethode gratis' : 'kost deze verzendmethode nog maar '+this.currencyPipe.transform(costObj.threshold_price, \"EUR\", \"symbol\"))\n      );\n    }\n  }\n\n  public getDiscountCorrection(orderLine) {\n    if (this.order.coupon && orderLine[\"promo_discount_calculated\"] > 0.0) {\n      if (this.order.promocode.type === \"PERCENTAGE\") {\n        const factor = orderLine.subtotal / this.cartService.getSubtotal();\n        const correction =\n          factor * this.order.coupon.value * this.order.promocode.amount;\n        return correction;\n      }\n    }\n    return 0.0;\n  }\n\n  public getAddress(shipment: Shipment) {\n    const shopName = this.order.shipment.name\n      ? this.order.shipment.name + \" - \"\n      : \"\";\n    const houseNumberExt = shipment.house_number_extension\n      ? \"-\" + shipment.house_number_extension\n      : \"\";\n    return (\n      shopName +\n      shipment.street +\n      \" \" +\n      shipment.house_number +\n      houseNumberExt +\n      \" in \" +\n      shipment.city\n    );\n  }\n\n  public getTimeInfo(shipment: Shipment) {\n    if (shipment.timeframe_end) {\n      return (\n        \"tussen \" +\n        this.datePipe.transform(shipment.timeframe_start, \"HH:mm\") +\n        \" en \" +\n        this.datePipe.transform(shipment.timeframe_end, \"HH:mm\")\n      );\n    } else {\n      return (\n        \"vanaf \" + this.datePipe.transform(shipment.timeframe_start, \"HH:mm\")\n      );\n    }\n  }\n\n  public shipmentIsPickup(shipment?) {\n    return (\n      this.order.shipment.shipping_method.name ===\n        \"ROPE_RETAIL_PICKUP_AT_SHOP\" ||\n      this.order.shipment.shipping_method.name === \"PICK_UP_AT_PICK_UP_POINT\" ||\n      this.order.shipment.shipping_method.name === \"BUDBEE_BOX_DELIVERY\"\n    );\n  }\n\n  public getCouponType() {\n    if (this.order[\"coupon\"].coupon_type === \"GIFTCARD\") {\n      return \"Kadobon\";\n    } else if (this.order[\"coupon\"].coupon_type === \"VOUCHER\") {\n      return \"Tegoedbon\";\n    }\n  }\n\n  public approveConsent(event) {\n    this.order[\"consentApproved\"] = event.detail.checked;\n  }\n\n  public signupNewsletter(event) {\n    this.order[\"newsletterSignUp\"] = event.detail.checked;\n  }\n\n  public removePromocode() {\n    this.order.promocode = undefined;\n    this.cartService.storeOrder();\n  }\n\n  public removeCoupon() {\n    this.order.coupon = undefined;\n    this.cartService.storeOrder();\n  }\n\n  public placeOrder() {\n    if (!this.authService.isAuthenticated()) {\n      this.onLogin.emit();\n    } else {\n      this.onPlaceOrder.emit();\n    }\n  }\n\n}\n","<ng-container *ngIf=\"order && order['user']\">\n\n  <ng-container *ngIf=\"isDesktop\">\n    <ion-item-divider>\n      <ion-buttons slot=\"start\" style=\"margin-left: 5px; z-index: 1;\">\n        <ion-button fill=\"solid\" color=\"light\" size=\"small\" (click)=\"goBack()\">\n          <ion-icon slot=\"start\" name=\"arrow-back\"\n            style=\"font-size: 1.1rem !important; color: var(--ion-color-secondary);\"></ion-icon>\n          <div\n            style=\"font-family: var(--default-font); font-size: 1.0rem; color: var(--ion-color-secondary); margin-left: 5px;\">\n            Ga terug</div>\n        </ion-button>\n      </ion-buttons>\n    </ion-item-divider>\n  </ng-container>\n\n  <div class=\"ion-padding\">\n\n    <ion-list>\n\n      <div style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px;\">\n        <ion-item-divider>\n          <ion-label style=\"color: black; margin: 2px;\">\n            Algemene gegevens\n          </ion-label>\n          <ion-icon style=\"margin-right: 10px;\" slot=\"end\" [name]=\"order['addressInvalid'] ? 'close-circle-outline' : 'checkmark-circle-outline'\" [color]=\"order['addressInvalid'] ? 'danger' : 'success'\"></ion-icon>\n        </ion-item-divider>\n        <ion-item (click)=\"onAddressDetail.emit()\" lines=\"none\" detail=\"true\" style=\"cursor: pointer;\">\n          <ion-icon slot=\"start\" name=\"home-outline\" color=\"dark\" style=\"font-size: 1.6rem;\"></ion-icon>\n          <ion-label class=\"item-force-height\" style=\"display: flex; align-items: center;\" *ngIf=\"!order['addressInvalid']\">\n            <div>\n              <h2 class=\"ion-text-wrap\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">\n                {{ order['user'].first_name }} {{ order['user'].last_name }}\n              </h2>\n              <h2 class=\"ion-text-wrap\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">\n                {{ order['user'].username }} {{ order['user'].is_guest ? ' (Gastgebruiker)' : '' }}\n              </h2>\n              <br>\n              <h2 class=\"ion-text-wrap\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">\n                {{ order['address'].street }} {{ order['address'].house_number }} <ng-container *ngIf=\"order['address'].house_number_extension\">\n                  -{{ order['address'].house_number_extension }}</ng-container>\n              </h2>\n              <p>{{ order['address'].postal_code }} {{ order['address'].city }} ({{ order['address'].country_code }})</p>\n            </div>\n          </ion-label>\n          <ion-label class=\"item-force-height\" style=\"display: flex; align-items: center;\" *ngIf=\"order['addressInvalid']\">\n            <div>\n              <h2 class=\"ion-text-wrap\" color=\"danger\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem; color: var(--ion-color-danger);\">Geen\n                adres\n                gevonden</h2>\n              <p>Vul je adresgegevens in</p>\n            </div>\n          </ion-label>\n        </ion-item>\n      </div>\n\n      <div style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px; margin-top: 15px;\">\n        <ion-item-divider>\n          <ion-label style=\"color: black;  margin: 2px;\">\n            Bezorging\n          </ion-label>\n          <ion-icon style=\"margin-right: 10px;\" slot=\"end\" [name]=\"!order.shipment ? 'close-circle-outline' : 'checkmark-circle-outline'\" [color]=\"!order.shipment ? 'danger' : 'success'\"></ion-icon>\n        </ion-item-divider>\n        <ion-item (click)=\"onShipmentChoice.emit()\" lines=\"none\" class=\"item-force-height\" detail=\"true\" style=\"cursor: pointer;\">\n          <ion-icon slot=\"start\" name=\"cube-outline\" color=\"dark\" style=\"font-size: 1.6rem;\"></ion-icon>\n          <ion-label class=\"item-force-height\" style=\"display: flex; align-items: center;\" *ngIf=\"order.shipment\">\n            <div>\n              <h2 text-wrap style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">{{ order.shipment.shipping_method.localized_string }}</h2>\n              <h2 class=\"ion-text-wrap\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\" >via {{ (order.shipment.shipping_method['shipping_courier'].custom_name || order.shipment.shipping_method['shipping_courier'].name) }}</h2>\n              <div style=\"margin-top: 20px;\">\n                <div>\n                  <div class=\"r-h3 ion-text-wrap\" *ngIf=\"shipmentIsPickup()\">\n                    Locatie: {{ order.shipment.name }}\n                  </div>\n                  <div class=\"first-letter-uppercase ion-text-wrap r-h3\">\n                    {{ order.shipment.timeframe_start | date:'fullDate' }}<br>{{ getTimeInfo(order.shipment) }}\n                  </div>\n                </div>\n              </div>\n            </div>\n          </ion-label>\n          <ion-label class=\"item-force-height\" style=\"display: flex; align-items: center;\" *ngIf=\"!order.shipment\">\n            <div>\n              <h2 text-wrap color=\"danger\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem; color: var(--ion-color-danger);\">Nog niet\n                gekozen</h2>\n              <p class=\"ion-text-wrap\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">Kies een van de bezorgopties</p>\n            </div>\n          </ion-label>\n        </ion-item>\n      </div>\n\n      <div style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px; margin-top: 15px;\">\n        <ion-item-divider style=\"height: 49px;\">\n          <ion-label style=\"color: black;  margin: 2px;\">\n            Kortingen\n          </ion-label>\n          <ion-icon *ngIf=\"order.promocode || order.coupon\" style=\"margin-right: 10px;\" slot=\"end\" name=\"checkmark-circle-outline\" color=\"success\"></ion-icon>\n        </ion-item-divider>\n        <ion-item (click)=\"onDiscountCheck.emit()\" lines=\"none\" detail=\"true\" *ngIf=\"!order.promocode && !order.coupon\" style=\"cursor: pointer;\">\n          <ion-icon slot=\"start\" name=\"pricetags-outline\" color=\"dark\" style=\"font-size: 1.6rem;\"></ion-icon>\n          <ion-label class=\"item-force-height\" style=\"display: flex; align-items: center;\">\n            <div>\n              <h2 class=\"ion-text-wrap\" color=\"pending\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">Nog\n                geen\n                kortingscodes ingevuld</h2>\n              <p class=\"ion-text-wrap\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">Heb je een kortingscode? Vul deze dan in</p>\n            </div>\n          </ion-label>\n        </ion-item>\n\n        <ng-container *ngIf=\"order.promocode || order.coupon\">\n\n          <ion-item lines=\"none\" *ngIf=\"order.coupon\" style=\"cursor: pointer;\">\n            <ion-button slot=\"start\" size=\"small\" color=\"danger\" (click)=\"removeCoupon()\" class=\"button-extra-small\">\n              <ion-icon name=\"trash\" slot=\"icon-only\" style=\"font-size: 1.3rem;\"></ion-icon>\n            </ion-button>\n            <ion-label class=\"item-force-height\" style=\"display: flex; align-items: center;\">\n              <div>\n                <h2 class=\"ion-text-wrap\" color=\"pending\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">\n                  Kortingskaart:\n                  {{ order.coupon.coupon_code }}</h2>\n                <p class=\"text-wrap\">t.w.v. {{ order.coupon.value | currency:'EUR':'symbol' }}</p>\n              </div>\n            </ion-label>\n          </ion-item>\n\n          <ion-item lines=\"none\" *ngIf=\"order.promocode\" style=\"cursor: pointer;\">\n            <ion-button slot=\"start\" size=\"small\" color=\"danger\" (click)=\"removePromocode()\" class=\"button-extra-small\">\n              <ion-icon name=\"trash\" slot=\"icon-only\" style=\"font-size: 1.3rem;\"></ion-icon>\n            </ion-button>\n            <ion-label class=\"item-force-height\" style=\"display: flex; align-items: center;\">\n              <div>\n                <h2 text-wrap color=\"pending\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">\n                  Promotie code: {{ order.promocode.code }}</h2>\n                <p class=\"text-wrap\" *ngIf=\"order.promocode.type === 'VALUE'\">t.w.v.\n                  {{ order.promocode.amount | currency:'EUR':'symbol' }}</p>\n                <div class=\"text-wrap\" *ngIf=\"order.promocode.type === 'PERCENTAGE'\">\n                  <p>t.w.v. {{ order.promocode.amount * 100 }}%</p>\n                  <div class=\"shipment-time-holder\" *ngIf=\"cartService.excludedOptionsText\">\n                    <ion-icon name=\"pricetags\" color=\"light\"></ion-icon>\n                    <div>\n                      <h3 class=\"first-letter-uppercase ion-text-wrap\">{{ cartService.excludedOptionsText }}</h3>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </ion-label>\n          </ion-item>\n\n          <ion-item (click)=\"onDiscountCheck.emit()\" lines=\"none\" detail=\"true\" *ngIf=\"!order.promocode || !order.coupon\" style=\"cursor: pointer;\">\n            <ion-icon slot=\"start\" name=\"pricetags\" [color]=\"'secondary'\" style=\"font-size: 1.6rem;\"></ion-icon>\n            <ion-label class=\"item-force-height\" style=\"display: flex; align-items: center;\">\n              <div>\n                <h2 text-wrap color=\"pending\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">Nog\n                  een kortingsbon toevoegen?</h2>\n                <p class=\"text-wrap\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">Klik hier</p>\n              </div>\n            </ion-label>\n          </ion-item>\n\n        </ng-container>\n\n      </div>\n\n      <div style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px; margin-top: 15px;\" *ngIf=\"order['user'] && !order['user'].has_newsletter\">\n        <ion-item-divider style=\"height: 49px;\">\n          <ion-label style=\"color: black;  margin: 2px;\">\n            Nieuwsbrief\n          </ion-label>\n        </ion-item-divider>\n        <ion-item lines=\"none\">\n          <ion-checkbox (ionChange)=\"signupNewsletter($event)\" [checked]=\"order['newsletterSignUp']\" slot=\"start\" color=\"secondary\">\n          </ion-checkbox>\n          <ion-label class=\"ion-text-wrap\">\n            <p style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem; color: black;\">\n              Ja, ik wil de wekelijkse nieuwsbrief ontvangen. Dan ben jij als eerste op de hoogte van onze nieuwe collectie en te gekke acties.\n            </p>\n          </ion-label>\n        </ion-item>\n      </div>\n\n      <div style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px; margin-top: 15px;\">\n        <ion-item-divider style=\"height: 49px;\">\n          <ion-label style=\"color: black;\">\n            Totalen\n          </ion-label>\n        </ion-item-divider>\n        <ion-item class=\"top-border\" lines=\"none\">\n          <ion-label>\n            <h2 style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">Subtotaal</h2>\n            <p style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">\n              {{ order.order_lines.length }}\n              product<span *ngIf=\"order.order_lines.length > 1\">en</span> - {{ getTotalCount() }} stuks\n            </p>\n          </ion-label>\n          <div slot=\"end\">\n            {{ getSubtotal() | currency:'EUR':'symbol' }}\n          </div>\n        </ion-item>\n        <ion-item class=\"top-border\" lines=\"none\" *ngIf=\"order.coupon || order.promocode\">\n          <ion-label>\n            <div style=\"display: flex; justify-content: flex-start; align-items: center;\" (click)=\"toggleDiscount = !toggleDiscount\">\n              <h2 style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">Korting</h2>\n              <ion-icon style=\"font-size: 1.2rem; margin-left: 10px;\" [name]=\"toggleDiscount ? 'arrow-up' : 'arrow-down'\"></ion-icon>\n            </div>\n          </ion-label>\n          <div slot=\"end\">\n            - {{ getDiscount() | currency:'EUR':'symbol' }}\n          </div>\n        </ion-item>\n\n      <div *ngIf=\"toggleDiscount\">\n\n        <ng-container *ngIf=\"order.coupon\">\n          <ion-item-divider style=\"background-color: lightgrey;\">\n            <ion-label style=\"color: black; font-weight: 500; font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\" class=\"ion-text-wrap\">\n              Kortingsbonnen\n            </ion-label>\n          </ion-item-divider>\n          <ion-item>\n            <ion-label class=\"ion-no-margin\">\n              <p class=\"ion-text-wrap\" style=\"font-style: italic; font-size: 1.2rem;\">Deze korting wordt eerst verrekend voordat er een mogelijke kassakorting in procenten wordt verrekend.</p>\n            </ion-label>\n          </ion-item>\n          <ion-item lines=\"none\">\n            <ion-label>\n              <div slot=\"start\" style=\"width: 50px;\"></div>\n              <div>\n                <h2 class=\"ion-text-wrap\" style=\"font-family: 'Source Sans Pro', sans-serif;\">\n                  Kortingskaart: {{ order.coupon.coupon_code }}\n                </h2>\n              </div>\n            </ion-label>\n            <div slot=\"end\">\n              {{ -order.coupon.value | currency:'EUR':'symbol' }}\n            </div>\n          </ion-item>\n        </ng-container>\n\n        <ng-container *ngIf=\"order.promocode\">\n          <ion-item-divider style=\"background-color: var(--ion-color-light);\">\n            <ion-label style=\"color: black; font-weight: 500; font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\" class=\"ion-text-wrap\">\n              Kortingen per product door promotie code\n            </ion-label>\n          </ion-item-divider>\n          <ion-item *ngFor=\"let orderLine of order.order_lines\">\n            <div slot=\"start\" style=\"display: flex; flex-direction: column; justify-content: center; align-items: center;\">\n              <ion-avatar class=\"custom-avatar\">\n                <img [src]=\"orderLine.outfitImage\">\n              </ion-avatar>\n            </div>\n            <ion-label>\n              <h2 class=\"ion-text-wrap\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">\n                {{ orderLine.product.name.replace('Dameskleding', '') }} {{ orderLine.productVariant.size.name }}</h2>\n              <p class=\"ion-text-wrap\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">{{ orderLine.count }} stuk<ng-container *ngIf=\"orderLine.count > 1\">s</ng-container> x\n                {{ (orderLine.product.discount_price ? orderLine.product.discount_price : orderLine.product.unit_price) | currency:'EUR':'symbol' }}\n              </p>\n              <p *ngIf=\"orderLine['promo_discount_calculated'] === 0\" class=\"ion-text-wrap\"\n                style=\" margin: 5px; font-size: 0.9rem; font-style: italic; background-color: var(--ion-color-warning); padding: 2px 10px; color: black; border-radius: 5px;\">\n                Voor dit product geldt de promotie code niet.\n              </p>\n            </ion-label>\n            <div slot=\"end\">\n              {{ -(orderLine['promo_discount_calculated'] - getDiscountCorrection(orderLine)) | currency:'EUR':'symbol' }}\n            </div>\n          </ion-item>\n        </ng-container>\n\n      </div>\n\n      <ion-item class=\"top-border\" lines=\"none\">\n        <ion-label>\n          <h2 style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">Verzendkosten</h2>\n          <p style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\" class=\"ion-text-wrap\">\n            {{ getShippingThresholdOrderTotal() }}\n          </p>\n        </ion-label>\n        <div slot=\"end\">\n          {{ getShippingCost() }}\n        </div>\n      </ion-item>\n      <ion-item class=\"top-border-total\" lines=\"none\">\n        <ion-label>\n          <h2 style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">\n            <b>Totaal te betalen</b>\n          </h2>\n        </ion-label>\n        <div slot=\"end\">\n          <b>{{ getTotalCost() | currency:'EUR':'symbol' }}</b>\n        </div>\n      </ion-item>\n    </div>\n\n    </ion-list>\n  </div>\n\n  <div class=\"ion-padding\">\n    <ion-item>\n      <ion-checkbox (ionChange)=\"approveConsent($event)\" [checked]=\"order['consentApproved']\" slot=\"start\" color=\"secondary\"></ion-checkbox>\n      <ion-label class=\"ion-text-wrap\">\n        <p style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">Door op 'Plaats bestelling & betaal' te klikken, ga ik akkoord\n          met de algemene voorwaarden.\n        </p>\n      </ion-label>\n    </ion-item>\n  </div>\n\n  <div class=\"ion-text-center ion-padding\">\n    <ion-button (click)=\"placeOrder()\" [disabled]=\"!order.shipment || !order['consentApproved']\" color=\"cta\"\n      expand=\"block\" size=\"large\" class=\"ion-text-wrap\">\n      <div style=\"font-family: 'Source Sans Pro', sans-serif;\">Plaats bestelling & betaal</div>\n      <ion-icon name=\"arrow-forward-circle-outline\" slot=\"end\" style=\"font-size: 2.0rem;\"></ion-icon>\n    </ion-button>\n    <p *ngIf=\"!order.shipment\" style=\"color: var(--ion-color-danger);\">Nog geen bezorging gekozen</p>\n    <p *ngIf=\"!order['consentApproved']\" style=\"color: var(--ion-color-danger);\">Nog geen akkoord gegeven voor betalingsverplichting</p>\n  </div>\n\n  <br>\n  <br>\n\n</ng-container>","import { Injectable } from '@angular/core';\nimport { CoreService } from './core.service';\nimport { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\nimport { AuthService } from './auth.service';\nimport { Observable } from 'rxjs';\nimport { PaymentMethod } from '../models/payment-method';\nimport { Payment } from '../models/payment';\nimport { ModalController } from '@ionic/angular';\n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class PaymentService {\n  public timeoutAfter = 30;\n\n  constructor(\n    private coreService: CoreService,\n    private http: HttpClient,\n    private authService: AuthService,\n    private modalCtrl: ModalController\n  ) {}\n\n  public getPaymentMethods(\n    countryCode?: string,\n    isAfter?,\n    useBeta?\n  ): Observable<PaymentMethod[]> {\n    let params: HttpParams = new HttpParams()\n      .set(\"is_active\", \"1\")\n      .set(\"is_omni_kassa\", \"1\")\n      .set(\"get_images\", \"1\")\n      .set(\"is_after\", isAfter ? (isAfter === true ? \"1\" : \"0\") : \"0\")\n      .set(\"country_code\", countryCode);\n\n    if (useBeta === true) {\n      params = params.set(\"use_beta\", \"1\");\n    }\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<PaymentMethod[]>(\n      this.coreService.getBaseUrl() + \"payment_method/get\",\n      requestOptions\n    );\n  }\n\n  public getCurrentPaymentProvider() {\n    let params: HttpParams = new HttpParams();\n     const requestOptions = {\n       params: params,\n       headers: this.coreService.getHeaders(),\n     };\n     return this.http.get<any>(\n       this.coreService.getBaseUrl() + \"payment_method/provider/current\",\n       requestOptions\n     );\n  }\n\n  public initPaymentOmnikassa(orderId, data) {\n    const headers: HttpHeaders = this.coreService\n      .getHeaders()\n      .set(\"X-KiBa-Auth\", this.authService.getCurrentUser().authHeader);\n    const requestOptions = {\n      headers: headers,\n    };\n\n    let body = \"\";\n    body += \"transaction_id=\" + orderId + \"|data=\" + JSON.stringify(data);\n\n    return this.http.post<any>(\n      this.coreService.getBaseUrl() + \"payment/provider/omnikassa/init_payment\",\n      body,\n      requestOptions\n    );\n  }\n\n  public initPaymentPaynl(orderId, data) {\n    const headers: HttpHeaders = this.coreService\n      .getHeaders()\n      .set(\"X-KiBa-Auth\", this.authService.getCurrentUser().authHeader);\n    const requestOptions = {\n      headers: headers,\n    };\n\n    let body = \"\";\n    body += \"transaction_id=\" + orderId + \"|data=\" + JSON.stringify(data);\n\n    return this.http.post<any>(\n      this.coreService.getBaseUrl() + \"payment/provider/paynl/init_payment\",\n      body,\n      requestOptions\n    );\n  }\n\n  public getPaymentMethodsAdyen(amount): Observable<any[]> {\n    let params: HttpParams = new HttpParams().set(\"amount\", amount);\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<any[]>(\n      this.coreService.getBaseUrl() + \"payment/provider/adyen/payment_methods\",\n      requestOptions\n    );\n  }\n\n  public getPaymentMethodsPaynl(countryCode, total): Observable<any[]> {\n    let params: HttpParams = new HttpParams().set(\"country_code\", countryCode).set(\"total\", total);\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<any[]>(\n      this.coreService.getBaseUrl() + \"payment/provider/paynl/payment_methods\",\n      requestOptions\n    );\n  }\n\n  public initPaymentAdyen(orderId, data) {\n    const headers: HttpHeaders = this.coreService\n      .getHeaders()\n      .set(\"X-KiBa-Auth\", this.authService.getCurrentUser().authHeader);\n    const requestOptions = {\n      headers: headers,\n    };\n\n    let body = \"\";\n    body += \"transaction_id=\" + orderId + \"|data=\" + JSON.stringify(data);\n\n    return this.http.post<any>(\n      this.coreService.getBaseUrl() + \"payment/provider/adyen/init_payment\",\n      body,\n      requestOptions\n    );\n  }\n\n  public submitPaymentDetailsAdyen(orderId, data, paymentData?) {\n    const headers: HttpHeaders = this.coreService.getHeaders();\n    const requestOptions = {\n      headers: headers,\n    };\n\n    let params = \"\";\n    for (let d of Object.keys(data)) {\n      params += \"|\" + d + \"=\" + data[d];\n    }\n    params += paymentData ? \"|payment_data=\" + paymentData : \"\";\n\n    const body = \"transaction_id=\" + orderId + params;\n\n    return this.http.post<any>(\n      this.coreService.getBaseUrl() + \"payment/provider/adyen/payment_details\",\n      body,\n      requestOptions\n    );\n  }\n\n  public requestNewPayment(payment: Payment) {\n    const headers: HttpHeaders = this.coreService\n      .getHeaders()\n      .set(\"X-KiBa-Auth\", this.authService.getCurrentUser().authHeader);\n\n    const requestOptions = {\n      headers: headers,\n    };\n\n    return this.http.post(\n      this.coreService.getBaseUrl() + \"payment/request\",\n      \"payment=\" + JSON.stringify(payment),\n      requestOptions\n    );\n  }\n\n  public requestSubsriptionPayment(paymentMethodId, subscriptionTransactionId) {\n    const headers: HttpHeaders = this.coreService\n      .getHeaders()\n      .set(\"X-KiBa-Auth\", this.authService.getCurrentUser().authHeader);\n\n    const params: HttpParams = new HttpParams()\n      .set(\"payment_method_id\", paymentMethodId)\n      .set(\"subscription_transaction_id\", subscriptionTransactionId);\n\n    const requestOptions = {\n      headers: headers,\n      params: params,\n    };\n\n    return this.http.get<any>(\n      this.coreService.getBaseUrl() +\n        \"subscription/transaction/request_payment\",\n      requestOptions\n    );\n  }\n\n  public setResult(transactionId, resultCode) {\n    let result: any = {\n      resultCode: resultCode,\n    };\n\n    if (resultCode === \"Authorised\") {\n      result = {\n        ...result,\n        name: \"Bestelling betaald\",\n        description:\n          \"We hebben de betaling succesvol ontvangen en daarmee is je bestelling definitief geplaatst. Natuurlijk houden we je op de hoogte van de status van de bestelling.\",\n        iconName: \"checkmark-circle\",\n        iconColor: \"success\",\n        buttons: [\n          {\n            name: \"go-to-order\",\n            text: \"Bekijk je bestelling\",\n            url: \"/orders/\" + transactionId,\n            icon: \"list-circle-outline\",\n          },\n          {\n            name: \"go-homepage\",\n            text: \"Ga naar de homepage\",\n            url: \"/home\",\n            icon: \"home-outline\",\n          },\n        ],\n      };\n    } else if (resultCode === \"Cancelled\") {\n      result = {\n        ...result,\n        name: \"Geannuleerd\",\n        description:\n          \"Je hebt de betaling geannuleerd. Je kunt opnieuw naar de betalingpagina gaan door op onderstaande knop te klikken (de bestelling verloopt over 30 minuten bij het uitblijven van een betaling). Ook kun je de bestelling definitief annuleren.\",\n        iconName: \"close-circle\",\n        iconColor: \"danger\",\n        buttons: [\n          {\n            name: \"go-cart\",\n            text: \"Direct opnieuw betalen\",\n            url: \"/cart-do-payment\",\n            icon: \"card-outline\",\n          },\n          {\n            name: \"go-cart\",\n            text: \"Terug naar de shopping bag\",\n            url: \"/shopping-bag\",\n            icon: \"cart-outline\",\n          },\n          {\n            name: \"go-homepage\",\n            text: \"Ga naar de homepage\",\n            url: \"/home\",\n            icon: \"home-outline\",\n          },\n        ],\n      };\n    } else if (resultCode === \"Error\") {\n      result = {\n        ...result,\n        name: \"Foutmelding\",\n        description:\n          \"Er is een fout opgetreden bij het verwerken van je betaling. We adviseren je te controleren of het geld is afgeschreven van je rekening en op basis daarvan even contact met ons op te nemen.\",\n        iconName: \"close-circle\",\n        iconColor: \"danger\",\n        buttons: [\n          {\n            name: \"go-cart\",\n            text: \"Direct opnieuw betalen\",\n            url: \"/cart-do-payment\",\n            icon: \"card-outline\",\n          },\n          {\n            name: \"go-cart\",\n            text: \"Terug naar de shopping bag\",\n            url: \"/shopping-bag\",\n            icon: \"cart-outline\",\n          },\n          {\n            name: \"go-homepage\",\n            text: \"Ga naar de homepage\",\n            url: \"/home\",\n            icon: \"home-outline\",\n          },\n        ],\n      };\n    } else if (resultCode === \"Pending\" || resultCode === \"Received\") {\n      result = {\n        ...result,\n        name: \"Wachten op status\",\n        description:\n          \"We hebben de definitieve status van je betaling nog niet ontvangen. Zodra deze is ontvangen, passen we de status van de bestelling automatisch aan. Je kunt deze pagina gewoon sluiten.\",\n        iconName: \"help-circle\",\n        iconColor: \"warning\",\n        buttons: [\n          {\n            name: \"go-to-order\",\n            text: \"Bekijk je bestelling\",\n            url: \"/orders/\" + transactionId,\n            icon: \"list-circle-outline\",\n          },\n          {\n            name: \"go-homepage\",\n            text: \"Ga naar de homepage\",\n            url: \"/home\",\n            icon: \"home-outline\",\n          },\n        ],\n      };\n    } else if (resultCode === \"Refused\") {\n      result = {\n        ...result,\n        name: \"Betaling geweigerd\",\n        description:\n          \"De betaling is geweigerd door de betalingsprovider. We kunnen door privacy-redenenen niet zien wat de reden is. Je kunt het altijd opnieuw proberen.\",\n        iconName: \"close-circle\",\n        iconColor: \"danger\",\n        buttons: [\n          {\n            name: \"go-cart\",\n            text: \"Direct opnieuw betalen\",\n            url: \"/cart-do-payment\",\n            icon: \"card-outline\",\n          },\n          {\n            name: \"go-cart\",\n            text: \"Terug naar de shopping bag\",\n            url: \"/shopping-bag\",\n            icon: \"cart-outline\",\n          },\n          {\n            name: \"go-homepage\",\n            text: \"Ga naar de homepage\",\n            url: \"/home\",\n            icon: \"home-outline\",\n          },\n        ],\n      };\n    } else if (resultCode === \"Expired\") {\n      result = {\n        ...result,\n        name: \"Verlopen\",\n        description:\n          \"De betaling voor deze bestelling is uitgebleven, en vandaar is de bestelling verlopen en geannuleerd. Je kunt het altijd opnieuw bestellen.\",\n        iconName: \"close-circle\",\n        iconColor: \"danger\",\n        buttons: [\n          {\n            name: \"go-cart\",\n            text: \"Terug naar de shopping bag\",\n            url: \"/shopping-bag\",\n            icon: \"cart-outline\",\n          },\n          {\n            name: \"go-homepage\",\n            text: \"Ga naar de homepage\",\n            url: \"/home\",\n            icon: \"home-outline\",\n          },\n        ],\n      };\n    }\n\n    return result;\n  }\n\n  public getTimeoutValue(timestampPlaced) {\n    const delta = this.getTimeoutDelta(timestampPlaced);\n    const timeoutMs = this.timeoutAfter * 60;\n    return delta / timeoutMs;\n  }\n\n  public getMinutesLeft(timestampPlaced) {\n    let delta = this.getTimeoutDelta(timestampPlaced);\n    const minutes = Math.floor(delta / 60) % 60;\n    delta -= minutes * 60;\n    const seconds = Math.floor(delta % 60);\n\n    return {\n      minutesLeft: minutes,\n      secondsLeft: seconds,\n    };\n  }\n\n  public getTimeoutDelta(timestampPlaces) {\n    let delta =\n      (timestampPlaces + 1000 * 60 * this.timeoutAfter - new Date().getTime()) /\n      1000;\n    return delta;\n  }\n}\n","import { Component, OnInit, Output, EventEmitter, Input } from '@angular/core';\nimport { Order } from '../../../models/order';\nimport { CartService } from '../../../services/cart.service';\nimport { CoreService } from '../../../services/core.service';\nimport { PaymentService } from '../../../services/payment.service';\nimport { AlertController } from '@ionic/angular';\nimport { timer } from 'rxjs';\nimport { OrderService } from '../../../services/order.service';\n\ndeclare var AdyenCheckout;\n\n@Component({\n  selector: \"rope-cart-do-payment\",\n  templateUrl: \"./cart-do-payment.component.html\",\n  styleUrls: [\"./cart-do-payment.component.scss\"],\n})\nexport class CartDoPaymentComponent implements OnInit {\n  \n  @Input() placingOrder;\n  @Input() paymentProvider;\n  @Input() adyenConfig;\n\n  @Output() onOrderExpired = new EventEmitter();\n  @Output() onOrderResult = new EventEmitter<OrderResult>();\n  @Output() onOrderCancel = new EventEmitter();\n\n  public order: Order;\n  public paymentTotal;\n\n  public timerSubscription;\n\n  public timeProgress;\n  public minutesLeft;\n  public secondsLeft;\n\n  //Omnikassa\n  public paymentMethods;\n  public goingPayment;\n  public chosenPaymentMethodId;\n\n  constructor(\n    public cartService: CartService,\n    public coreService: CoreService,\n    public paymentService: PaymentService,\n    public orderService: OrderService,\n    public alertCtrl: AlertController\n  ) {}\n\n  ngOnInit() {\n    this.order = this.cartService.getCurrentOrder();\n    if (this.order[\"is_expired\"] === true) {\n      this.order[\"is_expired\"] = false;\n      this.cartService.storeOrder();\n      this.onOrderExpired.emit();\n      return;\n    }\n\n    this.placingOrder = true;\n    const cartIdentifier = this.cartService.getCartIdentifier();\n\n    this.cartService.placeOrder(1, cartIdentifier).subscribe(placedOrder => {\n\n      this.order.id = placedOrder.id;\n      this.order['timestamp_start'] = placedOrder.timestamp_start;\n      this.paymentTotal = placedOrder.total;\n\n      const pay = this.paymentTotal > 0;\n      this.placingOrder = false;\n\n      if (pay) {\n        this.setTimerForTimeout();\n        if (this.paymentProvider === \"adyen\") {\n          this.paymentService\n            .getPaymentMethodsAdyen(this.getTotalCost())\n            .subscribe((paymentMethods) => {\n              const configuration = this.getAdyenConfig(\n                this.order.id,\n                paymentMethods\n              );\n              const checkout = new AdyenCheckout(configuration);\n              const dropin = checkout.create(\"dropin\").mount(\"#dropin-container\");\n            });\n        } else if (this.paymentProvider === \"omnikassa_v2\") {\n          this.paymentService\n            .getPaymentMethods(this.order[\"address\"].country_code)\n            .subscribe((res) => {\n              this.paymentMethods = res;\n            });\n        } else if (this.paymentProvider === \"paynl\") {\n          this.paymentService\n            .getPaymentMethodsPaynl(\n              this.order[\"address\"].country_code,\n              this.getTotalCost()\n            )\n            .subscribe((res) => {\n\n              for (let rr of res) {\n                if (rr.payment_option.name === 'Billink') {\n                  rr.payment_option.name = 'Achteraf betalen';\n                }\n              }\n\n              this.paymentMethods = res;\n            });\n        }\n      } else {\n        this.onOrderResult.emit({\n          orderId: this.order.id,\n          status: \"No payment needed\",\n        });\n      }\n\n    }, error => {\n      this.coreService.showAlert(error);\n    });\n  }\n  ngOnDestroy() {\n    if (this.timerSubscription) {\n      this.timerSubscription.unsubscribe();\n    }\n  }\n\n  public setTimerForTimeout() {\n    const source = timer(0, 1000);\n    this.timerSubscription = source.subscribe((val) => {\n      const timeLeft = this.paymentService.getMinutesLeft(\n        this.order[\"timestamp_start\"]\n      );\n      this.minutesLeft = timeLeft.minutesLeft;\n      this.secondsLeft = String(timeLeft.secondsLeft).padStart(2, \"0\");\n      this.timeProgress = this.paymentService.getTimeoutValue(\n        this.order[\"timestamp_start\"]\n      );\n\n      if (\n        (timeLeft.minutesLeft === 0 && timeLeft.secondsLeft <= 0) ||\n        timeLeft.minutesLeft < 0\n      ) {\n        this.order[\"is_expired\"] = true;\n        this.cartService.storeOrder();\n\n        this.timerSubscription.unsubscribe();\n\n        this.onOrderResult.emit({\n          orderId: this.order.id,\n          status: \"Expired\",\n        });\n      }\n    });\n  }\n\n  public getTotalCost() {\n    return this.cartService.getTotalCost() - this.cartService.getDiscount();\n  }\n\n  public getAdyenConfig(transactionId, paymentMethods) {\n    if (!this.adyenConfig) {\n      return;\n    }\n\n    const configuration = {\n      paymentMethodsResponse: paymentMethods,\n      originKey: this.adyenConfig.originKey,\n      locale: this.adyenConfig.locale,\n      environment: this.adyenConfig.environment,\n      onSubmit: (state, dropin) => {\n        this.paymentService\n          .initPaymentAdyen(transactionId, state.data)\n          .subscribe(\n            (response) => {\n              if (response.action) {\n                dropin.handleAction(response.action);\n              } else {\n                this.onOrderResult.emit({\n                  orderId: transactionId,\n                  status: response.resultCode,\n                });\n              }\n            },\n            (error) => {\n              this.coreService.showAlert(error);\n            }\n          );\n      },\n      onAdditionalDetails: (state, dropin) => {\n        this.paymentService\n          .submitPaymentDetailsAdyen(\n            transactionId,\n            state.data.details,\n            state.data.paymentData ? state.data.paymentData : undefined\n          )\n          .subscribe(\n            (response) => {\n              if (response.action) {\n                dropin.handleAction(response.action);\n              } else {\n                this.onOrderResult.emit({\n                  orderId: transactionId,\n                  status: response.resultCode,\n                });\n              }\n            },\n            (error) => {\n              this.coreService.showAlert(error);\n            }\n          );\n      },\n    };\n\n    return configuration;\n  }\n\n  public doOmnikassaPayment(paymentMethodId) {\n    this.goingPayment = true;\n    this.chosenPaymentMethodId = paymentMethodId;\n    const data = {\n      payment_method_id: paymentMethodId,\n    };\n\n    this.paymentService.initPaymentOmnikassa(this.order.id, data).subscribe(\n      (r) => {\n        this.coreService.openUrl(r.redirect_url);\n      },\n      (error) => {\n        this.goingPayment = false;\n        this.chosenPaymentMethodId = undefined;\n        this.coreService.showAlert(error);\n      }\n    );\n  }\n\n  public async doPaynlInitPayment(paymentMethodId, paynlPaymentMethodId) {\n    this.goingPayment = true;\n    this.chosenPaymentMethodId = paymentMethodId;\n\n    const data = {\n      payment_method_id: paymentMethodId,\n      paynl_payment_method_id: paynlPaymentMethodId,\n    };\n    \n    this.paymentService.initPaymentPaynl(this.order.id, data).subscribe(\n      (r) => {\n\n        if (r.redirect_url === '' && r.status && r.status === 'NOT-READY') {\n          this.coreService.showAlert('Helaas is deze betaalmethode op dit moment niet beschikbaar. Probeer a.u.b. een andere betaalmethode.');\n        } else {\n          this.coreService.openUrl(r.redirect_url);\n        }\n\n      },\n      (error) => {\n        this.goingPayment = false;\n        this.chosenPaymentMethodId = undefined;\n        this.coreService.showAlert(error);\n      }\n    );\n  }\n\n  public async cancelOrder() {\n    const alert = await this.alertCtrl.create({\n      header: \"Weet je het zeker?\",\n      subHeader: \"Bestelling annuleren\",\n      message:\n        \"Weet je zeker dat je deze bestelling wil annuleren? Dit is definitief.\",\n      cssClass: \"warning-alert\",\n      buttons: [\n        {\n          text: \"Annuleer\",\n          role: \"cancel\",\n        },\n        {\n          text: \"Oke\",\n          handler: () => {\n            this.orderService.cancelOrder(this.order.id).subscribe(\n              (r) => {\n                this.onOrderCancel.emit();\n              },\n              (error) => {\n                this.coreService.showAlert(error);\n              }\n            );\n          },\n        },\n      ],\n    });\n\n    await alert.present();\n  }\n}\n\nclass OrderResult {\n  public orderId: number;\n  public status: string;\n}\n","<div class=\"blocks\">\n\n  <div class=\"block\" *ngIf=\"placingOrder\">\n    <ion-card-header>\n      <ion-card-title style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 3.7rem;\"># ...</ion-card-title>\n      <ion-card-subtitle style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">Bestelling wordt geplaatst</ion-card-subtitle>\n    </ion-card-header>\n    <ion-card-content style=\"padding-left: 16px; padding-right: 16px;\">\n      <div class=\"status-block\">\n\n        <ion-item-divider>\n          <ion-label style=\"color: black; margin: 2px;\">\n            Even wachten...\n          </ion-label>\n          <ion-spinner slot=\"end\" style=\"margin-left: 10px; font-size: 4.0rem;\" name=\"crescent\">\n          </ion-spinner>\n        </ion-item-divider>\n\n        <p style=\"padding: 16px; font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">\n          We zijn druk bezig om de bestelling voor je te plaatsen. Dit duurt meestal maar een paar seconden.\n        </p>\n        \n      </div>\n      <br>\n    </ion-card-content>\n  </div>\n\n  <div class=\"block\" *ngIf=\"!placingOrder\">\n    <ion-card-header>\n      <ion-card-title style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 3.7rem;\">#{{ order.id }}</ion-card-title>\n      <ion-card-subtitle style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">Dit is je ordernummer</ion-card-subtitle>\n    </ion-card-header>\n    <ion-card-content style=\"padding-left: 16px; padding-right: 16px;\">\n      <div class=\"status-block\">\n\n        <ion-item-divider>\n          <ion-label style=\"color: black; margin: 2px;\">\n            Bestelling is geplaatst\n          </ion-label>\n          <ion-icon style=\"margin-right: 10px;\" slot=\"end\" name=\"checkmark-circle-outline\" color=\"success\"></ion-icon>\n        </ion-item-divider>\n        \n        <p style=\"padding: 16px; font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">Je hebt 30 minuten de tijd om de bestelling te betalen. Als de betaling uitblijft, wordt de bestelling\n          automatisch geannuleerd.<br><br>Je kunt hieronder direct de betaling van <b>{{ paymentTotal | currency:'EUR':'symbol' }}</b> voldoen.</p>\n\n      </div>\n\n      <br>\n      <div class=\"progress-block\">\n        <ion-progress-bar color=\"secondary\" [value]=\"timeProgress\"></ion-progress-bar>\n        <p class=\"progress-text\">Nog <b>{{ minutesLeft }}:{{ secondsLeft }}</b> de tijd om de bestelling te betalen</p>\n      </div>\n      <br>\n\n      <div *ngIf=\"paymentProvider === 'adyen'\">\n        <div id=\"dropin-container\"></div>\n      </div>\n\n      <div *ngIf=\"paymentProvider === 'omnikassa_v2'\">\n\n        <ion-list *ngIf=\"!paymentMethods\" style=\"min-height: 200px; display: flex; align-items: center; justify-content: center;\">\n          <ion-spinner style=\"font-size: 4.0rem;\" name=\"crescent\">\n          </ion-spinner>\n        </ion-list>\n\n        <ion-list *ngIf=\"paymentMethods\" class=\"omnikassa-payment-methods\">\n          <ion-item *ngFor=\"let paymentMethod of paymentMethods\">\n            <ion-avatar slot=\"start\">\n              <img [src]=\"paymentMethod.images[0].url\" class=\"custom-avatar\">\n            </ion-avatar>\n            <ion-label>\n              <h2 class=\"ion-text-wrap\">{{ paymentMethod.localized_name }}</h2>\n              <p class=\"ion-text-wrap\" style=\"font-size: 1.0rem;\">{{ paymentMethod.oneliner }}</p>\n            </ion-label>\n            <ion-button slot=\"end\" (click)=\"doOmnikassaPayment(paymentMethod.id)\" *ngIf=\"chosenPaymentMethodId !== paymentMethod.id\" [disabled]=\"goingPayment\">\n              Kies\n            </ion-button>\n            <ion-spinner name=\"crescent\" *ngIf=\"chosenPaymentMethodId === paymentMethod.id && goingPayment\"></ion-spinner>\n          </ion-item>\n        </ion-list>\n\n      </div>\n\n      <div *ngIf=\"paymentProvider === 'paynl'\">\n\n        <ion-list *ngIf=\"!paymentMethods\" style=\"min-height: 200px; display: flex; align-items: center; justify-content: center;\">\n          <ion-spinner style=\"font-size: 4.0rem;\" name=\"crescent\">\n          </ion-spinner>\n        </ion-list>\n\n        <ion-list *ngIf=\"paymentMethods\" class=\"omnikassa-payment-methods\">\n          <ion-item-divider style=\"height: 49px;\">\n            <ion-label style=\"color: black; margin: 2px;\">\n              Kies hieronder een betaalmethode\n            </ion-label>\n          </ion-item-divider>\n          <ion-item *ngFor=\"let paymentMethod of paymentMethods\">\n            <ion-avatar slot=\"start\">\n              <img [src]=\"paymentMethod.payment_option.image\" class=\"custom-avatar\">\n            </ion-avatar>\n            <ion-label>\n              <h2 class=\"ion-text-wrap\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">{{ paymentMethod.payment_option.name }}</h2>\n              <p class=\"ion-text-wrap\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">{{ paymentMethod.payment_option.visible_name }}</p>\n            </ion-label>\n            <ion-button color=\"secondary\" slot=\"end\" (click)=\"doPaynlInitPayment(paymentMethod.id, paymentMethod.payment_option.id)\" *ngIf=\"chosenPaymentMethodId !== paymentMethod.id\" [disabled]=\"goingPayment\">\n              Kies\n            </ion-button>\n            <ion-spinner name=\"crescent\" *ngIf=\"chosenPaymentMethodId === paymentMethod.id && goingPayment\"></ion-spinner>\n          </ion-item>\n        </ion-list>\n\n      </div>\n\n      <div style=\"margin-top: 15px;\">\n        <ion-button color=\"danger\" expand=\"block\" (click)=\"cancelOrder()\">\n          <ion-icon name=\"close-circle-outline\" slot=\"start\"></ion-icon>\n          Annuleer deze bestelling\n        </ion-button>\n      </div>\n\n    </ion-card-content>\n\n  </div>\n\n</div>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ActivatedRoute, ParamMap } from '@angular/router';\nimport { PaymentService } from '../../../services/payment.service';\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { lastValueFrom } from 'rxjs';\n\n@Component({\n  selector: \"rope-cart-check-payment\",\n  templateUrl: \"./cart-check-payment.component.html\",\n  styleUrls: [\"./cart-check-payment.component.scss\"],\n})\nexport class CartCheckPaymentComponent implements OnInit {\n  @Input() public parameters: ParamMap;\n  @Output() public onPaymentResult = new EventEmitter<OrderResult>();\n\n  public loading = true;\n\n  public result;\n  public transactionId;\n\n  constructor(\n    public paymentService: PaymentService,\n    public analyticsService: AnalyticsService,\n    public authService: AuthService,\n    private route: ActivatedRoute\n  ) {}\n\n  async ngOnInit() {\n    \n    const paymentProvider = this.parameters.has(\"payment_provider\")\n      ? this.parameters.get(\"payment_provider\")\n      : \"omnikassa_v2\";\n\n    if (paymentProvider === \"adyen\") {\n\n      this.transactionId = this.parameters.get(\"transaction_id\");\n      let data = {};\n      for (let key of this.parameters.keys) {\n        data = {\n          ...data,\n          [key]: this.parameters.get(key),\n        };\n      }\n\n      this.paymentService\n        .submitPaymentDetailsAdyen(this.transactionId, data)\n        .subscribe((r) => {\n          setTimeout(() => {\n            this.onPaymentResult.emit({\n              orderId: this.transactionId,\n              status: r.resultCode,\n            });\n            this.loading = false;\n          }, 1500);\n        });\n\n    } else if (paymentProvider === \"omnikassa_v2\") {\n\n      this.transactionId = this.parameters.get(\"order_id\");\n\n      const amount = this.parameters.get(\"amount\");\n      const status = this.parameters.get(\"status\");\n      const lineIds = this.parameters.getAll(\"line_ids\");\n\n      // Report to GTM\n      if (\n        status === \"1\" &&\n        !this.analyticsService.transactionTracked(this.transactionId)\n      ) {\n        this.analyticsService.trackPurchase(\n          amount,\n          lineIds,\n          lineIds.length,\n          this.transactionId\n        );\n      }\n\n      this.onPaymentResult.emit({\n        orderId: this.transactionId,\n        status: this.getOmnikassaStatus(status),\n      });\n\n    } else if (paymentProvider === \"paynl\") {\n\n      this.transactionId = this.parameters.get(\"order_id\");\n\n      const amount = this.parameters.get(\"amount\");\n      const status = this.parameters.get(\"status\");\n      const lineIds = this.parameters.getAll(\"line_ids\");\n\n      // Report to GTM\n      if (\n        status === \"1\" &&\n        !this.analyticsService.transactionTracked(this.transactionId)\n      ) {\n\n        let userEmail = this.route.snapshot.queryParamMap.get('ue');\n        if (userEmail) {\n          \n          userEmail = atob(userEmail);\n          let userEmailHash = this.route.snapshot.queryParamMap.get('ueh');\n          \n          let user;\n          if (userEmailHash) {\n            user = await lastValueFrom(this.authService.getUser(userEmail, userEmailHash));\n          } else {\n            user = {\n              username: userEmail\n            };\n          }\n          await this.analyticsService.setAlgoliaUserToken(user);\n          this.analyticsService.setUserData(user);\n\n        }\n\n        this.analyticsService.trackPurchase(\n          amount,\n          lineIds,\n          lineIds.length,\n          this.transactionId\n        );\n      }\n\n      this.onPaymentResult.emit({\n        orderId: this.transactionId,\n        status: this.getPaynlStatus(status),\n      });\n\n    }\n    \n  }\n\n  public getOmnikassaStatus(status) {\n    if (status === \"1\") {\n      return \"Authorised\";\n    } else if (status === \"2\") {\n      return \"Pending\";\n    } else if (status === \"0\") {\n      return \"Cancelled\";\n    }\n  }\n\n  public getPaynlStatus(status) {\n    if (status === \"1\") {\n      return \"Authorised\";\n    } else if (status === \"2\") {\n      return \"Pending\";\n    } else if (status === \"0\") {\n      return \"Cancelled\";\n    }\n  }\n}\n\nclass OrderResult {\n  public orderId: number;\n  public status: string;\n}\n","<div class=\"blocks\">\n\n  <div class=\"block\">\n    <ion-card-header>\n      <ion-card-title style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 3.7rem;\">#{{ transactionId }}</ion-card-title>\n      <ion-card-subtitle style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">Status betaling</ion-card-subtitle>\n    </ion-card-header>\n    <ion-card-content class=\"ion-text-center\" style=\"padding-left: 16px; padding-right: 16px;\">\n      <div class=\"ion-text-center\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">We gaan nu de status van de betaling checken...</div><br><br>\n\n      <div class=\"status-block\">\n        <div style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">\n          <div class=\"loading-block\" *ngIf=\"loading\">\n            <p>Wachten op status van betaling...</p>\n            <ion-spinner name=\"crescent\"></ion-spinner>\n          </div>\n        </div>\n      </div>\n\n    </ion-card-content>\n  </div>\n\n</div>\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { lastValueFrom } from 'rxjs';\nimport { CartService } from '../../../services/cart.service';\n\n@Component({\n  selector: 'rope-cart-result-payment',\n  templateUrl: './cart-result-payment.component.html',\n  styleUrls: ['./cart-result-payment.component.scss'],\n})\nexport class CartResultPaymentComponent implements OnInit {\n\n  @Input() transactionId;\n  @Input() result;\n\n  @Output() onNavigate = new EventEmitter();\n\n  constructor(\n    public cartService: CartService\n  ) { }\n\n  async ngOnInit() {\n\n    if (this.result && this.result.resultCode === 'Authorised') {\n\n      //Check sync server for cart\n      const syncInClearOrder = this.cartService.order && this.cartService.order['identifier'];\n\n      if (!syncInClearOrder) {\n        await lastValueFrom(this.cartService.finalizeCart(this.transactionId));\n      }\n\n      this.cartService.clearOrder('TRANSACTED', syncInClearOrder).then(r => r);\n    }\n\n  }\n\n}\n","<div class=\"blocks\">\n\n  <div class=\"block\">\n    <ion-card-header>\n     <ion-card-title style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 3.7rem;\">#{{ transactionId }}</ion-card-title>\n      <ion-card-subtitle style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">Dit is je ordernummer</ion-card-subtitle>\n    </ion-card-header>\n    <ion-card-content style=\"padding-left: 16px; padding-right: 16px;\">\n      <div class=\"ion-text-center\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">We hebben de volgende status van de betaling ontvangen: </div><br><br>\n      <div class=\"status-block\">\n        <div class=\"flex\">\n          <h1 style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 2.5rem;\">\n            <b>{{ result.name }}</b>\n          </h1>\n          <ion-icon style=\"margin-left: 10px; font-size: 4.0rem;\" [name]=\"result.iconName\" [color]=\"result.iconColor\">\n          </ion-icon>\n        </div>\n        <p style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">{{ result.description }}</p>\n      </div>\n      <br>\n      <ng-container *ngIf=\"result.buttons && result.buttons.length > 0\">\n        <ion-button *ngFor=\"let button of result.buttons\" expand=\"block\" (click)=\"onNavigate.emit(button.url)\"\n          style=\"margin-bottom: 15px;\" color=\"secondary\">\n          <ion-icon [name]=\"button.icon\" slot=\"start\"></ion-icon>\n          {{ button.text }}\n        </ion-button>\n      </ng-container>\n    </ion-card-content>\n  </div>\n\n</div>\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { CoreService } from './core.service';\nimport { AuthService } from './auth.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SubscriptionService {\n\n  constructor(\n    private http: HttpClient,\n    private coreService: CoreService,\n    private authService: AuthService\n  ) { }\n\n  public getSubscription() {\n    const currentUser = this.authService.getCurrentUser();\n    const requestOptions = {\n      headers: this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader)\n    };\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'subscription/get', requestOptions);\n  }\n\n  public getSubscriptionTransaction(id) {\n    const currentUser = this.authService.getCurrentUser();\n    const requestOptions = {\n      headers: this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader)\n    };\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'subscription/transaction/get?subscription_transaction_id='+id, requestOptions);\n  }\n\n  public getSubscriptionTransactions() {\n    const currentUser = this.authService.getCurrentUser();\n    const requestOptions = {\n      headers: this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader)\n    };\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'subscription/transaction/get', requestOptions);\n  }\n\n  public getSubscriptionTypes() {\n    const requestOptions = {\n      headers: this.coreService.getHeaders()\n    };\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'subscription/types', requestOptions);\n  }\n\n  public subscribeCustomer(customerId, subscriptionTypeId, budget, uuid?) {\n    const currentUser = this.authService.getCurrentUser();\n    const headers = this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader);\n    const requestOptions = {\n      headers: headers\n    };\n    const body = 'customer_id=' + customerId + '|subscription_type_id=' + subscriptionTypeId + '|budget=' + budget+(uuid ? '|uuid='+uuid : '');\n    return this.http.post<any[]>(this.coreService.getBaseUrl() + 'subscription/subscribe', body, requestOptions);\n  }\n\n  public postRemarkToTransaction(subtId, remark) {\n    const currentUser = this.authService.getCurrentUser();\n    const headers = this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader);\n    const requestOptions = {\n      headers: headers\n    };\n    const body = 'subscription_transaction_id=' + subtId + '|remark=' + remark;\n    return this.http.put<any[]>(this.coreService.getBaseUrl() + 'subscription/transaction/update', body, requestOptions);\n  }\n\n  public postReviewToTransaction(subtId, remark) {\n    const currentUser = this.authService.getCurrentUser();\n    const headers = this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader);\n    const requestOptions = {\n      headers: headers\n    };\n    const body = 'subscription_transaction_id=' + subtId + '|review=' + remark;\n    return this.http.put<any[]>(this.coreService.getBaseUrl() + 'subscription/transaction/update', body, requestOptions);\n  }\n\n  public updateSubscriptionType(subscriptionId, subscriptionTypeId) {\n    const currentUser = this.authService.getCurrentUser();\n    const headers = this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader);\n    const requestOptions = {\n      headers: headers\n    };\n    const body = 'subscription_id=' + subscriptionId + '|subscription_type_id=' + subscriptionTypeId;\n    return this.http.put<any[]>(this.coreService.getBaseUrl() + 'subscription/update', body, requestOptions);\n  }\n\n  public updateBudget(subscriptionId, budget) {\n    const currentUser = this.authService.getCurrentUser();\n    const headers = this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader);\n    const requestOptions = {\n      headers: headers\n    };\n    const body = 'subscription_id=' + subscriptionId + '|budget=' + budget;\n    return this.http.put<any[]>(this.coreService.getBaseUrl() + 'subscription/update', body, requestOptions);\n  }\n\n  public updateSubscriptionPauses(subscriptionId, isPaused) {\n    const currentUser = this.authService.getCurrentUser();\n    const headers = this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader);\n    const requestOptions = {\n      headers: headers\n    };\n    const body = 'subscription_id=' + subscriptionId + '|is_paused=' + (isPaused ? 1 : 0);\n    return this.http.put<any[]>(this.coreService.getBaseUrl() + 'subscription/update', body, requestOptions);\n  }\n\n  public updateSubscriptionEnded(subscriptionId, timestampEnd) {\n    const currentUser = this.authService.getCurrentUser();\n    const headers = this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader);\n    const requestOptions = {\n      headers: headers\n    };\n    const body = 'subscription_id=' + subscriptionId + '|timestamp_end=' + timestampEnd;\n    return this.http.put<any[]>(this.coreService.getBaseUrl() + 'subscription/update', body, requestOptions);\n  }\n\n  public updateSubscriptionEmployee(subscriptionId, employeeId) {\n    const currentUser = this.authService.getCurrentUser();\n    const headers = this.coreService.getHeaders().set('X-KiBa-Auth', currentUser.authHeader);\n    const requestOptions = {\n      headers: headers\n    };\n    const body = 'subscription_id=' + subscriptionId + '|employee_id=' + employeeId;\n    return this.http.put<any[]>(this.coreService.getBaseUrl() + 'subscription/update', body, requestOptions);\n  }\n  \n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { AlertController, LoadingController } from '@ionic/angular';\nimport { SubscriptionService } from '../../../services/subscription.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { CoreService } from '../../../services/core.service';\nimport { CurrencyPipe } from '@angular/common';\nimport { ActivatedRoute } from '@angular/router';\nimport { tap } from 'rxjs/operators';\nimport { forkJoin, Subscription } from 'rxjs';\nimport { ScreensizeService } from '../../../services/screensize.service';\n\n@Component({\n  selector: 'rope-subscription-main',\n  templateUrl: './subscription-main.component.html',\n  styleUrls: ['./subscription-main.component.scss'],\n})\nexport class SubscriptionMainComponent implements OnInit {\n\n  @Input() title: string;\n  @Input() public uniqueCode: string;\n  @Input() public budgets = [50, 100, 150, 200, 250];\n  @Input() public video;\n\n  @Input() public shareSection;\n  @Input() public deliveryOverviewSection;\n  @Input() public nextDeliverySection;\n  @Input() public employeeSection;\n  @Input() public testSection;\n  @Input() public statusSection;\n\n  @Output() onGoToSubscriptionTransactionWithId = new EventEmitter<number>();\n  @Output() onGoToSubscriptionTransactionsArchive = new EventEmitter();\n  @Output() onGoToSubscriptionInfo = new EventEmitter();\n  @Output() onGoToCustomerProfile = new EventEmitter();\n  @Output() onGoToTest = new EventEmitter();\n  @Output() onShareOnWhatsapp = new EventEmitter();\n\n  @Output() onNote = new EventEmitter();\n  @Output() onLogin = new EventEmitter();\n  @Output() onConsent = new EventEmitter();\n  @Output() onEmployee = new EventEmitter();\n\n  public loading = true;\n  public pauseDisabled = false;\n\n  public subscriptionTypes;\n  public selectedSubscriptionType;\n\n  public selectedBudget;\n\n  public user;\n  public subscription;\n\n  public locSub;\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  public uniqueCodeInput;\n\n  constructor(\n    private alertCtrl: AlertController,\n    private loadingCtrl: LoadingController,\n    private subscriptionService: SubscriptionService,\n    private screensizeService: ScreensizeService,\n    public authService: AuthService,\n    private coreService: CoreService,\n    private currencyPipe: CurrencyPipe,\n    private route: ActivatedRoute\n  ) { }\n\n  ngOnInit() {\n\n    this.screensizeObserver = this.screensizeService.isDesktopView().subscribe(isDesktop => {\n      this.isDesktop = isDesktop;\n    });\n\n    if (this.uniqueCode) {\n      this.uniqueCodeInput = this.uniqueCode;\n    }\n\n    this.route.queryParamMap.subscribe(params => {\n      if (params.has('do_login') && params.get('do_login') === '1' && !this.authService.isAuthenticated()) {\n        this.onLogin.emit('trigger_by_nav');\n      }\n    });\n\n    this.locSub = this.coreService.newSubscriptionDetails.subscribe(r => r ? this.init() : true);\n    this.init();\n  }\n\n  ngOnDestroy() {\n    this.locSub.unsubscribe();\n  }\n\n  public async init() {\n\n    this.loading = true;\n    this.subscription = undefined;\n    this.subscriptionTypes = undefined;\n\n    let load = await this.loadingCtrl.create({\n      message: 'Laden...'\n    });\n    await load.present();\n\n    let observables = [];\n    if (this.authService.isAuthenticated()) {\n      const obs = this.subscriptionService.getSubscription().pipe(tap(r => {\n        if (r.length > 0) {\n          this.subscription = r[0];\n        }\n      }));\n      observables.push(obs);\n\n      this.user = this.authService.getCurrentUser();\n      let obs3 = this.authService.getUserDetails(this.user).pipe(tap(r => {\n        this.user['customer_details'] = r['customer_details'] ? r['customer_details'] : undefined;\n        this.user['employee_id'] = r['employee_id'] ? r['employee_id'] : undefined;\n        this.user['employee_name'] = r['employee_name'] ? r['employee_name'] : undefined;\n        this.user['employee_note'] = r['employee_note'] ? r['employee_note'] : undefined;\n        this.user['employee_startdate'] = r['employee_startdate'] ? r['employee_startdate'] : undefined;\n        this.user['employee_instagram'] = r['employee_instagram'] ? r['employee_instagram'] : undefined;\n        this.authService.storeUser(this.user);\n      }));\n      observables.push(obs3);\n\n    }\n\n    let obs2 = this.subscriptionService.getSubscriptionTypes().pipe(tap(r => {\n      this.subscriptionTypes = r;\n    }));\n    observables.push(obs2);\n\n    forkJoin(observables).subscribe(r => {\n      load.dismiss();\n      this.loading = false;\n    });\n\n  }\n\n  public getSubscriptionStatus() {\n\n    const hasDetails = this.user.customer_details;\n    const hasEmployeeNote = this.user.employee_note;\n    if (hasDetails && hasEmployeeNote) {\n      return {\n        icon: 'checkmark-circle',\n        iconColor: 'success',\n        message: 'Helemaal klaar!',\n        details: 'Alles is compleet en we gaan er iets moois van maken voor je.'\n      };\n    } else if (hasDetails || hasEmployeeNote) {\n      return {\n        icon: 'help-circle',\n        iconColor: 'warning',\n        message: 'Bijna compleet...',\n        details: 'We missen alleen nog ' + (!hasDetails ? 'de uitslag van de test!' : 'het persoonlijke bericht van je personal shopper! Deze wordt ingevuld als je profiel is nagekeken.')\n      };\n    } else {\n      return {\n        icon: 'close-circle',\n        iconColor: 'danger',\n        message: 'Nog niet compleet...',\n        details: 'Wil je nog even de test invullen? Daarna kijkt de personal shopper naar je profiel en kunnen we beginnen!'\n      };\n    }\n\n  }\n\n  public async changeType() {\n\n    const inputs = [];\n    for (let sbt of this.subscriptionTypes) {\n      inputs.push({\n        name: sbt.id,\n        type: 'radio',\n        label: sbt.name,\n        value: sbt.id,\n        checked: sbt.id === this.subscription.subscription_type.id\n      });\n    }\n\n    let alert = await this.alertCtrl.create({\n      header: 'Abonnementstype aanpassen',\n      cssClass: 'custom-alert alert-wide',\n      inputs: inputs,\n      buttons: [\n        {\n          text: 'Annuleer',\n          role: 'cancel',\n        }, {\n          text: 'Opslaan',\n          handler: (d) => {\n            this.subscriptionService.updateSubscriptionType(this.subscription.id, d).subscribe(r => {\n              this.init();\n            });\n          }\n        }\n      ]\n    });\n\n    return await alert.present();\n\n  }\n\n  public async changeBudget() {\n\n    const inputs = [];\n    for (let budget of this.budgets) {\n      inputs.push({\n        name: budget,\n        type: 'radio',\n        label: this.currencyPipe.transform(budget, 'EUR', 'symbol'),\n        value: budget,\n        checked: budget === this.subscription.budget\n      });\n    }\n\n    let alert = await this.alertCtrl.create({\n      header: 'Budget aanpassen',\n      cssClass: 'custom-alert alert-wide',\n      inputs: inputs,\n      buttons: [\n        {\n          text: 'Annuleer',\n          role: 'cancel',\n        }, {\n          text: 'Opslaan',\n          handler: (d) => {\n            this.subscriptionService.updateBudget(this.subscription.id, d).subscribe(r => {\n              this.init();\n            });\n          }\n        }\n      ]\n    });\n\n    return await alert.present();\n\n  }\n\n  public getOpenAmount() {\n\n    const openAmount = this.subscription.subscription_transactions.filter(t => t.timestamp_payment_reminder).reduce((a, b) => {\n      const total = b.transaction ? b.transaction.total : 0.00;\n      const returned = b.transaction ? (b.transaction.return ? b.transaction.return.credit : 0.00) : 0.00;\n      return a + (total - returned);\n    }, 0);\n    return openAmount;\n    \n  }\n\n  public needPayment() {\n    return this.subscription.subscription_transactions.some(t => t.timestamp_payment_reminder && t.transaction && t.transaction.payments && t.transaction.payments[0] && t.transaction.payments[0].status !== 'PAID');\n  }\n\n  public getAllSubscriptionTransactions() {\n    return this.subscription.subscription_transactions;\n  }\n\n  public getReadySubscriptionTransactions() {\n    return this.subscription.subscription_transactions.filter(t => t.transaction);\n  }\n\n  public getPlannedSubscriptionTransaction() {\n    return this.subscription.subscription_transactions.find(t => !t.transaction);\n  }\n\n  public goToSubscriptionTransactionWithId(id) {\n    this.onGoToSubscriptionTransactionWithId.emit(id);\n  }\n\n  public goToSubscriptionTransaction() {\n    const id = this.getPlannedSubscriptionTransaction().id;\n    this.onGoToSubscriptionTransactionWithId.emit(id);\n  }\n\n  public goToSubscriptionTransactionsArchive() {\n\n    if (this.authService.isAuthenticated()) {\n      this.onGoToSubscriptionTransactionsArchive.emit();\n    } else {\n      this.onLogin.emit('trigger_by_archive');\n    }\n\n  }\n\n  public goToInformation() {\n    this.onGoToSubscriptionInfo.emit();\n  }\n\n  public goToCustomerProfile() {\n    this.onGoToCustomerProfile.emit();\n  }\n\n  public getEmployeeImage() {\n    const storeBucketName = this.coreService.store.store_bucket_name;\n    return 'https://storage.googleapis.com/' + storeBucketName +'-bucket/image/employee/' + this.user['employee_id'] + '.jpg';\n  }\n\n  public async note() {\n    this.onNote.emit(this.getPlannedSubscriptionTransaction());\n  }\n\n  public async subscribe() {\n\n    if (this.authService.isAuthenticated()) {\n      this.doShowSubscriptionConsent();\n    } else {\n      this.onLogin.emit('trigger_by_subscribe');\n    }\n\n  }\n\n  public doSubscribe() {\n    if (this.authService.isAuthenticated()) {\n      this.doShowSubscriptionConsent();\n    }\n  }\n\n  public async doShowSubscriptionConsent() {\n    this.onConsent.emit({\n      subscriptionTypeId: this.selectedSubscriptionType.id,\n      budget: this.selectedBudget,\n      uuid: this.uniqueCodeInput\n    });\n  }\n\n  public shareOnWhatsapp(uuid) {\n    this.onShareOnWhatsapp.emit(uuid);\n  }\n\n  public goToTest() {\n    this.onGoToTest.emit();\n  }\n\n  public async goToEmployee() {\n    this.onEmployee.emit(this.user['employee_id']);\n  }\n\n  public pauseSubscription() {\n\n    this.pauseDisabled = true;\n    this.subscriptionService.updateSubscriptionPauses(this.subscription.id, !this.subscription.is_paused).subscribe(r => {\n      this.subscription.is_paused = !this.subscription.is_paused;\n      this.pauseDisabled = false;\n    }, error => {\n      console.error(error);\n      this.pauseDisabled = false;\n    });\n\n  }\n\n  public async endSubscription() {\n\n    const alert = await this.alertCtrl.create({\n      header: 'Abonnement beëindigen',\n      message: 'Weet je zeker dat je je abonnement definitief stop wil zetten? Je kunt deze ook pauzeren.',\n      buttons: [\n        {\n          text: 'Annuleer',\n          role: 'cancel',\n        }, {\n          text: 'Ja, beëindig',\n          handler: () => {\n            this.doEndSubscription();\n          }\n        }\n      ]\n    });\n\n    return await alert.present();\n\n  }\n\n  public doEndSubscription() {\n\n    const date = new Date().getTime();\n\n    this.subscriptionService.updateSubscriptionEnded(this.subscription.id, date).subscribe(r => {\n      this.init();\n    }, error => {\n      console.error(error);\n    });\n\n  }\n\n}\n","<div *ngIf=\"!subscription && !loading\" class=\"fullscreen-container\">\n\n  <div class=\"blocks\">\n\n    <div class=\"block\" [ngClass]=\"isDesktop ? 'boundary' : ''\">\n\n      <div class=\"wizard\">\n        <div style=\"width: 100%; margin-top: 25px;\" class=\"ion-text-center\">\n          <ion-icon color=\"tertiary\" style=\"font-size: 10.0rem;\" name=\"cube\"></ion-icon>\n        </div>\n\n        <ion-card-header>\n          <ion-card-title class=\"r-h1\">{{ title }}</ion-card-title>\n        </ion-card-header>\n\n        <ion-card-content style=\"padding-left: 0px; padding-right: 0px;\">\n\n          <div style=\"padding-left: 15px; padding-right: 15px; margin-bottom: 20px; text-align: center;\" class=\"r-h2\">\n            Jouw periodieke levering van de leukste fashion, speciaal voor jou samengesteld door onze fashion specialisten.\n            Geen verplichtingen, achteraf betalen en dat allemaal vanuit je luie stoel!\n          </div>\n\n          <vg-player *ngIf=\"video && video.url && video.poster\">\n              <vg-controls vgFor=\"singleVideo\" [vgAutohide]=\"true\" [vgAutohideTime]=\"1.5\">\n                <vg-play-pause></vg-play-pause>\n                <vg-mute></vg-mute>\n                <vg-fullscreen></vg-fullscreen>\n              </vg-controls>\n              <video [vgMedia]=\"$any(media)\" #media id=\"singleVideo\" preload=\"auto\" style=\"width: 100%;\" [poster]=\"video.poster\">\n                  <source [src]=\"video.url\" type=\"video/mp4\">\n              </video>\n          </vg-player>\n\n          <div style=\"padding-left: 15px; padding-right: 15px; margin-top: 40px; margin-bottom: 0px; text-align: left;\" class=\"r-h2\">\n            <div style=\"text-align: left; margin-left: 22px;\">De voordelen:</div>\n            <ul style=\"text-align: left;\">\n              <li>Persoonlijk advies</li>\n              <li>Gratis verzending en retour</li>\n              <li>Achteraf betalen</li>\n              <li>Geen verplichtingen</li>\n            </ul>\n          </div>\n\n          <ion-item-divider></ion-item-divider>\n\n          <div style=\"padding-left: 15px; padding-right: 15px; margin-top: 20px; margin-bottom: 20px; text-align: left;\" class=\"r-h3\">\n\n            <div style=\"text-align: center;\">Wij bieden de volgende mogelijkheden:</div>\n            <ion-select placeholder=\"Selecteer een mogelijkheid...\" [(ngModel)]=\"selectedSubscriptionType\"\n              class=\"box-select\" cancelText=\"Annuleer\" interface=\"action-sheet\">\n              <ion-select-option *ngFor=\"let subscriptionType of subscriptionTypes\" [value]=\"subscriptionType\" >\n                {{ subscriptionType.name }}</ion-select-option>\n            </ion-select>\n            <br>\n\n            <div style=\"text-align: center;\">En je kiest hiervoor een budget per keer:</div>\n            <ion-select placeholder=\"Selecteer een budget...\" [(ngModel)]=\"selectedBudget\" class=\"box-select\"\n              interface=\"action-sheet\" cancelText=\"Annuleer\">\n              <ion-select-option *ngFor=\"let budget of budgets\" [value]=\"budget\">{{ budget | currency:'EUR':'symbol' }}\n              </ion-select-option>\n            </ion-select>\n            <br>\n\n            <div style=\"text-align: center;\">Code van een vriend (optioneel):</div>\n            <ion-input [(ngModel)]=\"uniqueCodeInput\" placeholder=\"Vul hier een doorverwijs in...\" class=\"box-select\"></ion-input>\n            <br>\n            <br>\n\n          </div>\n\n          <div style=\"padding-left: 15px; padding-right: 15px; margin-top: 20px; margin-bottom: 20px; text-align: center;\">\n\n            <div style=\"font-size: 1.1rem; font-style: italic;\" *ngIf=\"!authService.isAuthenticated()\">Om je aan te melden, moet je ingelogd zijn. Je wordt automatisch doorgestuurd.</div>\n            <div style=\"font-size: 1.1rem; font-style: italic;\" *ngIf=\"authService.isAuthenticated()\">Ingelogd als: {{ authService.getCurrentUser().email }}</div>\n            <ion-button expand=\"block\" color=\"tertiary\" (click)=\"subscribe()\"\n              [disabled]=\"!selectedSubscriptionType || !selectedBudget\" size=\"large\" style=\"margin-bottom: 25px;\">\n              <div class=\"r-h2\">Aanmelden</div>\n            </ion-button>\n            <ion-button expand=\"block\" color=\"secondary\" (click)=\"goToInformation()\">\n              <div class=\"r-h2 r-text-color-light\">Meer informatie</div>\n            </ion-button>\n\n            <br><br>\n            <div class=\"ion-text-center r-h3\">\n              Heb je je abonnement beëindigd en moet je nog een rekening betalen? <a style=\"color: black; cursor: pointer; font-weight: 700;\" (click)=\"goToSubscriptionTransactionsArchive()\">Klik dan hier.</a>\n            </div>\n\n          </div>\n\n        </ion-card-content>\n\n      </div>\n\n    </div>\n\n  </div>\n\n</div>\n\n<div *ngIf=\"subscription && !loading\">\n\n  <div *ngIf=\"needPayment()\">\n    <ion-button color=\"warning\" shape=\"round\" style=\"margin: 25px;\" class=\"ion-text-wrap\" expand=\"block\" (click)=\"goToSubscriptionTransactionsArchive()\">\n      Openstaand: {{ getOpenAmount() | currency:'EUR':'symbol' }}. Betaal hier direct \n      <ion-icon name=\"arrow-forward-outline\" slot=\"end\"></ion-icon>\n    </ion-button>\n  </div>\n\n  <div class=\"blocks\">\n\n    <ion-grid>\n    \n      <ion-row>\n    \n        <ion-col size=\"12\" size-lg=\"4\">\n          \n          <div class=\"block\">\n          \n            <div style=\"width: 100%;\" class=\"ion-text-center\">\n              <ion-icon color=\"tertiary\" style=\"font-size: 8.0rem;\" name=\"cube\"></ion-icon>\n            </div>\n          \n            <ion-card-header>\n              <ion-card-title>{{ title }}</ion-card-title>\n            </ion-card-header>\n          \n            <ion-card-content class=\"ion-text-center\">\n              <div class=\"r-h2 r-b\">Leuk dat je graag een kleding box ontvangt!</div><br>\n              <span class=\"r-b\">Lid sinds:</span> {{ subscription.timestamp_start | date:'mediumDate' }}<br>\n              <span class=\"r-b\">Type box:</span> {{ subscription.subscription_type.name }} <ion-icon *ngIf=\"subscriptionTypes.length > 1\"\n                name=\"create\" style=\"font-size: 1.3rem; cursor: pointer;\" (click)=\"changeType()\"></ion-icon><br>\n              <span class=\"r-b\">Budget:</span> {{ subscription.budget | currency:'EUR':'symbol' }} <ion-icon *ngIf=\"budgets.length > 1\"\n                name=\"create\" style=\"font-size: 1.3rem; cursor: pointer;\" (click)=\"changeBudget()\"></ion-icon><br>\n          \n              <br>\n              <ion-button color=\"secondary\" fill=\"outline\" (click)=\"goToInformation()\" size=\"small\">\n                <div class=\"r-button-text\">Informatie nalezen</div>\n                <ion-icon name=\"arrow-forward\" slot=\"end\"></ion-icon>\n              </ion-button>\n          \n              <br>\n              <br>\n              <br>\n              <ion-item style=\"border: 1px solid darkslategray; border-radius: 10px; --background: #efefef;\">\n                <ion-icon slot=\"start\" [name]=\"getSubscriptionStatus().icon\" [color]=\"getSubscriptionStatus().iconColor\"\n                  style=\"font-size: 4.0rem;\"></ion-icon>\n                <ion-label class=\"ion-text-center\">\n                  <div class=\"r-h2 ion-text-wrap\">Status: {{ getSubscriptionStatus().message }}</div>\n                  <p class=\"r-h3 ion-text-wrap\">{{ getSubscriptionStatus().details }}</p>\n                </ion-label>\n              </ion-item>\n          \n            </ion-card-content>\n          \n          </div>\n\n        </ion-col>\n\n        <ion-col size=\"12\" size-lg=\"4\">\n        \n          <div class=\"section-image default-image\" [ngStyle]=\"{'background-image': 'url(' + shareSection.image + ')'}\"></div>\n          <div></div>\n\n          <div class=\"block\">\n        \n            <ion-card-header>\n              <ion-card-title>{{ shareSection?.title || 'Deel met vrienden' }}</ion-card-title>\n            </ion-card-header>\n        \n            <ion-card-content class=\"ion-text-center\">\n              \n              Ben je helemaal blij met deze service? En wil je dat graag delen met je vrienden in ruil voor een mooie korting? Nodig nu 2 vrienden uit en ontvang automatisch 30% korting op je volgende box! Let op: je vrienden moeten zich wel aanmelden met jouw unieke code:\n              <br>\n              <br>\n              <div class=\"customer-code\">{{ subscription.customer.unique_code }}</div>\n              <div style=\"font-size: 1.1rem;\">\n                Aantal aanmeldingen met jouw code: {{ subscription.customer.custom_fields.number_of_used_code }}\n              </div>\n              <br>\n              <br>\n\n              <ion-button color=\"secondary\" fill=\"outline\" (click)=\"shareOnWhatsapp(subscription.customer.unique_code)\" size=\"small\">\n                <ion-icon name=\"logo-whatsapp\" slot=\"start\"></ion-icon>\n                DEEL VIA WHATSAPP\n              </ion-button>\n        \n            </ion-card-content>\n        \n          </div>\n        \n        </ion-col>\n\n        <ng-container *ngIf=\"user && user['customer_details']\">\n\n          <ion-col size=\"12\" size-lg=\"4\" *ngIf=\"getAllSubscriptionTransactions().length > 0\">\n            <div class=\"section-image default-image\" [ngStyle]=\"{'background-image': 'url(' + deliveryOverviewSection?.image + ')'}\"></div>\n            <div></div>\n            \n            <div class=\"block\">\n          \n              <ion-card-header>\n                <ion-card-title>{{ deliveryOverviewSection?.title || 'Jouw Fashion Boxen' }}</ion-card-title>\n              </ion-card-header>\n          \n              <ion-card-content>\n          \n                Bekijk hieronder al je fashion boxen:\n                <br>\n                <br>\n                <ion-item detail=\"true\" (click)=\"goToSubscriptionTransactionWithId(getAllSubscriptionTransactions()[0].id)\">\n                  <ion-icon slot=\"start\" name=\"cube\"></ion-icon>\n                  <ion-label>\n                    <h2 class=\"ion-text-wrap\">Fashion Box #{{ getAllSubscriptionTransactions()[0].id }}</h2>\n                    <p class=\"ion-text-wrap\" *ngIf=\"getAllSubscriptionTransactions()[0].transaction\">Gereed op:\n                      {{ getAllSubscriptionTransactions()[0].transaction.timestamp_start | date:'mediumDate' }}\n                    </p>\n                    <p class=\"ion-text-wrap\" *ngIf=\"!getAllSubscriptionTransactions()[0].transaction\">Gepland voor:\n                      {{ getAllSubscriptionTransactions()[0].timestamp_planned | date:'mediumDate' }}\n                    </p>\n                    <p class=\"ion-text-wrap\" style=\"display: flex; justify-content: flex-start; align-items: center;\"\n                      *ngIf=\"!getAllSubscriptionTransactions()[0].transaction\">\n                      Nog niet gereed\n                      <ion-icon name=\"question-circle\" color=\"warning\" style=\"margin-left: 6px;\"></ion-icon>\n                    </p>\n                    <p class=\"ion-text-wrap\" style=\"display: flex; justify-content: flex-start; align-items: center;\"\n                      *ngIf=\"getAllSubscriptionTransactions()[0].transaction && getAllSubscriptionTransactions()[0].transaction.payments[0].status === 'PAID'\">\n                      Betaald\n                      <ion-icon name=\"checkmark-circle\" color=\"success\" style=\"margin-left: 6px;\"></ion-icon>\n                    </p>\n                    <p class=\"ion-text-wrap\" style=\"display: flex; justify-content: flex-start; align-items: center;\"\n                      *ngIf=\"getAllSubscriptionTransactions()[0].transaction && getAllSubscriptionTransactions()[0].transaction.payments[0].status !== 'PAID'\">\n                      Niet betaald\n                      <ion-icon name=\"close-circle\" color=\"danger\" style=\"margin-left: 6px;\"></ion-icon>\n                    </p>\n                  </ion-label>\n                </ion-item>\n                <ion-button expand=\"block\" fill=\"outline\" color=\"secondary\" (click)=\"goToSubscriptionTransactionsArchive()\">\n                  Bekijk archief\n                  <ion-icon name=\"arrow-forward\"></ion-icon>\n                </ion-button>\n          \n              </ion-card-content>\n          \n            </div>\n            \n          </ion-col>\n\n          <ion-col size=\"12\" size-lg=\"4\" *ngIf=\"getPlannedSubscriptionTransaction()\">\n            \n            <div class=\"section-image default-image\" [ngStyle]=\"{ 'background-image': 'url(' + nextDeliverySection?.image + ')' }\"></div>\n            <div></div>\n            \n            <div class=\"block\">\n            \n              <ion-card-header>\n                <ion-card-title>{{ nextDeliverySection?.title || 'De volgende levering' }}</ion-card-title>\n              </ion-card-header>\n            \n              <ion-card-content>\n            \n                De volgende levering van de fashion box staat alweer gepland. Hieronder vind je de details:\n                <br>\n                <br>\n                <ion-item detail=\"true\" (click)=\"goToSubscriptionTransaction()\">\n                  <ion-icon slot=\"start\" name=\"cube\"></ion-icon>\n                  <ion-label>\n                    <h2 class=\"ion-text-wrap\">Fashion Box #{{ getPlannedSubscriptionTransaction().id }}</h2>\n                    <p class=\"ion-text-wrap\">Gepland voor: week\n                      {{ getPlannedSubscriptionTransaction().timestamp_planned | date:'w' }}</p>\n                  </ion-label>\n                </ion-item>\n            \n                <br>\n                <br>\n            \n                Wil je graag een opmerking toevoegen? Bijvoorbeeld omdat je iets specifieks wil, of dat je tips wil hoe je\n                dat ene item in je kast moet combineren? Doe dat hieronder:\n                <ion-button expand=\"block\" fill=\"outline\" color=\"secondary\" (click)=\"note()\">\n                  <ng-container *ngIf=\"!getPlannedSubscriptionTransaction().remark\">Voeg een opmerking toe</ng-container>\n                  <ng-container *ngIf=\"getPlannedSubscriptionTransaction().remark\">Pas je opmerking aan</ng-container>\n                  <ion-icon name=\"arrow-forward\"></ion-icon>\n                </ion-button>\n            \n              </ion-card-content>\n            \n            </div>\n          </ion-col>\n\n          <ion-col size=\"12\" size-lg=\"4\">\n\n            <ng-container *ngIf=\"user && user.employee_id\">\n              <div class=\"section-image default-image\" [ngStyle]=\"{ 'background-image': 'url(' + employeeSection?.image + ')' }\"></div>\n              <div></div>\n            </ng-container>\n\n            <div class=\"block\" *ngIf=\"user && user.employee_id\">\n            \n              <ion-card-header>\n                <ion-card-title>{{ employeeSection?.title || 'Je personal shopper' }}</ion-card-title>\n              </ion-card-header>\n            \n              <ion-card-content>\n            \n                De volgende personal shopper zal je helpen met de allerleukste fashion, precies voor jou:\n                <br>\n                <br>\n                <ion-item detail=\"true\" (click)=\"goToEmployee()\">\n                  <ion-avatar slot=\"start\">\n                    <img [src]=\"getEmployeeImage()\">\n                  </ion-avatar>\n                  <ion-label>\n                    <h2>{{ user.employee_name }}</h2>\n                    <p class=\"ion-text-wrap\">Werkzaam bij KiBa sinds: {{ user.employee_startdate | date:'mediumDate' }}</p>\n                  </ion-label>\n                </ion-item>\n            \n                <div class=\"employee-note\">\n                  <ng-container *ngIf=\"user.employee_note\">\n                    \"{{ user.employee_note }}\"\n                  </ng-container>\n                  <ng-container *ngIf=\"!user.employee_note\">\n                    \"Hier zal een persoonlijk bericht verschijnen van je personal shopper.\"\n                  </ng-container>\n                </div>\n            \n              </ion-card-content>\n            \n            </div>\n\n          </ion-col>\n\n        </ng-container>\n\n        <ion-col size=\"12\" size-lg=\"4\">\n\n          <div class=\"section-image default-image\" [ngStyle]=\"{ 'background-image': 'url(' + testSection?.image + ')' }\"></div>\n          <div></div>\n          <div class=\"block\" *ngIf=\"!user || (user && !user['customer_details'])\">\n          \n            <ion-card-header>\n              <ion-card-title>{{ testSection?.title || 'Let\\'s be friends!' }}</ion-card-title>\n            </ion-card-header>\n          \n            <ion-card-content>\n          \n              We willen je graag leren kennen voordat we een pakket opsturen. Toch leuk als alles wat je binnenkrijgt, ook\n              echt bij je past! Het is verplicht om deze test in te vullen, anders weten we simpelweg niet genoeg om iets op\n              te kunnen sturen.\n          \n              <ion-button expand=\"block\" color=\"primary\" (click)=\"goToTest()\">\n                Doe de test\n                <ion-icon name=\"arrow-forward\" slot=\"end\"></ion-icon>\n              </ion-button>\n          \n            </ion-card-content>\n          \n          </div>\n          <div class=\"block\" *ngIf=\"user && user['customer_details']\">\n          \n            <ion-card-header>\n              <ion-card-title>{{ testSection?.title || 'We are friends!' }}</ion-card-title>\n            </ion-card-header>\n          \n            <ion-card-content>\n          \n              Je hebt de test ingevuld en we weten nu iets meer over je! Je kunt de test altijd een keer opnieuw doen. Let wel\n              op: je vorige antwoorden worden verwijderd!\n          \n              <ion-button expand=\"block\" color=\"warning\" (click)=\"goToTest()\">\n                Doe de test opnieuw\n                <ion-icon name=\"arrow-forward\" slot=\"end\"></ion-icon>\n              </ion-button>\n          \n            </ion-card-content>\n          \n            <ion-card-content>\n              Onze fashion specialists kijken in je profiel om te zien wat het beste bij je past. Ben je benieuwd wat zij te\n              zien krijgen?\n          \n              <ion-button expand=\"block\" color=\"secondary\" fill=\"outline\" (click)=\"goToCustomerProfile()\">\n                Bekijk je profiel\n                <ion-icon name=\"arrow-forward\" slot=\"end\"></ion-icon>\n              </ion-button>\n          \n            </ion-card-content>\n          \n          </div>\n\n        </ion-col>\n\n        <ion-col size=\"12\" size-lg=\"4\">\n\n          <div class=\"section-image default-image\" [ngStyle]=\"{ 'background-image': 'url(' + statusSection?.image + ')' }\"></div>\n          <div></div>\n          <div class=\"block\">\n          \n            <ion-card-header>\n              <ion-card-title>{{ statusSection?.title || 'Status wijzigen' }}</ion-card-title>\n            </ion-card-header>\n          \n            <ion-card-content>\n              Je kunt ten alle tijden de status van je abonnement wijzigen. Je kunt ervoor kiezen een pauze te nemen, we\n              zullen dan de\n              komende periode geen boxen opsturen tot je het weer wil hervatten. Je kunt er ook voor kiezen het abonnement\n              helemaal te\n              beëindigen.\n              <br><br>\n              <div style=\"display: flex; align-items: center; justify-content: space-between;\">\n                <ion-button size=\"small\" [color]=\"!subscription.is_paused ? 'warning' : 'success'\" style=\"flex: 1;\"\n                  (click)=\"pauseSubscription()\" [disabled]=\"pauseDisabled\">\n                  <ng-container *ngIf=\"!subscription.is_paused\">\n                    <ion-icon name=\"pause\" slot=\"start\"></ion-icon>\n                    Neem een pauze\n                  </ng-container>\n                  <ng-container *ngIf=\"subscription.is_paused\">\n                    <ion-icon name=\"play\" slot=\"start\"></ion-icon>\n                    Hervat\n                  </ng-container>\n                </ion-button>\n                <ion-button size=\"small\" color=\"danger\" style=\"flex: 1;\" (click)=\"endSubscription()\">\n                  <ion-icon name=\"close\" slot=\"start\"></ion-icon>\n                  Beëindig\n                </ion-button>\n              </div>\n          \n              <br>\n              <p>Je kunt een pauze nemen twee weken voordat je volgende box gepland staat. Anders wordt deze volgende box nog\n                geleverd in verband met voorbereidende werkzaamheden.</p>\n          \n            </ion-card-content>\n          \n          </div>\n\n        </ion-col>\n\n      </ion-row>\n    \n    </ion-grid>\n\n  </div>\n\n</div>","import { Component, OnInit, Input } from '@angular/core';\n\n@Component({\n  selector: 'rope-subscription-info',\n  templateUrl: './subscription-info.component.html',\n  styleUrls: ['./subscription-info.component.scss'],\n})\nexport class SubscriptionInfoComponent implements OnInit {\n\n  @Input() public name;\n\n  constructor() { }\n\n  ngOnInit() {}\n\n}\n","<div class=\"blocks\">\n\n  <div class=\"block\">\n\n    <ion-card-header>\n      <ion-card-title>Wat is het?</ion-card-title>\n    </ion-card-header>\n\n    <ion-card-content>\n      De {{ name }} is een periodieke kledingservice waarmee je verzekerd bent van de leukste\n      fashion musthaves. Jij bepaalt hoe vaak en voor welk budget we een kleding box naar je mogen versturen. De\n      kledingbox wordt samengesteld door een fashion specialist naar keuze. Er zijn geen verplichtingen en je betaalt\n      achteraf wat je wil houden. Even geen nieuwe kleding? Pauzeer dan op ieder moment je abonnement.\n    </ion-card-content>\n\n  </div>\n\n  <div class=\"block\">\n\n    <ion-card-header>\n      <ion-card-title>Hoe werkt het?</ion-card-title>\n    </ion-card-header>\n\n    <ion-card-content>\n      Na het aanmelden voor het abonnement worden er een aantal vragen gesteld om een eerste indruk te krijgen van je\n      stijl en smaak. Ben je al een terugkerende klant bij ons, dan nemen wij deze informatie ook mee. Ook vragen wij\n      naar de maat top en jeans welke je normaal gesproken hebt. Ten slotte kun je ook nog een fashion specialist\n      kiezen, maar je kunt je ook laten verrassen door dit open te laten.\n      <br>\n      <br>\n      Na het invullen van de vragen kun je direct zien op basis van welke informatie onze fashion specialist jouw pakket\n      gaat samenstellen. Wanneer het eerstvolgende pakket wordt geleverd, kun je precies zien in je account. Je ontvangt\n      hier over ook een e-mail met verzendinformatie. De fashion box kan op dit moment alleen nog naar het adres\n      gestuurd worden dat in je account staat, dut niet naar een PostNL punt. Je kunt het ook op komen halen in een van\n      de winkels.\n      <br>\n      <br>\n      Wanneer je het pakket hebt ontvangen, heb je twee weken de tijd alles te passen en in je account aan te geven wat\n      je wil houden en wat je terugstuurt. Doe je dit niet, dan krijg je automatisch een bericht van ons met een\n      betaalverzoek voor de gehele bestelling. Als je in je account hebt aangegeven wat je wilt houden en terugsturen,\n      dan krijg je van ons automatisch een bericht met een betaalverzoek van het overgebleven bedrag. Je kunt hier de\n      reguliere betaalmethoden van onze website kiezen.\n      <br>\n      <br>\n      Zowel de verzending als de retour zijn op onze kosten. Wel willen we je natuurlijk vragen zoveel mogelijk alles\n      goed in te vullen, zodat we je stijl kennen en kunnen zorgen dat zoveel mogelijk kleding goed voor je is. Daar\n      helpen we elkaar mee!\n    </ion-card-content>\n\n  </div>\n\n</div>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { LoadingController } from '@ionic/angular';\nimport { SubscriptionService } from '../../../services/subscription.service';\nimport { DatePipe, CurrencyPipe } from '@angular/common';\nimport { CoreService } from '../../../services/core.service';\nimport { PaymentService } from '../../../services/payment.service';\nimport { Shipment } from '../../../models/shipment';\n\n@Component({\n  selector: 'rope-subscription-transaction',\n  templateUrl: './subscription-transaction.component.html',\n  styleUrls: ['./subscription-transaction.component.scss'],\n})\nexport class SubscriptionTransactionComponent implements OnInit {\n\n  @Input() name;\n  @Input() topImage;\n\n  @Output() onShowVideo = new EventEmitter();\n  @Output() onShowImages = new EventEmitter();\n  @Output() onNote = new EventEmitter();\n  @Output() onReview = new EventEmitter();\n\n  public transaction;\n  public order;\n\n  public images;\n  public videos;\n\n  public paymentMethods;\n  public selectedPaymentMethod;\n\n  constructor(\n    private route: ActivatedRoute,\n    private subscriptionService: SubscriptionService,\n    private datePipe: DatePipe,\n    private loadingCtrl: LoadingController,\n    private currencyPipe: CurrencyPipe,\n    private coreService: CoreService,\n    private paymentService: PaymentService\n  ) { }\n\n  ngOnInit() {\n    this.init();\n  }\n\n  public init() {\n    this.route.paramMap.subscribe(params => {\n      const subtId = params.get('id');\n      this.loadSubscriptionTransaction(subtId);\n    });\n  }\n\n  public async loadPaymentMethods(countryCode) {\n\n    const paymentProvider = (\n      await this.paymentService.getCurrentPaymentProvider().toPromise()\n    )[\"name\"];\n\n    if (paymentProvider === \"adyen\") {\n      //TODO\n    } else if (paymentProvider === \"omnikassa_v2\") {\n      this.paymentService\n        .getPaymentMethods(countryCode)\n        .subscribe((res) => {\n          this.paymentMethods = res;\n        });\n    } else if (paymentProvider === \"paynl\") {\n      const total = this.order.total - this.getReturned();\n      this.paymentService\n        .getPaymentMethodsPaynl(countryCode, total)\n        .subscribe((res) => {\n\n          for (let rr of res) {\n            if (rr.payment_option.name === \"Billink\") {\n              rr.payment_option.name = \"Achteraf betalen\";\n            }\n          }\n\n          this.paymentMethods = res;\n        });\n    }\n\n  }\n\n  public isPaid() {\n\n    if (this.order.total - this.getReturned() <= 0.00) {\n      return true;\n    }\n\n    return this.order.payments[0].status === 'PAID';\n  }\n\n  public async requestPayment() {\n\n    let load = await this.loadingCtrl.create({\n      message: 'Doorsturen naar betaalomgeving...',\n      backdropDismiss: false\n    });\n\n    await load.present();\n\n    const paymentMethodId = this.selectedPaymentMethod.id;\n    const subscriptionTransactionId = this.transaction.id;\n    this.paymentService.requestSubsriptionPayment(paymentMethodId, subscriptionTransactionId).subscribe(r => {\n      load.dismiss();\n      this.coreService.openUrl(r['payment_url']);\n    }, error => {\n      console.error(error);\n      load.dismiss();\n      this.coreService.showAlert(error);\n    });\n\n  }\n\n  public loadSubscriptionTransaction(id) {\n\n    this.subscriptionService.getSubscriptionTransaction(id).subscribe(r => {\n      this.transaction = r[0];\n      this.order = this.transaction.transaction;\n      this.images = this.transaction.medias.filter(v => v.content_type.indexOf('image') !== -1);\n      this.videos = this.transaction.medias.filter(v => v.content_type.indexOf('video') !== -1);\n\n      if (this.transaction.transaction) {\n        this.loadPaymentMethods(this.transaction.transaction.customer.country_code);\n      }\n\n    });\n\n  }\n\n  public checkShipmentDelivered() {\n    if (!this.order) {\n      return false;\n    } else {\n      return this.order.shipments[0].is_final;\n    }\n  }\n\n  public async goToVideo(video) {\n    this.onShowVideo.emit(video);\n  }\n\n  public async goToImages() {\n    this.onShowImages.emit(this.images);\n  }\n\n  public getImageByTransactionLine(transaction_line: any) {\n    const outfitId = transaction_line.product_variant.product.outfits[0].id;\n    const storeBucketName = this.coreService.store.store_bucket_name;\n    return 'https://storage.googleapis.com/' + storeBucketName +'-bucket/image/outfit/' + outfitId + '.jpg';\n  }\n\n  public getEmployeeImage() {\n    const storeBucketName = this.coreService.store.store_bucket_name;\n    return 'https://storage.googleapis.com/' + storeBucketName +'-bucket/image/employee/' + this.order['employee'].id + '.jpg';\n  }\n\n  public getPaymentImage() {\n    const storeBucketName = this.coreService.store.store_bucket_name;\n    return 'https://storage.googleapis.com/' + storeBucketName +'-bucket/transparent_image/payment_method/' + this.order['payments'][0].payment_method.id + '.png';\n  }\n\n  public getTotal(transaction_line: any) {\n    return transaction_line.total / transaction_line.quantity;\n  }\n\n  public getReturned() {\n    if (this.order.returns && this.order.returns.length > 0) {\n      return this.order.returns[0].credit ? this.order.returns[0].credit : 0.00;\n    } else {\n      return 0.00;\n    }\n  }\n\n  public getShippingCost(shipment: Shipment) {\n\n    if (shipment.shipping_method.cost === 0.00) {\n      return 'Gratis';\n    } else {\n      return this.currencyPipe.transform(shipment.shipping_method.cost, 'EUR', 'symbol');\n    }\n\n  }\n\n  public getAddress(shipment: Shipment) {\n    const houseNumberExt = shipment.house_number_extension ? '-' + shipment.house_number_extension : '';\n    return shipment.street + ' ' + shipment.house_number + houseNumberExt + ' in ' + shipment.city;\n  }\n\n  public getTimeInfo(shipment: Shipment) {\n\n    if (shipment.timeframe_end) {\n      return 'Tussen ' + this.datePipe.transform(shipment.timeframe_start, 'HH:mm') + ' en ' +\n        this.datePipe.transform(shipment.timeframe_end, 'HH:mm');\n    } else {\n      return 'Vanaf ' + this.datePipe.transform(shipment.timeframe_start, 'HH:mm');\n    }\n\n  }\n\n  public async note() {\n    this.onNote.emit(this.transaction);\n  }\n\n  public async review() {\n    this.onReview.emit(this.transaction);\n  }\n\n  public traceOrder() {\n\n    const shipment = this.order.shipments[0];\n    const link = 'https://jouw.postnl.nl/?D=NL&T=C#!/track-en-trace/' + shipment.track_and_trace + '/' + shipment.country_code + '/' + shipment.postal_code;\n    this.coreService.openUrl(link);\n\n  }\n\n}\n","<ng-container *ngIf=\"transaction\">\n\n  <div class=\"blocks\">\n\n    <div *ngIf=\"topImage\" class=\"section-image\" [ngStyle]=\"{ 'background-image': 'url(' + topImage + ')' }\"></div>\n    <div *ngIf=\"!topImage\" class=\"section-image fb-bg\"></div>\n    <div></div>\n\n    <ion-grid>\n    \n      <ion-row>\n    \n        <ion-col size=\"12\" size-lg=\"4\">\n          <div class=\"block\">\n\n            <ion-card-header>\n              <ion-card-title>Je {{ name }}</ion-card-title>\n            </ion-card-header>\n\n            <ion-card-content class=\"ion-text-center\">\n\n              <ng-container *ngIf=\"!order\">\n                <p>We maken je box klaar voor verzending in:</p>\n                <div class=\"big-text\">Week {{ transaction.timestamp_planned | date:'w' }}</div>\n                <br>\n                <p>Je vindt dan op deze pagina al de informatie over je fashion box inclusief een leuke uitleg van je personal\n                  shopper!</p>\n              </ng-container>\n\n              <ng-container *ngIf=\"order && !checkShipmentDelivered()\">\n                <p>\n                  <b>Je fashion box is onderweg!</b>\n                </p>\n                <p>Zodra je de fashion box hebt ontvangen, vind je hieronder al de informatie over je fashion box inclusief\n                  een leuke uitleg van je personal\n                  shopper! Traceer hieronder vast je zending.</p>\n                <br>\n                <br>\n\n                <div style=\"border: 1px solid darkslategrey; border-radius: 5px;\">\n\n                  <ion-item lines=\"none\">\n                    <ion-avatar slot=\"start\">\n                      <img src=\"assets/images/postnl-small.jpg\">\n                    </ion-avatar>\n                    <ion-label>\n                      <h2 text-wrap>{{ order.shipments[0].shipping_method.localized_string }}</h2>\n                      <h3 class=\"first-letter-uppercase\">{{ order.shipments[0].timeframe_start | date:'fullDate' }}</h3>\n                      <div class=\"address\" text-wrap>{{ getAddress(order.shipments[0]) }}</div>\n                    </ion-label>\n                    <div slot=\"end\">{{ getShippingCost(order.shipments[0]) }}</div>\n                  </ion-item>\n                  <ion-item *ngIf=\"order.shipments[0].track_and_trace !== ''\">\n                    <ion-label text-wrap>\n                      <p>Traceer je bestelling met de track&trace pagina van PostNL</p>\n                    </ion-label>\n                    <ion-button slot=\"end\" color=\"primary\" (click)=\"traceOrder()\">\n                      Traceer\n                    </ion-button>\n                  </ion-item>\n\n                </div>\n\n                <br>\n                <br>\n                <br>\n                <p>\n                  <i>De informatie hieronder komt beschikbaar zodra je het pakket hebt ontvangen. Het is dus nog even spannend\n                    ;)</i>\n                </p>\n              </ng-container>\n\n              <ng-container *ngIf=\"order && checkShipmentDelivered()\">\n                <p>\n                  <b>Je fashion box is geleverd!</b>\n                </p>\n                <br>\n                <p>Hieronder vind je al de informatie over je fashion box inclusief een leuke uitleg van je personal\n                  shopper!</p>\n              </ng-container>\n\n            </ion-card-content>\n\n          </div>\n        </ion-col>\n\n        <ion-col size=\"12\" size-lg=\"4\" *ngIf=\"!order\">\n          <div class=\"block\">\n\n            <ion-card-header>\n              <ion-card-title>Opmerking</ion-card-title>\n            </ion-card-header>\n\n            <ion-card-content>\n\n              <ng-container *ngIf=\"transaction.remark\">\n                <p>Je opmerking voor deze fashion box:</p>\n                <ion-textarea [(ngModel)]=\"transaction.remark\" readonly=\"true\" class=\"textarea\" autoGrow=\"true\">\n\n                </ion-textarea>\n                <br>\n              </ng-container>\n\n              <ng-container *ngIf=\"!transaction.remark\">\n                Wil je graag een opmerking toevoegen? Bijvoorbeeld omdat je iets specifieks wil, of dat je tips wil hoe je dat\n                ene item\n                in je kast moet combineren? Doe dat hieronder:\n              </ng-container>\n              <ion-button expand=\"block\" fill=\"outline\" color=\"secondary\" (click)=\"note()\">\n                <ng-container *ngIf=\"!transaction.remark\">Voeg een opmerking toe</ng-container>\n                <ng-container *ngIf=\"transaction.remark\">Pas je opmerking aan</ng-container>\n                <ion-icon name=\"arrow-forward\"></ion-icon>\n              </ion-button>\n\n            </ion-card-content>\n\n          </div>\n        </ion-col>\n    \n        <ion-col size=\"12\" size-lg=\"4\" *ngIf=\"order && !checkShipmentDelivered()\">\n          <div class=\"black-out\"></div>\n        </ion-col>\n    \n        <ng-container *ngIf=\"checkShipmentDelivered()\">\n          <ion-col size=\"12\" size-lg=\"4\" *ngIf=\"order\">\n            <div class=\"block\">\n\n              <ion-card-header>\n                <ion-card-title>Uitleg</ion-card-title>\n              </ion-card-header>\n\n              <ion-card-content class=\"ion-text-center\">\n\n                <div style=\"width: 100%; display: flex; align-items: center; justify-content: center;\">\n                  <ion-avatar style=\"width: 150px; height: 150px;\" class=\"ion-text-center\">\n                    <img style=\"width: 150px; height: 150px;\" [src]=\"getEmployeeImage()\">\n                  </ion-avatar>\n                </div>\n                <br><br>\n                <ion-label>\n                  <h1 class=\"dark\" text-wrap><b>{{ order.employee.name }}</b></h1>\n                  <p>zegt:</p>\n                </ion-label>\n\n                <div class=\"employee-note\">\n                  \"{{ transaction.employee_remark }}\"\n                </div>\n\n                <br>\n                <ng-container *ngIf=\"videos.length > 0\">\n                  <ion-button *ngFor=\"let video of videos\" expand=\"block\" fill=\"outline\" color=\"secondary\"\n                    (click)=\"goToVideo(video)\">\n                    Bekijk uitleg-video\n                    <ion-icon name=\"arrow-forward\"></ion-icon>\n                  </ion-button>\n                </ng-container>\n                <ng-container *ngIf=\"images.length > 0\">\n                  <ion-button expand=\"block\" fill=\"outline\" color=\"secondary\" (click)=\"goToImages()\">\n                    Bekijk afbeeldingen\n                    <ion-icon name=\"arrow-forward\"></ion-icon>\n                  </ion-button>\n                </ng-container>\n\n                <br>\n                <br>\n\n                <ng-container *ngIf=\"transaction.review\">\n                  <p>Je opmerking voor deze fashion box:</p>\n                  <ion-textarea [(ngModel)]=\"transaction.remark\" readonly=\"true\" class=\"textarea\" autoGrow=\"true\">\n                  </ion-textarea>\n                  <br>\n                </ng-container>\n\n                <ng-container *ngIf=\"!transaction.review\">\n                  We willen graag weten wat je van deze fashion box vindt! Laat het weten door een reactie achter te laten.\n                  Ook leuk voor je personal shopper!\n                </ng-container>\n                <ion-button expand=\"block\" fill=\"outline\" color=\"secondary\" (click)=\"review()\">\n                  <ng-container *ngIf=\"!transaction.review\">Voeg een reactie toe</ng-container>\n                  <ng-container *ngIf=\"transaction.review\">Pas je reactie aan</ng-container>\n                  <ion-icon name=\"arrow-forward\"></ion-icon>\n                </ion-button>\n\n              </ion-card-content>\n\n            </div>\n          </ion-col>\n          <ion-col size=\"12\" size-lg=\"4\" *ngIf=\"order\">\n            <div class=\"block\">\n\n              <ion-card-header>\n                <ion-card-title>Openstaande betaling</ion-card-title>\n              </ion-card-header>\n              <ion-card-content class=\"ion-text-center\">\n\n                <p>De producten in de fashion box die je houdt, kun je hieronder direct betalen. Wil je graag alles houden?\n                  Dan kun je meteen de betaling doen. Anders willen we je vragen om even te wachten tot je een bevestiging van\n                  de retour hebt ontvangen, zodat het bedrag hieronder is aangepast.</p>\n\n                <br>\n                <br>\n                <ion-label position=\"stacked\">Initiële bedrag</ion-label>\n                <h2>{{ order.total | currency:'EUR':'symbol' }}</h2>\n\n                <br>\n                <ion-label position=\"stacked\">Retourbedrag</ion-label>\n                <h2>{{ getReturned() | currency:'EUR':'symbol' }}</h2>\n\n                <br>\n                <ion-label position=\"stacked\">\n                  {{ isPaid() ? 'Betaald' : 'Openstaand bedrag' }}\n                </ion-label>\n                <h1>{{ (order.total - getReturned()) | currency:'EUR':'symbol' }}</h1>\n\n                <br>\n                <br>\n                <div *ngIf=\"paymentMethods && !isPaid()\"\n                  style=\"border-radius: 4px; border: 1px solid darkslategray; background-color: #f2f2f2; padding: 20px;\">\n\n                  <ion-label position=\"stacked\">\n                    <b>Betaalmethode</b>\n                  </ion-label>\n                  <ion-select [(ngModel)]=\"selectedPaymentMethod\" placeholder=\"Selecteer een betaalmethode...\"\n                    style=\"border: 1px solid lightgray; border-radius: 4px; margin-left: 2px; margin-right: 2px; margin-top: 5px; margin-bottom: 5px;\">\n                    <ion-select-option *ngFor=\"let pm of paymentMethods\" [value]=\"pm\">{{ pm.payment_option ? pm.payment_option.name : pm.localized_name }}\n                    </ion-select-option>\n                  </ion-select>\n\n                  <ion-button color=\"success\" expand=\"block\" [disabled]=\"!selectedPaymentMethod\" (click)=\"requestPayment()\">\n                    Nu {{ (order.total - getReturned()) | currency:'EUR':'symbol' }} betalen\n                  </ion-button>\n\n                  <p style=\"color: indianred; font-size: 1.0rem;\">Het kan tot maximaal 5 minuten duren voordat de betaling\n                    verwerkt is. Betaal dus niet opnieuw als je deze bestelling al succesvol hebt betaald.</p>\n\n                </div>\n\n              </ion-card-content>\n\n            </div>\n          </ion-col>\n          <ion-col size=\"12\" size-lg=\"4\" *ngIf=\"order\">\n            <div class=\"block\">\n\n              <ion-card-header>\n                <ion-card-title>Algemene informatie</ion-card-title>\n              </ion-card-header>\n              <ion-card-content class=\"ion-text-center\">\n                <ion-label position=\"stacked\">Ordernummer</ion-label>\n                <h2>{{ order.id }}</h2>\n                <br>\n                <ion-label position=\"stacked\">Datum</ion-label>\n                <h2>{{ order.timestamp_start | date:'fullDate' }}</h2>\n                <br>\n                <ion-label position=\"stacked\">Filiaal</ion-label>\n                <h2>{{ order.branch.full_name }}</h2>\n              </ion-card-content>\n\n            </div>\n          </ion-col>\n          <ion-col size=\"12\" size-lg=\"4\" *ngIf=\"order\">\n            <div class=\"block\">\n\n              <ion-card-header>\n                <ion-card-title>Producten</ion-card-title>\n              </ion-card-header>\n\n              <ion-card-content>\n                <ion-item *ngFor=\"let transaction_line of order.transaction_lines\" lines=\"none\">\n                  <ion-avatar slot=\"start\">\n                    <img [src]=\"getImageByTransactionLine(transaction_line)\" class=\"custom-avatar\">\n                  </ion-avatar>\n                  <ion-label>\n                    <h3 class=\"ion-text-wrap\">{{ transaction_line.product_variant.product.name.replace('Dameskleding', '') }}\n                      {{ transaction_line.product_variant.size.name }}</h3>\n                    <p>{{ transaction_line.quantity }} stuk(s) x {{ getTotal(transaction_line) | currency:'EUR':'symbol' }}\n                    </p>\n                  </ion-label>\n                  <div slot=\"end\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 2rem;\">\n                    {{ transaction_line.total | currency:'EUR':'symbol' }}\n                  </div>\n                </ion-item>\n              </ion-card-content>\n\n            </div>\n          </ion-col>\n          <ion-col size=\"12\" size-lg=\"4\" *ngIf=\"order && order.shipments && order.shipments.length > 0 && order.shipments[0].id !== 0\">\n            <div class=\"block\">\n\n              <ion-card-header>\n                <ion-card-title>Bezorging</ion-card-title>\n              </ion-card-header>\n\n              <ion-card-content>\n                <ion-item lines=\"none\">\n                  <ion-avatar slot=\"start\">\n                    <img src=\"assets/images/postnl-small.jpg\">\n                  </ion-avatar>\n                  <ion-label>\n                    <h2 text-wrap>{{ order.shipments[0].shipping_method.localized_string }}</h2>\n                    <h3 class=\"first-letter-uppercase\">{{ order.shipments[0].timeframe_start | date:'fullDate' }}</h3>\n                    <div class=\"address ion-text-wrap\">Bezorgd op {{ getAddress(order.shipments[0]) }}</div>\n                  </ion-label>\n                  <div slot=\"end\">{{ getShippingCost(order.shipments[0]) }}</div>\n                </ion-item>\n                <ion-item *ngIf=\"order.shipments[0].track_and_trace !== ''\">\n                  <ion-label text-wrap>\n                    <p>Traceer je bestelling met de track&trace pagina van PostNL</p>\n                  </ion-label>\n                  <ion-button slot=\"end\" color=\"primary\" (click)=\"traceOrder()\">\n                    Traceer\n                  </ion-button>\n                </ion-item>\n              </ion-card-content>\n            </div>\n          </ion-col>\n          <ion-col size=\"12\" size-lg=\"4\" *ngIf=\"order && transaction.net_total !== undefined\">\n            <div class=\"block\">\n\n              <ion-card-header>\n                <ion-card-title>Betaling</ion-card-title>\n              </ion-card-header>\n\n              <ion-card-content>\n                <ion-item lines=\"none\">\n                  <ion-label>\n\n                  </ion-label>\n                  <div slot=\"end\">Gratis</div>\n                </ion-item>\n              </ion-card-content>\n            </div>\n          </ion-col>\n          <ion-col size=\"12\" size-lg=\"4\" *ngIf=\"order\">\n            <div class=\"block\">\n\n              <ion-card-header>\n                <ion-card-title>Totalen</ion-card-title>\n              </ion-card-header>\n\n              <ion-card-content>\n                <ion-item lines=\"none\">\n                  <ion-label>\n                    <h2>Totaal</h2>\n                    <p>\n                      {{ order.transaction_lines.length }}\n                      product<span *ngIf=\"order.transaction_lines.length > 1\">en</span>\n                    </p>\n                  </ion-label>\n                  <div slot=\"end\">\n                    {{ order.sub_total | currency:'EUR':'symbol' }}\n                  </div>\n                </ion-item>\n              </ion-card-content>\n\n            </div>\n          </ion-col>\n          <ion-col size=\"12\" size-lg=\"4\" *ngIf=\"order && order.employee\" >\n            <div class=\"block\">\n\n              <ion-card-header>\n                <ion-card-title>Werknemer</ion-card-title>\n              </ion-card-header>\n\n              <ion-card-content class=\"ion-text-center\">\n                <div style=\"width: 100%; display: flex; align-items: center; justify-content: center;\">\n                  <ion-avatar style=\"width: 150px; height: 150px;\" class=\"ion-text-center\">\n                    <img style=\"width: 150px; height: 150px;\" [src]=\"getEmployeeImage()\">\n                  </ion-avatar>\n                </div>\n                <br><br>\n                <ion-label>\n                  <p class=\"dark\">Je bent geholpen door</p>\n                  <h3 class=\"dark\" text-wrap><b>{{ order.employee.name }}</b></h3>\n                </ion-label>\n              </ion-card-content>\n\n            </div>\n          </ion-col>\n        </ng-container>\n\n      </ion-row>\n\n    </ion-grid>\n\n  </div>\n\n\n</ng-container>","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { SubscriptionService } from '../../../services/subscription.service';\n\n@Component({\n  selector: 'rope-subscription-transaction-archive',\n  templateUrl: './subscription-transaction-archive.component.html',\n  styleUrls: ['./subscription-transaction-archive.component.scss'],\n})\nexport class SubscriptionTransactionArchiveComponent implements OnInit {\n  \n  @Output() onGoToSubscriptionTransactionWithId = new EventEmitter();\n\n  public subscriptionTransactions;\n\n  constructor(\n    public subscriptionService: SubscriptionService,\n  ) { }\n\n  ngOnInit() {\n\n    this.subscriptionService.getSubscriptionTransactions().subscribe(r => {\n      this.subscriptionTransactions = r;\n    });\n\n  }\n\n  public goToSubscriptionTransactionWithId(id) {\n    this.onGoToSubscriptionTransactionWithId.emit(id);\n  }\n\n}\n","<ion-list>\n  <ion-item *ngFor=\"let subscriptionTransaction of subscriptionTransactions\" detail=\"true\"\n    (click)=\"goToSubscriptionTransactionWithId(subscriptionTransaction.id)\">\n    <ion-icon slot=\"start\" name=\"cube\"></ion-icon>\n    <ion-label>\n      <h2 class=\"ion-text-wrap\">Fashion Box #{{ subscriptionTransaction.id }}</h2>\n      <p class=\"ion-text-wrap\" *ngIf=\"subscriptionTransaction.transaction\">Gereed op:\n        {{ subscriptionTransaction.transaction.timestamp_start | date:'mediumDate' }}\n      </p>\n      <p class=\"ion-text-wrap\" *ngIf=\"!subscriptionTransaction.transaction\">Gepland voor:\n        {{ subscriptionTransaction.timestamp_planned | date:'mediumDate' }}\n      </p>\n      <p class=\"ion-text-wrap\" style=\"display: flex; justify-content: flex-start; align-items: center;\"\n        *ngIf=\"!subscriptionTransaction.transaction\">\n        Nog niet gereed\n        <ion-icon name=\"question-circle\" color=\"warning\" style=\"margin-left: 6px;\"></ion-icon>\n      </p>\n      <p class=\"ion-text-wrap\" style=\"display: flex; justify-content: flex-start; align-items: center;\"\n        *ngIf=\"subscriptionTransaction.transaction && subscriptionTransaction.transaction.payments[0].status === 'PAID'\">\n        Betaald\n        <ion-icon name=\"checkmark-circle\" color=\"success\" style=\"margin-left: 6px;\"></ion-icon>\n      </p>\n      <p class=\"ion-text-wrap\" style=\"display: flex; justify-content: flex-start; align-items: center;\"\n        *ngIf=\"subscriptionTransaction.transaction && subscriptionTransaction.transaction.payments[0].status !== 'PAID'\">\n        Niet betaald\n        <ion-icon name=\"close-circle\" color=\"danger\" style=\"margin-left: 6px;\"></ion-icon>\n      </p>\n    </ion-label>\n  </ion-item>\n</ion-list>","import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';\nimport { SubscriptionService } from '../../../services/subscription.service';\nimport { CoreService } from '../../../services/core.service';\n\n@Component({\n  selector: 'rope-subscription-note',\n  templateUrl: './subscription-note.component.html',\n  styleUrls: ['./subscription-note.component.scss'],\n})\nexport class SubscriptionNoteComponent implements OnInit {\n\n  @Input() transaction;\n  @Output() onDismiss = new EventEmitter();\n\n  public saving = false;\n  public remark: string;\n\n  constructor(\n    private subscriptionService: SubscriptionService,\n    private coreService: CoreService\n  ) { }\n\n  ngOnInit() {\n    if (this.transaction.remark) {\n      this.remark = this.transaction.remark;\n    }\n  }\n\n  public save() {\n\n    this.saving = true;\n    this.subscriptionService.postRemarkToTransaction(this.transaction.id, this.remark).subscribe(r => {\n      this.saving = false;\n      this.onDismiss.emit({ status: 1 });\n    }, error => {\n      this.saving = false;\n      this.coreService.showAlert(error);\n    });\n\n  }\n\n}\n","<div class=\"blocks\">\n\n  <div class=\"block\">\n\n    <ion-card-header>\n      <ion-card-title>Opmerking</ion-card-title>\n    </ion-card-header>\n\n    <ion-card-content>\n\n      Heb je een opmerking voor je volgende levering? Wil je het graag voor een speciale gebeurtenis? Of heb je juist\n      tips nodig voor hoe je dat ene item in je kast toch moet combineren? Geef het hieronder op:\n\n      <ion-textarea class=\"textarea\" rows=\"14\" [(ngModel)]=\"remark\" placeholder=\"Typ hier je opmerking...\">\n      </ion-textarea>\n\n      <br>\n\n      <ion-button expand=\"block\" (click)=\"save()\" [disabled]=\"!remark || saving\">\n        Opslaan\n      </ion-button>\n\n    </ion-card-content>\n\n\n  </div>\n\n</div>","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { SubscriptionService } from '../../../services/subscription.service';\nimport { CoreService } from '../../../services/core.service';\n\n@Component({\n  selector: 'rope-subscription-review',\n  templateUrl: './subscription-review.component.html',\n  styleUrls: ['./subscription-review.component.scss'],\n})\nexport class SubscriptionReviewComponent implements OnInit {\n\n  @Input() transaction;\n  @Output() onDismiss = new EventEmitter();\n\n  public saving = false;\n  public review: string;\n\n  constructor(\n    private subscriptionService: SubscriptionService,\n    private coreService: CoreService\n  ) { }\n\n  ngOnInit() {\n    if (this.transaction.review) {\n      this.review = this.transaction.review;\n    }\n  }\n\n  public save() {\n\n    this.saving = true;\n    this.subscriptionService.postReviewToTransaction(this.transaction.id, this.review).subscribe(r => {\n      this.saving = false;\n      this.onDismiss.emit({ status: 1 });\n    }, error => {\n      this.saving = false;\n      this.coreService.showAlert(error);\n    });\n\n  }\n\n}\n","<div class=\"blocks\">\n\n  <div class=\"block\">\n\n    <ion-card-header>\n      <ion-card-title>Reactie</ion-card-title>\n    </ion-card-header>\n\n    <ion-card-content>\n      We lezen graag je reactie op de geleverde fashion box. Wat hebben we goed gedaan en wat kan de volgende keer\n      beter?\n      <ion-textarea class=\"textarea\" rows=\"14\" [(ngModel)]=\"review\" placeholder=\"Typ hier je reactie...\">\n      </ion-textarea>\n      <br>\n      <ion-button expand=\"block\" (click)=\"save()\" [disabled]=\"!review || saving\">\n        Opslaan\n      </ion-button>\n    </ion-card-content>\n\n  </div>\n\n</div>\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ModalController, NavParams, LoadingController } from '@ionic/angular';\nimport { SubscriptionService } from '../../../services/subscription.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { CoreService } from '../../../services/core.service';\n\n@Component({\n  selector: 'rope-subscription-consent',\n  templateUrl: './subscription-consent.component.html',\n  styleUrls: ['./subscription-consent.component.scss'],\n})\nexport class SubscriptionConsentComponent implements OnInit {\n\n  @Input() name;\n  @Input() companyName;\n\n  @Input() subscriptionTypeId;\n  @Input() budget;\n  @Input() uuid;\n\n  @Output() onDismiss = new EventEmitter();\n\n  public consentApproved;\n  public customer;\n\n  constructor(\n    private loadingCtrl: LoadingController,\n    private subscriptionService: SubscriptionService,\n    private authService: AuthService,\n    private coreService: CoreService\n  ) { }\n\n  ngOnInit() {\n    this.customer = this.authService.getCurrentUser();\n  }\n\n  public async doSubscribe() {\n\n    const load = await this.loadingCtrl.create({\n      message: 'Laden...'\n    });\n    await load.present();\n\n    this.subscriptionService.subscribeCustomer(this.customer.id, this.subscriptionTypeId, this.budget, this.uuid).subscribe(r => {\n      load.dismiss();\n      this.onDismiss.emit({ status: 1 });\n    }, error => {\n      load.dismiss();\n      this.coreService.showAlert(error);\n    });\n\n  }\n\n}\n","<div class=\"blocks\">\n\n  <div class=\"block\">\n\n    <ion-card-header>\n      <ion-card-title>\n        Aanmelden voor de {{ name }}\n      </ion-card-title>\n    </ion-card-header>\n\n    <ion-card-content>\n\n      Door het aanmelden voor de {{ name }} ga je ermee akkoord dat {{ companyName }} periodiek een kleding pakket voor het\n      gewenste budget naar je verstuurd en je hiermee over de producten die je niet retourneert een\n      betalingsverplichting aangaat.\n\n      <br>\n      <br>\n      <br>\n      <ion-item *ngIf=\"customer\">\n        <ion-label class=\"ion-text-wrap\">\n          <p>\n            <b>Ingelogd als: {{ customer.email }}</b>\n          </p>\n        </ion-label>\n      </ion-item>\n      <ion-item>\n        <ion-checkbox [(ngModel)]=\"consentApproved\" slot=\"start\"></ion-checkbox>\n        <ion-label class=\"ion-text-wrap\">\n          <p>Ja, ik ga akkoord met de betalingsverplichting over de producten van de box welke ik graag wil\n            houden.</p>\n        </ion-label>\n      </ion-item>\n\n      <ion-button color=\"success\" expand=\"block\" [disabled]=\"!consentApproved\" (click)=\"doSubscribe()\" style=\"--ion-color-contrast: black !important;\">\n        Sluit abonnement af\n      </ion-button>\n\n    </ion-card-content>\n\n  </div>\n\n</div>","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { CoreService } from './core.service';\nimport { Observable } from 'rxjs';\nimport { Employee } from '../models/employee';\nimport { tap } from 'rxjs/operators';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class EmployeeService {\n\n  constructor(\n    private http: HttpClient,\n    private coreService: CoreService\n  ) { }\n\n  public getEmployees(): Observable<Employee[]> {\n    const requestOptions = {\n      headers: this.coreService.getHeaders()\n    };\n    return this.http.get<Employee[]>(this.coreService.getBaseUrl() + 'employee/get', requestOptions);\n  }\n\n  public getEmployeePinterest(name): Observable<any> {\n\n    const params = {\n      name: 'personal-shopper-' + name\n    };\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders()\n    };\n    return this.http.get<Employee[]>(this.coreService.getBaseUrl() + 'employee/pinterest', requestOptions);\n\n  }\n\n}\n","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { EmployeeService } from '../../../services/employee.service';\nimport { SubscriptionService } from '../../../services/subscription.service';\nimport { CoreService } from '../../../services/core.service';\nimport { IonicSlides } from '@ionic/angular';\nimport { SwiperOptions } from 'swiper/types';\n\n@Component({\n  selector: 'rope-subscription-employee',\n  templateUrl: './subscription-employee.component.html',\n  styleUrls: ['./subscription-employee.component.scss'],\n})\nexport class SubscriptionEmployeeComponent implements OnInit {\n\n  @Input() employeeId;\n  @Output() onDismiss = new EventEmitter();\n\n  public employees;\n  public selectedEmployee;\n  public selectedIndex;\n  public employeeChanged = false;\n\n  public saving = false;\n  public loading = true;\n\n  public stylistSlidesOptions: SwiperOptions = {\n    spaceBetween: 20,\n    loop: true,\n    initialSlide: 1,\n    freeMode: false\n  };\n  public swiperModules = [IonicSlides];\n\n  constructor(\n    private employeeService: EmployeeService,\n    private subscriptionService: SubscriptionService,\n    private coreService: CoreService,\n  ) { }\n\n  ngOnInit() {\n    this.loadEmployeeData();\n  }\n\n  public loadEmployeeData() {\n\n    this.employeeService.getEmployees().subscribe(res => {\n\n      const employeeChoices = [];\n      for (const empl of res) {\n        employeeChoices.push({\n          title: empl.name,\n          id: empl.id,\n          timestamp_start: empl['timestamp_start'],\n          description: empl['description'],\n          img: empl.images[0].url,\n          date_of_birth: empl['date_of_birth']\n        });\n\n      }\n\n      this.employees = this.shuffleArray(employeeChoices);\n\n      if (this.employeeId) {\n        this.selectedEmployee = this.employees.find(e => e.id == this.employeeId);\n        this.selectedIndex = this.employees.findIndex(e => e.id == this.employeeId);\n        this.stylistSlidesOptions.initialSlide = this.selectedIndex;\n      }\n\n      for (const e of this.employees) {\n        this.employeeService.getEmployeePinterest(e.title.split(' ')[0].toLowerCase()).subscribe(r => {\n          const feed = [];\n          const rr = this.shuffleArray(r.slice(0, 9));\n          for (const f of rr) {\n            feed.push({\n              img: /<img.*?src=['\"](.*?)['\"]/.exec(f.description)[1],\n              link: f.link\n            });\n          }\n          e.feed = feed;\n        });\n      }\n      this.loading = false;\n    });\n  }\n\n  public shuffleArray(array) {\n    for (let i = array.length - 1; i > 0; i--) {\n      const j = Math.floor(Math.random() * (i + 1));\n      [array[i], array[j]] = [array[j], array[i]];\n    }\n    return array;\n  }\n\n  public selectPersonalStylist(event, empl) {\n    const employee = event.detail.value;\n    if ((this.selectedEmployee && employee.id !== this.selectedEmployee.id) || !this.selectedEmployee) {\n      this.selectedEmployee = employee;\n      this.employeeChanged = true;\n    }\n  }\n\n  public selectClickPersonalStylist(empl) {\n    const employee = empl;\n    if ((this.selectedEmployee && employee.id !== this.selectedEmployee.id) || !this.selectedEmployee) {\n      this.selectedEmployee = employee;\n      this.employeeChanged = true;\n      this.save();\n    }\n  }\n\n  public save() {\n\n    this.saving = true;\n    this.subscriptionService.getSubscription().subscribe(subscription => {\n      this.subscriptionService.updateSubscriptionEmployee(subscription[0].id, this.selectedEmployee.id).subscribe(r => {\n        this.coreService.newSubscriptionDetails.next(true);\n        this.onDismiss.emit({ status: 1, employee: this.selectedEmployee });\n        this.saving = false;\n      });\n    });\n\n  }\n\n}\n","<div class=\"blocks\">\n\n  <div class=\"block\" *ngIf=\"!loading\">\n\n    <ion-card-header>\n      <ion-card-title>Je personal shopper</ion-card-title>\n    </ion-card-header>\n\n    <ion-card-content>\n\n      <p>Je kunt kiezen uit een personal stylist die het best bij jou past! Kijk hieronder naar de profielen, waar je\n        ook de\n        mogelijkheid hebt om te kijken naar de persoonlijke Pinterest pagina's. Je kunt swipen om meerdere personal\n        stylists te\n        zien!</p>\n\n      <ng-container *ngIf=\"employeeId\">\n        <br>\n        <p>\n          <b>Hieronder staat de personal shopper die je op dit moment gekozen hebt.</b>\n        </p>\n        <br>\n      </ng-container>\n\n      <div *ngIf=\"employees && employees.length > 0\">\n\n        <swiper-container class=\"stylist-slides\" [config]=\"stylistSlidesOptions\" [modules]=\"swiperModules\" #stylistSlides>\n\n          <swiper-slide *ngFor=\"let empl of employees\">\n            <div class=\"stylist-slide slide-container\" style=\"cursor: pointer;\">\n\n              <div class=\"button-container ion-text-center\" style=\"width: 100%;\">\n                <div\n                  style=\"font-size: 1.1rem; font-family: 'Source Sans Pro'; font-style: italic; width: 100%; display: flex; justify-content: space-around;\"\n                  class=\"ion-text-center ion-text-wrap\">\n                  <div>\n                    << </div>\n                      <div>\n                        Swipe naar links of rechts voor andere personal stylisten\n                      </div>\n                      <div>\n                        >>\n                      </div>\n                  </div>\n                </div>\n\n                <div class=\"top-container\">\n                  <ion-avatar class=\"custom-avatar\" style=\"margin-top: 20px;\">\n                    <img [src]=\"empl.img\" class=\"custom-avatar\" style=\"user-drag: none; user-select: none;\" />\n                  </ion-avatar>\n                  <h1>{{ empl.title }}</h1>\n                  <div *ngIf=\"empl.timestamp_start\">\n                    Werkzaam sinds: {{ empl.timestamp_start | date:'mediumDate' }}\n                  </div>\n                  <div class=\"ps-desc\" *ngIf=\"empl.description\">\n                    \"{{ empl.description }}\"\n                  </div>\n                </div>\n                <ion-button expand=\"block\" (click)=\"selectClickPersonalStylist(empl)\" [disabled]=\"saving\">\n                  Selecteer\n                  <ion-icon name=\"checkbox\" slot=\"end\"></ion-icon>\n                </ion-button>\n                <br>\n                <div style=\"width: 100%;\" *ngIf=\"empl.feed\">\n                  <ion-grid class=\"pinterest-container\">\n                    <ion-row>\n                      <ion-col *ngFor=\"let feed of empl.feed\" size=\"4\">\n                        <div class=\"bg-container\" [ngStyle]=\"{'background-image': 'url(' + feed.img + ')'}\" tappeable>\n                        </div>\n                      </ion-col>\n                    </ion-row>\n                  </ion-grid>\n                </div>\n\n              </div>\n\n            </swiper-slide>\n\n        </swiper-container>\n\n      </div>\n\n    </ion-card-content>\n\n  </div>\n\n</div>","import { Component, OnInit, ViewChild, Input, Output, EventEmitter } from '@angular/core';\nimport { IonContent, IonicSlides, NavController, AlertController, ModalController } from '@ionic/angular';\nimport { WizardComponent } from '../../wizard/wizard.component';\nimport { Employee } from '../../../models/employee';\nimport { Branch } from '../../../models/branch';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { User } from '../../../models/user';\nimport { OutfitService } from '../../../services/outfit.service';\nimport { EmployeeService } from '../../../services/employee.service';\nimport { BranchService } from '../../../services/branch.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { CoreService } from '../../../services/core.service';\nimport { tap } from 'rxjs/operators';\nimport { Subscription } from 'rxjs';\nimport { ScreensizeService } from '../../../services/screensize.service';\nimport Swiper from 'swiper';\n\n@Component({\n  selector: 'rope-subscription-test',\n  templateUrl: './subscription-test.component.html',\n  styleUrls: ['./subscription-test.component.scss'],\n})\nexport class SubscriptionTestComponent implements OnInit {\n  \n  @Input() content: IonContent;\n  @Input() stepsArray: Array<any> = [];\n  @Input() jeansSizes;\n\n  @Input() storeName = 'KiBa';\n\n  @Output() onSelectEmployee = new EventEmitter();\n  @Output() onDone = new EventEmitter();\n\n  @ViewChild('wizard') wizard: WizardComponent;\n  @ViewChild('stylistSlides') stylistSlides: Swiper;\n\n  public ready = false;\n\n  public step: any;\n  public stepCondition: any;\n  public stepDefaultCondition: any;\n  public currentStep: any;\n  public employees: Array<Employee> = [];\n  public branches: Array<Branch> = [];\n  public compareBranches;\n\n  public personalForm: FormGroup;\n  public appointmentType = 'home';\n\n  public fromDate = new Date();\n  public monthLabels = ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'];\n  public dayLabels = ['Zo', 'Ma', 'Di', 'Wo', 'Do', 'Vr', 'Za'];\n  public itemSelectedStyle = '{ \\'background\\': \\'#222222\\', \\'color\\': \\'#F1F1F1 !important\\' }';\n\n  public user: User;\n  public selectedEmployee;\n\n  public stylistSlidesOptions = {\n    spaceBetween: 20,\n    pager: true,\n    loop: true,\n    initialSlide: 1,\n    freeMode: false\n  };\n  public swiperModules = [IonicSlides];\n\n  public evts;\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  constructor(\n    public navCtrl: NavController,\n    public alertCtrl: AlertController,\n    public outfitService: OutfitService,\n    public modalCtrl: ModalController,\n    public formBuilder: FormBuilder,\n    public employeeService: EmployeeService,\n    public branchService: BranchService,\n    public screensizeService: ScreensizeService,\n    public authService: AuthService,\n    public coreService: CoreService\n  ) {\n\n  }\n\n  ngOnInit() {\n\n    this.screensizeObserver = this.screensizeService.isDesktopView().subscribe(isDesktop => {\n      this.isDesktop = isDesktop;\n    });\n\n    this.evts = this.coreService.wizardEvent;\n\n    this.step = 1;\n    this.stepCondition = false;\n    this.stepDefaultCondition = this.stepCondition;\n\n    this.stepCondition = this.stepsArray[0].conditionRequired !== undefined ? !this.stepsArray[0].conditionRequired : this.stepDefaultCondition;\n    this.evts.subscribe(step => {\n\n      this.currentStep = step;\n      const stepObj = this.stepsArray[step - 1];\n\n      this.stepCondition = stepObj.conditionRequired !== undefined ? !stepObj.conditionRequired : this.stepDefaultCondition;\n      if (stepObj.choices) {\n        this.checkChoiceCondition(null, stepObj, undefined);\n      }\n\n    });\n\n    this.personalForm = this.formBuilder.group({\n      topSize: ['', [Validators.required]],\n      jeansSize: ['', [Validators.required]],\n      lengthSize: ['', [Validators.required]]\n    });\n\n    this.loadEmployees().subscribe(r => {\n      this.ready = true;\n    });\n\n  }\n\n  ngOnDestroy() {\n    if (this.screensizeObserver) {\n      this.screensizeObserver.unsubscribe();\n    }\n  }\n\n  public loadEmployees() {\n\n    return this.employeeService.getEmployees().pipe(tap(res => {\n      const employeeChoices = [];\n      for (const empl of res) {\n        employeeChoices.push({\n          title: empl.name,\n          id: empl.id,\n          timestamp_start: empl['timestamp_start'],\n          description: empl['description'],\n          img: empl.images[0].url,\n          date_of_birth: empl['date_of_birth']\n        });\n      }\n\n      this.employees = this.coreService.shuffleArray(employeeChoices);\n      for (const e of this.employees) {\n        this.employeeService.getEmployeePinterest(e.title.split(' ')[0].toLowerCase()).subscribe(r => {\n          const feed = [];\n          const rr = this.coreService.shuffleArray(r.slice(0, 9));\n          for (const f of rr) {\n            feed.push({\n              img: /<img.*?src=['\"](.*?)['\"]/.exec(f.description)[1],\n              link: f.link\n            });\n          }\n          e.feed = feed;\n        });\n      }\n\n    }));\n\n  }\n\n  public stepChange() {\n    this.content.scrollToTop();\n  }\n\n  public goNext() {\n    this.wizard.next();\n  }\n\n  public goSlideNext() {\n    this.stylistSlides.slideNext();\n  }\n\n  public goSlidePrev() {\n    this.stylistSlides.slidePrev();\n  }\n\n  public toggleCondition(_condition) {\n    this.stepCondition = _condition.detail.checked;\n  }\n\n  public async showInfo(choice) {\n    const alert = await this.alertCtrl.create({\n      header: choice.title,\n      message: choice.description,\n      buttons: ['OK']\n    });\n    await alert.present();\n  }\n\n  public selectRadio(step, choice) {\n    step.radioChecked = choice;\n  }\n\n  public checkChoiceCondition(event, step, choice) {\n\n    const type = event ? event.type : undefined;\n\n    if (choice === undefined && type === 'ionChange') {\n      choice = event.detail.value;\n      choice.isChecked = true;\n    }\n\n    if (type === 'ionSelect') {\n\n      for (const ch of step.choices) {\n        if (ch === choice) {\n          ch.isChecked = true;\n        } else {\n          ch.isChecked = false;\n        }\n      }\n\n    }\n\n    step.value = step.choices.filter(ch => ch.isChecked);\n\n    for (const ch of step.choices) {\n      if (ch.isChecked) {\n        this.stepCondition = true;\n        return;\n      }\n    }\n\n    this.stepCondition = false;\n\n  }\n\n  public selectPersonalStylist(event, step, empl) {\n    step.value = empl;\n    this.stepCondition = true;\n  }\n\n  public checkFormCondition(event, form, step) {\n    step.value = form.value;\n    this.stepCondition = form.valid;\n  }\n\n  public appointmentDateSelected(event, step) {\n    step.value = {\n      type: 'store',\n      date: event\n    };\n    this.stepCondition = true;\n  }\n\n  public appointmentTypeChanged(event, step) {\n    this.appointmentType = event.detail.value;\n  }\n\n  public getEmployeeAge(empl) {\n    const dateOfBirth = Date.parse(empl.date_of_birth);\n    const ageDifMs = Date.now() - dateOfBirth;\n    const ageDate = new Date(ageDifMs);\n    return Math.abs(ageDate.getUTCFullYear() - 1970);\n  }\n\n  public selectBranch(event: any) {\n  }\n\n  public async openSelectEmployee(step) {\n    this.onSelectEmployee.emit(step)\n  }\n\n  public doSelectEmployee(data, step) {\n    this.selectedEmployee = data.employee;\n    step.checked = true;\n    step.value = data.employee;\n    this.stepCondition = true;\n  }\n\n  public getEmployeeImage() {\n    const storeBucketName = this.coreService.store.store_bucket_name;\n    return 'https://storage.googleapis.com/' + storeBucketName +'-bucket/image/employee/' + this.selectedEmployee.id + '.jpg';\n  }\n\n  public async finalizeRequest() {\n\n    const personalStylistRequest: any = {};\n    personalStylistRequest.questions = [];\n\n    for (const step of this.stepsArray) {\n\n      if (step.isQuestion === true) {\n        personalStylistRequest.questions.push({\n          choices: step.choices,\n          choiceSelected: step.choices.filter(ch => ch.isChecked)\n        });\n      }\n\n      if (step.custom && step.custom === 'stylist') {\n        personalStylistRequest.employee_id = step.value;\n      }\n\n    }\n\n    personalStylistRequest.sizes = [\n      {\n        name: 'Tops maat',\n        value: this.personalForm.get('topSize').value\n      },\n      {\n        name: 'Jeans maat',\n        value: this.personalForm.get('jeansSize').value\n      },\n      {\n        name: 'Lengte',\n        value: this.personalForm.get('lengthSize').value\n      }\n    ]\n    this.user = this.authService.getCurrentUser();\n\n    // Update user details\n    this.authService.updateUserForSubscription(this.user, personalStylistRequest, personalStylistRequest.employee_id.id).subscribe(r => {\n      this.coreService.newSubscriptionDetails.next(true);\n      this.onDone.emit();\n    }, error => {\n      console.error(error);\n    });\n\n  }\n\n}\n","<app-wizard \n  *ngIf=\"ready\" \n  [(step)]=\"step\" \n  [showSteps]=\"true\" \n  (finish)=\"finalizeRequest()\" \n  (stepChange)=\"stepChange()\"\n  [finishIcon]=\"'checkmark-done-outline'\" \n  [stepCondition]=\"stepCondition\" \n  #wizard\n>\n\n  <div class=\"blocks\" [ngClass]=\"isDesktop ? 'boundary' : ''\">\n\n    <app-wizard-step *ngFor=\"let step of stepsArray; let i=index;\" class=\"wizard\">\n\n      <div *ngIf=\"step.img\" class=\"plain-section-image stylist-header\"\n        [ngStyle]=\"{'background-image': 'url(' + step.img + ')'}\" style=\"background-size: cover; background-position: center;\" [ngClass]=\"step.imgClass\"></div>\n      <div class=\"block\">\n\n        <ion-card-header>\n          <ion-card-title>{{ step.title }}</ion-card-title>\n        </ion-card-header>\n\n        <ion-card-content>\n\n          <div [innerHTML]=\"step.content\"></div>\n\n          <ion-button *ngIf=\"i === 0\" (click)=\"goNext()\" expand=\"full\" color=\"secondary\">STARTEN</ion-button>\n\n          <ng-container *ngIf=\"step.choices\">\n\n            <ng-container *ngIf=\"step.conditionType === 'single'\">\n\n              <ion-radio-group [(ngModel)]=\"step.radioChecked\"\n                (ionChange)=\"checkChoiceCondition($event, step, undefined)\">\n                <ion-grid>\n                  <ion-row>\n                    <ion-col *ngFor=\"let choice of step.choices\" [size]=\"step.choicesLayout\">\n                      <div class=\"choice\">\n                        <div *ngIf=\"choice.img\" class=\"choice-bg\"\n                          [ngStyle]=\"{'background-image': 'url(' + choice.img + ')'}\"\n                          (click)=\"selectRadio(step, choice)\"></div>\n                        <div *ngIf=\"choice.color\" class=\"choice-bg\" [ngStyle]=\"{'background-color': choice.color}\"\n                          (click)=\"selectRadio(step, choice)\"></div>\n                        <ion-item lines=\"none\">\n                          <ion-label>\n                            <p class=\"force-color ion-text-wrap choice-text\">{{ choice.title }}</p>\n                          </ion-label>\n                          <ion-radio slot=\"end\" color=\"secondary\" [value]=\"choice\"></ion-radio>\n                        </ion-item>\n                      </div>\n                    </ion-col>\n                  </ion-row>\n                </ion-grid>\n              </ion-radio-group>\n\n            </ng-container>\n\n            <ng-container *ngIf=\"step.conditionType === 'multiple'\">\n              <ion-grid>\n                <ion-row>\n                  <ion-col *ngFor=\"let choice of step.choices\" [size]=\"step.choicesLayout\">\n                    <div class=\"choice\">\n                      <div *ngIf=\"choice.img\" class=\"choice-bg\"\n                        [ngStyle]=\"{'background-image': 'url(' + choice.img + ')'}\"\n                        (click)=\"choice.isChecked = !choice.isChecked\"></div>\n                      <div *ngIf=\"choice.color\" class=\"choice-bg\" [ngStyle]=\"{'background-color': choice.color}\"\n                        (click)=\"choice.isChecked = !choice.isChecked\"></div>\n                      <ion-item lines=\"none\">\n                        <ion-label>\n                          <p text-wrap text-left (click)=\"choice.isChecked = !choice.isChecked\" class=\"choice-text\">\n                            {{ choice.title }}</p>\n                        </ion-label>\n                        <ion-checkbox slot=\"end\" color=\"secondary\" [(ngModel)]=\"choice.isChecked\"\n                          (ionChange)=\"checkChoiceCondition($event, step, choice)\"></ion-checkbox>\n                      </ion-item>\n                    </div>\n                  </ion-col>\n                </ion-row>\n              </ion-grid>\n            </ng-container>\n\n          </ng-container>\n\n          <ng-container *ngIf=\"step.custom && step.custom === 'personal'\">\n\n            <form [formGroup]=\"personalForm\">\n\n              <ion-item>\n                <ion-label position=\"stacked\" class=\"force-stacked-label\">Tops maat</ion-label>\n                <ion-select formControlName=\"topSize\" (ionChange)=\"checkFormCondition($event, personalForm, step)\">\n                  <ion-select-option value=\"XS\">XS</ion-select-option>\n                  <ion-select-option value=\"S\">S</ion-select-option>\n                  <ion-select-option value=\"M\">M</ion-select-option>\n                  <ion-select-option value=\"L\">L</ion-select-option>\n                  <ion-select-option value=\"XL\">XL</ion-select-option>\n                  <ion-select-option value=\"XXL\">XXL</ion-select-option>\n                </ion-select>\n              </ion-item>\n\n              <ion-item>\n                <ion-label position=\"stacked\" class=\"force-stacked-label\">Jeans maat</ion-label>\n                <ion-select formControlName=\"jeansSize\" (ionChange)=\"checkFormCondition($event, personalForm, step)\">\n                  <ng-container *ngIf=\"!jeansSizes\">\n                    <ion-select-option value=\"34\">34</ion-select-option>\n                    <ion-select-option value=\"36\">36</ion-select-option>\n                    <ion-select-option value=\"38\">38</ion-select-option>\n                    <ion-select-option value=\"40\">40</ion-select-option>\n                    <ion-select-option value=\"42\">42</ion-select-option>\n                    <ion-select-option value=\"44\">44</ion-select-option>\n                  </ng-container>\n                  <ng-container *ngIf=\"jeansSizes\">\n                    <ng-container *ngFor=\"let s of jeansSizes\">\n                      <ion-select-option [value]=\"s\">{{ s }}</ion-select-option>\n                    </ng-container>\n                  </ng-container>\n                </ion-select>\n              </ion-item>\n\n              <ion-item>\n                <ion-label position=\"stacked\" class=\"force-stacked-label\">Lengte</ion-label>\n                <ion-select formControlName=\"lengthSize\" (ionChange)=\"checkFormCondition($event, personalForm, step)\">\n                  <ion-select-option value=\"Kleine dan 160cm\">Kleiner dan 160cm</ion-select-option>\n                  <ion-select-option value=\"160 - 165 cm\">160 - 165 cm</ion-select-option>\n                  <ion-select-option value=\"165 - 170 cm\">165 - 170 cm</ion-select-option>\n                  <ion-select-option value=\"170 - 175 cm\">170 - 175 cm</ion-select-option>\n                  <ion-select-option value=\"175 - 180 cm\">175 - 180 cm</ion-select-option>\n                  <ion-select-option value=\"180 - 185 cm\">180 - 185 cm</ion-select-option>\n                  <ion-select-option value=\"185 - 190 cm\">185 - 190 cm</ion-select-option>\n                  <ion-select-option value=\"Groter dan 190 cm\">Groter dan 190 cm</ion-select-option>\n                </ion-select>\n              </ion-item>\n\n            </form>\n\n          </ng-container>\n\n          <ng-container *ngIf=\"step.custom && step.custom === 'stylist'\">\n\n            <br>\n            <ng-container *ngIf=\"step.checked\">\n              <ion-item>\n                <ion-avatar slot=\"start\">\n                  <img [src]=\"getEmployeeImage()\">\n                </ion-avatar>\n                <ion-label>\n                  <h2>{{ selectedEmployee.title }}</h2>\n                  <p class=\"ion-text-wrap\">Werkzaam bij {{ storeName }} sinds:\n                    {{ selectedEmployee.timestamp_start | date:'mediumDate' }}</p>\n                </ion-label>\n              </ion-item>\n            </ng-container>\n\n            <ng-container *ngIf=\"!step.checked\">\n              <ion-button expand=\"block\" (click)=\"openSelectEmployee(step)\">\n                Selecteer een personal shopper\n              </ion-button>\n            </ng-container>\n\n          </ng-container>\n\n        </ion-card-content>\n\n      </div>\n\n    </app-wizard-step>\n\n  </div>\n\n</app-wizard>\n","import { Component, OnInit, Output, EventEmitter, Input, SimpleChanges } from '@angular/core';\nimport { User } from '../../../models/user';\nimport { FormGroup, FormBuilder, Validators, FormControl } from '@angular/forms';\nimport { ModalController, LoadingController, AlertController } from '@ionic/angular';\nimport { AuthService } from '../../../services/auth.service';\nimport { OrderService } from '../../../services/order.service';\nimport { ReservationService } from '../../../services/reservation.service';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { CartService } from '../../../services/cart.service';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { lastValueFrom } from 'rxjs';\n\n@Component({\n  selector: 'rope-user-address-details',\n  templateUrl: './user-address-details.component.html',\n  styleUrls: ['./user-address-details.component.scss'],\n})\nexport class UserAddressDetailsComponent implements OnInit {\n\n  @Input() public isCartCheckout = false;\n  @Input() public user;\n\n  @Output() userChange = new EventEmitter<User>();\n  @Output() onDismiss = new EventEmitter();\n  @Output() modalAutocomplete = new EventEmitter();\n\n  public detailType: string;\n\n  public userAddressForm: FormGroup = undefined;\n  public statusAddressCheck: any = { message: 'Wachten op postcode en huisnummer...', status: 'warning' };\n\n  public manualEdit = false;\n\n  public sessionId;\n\n  // FOR BELGIUM ADDRESSES\n  public belgiumStep1 = false;\n  public belgiumStep2 = false;\n  public belgiumStep3 = false;\n\n  public belgiumNisCode;\n  public belgiumStreetId;\n  public belgiumPostalCode;\n  public belgiumLanguage;\n\n  constructor(\n    public formBuilder: FormBuilder,\n    public modalCtrl: ModalController,\n    public loadingCtrl: LoadingController,\n    public authService: AuthService,\n    public alertCtrl: AlertController,\n    public orderService: OrderService,\n    public reservationService: ReservationService,\n    public sanitizer: DomSanitizer,\n    public cartService: CartService\n  ) { }\n\n  ngOnInit() {\n    if (!this.user) {\n      this.user = this.authService.getCurrentUser();\n    } else {\n      if (!this.user.country_code) {\n        this.user.country_code = 'NL';\n      }\n    }\n    this.sessionId = btoa(Math.random().toString()).substr(10, 10);\n    this.initAddress();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.user) {\n      this.initAddress();\n    }\n  }\n\n  public initAddress() {\n\n    const houseNumberTotal = this.user.house_number + (this.user.house_number_extension ? (' ' + this.user.house_number_extension) : '');\n\n    this.userAddressForm = this.formBuilder.group({\n      country: [this.user.country_code, Validators.required],\n      postal_code: [this.user.postal_code, Validators.required],\n      house_number: [this.user.house_number, Validators.required],\n      house_number_extension: [this.user.house_number_extension],\n      house_number_total: [houseNumberTotal],\n      street: [this.user.street, [Validators.required, Validators.minLength(1)]],\n      city: [this.user.city, [Validators.required, Validators.minLength(1)]]\n    });\n\n    const countryControl: FormControl = <FormControl>this.userAddressForm.controls['country'];\n    countryControl.valueChanges.pipe(debounceTime(400), distinctUntilChanged()).subscribe(newVal => this.updateAddress());\n\n    const postalCodeControl: FormControl = <FormControl>this.userAddressForm.controls['postal_code'];\n    postalCodeControl.valueChanges.pipe(debounceTime(400), distinctUntilChanged()).subscribe(newVal => this.updateAddress());\n\n    const houseNumberControl: FormControl = <FormControl>this.userAddressForm.controls['house_number'];\n    houseNumberControl.valueChanges.pipe(debounceTime(400), distinctUntilChanged()).subscribe(newVal => this.updateAddress());\n\n    const houseNumberExtControl: FormControl = <FormControl>this.userAddressForm.controls['house_number_extension'];\n    houseNumberExtControl.valueChanges.pipe(debounceTime(400), distinctUntilChanged()).subscribe(newVal => this.updateAddress());\n\n    this.updateAddress();\n\n  }\n\n  public triggerUserChange() {\n    this.user.postal_code = String(this.userAddressForm.get('postal_code').value);\n    this.user.house_number = this.userAddressForm.get('house_number').value;\n    this.user.house_number_extension = this.userAddressForm.get('house_number_extension').value;\n    this.user.street = this.userAddressForm.get('street').value;\n    this.user.city = this.userAddressForm.get('city').value;\n    this.user.country_code = this.userAddressForm.get('country').value;\n    this.userChange.emit(this.user);\n  }\n\n  public getCountry() {\n    return this.userAddressForm.get('country').value;\n  }\n\n  public changeCountry(event: any) {\n    if (event.detail.value === 'BE') {\n\n      const postalCodeControl = this.userAddressForm.get('postal_code');\n      postalCodeControl.setValue('');\n\n      const streetControl = this.userAddressForm.get('street');\n      streetControl.setValue('');\n\n      const cityControl = this.userAddressForm.get('city');\n      cityControl.setValue('');\n\n      const houseNumberTotalControl = this.userAddressForm.get('house_number');\n      houseNumberTotalControl.setValue('');\n\n      const houseNumberExtControl = this.userAddressForm.get('house_number_extension');\n      houseNumberExtControl.setValue('');\n\n      if (this.userAddressForm.valid) {\n        this.statusAddressCheck.message = 'Adresgegevens gevalideerd';\n        this.statusAddressCheck.status = 'success';\n      } else {\n        this.statusAddressCheck.message = 'Adresgegevens nog incompleet...';\n        this.statusAddressCheck.status = 'warning';\n      }\n    }\n    this.triggerUserChange();\n  }\n\n  public async openAddressChooser(type: string) {\n\n    if (this.userAddressForm.valid) {\n\n      this.userAddressForm.get('city').setValue('');\n      this.userAddressForm.get('street').setValue('');\n      this.userAddressForm.get('postal_code').setValue('');\n      this.userAddressForm.get('house_number').setValue('');\n      this.userAddressForm.get('house_number_extension').setValue('');\n      this.userAddressForm.get('house_number_total').setValue('');\n\n      this.statusAddressCheck.message = 'Adresgegevens nog incompleet...';\n      this.statusAddressCheck.status = 'warning';\n    }\n\n    let props;\n    if (type === 'total_address') {\n\n      props = {\n        title: 'Kies je adres',\n        placeholder: 'Voer je adres in...',\n        observable: this.authService.getTotalAddressBe,\n        obj: {\n          country: 'BE',\n          address_context: 'bel',\n          session_id: this.sessionId\n        },\n        searchField: 'address_query',\n        template: ['description', 'label'],\n        doResearch: true,\n        researchField: 'value',\n        researchUntil: {\n          key: 'precision',\n          value: 'Address'\n        }\n      };\n\n    } else if (type === 'postal_area') {\n\n      props = {\n        title: 'Kies je woonplaats',\n        placeholder: 'Voer je postcode of woonplaats in...',\n        observable: this.authService.getAddressBe,\n        obj: {\n          country: 'BE',\n        },\n        searchField: 'postal_code',\n        template: ['parsedMunicipalityNisCode', 'municipalityName']\n      };\n\n    } else if (type === 'street') {\n\n      props = {\n        title: 'Kies je straat',\n        placeholder: 'Voer je straatnaam in...',\n        observable: this.authService.getStreetBe,\n        obj: {\n          country: 'BE',\n          nis_code: this.belgiumNisCode\n        },\n        searchField: 'street',\n        template: ['municipalityName', 'streetName', 'houseNumberRange']\n      };\n\n    } else if (type === 'house_number') {\n\n      props = {\n        title: 'Kies je huisnummer',\n        placeholder: 'Voer je huisnummer in...',\n        observable: this.authService.getHousenumberBe,\n        obj: {\n          country: 'BE',\n          nis_code: this.belgiumNisCode,\n          street_id: this.belgiumStreetId,\n          language: this.belgiumLanguage,\n          postal_code: this.belgiumPostalCode\n        },\n        searchField: 'house_number',\n        template: ['', 'houseNumber']\n      };\n\n    }\n\n    this.modalAutocomplete.emit({\n      componentProps: props,\n      type: type\n    });\n\n  }\n\n  public async parseAutocompleteResponse(type, d) {\n\n    if (d && d.data && d.data.result) {\n\n      if (type === 'total_address') {\n\n        const obj = {\n          session_id: this.sessionId,\n          context: d.data.result.context,\n          country: \"BE\"\n        };\n        const r = await lastValueFrom(this.authService.getAddressDetailsBe(obj));\n        this.userAddressForm.get('city').setValue(r.address.locality);\n        this.userAddressForm.get('street').setValue(r.address.street);\n        this.userAddressForm.get('postal_code').setValue(r.address.postcode);\n        this.userAddressForm.get('house_number').setValue(r.address.buildingNumber);\n        this.userAddressForm.get('house_number_extension').setValue(r.address.buildingNumberAddition);\n\n      } else if (type === 'postal_area') {\n\n        this.belgiumStep1 = true;\n        this.belgiumNisCode = d.data.result.municipalityNisCode;\n        this.userAddressForm.get('city').setValue(d.data['result'].municipalityName);\n\n      } else if (type === 'street') {\n\n        this.belgiumStep2 = true;\n        this.belgiumStreetId = d.data.result.streetId;\n        this.belgiumPostalCode = d.data.result.postcode;\n        this.belgiumLanguage = d.data.result.language;\n        this.userAddressForm.get('street').setValue(d.data['result'].streetName);\n        this.userAddressForm.get('postal_code').setValue(d.data['result'].postcode);\n\n      } else if (type === 'house_number') {\n\n        this.belgiumStep3 = true;\n        this.userAddressForm.get('house_number_total').setValue(d.data['result'].houseNumber);\n        this.userAddressForm.get('house_number').setValue(d.data['result'].number);\n\n        const regexp = new RegExp(d.data['result'].number);\n        this.userAddressForm.get('house_number_extension').setValue(d.data['result'].houseNumber.toString().replace(regexp, \"\").trim());\n\n      }\n\n      if (this.userAddressForm.valid) {\n        this.statusAddressCheck.message = 'Adresgegevens gevalideerd';\n        this.statusAddressCheck.status = 'success';\n      }\n\n    }\n\n  }\n\n  public updateAddress() {\n\n    const country = this.userAddressForm.get('country').value;\n    const postalCode = this.userAddressForm.get('postal_code').value;\n    const houseNumber = this.userAddressForm.get('house_number').value;\n    const houseNumberExtension = this.userAddressForm.get('house_number_extension').value;\n\n    const streetControl = this.userAddressForm.get('street');\n    const cityControl = this.userAddressForm.get('city');\n    const houseNumberControl = this.userAddressForm.get('house_number');\n    const houseNumberExtensionControl = this.userAddressForm.get('house_number_extension');\n\n    if (!postalCode || !houseNumber) {\n      return;\n    }\n\n    if (postalCode && ((country === 'NL' && postalCode.length < 6) || (country === 'BE' && postalCode.length < 4))) {\n\n      streetControl.setValue('');\n      cityControl.setValue('');\n\n      this.statusAddressCheck.message = 'Wachten op postcode en huisnummer...';\n      this.statusAddressCheck.status = 'warning';\n\n      return;\n    }\n\n\n    if (country === 'BE') {\n\n      if (this.userAddressForm.valid) {\n        this.statusAddressCheck.message = 'Adresgegevens gevalideerd';\n        this.statusAddressCheck.status = 'success';\n      } else {\n        this.statusAddressCheck.message = 'Adresgegevens nog incompleet...';\n        this.statusAddressCheck.status = 'warning';\n      }\n\n      return;\n\n    }\n\n    const obj = {\n      postal_code: postalCode.replace(' ', ''),\n      house_number: houseNumber,\n      house_number_extension: houseNumberExtension === '' ? undefined : houseNumberExtension,\n      country: country\n    };\n    this.authService.getAddress(obj).subscribe(i => {\n      if (i.exception) {\n        streetControl.setValue('');\n        cityControl.setValue('');\n\n        this.statusAddressCheck.message = 'Niet gevonden. Controleer de gegevens a.u.b.';\n        this.statusAddressCheck.status = 'danger';\n      } else {\n        streetControl.setValue(i.street);\n        cityControl.setValue(i.city);\n        houseNumberControl.setValue(i.houseNumber);\n        houseNumberExtensionControl.setValue(i.houseNumberAddition);\n\n        this.statusAddressCheck.message = 'Straat en woonplaats gevalideerd';\n        this.statusAddressCheck.status = 'success';\n      }\n    });\n\n  }\n\n  public checkForms() {\n    const addressValid = (this.userAddressForm && this.userAddressForm.valid) || !this.userAddressForm;\n    return !addressValid;\n  }\n\n  public saveUser() {\n\n    if (this.checkForms()) {\n      return;\n    }\n\n    this.user.postal_code = String(this.userAddressForm.get('postal_code').value);\n    this.user.house_number = this.userAddressForm.get('house_number').value;\n    this.user.house_number_extension = this.userAddressForm.get('house_number_extension').value;\n    this.user.street = this.userAddressForm.get('street').value;\n    this.user.city = this.userAddressForm.get('city').value;\n    this.user.country_code = this.userAddressForm.get('country').value;\n\n    this.authService.updateUser(this.user).subscribe(res => {\n\n      this.authService.storeUser(this.user);\n\n      const address = [];\n      address['street'] = this.user.street;\n      address['house_number'] = this.user.house_number;\n      address['house_number_extension'] = this.user.house_number_extension;\n      address['postal_code'] = this.user.postal_code;\n      address['city'] = this.user.city;\n      this.cartService.setAddress(address, false);\n\n      this.onDismiss.emit({ status: 1 });\n\n    });\n  }\n\n  public async showSuccess() {\n    const alert = await this.alertCtrl.create({\n      header: 'Gegevens opgeslagen',\n      message: 'De gegevens zijn succesvol opgeslagen.',\n      buttons: [\n        {\n          text: 'Oke',\n          role: 'cancel'\n        },\n      ]\n    });\n    return await alert.present();\n  }\n\n  public manualEditAddress() {\n    this.manualEdit = true;\n  }\n\n}\n","<form novalidate [formGroup]=\"userAddressForm\">\n  <ion-item>\n    <ion-label color=\"secondary\" class=\"force-stacked-label r-h2\" position=\"stacked\">Land</ion-label>\n    <ion-select class=\"r-h2 r-privacy-field\" formControlName=\"country\" (ionChange)=\"changeCountry($event)\">\n      <ion-select-option class=\"r-h2\" value=\"NL\">Nederland</ion-select-option>\n      <ion-select-option class=\"r-h2\" value=\"BE\">België</ion-select-option>\n    </ion-select>\n  </ion-item>\n\n  <ng-container *ngIf=\"getCountry() === 'NL'\">\n    <ion-item>\n      <ion-label color=\"secondary\" class=\"force-stacked-label r-h2\" position=\"stacked\">Postcode</ion-label>\n      <ion-input class=\"r-h2 r-privacy-field\" type=\"text\" autocomplete=\"postal-code\" formControlName=\"postal_code\" (ionChange)=\"triggerUserChange()\" debounce=300></ion-input>\n    </ion-item>\n    <ion-item>\n      <ion-label color=\"secondary\" class=\"force-stacked-label r-h2\" position=\"stacked\">Huisnummer</ion-label>\n      <ion-input class=\"r-h2 r-privacy-field\" type=\"tel\" formControlName=\"house_number\" (ionChange)=\"triggerUserChange()\" debounce=300></ion-input>\n    </ion-item>\n    <ion-item>\n      <ion-label color=\"secondary\" class=\"force-stacked-label r-h2\" position=\"stacked\">Huisnummer toevoeging</ion-label>\n      <ion-input class=\"r-h2 r-privacy-field\" type=\"text\" formControlName=\"house_number_extension\" (ionChange)=\"triggerUserChange()\" debounce=300></ion-input>\n    </ion-item>\n    <ion-item>\n      <ion-label color=\"secondary\" class=\"force-stacked-label r-h2\" position=\"stacked\">Straat</ion-label>\n      <ion-input class=\"r-h2 r-privacy-field\" type=\"text\" formControlName=\"street\" [readonly]=\"!manualEdit\" (ionChange)=\"triggerUserChange()\" debounce=300></ion-input>\n      <ion-icon [name]=\"manualEdit ? 'lock-open-outline' : 'lock-closed'\" slot=\"end\" style=\"margin-top: 20px;\">\n      </ion-icon>\n    </ion-item>\n    <ion-item>\n      <ion-label color=\"secondary\" class=\"force-stacked-label r-h2\" position=\"stacked\">Woonplaats</ion-label>\n      <ion-input class=\"r-h2 r-privacy-field\" type=\"text\" formControlName=\"city\" [readonly]=\"!manualEdit\" (ionChange)=\"triggerUserChange()\" debounce=300></ion-input>\n      <ion-icon [name]=\"manualEdit ? 'lock-open-outline' : 'lock-closed'\" slot=\"end\" style=\"margin-top: 20px;\">\n      </ion-icon>\n    </ion-item>\n    <ion-item>\n      <ion-label color=\"secondary\" class=\"force-stacked-label r-h2\" position=\"stacked\">Status van adrescheck</ion-label>\n      <ion-input class=\"r-h2 r-privacy-field\" text-left text-wrap type=\"text\" readonly [color]=\"statusAddressCheck.status\"\n        [value]=\"statusAddressCheck.message\"></ion-input>\n    </ion-item>\n  </ng-container>\n\n  <ng-container *ngIf=\"getCountry() === 'BE'\">\n\n    <ion-item>\n      <ion-label color=\"secondary\" class=\"force-stacked-label r-h2\" position=\"stacked\">Postcode</ion-label>\n      <ion-input type=\"text\" class=\"r-privacy-field\" formControlName=\"postal_code\" [readonly]=\"!manualEdit\"></ion-input>\n      <ion-button color=\"secondary\" shape=\"round\" fill=\"outline\" slot=\"end\" (click)=\"openAddressChooser('total_address')\">\n        Zoek adres\n        <ion-icon slot=\"end\" name=\"arrow-forward\"></ion-icon>\n      </ion-button>\n    </ion-item>\n    <ion-item>\n      <ion-label color=\"secondary\" class=\"force-stacked-label r-h2\" position=\"stacked\">Straat</ion-label>\n      <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" formControlName=\"street\" [readonly]=\"!manualEdit\" (ionChange)=\"triggerUserChange()\" debounce=300></ion-input>\n    </ion-item>\n    <ion-item>\n      <ion-label color=\"secondary\" class=\"force-stacked-label r-h2\" position=\"stacked\">Huisnummer</ion-label>\n      <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" formControlName=\"house_number\" [readonly]=\"!manualEdit\" (ionChange)=\"triggerUserChange()\" debounce=300></ion-input>\n    </ion-item>\n    <ion-item>\n      <ion-label color=\"secondary\" class=\"force-stacked-label r-h2\" position=\"stacked\">Huisnummer toevoeging</ion-label>\n      <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" formControlName=\"house_number_extension\" [readonly]=\"!manualEdit\" (ionChange)=\"triggerUserChange()\" debounce=300></ion-input>\n    </ion-item>\n    <ion-item>\n      <ion-label color=\"secondary\" class=\"force-stacked-label r-h2\" position=\"stacked\">Woonplaats</ion-label>\n      <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" formControlName=\"city\" [readonly]=\"!manualEdit\" (ionChange)=\"triggerUserChange()\" debounce=300></ion-input>\n    </ion-item>\n    <ion-item>\n      <ion-label color=\"secondary\" class=\"force-stacked-label r-h2\" position=\"stacked\">Status van adrescheck</ion-label>\n      <ion-input text-left text-wrap type=\"text\" class=\"r-h2 r-privacy-field\" readonly [color]=\"statusAddressCheck.status\"\n        [value]=\"statusAddressCheck.message\"></ion-input>\n    </ion-item>\n  </ng-container>\n\n  <br>\n\n  <ion-item text-center lines=\"none\" *ngIf=\"getCountry() === 'NL'\">\n    <ion-note text-center class=\"address-note\">\n      De adresgegevens worden automatisch aangevuld op basis van je postcode en huisnummer.\n    </ion-note>\n  </ion-item>\n\n  <ion-item text-center lines=\"none\" *ngIf=\"getCountry() === 'BE'\">\n    <ion-note text-center class=\"address-note\">\n      De adresgegevens worden automatisch aangevuld bij het invullen.\n    </ion-note>\n  </ion-item>\n\n</form>\n\n<ion-button *ngIf=\"!isCartCheckout\" (click)=\"saveUser()\" [disabled]=\"checkForms()\" color=\"secondary\" expand=\"block\">Opslaan</ion-button>\n\n<ion-accordion-group>\n\n  <ion-accordion>\n\n    <ion-item slot=\"header\">\n      <ion-label>\n        <div class=\"r-h3\">Klopt het automatisch ingevulde adres niet?</div>\n      </ion-label>\n    </ion-item>\n\n    <ion-list slot=\"content\" style=\"background-color: #f2f2f2;\">\n\n      <ion-item lines=\"none\" class=\"ion-text-center\" style=\"margin-top: 10px; --background: #f2f2f2;\">\n        <ion-note class=\"address-note ion-text-center\">\n          Worden je gegevens niet gevonden op basis van je postcode en huisnummer? Klik dan op 'Handmatig adres\n          aanpassen'. Let op: handmatig een adres aanpassen wordt niet aangeraden, het automatisch aanvullen zou ten alle\n          tijden\n          moeten werken.\n          <ion-button style=\"margin-top: 15px;\" (click)=\"manualEditAddress()\" color=\"secondary\" expand=\"block\" fill=\"outline\" size=\"small\">\n            <ion-icon name=\"create\" slot=\"start\"></ion-icon>\n            Handmatig adres aanpassen\n          </ion-button>\n\n        </ion-note>\n      </ion-item>\n\n    </ion-list>\n\n  </ion-accordion>\n\n</ion-accordion-group>\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';\nimport { FormGroup, Validators, FormBuilder } from '@angular/forms';\nimport { AuthService } from '../../../services/auth.service';\nimport { AlertController } from '@ionic/angular';\nimport { User } from '../../../models/user';\n\n@Component({\n  selector: 'rope-user-basic-details',\n  templateUrl: './user-basic-details.component.html',\n  styleUrls: ['./user-basic-details.component.scss'],\n})\nexport class UserBasicDetailsComponent implements OnInit {\n\n  @Input() public isCartCheckout = false;\n  @Input() public user;\n\n  @Output() userChange = new EventEmitter<User>();\n\n  public userGeneralForm: FormGroup = undefined;\n\n  constructor(\n    private formBuilder: FormBuilder,\n    private authService: AuthService,\n    public alertCtrl: AlertController\n  ) { }\n\n  ngOnInit() {\n    if (!this.user) {\n      this.user = this.authService.getCurrentUser();\n    }\n    this.initGeneral();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.user) {\n      this.initGeneral();\n    }\n  }\n\n  public initGeneral() {\n\n    this.userGeneralForm = this.formBuilder.group({\n      customer_id: [{ value: this.user.id, disabled: true }, Validators.required],\n      username: [{ value: this.user.email, disabled: !this.isCartCheckout }, Validators.required],\n      first_name: [this.user.first_name, Validators.required],\n      last_name: [this.user.last_name, Validators.required],\n      telephone_number: [this.user.telephone_number, Validators.required]\n    });\n\n  }\n\n  public triggerUserChange() {\n    this.user.username = this.userGeneralForm.get('username').value;\n    this.user.email = this.user.username;\n    this.user.first_name = this.userGeneralForm.get('first_name').value;\n    this.user.last_name = this.userGeneralForm.get('last_name').value;\n    this.user.telephone_number = this.userGeneralForm.get('telephone_number').value;\n    this.userChange.emit(this.user);\n  }\n\n  public checkForms() {\n    const generalValid = (this.userGeneralForm && this.userGeneralForm.valid) || !this.userGeneralForm;\n    return !generalValid;\n  }\n\n  public saveUser() {\n\n    if (this.checkForms()) {\n      return;\n    }\n\n    this.user.username = this.userGeneralForm.get('username').value;\n    this.user.email = this.user.username;\n    this.user.first_name = this.userGeneralForm.get('first_name').value;\n    this.user.last_name = this.userGeneralForm.get('last_name').value;\n    this.user.telephone_number = this.userGeneralForm.get('telephone_number').value;\n\n    this.authService.updateUser(this.user).subscribe(res => {\n      this.authService.storeUser(this.user);\n      this.showSuccess();\n    });\n  }\n\n  public async showSuccess() {\n    const alert = await this.alertCtrl.create({\n      header: 'Gegevens opgeslagen',\n      message: 'De gegevens zijn succesvol opgeslagen.',\n      buttons: [\n        {\n          text: 'Oke',\n          role: 'cancel'\n        },\n      ]\n    });\n    return await alert.present();\n  }\n\n}\n","<form novalidate [formGroup]=\"userGeneralForm\">\n\n  <ion-item *ngIf=\"!isCartCheckout\">\n    <ion-label color=\"secondary\" class=\"r-h2\" position=\"stacked\">Klantnummer</ion-label>\n    <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" formControlName=\"customer_id\"></ion-input>\n  </ion-item>\n  <ion-item>\n    <ion-label color=\"secondary\" class=\"r-h2\" position=\"stacked\">E-mailadres</ion-label>\n    <ion-input type=\"email\" class=\"r-h2 r-privacy-field\" autocomplete=\"email\" formControlName=\"username\" (ionChange)=\"triggerUserChange()\" debounce=300></ion-input>\n  </ion-item>\n  <ion-item>\n    <ion-label color=\"secondary\" position=\"stacked\" class=\"force-stacked-label r-h2\">Voornaam</ion-label>\n    <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" autocomplete=\"given-name\" formControlName=\"first_name\" (ionChange)=\"triggerUserChange()\" debounce=300></ion-input>\n  </ion-item>\n  <ion-item>\n    <ion-label color=\"secondary\" position=\"stacked\" class=\"force-stacked-label r-h2\">Achternaam</ion-label>\n    <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" autocomplete=\"family-name\" formControlName=\"last_name\" (ionChange)=\"triggerUserChange()\" debounce=300></ion-input>\n  </ion-item>\n  <ion-item>\n    <ion-label color=\"secondary\" position=\"stacked\" class=\"force-stacked-label r-h2\">Telefoonnummer</ion-label>\n    <ion-input type=\"tel\" class=\"r-h2 r-privacy-field\" autocomplete=\"tel\" formControlName=\"telephone_number\" (ionChange)=\"triggerUserChange()\" debounce=300></ion-input>\n  </ion-item>\n\n  <br>\n\n  <ion-item text-center lines=\"none\">\n    <ion-note text-center class=\"address-note\">\n      Je persoonlijke gegevens worden enkel gebruikt voor een goede afwerking van je bestelling, en niet voor marketing doeleinden.\n    </ion-note>\n  </ion-item>\n\n</form>\n\n<ion-button *ngIf=\"!isCartCheckout\" (click)=\"saveUser()\" [disabled]=\"checkForms()\" color=\"secondary\" expand=\"block\">Opslaan</ion-button>","import { Component, Input, OnInit } from '@angular/core';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ModalController } from '@ionic/angular';\nimport { VgApiService } from '@videogular/ngx-videogular/core';\nimport { lastValueFrom } from 'rxjs';\nimport { OutfitService } from '../../../services/outfit.service';\nimport { StorageService } from '../../../services/storage.service';\n\n@Component({\n  selector: 'rope-story-viewer',\n  templateUrl: './story-viewer.component.html',\n  styleUrls: ['./story-viewer.component.scss']\n})\nexport class StoryViewerComponent implements OnInit {\n\n  @Input() public outfitId;\n\n  @Input() public previousOutfitIds = [];\n  @Input() public nextOutfitIds = [];\n\n  public outfit;\n  public videos;\n\n  public activeIndex = 0;\n  public currentVideo;\n  public storiesViewedNow = [];\n\n  public data: VgApiService;\n\n  constructor(\n    public modalCtrl: ModalController,\n    public outfitService: OutfitService,\n    public sanitizer: DomSanitizer,\n    public storageService: StorageService\n  ) { }\n\n  async ngOnInit() {\n    this.load();\n  }\n\n  public async load() {\n\n    this.activeIndex = 0;\n    this.outfit = undefined;\n    this.videos = undefined;\n    this.currentVideo = undefined;\n\n    const outfits = await lastValueFrom(this.outfitService.getOne(this.outfitId));\n    this.outfit = outfits[0];\n\n    const cacheKey = 'videostories-viewed';\n    let storiesViewed = await this.storageService.get(cacheKey) as number[];\n    if (storiesViewed === null) {\n      storiesViewed = [];\n    }\n\n    if (storiesViewed.indexOf(this.outfit.id) === -1) {\n      storiesViewed.push(this.outfit.id)\n      this.storiesViewedNow.push(this.outfit.id);\n      await this.storageService.set(cacheKey, storiesViewed);\n    }\n\n    this.outfitService.getVideoForOutfit(this.outfitId).subscribe(async r => {\n      \n      const videos = r;\n      for (let v of videos) {\n\n        try {\n\n          let subtitle: string = await lastValueFrom(this.outfitService.getSubtitleForMedia(v.id));\n          subtitle = subtitle.trim();\n          subtitle = subtitle.replace('WEBVTT', 'WEBVTT\\n');\n          subtitle = subtitle.replace(/,/g, '.');\n\n          const subtitleBlob = new Blob([subtitle], { type: 'text/plain' });\n          const subtitleLink = URL.createObjectURL(subtitleBlob);\n          v['subtitle_link'] = this.sanitizer.bypassSecurityTrustUrl(subtitleLink);\n\n        } catch (ex) {\n          //No subtitle present\n        }\n\n      }\n\n      this.videos = r;\n      this.videos = this.videos.sort((a, b) => a.sort_index - b.sort_index);\n\n      this.currentVideo = this.videos[0];\n    });\n\n  }\n\n  public loadTrackWithAjax(url) {\n    var xhttp = new XMLHttpRequest();\n\n    xhttp.onreadystatechange = function() {\n      if (this.readyState == 4 && this.status == 200 && this.responseText) {\n        // If VTT fetch succeeded, replace the src with a BLOB URL.\n        var blob = new Blob([this.responseText], { type: 'text/vtt' });\n        var ur = URL.createObjectURL(blob);\n        console.log(ur);\n      }\n    };\n    xhttp.open(\"GET\", url, true);\n    xhttp.send();\n  }\n\n  public splitLast(s, sep = ' ') {\n    let right = s.split(sep).pop()\n    let left  = s.substring(0, s.length - right.length - sep.length)\n    return [left, right]\n}\n\n  public getVideoUrl(url) {\n    return this.sanitizer.bypassSecurityTrustResourceUrl(url);\n  }\n\n  public playerReady(data: VgApiService) {\n\n    this.data = data;\n\n    this.data.getDefaultMedia().subscriptions.loadedMetadata.subscribe(r => {\n      this.data.play();\n    });\n\n    this.data.getDefaultMedia().subscriptions.ended.subscribe(() => {\n      this.nextVideo();\n    });\n\n    setTimeout(() => {\n      const isMetadataLoaded = this.data.getDefaultMedia().isMetadataLoaded;\n      if (!isMetadataLoaded) {\n        this.data.play();\n      }\n    }, 100);\n\n  }\n\n  public previousVideo() {\n\n    this.activeIndex--;\n    if (this.activeIndex < 0) {\n      \n      if (this.previousOutfitIds.length === 0) {\n\n        this.dismiss();\n        return;\n\n      } else {\n\n        this.nextOutfitIds.unshift(this.outfitId);\n        this.outfitId = this.previousOutfitIds[this.previousOutfitIds.length-1];\n        this.previousOutfitIds = this.previousOutfitIds.filter(o => o !== this.outfitId);\n        this.load();\n\n      }\n\n    } else {\n      this.currentVideo = this.videos[this.activeIndex];\n    }\n\n  }\n\n  public nextVideo() {\n\n    this.activeIndex++;\n    if (this.activeIndex === this.videos.length) {\n\n      if (this.nextOutfitIds.length === 0) {\n\n        this.dismiss();\n        return;\n\n      } else {\n\n        this.previousOutfitIds.push(this.outfitId);\n        this.outfitId = this.nextOutfitIds[0];\n        this.nextOutfitIds = this.nextOutfitIds.filter(o => o !== this.outfitId);\n        this.load();\n\n      }\n\n    } else {\n      this.currentVideo = this.videos[this.activeIndex];\n    }\n\n  }\n\n  public dismiss() {\n    this.modalCtrl.dismiss({\n      viewedStories: this.storiesViewedNow\n    });\n  }\n\n  public goToOutfit() {\n    this.modalCtrl.dismiss({\n      viewedStories: this.storiesViewedNow,\n      navigateToOutfit: this.outfit\n    });\n  }\n\n  public getSubsUrl() {\n    return this.sanitizer.bypassSecurityTrustUrl('https://storage.googleapis.com/kiba-fashion-api-bucket/quicktime_video/outfit_mediaset/subs2.vtt');\n  }\n\n}\n","<ion-content>\n\n    <div class=\"modal-container\">\n\n        <div *ngIf=\"!videos\" style=\"width: 100%; height: 100%; background-color: #161616;\" class=\"r-flex r-flex-v-center r-flex-h-center\">\n            <rope-loading></rope-loading>\n        </div>\n\n        <ng-container *ngIf=\"videos\">\n\n            <ng-container *ngFor=\"let v of videos\">\n                <link rel=\"prefetch\" as=\"video\" [href]=\"getVideoUrl(v.url)\" type=\"video/mp4\">\n            </ng-container>\n\n            <div class=\"invisible-click-layer\">\n                <div (click)=\"previousVideo()\"></div>\n                <div (click)=\"nextVideo()\"></div>\n            </div>\n\n            <vg-player (onPlayerReady)=\"playerReady($event)\" class=\"video-player\">\n\n                <vg-controls style=\"bottom: initial; top: 0px; background-color: transparent; margin-right: 70px; width: calc(100% - 70px);\">\n                    <vg-mute vgFor=\"video\"></vg-mute>\n                    <vg-scrub-bar>\n                        <vg-scrub-bar-current-time disabled=\"true\" vgFor=\"video\" [vgSlider]=\"false\"></vg-scrub-bar-current-time>\n                    </vg-scrub-bar>\n                </vg-controls>\n\n                <video \n                    [vgMedia]=\"$any(media)\" \n                    #media \n                    id=\"video\"\n                    preload=\"none\" \n                    [src]=\"currentVideo.url\"\n                    style=\"width: 100%; object-fit: cover;\" \n                    playsinline\n                >\n            \n                    <track *ngIf=\"currentVideo.subtitle_link\" kind=\"subtitles\" label=\"Nederlands\" [src]=\"currentVideo.subtitle_link\" srclang=\"nl\" default>\n            \n                </video>\n\n            </vg-player>\n\n            <div class=\"footer-nav\" *ngIf=\"outfit\">\n                <div class=\"r-flex r-flex-h-space-between r-flex-v-center\">\n                    <div class=\"r-h2\" style=\"padding-right: 10px; font-weight: 700;\">{{ outfit.name }}</div>\n                    <div class=\"r-h2\">{{ outfit.price | currency:'EUR':'symbol' }}</div>\n                </div>\n                <ion-button color=\"tertiary\" (click)=\"goToOutfit()\">\n                    <ion-label class=\"r-h2\">Shoppen</ion-label>\n                    <ion-icon name=\"arrow-forward-circle-outline\" slot=\"end\"></ion-icon>\n                </ion-button>\n            </div>\n    \n        </ng-container>\n\n        <ion-fab vertical=\"top\" horizontal=\"end\" slot=\"fixed\">\n            <ion-fab-button size=\"small\" style=\"--background: transparent;\" (click)=\"dismiss()\">\n                <ion-icon name=\"close-circle-outline\"></ion-icon>\n            </ion-fab-button>\n        </ion-fab>\n\n    </div>\n\n</ion-content>","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { CoreService } from './core.service';\nimport { Option } from '../models/option';\nimport { lastValueFrom, Observable } from 'rxjs';\nimport { MockService } from './mock.service';\n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class OptionService {\n  \n  public types;\n\n  constructor(\n    private http: HttpClient,\n    private coreService: CoreService,\n    private mockService: MockService\n  ) {}\n\n  public async ready() {\n\n    let types;\n    if (this.coreService.isOfflineMode()) {\n\n      this.mockService.httpEmptyResponse().subscribe(r => {\n        this.types = r;\n        return Promise.resolve(true);\n      });\n\n    } else {\n      \n      types = this.coreService.initObject.option_types;\n      this.types = types;\n\n      return Promise.resolve(true);\n    }\n\n  }\n\n  public getOptions(propertyId: number): Observable<Option[]> {\n    const params: HttpParams = new HttpParams().set(\n      \"property_id\",\n      propertyId.toString()\n    );\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<Option[]>(\n      this.coreService.getBaseUrl() + \"option/get\",\n      requestOptions\n    );\n  }\n\n  public getOptionSets(propertyId: number): Observable<Option[]> {\n    \n    const params: HttpParams = new HttpParams().set(\n      \"property_id\",\n      propertyId.toString()\n    );\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders(),\n    };\n\n    return this.http.get<Option[]>(\n      this.coreService.getBaseUrl() + \"option_set/get\",\n      requestOptions\n    );\n\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { Title, Meta } from '@angular/platform-browser';\nimport { MetafrenzyService } from 'ngx-metafrenzy';\nimport { CoreService } from './core.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class SeoService {\n\n  constructor(\n    private title: Title,\n    private meta: Meta,\n    private metafrenzyService: MetafrenzyService,\n    private coreService: CoreService\n  ) {}\n\n  public addMeta(title, description) {\n    const storeName = this.coreService.store.store_name;\n    this.title.setTitle(storeName+' | ' + title);\n    this.meta.updateTag({ name: 'description', content: description });\n  }\n\n  public setOpenGraph(title, description, url, image) {\n\n    const storeName = this.coreService.store.store_name;\n    this.metafrenzyService.setOpenGraph({\n      title: title,\n      description: description,\n      type: 'article',\n      url: url,\n      image: image,\n      site_name: storeName,\n      locale: 'nl_NL'\n    });\n\n  }\n\n  public setOpenGraphForBlog(blog: any) {\n\n    const storeName = this.coreService.store.store_name;\n    // this.metafrenzyService.setOpenGraph({\n    //   title: blog.title,\n    //   description: 'In deze nieuwe blog post van '+storeName+' lees je alles over de nieuwste trends, tips over fashion en nog veel meer!',\n    //   type: 'article',\n    //   url: 'https://app.kiba-fashion.nl/blog-detail/'+blog.id,\n    //   image: blog.image,\n    //   site_name: storeName,\n    //   locale: 'nl_NL'\n    // });\n\n  }\n\n}\n","import { Component, OnInit, Input, EventEmitter, Output, ViewChild, SimpleChanges } from '@angular/core';\nimport { Outfit } from '../../../models/outfit';\nimport { CoreService } from '../../../services/core.service';\nimport { LoadingController, ModalController, Platform, AlertController, IonInfiniteScroll, MenuController, IonicSlides } from '@ionic/angular';\nimport { OutfitService } from '../../../services/outfit.service';\nimport { FavouriteService } from '../../../services/favourite.service';\nimport { CartService } from '../../../services/cart.service';\nimport { LogService } from '../../../services/log.service';\nimport { Subscription, forkJoin, lastValueFrom } from 'rxjs';\nimport { SeoService } from '../../../services/seo.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\nimport { OptionService } from '../../../services/option.service';\nimport { tap } from 'rxjs/operators';\nimport { WishlistService } from '../../../services/wishlist.service';\nimport { StoryViewerComponent } from '../../misc/story-viewer/story-viewer.component';\nimport { StorageService } from '../../../services/storage.service';\nimport { SwiperOptions } from 'swiper/types/swiper-options';\n\n@Component({\n  selector: \"rope-product-overview\",\n  templateUrl: \"./product-overview.component.html\",\n  styleUrls: [\"./product-overview.component.scss\"],\n})\nexport class ProductOverviewComponent implements OnInit {\n\n  @Input() public noosTitle: string;\n  @Input() public category: string;\n  @Input() public onlyPreorders;\n  @Input() public onlyNoos;\n  @Input() public categoryId;\n\n  @Input() public categoryNames;\n  @Input() public initialFilters;\n\n  @Output() public navigateToShopDetail = new EventEmitter();\n  @Output() public modalFilters = new EventEmitter();\n  @Output() public modalOutfitMediasetCategories = new EventEmitter();\n\n  @Output() public scrollToTop = new EventEmitter();\n  @Output() public onChangeFilters = new EventEmitter();\n\n  @ViewChild(IonInfiniteScroll) infiniteScroll: IonInfiniteScroll;\n\n  public mode = \"simple\";\n  public outfits: Outfit[];\n  public stats: any;\n  public pageNumber: number;\n  public usps: any[];\n\n  public Math: any;\n\n  public perPage: number;\n  public loading = true;\n\n  public query;\n\n  public catName;\n\n  public sorts = [\n    { value: \"outfit.price ASC\", name: \"Prijs aflopend\" },\n    { value: \"outfit.price DESC\", name: \"Prijs oplopend\" },\n    { value: \"option.name ASC\", name: \"Categorië A-Z\" },\n    { value: \"option.name DESC\", name: \"Categorië Z-A\" },\n  ];\n  public currentSort;\n\n  public moveContent = \"more\";\n\n  public sub: Subscription;\n  public reloadingSub: Subscription;\n\n  public filterIds: any[] = [];\n  public categories;\n  public brands;\n  public colors;\n  public sizes;\n  public selectedCategories = [];\n  public selectedBrands = [];\n  public selectedColors = [];\n  public selectedSizes = [];\n\n  public openCategory;\n  public openBrand;\n  public openColor;\n  public openSize;\n\n  public filterBlocks;\n\n  public isDesktop;\n\n  public initialFiltersSet = false;\n\n  public outfitMediasetMetas;\n  public useMediasets = false;\n  public outfitMediasetTitle;\n  public outfitMediasetCategories;\n  public outfitMediasetCategoryId;\n\n  public outfitMediasetIcon;\n  public outfitMediasetButtonText;\n\n  public filtersChanged;\n  public filtersChangedLast;\n\n  public wishlistChanged;\n\n  public sliderConfig: SwiperOptions;\n  public swiperModules = [IonicSlides];\n  public outfitVideos = [];\n\n  constructor(\n    public coreService: CoreService,\n    public optionService: OptionService,\n    public loadingCtrl: LoadingController,\n    public modalCtrl: ModalController,\n    public outfitService: OutfitService,\n    public screensizeService: ScreensizeService,\n    public favouriteService: FavouriteService,\n    public wishlistService: WishlistService,\n    public menuCtrl: MenuController,\n    public platform: Platform,\n    public cartService: CartService,\n    private logger: LogService,\n    private alertCtrl: AlertController,\n    private seoService: SeoService,\n    private storageService: StorageService\n  ) {}\n\n  ngOnInit() {\n\n    this.screensizeService.isDesktopView().subscribe((isDesktop) => {\n      this.isDesktop = isDesktop;\n      if (isDesktop) {\n        this.loadFilters();\n      }\n    });\n\n    this.filtersChanged = this.coreService.filtersChanged.subscribe(r => {\n      if (r) {\n        const epoch = new Date().getTime();\n        if ((this.filtersChangedLast && (epoch - this.filtersChangedLast > 1000)) || !this.filtersChangedLast) {\n          this.reInit();\n          this.filtersChangedLast = epoch;\n        }\n      }\n    });\n\n    this.wishlistChanged = this.wishlistService.changed.subscribe(r => {\n\n      if (r) {\n\n        for (let outfit of this.outfits) {\n\n          let pvsString = outfit['custom_fields'].product_variant_ids_with_sizes;\n          if (!pvsString) {\n            pvsString = '';\n          }\n          const pvs = pvsString.split(',');\n          for (let pv of pvs) {\n            \n            const pvId = +pv.split('-')[0];\n            const onWishlist = this.wishlistService.check({ id: pvId });\n            outfit['on_wishlist'] = onWishlist;\n\n            if (onWishlist) {\n              outfit['wishlist_product_variant_id'] = pvId;\n              break;\n            }\n\n          }\n\n        }\n\n      }\n\n    })\n\n  }\n\n  ngOnDestroy() {\n    if (this.filtersChanged) {\n      this.filtersChanged.unsubscribe();\n    }\n    if (this.wishlistChanged) {\n      this.wishlistChanged.unsubscribe();\n    }\n  }\n\n  public reInit() {\n\n    this.scrollToTop.emit();\n    this.pageNumber = 1;\n    this.init();\n\n  }\n\n  public async init() {\n    \n    this.logger.info(\"Running initialize webshop overview page...\");\n    this.loading = true;\n\n    if (await this.menuCtrl.isOpen()) {\n      this.menuCtrl.close();\n    }\n\n    if (this.infiniteScroll) {\n      this.infiniteScroll.disabled = false;\n    }\n\n    // Check outfit mediasets\n    this.outfitMediasetMetas = this.outfitService.outfitMediasetMetas;\n    this.useMediasets = this.outfitService.useMediasets;\n    if (this.useMediasets) {\n\n      this.outfitMediasetTitle = this.outfitService.getOutfitMediasetMeta('mediaset_choice_title', 'Kies een mediaset');\n      this.outfitMediasetIcon = this.outfitService.getOutfitMediasetMeta('mediaset_choice_icon', 'list-outline');\n      this.outfitMediasetButtonText = this.outfitService.getOutfitMediasetMeta(\n        \"mediaset_choice_button_text\",\n        \"Mediasets\"\n      );\n\n      this.outfitMediasetCategories = this.outfitService.outfitMediasetCategories;\n      this.outfitMediasetCategoryId = this.outfitService.outfitMediasetCategoryId;\n      this.logger.info(\"Mediasets initialized.\", true);\n\n    }\n\n    this.category = this.category.toLowerCase();\n    this.catName = this.categoryNames[this.category.toLowerCase()];\n\n    const metaName = new String(\n      this.catName.replace(/^./, (str) => str.toUpperCase())\n    );\n    this.seoService.addMeta(\n      metaName,\n      \"Bij KiBa Fashion shop je iedere week een nieuwe en betaalbare collectie!\"\n    );\n\n    this.pageNumber = 1;\n\n    // Check screen size\n    const w = this.platform.width();\n    this.mode = this.outfitService.getOutfitMode();\n\n    if (w < 768) {\n      this.perPage = 20;\n    } else if (w >= 768 && w < 1200) {\n      this.perPage = 18;\n    } else if (w >= 1200) {\n      this.perPage = 24;\n    }\n\n    this.filterIds = this.coreService.getFilters();\n    this.filterIds = this.filterIds.map((i) => \"\" + i);\n    this.logger.info('Got the filters: '+this.filterIds.length);\n\n    if (this.filterIds.length > 0) {\n\n      if (\n        this.initialFilters &&\n        this.initialFilters.length > 0 &&\n        !this.initialFiltersSet &&\n        !this.areArraysEqualSets(this.filterIds, this.initialFilters)\n      ) {\n\n        this.filterIds = [];\n        this.initialFilters.forEach((f) => {\n          this.filterIds.push(f);\n        });\n        this.coreService.resetFilters();\n        this.coreService.addFilters(this.filterIds);\n\n      } else {\n        this.updateFilters();\n      }\n\n      this.initialFiltersSet = true;\n\n    } else {\n\n      if (this.initialFilters && this.initialFilters.length > 0 && !this.initialFiltersSet) {\n\n        this.filterIds = [];\n        this.initialFilters.forEach((f) => {\n          this.filterIds.push(f);\n        });\n        this.coreService.addFilters(this.filterIds);\n\n        this.initialFiltersSet = true;\n\n      }\n\n    }\n\n    this.outfits = new Array<Outfit>();\n    if (this.category !== \"bestsellers\") {\n\n      console.log(this.categoryId);\n      if (this.category === 'basics' && !this.onlyNoos && !this.categoryId) {\n        // Set the categoryId to 4, this equals the default category\n        this.categoryId = 4;\n      }\n\n      this.logger.info(\"Going to check the category count.\", true);\n      this.outfitService\n        .getCategoryCount(\n          this.category,\n          this.filterIds,\n          this.onlyPreorders,\n          this.onlyNoos,\n          this.categoryId\n        )\n        .subscribe(\n          (res) => {\n            this.logger.info(\"Got category count.\", true);\n            this.stats = res;\n            this.loadOutfitsFromCategory();\n          },\n          (errorResponse) => {\n            console.error(\"Error!\");\n          }\n        );\n\n    } else {\n\n      this.logger.info(\"Getting the bestsellers...\", true);\n      this.outfitService.getBestsellers(\"basics\", 28, this.filterIds, 2).subscribe(\n        (res) => {\n          this.outfits = res;\n          this.checkTags(this.outfits);\n          this.loading = false;\n        },\n        (error) => {\n          this.loading = false;\n        }\n      );\n\n    }\n\n    //Load outfit videos\n    const outfitVideos = await lastValueFrom(this.outfitService.getOutfitVideos());\n    for (let ov of outfitVideos) {\n      let storiesViewed = await this.storageService.get('videostories-viewed') as number[];\n      if (storiesViewed === null) {\n        storiesViewed = [];\n      }\n      ov['is_viewed'] = storiesViewed.indexOf(ov.id) !== -1;\n    }\n    this.outfitVideos = outfitVideos.sort((o1, o2) => o1['is_viewed'] - o2['is_viewed']);\n\n    const widthPerSlide = 79;\n    if (this.isDesktop) {\n\n      const widthForSlider = w / 12 * 10;\n      const numberOfSlider = Math.floor(widthForSlider / widthPerSlide) + 0.7;\n\n      this.sliderConfig = {\n        slidesPerView: numberOfSlider,\n        spaceBetween: 15,\n        watchOverflow: true\n      };\n\n    } else {\n\n      const widthForSlider = w - 15;\n      const numberOfSlider = Math.floor(widthForSlider / widthPerSlide) + 0.7;\n\n      this.sliderConfig = {\n        slidesPerView: numberOfSlider,\n        spaceBetween: 15,\n        slidesOffsetBefore: 5,\n        watchOverflow: true\n      };\n\n    }\n\n  }\n\n  public async showOutfitVideo(outfit) {\n\n    const outfitIndex = this.outfitVideos.findIndex(o => o.id === outfit.id);\n    const prevOutfitIds = this.outfitVideos.slice(0, outfitIndex).map(o => o.id);\n    const nextOutfitIds = this.outfitVideos.slice(outfitIndex+1).map(o => o.id);\n\n    let modal = await this.modalCtrl.create({\n      component: StoryViewerComponent,\n      componentProps: {\n        outfitId: outfit.id,\n        previousOutfitIds: prevOutfitIds,\n        nextOutfitIds: nextOutfitIds\n      },\n      cssClass: this.isDesktop ? 'tall-modal shade-modal' : ''\n    });\n\n    modal.onDidDismiss().then(d => {\n      if (d && d.data && d.data.navigateToOutfit) {\n        this.goToShopDetail(d.data.navigateToOutfit);\n      }\n      if (d && d.data && d.data.viewedStories) {\n        for (let vs of d.data.viewedStories) {\n          this.outfitVideos.find(ov => ov.id === vs)['is_viewed'] = true;\n        }\n      }\n    });\n\n    await modal.present();\n\n  }\n\n  public setOutfitMediasetCategory(id) {\n    this.outfitMediasetCategoryId = id;\n    this.outfitService.setOutfitMediasetCategory(id);\n    this.reInit();\n  }\n\n  public identify(index, item){\n    return item.id; \n  }\n\n  public shuffle(a) {\n    for (let i = a.length - 1; i > 0; i--) {\n      const j = Math.floor(Math.random() * (i + 1));\n      [a[i], a[j]] = [a[j], a[i]];\n    }\n    return a;\n  }\n\n  public areArraysEqualSets(a1, a2) {\n    const superSet = {};\n    for (const i of a1) {\n      const e = i + typeof i;\n      superSet[e] = 1;\n    }\n\n    for (const i of a2) {\n      const e = i + typeof i;\n      if (!superSet[e]) {\n        return false;\n      }\n      superSet[e] = 2;\n    }\n\n    for (let e in superSet) {\n      if (superSet[e] === 1) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  public updateFilters() {\n    this.onChangeFilters.emit(this.filterIds);\n  }\n\n  public async loadOutfitsFromCategory() {\n\n    let start: number = this.stats.count - this.pageNumber * this.perPage;\n    let end: number = this.stats.count - (this.pageNumber - 1) * this.perPage;\n\n    if (start < 0 || end < 0) {\n      start = 0;\n      end = this.perPage;\n    }\n\n    this.outfitService\n      .getAllFromCategoryPagination(\n        this.category,\n        start,\n        end,\n        this.filterIds,\n        this.currentSort,\n        this.onlyPreorders,\n        this.onlyNoos,\n        this.categoryId\n      )\n      .subscribe(\n        (res) => {\n          this.logger.info(\"Got webshop products: \"+res.length, true);\n          this.outfits = res;\n          this.checkTags(this.outfits);\n          this.loading = false;\n          this.logger.info(\"Done loading overview.\", true);\n        },\n        (errorResponse) => {\n          console.error(\"Error!\");\n          this.loading = false;\n        }\n      );\n  }\n\n  public loadNext(event) {\n    if (this.category === \"bestsellers\") {\n      event.target.disabled = true;\n      return;\n    }\n\n    this.pageNumber = this.pageNumber + 1;\n\n    let start: number = this.stats.count - this.pageNumber * this.perPage;\n    const end: number = this.stats.count - (this.pageNumber - 1) * this.perPage;\n\n    if (start < 0) {\n      start = 0;\n    }\n\n    if (end < 0) {\n      event.target.disabled = true;\n      return;\n    }\n\n    this.outfitService\n      .getAllFromCategoryPagination(\n        this.category,\n        start,\n        end,\n        this.filterIds,\n        this.currentSort,\n        this.onlyPreorders,\n        this.onlyNoos,\n        this.categoryId\n      )\n      .subscribe(\n        (res: Outfit[]) => {\n          for (const outfit of res) {\n            this.outfits.push(outfit);\n          }\n          this.checkTags(this.outfits);\n          event.target.complete();\n        },\n        (errorResponse) => {\n          console.error(\"Error!\");\n          console.error(errorResponse);\n          event.target.complete();\n        }\n      );\n  }\n\n  public checkTags(outfits) {\n    for (let outfit of this.outfits) {\n      const timeDiff = new Date().getTime() - (outfit[\"timestamp_created\"] || outfit['timestamp_online']);\n      if (timeDiff < (1000 * 60 * 60 * 24 * 7)) {\n        outfit[\"new_tag\"] = true;\n      }\n      if (outfit.likes > 15) {\n        outfit[\"fire_tag\"] = true;\n      }\n      if (outfit['custom_fields'].promotion_name) {\n        outfit[\"promotion_discount_tag\"] = true;\n        outfit[\"promotion\"] = outfit['custom_fields'].promotion_name;\n      }\n    }\n  }\n\n  public getImage(outfit: Outfit) {\n    const storeBucketName = this.coreService.store.store_bucket_name;\n    return (\n      \"https://storage.googleapis.com/\" +\n      storeBucketName +\n      \"-bucket/image/outfit/\" +\n      outfit.id +\n      \".jpg\"\n    );\n  }\n\n  public goToShopDetail(outfit: Outfit) {\n    this.navigateToShopDetail.emit(outfit);\n  }\n\n  public loadFilters() {\n    \n    this.filterIds = this.coreService.getFilters();\n\n    const categoryId = 5;\n    const brandId = 4;\n    const colorId = 6;\n\n    const obs1 = this.optionService.getOptions(categoryId).pipe(\n      tap((r) => {\n        this.categories = r;\n        for (const filterId of this.filterIds) {\n          const present = this.categories.find((c) => c.id === filterId);\n          if (present !== undefined) {\n            this.selectedCategories.push(present);\n          }\n        }\n      })\n    );\n\n    const obs2 = this.optionService.getOptions(brandId).pipe(\n      tap((r) => {\n        this.brands = r;\n        for (const filterId of this.filterIds) {\n          const present = this.brands.find((c) => c.id === filterId);\n          if (present !== undefined) {\n            this.selectedBrands.push(present);\n          }\n        }\n      })\n    );\n\n    const obs3 = this.optionService.getOptions(colorId).pipe(\n      tap((r) => {\n        this.colors = r;\n        for (const filterId of this.filterIds) {\n          const present = this.colors.find((c) => c.id === filterId);\n          if (present !== undefined) {\n            this.selectedColors.push(present);\n          }\n        }\n      })\n    );\n\n    const obs4 = this.outfitService.getAvailableSizes().pipe(\n      tap((r) => {\n        this.sizes = r;\n        for (const filterId of this.filterIds) {\n          const present = this.sizes.find((c) => \"s\" + c.id === filterId);\n          if (present !== undefined) {\n            this.selectedSizes.push(present);\n          }\n        }\n      })\n    );\n\n    forkJoin([obs1, obs2, obs3, obs4]).subscribe((r) => {\n      this.filterBlocks = [\n        {\n          name: \"Categorieën\",\n          open: this.openCategory,\n          objects: this.categories,\n          setSelected: (obj) => (this.selectedCategories = [obj]),\n          getSelection: () => this.selectedCategories.length,\n          isSelected: ($e) => this.categoryIsSelected($e),\n          select: ($e) => this.selectCategory($e),\n          remove: (noInit?) => this.removeCategoryFilter(noInit),\n        },\n        {\n          name: \"Merken\",\n          open: this.openBrand,\n          objects: this.brands,\n          setSelected: (obj) => (this.selectedBrands = [obj]),\n          getSelection: () => this.selectedBrands.length,\n          isSelected: ($e) => this.brandIsSelected($e),\n          select: ($e) => this.selectBrand($e),\n          remove: (noInit?) => this.removeBrandFilter(noInit),\n        },\n        {\n          name: \"Kleuren\",\n          open: this.openColor,\n          objects: this.colors,\n          setSelected: (obj) => (this.selectedColors = [obj]),\n          getSelection: () => this.selectedColors.length,\n          isSelected: ($e) => this.colorIsSelected($e),\n          select: ($e) => this.selectColor($e),\n          remove: (noInit?) => this.removeColorFilter(noInit),\n        },\n        {\n          name: \"Maten\",\n          open: this.openSize,\n          objects: this.sizes,\n          setSelected: (obj) => (this.selectedSizes = [obj]),\n          getSelection: () => this.selectedSizes.length,\n          isSelected: ($e) => this.sizeIsSelected($e),\n          select: ($e) => this.selectSize($e),\n          remove: (noInit?) => this.removeSizeFilter(noInit),\n        },\n      ];\n\n      if (this.initialFilters) {\n        this.initialFilters.forEach((f) => {\n          this.selectFilter(f);\n        });\n      }\n    });\n  }\n\n  public selectFilter(filterId) {\n    if (this.filterBlocks) {\n      for (let filterBlock of this.filterBlocks) {\n        const obj = filterBlock.objects.find((c) =>\n          filterId.indexOf(\"s\") === -1\n            ? c.id === Number(filterId)\n            : \"s\" + c.id === filterId\n        );\n        if (obj) {\n          filterBlock.setSelected(obj);\n        }\n      }\n    }\n  }\n\n  public removeFilters() {\n    for (let filterBlock of this.filterBlocks) {\n      filterBlock.remove(true);\n    }\n    this.init();\n  }\n\n  public selectCategory(event: any, noInit?) {\n    const filterIds = this.coreService.getFilters();\n    for (const filterId of filterIds) {\n      const present = this.categories.find((c) => c.id === filterId);\n      if (present !== undefined) {\n        this.coreService.removeFilter(present.id);\n      }\n    }\n\n    this.selectedCategories = [event];\n    this.coreService.addFilters(this.selectedCategories.map((i) => i.id));\n\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public countFilters(list) {\n    return 0;\n  }\n\n  public categoryIsSelected(cat) {\n    return this.selectedCategories.some((c) => c.id === cat.id);\n  }\n\n  public removeCategoryFilter(noInit?) {\n    this.coreService.removeFilters(this.selectedCategories.map((i) => i.id));\n    this.selectedCategories = [];\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public selectBrand(event: any, noInit?) {\n    const filterIds = this.coreService.getFilters();\n    for (const filterId of filterIds) {\n      const present = this.brands.find((c) => c.id === filterId);\n      if (present !== undefined) {\n        this.coreService.removeFilter(present.id);\n      }\n    }\n\n    this.selectedBrands = [event];\n    this.coreService.addFilters(this.selectedBrands.map((i) => i.id));\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public brandIsSelected(cat) {\n    return this.selectedBrands.some((c) => c.id === cat.id);\n  }\n\n  public removeBrandFilter(noInit?) {\n    this.coreService.removeFilters(this.selectedBrands.map((i) => i.id));\n    this.selectedBrands = [];\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public selectColor(event: any, noInit?) {\n    const filterIds = this.coreService.getFilters();\n    for (const filterId of filterIds) {\n      const present = this.colors.find((c) => c.id === filterId);\n      if (present !== undefined) {\n        this.coreService.removeFilter(present.id);\n      }\n    }\n\n    this.selectedColors = [event];\n    this.coreService.addFilters(this.selectedColors.map((i) => i.id));\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public colorIsSelected(cat) {\n    return this.selectedColors.some((c) => c.id === cat.id);\n  }\n\n  public removeColorFilter(noInit?) {\n    this.coreService.removeFilters(this.selectedColors.map((i) => i.id));\n    this.selectedColors = [];\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public selectSize(event: any, noInit?) {\n    const filterIds = this.coreService.getFilters();\n    for (const filterId of filterIds) {\n      const present = this.sizes.find((c) => \"s\" + c.id === filterId);\n      if (present !== undefined) {\n        this.coreService.removeFilter(present.id);\n      }\n    }\n\n    this.selectedSizes = [event];\n    this.coreService.addFilters(this.selectedSizes.map((i) => \"s\" + i.id));\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public sizeIsSelected(cat) {\n    return this.selectedSizes.some((c) => c.id === cat.id);\n  }\n\n  public removeSizeFilter(noInit?) {\n    this.coreService.removeFilters(this.selectedSizes.map((i) => \"s\" + i.id));\n    this.selectedSizes = [];\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public getPreorderHours(outfit: Outfit) {\n    let product = outfit[\"products\"].filter(\n      (p) => p.product_preorders && p.product_preorders.length > 0\n    )[0];\n    let timestampEnd = product.product_preorders[0].timestamp_end;\n    let hours = Math.floor(\n      Math.abs(timestampEnd - new Date().getTime()) / 36e5\n    );\n    return hours;\n  }\n\n  public getPreorderMinutes(outfit: Outfit) {\n    let product = outfit[\"products\"].filter(\n      (p) => p.product_preorders && p.product_preorders.length > 0\n    )[0];\n    let timestampEnd = product.product_preorders[0].timestamp_end;\n    let minutes = Math.floor(\n      ((Math.abs(timestampEnd - new Date().getTime()) % 36e5) / 36e5) * 60\n    );\n    return minutes;\n  }\n\n  public getPreorderDeliveryDate(outfit: Outfit) {\n    let product = outfit[\"products\"].filter(\n      (p) => p.product_preorders && p.product_preorders.length > 0\n    )[0];\n    let timestampDelivery = product.product_preorders[0].timestamp_delivery;\n    return timestampDelivery;\n  }\n\n  public getSorts() {\n    const sortss = this.sorts;\n\n    if (!this.currentSort) {\n      const basicSort = { value: \"0\", name: \"Standaard Sorting\" };\n      sortss.push(basicSort);\n      this.currentSort = basicSort;\n    }\n\n    sortss.sort((a, b) => a.value.localeCompare(b.value));\n    return sortss;\n  }\n\n  public changeSort(event) {\n    this.init();\n  }\n\n  public async showSorts() {\n    const sortss = this.sorts;\n\n    if (!this.currentSort) {\n      const basicSort = { value: \"0\", name: \"Standaard Sorting\" };\n      sortss.push(basicSort);\n      this.currentSort = basicSort;\n    }\n\n    sortss.sort((a, b) => a.value.localeCompare(b.value));\n\n    const inputs = [];\n    for (let s of sortss) {\n      inputs.push({\n        name: \"selectedSort\",\n        type: \"radio\",\n        label: s.name,\n        value: s,\n        checked: s.value === this.currentSort.value,\n      });\n    }\n\n    const al = await this.alertCtrl.create({\n      header: \"Kies een sortering\",\n      inputs: inputs,\n      cssClass: \"custom-alert\",\n      buttons: [\n        {\n          role: \"cancel\",\n          text: \"Annuleer\",\n        },\n        {\n          text: \"Oke\",\n          handler: (d) => {\n            this.currentSort = d;\n            this.reInit();\n          },\n        },\n      ],\n    });\n\n    await al.present();\n  }\n\n  public async showModes() {\n    const alert = await this.alertCtrl.create({\n      header: \"Weergave\",\n      subHeader: \"Wat kijkt het lekkerst?\",\n      cssClass: \"custom-alert\",\n      inputs: [\n        {\n          name: \"simple\",\n          type: \"radio\",\n          label: \"Multi-view\",\n          value: \"simple\",\n          checked: this.mode === \"simple\",\n        },\n        {\n          name: \"block\",\n          type: \"radio\",\n          label: \"Single-view\",\n          value: \"block\",\n          checked: this.mode === \"block\",\n        },\n      ],\n      buttons: [\n        {\n          text: \"Annuleer\",\n          role: \"cancel\",\n        },\n        {\n          text: \"Oke\",\n          handler: (d) => {\n            this.setMode(d);\n          },\n        },\n      ],\n    });\n\n    await alert.present();\n  }\n\n  public setMode(mode: string) {\n    this.outfitService.setOutfitMode(mode);\n    this.mode = mode;\n  }\n\n  public toggleFavourite(id) {\n    if (this.favouriteService.checkFavourite(id)) {\n      this.favouriteService.removeFavourite(id);\n    } else {\n      this.favouriteService.saveFavourite(id);\n    }\n  }\n\n  public checkFavourite(id) {\n    if (this.favouriteService.checkFavourite(id)) {\n      return \"heart\";\n    } else {\n      return \"heart-empty\";\n    }\n  }\n\n  public checkDeliveryStatus(id) {\n    const weekday = new Array(7);\n    weekday[0] = \"zondag\";\n    weekday[1] = \"maandag\";\n    weekday[2] = \"dinsdag\";\n    weekday[3] = \"woensdag\";\n    weekday[4] = \"donderdag\";\n    weekday[5] = \"vrijdag\";\n    weekday[6] = \"zaterdag\";\n\n    const d = new Date();\n    if (d.getDay() === 6 || (d.getDay() === 5 && d.getHours() >= 15)) {\n      return \"dinsdag bezorgd\";\n    } else {\n      const nextday = d.getDay() + 1 > 6 ? 0 : d.getDay() + 1;\n      return weekday[nextday] + \" bezorgd\";\n    }\n  }\n\n  public getCartCount() {\n    return this.cartService.getTotalCount();\n  }\n\n  public getFilterCount() {\n    return this.filterIds.length;\n  }\n\n  public async showFilters() {\n    this.modalFilters.emit();\n  }\n\n  public showOutfitMediasetCategories() {\n    this.modalOutfitMediasetCategories.emit();\n  }\n\n  public getOutfitDescription(outfit) {\n    const maxLength = 25;\n    if (outfit.description.length > maxLength) {\n      return outfit.description.slice(0, maxLength - 1) + \"...\";\n    } else {\n      return outfit.description;\n    }\n  }\n\n  public likeOutfit(outfit: Outfit) {\n    if (outfit[\"disable_like\"]) {\n      return;\n    }\n\n    outfit[\"disable_like\"] = true;\n    this.outfitService.postLike(outfit.id).subscribe(\n      (r) => {\n        outfit.likes = r[\"likes\"];\n        setTimeout(() => {\n          outfit[\"disable_like\"] = false;\n        }, 750);\n      },\n      (error) => {\n        outfit[\"disable_like\"] = false;\n        this.coreService.showAlert(error);\n      }\n    );\n  }\n}\n","<ng-container>\n\n  <ng-container *ngIf=\"isDesktop\">\n\n    <ion-grid class=\"ion-no-padding\" *ngIf=\"sliderConfig && outfitVideos && outfitVideos.length > 0\">\n      <ion-row>\n        <ion-col size=\"2\" class=\"tv-container\"></ion-col>\n        <ion-col size=\"10\">\n          <div class=\"video-container\">\n          \n            <swiper-container [config]=\"sliderConfig\" [modules]=\"swiperModules\" style=\"width: 100%;\">\n              <ng-template swiperSlide *ngFor=\"let outfitVideo of outfitVideos\">\n                <ion-avatar class=\"video-avatar\" [ngClass]=\"outfitVideo['is_viewed'] ? 'video-avatar-viewed' : ''\" (click)=\"showOutfitVideo(outfitVideo)\">\n                  <img [src]=\"outfitVideo.main_media_url\" class=\"override-img\">\n                </ion-avatar>\n              </ng-template>\n            </swiper-container>\n          \n          </div>\n        </ion-col>\n      </ion-row>\n    </ion-grid>\n\n    <ion-grid>\n\n      <ion-row>\n\n        <ion-col size=\"2\" style=\"position: relative;\">\n\n          <ion-accordion-group style=\"height: 100%;\" value=\"filters\">\n\n            <div *ngIf=\"useMediasets\">\n              \n              <ion-accordion style=\"margin-top: 10px;\" value=\"mediasets\">\n\n                <ion-item slot=\"header\">\n                  <ion-icon slot=\"start\" style=\"font-size: 1.7rem; color: lightgrey;\" name=\"woman-outline\"></ion-icon>\n                  <ion-label class=\"r-h3 ion-text-wrap\">{{ outfitMediasetTitle }}</ion-label>\n                </ion-item>\n\n                <div slot=\"content\" class=\"mediaset-box\" style=\"padding: 20px 10px; background-color: #f2f2f2;\">\n                  <ion-grid>\n                    <ion-row>\n                      <ion-col size=\"6\" *ngFor=\"let mediasetCategory of outfitMediasetCategories\" (click)=\"setOutfitMediasetCategory(mediasetCategory.id)\">\n                        <div [ngClass]=\"mediasetCategory.id === outfitMediasetCategoryId ? 'bordered-mediaset' : ''\">\n                          <ion-img [src]=\"mediasetCategory.preview_image\" class=\"bordered-image border-choice\"></ion-img>\n                        </div>\n                        <div style=\"width: 100%; margin-top: 3px; font-size: 1rem;\" class=\"filters-title ion-text-center\">\n                          <b>{{ mediasetCategory.name }}</b>\n                          <p style=\"margin-top: 3px;\">{{ mediasetCategory.subtitle }}</p>\n                        </div>\n                      </ion-col>\n                    </ion-row>\n                  </ion-grid>\n                </div>\n\n              </ion-accordion>\n\n            </div>\n\n            <div style=\"position: sticky; top: 0px;\">\n\n              <ion-accordion style=\"margin-top: 10px;\" value=\"filters\">\n\n                <ion-item slot=\"header\">\n                  <ion-icon slot=\"start\" style=\"font-size: 1.7rem; color: lightgrey;\" name=\"filter-circle-outline\"></ion-icon>\n                  <ion-label class=\"r-h3\">Filters</ion-label>\n                </ion-item>\n\n                <div slot=\"content\" style=\"padding: 20px 10px; background-color: #f2f2f2;\">\n\n                  <div *ngIf=\"!filterBlocks\" style=\"width: 100%; height: 232px; display: flex; justify-content: center; align-items: center;\">\n                    <ion-spinner name=\"crescent\"></ion-spinner>\n                  </div>\n\n                  <div *ngFor=\"let filterBlock of filterBlocks\">\n                    <ion-item lines=\"none\" (click)=\"filterBlock.open = !filterBlock.open\" class=\"filter-title-block\">\n                      <ion-label class=\"filter-title\" style=\"user-select: none;\">\n                        {{ filterBlock.name }}\n                        <ion-badge *ngIf=\"filterBlock.getSelection() > 0\" [color]=\"filterBlock.getSelection() > 0 ? 'tertiary' : 'light'\" style=\"margin-left: 5px; font-weight: 500;\">{{ filterBlock.getSelection() }}</ion-badge>\n                      </ion-label>\n                      <ion-icon slot=\"end\" [name]=\"filterBlock.open ? 'arrow-down-outline' : 'arrow-up-outline'\"></ion-icon>\n                    </ion-item>\n\n                    <div *ngIf=\"filterBlock.open\" style=\"margin-top: 10px; margin-bottom: 35px;\">\n                      <ion-grid>\n                        <ion-row>\n                          <ion-col size=\"6\" *ngFor=\"let obj of filterBlock.objects\">\n                            <div class=\"option\" [ngClass]=\"filterBlock.isSelected(obj) ? 'category-selected' : ''\">\n                              <div class=\"option-name\" style=\"width: 100%; user-select: none;\" (click)=\"!filterBlock.isSelected(obj) ? filterBlock.select(obj) : undefined\">{{ obj.name }}</div>\n                              <ion-icon name=\"close\" color=\"dark\" (click)=\"filterBlock.remove(false)\" style=\"cursor: pointer;\"></ion-icon>\n                            </div>\n                          </ion-col>\n                        </ion-row>\n                      </ion-grid>\n                    </div>\n                  </div>\n\n                  <ion-button style=\"margin-top: 15px; --height: 40px;\" color=\"secondary\" fill=\"outline\" size=\"small\" expand=\"block\" [disabled]=\"!filterIds || filterIds.length === 0\" (click)=\"removeFilters()\">\n                    <div class=\"r-h3\">Verwijder filters</div>\n                    <ion-icon name=\"trash\" slot=\"end\" color=\"danger\"></ion-icon>\n                  </ion-button>\n\n                </div>\n\n              </ion-accordion>\n\n              <ion-accordion style=\"margin-top: 10px;\" value=\"sort\">          \n              \n                <ion-item slot=\"header\">\n                  <ion-icon slot=\"start\" style=\"font-size: 1.7rem; color: lightgrey;\" name=\"swap-vertical-outline\"></ion-icon>\n                  <ion-label class=\"r-h3\">Sortering</ion-label>\n                </ion-item>\n\n                <div slot=\"content\" style=\"padding: 20px 10px; background-color: #f2f2f2;\">\n\n                  <ion-select interface=\"popover\" [(ngModel)]=\"currentSort\" class=\"custom-sort\" (ionChange)=\"changeSort($event)\" [interfaceOptions]=\"{cssClass:'custom-sort-popover'}\">\n                    <ion-select-option *ngFor=\"let sort of getSorts()\" [value]=\"sort\" color=\"tertiary\">\n                      {{ sort.name }}\n                    </ion-select-option>\n                  </ion-select>\n              \n                </div>\n              \n              </ion-accordion>\n\n            </div>\n\n          </ion-accordion-group>\n\n        </ion-col>\n\n        <ion-col size=\"10\" style=\"min-height: calc(100% - 100px);\">\n\n          <ion-grid *ngIf=\"!loading && outfits && outfits.length > 0\">\n            <ion-row>\n              <ion-col *ngFor=\"let outfit of outfits; let i = index; trackBy:identify;\" size=\"6\" size-xl=\"3\" size-lg=\"4\" size-md=\"4\" size-sm=\"6\" size-sm=\"12\">\n          \n                <rope-product-container\n                  [outfit]=\"outfit\"\n                  [showLikeButton]=\"true\"\n                  [showSoldOut]=\"true\"\n                  [onlyPreorders]=\"onlyPreorders\"\n                  (navigateToShopDetail)=\"goToShopDetail($event)\"\n                ></rope-product-container>\n          \n              </ion-col>\n            </ion-row>\n          </ion-grid>\n\n          <ng-container *ngIf=\"loading\">\n            <div class=\"loading-container\">\n              <ion-spinner name=\"crescent\"></ion-spinner>\n            </div>\n          </ng-container>\n          \n          <ng-container *ngIf=\"!loading && (!outfits || outfits.length === 0)\">\n          \n            <div class=\"no-outfits\">\n              <div class=\"no-outfit-inner\">\n                <ion-icon name=\"shirt\" color=\"primary\" class=\"no-outfit-icon\"></ion-icon>\n                <div class=\"no-outfit-title\">Geen outfits gevonden</div>\n              </div>\n            </div>\n          \n          </ng-container>\n\n        </ion-col>\n\n      </ion-row>\n    </ion-grid>\n\n  </ng-container>\n\n  <ng-container *ngIf=\"!isDesktop\">\n    \n    <div class=\"video-container-mobile\" *ngIf=\"sliderConfig && outfitVideos && outfitVideos.length > 0\">\n    \n      <swiper-container [config]=\"sliderConfig\" [modules]=\"swiperModules\" style=\"width: 100%;\">\n        <swiper-slide *ngFor=\"let outfitVideo of outfitVideos\">\n          <ion-avatar class=\"video-avatar\" [ngClass]=\"outfitVideo['is_viewed'] ? 'video-avatar-viewed' : ''\" (click)=\"showOutfitVideo(outfitVideo)\">\n            <img [src]=\"outfitVideo.main_media_url\" class=\"override-img\">\n          </ion-avatar>\n        </swiper-slide>\n      </swiper-container>\n    \n    </div>\n\n    <ion-item-divider color=\"light\" style=\"--padding-start: 0px; --padding-end: 0px; border-top: 1px solid var(--ion-item-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.13))));\">\n    \n      <div style=\"display: flex; justify-content: center; width: 100%;\">\n        <ion-buttons style=\"margin-right: 5px; z-index: 1; width: 100%;\" class=\"r-flex r-flex-h-space-between\">\n          <ion-button (click)=\"showFilters()\" fill=\"solid\" [color]=\"filterIds && filterIds.length > 0 ? 'warning' : 'light'\"\n            class=\"del-marg\">\n            <ion-icon slot=\"start\" size=\"small\" name=\"filter-outline\" [color]=\"'dark'\"></ion-icon>\n            <ion-label>\n              <div class=\"r-note\">{{ filterIds.length }} filter{{ filterIds.length !== 1 ? 's' : '' }} actief</div>\n            </ion-label>\n          </ion-button>\n          <ion-button *ngIf=\"useMediasets\" (click)=\"showOutfitMediasetCategories()\" fill=\"solid\" color=\"light\"\n            class=\"del-marg\">\n            <ion-icon slot=\"start\" size=\"small\" [name]=\"outfitMediasetIcon\" [color]=\"'dark'\"></ion-icon>\n            <ion-label>\n              <div class=\"r-note\">{{ outfitMediasetButtonText }}</div>\n            </ion-label>\n          </ion-button>\n          <ion-button (click)=\"showSorts()\" fill=\"solid\"\n            [color]=\"currentSort && currentSort.value !== '0' ? 'warning' : 'light'\" class=\"del-marg\">\n            <ion-icon slot=\"start\" size=\"small\" name=\"swap-vertical-outline\" color=\"dark\"></ion-icon>\n            <ion-label>\n              <div class=\"r-note\">{{ !currentSort ? 'Standaard sortering' : currentSort.name }}</div>\n            </ion-label>\n          </ion-button>\n        </ion-buttons>\n      </div>\n    \n    </ion-item-divider>\n\n    <ion-grid class=\"ion-no-padding\" style=\"margin: 5px;\">\n      <ion-row>\n        <ion-col *ngFor=\"let outfit of outfits; let i = index;\" size=\"6\" size-xl=\"3\" size-lg=\"3\" size-md=\"3\" size-sm=\"4\" size-xs=\"6\" class=\"spacer-mobile\">\n    \n          <rope-product-container \n            [outfit]=\"outfit\"\n            [showSoldOut]=\"true\"\n            [showLikeButton]=\"true\" \n            [onlyPreorders]=\"onlyPreorders\"\n            (navigateToShopDetail)=\"goToShopDetail($event)\"\n          ></rope-product-container>\n    \n        </ion-col>\n      </ion-row>\n    </ion-grid>\n\n    <ng-container *ngIf=\"loading\">\n      <div class=\"loading-container\">\n        <ion-spinner name=\"crescent\"></ion-spinner>\n      </div>\n    </ng-container>\n    \n    <ng-container *ngIf=\"!loading && (!outfits || outfits.length === 0)\">\n    \n      <div class=\"no-outfits\">\n        <div class=\"no-outfit-inner\">\n          <ion-icon name=\"shirt\" color=\"primary\" class=\"no-outfit-icon\"></ion-icon>\n          <div class=\"no-outfit-title\">Geen outfits gevonden</div>\n        </div>\n      </div>\n    \n    </ng-container>\n\n  </ng-container>\n\n  <ion-infinite-scroll (ionInfinite)=\"loadNext($event)\" *ngIf=\"!query\" threshold=\"30%\">\n    <ion-infinite-scroll-content loadingText=\"Meer outfits laden...\"></ion-infinite-scroll-content>\n  </ion-infinite-scroll>\n\n</ng-container>","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpClient, HttpHeaders, HttpParams } from '@angular/common/http';\nimport { CoreService } from './core.service';\nimport { AuthService } from './auth.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CouponService {\n\n  constructor(\n    private authService: AuthService,\n    private http: HttpClient,\n    private coreService: CoreService\n  ) { }\n\n  public checkCoupon(code: string): Observable<any> {\n\n    const headers: HttpHeaders = this.coreService.getHeaders()\n    .set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n\n    const params: HttpParams = new HttpParams()\n    .set('coupon_code', code);\n\n    const requestOptions = {\n      headers: headers,\n      params: params\n    };\n\n    return this.http.get(this.coreService.getBaseUrl() + 'coupon/check', requestOptions);\n\n  }\n\n  public checkPromocode(code: string) {\n\n    const headers: HttpHeaders = this.coreService.getHeaders()\n    .set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n\n    const params: HttpParams = new HttpParams()\n    .set('promocode', code);\n\n    const requestOptions = {\n      headers: headers,\n      params: params\n    };\n\n    return this.http.get(this.coreService.getBaseUrl() + 'promocode/check', requestOptions);\n\n  }\n\n  public checkUniversal(code: string) {\n\n    const headers: HttpHeaders = this.coreService.getHeaders()\n      .set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n\n    const params: HttpParams = new HttpParams()\n      .set('code', code);\n\n    const requestOptions = {\n      headers: headers,\n      params: params\n    };\n\n    return this.http.get(this.coreService.getBaseUrl() + 'coupon/universal/check', requestOptions);\n\n  }\n\n  public getWheelOfFortunes() {\n\n    const headers: HttpHeaders = this.coreService.getHeaders();\n    const params: HttpParams = new HttpParams();\n\n    const requestOptions = {\n      headers: headers,\n      params: params\n    };\n\n    return this.http.get(this.coreService.getBaseUrl() + 'sales/discounting/wheel_of_fortune/get', requestOptions);\n\n  }\n\n  public tryWheelOfFortune(id) {\n\n    let headers: HttpHeaders = this.coreService.getHeaders();\n    const params: HttpParams = new HttpParams().set('wheel_of_fortune_id', id);\n\n    if (this.authService.isAuthenticated()) {\n      headers = headers.set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n    }\n\n    const requestOptions = {\n      headers: headers,\n      params: params\n    };\n\n    return this.http.get(this.coreService.getBaseUrl() + 'sales/discounting/wheel_of_fortune/try', requestOptions);\n\n  }\n\n}\n","import { Component, OnInit, Output, EventEmitter } from '@angular/core';\nimport { Order } from '../../../models/order';\nimport { LoadingController } from '@ionic/angular';\nimport { CouponService } from '../../../services/coupon.service';\nimport { CartService } from '../../../services/cart.service';\n\n@Component({\n  selector: 'rope-coupon-check',\n  templateUrl: './coupon-check.component.html',\n  styleUrls: ['./coupon-check.component.scss'],\n})\nexport class CouponCheckComponent implements OnInit {\n\n  @Output() onDismiss = new EventEmitter();\n\n  public order: Order;\n  public collapseInfo;\n\n  public couponInput: string;\n  public errorMessage: string;\n\n  public selectedCoupon: any;\n  public selectedCode: string;\n\n  public type;\n\n  constructor(\n    public couponService: CouponService,\n    public loadingCtrl: LoadingController,\n    public cartService: CartService,\n  ) {\n\n  }\n\n  ngOnInit() {\n    this.order = this.cartService.getCurrentOrder();\n  }\n\n  public setCouponInput(event: any) {\n    this.couponInput = event.detail.value;\n  }\n\n  public onInput(event: any) {\n    this.checkCoupon();\n  }\n\n  public async checkCoupon() {\n\n    const loading = await this.loadingCtrl.create({\n      spinner: 'crescent',\n      message: 'Kortingscode checken...',\n      showBackdrop: true,\n      backdropDismiss: false\n    });\n\n    await loading.present();\n\n    this.couponService.checkUniversal(this.couponInput).subscribe(r => {\n\n      this.type = r['type'];\n      if (this.type === 'promocode') {\n\n        if (this.order.promocode) {\n          this.errorMessage = 'Je hebt al een promotie code toegevoegd aan deze bestelling, en er kan maar 1 promotie code per bestelling gebruikt worden.';\n          this.selectedCoupon = undefined;\n        } else {\n\n          const res = r['promocode'];\n\n          let total;\n          if (res['type'] === 'VALUE') {\n            total = res['amount'];\n          } else if (res['type'] === 'PERCENTAGE') {\n            total = this.cartService.getTotalCost() * res['amount'];\n          }\n\n          if (res['amount'] > this.cartService.getTotalCost()) {\n            this.errorMessage = 'De waarde van deze promotie (€' + res['amount'] + ') is groter dan het totaal van de bestelling (€' + this.cartService.getTotalCost() + '). Promotie codes kunnen online alleen in een keer opgebruikt worden.';\n            this.selectedCoupon = undefined;\n          } else {\n            this.errorMessage = undefined;\n            this.selectedCoupon = res;\n            this.selectedCoupon['code'] = this.couponInput;\n          }\n\n        }\n\n\n      } else if (this.type === 'coupon') {\n\n        if (this.order.coupon) {\n          this.errorMessage = 'Je hebt al een kortingskaart toegevoegd aan deze bestelling, en er kan maar 1 kortingskaart per bestelling gebruikt worden.';\n          this.selectedCoupon = undefined;\n        } else {\n\n          const res = r['coupon'];\n          if (res.value > this.cartService.getTotalCost()) {\n            this.errorMessage = 'De waarde van deze kortingsbon (€' + res.value + ') is groter dan het totaal van de bestelling (€' + this.cartService.getTotalCost() + '). Kortingsbonnen kunnen online alleen in een keer opgebruikt worden.';\n            this.selectedCoupon = undefined;\n          } else {\n            this.errorMessage = undefined;\n            this.selectedCoupon = res;\n            this.selectedCoupon['coupon_code'] = this.couponInput;\n          }\n\n        }\n\n      }\n\n      loading.dismiss();\n\n    }, (error) => {\n      this.selectedCoupon = undefined;\n      this.errorMessage = error.error.localized_message;\n      loading.dismiss();\n    });\n\n  }\n\n  public useCoupon() {\n\n    if (this.type === 'promocode') {\n      this.cartService.setPromoCode(this.selectedCoupon);\n      this.onDismiss.emit();\n    } else if (this.type === 'coupon') {\n      this.cartService.setCoupon(this.selectedCoupon);\n      this.onDismiss.emit();\n    }\n\n  }\n\n  public getCouponType() {\n    if (this.selectedCoupon.coupon_type === 'GIFTCARD') {\n      return 'Kadobon';\n    } else if (this.selectedCoupon.coupon_type === 'VOUCHER') {\n      return 'Tegoedbon';\n    }\n  }\n\n}\n","<div class=\"blocks\">\n\n  <div class=\"block\">\n    <rope-text-block title=\"Een kortingscode gebruiken\" htmlContent=\"Vul hieronder de kortingscode in. Promotie codes kun je vinden op onze social media of op een flyer uit een van onze\n          winkels. Gewone kortingscodes komen in de vorm van een tegoedbon of cadeaubon.\"></rope-text-block>\n  </div>\n\n  <div class=\"block\">\n\n    <ion-card-content>\n      <p class=\"ion-text-center\">\n        <b>Vul hieronder je code in</b>\n      </p>\n      <ion-searchbar (ionChange)=\"setCouponInput($event)\" (keyup.enter)=\"onInput($event)\" placeholder=\"Kortingscode\">\n      </ion-searchbar>\n      <ion-button expand=\"block\" (click)=\"checkCoupon()\">Checken</ion-button>\n\n      <ng-container *ngIf=\"errorMessage\">\n        <div class=\"error-card\">\n          <ion-icon name=\"card\"></ion-icon>\n          <div class=\"card-header\">{{ errorMessage }}</div>\n          <br>\n          <p>Probeer het a.u.b. opnieuw. Mocht het dan niet lukken, neem dan contact op met onze klantenservice. Wij\n            helpen\n            je graag!</p>\n        </div>\n      </ng-container>\n\n      <ng-container *ngIf=\"type === 'promocode' && selectedCoupon\">\n\n        <div class=\"coupon-card\">\n          <ion-icon name=\"card\"></ion-icon>\n          <p>We hebben de volgende promotiecode gevonden:</p>\n          <h1 *ngIf=\"selectedCoupon.type === 'VALUE'\" text-wrap>Promotie code {{ selectedCoupon.code }} t.w.v.\n            {{ selectedCoupon.amount | currency:'EUR':'symbol' }}</h1>\n          <h1 *ngIf=\"selectedCoupon.type === 'PERCENTAGE'\" text-wrap>Promotie code {{ selectedCoupon.code }} t.w.v.\n            {{ selectedCoupon.amount * 100 }}%</h1>\n          <br />\n          <ion-button (click)=\"useCoupon()\">Voeg toe aan bestelling</ion-button>\n        </div>\n\n      </ng-container>\n\n      <ng-container *ngIf=\"type === 'coupon' && selectedCoupon\">\n\n        <div class=\"coupon-card\">\n          <ion-icon name=\"card\"></ion-icon>\n          <p>We hebben de volgende kortingskaart gevonden:</p>\n          <h1>{{ getCouponType() }} t.w.v. {{ selectedCoupon.value | currency:'EUR':'symbol' }}</h1>\n          <br />\n          <ion-button (click)=\"useCoupon()\">Voeg toe aan bestelling</ion-button>\n        </div>\n\n      </ng-container>\n\n    </ion-card-content>\n\n  </div>\n\n</div>\n","import { Injectable } from '@angular/core';\nimport { CoreService } from './core.service';\nimport { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\nimport { AuthService } from './auth.service';\nimport { Observable } from 'rxjs';\nimport { Appointment } from '../models/appointment';\n\n@Injectable({\n  providedIn: \"root\",\n})\nexport class AppointmentService {\n  constructor(\n    public coreService: CoreService,\n    public http: HttpClient,\n    public authService: AuthService\n  ) {}\n\n  public getByType(\n    type: string,\n    timestamp_start: number,\n    timestamp_end: number\n  ): Observable<any[]> {\n    const params: HttpParams = new HttpParams()\n      .set(\"appointment_type\", type)\n      .set(\"timestamp_start\", timestamp_start.toString())\n      .set(\"timestamp_end\", timestamp_end.toString());\n\n    const headers: HttpHeaders = this.coreService.getHeaders();\n\n    const requestOptions = {\n      params: params,\n      headers: headers,\n    };\n\n    return this.http.get<any[]>(\n      this.coreService.getBaseUrl() + \"appointment/get\",\n      requestOptions\n    );\n  }\n\n  public getTypes(\n    type?: string,\n  ): Observable<any[]> {\n    const params: HttpParams = new HttpParams()\n      .set(\"appointment_type\", type);\n\n    const headers: HttpHeaders = this.coreService.getHeaders();\n\n    const requestOptions = {\n      params: params,\n      headers: headers,\n    };\n\n    return this.http.get<any[]>(\n      this.coreService.getBaseUrl() + \"appointment/type/get\",\n      requestOptions\n    );\n  }\n\n  public getByTypeAndBranch(\n    type: string,\n    branchId,\n    timestamp_start: number,\n    timestamp_end: number\n  ): Observable<any[]> {\n    const params: HttpParams = new HttpParams()\n      .set(\"appointment_type\", type)\n      .set(\"timestamp_start\", timestamp_start.toString())\n      .set(\"timestamp_end\", timestamp_end.toString())\n      .set(\"branch_id\", branchId);\n\n    const headers: HttpHeaders = this.coreService.getHeaders();\n\n    const requestOptions = {\n      params: params,\n      headers: headers,\n    };\n\n    return this.http.get<any[]>(\n      this.coreService.getBaseUrl() + \"appointment/get\",\n      requestOptions\n    );\n  }\n\n  public cancel(appointment: Appointment) {\n    const headers: HttpHeaders = this.coreService\n      .getHeaders()\n      .set(\"X-KiBa-Auth\", this.authService.getCurrentUser().authHeader);\n    const requestOptions = {\n      headers: headers,\n    };\n\n    return this.http.get<any[]>(\n      this.coreService.getBaseUrl() +\n        \"appointment/cancel?appointment_id=\" +\n        appointment.id,\n      requestOptions\n    );\n  }\n\n  public post(appointment: Appointment) {\n    const headers: HttpHeaders = this.coreService.getHeaders();\n    const requestOptions = {\n      headers: headers,\n    };\n\n    return this.http.post<Appointment>(\n      this.coreService.getBaseUrl() + \"appointment/post\",\n      \"appointment=\" + JSON.stringify(appointment),\n      requestOptions\n    );\n  }\n}\n","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Blog } from '../models/blog';\nimport { HttpParams, HttpClient } from '@angular/common/http';\nimport { CoreService } from './core.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class BlogService {\n\n  constructor(\n    private coreService: CoreService,\n    private http: HttpClient\n  ) { }\n\n  public get(query, page, limit): Observable<Blog[]> {\n\n    const params: HttpParams = new HttpParams()\n    .set('q', query)\n    .set('page', page)\n    .set('limit', limit);\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders()\n    };\n\n    return this.http.get<Blog[]>(this.coreService.getBaseUrl() + 'blog/get', requestOptions);\n\n  }\n\n  public getOne(id): Observable<Blog[]> {\n\n    const params: HttpParams = new HttpParams()\n    .set('blog_id', id);\n\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders()\n    };\n\n    return this.http.get<Blog[]>(this.coreService.getBaseUrl() + 'blog/get', requestOptions);\n\n  }\n\n  public triggerView(id) {\n\n    const params: HttpParams = new HttpParams().set('blog_id', id.toString());\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders()\n    };\n    return this.http.get<any>(this.coreService.getBaseUrl() + 'blog/view', requestOptions);\n\n  }\n\n  public likeBlog(id) {\n\n    const params: HttpParams = new HttpParams().set('blog_id', id.toString());\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders()\n    };\n    return this.http.get<any>(this.coreService.getBaseUrl() + 'blog/like', requestOptions);\n\n  }\n\n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpParams, HttpHeaders } from '@angular/common/http';\nimport { CoreService } from './core.service';\nimport { Observable } from 'rxjs';\nimport { AuthService } from './auth.service';\nimport { tap, map } from 'rxjs/operators';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class EventService {\n\n  constructor(\n    private http: HttpClient,\n    private coreService: CoreService,\n    private authService: AuthService\n  ) { }\n\n  public getUpcomingEvents(): Observable<any[]> {\n\n    const headers: HttpHeaders = this.coreService.getHeaders();\n    const requestOptions = {\n      headers: headers,\n    };\n\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'event/latest', requestOptions).pipe(\n      map(r => {\n        const unique = (value, index, self) => {\n          return self.findIndex(i => i.id === value.id) === index;\n        };\n        return r.filter(unique);\n      })\n    );\n  }\n\n  public getOne(id): Observable<any[]> {\n    const headers: HttpHeaders = this.coreService.getHeaders();\n    const requestOptions = {\n      headers: headers,\n    };\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'event/latest?event_id=' + id, requestOptions);\n  }\n\n  public signUp(eventId, customerId, name?, email?) {\n\n    let params: HttpParams = new HttpParams()\n    .set('event_id', eventId);\n    \n    if (customerId) {\n      params = params.set('customer_id', customerId);\n    }\n\n    const data = {} as any;\n    if (name) {\n      data.name = name;\n      data.email = email;\n    }\n\n    let headers: HttpHeaders = this.coreService.getHeaders();\n    if (customerId) {\n      headers = headers.set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n    }\n\n    const requestOptions = {\n      params: params,\n      headers: headers\n    };\n\n    return this.http.post<any[]>(this.coreService.getBaseUrl() + 'event/sign_up', JSON.stringify(data), requestOptions);\n\n  }\n\n}\n","import { Injectable } from '@angular/core';\ninterface Scripts {\n  name: string;\n  src: string;\n}\nexport const ScriptStore: Scripts[] = [\n  { name: 'chart.js', src: 'https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.9.1/chart.min.js' },\n  { name: 'chartjs-plugin-datalabels', src: 'https://cdnjs.cloudflare.com/ajax/libs/chartjs-plugin-datalabels/2.1.0/chartjs-plugin-datalabels.min.js' }\n];\n@Injectable({\n  providedIn: 'root'\n})\nexport class ScriptService {\n\n  private scripts: any = {};\n\n  constructor() {\n\n    ScriptStore.forEach((script: any) => {\n      this.scripts[script.name] = {\n        loaded: false,\n        src: script.src\n      };\n    });\n\n  }\n\n  load(...scripts: string[]) {\n\n    const promises: any[] = [];\n    scripts.forEach((script) => promises.push(this.loadScript(script)));\n    return Promise.all(promises);\n\n  }\n\n  loadScript(name: string) {\n\n    return new Promise((resolve, reject) => {\n\n      if (this.scripts[name].loaded) {\n        resolve({ script: name, loaded: true, status: 'Already Loaded' });\n      } else {\n\n        const script = document.createElement('script');\n        script.type = 'text/javascript';\n        script.src = this.scripts[name].src;\n        script.onload = () => {\n          this.scripts[name].loaded = true;\n          resolve({ script: name, loaded: true, status: 'Loaded' });\n        };\n        script.onerror = (error: any) => resolve({ script: name, loaded: false, status: 'Loaded' });\n        document.getElementsByTagName('head')[0].appendChild(script);\n\n      }\n      \n    });\n\n  }\n\n}","import { Injectable } from '@angular/core';\nimport { CoreService } from './core.service';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { AuthService } from './auth.service';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class LoyaltyService {\n\n  constructor(\n    private coreService: CoreService,\n    private http: HttpClient,\n    public authService: AuthService\n  ) { }\n\n  getGiftCategories(): Observable<any[]> {\n    const headers = this.coreService.getHeaders();\n    const requestOptions = {\n      headers: headers\n    };\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'loyalty/gift_categories', requestOptions);\n  }\n\n  getLoyaltyGiftTransactionsCount() {\n\n    const headers = this.coreService.getHeaders().set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n    const requestOptions = {\n      headers: headers,\n    };\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'loyalty/gifts/transactions/count', requestOptions);\n\n  }\n\n  getLoyaltyGiftTransactions() {\n\n    const headers = this.coreService.getHeaders().set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n    const requestOptions = {\n      headers: headers,\n    };\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'loyalty/gifts/transactions', requestOptions);\n\n  }\n\n  getOneGift(id: number) {\n    const headers = this.coreService.getHeaders();\n    let params: HttpParams = new HttpParams().set('loyalty_gift_id', id.toString());\n    const requestOptions = {\n      headers: headers,\n      params: params\n    };\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'loyalty/gifts', requestOptions);\n  }\n\n  claimGift(id: number) {\n    const headers = this.coreService.getHeaders()\n      .set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n\n    let params: HttpParams = new HttpParams().set('loyalty_gift_id', id.toString());\n    const requestOptions = {\n      headers: headers,\n      params: params\n    };\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'loyalty/gifts/claim', requestOptions);\n  }\n\n  scanGift(secretCode, cardCode) {\n    const headers = this.coreService.getHeaders()\n      .set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader);\n\n    let params: HttpParams = new HttpParams().set('card_code', cardCode).set('secret_code', secretCode);\n    const requestOptions = {\n      headers: headers,\n      params: params\n    };\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'loyalty/gifts/scan', requestOptions);\n  }\n\n  getAvailableGifts(filter?, sort?): Observable<any[]> {\n    const headers = this.coreService.getHeaders();\n\n    let params: HttpParams = new HttpParams();\n    if (filter) {\n      params = params.set('filter_category', filter.id);\n    }\n\n    if (sort) {\n      params = params.set('sort', sort.value);\n    }\n\n    const requestOptions = {\n      headers: headers,\n      params: params\n    };\n\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'loyalty/gifts', requestOptions);\n  }\n  \n}\n","import { Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\nimport { CoreService } from './core.service';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class WebsiteService {\n\n  constructor(\n    private http: HttpClient,\n    private coreService: CoreService,\n  ) { }\n  \n  public getBanners(): Observable<any[]> {\n    const requestOptions = {\n      headers: this.coreService.getHeaders()\n    };\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'website/banner', requestOptions);\n  }\n\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { LoadingController, ModalController } from '@ionic/angular';\nimport { AuthService } from '../../../services/auth.service';\nimport { CartService } from '../../../services/cart.service';\nimport { CoreService } from '../../../services/core.service';\nimport { CouponService } from '../../../services/coupon.service';\n\n@Component({\n  selector: 'lib-newsletter-signup-modal',\n  templateUrl: './newsletter-signup-modal.component.html',\n  styleUrls: ['./newsletter-signup-modal.component.scss']\n})\nexport class NewsletterSignupModalComponent implements OnInit {\n\n  @Input() public newsletter;\n\n  public email;\n  public couponCode;\n  public subscribeSuccess = false;\n  public loading = false;\n\n  constructor(\n    public authService: AuthService,\n    public modalCtrl: ModalController,\n    public loadingCtrl: LoadingController,\n    public coreService: CoreService,\n    public cartService: CartService,\n    public couponService: CouponService\n  ) { }\n\n  ngOnInit(): void {\n    if (this.authService.isAuthenticated()) {\n      this.email = this.authService.getCurrentUser()['username'];\n    }\n  }\n\n  public dismiss() {\n    this.modalCtrl.dismiss();\n  }\n\n  public async subscribeToNewsletter() {\n\n    const mail = this.email;\n    const re = /\\S+@\\S+\\.\\S+/;\n    const valid = re.test(mail);\n    if (valid) {\n\n      this.loading = true;\n\n      this.coreService.subcribeToNewsletter(this.newsletter.identifier, mail).subscribe(r => {\n        this.loading = false;\n        this.subscribeSuccess = true;\n        this.couponCode = r.coupon_code;\n\n      }, error => {\n        this.loading = false;\n        this.coreService.showAlert(error);\n      });\n\n    } else {\n      this.coreService.showAlert('Er lijkt een fout te zitten in het ingevulde e-mailadres.');\n    }\n\n  }\n\n  public addCouponCodeToOrder() {\n\n    this.couponService.checkUniversal(this.couponCode).subscribe(r => {\n      const coupon = r['coupon'];\n      coupon['coupon_code'] = this.couponCode;\n      this.cartService.setCoupon(coupon);\n    });\n\n    this.dismiss();\n\n  }\n\n}\n","<ion-header>\n    <ion-toolbar color=\"tertiary\">\n        <ion-title class=\"r-h1\">Inschrijven nieuwsbrief</ion-title>\n        <ion-buttons slot=\"end\">\n            <ion-button (click)=\"dismiss()\">\n                <ion-icon name=\"close-circle-outline\" slot=\"icon-only\"></ion-icon>\n            </ion-button>\n        </ion-buttons>\n    </ion-toolbar>\n</ion-header>\n\n<ion-content class=\"ion-padding\">\n\n    <ng-container *ngIf=\"!loading && !subscribeSuccess\">\n\n        <div style=\"font-size: 1.3rem;\" [innerHTML]=\"newsletter.description\"></div>\n\n        <ion-item style=\"margin-top: 25px; margin-bottom: 15px;\">\n            <ion-label position=\"stacked\" style=\"color: black !important;\">E-mailadres</ion-label>\n            <ion-input [(ngModel)]=\"email\" class=\"r-privacy-field\" type=\"email\"></ion-input>\n        </ion-item>\n\n        <div class=\"ion-text-center\">\n            <ion-button (click)=\"subscribeToNewsletter()\" [disabled]=\"!email\" color=\"cta\"\n                expand=\"block\" size=\"large\" class=\"ion-text-wrap\">\n                <div style=\"font-family: 'Source Sans Pro', sans-serif;\">Aanmelden</div>\n                <ion-icon name=\"arrow-forward-circle-outline\" slot=\"end\" style=\"font-size: 2.0rem;\"></ion-icon>\n            </ion-button>\n        </div>\n\n    </ng-container>\n\n    <ng-container *ngIf=\"loading\">\n\n        <div class=\"r-flex r-flex-h-center r-flex-v-center\" style=\"width: 100%; height: 200px;\">\n            <ion-spinner name=\"crescent\"></ion-spinner>\n        </div>\n\n    </ng-container>\n\n    <ng-container *ngIf=\"!loading && subscribeSuccess\">\n\n        <div class=\"ion-text-center\" *ngIf=\"couponCode\">\n\n            <div class=\"r-h1\" style=\"margin-top: 5px;\">Yes! Ingeschreven!</div>\n            <div style=\"font-size: 1.3rem; margin-top: 10px;\">\n                Je bent nu ingeschreven voor onze nieuwsbrief. Hieronder een klein cadeautje om je hiervoor te bedanken.<br><br>\n                Gebruik deze code voor {{ newsletter.promo_value | currency:'EUR':'symbol' }} korting op je volgende bestelling! Je ontvangt deze ook in je mail.\n            </div>\n\n            <div class=\"r-h0\" style=\"margin-top: 15px;\">{{ couponCode }}</div>\n\n            <ion-button color=\"secondary\" (click)=\"addCouponCodeToOrder()\">\n                <ion-icon name=\"add-circle-outline\" slot=\"start\"></ion-icon>\n                <div style=\"font-family: 'Source Sans Pro', sans-serif;\">Voeg code toe aan bestelling</div>\n            </ion-button>\n\n        </div>\n\n        <div class=\"ion-text-center\"  *ngIf=\"!couponCode\">\n\n            <div class=\"r-h1\" style=\"margin-top: 5px;\">Yes! Ingeschreven!</div>\n            <div style=\"font-size: 1.3rem; margin-top: 10px;\">\n                Je bent nu ingeschreven voor onze nieuwsbrief.<br><br>We zien dat je ons cadeautje voor inschrijving al eens hebt ontvangen. Klopt dit niet? Neem dan even contact met ons op.\n            </div>\n\n        </div>\n\n    </ng-container>\n\n</ion-content>","import { Component, ElementRef, OnInit, ViewChild } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\nimport { lastValueFrom } from 'rxjs';\nimport { CartService } from '../../../services/cart.service';\nimport { CoreService } from '../../../services/core.service';\nimport { CouponService } from '../../../services/coupon.service';\nimport { ScriptService } from '../../../services/script.service';\nimport { StorageService } from '../../../services/storage.service';\n\ndeclare let Chart: any;\ndeclare let ChartDataLabels: any;\n\n@Component({\n  selector: 'rope-spin-the-wheel',\n  templateUrl: './spin-the-wheel.component.html',\n  styleUrls: ['./spin-the-wheel.component.scss']\n})\nexport class SpinTheWheelComponent implements OnInit {\n\n  @ViewChild('behind') behind: ElementRef;\n\n  public wheelOfFortune;\n  public segments;\n  public chosenSegment;\n\n  public spinning;\n  public chartLoaded = false;\n\n  public wheelOpacity = 0.0;\n\n  constructor(\n    private coreService: CoreService,\n    private couponService: CouponService,\n    private cartService: CartService,\n    private modalCtrl: ModalController,\n    private storageService: StorageService,\n    private scriptService: ScriptService\n  ) { \n    \n  }\n\n  async ngOnInit() {\n    await this.scriptService.load('chart.js');\n    await this.scriptService.load('chartjs-plugin-datalabels');\n  }\n  \n  ngAfterViewInit() {\n    setTimeout(() => this.setupWheel(), 1500);\n  }\n\n  public async setupWheel() {\n\n    const wheelOfFortunes = await lastValueFrom(this.couponService.getWheelOfFortunes());\n    this.wheelOfFortune = wheelOfFortunes[0];\n\n    this.segments = this.wheelOfFortune.wheel_of_fortune_segments;\n    const totalChance = this.segments.reduce((a,b) => a + b.chance_weight, 0);\n\n    let currentDegree = 0;\n    this.segments.forEach(s => {\n\n      let minDegree = currentDegree === 0 ? currentDegree : currentDegree+1;\n      let maxDegree = minDegree + Math.floor(s.chance_weight / totalChance * 360);\n\n      s.minDegree = minDegree;\n      s.maxDegree = maxDegree;\n      currentDegree = maxDegree;\n\n    });\n\n    const data = this.segments.map(s => s.chance_weight);\n    const labels = this.segments.map(s => s.label);\n    const pieColors = this.segments.map(s => s.color || this.getRandomColor(s));\n\n    const wheel = document.getElementById(\"wheel\");\n    const spinBtn = document.getElementById(\"spin-btn\");\n\n    let myChart = new Chart(wheel, {\n      plugins: [ChartDataLabels],\n      type: \"pie\",\n      data: {\n        labels: labels,\n        datasets: [\n          {\n            borderColor: ['#565656'],\n            borderWidth: 0.5,\n            backgroundColor: pieColors,\n            data: data,\n          },\n        ],\n      },\n      options: {\n        events: [],\n        responsive: true,\n        animation: { duration: 0 },\n        plugins: {\n          tooltip: false,\n          legend: {\n            display: false,\n          },\n          datalabels: {\n            color: \"#000000\",\n            formatter: (_, context) => context.chart.data.labels[context.dataIndex],\n            font: { size: 16, weight: 'bold' },\n            anchor: 'end',\n            align: 'start'\n          },\n        },\n      },\n    });\n    this.chartLoaded = true;\n    setTimeout(() => this.wheelOpacity = 1.0, 200);\n\n    spinBtn.addEventListener(\"click\", async () => {\n\n      spinBtn.setAttribute('style', 'transform: scale(0.0)');\n      this.spinning = true;\n      myChart.options.rotation = 0;\n      spinBtn['disabled'] = true;\n\n      let count = 0;\n      let resultValue = 0;\n\n      const speed = 500;\n      const limit = 752;\n\n      let segmentToPick;\n      const segmentFromStorage = await this.storageService.get('wheel_try_' + this.wheelOfFortune.id);\n      if (!segmentFromStorage) {\n        let segmentFromAPI = await lastValueFrom(this.couponService.tryWheelOfFortune(this.wheelOfFortune.id));\n        await this.storageService.set('wheel_try_'+this.wheelOfFortune.id, segmentFromAPI);\n        segmentToPick = segmentFromAPI;\n      } else {\n        segmentToPick = segmentFromStorage;\n      }\n\n      const segment = this.segments.find(s => s.id === segmentToPick['wheel_of_fortune_segment'].id);\n      this.chosenSegment = segment;\n      this.chosenSegment.promocode = segmentToPick.wheel_of_fortune_segment.promocode;\n      this.chosenSegment.wheel_of_fortune_try_id = segmentToPick.id;\n      this.chosenSegment.secret = segmentToPick.secret;\n\n      const segmentSize = segment.maxDegree - segment.minDegree;\n      const segmentSafeZone = [segment.minDegree + 0.4*segmentSize, segment.maxDegree - 0.4*segmentSize];\n      const randomExtra = 360 - this.generateRandomInteger(segmentSafeZone[0], segmentSafeZone[1]);\n\n      let rotationInterval = window.setInterval(() => {\n\n        myChart.options.rotation = myChart.options.rotation + resultValue;\n        this.behind.nativeElement.setAttribute('style', 'transform: rotate(' + myChart.options.rotation +'deg)');\n        myChart.update();\n\n        count += 1;\n        const rotateAdder = speed / count;\n        resultValue = rotateAdder + randomExtra / limit;\n        \n        if (count >= limit) {\n          clearInterval(rotationInterval);\n          this.playEndAnimation(myChart, spinBtn, resultValue)\n        }\n\n      }, 10);\n\n    });\n\n  }\n\n  public playEndAnimation(chart, spinBtn, currentSpeed) {\n\n    //Must go one extra round in which the wheel slows down\n    if (currentSpeed < 1.0) {\n      currentSpeed = 1.0;\n    }\n    let degreesToGo = 360;\n\n    let rotationInterval = window.setInterval(() => {\n\n      if (degreesToGo < 0) {\n        clearInterval(rotationInterval);\n        this.cartService.setWheelOfFortuneSigning(this.chosenSegment.wheel_of_fortune_try_id+'_'+this.chosenSegment.secret);\n        this.cartService.setPromoCode(this.chosenSegment.promocode);\n        this.spinning = false;\n      }\n\n      currentSpeed = currentSpeed*0.998;\n      const rotation = currentSpeed;\n      chart.options.rotation = chart.options.rotation + rotation;\n      this.behind.nativeElement.setAttribute('style', 'transform: rotate(' + chart.options.rotation + 'deg)');\n      chart.update();\n\n      degreesToGo -= rotation;\n\n    }, 10);\n\n  }\n\n  public generateRandomInteger(min, max) {\n    return Math.floor(min + Math.random() * (max - min + 1))\n  }\n\n  public getRandomColor(segment) {\n\n    const existingSegment = this.segments.find(s => s.discount_percentage === segment.discount_percentage && s.colorSelected);\n    if (existingSegment) {\n      return existingSegment.colorSelected;\n    } else {\n\n      const metas = this.coreService.websiteMeta;\n      const colorTypes = ['tertiary'];\n\n      let pieColors = [];\n      for (let cl of colorTypes) {\n        const meta = metas.find(m => m.key_ === 'theme_' + cl + '_color');\n        if (meta) {\n          pieColors.push(meta.value_);\n          pieColors.push(this.coreService.shadeColor(meta.value_, 1.25));\n          pieColors.push(this.coreService.shadeColor(meta.value_, 0.93));\n          pieColors.push(this.coreService.shadeColor(meta.value_, 1.55));\n        }\n      }\n\n      let color = pieColors.filter(c => !(this.segments as any[]).some(d => d.colorSelected === c))[0];\n      if (!color) {\n        color = '#ffffff';\n      }\n\n      segment.colorSelected = color;\n      return color;\n\n    }\n\n  }\n\n  public close() {\n    this.modalCtrl.dismiss();\n  }\n\n}\n","<ion-content>\n\n    <ion-button (click)=\"close()\" expand=\"full\" color=\"tertiary\" [disabled]=\"spinning\">\n        <div class=\"r-h2\">Sluiten</div>\n    </ion-button>\n\n    <div class=\"wheel-container\">\n\n        <div style=\"padding: 3em;\">\n            <div style=\"background-color: #f1f1f1; border-radius: 5px; padding: 10px;\">\n                <div class=\"r-h1\">Spin the wheel!</div>\n                <div class=\"r-h2\">... en win geweldige prijzen!</div>\n                <div class=\"r-h3\" style=\"margin-top: 15px;\">\n                    Je kunt hieronder <b>één keer</b> aan het rad draaien. Het percentage dat het rad na het draaien aangeeft, krijg je als korting op je te plaatsen bestelling. Je gewonnen prijs wordt direct als een kortingscode toegevoegd aan je bestelling.\n                    <br><br>\n                    Nog een keer draaien zal resulteren in hetzelfde resultaat. We wensen je veel succes!\n                </div>\n            </div>\n        </div>\n\n        <div *ngIf=\"!chartLoaded\" style=\"width: 100%; height: 300px; display: flex; align-items: center; justify-content: center;\">\n            <ion-spinner name=\"crescent\"></ion-spinner>\n        </div>\n\n        <div style=\"padding: 3em;\" class=\"ion-text-center\" *ngIf=\"chartLoaded\">\n            <div class=\"r-h1\" style=\"font-size: 4rem !important;\" *ngIf=\"wheelOfFortune\">\n                {{ wheelOfFortune.name }}\n            </div>\n        </div>\n\n        <div class=\"wrapper\" [ngStyle]=\"{ 'opacity': wheelOpacity }\">\n\n            <div class=\"container\">\n                <div class=\"behind\" #behind *ngIf=\"chartLoaded\">\n                    <div class=\"behind-container\">\n                        <div class=\"behind-circle\" *ngFor=\"let segment of segments; let i = index;\" [ngClass]=\"'bc'+(i+1)\"></div>\n                    </div>\n                </div>\n                <canvas id=\"wheel\"></canvas>\n                <button id=\"spin-btn\" class=\"center-it\">\n                    <ng-container *ngIf=\"!spinning\">SPIN</ng-container>\n                    <ng-container *ngIf=\"spinning\">\n                        <ion-spinner name=\"crescent\" color=\"light\"></ion-spinner>\n                    </ng-container>\n                </button>\n                <div class=\"icon-holder\">\n                    <ion-icon style=\"font-size: 6rem; transform: scaleY(2);\" color=\"secondary\" name=\"caret-down\"></ion-icon>\n                </div>\n            </div>\n\n        </div>\n\n        <div style=\"padding: 3em;\" class=\"ion-text-center\" *ngIf=\"chartLoaded\">\n            <div class=\"r-h2\" *ngIf=\"!chosenSegment\">\n                Je hebt nog niet gedraaid.\n            </div>\n            <div class=\"r-h2\" *ngIf=\"chosenSegment && spinning\">\n                &nbsp;\n            </div>\n            <div class=\"r-h2\" *ngIf=\"chosenSegment && !spinning\">\n                Je hebt <b>{{ chosenSegment.discount_percentage | percent }} korting</b> gedraaid, gefeliciteerd!<br>\n                Korting is automatisch toegepast op de website.\n            </div>\n        </div>\n\n    </div>\n\n    <ion-button (click)=\"close()\" expand=\"full\" color=\"tertiary\" [disabled]=\"spinning\" style=\"margin-bottom: 150px;\">\n        <div class=\"r-h2\">Sluiten</div>\n    </ion-button>\n\n</ion-content>","import { Injectable } from '@angular/core';\nimport { CoreService } from './core.service';\nimport { HttpClient, HttpParams } from '@angular/common/http';\nimport { Observable } from 'rxjs';\nimport { MockService } from './mock.service';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class CampaignService {\n\n  public activeCampaign;\n\n  constructor(\n    private coreService: CoreService,\n    private mockService: MockService,\n    private http: HttpClient\n  ) { }\n\n  public async ready() {\n\n    if (this.coreService.isOfflineMode()) {\n\n      this.mockService.httpEmptyResponse().subscribe(r => {\n        this.activeCampaign = r[0];\n        return Promise.resolve(true);\n      });\n\n    } else {\n\n      this.activeCampaign = this.coreService.initObject.latest_campaign;\n      if (this.activeCampaign) {\n\n        let page = this.coreService.getAllPagesMap().find((p) => p.template === \"LATEST_CAMPAIGN\");\n        if (page) {\n          page = {\n            id: page.id,\n            title: \"Campagne: \" + this.activeCampaign.name,\n            url: \"campaign/\" + this.activeCampaign.id,\n            icon: \"shirt-outline\",\n            auth: 0,\n            useInDesktopHeader: true,\n            desktopHeaderSortIndex: 0,\n            data: {\n              category: undefined,\n            }\n          }\n          this.coreService.replacePage(page);\n        }\n\n      }\n\n      return Promise.resolve(true);\n    }\n\n  }\n\n  public getLatestActive(): Observable<any[]> {\n\n    const params: HttpParams = new HttpParams()\n      .set('is_active', '1');\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders()\n    };\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'campaign/get?latest=1', requestOptions);\n\n  }\n\n  public getOne(id): Observable<any[]> {\n\n    const params: HttpParams = new HttpParams()\n      .set('campaign_id', id);\n    const requestOptions = {\n      params: params,\n      headers: this.coreService.getHeaders()\n    };\n    return this.http.get<any[]>(this.coreService.getBaseUrl() + 'campaign/get', requestOptions);\n\n  }\n\n}\n","import { Component, OnInit, Input, Output, EventEmitter, isDevMode } from '@angular/core';\nimport { AlertController, ModalController, Platform, ToastController } from '@ionic/angular';\nimport { AuthService } from '../../../services/auth.service';\nimport { CoreService } from '../../../services/core.service';\nimport { CartService } from '../../../services/cart.service';\nimport { OutfitService } from '../../../services/outfit.service';\nimport { StorageService } from '../../../services/storage.service';\nimport { CookieConsentService } from '../../../services/cookie.service';\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport { BranchService } from '../../../services/branch.service';\nimport { CampaignService } from '../../../services/campaign.service';\nimport { OptionService } from '../../../services/option.service';\nimport * as WebFont from 'webfontloader';\nimport { NewsletterSignupModalComponent } from '../../misc/newsletter-signup-modal/newsletter-signup-modal.component';\nimport { lastValueFrom } from 'rxjs';\nimport { CurrencyPipe } from '@angular/common';\nimport { ShipmentService } from '../../../services/shipment.service';\nimport { SpinTheWheelComponent } from '../../misc/spin-the-wheel/spin-the-wheel.component';\nimport { CouponService } from '../../../services/coupon.service';\n\n@Component({\n  selector: 'rope-initialize',\n  templateUrl: './initialize.component.html',\n  styleUrls: ['./initialize.component.scss']\n})\nexport class InitializeComponent implements OnInit {\n\n  @Input() offlineMode = false;\n\n  @Input() mainTitle;\n  @Input() storeUuid;\n  @Input() storage;\n  @Input() elementRef;\n  @Output() ready = new EventEmitter();\n\n  public isDevMode = false;\n  public showDev = false;\n  public version;\n\n  public wheelOfFortunes;\n  public hideWheelOfFortune = true;\n  public hideSmallWheel = true;\n\n  constructor(\n    public plt: Platform,\n    public storageService: StorageService,\n    public authService: AuthService,\n    public coreService: CoreService,\n    public couponService: CouponService,\n    public cartService: CartService,\n    public outfitService: OutfitService,\n    public shipmentService: ShipmentService,\n    public cookieConsentService: CookieConsentService,\n    public analyticsService: AnalyticsService,\n    public branchService: BranchService,\n    public campaignService: CampaignService,\n    public optionService: OptionService,\n    public toastController: ToastController,\n    public alertCtrl: AlertController,\n    public modalController: ModalController,\n    private currencyPipe: CurrencyPipe\n  ) { }\n\n  ngOnInit(): void {\n\n    this.isDevMode = isDevMode();\n\n    const startTime = new Date().getTime();\n    this.initServices(this.storage, this.storeUuid).then(() => {\n      this.ready.emit();\n      console.log('Initialize -- Website ready in ' + (new Date().getTime() - startTime) + ' ms');\n    });\n    \n  }\n\n  public async initServices(storage, storeUuid) {\n\n    await this.plt.ready();\n    await this.storageService.init(storage, storeUuid);\n\n    // Set dev mode\n    if (this.isDevMode) {\n      this.version = await this.storageService.get('dev_version');\n      this.coreService.setVersion(this.version);\n      this.showDevMode();\n    }\n\n    await this.coreService.ready(storeUuid, this.offlineMode);\n    this.cookieConsentService.ready();\n\n    this.coreService.setMainTitle(this.mainTitle);\n    this.coreService.setLoyaltyColor(this.coreService.store.loyalty_color || this.coreService.store.theme_color);\n\n    this.authService.ready();\n    this.setTheme();\n    // this.checkNewsletterPopup();\n\n    //Setup algolia token\n    this.analyticsService.ready();\n    const user = this.authService.getCurrentUser();\n    this.analyticsService.setAlgoliaUserToken(user);\n\n    this.showWheelOfFortune();\n\n    this.coreService.initObjectLoaded.subscribe(r => {\n      if (r) {\n        this.shipmentService.ready();\n        this.branchService.ready();\n        this.campaignService.ready();\n        this.cartService.ready();\n        this.optionService.ready();\n        this.outfitService.ready();\n      }\n    });\n    \n    return Promise.resolve(true);\n\n  }\n\n  public showDevMode() {\n\n    setTimeout(() => {\n      if (this.isDevMode && isDevMode()) {\n        this.showDev = true;\n      }\n    }, 5000);\n\n  }\n\n  public setTheme() {\n\n    const metas = this.coreService.websiteMeta;\n    const style = this.elementRef.nativeElement.ownerDocument.body.style;\n\n    const colorTypes = ['primary', 'secondary', 'tertiary', 'cta'];\n\n    if (!metas.find(m => m.key_ === 'theme_cta_color')) {\n      const ctaMeta = {\n        key_: 'theme_cta_color',\n        value_: '#618985'\n      };\n      metas.push(ctaMeta);\n    }\n\n    for (let colorType of colorTypes) {\n\n      const meta = metas.find(m => m.key_ === 'theme_'+colorType+'_color');\n      if (!meta) {\n        continue;\n      }\n      \n      const colorMap = new Map();\n      colorMap.set(colorType, meta.value_);\n\n      const rgb = this.coreService.hexToRgb(meta.value_);\n      colorMap.set(colorType+'-rgb', rgb.r+','+rgb.g+','+rgb.b);\n\n      let contrastColor = this.coreService.getTextColor(meta.value_, true);\n      contrastColor = contrastColor === 'black' ? '#000000' : '#FFFFFF'\n      \n      const contrastRgb = contrastColor === '#000000' ? '0,0,0' : '255,255,255';\n      colorMap.set(colorType+'-contrast', contrastColor);\n      colorMap.set(colorType+'-contrast-rgb', contrastRgb);\n\n      colorMap.set(colorType+'-shade', this.coreService.shadeColor(meta.value_, 1.12));\n      colorMap.set(colorType+'-tint', this.coreService.shadeColor(meta.value_, 0.90));\n\n      colorMap.forEach((value, key, map) => {\n        style.setProperty('--ion-color-'+key, value);\n      });\n\n    }\n\n    const fontMetas = metas.filter(m => m.key_.includes('_font_family'));\n    for (let fontMeta of fontMetas) {\n\n      WebFont.load({\n        google: {\n          families: [fontMeta.value_]\n        }\n      });\n\n      let key = fontMeta.key_.replace('_family', '');\n      key = key.replace('theme_', '');\n      key = key.replaceAll('_', '-');\n      key = '--'+key;\n      style.setProperty(key, '\\''+fontMeta.value_+'\\', sans-serif');\n\n    }\n\n    const fontSizes = metas.filter(m => m.key_.includes('_font_size'));\n    for (let fontSize of fontSizes) {\n      let key = fontSize.key_.replace('theme_', '');\n      key = key.replaceAll('_', '-');\n      key = '--'+key;\n      style.setProperty(key, fontSize.value_);\n    }\n\n  }\n\n  public async showWheelOfFortune() {\n\n    this.wheelOfFortunes = await lastValueFrom(this.couponService.getWheelOfFortunes()) as any[];\n    if (this.wheelOfFortunes.length > 0) {\n\n      const wheel = this.wheelOfFortunes[0];\n      const hideWheel = await this.storageService.get('hide_wheel_'+wheel.id);\n\n      if (!hideWheel || hideWheel === null) {\n        this.doShowWheelOfFortune();\n      } else {\n        this.hideSmallWheel = false;\n      }\n\n    }\n\n  }\n\n  public async hideWheel() {\n    this.hideWheelOfFortune = true;\n    this.hideSmallWheel = false;\n    const wheel = this.wheelOfFortunes[0];\n    await this.storageService.set('hide_wheel_'+wheel.id, true);\n  }\n\n  public async unhideWheel() {\n    this.hideWheelOfFortune = false;\n    const wheel = this.wheelOfFortunes[0];\n    await this.storageService.set('hide_wheel_' + wheel.id, false);\n  }\n\n  public doShowWheelOfFortune() {\n\n    setTimeout(() => {\n      this.hideWheelOfFortune = false;\n    }, 1500);\n\n  }\n\n  public async openWheelOfFortune() {\n\n    this.hideWheelOfFortune = true;\n    this.hideSmallWheel = true;\n\n    const modal = await this.modalController.create({\n      component: SpinTheWheelComponent,\n      initialBreakpoint: 1.00,\n      breakpoints: [0, 1.00]\n    });\n\n    modal.onDidDismiss().then(() => {\n      this.hideWheelOfFortune = false; \n      this.hideSmallWheel = false;\n    });\n\n    await modal.present();\n\n  }\n\n  public async checkNewsletterPopup() {\n\n    let skipNewsletter = false;\n    if (this.authService.isAuthenticated()) {\n      skipNewsletter = this.authService.getCurrentUser()['has_newsletter'];\n    }\n\n    const newsletterStatus = await this.storageService.get(\"newsletter_status\");\n    if (newsletterStatus && newsletterStatus.dismissed === true && (new Date().getTime() - newsletterStatus.timestamp) <= (1000 * 60 * 60 * 24 * 30)) {\n      skipNewsletter = true;\n    }\n\n    if (!skipNewsletter) {\n\n      this.coreService.cookiesAccepted.subscribe(async r => {\n\n        if (r === true) {\n\n          const defaultNewsletter = await lastValueFrom(this.coreService.getNewsletter()) as any;\n          setTimeout(async () => {\n\n            const toast = await this.toastController.create({\n              header: 'Krijg nu '+this.currencyPipe.transform(defaultNewsletter.promo_value, 'EUR', 'symbol')+' korting!',\n              message: 'Meld je aan voor onze nieuwsbrief',\n              cssClass: 'newsletter-toast',\n              color: 'warning',\n              buttons: [\n                {\n                  text: 'Klik hier',\n                  role: 'accept',\n                },\n                {\n                  icon: 'close-circle-outline',\n                  role: 'cancel'\n                }\n              ]\n            });\n            await toast.present();\n\n            const { role } = await toast.onDidDismiss();\n            if (role === 'accept') {\n\n              const modal = await this.modalController.create({\n                component: NewsletterSignupModalComponent,\n                componentProps: {\n                  newsletter: defaultNewsletter\n                },\n                initialBreakpoint: 0.5,\n                breakpoints: [0, 0.5]\n              });\n              await modal.present();\n\n            } else if (role === 'cancel') {\n              await this.storageService.set('newsletter_status', {\n                dismissed: true,\n                timestamp: new Date().getTime()\n              });\n            }\n\n          }, 4000);\n\n        }\n\n      });\n\n    }\n\n  }\n\n  public async changeVersion() {\n\n    let alert = await this.alertCtrl.create({\n      header: 'DEV: versie',\n      inputs: [\n        {\n          name: 'version',\n          type: 'text',\n          placeholder: 'Versie...',\n          value: this.version\n        }\n      ],\n      buttons: [\n        {\n          role: 'cancel',\n          text: 'Annuleer'\n        },\n        {\n          text: 'Opslaan',\n          handler: async (d) => {\n\n            const version = d.version;\n            this.coreService.setVersion(version);\n            this.coreService.refreshApp();\n\n          }\n        }\n      ]\n    });\n\n    await alert.present();\n\n  }\n\n}\n","<!-- <ng-container *ngIf=\"isDevMode && showDev\">\n    <div class=\"container\" (click)=\"changeVersion()\">\n        <div class=\"title r-h2\">DEV</div>\n        <div class=\"text\">\n            <div class=\"r-h3\">versie</div>\n            <div class=\"r-h1\">{{ version ? version : 'auto' }}</div>\n        </div>\n    </div>\n</ng-container> -->\n\n<div *ngIf=\"!hideWheelOfFortune\" class=\"wheel-wrapper\">\n\n    <div style=\"display: flex; align-items: center; justify-content: flex-end; padding: 7px;\">\n        <div style=\"margin-right: 5px;\" (click)=\"openWheelOfFortune()\">\n            <div class=\"r-h1\">KORTING DRAAIEN</div>\n            <div class=\"r-h2\">Black Friday 2022</div>\n        </div>\n        <div style=\"position: relative; display: flex; flex-direction: column; align-items: flex-end; justify-content: flex-end; width: 80px; height: 40px;\">\n            <ion-avatar style=\"width: 60px; height: 60px; position: absolute; top: -30px;\" (click)=\"openWheelOfFortune()\">\n                <img src=\"https://cdn-icons-png.flaticon.com/512/5052/5052297.png\" style=\"object-fit: cover;\">\n            </ion-avatar>\n            <ion-button style=\"position: absolute; bottom: -18px; right: -5px;\" size=\"small\" fill=\"clear\" (click)=\"hideWheel()\">\n                <div class=\"r-note\">\n                    <u>Verberg</u>\n                </div>\n            </ion-button>\n        </div>\n    </div>\n\n</div>\n\n<div *ngIf=\"wheelOfFortunes && wheelOfFortunes.length > 0 && hideWheelOfFortune && !hideSmallWheel\" class=\"small-wheel-wrapper\" (click)=\"unhideWheel()\">\n    <ion-avatar style=\"width: 30px; height: 30px;\">\n        <img src=\"https://cdn-icons-png.flaticon.com/512/5052/5052297.png\" style=\"object-fit: cover;\">\n    </ion-avatar>\n</div>","import { Employee } from './employee';\nimport { Image } from './image';\n\nexport class Branch {\n    id: number;\n    full_name: string;\n    is_online: boolean;\n    top_description: string;\n    main_description: string;\n    employees: Employee[];\n    images: Image[];\n    address: string;\n    postal_code: string;\n    city: string;\n    timestamp_since: any;\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { AlertController, ModalController, PopoverController, ToastController } from '@ionic/angular';\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { CartService } from '../../../services/cart.service';\nimport { ReservationService } from '../../../services/reservation.service';\nimport { WishlistService } from '../../../services/wishlist.service';\n\n@Component({\n  selector: 'rope-product-add-to-cart-modal',\n  templateUrl: './product-add-to-cart-modal.component.html',\n  styleUrls: ['./product-add-to-cart-modal.component.scss']\n})\nexport class ProductAddToCartModalComponent implements OnInit {\n\n  @Input() public type;\n  @Input() public outfit;\n  @Input() public product;\n  @Input() public modalFitAssistant;\n  @Input() public modalStoreStock;\n\n  public productFit;\n\n  constructor(\n    public alertCtrl: AlertController,\n    public authService: AuthService,\n    public reservationService: ReservationService,\n    public modalCtrl: ModalController,\n    public popoverCtrl: PopoverController,\n    public toastCtrl: ToastController,\n    public cartService: CartService,\n    public wishlistService: WishlistService,\n    public analyticsService: AnalyticsService\n  ) { }\n\n  ngOnInit(): void {\n\n    this.product.product_variants.sort(\n      (pv1, pv2) => pv1.size.sort_index - pv2.size.sort_index\n    );\n    for (let pv of this.product.product_variants) {\n      pv[\"current_stock_level\"] =\n        this.getStock(pv) - this.amountInShoppingBag(pv);\n    }\n\n    this.productFit = this.getOptionByPropertyId(this.product, 8);\n\n    this.analyticsService.trackAddToCartInit();\n\n  }\n\n  public selectSize(productVariant) {\n\n    if (this.type === \"modal\") {\n      this.modalCtrl.dismiss({\n        product_variant: productVariant\n      });\n    } else if (this.type === 'popover') {\n      this.popoverCtrl.dismiss({\n        product_variant: productVariant\n      });\n    }\n    \n  }\n\n  public amountInShoppingBag(pv) {\n    return this.cartService.inShoppingBag(pv);\n  }\n\n  public getStock(pv) {\n    return pv[\"all_stocks\"].reduce((a, b) => a + b.stock_level, 0);\n  }\n\n  public onWishlist(pv) {\n    return this.wishlistService.check(pv);\n  }\n\n  public async toggleWishlist(event, pv) {\n    event.stopPropagation();\n    if (this.wishlistService.check(pv)) {\n      this.wishlistService.remove(pv).subscribe((r) => {\n      });\n    } else {\n      this.wishlistService.add(pv).subscribe((r) => {\n      });\n    }\n  }\n\n  public async createFutureReservation(productVariant) {\n\n    let alert = await this.alertCtrl.create({\n      header: \"We houden je op de hoogte\",\n      subHeader: \"Als dit product weer beschikbaar is\",\n      message:\n        \"Helaas is deze maat nu uitverkocht, maar we kunnen je even mailen als deze weer beschikbaar is.<br><br>Waar mogen we naartoe mailen?\",\n      cssClass: \"custom-alert\",\n      inputs: [\n        {\n          name: \"customer_email\",\n          value: this.authService.isAuthenticated()\n            ? this.authService.getCurrentUser().email\n            : \"\",\n          type: \"email\",\n          placeholder: \"Je e-mailadres\",\n        },\n      ],\n      buttons: [\n        {\n          text: \"Annuleer\",\n          role: \"cancel\",\n        },\n        {\n          text: \"Meld aan\",\n          handler: (d) => {\n            const customerEmail = d.customer_email;\n            if (!customerEmail) {\n              return;\n            }\n\n            const futureReservation = {\n              product_variant: {\n                id: productVariant.id,\n              },\n              customer_email: customerEmail,\n              timestamp_created: new Date().getTime(),\n              branch: {\n                id: 2,\n              },\n              customer: undefined,\n            };\n\n            if (this.authService.isAuthenticated()) {\n              futureReservation.customer = {\n                id: this.authService.getCurrentUser().id,\n              };\n            }\n\n            this.reservationService\n              .postFutureReservation(futureReservation)\n              .subscribe(async (r) => {\n                if (this.type === \"modal\") {\n                  this.modalCtrl.dismiss();\n                } else if (this.type === 'popover') {\n                  this.popoverCtrl.dismiss();\n                }\n\n                const toast = await this.toastCtrl.create({\n                  message:\n                    \"Toegevoegd aan de watchlist, we houden je op de hoogte!\",\n                  duration: 5000,\n                  position: \"top\",\n                  color: \"tertiary\",\n                  buttons: [\n                    {\n                      icon: \"eye-outline\",\n                      text: \"Bekijk\",\n                      role: \"cancel\",\n                      handler: () => {\n                        // this.navigateToWatchlist.emit();\n                        // this.navCtrl.navigateRoot('/future-reservations');\n                      },\n                    },\n                  ],\n                });\n                return await toast.present();\n              });\n          },\n        },\n      ],\n    });\n\n    return await alert.present();\n\n  }\n\n  public setAmountToAdd(event, pv) {\n    const amountToAdd = event.detail.value;\n    pv.amount_to_add = amountToAdd;\n  }\n\n  public async openFitAssistant() {\n    const fitProduct = JSON.parse(JSON.stringify(this.product));\n    this.modalFitAssistant({\n      product: fitProduct\n    });\n  }\n\n  public async openStoreStock() {\n    this.modalStoreStock({\n      outfit_id: this.outfit.id\n    });\n  }\n\n  public getOptionByPropertyId(product, propertyId) {\n    const option = product.options.find(o => o.property.id === propertyId);\n    return option;\n  }\n\n}\n","<!-- <ion-header>\n    <ion-toolbar>\n        \n    </ion-toolbar>\n</ion-header> -->\n\n<ion-content class=\"ion-padding\">\n\n    <div class=\"r-h3 r-flex r-flex-h-space-between r-flex-v-center\" style=\"margin-bottom: 10px;\">\n        Selecteer een maat\n        <ion-chip *ngIf=\"productFit && productFit.name !== 'Normaal'\" color=\"warning\">\n            <ion-icon name=\"alert-circle-outline\"></ion-icon>\n            <div style=\"font-family: var(--normal-font) !important; font-size: var(--h3-font-size) !important;\">Let op: valt {{\n                productFit.name.toLowerCase() }}</div>\n        </ion-chip>\n    </div>\n\n    <div class=\"size-block\" *ngFor=\"let pv of product.product_variants\"\n        [ngClass]=\"amountInShoppingBag(pv) > 0 ? 'in-shopping-bag' : ''\" (click)=\"selectSize(pv)\">\n    \n        <div class=\"size-info-container\" style=\"flex: 1;\">\n            <div class=\"r-h2\">{{ pv.size.name }}</div>\n            <p class=\"size-stock-container ion-text-wrap r-h3\">\n                <ng-container *ngIf=\"amountInShoppingBag(pv) > 0\">{{ amountInShoppingBag(pv) }} in shopping bag &#9642;\n                </ng-container>\n                <ng-container *ngIf=\"getStock(pv) > 3\">Op voorraad</ng-container>\n                <ng-container *ngIf=\"getStock(pv) <= 3 && getStock(pv) > 0\">\n                    <div style=\"color: var(--ion-color-warning);\">\n                        Laatste stuks\n                    </div>\n                </ng-container>\n                <ng-container *ngIf=\"getStock(pv) <= 0\">\n                    <div style=\"color: var(--ion-color-danger);\">Niet op voorraad</div>\n                    <ng-container *ngIf=\"pv['stock_expected']\">\n                        <b>Let op!</b> Op {{ pv['stock_expected_timestamp'] | date:'dd-MM-yyyy \\'om\\' HH:mm' }} nieuwe\n                        voorraad beschikbaar\n                    </ng-container>\n                </ng-container>\n            </p>\n        </div>\n    \n        <!-- <div *ngIf=\"pv['current_stock_level']-amountInShoppingBag(pv) > 0\" style=\"width: 40px; margin-right: 5px;\"\n            class=\"size-amount-container\" [ngClass]=\"amountInShoppingBag(pv) > 0 ? 'in-shopping-bag' : ''\">\n            <ion-input type=\"number\" value=\"1\" min=\"1\" [max]=\"getStock(pv)-amountInShoppingBag(pv)\"\n                (ionChange)=\"setAmountToAdd($event, pv)\"\n                style=\"height: 36px; border: 1px solid darkgrey; border-radius: 5px;\">\n            </ion-input>\n        </div> -->\n    \n        <!-- <div *ngIf=\"pv['current_stock_level']-amountInShoppingBag(pv) > 0\" class=\"size-button\">\n            <ion-button style=\"--padding-start: 0px; --padding-end: 0px;\" expand=\"block\"\n                color=\"cta\">\n                <ion-icon slot=\"icon-only\" name=\"cart-outline\" style=\"padding-left: 15.4px; padding-right: 15.4px;\">\n                </ion-icon>\n                <ion-icon name=\"add-circle\" style=\"font-size: 1.3rem; position: absolute; right: 5px;\"></ion-icon>\n            </ion-button>\n        </div> -->\n    \n        <div *ngIf=\"pv['current_stock_level']-amountInShoppingBag(pv) <= 0\" class=\"size-button\">\n            <ion-button expand=\"block\" color=\"cta\" fill=\"outline\" (click)=\"createFutureReservation(pv)\" style=\"font-size: 0.8rem; --padding-start: 6px; --padding-end: 6px;\">\n                <ion-icon slot=\"icon-only\" name=\"mail-outline\" style=\"font-size: 2.0rem; color: black;\"></ion-icon>\n                <div style=\"margin-left: 4px; color: black;\">Hou mij op de hoogte</div>\n            </ion-button>\n        </div>\n    \n        <div class=\"size-button\">\n            <ion-button (click)=\"toggleWishlist($event, pv)\" fill=\"clear\" color=\"secondary\"\n                style=\"font-size: 0.8rem; --padding-start: 3px; --padding-end: 3px;\">\n                <ion-icon style=\"font-size: 2.0rem;\" slot=\"icon-only\" [name]=\"onWishlist(pv) ? 'heart' : 'heart-outline'\"\n                    [ngStyle]=\"{ 'color': onWishlist(pv) ? 'var(--ion-color-danger)' : 'var(--ion-color-secondary)' }\">\n                </ion-icon>\n                <div style=\"margin-left: 4px;\">Wishlist</div>\n            </ion-button>\n        </div>\n\n    </div>\n\n    <div style=\"width: 100%;\" class=\"r-flex r-flex-h-space-between r-flex-v-center\">\n\n        <ion-chip class=\"fit-assistent-chip\" (click)=\"openStoreStock()\">\n            <ion-icon name=\"storefront-outline\" style=\"font-size: 1.3rem;\"></ion-icon>\n            <div class=\"r-h3\">Winkelvoorraad</div>\n        </ion-chip>\n\n        <ion-chip class=\"fit-assistent-chip\" (click)=\"openFitAssistant()\">\n            <ion-icon name=\"resize-outline\" style=\"font-size: 1.3rem;\"></ion-icon>\n            <div class=\"r-h3\">Keuzehulp voor de juiste maat</div>\n        </ion-chip>\n\n    </div>\n    \n</ion-content>","import { Component, Input, OnInit } from '@angular/core';\nimport { ModalController } from '@ionic/angular';\n\n@Component({\n  selector: 'rope-add-to-cart-success-modal',\n  templateUrl: './add-to-cart-success-modal.component.html',\n  styleUrls: ['./add-to-cart-success-modal.component.scss']\n})\nexport class AddToCartSuccessModalComponent implements OnInit {\n\n  @Input() public productVariant;\n  @Input() public product;\n  @Input() public onGoToShoppingBag;\n\n  constructor(\n    public modalCtrl: ModalController\n  ) { }\n\n  ngOnInit(): void {\n\n  }\n\n  public dismiss() {\n    this.modalCtrl.dismiss();\n  }\n\n  public goToCart() {\n    this.dismiss();\n    this.onGoToShoppingBag();\n  }\n\n}\n","<div style=\"width: 100%; flex-direction: column;\" class=\"r-flex r-flex-h-center r-flex-v-center\">\n\n    <div style=\"margin: 20px; text-align: center;\">\n        <ion-icon name=\"checkmark-circle-outline\" color=\"success\" style=\"font-size: 10.0rem;\"></ion-icon>\n        <div class=\"r-h1\">Toegevoegd!</div>\n\n        <br>\n        <div class=\"r-h3\">\n            {{ product.name }} in maat {{ productVariant.size.name }} toegevoegd aan je shopping bag\n        </div>\n\n        <br>\n        <br>\n        <ion-button color=\"secondary\" (click)=\"dismiss()\">\n            <ion-label class=\"r-h2\" style=\"color: white;\">Verder winkelen</ion-label>\n        </ion-button>\n\n        <br>\n\n        <ion-button color=\"secondary\" (click)=\"goToCart()\">\n            <ion-label class=\"r-h2\" style=\"color: white;\">Ga naar je shopping bag</ion-label>\n        </ion-button>\n\n    </div>\n\n</div>","import { Stock } from './stock';\nimport { Product } from \"./product\";\n\nexport class ProductVariant {\n    id: number;\n    sku: string;\n\n    stocks: Stock[];\n    product: Product;\n    size: any;\n}\n","import { ProductVariant } from \"./product-variant\";\nimport { ReservationRequest } from \"./reservation-request\";\nimport { ReservationResponse } from \"./reservation-response\";\n\nexport class Reservation {\n    id: number;\n    product_variant: ProductVariant;\n    reservation_request: ReservationRequest;\n    reservation_response: ReservationResponse;\n    status: string;\n    paid: boolean;\n}\n","import { Branch } from \"./branch\";\n\nexport class ReservationRequest {\n    id: number;\n    branch: Branch;\n    timestamp: number;\n}\n","import { Branch } from \"./branch\";\n\nexport class ReservationResponse {\n    id: number;\n    branch: Branch;\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n@Component({\n  selector: 'rope-back-button',\n  templateUrl: './back-button.component.html',\n  styleUrls: ['./back-button.component.scss']\n})\nexport class BackButtonComponent implements OnInit {\n\n  @Input() public useBreadcrumbs = false;\n  @Input() public breadcrumbs: any[];\n\n  @Input() public showModelChoice = false;\n\n  @Output() public navigateBack = new EventEmitter();\n\n  constructor(\n  ) { }\n\n  ngOnInit(): void {\n  }\n\n  public back() {\n    this.navigateBack.emit();\n  }\n\n}\n","<ion-item-divider>\n    <ion-buttons slot=\"start\" style=\"margin-left: 5px; z-index: 1;\">\n        <ion-button fill=\"solid\" color=\"light\" size=\"small\" (click)=\"back()\">\n            <ion-icon slot=\"start\" name=\"arrow-back-circle-outline\" style=\"font-size: 1.4rem !important; color: var(--ion-color-secondary);\"></ion-icon>\n            <div class=\"r-h3 cap\" style=\"margin-left: 5px; text-transform: lowercase;\">Ga terug</div>\n        </ion-button>\n    </ion-buttons>\n\n    <div *ngIf=\"useBreadcrumbs\">\n        <ion-breadcrumbs>\n            <ion-breadcrumb *ngFor=\"let breadcrumb of breadcrumbs\" [routerLink]=\"breadcrumb.href\" routerDirection=\"root\" [active]=\"breadcrumb.active\" class=\"bc\">\n                {{ breadcrumb.name }}\n            </ion-breadcrumb>\n        </ion-breadcrumbs>\n    </div>\n\n</ion-item-divider>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Outfit } from '../../../models/outfit';\nimport { Product } from '../../../models/product';\n\n@Component({\n  selector: 'rope-product-family-overview',\n  templateUrl: './product-family-overview.component.html',\n  styleUrls: ['./product-family-overview.component.scss']\n})\nexport class ProductFamilyOverviewComponent implements OnInit {\n\n  @Input() product: Product;\n  @Input() outfit: Outfit;\n\n  @Output() changeCurrentOutfit = new EventEmitter();\n\n  public currentFamilyIndex = 5;\n\n  constructor() { }\n\n  ngOnInit(): void {\n\n    if (this.product['product_family_members']) {\n\n      const ownEl = this.product['product_family_members'].find(pp => pp.id === this.product.id);\n      this.product[\"product_family_members\"] = [\n        ownEl,\n        ...this.product[\"product_family_members\"].filter(\n          (pp) => pp.id !== this.product.id\n        ),\n      ];\n      if (this.product[\"product_family_members\"].length === 6) {\n        this.currentFamilyIndex = 6;\n      }\n\n    }\n\n  }\n\n  public getFamilyMemberImage(pr) {\n    const sameTypeOutfit = pr.outfits.find(\n      (o) => o.outfit_type === this.outfit.outfit_type && o.is_active\n    );\n    if (sameTypeOutfit) {\n\n      if (sameTypeOutfit.medias && sameTypeOutfit.medias.length > 0) {\n        return sameTypeOutfit.medias[0].url;\n      }\n\n      return sameTypeOutfit.main_media_url;\n    }\n  }\n\n  public doChangeCurrentOutfit(pr) {\n    const sameTypeOutfit = pr.outfits.find(\n      (o) => o.outfit_type === this.outfit.outfit_type && o.is_active\n    );\n    this.changeCurrentOutfit.emit(sameTypeOutfit);\n  }\n\n  \n\n}\n","<div *ngIf=\"product['product_family_members'] && product['product_family_members'].length > 0\" class=\"family-block\">\n    <div class=\"r-h3\" style=\"margin-left: 5px; margin-top: 5px; margin-bottom: 5px;\">Ook verkrijgbaar in:</div>\n    <ion-grid class=\"ion-no-padding\">\n        <ion-row class=\"ion-align-items-center\">\n            <ion-col *ngFor=\"let pr of product['product_family_members'] | slice:0:currentFamilyIndex\" size=\"2\">\n                <div [ngClass]=\"pr['id'] === product.id ? 'bordered-family' : ''\" class=\"family-member\"\n                    style=\"margin-right: 10px;\" (click)=\"doChangeCurrentOutfit(pr)\">\n                    <ion-img [src]=\"getFamilyMemberImage(pr)\" class=\"bordered-image\"></ion-img>\n                </div>\n            </ion-col>\n            <ion-col *ngIf=\"product['product_family_members'].length > currentFamilyIndex\" size=\"2\">\n                <div class=\"placeholder-family-member\" (click)=\"currentFamilyIndex = currentFamilyIndex + 3\">\n                    +{{ product['product_family_members'].length - currentFamilyIndex }}\n                </div>\n            </ion-col>\n        </ion-row>\n    </ion-grid>\n</div>","import { Component, OnInit, ViewChild, Input, Output, EventEmitter } from '@angular/core';\nimport { LoadingController, ToastController, Platform, ModalController, PopoverController, AlertController } from '@ionic/angular';\nimport { Outfit } from '../../../models/outfit';\nimport { Product } from '../../../models/product';\nimport { Branch } from '../../../models/branch';\nimport { OutfitService } from '../../../services/outfit.service';\nimport { CoreService } from '../../../services/core.service';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport { BranchService } from '../../../services/branch.service';\nimport { SeoService } from '../../../services/seo.service';\nimport { CartService } from '../../../services/cart.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\nimport { Observable, forkJoin, Subscription } from 'rxjs';\nimport { VgApiService } from '@videogular/ngx-videogular/core';\nimport { OrderLine } from '../../../models/order-line';\nimport { IonicSlides } from '@ionic/angular';\nimport { ProductAddToCartModalComponent } from '../../shopping/product-add-to-cart-modal/product-add-to-cart-modal.component';\nimport { AddToCartSuccessModalComponent } from '../../shopping/add-to-cart-success-modal/add-to-cart-success-modal.component';\nimport { ProductVariant } from '../../../models/product-variant';\nimport { Reservation } from '../../../models/reservation';\nimport { ReservationRequest } from '../../../models/reservation-request';\nimport { ReservationResponse } from '../../../models/reservation-response';\nimport { AuthService } from '../../../services/auth.service';\nimport { ReservationService } from '../../../services/reservation.service';\nimport { ShipmentService } from '../../../services/shipment.service';\nimport { firstBy } from \"thenby\";\nimport Swiper from 'swiper';\n\n@Component({\n  selector: 'rope-product-detail',\n  templateUrl: './product-detail.component.html',\n  styleUrls: ['./product-detail.component.scss']\n})\nexport class ProductDetailComponent implements OnInit {\n\n  @Input() public category;\n  @Input() public outfitId;\n  @Input() public queryID;\n\n  @Output() public productReady = new EventEmitter();\n\n  @Output() public modalFitAssistant = new EventEmitter();\n  @Output() public modalStoreStock = new EventEmitter();\n  @Output() public modalImageViewer = new EventEmitter();\n  @Output() public modalAddToCart = new EventEmitter();\n\n  @Output() public navigate = new EventEmitter<any>();\n  @Output() public navigateBack = new EventEmitter();\n  @Output() public navigateToCart = new EventEmitter();\n  @Output() public navigateToWishlist = new EventEmitter();\n\n  @ViewChild(Swiper) slides: Swiper;\n  @ViewChild(Swiper) mainSlider: Swiper;\n  public swiperModules = [IonicSlides];\n\n  public outfit: Outfit;\n  public products: Product[];\n\n  public productFit: any;\n  public productFitChecked;\n\n  public associates: Outfit[];\n  public suggestions: Outfit[];\n  public recentlyViewed: Outfit[];\n\n  public isMobile: boolean;\n  public images;\n\n  public branches: Branch[];\n  public shopStockBranch;\n  public stockBranchMap = new Map();\n\n  public outfitMissing = false;\n  public ready = false;\n\n  public containsVideo = false;\n  public video;\n\n  public isDesktop;\n\n  public sliderConfig;\n  public mainSliderConfig;\n\n  public isPreorder = false;\n\n  public customActionSheetOptions: any = {\n    header: 'Selecteer een maat'\n  };\n\n  public selectedProductVariant;\n  public screensizeObserver: Subscription;\n\n  public breadcrumbs;\n  public usps;\n\n  public shipmentCutoffData;\n  public timeTillCutoff;\n  public deliveryDay;\n\n  constructor(\n    public outfitService: OutfitService,\n    public authService: AuthService,\n    public reservationService: ReservationService,\n    public alertCtrl: AlertController,\n    public shipmentService: ShipmentService,\n    public loadingCtrl: LoadingController,\n    public coreService: CoreService,\n    public toastCtrl: ToastController,\n    public platform: Platform,\n    public router: Router,\n    public route: ActivatedRoute,\n    public analyticsService: AnalyticsService,\n    public branchService: BranchService,\n    public seoService: SeoService,\n    public cartService: CartService,\n    public screensizeService: ScreensizeService,\n    public modalCtrl: ModalController,\n    public popoverCtrl: PopoverController\n  ) { }\n\n  ngOnInit() {\n\n    this.screensizeObserver = this.screensizeService.isDesktopView().subscribe(isDesktop => {\n      this.isDesktop = isDesktop;\n      this.setSliders();\n    });\n\n    this.setSliders();\n    this.reload();\n\n  }\n\n  ngOnDestroy() {\n    if (this.screensizeObserver) {\n      this.screensizeObserver.unsubscribe();\n    }\n  }\n\n  public getPromoDiscountPriceForProduct(product) {\n\n    const promocode = this.cartService.getPromoCode();\n    if (!promocode) {\n      return 0.00;\n    }\n\n    if (promocode['excluded_options']) {\n      const optionsArr = JSON.parse(promocode['excluded_options']);\n      const excludedOutfit = product['options'].find(ol => optionsArr.indexOf(ol.id) != -1);\n      if (excludedOutfit) {\n        return undefined;\n      }\n    }\n\n    if (promocode['exclude_sale']) {\n      if (product.discount_price) {\n        return undefined;\n      }\n    }\n\n    const subtotal = (product.discount_price ? product.discount_price : product.unit_price);\n    const num = (subtotal) * (1 - promocode.amount);\n    return Math.round(num * 100) / 100;\n\n  }\n\n  public diffUrl(url) {\n    return this.router.url !== url;\n  }\n\n  public doNavigate(url, type?) {\n    this.navigate.emit({\n      url: url,\n      type: type\n    });\n  }\n\n  public doNavigateToCart = () => {\n    this.navigateToCart.emit();\n  }\n\n  public setSliders() {\n\n    if (this.isDesktop) {\n\n      this.mainSliderConfig = {\n        slidesPerView: 2.3,\n        spaceBetween: 15,\n        initialSlide: 0,\n        centeredSlides: false,\n        pagination: {\n          el: '.swiper-pagination',\n          type: 'bullets',\n          clickable: true\n        }\n      };\n      this.sliderConfig = {\n        navigation: true,\n        slidesPerView: 4,\n        spaceBetween: 15,\n        initialSlide: 0,\n        centeredSlides: false\n      };\n\n    } else {\n\n      this.mainSliderConfig = {\n        slidesPerView: 1.3,\n        spaceBetween: 15,\n        initialSlide: 0,\n        centeredSlides: false,\n        pagination: {\n          el: '.swiper-pagination',\n          type: 'bullets',\n          clickable: true\n        }\n      };\n      this.sliderConfig = {\n        navigation: true,\n        slidesPerView: 2.3,\n        spaceBetween: 15,\n        initialSlide: 0,\n        centeredSlides: false\n      };\n\n    }\n\n  }\n\n  public getRandomInt(min, max) {\n    min = Math.ceil(min);\n    max = Math.floor(max);\n    return Math.floor(Math.random() * (max - min + 1)) + min;\n  }\n\n  public reload(reload?) {\n\n    if (reload && reload === true) {\n      this.ready = false;\n      this.suggestions = [];\n    }\n    this.loadOutfit(+this.outfitId);\n\n    this.loadSuggestions(+this.outfitId);\n    this.loadRecentlyViewed();\n\n    this.usps = this.coreService.getUsps();\n    this.usps = this.usps\n      .map(value => ({ value, sort: Math.random() }))\n      .sort((a, b) => a.sort - b.sort)\n      .map(({ value }) => value)\n      .slice(0,3);\n\n    this.loadShipmentCutoffInfo();\n\n    this.breadcrumbs = [\n      { name: 'Home', href: '/home' },\n      { name: 'New arrivals', href: '/shop/'+this.category },\n      { name: '#'+this.outfitId, href: '/shop/'+this.category+'/'+this.outfitId }\n    ];\n\n  }\n\n  public async loadShipmentCutoffInfo() {\n\n    this.shipmentCutoffData = await this.shipmentService.checkTimeTillCutOff();\n    \n    const fastestDelivery = this.shipmentCutoffData.sort(\n      firstBy(function (v1: any, v2: any) { return v1.delivery_date - v2.delivery_date })\n      .thenBy(function (v1: any, v2: any) { return v2.calculation_date - v1.calculation_date })\n    )[0];\n    \n    const timeTillCutoff = fastestDelivery.calculation_date - new Date().getTime();\n    this.timeTillCutoff = this.getTimeIndication(timeTillCutoff);\n\n    const deliveryDate = new Date(fastestDelivery.delivery_date);\n    const weekDayDelivery = deliveryDate.getDay();\n\n    const today = new Date();\n    const weekDayNow = today.getDay();\n\n    let deliveryDay;\n    if (weekDayDelivery - weekDayNow < 1 && weekDayDelivery - weekDayNow >= 0) {\n      deliveryDay = 'vandaag';\n    } else if (weekDayDelivery - weekDayNow === 1 || (weekDayNow === 7 && weekDayDelivery === 0)) {\n      deliveryDay = 'morgen';\n    } else {\n      const weekday = [\"zondag\",\"maandag\",\"dinsdag\",\"woensdag\",\"donderdag\",\"vrijdag\",\"zaterdag\"];\n      deliveryDay = weekday[weekDayDelivery];\n    }\n    this.deliveryDay = deliveryDay;\n\n  }\n\n  public getTimeIndication(epoch) {\n\n    const DAY = 1000 * 60 * 60 * 24;\n    const HOUR = 1000 * 60 * 60;\n    const MINUTE = 1000 * 60;\n\n    let str = '';\n    const hasDay = epoch > DAY;\n    if (hasDay) {\n      const fullDays = Math.floor(epoch / DAY);\n      str += fullDays + ' dag'+(fullDays > 1 ? 'en' : '');\n      epoch -= fullDays * DAY;\n    }\n\n    const hasHour = epoch > HOUR;\n    if (hasHour) {\n      const fullHours = Math.floor(epoch / HOUR);\n      str += (hasDay ? ' en ' : '') + fullHours + ' uur';\n      epoch -= fullHours * HOUR;\n    }\n\n    const hasMinute = epoch > MINUTE;\n    if (hasMinute) {\n      const fullMinutes = Math.floor(epoch / MINUTE);\n      str += (hasHour ? ' en ' : '') + fullMinutes + (fullMinutes > 1 ? ' minuten' : ' minuut');\n      epoch -= fullMinutes * MINUTE;\n    }\n\n    if (str === '') {\n      str = 'korte tijd'\n    }\n\n    return str;\n\n  }\n\n  public getOutfitName() {\n    if (!this.outfit) {\n      return '';\n    }\n\n    return this.outfit.name.toLowerCase().replace(/./, x => x.toUpperCase());\n  }\n\n  public async loadOutfit(id: number) {\n\n    const obsOutfit: Observable<Outfit> = this.outfitService.getOne(id);\n    const obsProducts: Observable<Product[]> = this.outfitService.getProducts(id);\n\n    forkJoin([obsOutfit, obsProducts]).subscribe(async (res) => {\n\n      // Set outfit\n      this.outfit = res[0][0];\n      if (!this.outfit) {\n        this.outfitMissing = true;\n        this.ready = true;\n        return;\n      }\n\n      if (this.outfit.images && this.outfit.images.length === 1 && !this.isDesktop) {\n        this.mainSliderConfig.slidesPerView = 1;\n      }\n\n      // Check for preorder\n      if (this.outfit.products) {\n        for (let pr of this.outfit.products) {\n          if (pr.product_preorders && pr.product_preorders.length > 0) {\n            this.isPreorder = true;\n          }\n        }\n      }\n\n      if (this.outfit['medias'].length > 0 && this.outfit['medias'].filter(m => m.content_type.startsWith('image')).length > 0) {\n        this.outfit.images = this.outfit['medias'].filter(m => m.content_type.startsWith('image'));\n        for (let img of this.outfit.images) {\n          if (img.url.indexOf('googleusercontent') !== -1) {\n            img.url += '=s1000';\n          }\n        }\n      }\n\n      // Check for video\n      if (this.outfit['medias'].length > 0 && this.outfit['medias'].filter(m => m.content_type.startsWith('video')).length > 0) {\n        this.containsVideo = true;\n        this.video = this.outfit['medias'].find(v => v.content_type.indexOf('video') !== -1);\n        // if (!this.isDesktop) {\n        //   this.mainSliderConfig.initialSlide = 1;\n        //   this.mainSliderConfig['centeredSlides'] = true;\n        // }\n      }\n\n      // Set products\n      this.products = res[1];\n\n      if (this.products.length === 1) {\n\n        this.branchService.getAll().subscribe((r) => {\n          this.branches = r.filter((br) => !br.is_online && br['is_active']);\n          this.shopStockBranch = this.branches[0];\n        });\n\n        this.buildStockBranchMap();\n\n        this.productFit = this.getOptionByPropertyId(this.products[0], 8);\n        this.productFitChecked = this.products[0]['product_contents'].some(c => c.product_content_key.key === 'Pasvorm gecontroleerd' && c.value === '1');\n\n        this.loadAssociates(this.products[0].id);\n\n      }\n\n      const productIds: string[] = new Array();\n\n      let totalPrice = 0.0;\n      for (const pr of this.products) {\n\n        productIds.push(pr.id.toString());\n        totalPrice = totalPrice + (pr.discount_price ? pr.discount_price : pr.unit_price);\n\n        for (let pv of pr.product_variants) {\n\n          const nettStock = this.getStock(pv);\n          pv['current_stock_level'] = nettStock - this.amountInShoppingBag(pv);\n\n          const grossStock = pv[\"all_stocks\"].reduce(\n            (a, b) => a + b.gross_stock_level,\n            0\n          );\n\n          const stockBlockedStocks = pv[\"all_stocks\"].filter(\n            (st) => st.stock_blocks && st.stock_blocks.length > 0\n          );\n\n          if (stockBlockedStocks && stockBlockedStocks.length > 0) {\n\n            const randomStockBlock = stockBlockedStocks[0].stock_blocks[0];\n            if (nettStock <= 0 && grossStock > 0 && randomStockBlock) {\n              pv['stock_expected'] = true;\n              pv['stock_expected_amount'] = grossStock;\n              pv[\"stock_expected_timestamp\"] = randomStockBlock['timestamp_blocked_until'];\n            }\n\n          }\n\n        }\n\n        const latestBasicOutfits = pr.outfits.filter(o => o['is_active'] && o.outfit_type === 'BASICS').sort((a, b) => b['timestamp_online'] - a['timestamp_online']);\n        if (latestBasicOutfits.length > 0) {\n          pr['basic_outfit'] = latestBasicOutfits[0];\n        }\n\n      }\n\n      this.analyticsService.trackViewContent(this.router.url, totalPrice, productIds, this.products, this.queryID);\n\n      // Add to recently viewed\n      await this.coreService.addRecentlyViewedOutfit(this.outfit);\n\n      let description = 'Je shopt deze producten in deze outfit: ';\n      let count = 1;\n      for (const pr of this.products) {\n        description += pr.name.replace('Dameskleding ', '') + ' (' + pr['supplier_code'].split(' ')[0] + ')' + (count === this.products.length ? '' : ', ');\n        pr.product_variants = pr.product_variants.sort((a, b) => a.size.sort_index - b.size.sort_index);\n        count++;\n      }\n\n      this.seoService.addMeta(this.outfit.name, description);\n\n      this.ready = true;\n      this.productReady.emit();\n\n    });\n\n  }\n\n  public buildStockBranchMap() {\n\n    const stockMap = new Map<number, Map<number, number>>();\n    for (const pr of this.products) {\n      for (const pv of pr.product_variants) {\n        const map = new Map<number, number>();\n        for (const al of pv[\"all_stocks\"].filter((a) => a.branch.id !== 2)) {\n          map.set(al.branch.id, al.nett_stock_level);\n        }\n        stockMap.set(pv.id, map);\n      }\n    }\n\n    this.stockBranchMap = stockMap;\n\n  }\n\n  public goBack() {\n    this.navigateBack.emit();\n  }\n\n  public onPlayerReady(vgApi: VgApiService) {\n    this.video.api = vgApi;\n    this.video.api.volume = 0;\n  }\n\n  public async slideChanged(event: any) {\n    const index = this.mainSlider.activeIndex;\n    if (index === 0 && this.containsVideo) {\n      // this.video.api.play();\n    }\n  }\n\n  public checkProductData(event) {\n\n    const val = event.detail.value;\n    //TODO\n\n  }\n\n  public getBasicOutfitImage(outfit) {\n\n    if (!outfit) {\n      return '/assets/images/noimage.png';\n    }\n\n    if (outfit.medias && outfit.medias.length > 0) {\n      return outfit.medias[0].url;\n    } else {\n      return outfit.main_media_url;\n    }\n\n  }\n\n  public loadAssociates(id) {\n\n    this.outfitService.getOutfitAssociates(id).subscribe(r => {\n      this.associates = r;\n    }, error => {\n      this.coreService.showAlert(error);\n    });\n\n  }\n\n  public async loadSuggestions(id: number) {\n\n    this.outfitService.getOutfitSuggestions(this.outfitId, this.category).subscribe(r => {\n      this.suggestions = r;\n    }, error => {\n      this.coreService.showAlert(error);\n    });\n\n  }\n\n  public async loadRecentlyViewed() {\n    this.recentlyViewed = await this.coreService.getRecentlyViewedOutfits();\n    this.recentlyViewed = this.recentlyViewed.filter(o => o.id !== Number(this.outfitId));\n    this.recentlyViewed = this.recentlyViewed.sort((a, b) => b['timestamp_stored'] - a['timestamp_stored']);\n  }\n\n  public getPreorderDeliveryDate() {\n    let product = this.outfit['products'].filter(p => p.product_preorders && p.product_preorders.length > 0)[0];\n    let timestampDelivery = product.product_preorders[0].timestamp_delivery;\n    return timestampDelivery;\n  }\n\n  public checkStock(product: Product) {\n\n    let stockEmpty = true;\n    for (const pv of product.product_variants) {\n\n      for (const st of pv['all_stocks']) {\n        if (st.stock_level > 0) {\n          stockEmpty = false;\n          break;\n        }\n      }\n\n    }\n\n    return stockEmpty;\n\n  }\n\n  public async openAddToCart(product: Product) {\n\n    if (this.checkStock(product)) {\n\n      const toast = await this.toastCtrl.create({\n        message: 'Helaas is dit product uitverkocht.',\n        duration: 3000,\n        position: 'top'\n      });\n      return await toast.present();\n\n    } else {\n\n      let optionalOutfitProduct = this.outfit.products.find(pr => product.id === pr.id && pr.product_preorders && pr.product_preorders.length > 0);\n\n      let preorderObj;\n      if (optionalOutfitProduct) {\n        preorderObj = optionalOutfitProduct.product_preorders[0];\n      } else {\n        preorderObj = undefined;\n      }\n\n      const componentProps = {\n        outfit: this.outfit,\n        outfitImage: this.outfit.images[0].url,\n        productId: product.id,\n        outfitId: this.outfit.id,\n        productPreorder: preorderObj\n      };\n\n      this.modalAddToCart.emit(componentProps);\n\n    }\n\n  }\n\n  public changeCurrentOutfit(outfit) {\n    this.outfitId = outfit.id;\n    this.reload(true);\n  }\n\n  public getEmployeeImage(id) {\n    return 'https://storage.googleapis.com/kiba-fashion-api-bucket/image/employee/' + id + '.jpg';\n  }\n\n  public getSizes(product) {\n\n    let lbl = '';\n    let count = 0;\n    for (const pv of product.product_variants) {\n\n      if (pv['all_stocks'].some(st => st.stock_level > 0)) {\n\n        if (count !== 0) {\n          lbl = lbl + ', ';\n        }\n        lbl = lbl + pv.size.name;\n\n        count++;\n\n      }\n\n    }\n\n    return lbl;\n\n  }\n\n  public async doOpenFitAssistant() {\n    const fitProduct = JSON.parse(JSON.stringify(this.products[0]));\n    this.openFitAssistant({\n      product: fitProduct\n    });\n  }\n\n  public openFitAssistant = (props) => {\n    this.modalFitAssistant.emit(props);\n  }\n\n  public goToStoreStock = (props) => {\n    this.modalStoreStock.emit(props);\n  }\n\n  public getLikes(outfit: Outfit) {\n    return outfit.likes;\n  }\n\n  public likeOutfit(outfit: Outfit) {\n\n    outfit['disable_like'] = true;\n\n    this.outfitService.postLike(outfit.id).subscribe(r => {\n\n      outfit.likes = r['likes'];\n      setTimeout(() => {\n        outfit['disable_like'] = false;\n      }, 750);\n\n    }, error => {\n      outfit['disable_like'] = false;\n      this.coreService.showAlert(error);\n    });\n\n  }\n\n  public getStock(pv) {\n    return pv['all_stocks'].reduce((a, b) => a + b.stock_level, 0);\n  }\n\n  public getOutfitDescription(outfit) {\n    const maxLength = 30;\n    if (outfit.description.length > maxLength) {\n      return outfit.description.slice(0, maxLength - 1) + '...';\n    } else {\n      return outfit.description;\n    }\n\n  }\n\n  public amountInShoppingBag(pv) {\n    return this.cartService.inShoppingBag(pv);\n  }\n\n  public getPvsWithStock(product) {\n    return product.product_variants.filter(a => a['current_stock_level'] > 0);\n  }\n\n  public async addToOrder(ev, pv?) {\n\n    if (!pv && !this.selectedProductVariant) {\n      this.selectSize(ev, this.products[0], true);\n      return;\n    }\n\n    const count = 1;\n    const productVariant = pv ? pv : this.selectedProductVariant;\n\n    const orderLine: OrderLine = new OrderLine(count, productVariant, this.products[0], this.outfit.images[0].url);\n    orderLine['productFit'] = productVariant['productFit'];\n\n    let optionalOutfitProduct = this.outfit.products.find(pr => this.products[0].id === pr.id && pr.product_preorders && pr.product_preorders.length > 0);\n\n    let preorderObj;\n    if (optionalOutfitProduct) {\n      preorderObj = optionalOutfitProduct.product_preorders[0];\n    } else {\n      preorderObj = undefined;\n    }\n\n    if (preorderObj) {\n      orderLine.productPreorder = preorderObj;\n    }\n\n    this.cartService.addOrderLine(orderLine);\n    this.analyticsService.trackAddToCart('/shop/add-to-cart/' + this.outfitId, orderLine.subtotal, orderLine.product.id, orderLine.product, this.queryID);\n\n    this.selectedProductVariant = undefined;\n\n    this.showAddToCartSuccess(productVariant, this.products[0]);\n\n  }\n\n  public getOptionByPropertyId(product, propertyId) {\n    const option = product.options.find(o => o.property.id === propertyId);\n    return option;\n  }\n\n  public async openImageViewer(url) {\n    this.modalImageViewer.emit(url);\n  }\n\n  public popoverOpen = false;\n  public async selectSize(ev, product, directAdd = false) {\n\n    if (!this.isDesktop) {\n\n      const windowHeight = window.innerHeight;\n      const pvHeight = 58;\n      const safetyMargin = 100;\n      const miscHeight = 45 + 45;\n\n      let breakpoint = 0.5;\n      const pvNums = product.product_variants.length;\n      const neededHeight = pvHeight * pvNums + safetyMargin + miscHeight;\n\n      breakpoint = neededHeight / windowHeight;\n\n      const modal = await this.modalCtrl.create({\n        component: ProductAddToCartModalComponent,\n        componentProps: {\n          type: 'modal',\n          outfit: this.outfit,\n          product: product,\n          modalFitAssistant: this.openFitAssistant,\n          modalStoreStock: this.goToStoreStock\n        },\n        initialBreakpoint: breakpoint,\n        breakpoints: [0, breakpoint, 0.8]\n      });\n\n      await modal.present();\n\n      const dismiss = await modal.onDidDismiss();\n      if (dismiss.data && dismiss.data.product_variant) {\n        this.selectedProductVariant = dismiss.data.product_variant;\n        this.selectedProductVariant['productFit'] = this.productFit;\n        if (directAdd) {\n          this.addToOrder(this.selectedProductVariant);\n        }\n      }\n\n    } else {\n\n      if (this.popoverOpen) {\n        return;\n      }\n\n      this.popoverOpen = true;\n      const popover = await this.popoverCtrl.create({\n        component: ProductAddToCartModalComponent,\n        componentProps: {\n          type: 'popover',\n          outfit: this.outfit,\n          product: product,\n          modalFitAssistant: this.openFitAssistant,\n          modalStoreStock: this.goToStoreStock\n        },\n        backdropDismiss: true,\n        cssClass: 'select-size-popover',\n        event: ev\n      });\n      await popover.present();\n    \n      const dismiss = await popover.onDidDismiss();\n      this.popoverOpen = false;\n\n      if (dismiss.data && dismiss.data.product_variant) {\n        this.selectedProductVariant = dismiss.data.product_variant;\n        if (directAdd) {\n          this.addToOrder(this.selectedProductVariant);\n        }\n      }\n\n    }\n\n  }\n\n  public async showAddToCartSuccess(productVariant, product) {\n\n    const windowHeight = window.innerHeight;\n    const modalHeight = 350;\n\n    const breakpoint = modalHeight / windowHeight;\n\n    const modal = await this.modalCtrl.create({\n      component: AddToCartSuccessModalComponent,\n      componentProps: {\n        productVariant: productVariant,\n        product: product,\n        onGoToShoppingBag: this.doNavigateToCart\n      },\n      initialBreakpoint: breakpoint,\n      breakpoints: [breakpoint]\n    });\n\n    await modal.present();\n\n  }\n\n  public async createReservation(pv, branchId) {\n    const authenticated = this.authService.isAuthenticated();\n    if (!authenticated) {\n      const alert = await this.alertCtrl.create({\n        cssClass: \"custom-alert\",\n        header: \"Account nodig\",\n        subHeader:\n          \"Je hebt een account bij ons nodig om een reservering te plaatsen.\",\n        message: \"Wil je direct een account aanmaken of inloggen?\",\n        buttons: [\n          {\n            text: \"Nee\",\n            role: \"cancel\",\n          },\n          {\n            text: \"Ja!\",\n            handler: () => {\n              this.showLogin(pv, branchId);\n            },\n          },\n        ],\n      });\n\n      return await alert.present();\n    } else {\n      this.showCreateReservation(pv, branchId);\n    }\n  }\n\n  public async showLogin(pv, branchId) {\n    // this.modalLogin.emit({\n    //   productVariant: pv,\n    //   branchId: branchId \n    // });\n  }\n\n  public async showCreateReservation(pv, branchId) {\n\n    const branch = this.branches.find((br) => br.id === branchId);\n    const alert = await this.alertCtrl.create({\n      cssClass: \"custom-alert\",\n      header: \"Reservering plaatsen\",\n      subHeader:\n        \"Wil je dit product in maat \" +\n        pv.size.name +\n        \" reserveren in \" +\n        branch.full_name +\n        \"?\",\n      message:\n        \"Let op: de reservering is altijd onder voorbehoud. Als er op hetzelfde moment iemand dit artikel koopt in de winkel, wordt de resevering geweigerd. Je ontvangt hierover bericht.\",\n      buttons: [\n        {\n          text: \"Annuleer\",\n          role: \"cancel\",\n        },\n        {\n          text: \"Ja!\",\n          handler: () => {\n            this.doCreateReservation(pv.id, branchId);\n          },\n        },\n      ],\n    });\n\n    return await alert.present();\n\n  }\n\n  public doCreateReservation(productVariantId, branchId) {\n\n    const reservation = new Reservation();\n    reservation.product_variant = new ProductVariant();\n    reservation.product_variant.id = productVariantId;\n\n    reservation.status = \"OPEN\";\n    reservation.paid = true;\n\n    reservation.reservation_request = new ReservationRequest();\n    reservation.reservation_request.branch = new Branch();\n    reservation.reservation_request.branch.id = branchId;\n    reservation.reservation_request.timestamp = new Date().getTime();\n\n    reservation.reservation_response = new ReservationResponse();\n    reservation.reservation_response.branch = new Branch();\n    reservation.reservation_response.branch.id = branchId;\n\n    this.reservationService.postReservation(reservation).subscribe(\n      (res) => {\n        this.showResult(res.id);\n      },\n      (error) => {\n        console.error(error);\n        this.coreService.showAlert(error);\n      }\n    );\n\n  }\n\n  public async showResult(id) {\n\n    const alert = await this.alertCtrl.create({\n      cssClass: \"custom-alert\",\n      header: \"Reservering geplaatst\",\n      message:\n        \"De reservering is succesvol aangemaakt onder nummer #\" +\n        id +\n        \". Je ontvangt nog een e-mail over de status.\",\n      buttons: [\n        {\n          text: \"Oke!\",\n          role: \"cancel\",\n        },\n      ],\n    });\n    return await alert.present();\n\n  }\n\n  public getProductContentValue(productContent) {\n\n    if (productContent.value !== undefined) {\n\n      if (productContent.product_content_key.type === 'bool') {\n        return productContent.value === '1' ? 'Ja' : 'Nee';\n      }\n\n      return productContent.value + (productContent.unit ? ' '+productContent.unit : '');\n\n    } else {\n      return productContent.product_content_values[0].product_content_key_value.value;\n    }\n\n  }\n\n}\n","<ng-container *ngIf=\"!ready\">\n    <div class=\"loader\">\n        <ion-spinner name=\"crescent\"></ion-spinner>\n    </div>\n</ng-container>\n\n<ng-container *ngIf=\"ready && outfitMissing\">\n\n    <div class=\"loader\">\n        <div style=\"display: flex; justify-items: center; align-content: center; flex-direction: column; max-width: 50%;\">\n            <h1 style=\"color: indianred;\">Niet gevonden</h1>\n            <p class=\"ion-text-wrap\" style=\"font-size: 1.2rem;\">\n                Helaas is deze outfit niet meer beschikbaar in de webshop. Vaak is dit zo omdat deze dan is uitverkocht.\n            </p>\n        </div>\n    </div>\n\n</ng-container>\n\n<ng-container *ngIf=\"ready && !outfitMissing\">\n\n    <ng-container *ngIf=\"isDesktop\">\n\n        <rope-back-button\n            (navigateBack)=\"goBack()\"\n            [useBreadcrumbs]=\"true\"\n            [breadcrumbs]=\"breadcrumbs\"\n        ></rope-back-button>\n\n        <div style=\"display: flex; align-items: flex-start; justify-content: space-between; margin-left: 20px; margin-right: 20px;\">\n\n            <div style=\"width: 70%;\">\n                <ion-grid class=\"ion-no-padding\">\n                    <ion-row>\n                        <ion-col size=\"6\" *ngFor=\"let img of outfit.images\" style=\"padding: 3px;\">\n                            <ion-img class=\"header-image-desktop slide-image\" [src]=\"img.url\"></ion-img>\n                            <ion-icon name=\"expand-outline\" style=\"position: absolute; top: 10px; left: 10px; font-size: 2.0rem; cursor: pointer;\"\n                                color=\"secondary\" (click)=\"openImageViewer(img.url)\"></ion-icon>\n                        </ion-col>\n                    </ion-row>\n                </ion-grid>\n            </div>\n\n            <div style=\"width: 30%; position: sticky; top: 0px;\" class=\"ion-padding\">\n\n                <ng-container *ngIf=\"products.length === 1\" [ngTemplateOutlet]=\"selectSizeTemplate\"></ng-container>\n                <ng-container *ngIf=\"products.length > 1\">\n                    <ng-container [ngTemplateOutlet]=\"multipleProductsTemplate\"></ng-container>\n                </ng-container>\n\n                <rope-product-family-overview \n                    *ngIf=\"products.length === 1\" \n                    [product]=\"products[0]\" \n                    [outfit]=\"outfit\"\n                    (changeCurrentOutfit)=\"changeCurrentOutfit($event)\"\n                ></rope-product-family-overview>\n\n                <ng-container [ngTemplateOutlet]=\"productInfoTemplate\"></ng-container>\n\n            </div>\n\n        </div>\n\n        <div style=\"margin-top: 30px;\">\n            <ng-container [ngTemplateOutlet]=\"uspContainer\"></ng-container>\n        </div>\n\n        <div style=\"margin: 15px; margin-top: 30px !important;\" *ngIf=\"associates && associates.length > 0\">\n            <ng-container [ngTemplateOutlet]=\"associatedProductsTemplate\"\n                [ngTemplateOutletContext]=\"{ objects: associates, title: 'Combineer met', subtitle: 'Leuke bijpassende items' }\">\n            </ng-container>\n        </div>\n\n        <div style=\"margin: 15px; margin-top: 30px !important;\">\n            <ng-container [ngTemplateOutlet]=\"associatedProductsTemplate\" \n                [ngTemplateOutletContext]=\"{ objects: suggestions, title: 'Ook leuk voor jou', subtitle: 'Maak je outfit compleet' }\"></ng-container>\n        </div>\n\n        <div style=\"margin: 15px; margin-top: 30px !important; margin-bottom: 30px !important;\" *ngIf=\"recentlyViewed && recentlyViewed.length > 0\">\n            <ng-container [ngTemplateOutlet]=\"associatedProductsTemplate\"\n                [ngTemplateOutletContext]=\"{ objects: recentlyViewed, title: 'Onlangs bekeken', subtitle: 'Deze producten heb je onlangs nog bekeken' }\">\n            </ng-container>\n        </div>\n\n        <rope-common-footer></rope-common-footer>\n\n    </ng-container>\n\n    <ng-container *ngIf=\"!isDesktop\">\n\n        <ng-container [ngTemplateOutlet]=\"selectSizeTemplate\"></ng-container>\n\n        <div [ngStyle]=\"{ 'margin-bottom': products.length === 1 ? '150px' : '0px' }\">     \n            \n            <swiper-container [config]=\"mainSliderConfig\" class=\"header-image\" [modules]=\"swiperModules\"\n                pager=\"true\" *ngIf=\"outfit\" (slideChange)=\"slideChanged($event)\" #mainSlides>\n                \n                <swiper-slide *ngFor=\"let img of outfit.images\">\n                    <div class=\"slide-image\" [ngStyle]=\"{ 'background-image': 'url('+img.url+')' }\"></div>\n                    <ion-icon name=\"expand-outline\"\n                        style=\"position: absolute; top: 10px; left: 10px; font-size: 2.0rem; cursor: pointer;\"\n                        color=\"secondary\" (click)=\"openImageViewer(img.url)\"></ion-icon>\n                </swiper-slide>\n                \n            </swiper-container>\n            \n            \n            <div class=\"ion-padding\">\n                <rope-product-family-overview \n                    *ngIf=\"products.length === 1\" \n                    [product]=\"products[0]\" \n                    [outfit]=\"outfit\"\n                    (changeCurrentOutfit)=\"changeCurrentOutfit($event)\"\n                ></rope-product-family-overview>\n            </div>\n\n            <div style=\"padding-top: 5px; padding-bottom: 5px;\" *ngIf=\"isPreorder\">\n                <ion-card-content\n                    style=\"margin-top: 0px; margin-bottom: 0px; display: flex; align-items: center; justify-content: center;\">\n                    <ion-chip style=\"--background: var(--ion-color-warning);\">\n                        <ion-icon name=\"eye\" color=\"dark\"></ion-icon>\n                        <ion-label style=\"font-weight: 500; font-family: 'Source Sans Pro', sans-serif;\" class=\"ion-text-wrap\">\n                            <b>PRE-ORDER</b> -\n                            Let op: levering vanaf {{ getPreorderDeliveryDate() | date:'shortDate' }}\n                        </ion-label>\n                    </ion-chip>\n                </ion-card-content>\n            </div>\n            \n            <div *ngIf=\"products.length > 1\">\n                <ng-container [ngTemplateOutlet]=\"multipleProductsTemplate\"></ng-container>\n            </div>\n\n            <ng-container [ngTemplateOutlet]=\"productInfoTemplate\"></ng-container>\n            \n            <div *ngIf=\"outfit?.outfit_advices && outfit?.outfit_advices.length > 0\">\n                <ion-item *ngFor=\"let advice of outfit?.outfit_advices\">\n                    <div slot=\"start\" class=\"ion-text-center\">\n                        <ion-avatar style=\"width: 100px; height: 100px;\">\n                            <img [src]=\"getEmployeeImage(advice.employee.id)\" class=\"custom-avatar\"\n                                style=\"width: 100px; height: 100px;\">\n                        </ion-avatar>\n                        <h2 style=\"margin-top: 10px; font-family: var(--default-font); font-size: 1.3rem;\">\n                            {{ advice.employee.name.split(\" \")[0] }}</h2>\n                    </div>\n                    <div class=\"main-content\" style=\"white-space: pre-line;\">\n                        <p style=\"font-style: italic\">\"{{ advice.text }}\"</p>\n                    </div>\n                </ion-item>\n            </div>\n\n            <div style=\"margin: 0px; margin-top: 30px !important;\">\n                <ng-container [ngTemplateOutlet]=\"associatedProductsTemplate\"\n                    [ngTemplateOutletContext]=\"{ objects: suggestions, title: 'Ook leuk voor jou', subtitle: 'Maak je outfit compleet' }\">\n                </ng-container>\n            </div>\n            \n            <div style=\"margin: 0px; margin-top: 30px !important;\" *ngIf=\"recentlyViewed && recentlyViewed.length > 0\">\n                <ng-container [ngTemplateOutlet]=\"associatedProductsTemplate\"\n                    [ngTemplateOutletContext]=\"{ objects: recentlyViewed, title: 'Onlangs bekeken', subtitle: 'Deze producten heb je onlangs nog bekeken' }\">\n                </ng-container>\n            </div>\n                \n        </div>\n\n        <rope-common-footer></rope-common-footer>\n\n    </ng-container>\n\n</ng-container>\n\n<ng-template #selectSizeTemplate>\n\n    <div [ngClass]=\"isDesktop ? '' : 'select-size-container'\">\n\n        <div [ngClass]=\"isDesktop ? '' : 'select-size'\" [ngStyle]=\"{ 'width': isDesktop ? '' : '95%' }\">\n\n            <div class=\"r-flex r-flex-h-space-between r-flex-v-center\">\n                <div class=\"r-h2\" style=\"font-size: 1.7rem !important;\">{{ products[0].name }}</div>\n                <div class=\"r-h1 r-flex r-flex-h-space-between r-flex-v-center\">\n                    <div [ngClass]=\"(products[0].discount_price || (cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct(products[0]) !== undefined)) ? 'old-price' : ''\"\n                        class=\"r-h1\">\n                        {{ products[0].unit_price | currency:'EUR':'symbol' }}\n                    </div>\n                    <div *ngIf=\"products[0].discount_price  && !(cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct(products[0]) !== undefined)\"\n                        style=\"color: var(--ion-color-danger); margin-left: 10px;\" class=\"r-h1\">\n                        {{ products[0].discount_price | currency:'EUR':'symbol' }}\n                    </div>\n                    <div *ngIf=\"cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct(products[0]) !== undefined\" class=\"promo-price r-h1\">\n                        Nu: {{ getPromoDiscountPriceForProduct(products[0]) | currency:'EUR':'symbol' }}\n                    </div>\n                </div>\n            </div>\n\n            <div class=\"r-flex r-flex-h-space-between r-flex-v-center\" style=\"width: 100%; margin-top: 10px;\">\n                <div style=\"width: 100%; margin-right: 8px; background-color: white;\">\n                    <ion-item lines=\"none\" (click)=\"selectSize($event, products[0])\" readonly=\"true\" \n                        style=\"--min-height: 39px; height: 39px; border: 1px solid lightgrey; border-radius: 5px; --padding-top: 0px; --padding-bottom: 0px;\">\n                        <ion-label class=\"r-h2 ion-text-wrap\" style=\"user-select: none; margin: 0px; font-size: 1.3rem !important;\">\n                            <ng-container *ngIf=\"!selectedProductVariant\">Selecteer een maat</ng-container>\n                            <ng-container *ngIf=\"selectedProductVariant\">\n                                <div class=\"r-h2\">{{ selectedProductVariant.size.name }}\n                                    <ng-container *ngIf=\"getStock(selectedProductVariant) > 3\">(Op voorraad)</ng-container>\n                                    <ng-container\n                                        *ngIf=\"getStock(selectedProductVariant) <= 3 && getStock(selectedProductVariant) > 0\">\n                                        <div style=\"color: var(--ion-color-warning); display: inline-block;\">\n                                            (Laatste stuks)\n                                        </div>\n                                    </ng-container>\n                                </div>\n                            </ng-container>\n                        </ion-label>\n                        <ion-icon slot=\"end\" name=\"caret-down-circle-outline\"\n                            style=\"font-size: 1.8rem; margin-top: 2px; margin-bottom: 2px;\"></ion-icon>\n                    </ion-item>\n                </div>\n\n                <div>\n                    <ion-button color=\"cta\" style=\"height: 35px;\" (click)=\"addToOrder($event)\">\n                        <ion-icon name=\"bag-handle-outline\" slot=\"start\" style=\"color: black;\"></ion-icon>\n                        <ion-label class=\"r-h2 r-b\">Toevoegen</ion-label>\n                    </ion-button>\n                </div>\n\n            </div>\n\n        </div>\n\n    </div>\n\n</ng-template>\n\n<ng-template #multipleProductsTemplate>\n\n    <ion-card-header>\n        <ion-card-title>{{ outfit?.name }}</ion-card-title>\n        <ion-card-subtitle>Shop the look</ion-card-subtitle>\n    </ion-card-header>\n    \n    <ion-card-content\n        [ngStyle]=\"{ 'padding-left': isDesktop ? '45px' : '10px', 'padding-right': isDesktop ? '45px' : '10px' }\">\n    \n        <div [innerHTML]=\"outfit?.short_description\" style=\"white-space: pre-line;\" class=\"ion-text-center\">\n        </div>\n        <br>\n        <br>\n    \n        <ion-item detail=\"true\" *ngFor=\"let product of products\"\n            (click)=\"product['basic_outfit'] && diffUrl('/shop/basics/'+product['basic_outfit'].id) ? doNavigate('/shop/basics/'+product['basic_outfit'].id, 'forward') : openAddToCart(product)\"\n            [ngClass]=\"checkStock(product) ? 'diss' : ''\" class=\"item-detail-custom\" style=\"cursor: pointer;\">\n            <ion-avatar slot=\"start\" style=\"height: 100px; width: 100px; --border-radius: 10px;\">\n                <img [src]=\"getBasicOutfitImage(product['basic_outfit'])\" style=\"height: 100px; width: 100px;\">\n            </ion-avatar>\n            <ion-label>\n                <div class=\"ion-text-wrap\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.3rem;\">\n                    {{ product.name.replace('Dameskleding', '') }}</div>\n                <!-- <p class=\"ion-text-wrap\">Verkrijgbaar in: {{ getSizes(product) }}</p> -->\n                <p class=\"ion-text-wrap\" style=\"margin: 0; padding: 2px; font-size: 1.1rem;\">#{{ product.id\n                    }}</p>\n                <ng-container\n                    *ngIf=\"product.discount_price || (cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct(product) !== undefined)\">\n                    <div class=\"discount\">\n                        <div class=\"price\" style=\"text-decoration: line-through !important;\">\n                            {{ product.unit_price | currency:'EUR':'symbol' }}\n                        </div>\n                        <div class=\"price\" style=\"color: indianred;\"\n                            *ngIf=\"product.discount_price && !(cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct(product) !== undefined)\">\n                            {{ product.discount_price | currency:'EUR':'symbol' }}\n                        </div>\n                        <div class=\"price promo-price\"\n                            *ngIf=\"cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct(product) !== undefined\">\n                            Nu: {{ getPromoDiscountPriceForProduct(product) | currency:'EUR':'symbol' }}\n                        </div>\n                    </div>\n                </ng-container>\n                <ng-container\n                    *ngIf=\"!product.discount_price && !((cartService.getPromoCodeActive() && getPromoDiscountPriceForProduct(product) !== undefined))\">\n                    <div class=\"discount\">\n                        <div class=\"price\">{{ product.unit_price | currency:'EUR':'symbol' }}</div>\n                    </div>\n                </ng-container>\n            </ion-label>\n        </ion-item>\n    \n    </ion-card-content>\n\n</ng-template>\n\n<ng-template #productInfoTemplate>\n\n    <ion-accordion-group value=\"product_info\" style=\"margin-top: 20px;\" (ionChange)=\"checkProductData($event)\">\n\n        <ion-accordion value=\"product_info\">\n            <ion-item slot=\"header\">\n                <ion-icon slot=\"start\" style=\"font-size: 1.7rem; color: lightgrey;\" name=\"information-circle-outline\"></ion-icon>\n                <ion-label class=\"r-h3\">Kenmerken</ion-label>\n            </ion-item>\n            <ion-list slot=\"content\" style=\"background-color: #f2f2f2;\">\n                <div class=\"r-h3\" style=\"margin-left: 15px; margin-right: 15px; margin-top: 15px; margin-bottom: 15px;\">\n                    <div [innerHTML]=\"outfit?.description\" style=\"white-space: pre-line;\"></div>\n                </div>\n            </ion-list>\n        </ion-accordion>\n\n        <ion-accordion value=\"shipment\">\n            <ion-item slot=\"header\">\n                <ion-icon slot=\"start\" style=\"font-size: 1.7rem; color: lightgrey;\" name=\"bus-outline\"></ion-icon>\n                <ion-label class=\"r-h3 ion-text-wrap\">\n                    Bestel binnen <i>{{ timeTillCutoff }}</i><br> \n                    en je bestelling wordt <i>{{ deliveryDay }}</i> geleverd!<sup>*</sup>\n                </ion-label>\n            </ion-item>\n            <ion-list slot=\"content\" style=\"background-color: #f2f2f2;\">\n                <div class=\"r-h3\" style=\"margin-left: 15px; margin-right: 15px; margin-top: 15px; margin-bottom: 15px;\">\n                    <sup>*</sup>Wij maken gebruik van meerdere bezorgdiensten welke je kunt kiezen tijdens het bestellen. Door verschuiving van voorraad kan het zijn dat een bestelling een dag later wordt geleverd. Dit wordt echter wel al bij het bestellen aangegeven. De datum die je daar selecteert, is de datum dat wij het bij je bezorgen.\n                </div>\n            </ion-list>\n        </ion-accordion>\n\n        <ion-accordion value=\"product_fit\" *ngIf=\"productFit && products.length === 1\">\n\n            <ion-item slot=\"header\">\n                <div slot=\"start\" style=\"position: relative;\">\n                    <ion-icon style=\"font-size: 1.9rem; color: lightgrey;\" name=\"shirt-outline\"></ion-icon>\n                    <ion-icon style=\"position: absolute; left: 70%; top: 80%; transform: translate(-50%, -50%); font-size: 1.2rem;\" [name]=\"productFitChecked ? 'checkmark-circle-outline' : 'close-circle-outline'\" [color]=\"productFitChecked ? 'success' : 'danger'\"></ion-icon>\n                </div>\n                <ion-label class=\"r-h3 r-flex r-flex-h-space-between r-flex-v-center\" style=\"display: flex !important;\">\n                    <div>Pasvorm</div>\n                    <ion-chip *ngIf=\"productFit && productFit.name !== 'Normaal'\" color=\"warning\">\n                        <ion-icon name=\"alert-circle-outline\"></ion-icon>\n                        <div style=\"font-family: var(--normal-font) !important; font-size: var(--h3-font-size) !important;\">Let op: valt {{ productFit.name.toLowerCase() }}</div>\n                    </ion-chip>\n                </ion-label>\n            </ion-item>\n        \n            <ion-list slot=\"content\" style=\"background-color: #f2f2f2;\">\n                <div class=\"r-h3\" style=\"margin-left: 15px; margin-right: 15px; margin-top: 15px; margin-bottom: 15px;\">\n\n                    <ng-container *ngIf=\"productFit.name === 'Normaal'\">\n                        <div class=\"r-h2\">Dit product valt normaal.</div><br>Je kunt dus gewoon de maat bestellen die je normaal hebt.\n                    </ng-container>\n\n                    <ng-container *ngIf=\"productFit.name === 'Hele maat kleiner'\">\n                        <div class=\"r-h2\">Dit product valt een hele maat kleiner.</div><br>Je kunt dus het beste een maat groter bestellen dan je normaal hebt. Bijvoorbeeld: heb je normaal een M, bestel dan nu een L.\n                    </ng-container>\n\n                    <ng-container *ngIf=\"productFit.name === 'Halve maat kleiner'\">\n                        <div class=\"r-h2\">Dit product valt een halve maat kleiner.</div><br>Bij een halve maat verschil adviseren we je de pasvorm-assistent te gebruiken. Deze houdt ook rekening met andere producten die je ooit bij ons gekocht hebt. Ben je een nieuwe klant? Maak dan je keuze op basis van je eigen voorkeur: liever wat strakker of liever wat losser.\n                    </ng-container>\n\n                    <ng-container *ngIf=\"productFit.name === 'Hele maat groter'\">\n                        <div class=\"r-h2\">Dit product valt een hele maat groter.</div><br>Je kunt dus het beste een maat kleiner bestellen\n                        dan je normaal hebt. Bijvoorbeeld: heb je normaal een M, bestel dan nu een S.\n                    </ng-container>\n                    \n                    <ng-container *ngIf=\"productFit.name === 'Halve maat groter'\">\n                        <div class=\"r-h2\">Dit product valt een halve maat groter.</div><br>Bij een halve maat verschil adviseren we je de\n                        pasvorm-assistent te gebruiken. Deze houdt ook rekening met andere producten die je ooit bij ons gekocht hebt. Ben\n                        je een nieuwe klant? Maak dan je keuze op basis van je eigen voorkeur: liever wat strakker of liever wat losser.\n                    </ng-container>\n\n                    <br><br>\n                    Gebruik onze <a style=\"cursor: pointer; text-decoration: underline; color: var(--ion-color-secondary);\"(click)=\"doOpenFitAssistant()\">pasvorm-assistent</a> om een zo goed mogelijk beeld te krijgen van de pasvorm.\n\n                    <div style=\"border: 1px solid lightgrey; border-radius: 5px; margin-top: 15px; padding: 5px;\">\n\n                        <ion-item lines=\"none\" style=\"--background: #f2f2f2;\">\n                            <ion-icon slot=\"start\" [name]=\"productFitChecked ? 'checkmark-circle-outline' : 'close-circle-outline'\" [color]=\"productFitChecked ? 'success' : 'danger'\"></ion-icon>\n                            <ion-label class=\"r-h2 ion-text-wrap\">\n                                <ng-container *ngIf=\"!productFitChecked\">\n                                    De pasvorm is niet gecontroleerd\n                                    <p class=\"r-h3\">Wij hebben dit product nog niet goed gepast voor je. Voor vragen over de maat kun je contact met ons opnemen.</p>\n                                </ng-container>\n                                <ng-container *ngIf=\"productFitChecked\">\n                                    De pasvorm is gecontroleerd\n                                    <p class=\"r-h3\">Wij hebben dit product heel goed voor je gepast en de informatie over de pasvorm is up-to-date!</p>\n                                </ng-container>\n                            </ion-label>\n                        </ion-item>\n\n                    </div>\n\n                </div>\n            </ion-list>\n\n        </ion-accordion>\n\n\n        <ion-accordion value=\"product_stats\" *ngIf=\"products.length === 1\">\n\n            <ion-item slot=\"header\">\n                <ion-icon slot=\"start\" style=\"font-size: 1.7rem; color: lightgrey;\" name=\"layers-outline\"></ion-icon>\n                <ion-label class=\"r-h3\">Specificaties</ion-label>\n            </ion-item>\n        \n            <ion-list slot=\"content\" style=\"background-color: #f2f2f2;\">\n                <ion-grid style=\"margin-left: 15px;\" class=\"r-h3\">\n                    <ion-row>\n                        <ion-col>Artikelnummer</ion-col>\n                        <ion-col>{{ products[0].id }}</ion-col>\n                    </ion-row>\n                    <ion-row *ngIf=\"getOptionByPropertyId(products[0], 4)\">\n                        <ion-col>Merk</ion-col>\n                        <ion-col>{{ getOptionByPropertyId(products[0], 4).name }}</ion-col>\n                    </ion-row>\n                    <ion-row *ngIf=\"getOptionByPropertyId(products[0], 5)\">\n                        <ion-col>Type</ion-col>\n                        <ion-col>{{ getOptionByPropertyId(products[0], 5).name }}</ion-col>\n                    </ion-row>\n                    <ion-row *ngIf=\"getOptionByPropertyId(products[0], 6)\">\n                        <ion-col>Kleur</ion-col>\n                        <ion-col>{{ getOptionByPropertyId(products[0], 6).name }}</ion-col>\n                    </ion-row>\n                    <ion-row *ngFor=\"let productContent of products[0]['product_contents']\">\n                        <ion-col>{{ productContent.product_content_key.key }}</ion-col>\n                        <ion-col>{{ getProductContentValue(productContent) }}</ion-col>\n                    </ion-row>\n                </ion-grid>\n            </ion-list>\n\n        </ion-accordion>\n\n        <ion-accordion value=\"store_stock\" *ngIf=\"products.length === 1\">\n\n            <ion-item slot=\"header\">\n                <ion-icon slot=\"start\" style=\"font-size: 1.7rem; color: lightgrey;\" name=\"storefront-outline\"></ion-icon>\n                <ion-label class=\"r-h3\">Winkelvoorraad & Reserveren</ion-label>\n            </ion-item>\n        \n            <ion-list slot=\"content\" style=\"background-color: #f2f2f2;\">\n                \n                <ng-container *ngIf=\"stockBranchMap && stockBranchMap.size > 0\">\n                \n                    <div class=\"r-h3\" style=\"margin-left: 15px; margin-top: 15px; margin-bottom: 15px;\">\n                        Kies hieronder een filiaal om de winkelvoorraad in te zien\n                    </div>\n\n                    <ion-item style=\"--background: #f2f2f2;\">\n                        <ion-label position=\"stacked\" class=\"r-h3\">Filiaal</ion-label>\n                        <ion-select [(ngModel)]=\"shopStockBranch\" interface=\"popover\" class=\"r-h2\">\n                            <ion-select-option *ngFor=\"let br of branches\" [value]=\"br\" class=\"r-h2\">{{ br.full_name }}</ion-select-option>\n                        </ion-select>\n                    </ion-item>\n            \n                    <ng-container *ngFor=\"let br of branches\">\n                        <ng-container *ngIf=\"shopStockBranch.id == br.id\">\n            \n                            <ng-container *ngFor=\"let pr of products\">\n            \n                                <div style=\"margin-top: 40px;\">\n            \n                                    <ion-grid style=\"border: 1px solid lightgrey; border-radius: 5px; margin: 15px;\">\n            \n                                        <ion-row *ngFor=\"let pv of pr.product_variants\" class=\"stock-row ion-justify-content-between ion-align-items-center\">\n            \n                                            <ion-col size=\"2\" class=\"ion-align-self-center\">\n                                                <ion-item lines=\"none\" class=\"stock-level-item\" style=\"--background: #f2f2f2;\">\n                                                    <ion-label>\n                                                        <div class=\"r-h3\">{{ pv.size.name }}</div>\n                                                    </ion-label>\n                                                </ion-item>\n                                            </ion-col>\n            \n                                            <ion-col size=\"6\" text-right class=\"ion-align-self-center\">\n            \n                                                <ion-item lines=\"none\" class=\"stock-level-item ion-text-right\"\n                                                    *ngIf=\"stockBranchMap.get(pv.id).get(br.id) <= 0\" style=\"--background: #f2f2f2;\">\n                                                    <ion-label text-wrap>\n                                                        <div class=\"r-h3\">Niet op voorraad</div>\n                                                    </ion-label>\n                                                    <ion-icon slot=\"end\" name=\"close-circle-outline\" color=\"danger\" size=\"small\"></ion-icon>\n                                                </ion-item>\n                                                <ion-item lines=\"none\"\n                                                    *ngIf=\"stockBranchMap.get(pv.id).get(br.id) > 0 && stockBranchMap.get(pv.id).get(br.id) < 2\"\n                                                    style=\"--background: #f2f2f2;\" class=\"stock-level-item ion-text-right\">\n                                                    <ion-label text-wrap>\n                                                        <div class=\"r-h3\">Nog {{ stockBranchMap.get(pv.id).get(br.id) }} op voorraad\n                                                        </div>\n                                                    </ion-label>\n                                                    <ion-icon slot=\"end\" name=\"checkmark-circle-outline\" color=\"warning\" size=\"small\">\n                                                    </ion-icon>\n                                                </ion-item>\n                                                <ion-item lines=\"none\" *ngIf=\"stockBranchMap.get(pv.id).get(br.id) >= 2\"\n                                                    class=\"stock-level-item ion-text-right\" style=\"--background: #f2f2f2;\">\n                                                    <ion-label text-wrap>\n                                                        <div class=\"r-h3\">Op voorraad</div>\n                                                    </ion-label>\n                                                    <ion-icon slot=\"end\" name=\"checkmark-circle-outline\" color=\"success\" size=\"small\">\n                                                    </ion-icon>\n                                                </ion-item>\n            \n                                            </ion-col>\n            \n                                            <ion-col size=\"4\" class=\"ion-align-self-center ion-text-right\">\n                                                <ion-button size=\"small\" color=\"cta\"\n                                                    [disabled]=\"!stockBranchMap.get(pv.id).get(br.id) || stockBranchMap.get(pv.id).get(br.id) <= 0\"\n                                                    (click)=\"createReservation(pv, br.id)\">\n                                                    <div class=\"r-h3\">Reserveer</div>\n                                                </ion-button>\n                                            </ion-col>\n            \n                                        </ion-row>\n            \n                                    </ion-grid>\n                                </div>\n            \n                            </ng-container>\n            \n                        </ng-container>\n                    </ng-container>\n                \n                </ng-container>\n\n            </ion-list>\n\n        </ion-accordion>\n\n        <!-- <ion-accordion>\n            <ion-item slot=\"header\">\n                <ion-label class=\"r-h3\">Bezorgen / Retourneren</ion-label>\n            </ion-item>\n        \n            <ion-list slot=\"content\">\n        \n            </ion-list>\n        </ion-accordion> -->\n\n    </ion-accordion-group>\n\n</ng-template>\n\n<ng-template #associatedProductsTemplate let-objects=\"objects\" let-title=\"title\" let-subtitle=\"subtitle\">\n\n    <ion-card-header>\n        <ion-card-title style=\"font-size: 2.4rem !important;\">{{ title }}</ion-card-title>\n        <ion-card-subtitle class=\"r-h3\">{{ subtitle }}</ion-card-subtitle>\n    </ion-card-header>\n\n    <ion-card-content class=\"ion-text-center\">\n\n        <swiper-container [config]=\"sliderConfig\" *ngIf=\"objects && objects.length > 0\">\n            <swiper-slide *ngFor=\"let obj of objects\">\n                <rope-product-container\n                    [outfit]=\"obj\"\n                    [showLikeButton]=\"true\"\n                    [maxLengthDescription]=\"20\"\n                    (navigateToShopDetail)=\"changeCurrentOutfit(obj)\"\n                ></rope-product-container>\n            </swiper-slide>\n        </swiper-container>\n\n        <div *ngIf=\"!objects || (objects && objects.length === 0)\" class=\"suggestions-loader\" style=\"height: 614px;\">\n            <ion-spinner name=\"crescent\"></ion-spinner>\n        </div>\n\n    </ion-card-content>\n    \n</ng-template>\n\n<ng-template #uspContainer>\n    <div class=\"r-flex r-flex-v-center r-flex-h-space-between usp-container\">\n        <div *ngFor=\"let currentUsp of usps\" class=\"r-flex r-flex-h-center r-flex-v-center\" style=\"width: fit-content; position: relative;\">\n            <ion-icon [name]=\"currentUsp.icon\" style=\"margin-right: 8px; font-size: 1.9rem;\"></ion-icon>\n            <div style=\"font-size: 1.3rem;\" [innerHTML]=\"currentUsp.message\"></div>\n        </div>\n    </div>\n</ng-template>\n","import { Component, OnInit, Input, ViewChild, TemplateRef, Output, EventEmitter } from '@angular/core';\nimport { ScreensizeService } from '../../../services/screensize.service';\nimport { Subscription } from 'rxjs';\nimport { CampaignService } from '../../../services/campaign.service';\nimport { VgApiService } from '@videogular/ngx-videogular/core';\nimport { Outfit } from '../../../models/outfit';\n\n@Component({\n  selector: 'rope-campaign-detail',\n  templateUrl: './campaign-detail.component.html',\n  styleUrls: ['./campaign-detail.component.scss']\n})\nexport class CampaignDetailComponent implements OnInit {\n\n  @ViewChild('fullwidthbanner', { static: true }) fullwidthbanner: TemplateRef<any>;\n  @ViewChild('threemedia', { static: true }) threemedia: TemplateRef<any>;\n  @ViewChild('fourmedia', { static: true }) fourmedia: TemplateRef<any>;\n  @ViewChild('onemedia', { static: true }) onemedia: TemplateRef<any>;\n  @ViewChild('collageoverlap', { static: true }) collageoverlap: TemplateRef<any>;\n  @ViewChild('textbanner', { static: true }) textbanner: TemplateRef<any>;\n  public templates = [];\n\n  @Input() public content;\n  @Input() public campaignId;\n  \n  @Output() public navigate = new EventEmitter<string>();\n  \n  public campaign;\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  constructor(\n    public screensizeService: ScreensizeService,\n    public campaignService: CampaignService,\n  ) { }\n\n  ngOnInit(): void {\n\n    this.templates = [\n      {\n        name: 'fullwidthbanner',\n        template: this.fullwidthbanner\n      },\n      {\n        name: 'threemedia',\n        template: this.threemedia\n      },\n      {\n        name: 'fourmedia',\n        template: this.fourmedia\n      },\n      {\n        name: 'onemedia',\n        template: this.onemedia\n      },\n      {\n        name: 'collageoverlap',\n        template: this.collageoverlap\n      },\n      {\n        name: 'textbanner',\n        template: this.textbanner\n      }\n    ];\n    \n    this.screensizeObserver = this.screensizeService.isDesktopView().subscribe(isDesktop => {\n      this.isDesktop = isDesktop;\n    });\n\n    this.campaignService.getOne(this.campaignId).subscribe(campaigns => {\n      this.campaign = campaigns[0];\n      if (this.campaign.campaign_blocks) {\n        this.campaign.campaign_blocks.sort((a, b) => a.sort_index - b.sort_index);\n      }\n    });\n\n  }\n\n  ngOnDestroy() {\n    if (this.screensizeObserver) {\n      this.screensizeObserver.unsubscribe();\n    }\n  }\n\n  public onPlayerReady(vgApi: VgApiService, video) {\n    video.api = vgApi;\n    video.api.volume = 0;\n  }\n\n  public doNavigate(url) {\n    this.navigate.emit(url);\n  }\n\n  public getTemplate(block) {\n    const template = this.templates.find(t => t.name === block.campaign_block_template.template_name);\n    return template.template;\n  }\n\n  public getTemplateContext(block) {\n\n    let context = { \n      isdesktop: this.isDesktop,\n      backgroundcolor: block.background_color,\n      backgroundimage: block.background_image_url,\n      backgroundimageposition: this.getBackgroundImagePosition(block.background_image_position),\n      overlayimage: block.overlay_image_url,\n      overlayimageposition: this.getOverlayImagePosition(block.overlay_image_position),\n      overlayhref: block.overlay_href,\n      overlaptop: block.overlap_top,\n      overlapbottom: block.overlap_bottom\n    };\n\n    const campaignBlockTemplateMedias = block.campaign_block_template.campaign_block_template_medias ? block.campaign_block_template.campaign_block_template_medias : [];\n    for (let cbtm of campaignBlockTemplateMedias) {\n      const cbm = block.campaign_block_medias ? block.campaign_block_medias.find(cbm => cbm.campaign_block_template_media.id === cbtm.id) : undefined;\n      if (cbm) {\n        context[cbtm.reference] = cbm;\n      }\n    }\n\n    return context;\n\n  }\n\n  public getBackgroundImagePosition(position) {\n    if (position === 'CENTER') {\n      return 'center center';\n    } else if (position === 'LEFT') {\n      return 'left center';\n    } else if (position === 'RIGHT') {\n      return 'right center';\n    }\n  }\n\n  public getOverlayImagePosition(position) {\n    if (position === 'CENTER') {\n      return 'center';\n    } else if (position === 'LEFT') {\n      return 'flex-start';\n    } else if (position === 'RIGHT') {\n      return 'flex-end';\n    }\n  }\n\n  public goToShopDetail(outfit: Outfit) {\n    this.navigate.emit('/shop/basics/' + outfit.id);\n  }\n\n}\n","<ng-template #media let-mediaobj=\"mediaobj\" let-width=\"width\" let-height=\"height\" let-border=\"border\">\n    <div style=\"position: relative; display: flex; justify-content: center;\">\n        <div \n            *ngIf=\"mediaobj.media && mediaobj.media.content_type.indexOf('image') !== -1;\"\n            (click)=\"(mediaobj.href || mediaobj.outfit) ? doNavigate(mediaobj.href || '/shop/musthaves/'+mediaobj.outfit.id) : !!false\"\n            [defaultImage]=\"mediaobj.media.url+''\"\n            [lazyLoad]=\"mediaobj.media.url+''\"\n            [ngStyle]=\"{ 'width': width, 'height': height, 'border': border }\"\n            style=\"background-size: cover; background-position: center;\"\n        >\n        </div>\n        <div [ngStyle]=\"{ 'width': width, 'height': height, 'border': border }\" *ngIf=\"mediaobj.media && mediaobj.media.content_type.indexOf('video') !== -1\">\n            <vg-player (onPlayerReady)=\"onPlayerReady($event, mediaobj.media)\">\n                <video [vgMedia]=\"$any(media)\" #mediaObj id=\"video\" preload=\"none\" playsinline muted loop autoplay\n                    style=\"width: 100%; object-fit: cover;\" loading=\"lazy\">\n                    <source [src]=\"mediaobj.media.url\" [type]=\"mediaobj.media.content_type\">\n                </video>\n            </vg-player>\n        </div>\n        <div *ngIf=\"mediaobj.outfit\" style=\"position: absolute; bottom: 15px; left: 50%; transform: translate(-50%, 0%);\">\n            <ion-button (click)=\"doNavigate(mediaobj.href || '/shop/musthaves/'+mediaobj.outfit.id)\" size=\"small\">\n                <ion-icon slot=\"start\" [name]=\"mediaobj.outfit ? 'shirt-outline' : 'list-outline'\"></ion-icon>\n                <div style=\"font-family: var(--default-font);\">{{ mediaobj.outfit ? 'Shop the look' : 'Lees meer' }}</div>\n            </ion-button>\n        </div>\n    </div>\n</ng-template>\n\n<ng-template #fullwidthbanner\n    let-isdesktop=\"isdesktop\"\n    let-backgroundcolor=\"backgroundcolor\"\n    let-backgroundimage=\"backgroundimage\" let-backgroundimageposition=\"backgroundimageposition\"\n    let-overlayimage=\"overlayimage\" let-overlayimageposition=\"overlayimageposition\" let-overlayhref=\"overlayhref\"\n    >\n\n    <div style=\"width: 100%; height: 80vh; min-height: 200px; max-height: 750px; background-size: cover; display: flex; align-items: center; padding: 10px;\"\n        [lazyLoad]=\"backgroundimage\"\n        [ngStyle]=\"{ 'background-color': backgroundcolor, 'justify-content': isdesktop && overlayimageposition ? overlayimageposition : 'center', 'background-position': !isdesktop && backgroundimageposition ? backgroundimageposition : '50% 50%' }\">\n        <img (click)=\"overlayhref ? doNavigate(overlayhref) : !!false\" *ngIf=\"overlayimage\" [src]=\"overlayimage\" [ngStyle]=\"{ 'max-width': isdesktop ? '50vw' : '90vw' }\">\n    </div>\n\n</ng-template>\n\n<ng-template #onemedia let-isdesktop=\"isdesktop\" let-backgroundcolor=\"backgroundcolor\"\n    let-backgroundimage=\"backgroundimage\" let-backgroundimageposition=\"backgroundimageposition\"\n    let-overlayimage=\"overlayimage\" let-overlayimageposition=\"overlayimageposition\" let-overlaptop=\"overlaptop\"\n    let-overlapbottom=\"overlapbottom\"\n    let-media1=\"media1\" let-media2=\"media2\" let-media3=\"media3\">\n\n    <div style=\"position: relative; width: 100%; background-size: cover; display: flex; align-items: center;\"\n        [ngStyle]=\"{ 'background-color': backgroundcolor, 'background-image': backgroundimage ? 'url('+backgroundimage+')' : 'none', 'justify-content': isdesktop && overlayimageposition ? overlayimageposition : 'center', 'background-position': !isdesktop && backgroundimageposition ? backgroundimageposition : '50% 50%', 'z-index': overlaptop || overlapbottom ? '90': '10', 'padding': isdesktop ? '40px' : '8px' }\">\n\n        <img style=\"position:absolute; left:50%; top:50%; transform: translate(-50%, -50%); z-index: 999;\"\n            *ngIf=\"overlayimage\" [src]=\"overlayimage\" [ngStyle]=\"{ 'max-width': isdesktop ? '50vw' : '90vw' }\">\n\n        <ion-grid\n            [ngStyle]=\"{ 'margin-top': overlaptop ? -(40+overlaptop)+'px' : '25px', 'margin-bottom': overlapbottom ? -(40+overlapbottom)+'px' : '25px' }\">\n            <ion-row *ngIf=\"media2\">\n                <ion-col size=\"8\"></ion-col>\n                <ion-col size=\"4\">\n                    <ng-container *ngIf=\"media2\" [ngTemplateOutlet]=\"media\"\n                        [ngTemplateOutletContext]=\"{ mediaobj: media2, width: '100%', height: '45px'}\">\n                    </ng-container>\n                </ion-col>\n                <ion-col size=\"8\"></ion-col>\n            </ion-row>\n            <ion-row>\n                <ion-col [ngStyle]=\"{ 'padding': isdesktop ? '80px' : '0px' }\" size=\"12\">\n                    <ng-container *ngIf=\"media1\" [ngTemplateOutlet]=\"media\"\n                        [ngTemplateOutletContext]=\"{ mediaobj: media1, width: '100%', height: '80vh', border: media1.border ? media1.border : 'none' }\">\n                    </ng-container>\n                </ion-col>\n            </ion-row>\n            <ion-row *ngIf=\"media3\">\n                <ion-col size=\"8\"></ion-col>\n                <ion-col size=\"4\">\n                    <ng-container *ngIf=\"media3\" [ngTemplateOutlet]=\"media\"\n                        [ngTemplateOutletContext]=\"{ mediaobj: media3, width: '100%', height: '45px'}\">\n                    </ng-container>\n                </ion-col>\n                <ion-col size=\"8\"></ion-col>\n            </ion-row>\n        </ion-grid>\n\n    </div>\n\n</ng-template>\n\n<ng-template #threemedia\n    let-isdesktop=\"isdesktop\"\n    let-backgroundcolor=\"backgroundcolor\"\n    let-backgroundimage=\"backgroundimage\" let-backgroundimageposition=\"backgroundimageposition\" \n    let-overlayimage=\"overlayimage\" let-overlayimageposition=\"overlayimageposition\"\n    let-overlaptop=\"overlaptop\" let-overlapbottom=\"overlapbottom\"\n    let-border=\"border\"\n    let-media1=\"media1\"\n    let-media2=\"media2\"\n    let-media3=\"media3\"\n    let-media4=\"media4\"\n    let-media5=\"media5\"\n    let-media6=\"media6\"\n    let-media7=\"media7\">\n\n    <div style=\"position: relative; width: 100%; background-size: cover; display: flex; align-items: center;\"\n        [ngStyle]=\"{ 'background-color': backgroundcolor, 'background-image': backgroundimage ? 'url('+backgroundimage+')' : 'none', 'justify-content': isdesktop && overlayimageposition ? overlayimageposition : 'center', 'background-position': !isdesktop && backgroundimageposition ? backgroundimageposition : '50% 50%', 'z-index': overlaptop || overlapbottom ? '90': '10', 'padding': isdesktop ? '40px': '8px' }\">\n        \n        <img style=\"position:absolute; left:50%; top:50%; transform: translate(-50%, -50%); z-index: 999;\" *ngIf=\"overlayimage\" [src]=\"overlayimage\" [ngStyle]=\"{ 'max-width': isdesktop ? '50vw' : '90vw' }\">\n\n        <ion-grid [ngStyle]=\"{ 'margin-top': overlaptop ? -(40+overlaptop)+'px' : '25px', 'margin-bottom': overlapbottom ? -(40+overlapbottom)+'px' : '25px' }\">\n            <ion-row *ngIf=\"media4 || media5\">\n                <ion-col style=\"padding-left: 40px;\" size=\"6\" size-lg=\"2\">\n                    <ng-container *ngIf=\"media4\" [ngTemplateOutlet]=\"media\" [ngTemplateOutletContext]=\"{ mediaobj: media4, width: '100%', height: '45px'}\">\n                    </ng-container>\n                </ion-col>\n                <ng-container *ngIf=\"isdesktop\">\n                    <ion-col size-lg=\"8\"></ion-col>\n                    <ion-col style=\"padding-right: 40px;\" size=\"6\" size-lg=\"2\">\n                        <ng-container *ngIf=\"media5\" [ngTemplateOutlet]=\"media\"\n                            [ngTemplateOutletContext]=\"{ mediaobj: media5, width: '100%', height: '45px'}\">\n                        </ng-container>\n                    </ion-col>\n                </ng-container>\n            </ion-row>\n            <ion-row>\n                <ion-col [ngStyle]=\"{ 'padding': isdesktop ? '40px' : '10px' }\" size-lg=\"4\">\n                    <ng-container *ngIf=\"media1\" [ngTemplateOutlet]=\"media\" [ngTemplateOutletContext]=\"{ mediaobj: media1, width: '100%', height: '70vh', border: media1.border ? media1.border : 'none' }\">\n                    </ng-container>\n                </ion-col>\n                <ion-col [ngStyle]=\"{ 'padding': isdesktop ? '40px' : '10px' }\" size=\"12\" size-lg=\"4\">\n                    <ng-container *ngIf=\"media2\" [ngTemplateOutlet]=\"media\" [ngTemplateOutletContext]=\"{ mediaobj: media2, width: '100%', height: '70vh', border: media2.border ? media2.border : 'none' }\">\n                    </ng-container>\n                </ion-col>\n                <ion-col [ngStyle]=\"{ 'padding': isdesktop ? '40px' : '10px' }\" size=\"12\" size-lg=\"4\">\n                    <ng-container *ngIf=\"media3\" [ngTemplateOutlet]=\"media\" [ngTemplateOutletContext]=\"{ mediaobj: media3, width: '100%', height: '70vh', border: media3.border ? media3.border : 'none' }\">\n                    </ng-container>\n                </ion-col>\n            </ion-row>\n            <ion-row *ngIf=\"media6 || media7\">\n                <ng-container *ngIf=\"isdesktop\">\n                    <ion-col style=\"padding-left: 40px;\" size=\"6\" size-lg=\"2\">\n                        <ng-container *ngIf=\"media6\" [ngTemplateOutlet]=\"media\"\n                        [ngTemplateOutletContext]=\"{ mediaobj: media6, width: '100%', height: '45px'}\">\n                        </ng-container>\n                    </ion-col>\n                    <ion-col size-lg=\"8\"></ion-col>\n                </ng-container>\n                <ion-col style=\"padding-right: 40px;\" size=\"6\" size-lg=\"2\">\n                    <ng-container *ngIf=\"media7\" [ngTemplateOutlet]=\"media\"\n                        [ngTemplateOutletContext]=\"{ mediaobj: media7, width: '100%', height: '45px'}\">\n                    </ng-container>\n                </ion-col>\n            </ion-row>\n        </ion-grid>\n\n    </div>\n\n</ng-template>\n\n<ng-template #fourmedia \n    let-isdesktop=\"isdesktop\" let-backgroundcolor=\"backgroundcolor\"\n    let-backgroundimage=\"backgroundimage\" let-backgroundimageposition=\"backgroundimageposition\"\n    let-overlayimage=\"overlayimage\" let-overlayimageposition=\"overlayimageposition\" let-overlaptop=\"overlaptop\"\n    let-overlapbottom=\"overlapbottom\" let-media1=\"media1\" let-media2=\"media2\" let-media3=\"media3\" let-media4=\"media4\">\n\n    <div style=\"position: relative; width: 100%; background-size: cover; display: flex; align-items: center; padding: 40px;\"\n        [ngStyle]=\"{ 'background-color': backgroundcolor, 'background-image': backgroundimage ? 'url('+backgroundimage+')' : 'none', 'justify-content': isdesktop && overlayimageposition ? overlayimageposition : 'center', 'background-position': !isdesktop && backgroundimageposition ? backgroundimageposition : '50% 50%', 'z-index': overlaptop || overlapbottom ? '90': '10', 'padding': isdesktop ? '40px': '8px' }\">\n\n        <img style=\"position:absolute; left:50%; top:50%; transform: translate(-50%, -50%); z-index: 999; max-width: 20vw;\"\n            *ngIf=\"overlayimage\" [src]=\"overlayimage\" [ngStyle]=\"{ 'max-width': isdesktop ? '50vw' : '90vw' }\">\n\n        <ion-grid\n            [ngStyle]=\"{ 'margin-top': overlaptop ? -(40+overlaptop)+'px' : '25px', 'margin-bottom': overlapbottom ? -(40+overlapbottom)+'px' : '25px' }\">\n            <ion-row>\n                <ion-col [ngStyle]=\"{ 'padding': isdesktop ? '20px' : '10px' }\" size=\"6\" size-lg=\"3\">\n                    <ng-container *ngIf=\"media1\" [ngTemplateOutlet]=\"media\"\n                        [ngTemplateOutletContext]=\"{ mediaobj: media1, width: '100%', height: isdesktop ? '70vh' : '50vh', border: media1.border ? media1.border : 'none' }\">\n                    </ng-container>\n                </ion-col>\n                <ion-col [ngStyle]=\"{ 'padding': isdesktop ? '20px' : '10px' }\" size=\"6\" size-lg=\"3\">\n                    <ng-container *ngIf=\"media2\" [ngTemplateOutlet]=\"media\"\n                        [ngTemplateOutletContext]=\"{ mediaobj: media2, width: '100%', height: isdesktop ? '70vh' : '50vh', border: media2.border ? media2.border : 'none' }\">\n                    </ng-container>\n                </ion-col>\n                <ion-col [ngStyle]=\"{ 'padding': isdesktop ? '20px' : '10px' }\" size=\"6\" size-lg=\"3\">\n                    <ng-container *ngIf=\"media3\" [ngTemplateOutlet]=\"media\"\n                        [ngTemplateOutletContext]=\"{ mediaobj: media3, width: '100%', height: isdesktop ? '70vh' : '50vh', border: media3.border ? media3.border : 'none' }\">\n                    </ng-container>\n                </ion-col>\n                <ion-col [ngStyle]=\"{ 'padding': isdesktop ? '20px' : '10px' }\" size=\"6\" size-lg=\"3\">\n                    <ng-container *ngIf=\"media4\" [ngTemplateOutlet]=\"media\"\n                        [ngTemplateOutletContext]=\"{ mediaobj: media4, width: '100%', height: isdesktop ? '70vh' : '50vh', border: media4.border ? media4.border : 'none' }\">\n                    </ng-container>\n                </ion-col>\n            </ion-row>\n        </ion-grid>\n\n    </div>\n\n</ng-template>\n\n<ng-template #collageoverlap let-isdesktop=\"isdesktop\" let-backgroundcolor=\"backgroundcolor\"\n    let-backgroundimage=\"backgroundimage\" let-backgroundimageposition=\"backgroundimageposition\"\n    let-overlayimage=\"overlayimage\" let-overlayimageposition=\"overlayimageposition\" let-overlaptop=\"overlaptop\"\n    let-overlapbottom=\"overlapbottom\" let-media1=\"media1\" let-media2=\"media2\" let-media3=\"media3\">\n\n    <div style=\"position: relative; width: 100%; background-size: cover; display: flex; align-items: center; padding-top: 40px; padding-bottom: 40px;\"\n        [ngStyle]=\"{ 'background-color': backgroundcolor, 'background-image': backgroundimage ? 'url('+backgroundimage+')' : 'none', 'justify-content': isdesktop && overlayimageposition ? overlayimageposition : 'center', 'background-position': !isdesktop && backgroundimageposition ? backgroundimageposition : '50% 50%', 'z-index': overlaptop || overlapbottom ? '90': '10' }\">\n\n        <img style=\"position:absolute; left:50%; top:50%; transform: translate(-50%, -50%); z-index: 999;\"\n            *ngIf=\"overlayimage\" [src]=\"overlayimage\" [ngStyle]=\"{ 'max-width': isdesktop ? '50vw' : '90vw' }\">\n\n        <ion-grid class=\"ion-no-padding\"\n            [ngStyle]=\"{ 'margin-top': overlaptop ? -(40+overlaptop)+'px' : '25px', 'margin-bottom': overlapbottom ? -(40+overlapbottom)+'px' : '25px' }\">\n            <ion-row class=\"ion-no-padding\">\n                <ion-col size=\"12\" size-lg=\"8\">\n                    <ng-container *ngIf=\"media1\" [ngTemplateOutlet]=\"media\"\n                        [ngTemplateOutletContext]=\"{ mediaobj: media1, width: '100%', height: '80vh', border: media1.border ? media1.border : 'none' }\">\n                    </ng-container>\n                </ion-col>\n                <ion-col size=\"12\" size-lg=\"4\" style=\"padding-left: 20px; padding-top: 18vh;\">\n                    <ng-container *ngIf=\"media2\" [ngTemplateOutlet]=\"media\"\n                        [ngTemplateOutletContext]=\"{ mediaobj: media2, width: '100%', height: '50vh', border: media2.border ? media2.border : 'none' }\">\n                    </ng-container>\n                </ion-col>\n            </ion-row>\n        </ion-grid>\n\n        <div style=\"position:absolute; left: 65%; top: 55%; transform: translate(-50%, -50%); z-index: 999;\" *ngIf=\"media3\">\n            <ng-container [ngTemplateOutlet]=\"media\"\n                [ngTemplateOutletContext]=\"{ mediaobj: media3, width: '350px', height: '380px', border: media3.border ? media3.border : 'none' }\">\n            </ng-container>\n        </div>\n\n    </div>\n\n</ng-template>\n\n<ng-template #textbanner let-isdesktop=\"isdesktop\" let-backgroundcolor=\"backgroundcolor\"\n    let-backgroundimage=\"backgroundimage\" let-backgroundimageposition=\"backgroundimageposition\"\n    let-overlaptop=\"overlaptop\" let-overlapbottom=\"overlapbottom\"\n    let-overlayimage=\"overlayimage\" let-overlayimageposition=\"overlayimageposition\" let-overlayhref=\"overlayhref\" let-media1=\"media1\">\n\n    <div style=\"width: 100%; height: 200px; min-height: 200px; max-height: 750px; background-size: cover; display: flex; align-items: center; padding: 10px;\"\n        [lazyLoad]=\"backgroundimage\"\n        [ngStyle]=\"{ 'background-color': backgroundcolor, 'justify-content': isdesktop && overlayimageposition ? overlayimageposition : 'center', 'background-position': !isdesktop && backgroundimageposition ? backgroundimageposition : '50% 50%' }\">\n        \n        <img (click)=\"overlayhref ? doNavigate(overlayhref) : !!false\" *ngIf=\"overlayimage\" [src]=\"overlayimage\"\n            [ngStyle]=\"{ 'max-width': isdesktop ? '50vw' : '90vw' }\">\n\n        <ion-grid class=\"ion-no-padding\" \n            [ngStyle]=\"{ 'margin-top': overlaptop ? -(40+overlaptop)+'px' : '25px', 'margin-bottom': overlapbottom ? -(40+overlapbottom)+'px' : '25px' }\">\n            <ion-row class=\"ion-no-padding\">\n                <ion-col size=\"12\" size-lg=\"12\" class=\"ion-align-items-center\">\n                    <ng-container *ngIf=\"media1\" [ngTemplateOutlet]=\"media\"\n                        [ngTemplateOutletContext]=\"{ mediaobj: media1, width: '400px', height: '150px', border: media1.border ? media1.border : 'none' }\">\n                    </ng-container>\n                </ion-col>\n            </ion-row>\n        </ion-grid>\n\n    </div>\n\n</ng-template>\n\n\n<!-- Parse campaign templates -->\n<ng-container *ngIf=\"campaign && templates.length > 0\">\n\n    <div class=\"grid\">\n        <ng-container *ngFor=\"let block of campaign.campaign_blocks\">\n            <ng-container\n                [ngTemplateOutlet]=\"getTemplate(block)\"\n                [ngTemplateOutletContext]=\"getTemplateContext(block)\">\n            </ng-container>\n        </ng-container>\n    </div>\n\n\n    <div class=\"blocks\" *ngIf=\"campaign.outfits && campaign.outfits.length > 0\">\n\n        <div class=\"block\">\n\n            <ion-card-header>\n                <ion-card-title>{{ campaign.name }}</ion-card-title>\n                <ion-card-subtitle>Geplaatst op: {{ campaign.timestamp_online | date:'mediumDate' }}</ion-card-subtitle>\n            </ion-card-header>\n\n            <ion-card-content class=\"ion-text-center\">\n                {{ campaign.description }}\n            </ion-card-content>\n\n        </div>\n\n        <div class=\"block\">\n            \n            <ion-card-header>\n                <ion-card-title>Producten in deze campagne</ion-card-title>\n                <ion-card-subtitle>Shop the looks</ion-card-subtitle>\n            </ion-card-header>\n            <ion-card-content style=\"padding-left: 10px; padding-right: 10px;\">\n            \n                <ion-grid>\n                    <ion-row>\n                        <ion-col *ngFor=\"let outfit of campaign.outfits; let i = index;\" size=\"6\" size-lg=\"3\" style=\"padding: 10px;\">\n                            <rope-product-container \n                                [outfit]=\"outfit\"\n                                [showLikeButton]=\"false\"\n                                [onlyPreorders]=\"false\"\n                                (navigateToShopDetail)=\"goToShopDetail($event)\"\n                            ></rope-product-container>\n                        </ion-col>\n                    </ion-row>\n                </ion-grid>\n            \n                <div *ngIf=\"(campaign.outfits && campaign.outfits.length === 0)\" class=\"no-results\">\n                    <div class=\"no-results-text\">Geen producten gevonden...</div>\n                </div>\n            \n            </ion-card-content>\n\n        </div>\n\n    </div>\n\n</ng-container>","import { Injectable } from '@angular/core';\nimport { AuthService } from './auth.service';\nimport { CoreService } from './core.service';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\n@Injectable({\n  providedIn: 'root'\n})\nexport class ServiceRequestService {\n\n  constructor(\n    private coreService: CoreService,\n    private http: HttpClient,\n    public authService: AuthService\n  ) { }\n\n  public openServiceRequest(source, externalId) {\n\n    const urlPart = 'service_request/open';\n    let params = new HttpParams().set('source', source);\n    params = params.set('external_id', externalId);\n\n    const requestOptions = {\n      headers: this.coreService.getHeaders().set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader),\n      params: params\n    };\n    return this.http.get<any>(this.coreService.getBaseUrl() + urlPart, requestOptions);\n\n  }\n\n  public getServiceRequests(source, status) {\n\n    const urlPart = 'service_request/get';\n    \n    let params = new HttpParams();\n    if (source) {\n      params = params.set('source', source);\n    }\n\n    if (status) {\n      params = params.set('status', status);\n    }\n\n    const requestOptions = {\n      headers: this.coreService.getHeaders().set('X-KiBa-Auth', this.authService.getCurrentUser().authHeader),\n      params: params\n    };\n    return this.http.get<any>(this.coreService.getBaseUrl() + urlPart, requestOptions);\n\n  }\n\n}\n","import { Component, OnInit, Input, ViewChild, Output, EventEmitter } from '@angular/core';\nimport { IonContent } from '@ionic/angular';\nimport { tap } from 'rxjs/operators';\nimport { AuthService } from '../../../services/auth.service';\nimport { ChatService } from '../../../services/chat.service';\nimport { ServiceRequestService } from '../../../services/service-request.service';\n\n@Component({\n  selector: 'rope-chat',\n  templateUrl: './chat.component.html',\n  styleUrls: ['./chat.component.scss']\n})\nexport class ChatComponent implements OnInit {\n\n  @Input() public serviceRequest;\n\n  @Output() public navigate = new EventEmitter<String>();\n\n  @ViewChild(IonContent) content: IonContent;\n\n  public user;\n\n  public items;\n  public text;\n  public loading = true;\n  public chatClosed = false;\n\n  constructor(\n    public chatService: ChatService,\n    public authService: AuthService,\n    public serviceRequestService: ServiceRequestService\n  ) { }\n\n  async ngOnInit() {\n\n    this.loading = true;\n    this.user = this.authService.getCurrentUser();\n\n    let countNewMessages = 0;\n    this.items = this.chatService.getChatsByUser(this.serviceRequest.id).pipe(tap(r => {\n      \n      this.chatService.resetChatsUnread();\n      setTimeout(() => this.content.scrollToBottom(250), 250);\n\n      for (let rr of r) {\n        \n        if (rr['type'] && rr['type'] === 'CLOSE_SERVICE_REQUEST') {\n          this.chatClosed = true;\n          this.chatService.stopChat();\n        }\n\n        if (rr['is_own'] === true && countNewMessages === 0) {\n          this.reloadServiceRequest();\n          countNewMessages++;\n        }\n\n      }\n\n    }));\n    this.loading = false;\n    setTimeout(() => this.content.scrollToBottom(250), 250);\n\n  }\n\n  public reloadServiceRequest() {\n    this.serviceRequestService.getServiceRequests('WEBAPP_SHOPPING', 'OPEN').subscribe(serviceRequests => {\n      this.serviceRequest = serviceRequests[0];\n    });\n  }\n\n  public getEmployeeName() {\n    return this.serviceRequest.employee.name.split(' ')[0];\n  }\n\n  public doNavigate(url) {\n    this.navigate.emit(url);\n  }\n\n  public sendMessage() {\n\n    this.text = this.text.replace(/(\\r\\n|\\n|\\r)/gm, \"\");\n    this.text = this.text.trim();\n    if (!this.text || this.text === '') {\n      return;\n    }\n\n    const obj = {\n      is_own: false,\n      timestamp: new Date().getTime(),\n      service_request_id: this.serviceRequest.id+'',\n      user_id: this.user['firebase_uid'],\n      for_user_id: 'gDal8mkIKZSlxMeUmURY2PTLrHh1',\n      message: this.text\n    };\n    this.text = ''\n\n    this.chatService.addChat(obj);\n    setTimeout(() => this.content.scrollToBottom(250), 100);\n\n  }\n\n}\n","<ion-item-divider style=\"height: 10%; --padding-start: 0px;\">\n    <ion-label class=\"ion-text-center\" style=\"font-family: var(--default-font); font-size: 1.1rem; width: 100%;\">\n        <ng-container *ngIf=\"serviceRequest.employee\">Je chat nu met: <b>{{ getEmployeeName() }}</b></ng-container>\n        <ng-container *ngIf=\"!serviceRequest.employee\">Wachten op je persoonlijke stylist...</ng-container>\n    </ion-label>\n</ion-item-divider>\n\n<div style=\"width: 100%; height: 90%; display: flex; flex-direction: column; align-items: center; justify-content: flex-end; border: 1px solid grey;\">\n\n    <ion-content style=\"--background: #f4f4f4; height: 80%; border-radius: 5px;\" class=\"chat-content\">\n        <div class=\"messages-container\" style=\"height: 100%;\">\n            <div class=\"message-container\" *ngFor=\"let item of items | async\">\n                <ng-container [ngTemplateOutlet]=\"chatBubble\" [ngTemplateOutletContext]=\"{ message: item }\"></ng-container>\n            </div>\n            <div *ngIf=\"loading\">\n                <ion-spinner name=\"crescent\"></ion-spinner>\n            </div>\n        </div>\n    </ion-content>\n    <div *ngIf=\"chatClosed\" style=\"font-size: 0.9rem; font-style: italic;\" class=\"ion-text-center\">\n        Deze chat is gesloten, reageren is niet meer mogelijk.\n    </div>\n\n    <div class=\"textblock-container\" style=\"height: 20%;\">\n        <div class=\"textblock\">\n            <ion-textarea [disabled]=\"chatClosed\" style=\"text-align: left; font-size: 1.2rem;\" [(ngModel)]=\"text\" (keyup.enter)=\"sendMessage()\"></ion-textarea>\n        </div>\n        <div class=\"button-container\">\n            <ion-button [disabled]=\"chatClosed\" expand=\"block\" (click)=\"sendMessage()\" size=\"small\" color=\"secondary\">\n                <ion-icon slot=\"icon-only\" name=\"send\"></ion-icon>\n            </ion-button>\n        </div>\n    </div>\n\n</div>\n\n<ng-template #chatBubble let-message=\"message\">\n\n    <div [ngClass]=\"!message.is_own ? 'chat-holder-inversed' : 'chat-holder'\">\n        <div style=\"max-width: 40px; display: flex; align-items: center; justify-content: center; flex-direction: column;\">\n            <ion-avatar style=\"width: 35px; height: 35px;\">\n                <img style=\"width: 35px; height: 35px;\"\n                    [src]=\"!message.is_own ? 'https://icon-library.com/images/no-user-image-icon/no-user-image-icon-23.jpg' : 'https://icon-library.com/images/no-user-image-icon/no-user-image-icon-23.jpg'\">\n            </ion-avatar>\n            <div style=\"margin-top: 4px; font-size: 0.9rem;\">{{ message.is_own ? (serviceRequest.employee ? getEmployeeName() : 'Onbekend') : user.first_name }}</div>\n        </div>\n        <div class=\"chat-bubble\"\n            [ngClass]=\"{'left': message.is_own, 'right': !message.is_own, 'minify-width': message.message !== undefined}\">\n\n            <div *ngIf=\"message.message\" class=\"message\">\n                <div>{{ message.message.trim() }}</div>\n                <div *ngIf=\"message.type && message.type === 'NAVIGATE_WEBSHOP_PRODUCT'\" style=\"margin-left: 15px;\">\n                    <ion-button color=\"tertiary\" size=\"small\" (click)=\"doNavigate(message.navigateUrl)\">\n                        <ion-icon name=\"arrow-forward\" slot=\"icon-only\"></ion-icon>\n                    </ion-button>\n                </div>\n            </div>\n\n            <div class=\"message-detail\" style=\"float:right\" [ngClass]=\"message.message === undefined ? 'padder' : ''\">\n                <span>{{ message.timestamp | date:'medium' }}</span>\n            </div>\n\n        </div>\n    </div>\n\n</ng-template>\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ServiceRequestService } from '../../../services/service-request.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { ChatService } from '../../../services/chat.service';\nimport { BranchService } from '../../../services/branch.service';\nimport { CoreService } from '../../../services/core.service';\nimport { Subscription } from 'rxjs';\n\n@Component({\n  selector: 'rope-online-shopping',\n  templateUrl: './online-shopping.component.html',\n  styleUrls: ['./online-shopping.component.scss']\n})\nexport class OnlineShoppingComponent implements OnInit {\n\n  @Input() public preferences;\n\n  @Output() public navigate = new EventEmitter<String>();\n\n  public loading = true;\n  public loadingText = 'Laden...';\n\n  public authenticated;\n  public personalShoppingActive = false;\n  public personalShoppingLoading = false;\n\n  public customerName;\n  public customerEmail;\n\n  public openingStatus;\n  public chatStarted;\n  public chatSubscription: Subscription;\n\n  public onlineShoppingDetails = {};\n  public serviceRequest;\n  public saveSuccesfull;\n  public saving;\n\n  public showMode = 'chat';\n\n  constructor(\n    public serviceRequestService: ServiceRequestService,\n    public authService: AuthService,\n    public chatService: ChatService,\n    public coreService: CoreService,\n    public branchService: BranchService\n  ) { }\n\n  async ngOnInit() {\n\n    if (this.authService.isAuthenticated()) {\n      \n      this.loadingText = 'Gebruikergegevens ophalen...';\n      const user = this.authService.getCurrentUser();\n      if (!user.username) {\n        user.username = user.email;\n      }\n\n      this.authenticated = true;\n\n      this.loadingText = 'Openingstijden ophalen...';\n      const onlineBranch = this.coreService.getOnlineBranch();\n      const dayOfWeek = ((new Date().getDay() + 6) % 7) + 1;\n\n      const currentHour = new Date().getHours();\n      const currentMinute = new Date().getMinutes();\n\n      this.openingStatus = this.branchService.checkOpen(onlineBranch, dayOfWeek, currentHour, currentMinute);\n\n      this.chatSubscription = this.chatService.listenChatStarted().subscribe(chatStarted => {\n        this.chatStarted = chatStarted;\n      });\n\n      this.loadingText = 'Klantgegevens ophalen...';\n      const userDetails = await this.authService.getUserDetails(user).toPromise();\n      user['customer_details'] = userDetails['customer_details'];\n\n      if (user['customer_details']) {\n\n        const jsonObject = JSON.parse(user['customer_details']).online_shopping_details;\n        this.onlineShoppingDetails = jsonObject ? jsonObject : {};\n\n        if (this.preferences) {\n          for (let preference of this.preferences) {\n            for (let section of preference.sections) {\n              if (this.onlineShoppingDetails[section.type]) {\n                const obj = this.onlineShoppingDetails[section.type];\n                for (let choice of section.choices) {\n                  choice.isChecked = obj.some(c => c.name === choice.name);\n                }\n              }\n            }\n          }\n        }\n\n      }\n      this.customerName = user.first_name;\n      this.customerEmail = user.username;\n\n      this.loadingText = 'Service manager starten...';\n      this.serviceRequestService.getServiceRequests('WEBAPP_SHOPPING', 'OPEN').subscribe(serviceRequests => {\n        if (serviceRequests.length > 0) {\n          this.startPersonalShopping();\n        }\n        this.loading = false;\n      }, error => {\n        this.coreService.showAlert(error);\n      });\n\n    } else {\n\n      this.loading = false;\n\n    }\n\n  }\n\n  ngOnDestroy() {\n    if (this.chatSubscription) {\n      this.chatSubscription.unsubscribe();\n    }\n  }\n\n  public async startPersonalShopping() {\n\n    this.loadingText = 'Personal shopping starten...';\n    this.personalShoppingActive = true;\n    this.personalShoppingLoading = true;\n\n    const loggedInSuccess = await this.chatService.loginForChat();\n    if (loggedInSuccess) {\n\n      this.loadingText = 'Verzoek openen...';\n      const externalId = this.authService.getCurrentUser()['firebase_uid'];\n      this.serviceRequestService.openServiceRequest('WEBAPP_SHOPPING', externalId).subscribe(r => {\n        this.serviceRequest = r;\n        this.personalShoppingLoading = false;\n        this.chatService.startChat();\n      }, error => {\n        this.coreService.showAlert(error);\n      });\n\n    }\n\n  }\n\n  public back() {\n    this.showMode = 'chat';\n  }\n\n  public open(identifier) {\n    this.showMode = identifier;\n  }\n\n  public doNavigate(url) {\n    this.navigate.emit(url);\n  }\n\n  public toggleChoice(choice, section) {\n\n    const isChecked = !choice.isChecked;\n    let obj = this.onlineShoppingDetails[section.type];\n    if (isChecked) {\n\n      if (obj) {\n        if (!section.multiple) {\n          obj = [choice];\n          this.onlineShoppingDetails[section.type] = obj;\n        } else {\n          obj.push(choice);\n        }\n      } else {\n        this.onlineShoppingDetails[section.type] = [choice];\n      }\n\n      if (!section.multiple) {\n        section.choices.forEach(element => {\n          element.isChecked = false;\n        });\n      }\n\n    } else {\n      obj = obj.filter(c => c.name !== choice.name);\n      this.onlineShoppingDetails[section.type] = obj;\n    }\n\n    choice.isChecked = isChecked;\n\n  }\n\n  public save() {\n\n    const user = this.authService.getCurrentUser();\n\n    this.saving = true;\n    this.authService.updateUserForDetails(user, this.onlineShoppingDetails).subscribe(r => {\n      this.saving = false;\n      this.saveSuccesfull = true;\n      setTimeout(() => this.saveSuccesfull = false, 2500);\n    });\n\n  }\n\n}\n","<div>\n\n    <ng-container *ngIf=\"loading\">\n        <div style=\"display: flex; align-items: center; justify-content: center; min-height: 430px;\">\n            <ion-spinner name=\"crescent\"></ion-spinner>\n            <div style=\"font-size: 1.1rem; margin-left: 10px;\">{{ loadingText }}</div>\n        </div>\n    </ng-container>\n\n    <ng-container *ngIf=\"!loading\">\n\n        <ng-container *ngIf=\"!authenticated\">\n            <div style=\"display: flex; align-items: center; justify-content: center; flex-direction: column; min-height: 430px;\">\n                <div class=\"ion-text-center\" style=\"padding: 25px; font-size: 1.3rem;\">\n                    <p>Online winkelen, maar dan écht! Kom in contact met je persoonlijke fashion specialist en shop de leukste items!</p>\n                </div>\n\n                <div style=\"font-size: 1.3rem; font-weight: 700; margin-top: 25px;\">Je dient in te loggen om deze functie te gebruiken.</div>\n                <ion-button (click)=\"doNavigate('/login')\" color=\"tertiary\" style=\"margin-top: 15px;\">\n                    Direct inloggen\n                </ion-button>\n            </div>\n        </ng-container>\n\n        <ng-container *ngIf=\"authenticated\">\n\n            <ng-container *ngIf=\"showMode === 'chat'\">\n\n                <div class=\"ion-padding\">\n\n                    <div class=\"header ion-text-center\" style=\"min-height: 30px;\">\n                        <p class=\"ion-text-center\" style=\"font-size: 1.0rem; font-style: italic;\">\n                            Ingelogd als: {{ customerEmail }}\n                        </p>\n                        Welkom, {{ customerName }}!\n                    </div>\n\n                    <div class=\"ion-text-center\">\n                        <p>Online winkelen, maar dan écht! Kom in contact met je persoonlijke fashion specialist en shop de leukste items! Je kunt hieronder optioneel informatie opgeven zodat we je nog beter kunnen helpen.</p>\n                    </div>\n\n                    <ion-grid>\n                        <ion-row class=\"ion-no-padding\" style=\"margin-bottom: 10px;\">\n                            <ion-col size=\"4\" class=\"ion-no-padding\" style=\"text-align: center;\" *ngFor=\"let preference of preferences\">\n                                <ion-button color=\"secondary\" size=\"small\" fill=\"outline\" (click)=\"open(preference.identifier)\">\n                                    <ion-icon slot=\"start\" [name]=\"preference.button.icon\"></ion-icon>\n                                    <div class=\"button-text\">{{ preference.button.name }}</div>\n                                    <ion-icon slot=\"end\" name=\"arrow-forward\" style=\"font-size: 1.1rem !important; color: var(--ion-color-secondary);\"></ion-icon>\n                                </ion-button>\n                            </ion-col>\n                        </ion-row>\n                        <ion-row class=\"ion-no-padding\">\n\n                            <ion-col size=\"12\" class=\"ion-no-padding\">\n\n                                <div class=\"ion-text-center status-text\" [ngStyle]=\"{ 'background-color': openingStatus.popupData.color }\">\n                                    <ion-icon [name]=\"openingStatus.popupData.icon\"></ion-icon>\n                                    <div>{{ openingStatus.popupData.text }}</div>\n                                    <ion-icon [name]=\"openingStatus.popupData.icon\"></ion-icon>\n                                </div>\n\n                                <div class=\"ion-text-center status-text\" style=\"font-size: 0.9rem; font-weight: 700; margin-top: 2px;\" *ngIf=\"!openingStatus.shopIsOpen && chatStarted\">\n                                    'Écht online winkelen' is nu gesloten, maar je chat blijft beschikbaar tot deze gesloten wordt.\n                                </div>\n\n                                <ng-container *ngIf=\"openingStatus.shopIsOpen || chatStarted\">\n\n                                    <div *ngIf=\"!personalShoppingActive\" class=\"ion-text-center\">\n\n                                        <p>Je kunt hieronder direct een live sessie starten met een van onze fashion specialisten.</p>\n\n                                        <ion-button (click)=\"startPersonalShopping()\" size=\"small\" color=\"tertiary\" class=\"shopping-button\">\n                                            Online winkelen starten\n                                        </ion-button>\n\n                                    </div>\n\n                                    <div *ngIf=\"personalShoppingActive\" class=\"ion-text-center chat-container\">\n                                    \n                                        <div *ngIf=\"personalShoppingLoading\" style=\"display: flex; align-items: center; justify-content: center; min-height: 130px;\">\n                                            <ion-spinner name=\"crescent\"></ion-spinner>\n                                            <div style=\"font-size: 1.1rem; margin-left: 10px;\">{{ loadingText }}</div>\n                                        </div>\n\n                                        <div *ngIf=\"!personalShoppingLoading\" class=\"chat-main-container\">\n                                            <rope-chat\n                                                [serviceRequest]=\"serviceRequest\"\n                                                (navigate)=\"doNavigate($event)\"\n                                            ></rope-chat>\n                                        </div>\n                                    \n                                    </div>\n\n                                </ng-container>\n\n                            </ion-col>\n\n                        </ion-row>\n                    </ion-grid>\n\n                </div>\n\n            </ng-container>\n\n            <ng-container *ngIf=\"showMode !== 'chat'\">\n\n                <ion-item-divider sticky=\"true\">\n                    <ion-buttons slot=\"start\" style=\"margin-left: 5px; z-index: 1;\">\n                        <ion-button fill=\"solid\" color=\"light\" size=\"small\" (click)=\"back()\">\n                            <ion-icon slot=\"start\" name=\"arrow-back\"\n                                style=\"font-size: 1.1rem !important; color: var(--ion-color-secondary);\"></ion-icon>\n                            <div\n                                style=\"font-family: var(--default-font); font-size: 1.0rem; color: var(--ion-color-secondary); margin-left: 5px;\">\n                                Ga terug</div>\n                        </ion-button>\n                    </ion-buttons>\n                    <ion-buttons slot=\"end\" style=\"margin-right: 5px; z-index: 1;\">\n                        <ion-button fill=\"solid\" color=\"success\" size=\"small\" (click)=\"save()\" [disabled]=\"saving\">\n                            <ion-icon *ngIf=\"!saving\" slot=\"start\" [name]=\"saveSuccesfull ? 'checkmark' : 'save'\"\n                                style=\"font-size: 1.1rem !important; color: var(--ion-color-secondary);\"></ion-icon>\n                            <ion-spinner *ngIf=\"saving\" name=\"crescent\" style=\"width: 14px; height: 14px;\" color=\"dark\"></ion-spinner>\n                            <div\n                                style=\"font-family: var(--default-font); font-size: 1.0rem; color: var(--ion-color-secondary); margin-left: 5px;\">\n                                Opslaan</div>\n                        </ion-button>\n                    </ion-buttons>\n                </ion-item-divider>\n\n            </ng-container>\n\n            <ng-container *ngFor=\"let preference of preferences\">\n\n                <div class=\"ion-padding\" *ngIf=\"showMode === preference.identifier\">\n                \n                    <div class=\"header ion-text-center\" style=\"min-height: 30px; margin-top: 15px;\">\n                        {{ preference.header }}\n                    </div>\n                \n                    <div class=\"ion-text-center\">\n                        <p>{{ preference.message }}</p>\n                    </div>\n\n                    <ng-container *ngFor=\"let section of preference.sections\">\n                    \n                        <ion-item-divider style=\"--padding-start: 0px;\">\n                            <ion-label class=\"ion-text-center\" style=\"width: 100%; font-size: 1.1rem; color: var(--ion-color-secondary); text-decoration: underline;\">{{ section.header }}</ion-label>\n                        </ion-item-divider>\n                        <ion-grid>\n                            <ion-row>\n                                <ion-col size=\"4\" *ngFor=\"let choice of section.choices\">\n                                    <div class=\"choice-block\" [ngStyle]=\"{ 'background-image': choice.imageUrl ? 'url('+choice.imageUrl+')' : '', 'height': choice.imageUrl ? '250px' : '100px' }\"\n                                        (click)=\"toggleChoice(choice, section)\">\n                                        <div class=\"choice-titel\" [ngStyle]=\"{ 'left': choice.imageUrl ? '10px' : '50%', 'transform': choice.imageUrl ? 'translateX(0)' : 'translateX(-50%)', 'font-size': choice.imageUrl ? '1.0rem' : '1.3rem' }\">{{ choice.name }}</div>\n                                        <ion-button shape=\"round\" color=\"primary\" style=\"--padding-start: 11px; --padding-end: 11px;\">\n                                            <ion-icon [name]=\"choice.isChecked ? 'checkmark-circle' : 'ellipse-outline'\"\n                                                [color]=\"choice.isChecked ? 'success' : 'medium'\" slot=\"icon-only\"\n                                                [ngStyle]=\"{ 'font-size': choice.isChecked ? '2.0rem' : '1.5rem' }\"></ion-icon>\n                                        </ion-button>\n                                    </div>\n                                </ion-col>\n                            </ion-row>\n                        </ion-grid>\n                    \n                    </ng-container>\n                \n                </div>\n\n            </ng-container>\n\n        </ng-container>\n\n    </ng-container>\n\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { ActivatedRoute } from '@angular/router';\nimport { LoadingController, AlertController, ModalController } from '@ionic/angular';\nimport { Subscription } from 'rxjs';\nimport { Order } from '../../../models/order';\nimport { Reservation } from '../../../models/reservation';\nimport { User } from '../../../models/user';\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { OrderService } from '../../../services/order.service';\nimport { ReservationService } from '../../../services/reservation.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\nimport { WishlistService } from '../../../services/wishlist.service';\n\n@Component({\n  selector: 'rope-login',\n  templateUrl: './login.component.html',\n  styleUrls: ['./login.component.scss']\n})\nexport class LoginComponent implements OnInit {\n\n  @Input() public origin: any;\n  @Input() public redirectUrl: string;\n\n  @Input() public imageUrl: string;\n  @Input() public topText: string;\n  @Input() public text: string;\n\n  @Output() public navigate = new EventEmitter();\n  @Output() public onDismiss = new EventEmitter();\n  @Output() public onRegister = new EventEmitter();\n  @Output() public onMoveOnAsGuest = new EventEmitter();\n\n  public user: User = new User();\n  public userForm: FormGroup;\n\n  public objectType: string;\n  public orders: Order[];\n  public reservations: Reservation[];\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  constructor(\n    public formBuilder: FormBuilder,\n    public loadingCtrl: LoadingController,\n    public authService: AuthService,\n    public alertCtrl: AlertController,\n    public orderService: OrderService,\n    public reservationService: ReservationService,\n    public sanitizer: DomSanitizer,\n    public route: ActivatedRoute,\n    public wishlistService: WishlistService,\n    public screensizeService: ScreensizeService,\n    public analyticsService: AnalyticsService\n  ) {\n  }\n\n  ngOnInit() {\n\n    this.screensizeObserver = this.screensizeService.isDesktopView().subscribe(isDesktop => {\n      this.isDesktop = isDesktop;\n    });\n\n    this.userForm = this.formBuilder.group({\n      username: ['', Validators.required],\n      password: ['', Validators.required]\n    });\n    this.user = this.authService.getCurrentUser();\n\n    if (this.user.authHeader) {\n      this.navigate.emit(this.redirectUrl ? this.redirectUrl : 'my-account');\n    }\n\n  }\n\n  ngOnDestroy() {\n    if (this.screensizeObserver) {\n      this.screensizeObserver.unsubscribe();\n    }\n  }\n\n  public checkOrigin() {\n    return this.origin;\n  }\n\n  public dismiss(data?) {\n    this.onDismiss.emit(data);\n  }\n\n  public async login() {\n\n    if (!this.user.username || !this.user.password) {\n      return;\n    }\n\n    const loading = await this.loadingCtrl.create({\n      spinner: 'crescent',\n      showBackdrop: true\n    });\n\n    await loading.present();\n\n    this.authService.logIn(this.user).subscribe(\n      (data) => {\n        loading.dismiss();\n        this.authService.storeUser(data).then(us => {\n\n          this.analyticsService.setUserData(data);\n          this.wishlistService.sync();\n\n          this.user = data;\n          if (this.checkOrigin()) {\n            this.dismiss({ status: 1 });\n          } else {\n            this.navigate.emit(this.redirectUrl ? this.redirectUrl : 'my-account');\n          }\n          this.userForm.reset();\n\n        });\n      },\n      (err) => {\n        loading.dismiss();\n        this.user.username = undefined;\n        this.user.password = undefined;\n        this.userForm.reset();\n\n        this.showLoginError();\n      }\n    );\n\n  }\n\n  public async showLoginError() {\n    const alert = await this.alertCtrl.create({\n      header: 'Fout',\n      message: 'Gebruikersnaam en/of wachtwoord onjuist.',\n      buttons: ['Ok!']\n    });\n    return await alert.present();\n  }\n\n  public async register() {\n    this.onRegister.emit();\n  }\n\n  public async forgotPassword() {\n    const alert = await this.alertCtrl.create({\n      header: 'Wachtwoord vergeten?',\n      message: 'Geen probleem, we sturen je een link om een nieuw wachtwoord aan te maken.',\n      inputs: [\n        {\n          name: 'username',\n          type: 'text',\n          placeholder: 'E-mailadres'\n        }\n      ],\n      buttons: [\n        {\n          text: 'Annuleer',\n          role: 'cancel'\n        },\n        {\n          text: 'Aanvragen',\n          handler: data => {\n\n            this.authService.forgotPassword(data.username).subscribe(async res => {\n\n              const al = await this.alertCtrl.create({\n                header: 'Check je mail!',\n                message: 'We hebben je een mail gestuurd met daarin een link waarmee je je wachtwoord kunt resetten.',\n                buttons: ['OK']\n              });\n              await al.present();\n\n            }, errorMessage => {\n              this.showRegistrationError();\n            });\n\n            return true;\n          }\n        }\n      ]\n    });\n\n    return await alert.present();\n  }\n\n  public async showRegistrationError() {\n    const a = await this.alertCtrl.create({\n      header: 'E-mailadres niet gevonden',\n      message: 'Je kunt je alsnog registreren.',\n      buttons: ['Oke dan.']\n    });\n    return await a.present();\n  }\n\n  public async moveOnAsGuest() {\n    this.onMoveOnAsGuest.emit();\n  }\n\n}\n","<div class=\"blocks ion-padding\">\n\n    <ion-grid>\n\n        <ion-row>\n\n            <ion-col *ngIf=\"isDesktop && !checkOrigin()\" size=\"6\">\n\n                <div class=\"block\" style=\"margin-left: 50px; margin-right: 50px;\">\n                \n                    <div *ngIf=\"imageUrl\" class=\"default-image\" [ngStyle]=\"{ 'background-image': 'url('+imageUrl+')' }\" style=\"height: 250px;\"></div>\n                    <ion-card-content>\n                        <p>{{ topText }}</p>\n                        <br>\n                        <p>{{ text }}</p>\n                    </ion-card-content>\n\n                </div>\n            \n            </ion-col>\n\n            <ion-col [size]=\"(isDesktop && !checkOrigin()) ? 6 : 12\">\n\n                <div class=\"block\" [ngClass]=\"(isDesktop && !checkOrigin()) ? 'boundary' : ''\">\n                \n                    <div class=\"boundary-block\">\n\n                        <div style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px;\">\n                            <ion-item-divider style=\"height: 49px;\">\n                                <ion-label style=\"color: black; margin: 2px;\">\n                                    Inloggen\n                                </ion-label>\n                            </ion-item-divider>\n                                \n                            <form [formGroup]=\"userForm\" (ngSubmit)=\"login()\">\n                                <ion-item>\n                                    <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">E-mailadres</ion-label>\n                                    <ion-input type=\"email\" placeholder=\"...\" formControlName=\"username\" class=\"r-privacy-field\"\n                                        [(ngModel)]=\"user.username\"></ion-input>\n                                </ion-item>\n                                <ion-item>\n                                    <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Wachtwoord</ion-label>\n                                    <ion-input type=\"password\" placeholder=\"...\" formControlName=\"password\" class=\"r-privacy-field\"\n                                        [(ngModel)]=\"user.password\" (keyup.enter)=\"login()\"></ion-input>\n                                </ion-item>\n                            </form>\n\n                            <div style=\"margin-top: 25px; font-size: 1.1rem; font-style: italic;\" class=\"ion-text-center\" *ngIf=\"checkOrigin()\">\n                                Na het inloggen ga je automatisch terug naar de pagina '{{ origin.name }}'.\n                            </div>\n                            <div style=\"padding: 15px;\">\n                                <ion-button expand=\"block\" size=\"large\" [disabled]=\"!userForm.valid\" (click)=\"login()\" color=\"tertiary\">\n                                    Log in\n                                    <ion-icon name=\"arrow-forward-circle-outline\" slot=\"end\"></ion-icon>\n                                </ion-button>\n                                <ion-button expand=\"block\" fill=\"clear\" (click)=\"forgotPassword()\" color=\"secondary\">\n                                    Wachtwoord vergeten\n                                    <ion-icon name=\"help-circle-outline\" slot=\"end\"></ion-icon>\n                                </ion-button>\n                            </div>\n\n                        </div>\n                            \n                    \n                        <!-- <br>\n\n                        <div style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px; margin-top: 25px;\">\n                            <ion-item-divider style=\"height: 49px;\">\n                                <ion-label style=\"color: black; margin: 2px;\">\n                                    Geen account\n                                </ion-label>\n                            </ion-item-divider>\n            \n                            <ion-grid>\n                                <ion-row>\n                                    <ion-col size=\"12\" class=\"ion-text-center\" style=\"font-size: 12px;\">\n                                        Hieronder kun je direct een account aanmaken om te bestellen. Dit is optioneel, doorgaan als gast kan ook.\n                                    </ion-col>\n                                    <ion-col size=\"12\">\n                                        <ion-button expand=\"block\" (click)=\"moveOnAsGuest()\" color=\"tertiary\">\n                                            Doorgaan als gast\n                                            <ion-icon name=\"arrow-forward-circle-outline\" slot=\"end\"></ion-icon>\n                                        </ion-button>\n                                    </ion-col>\n                                    <ion-col size=\"12\">\n                                        <ion-button expand=\"block\" (click)=\"register()\" color=\"secondary\">\n                                            Registreren\n                                            <ion-icon name=\"arrow-forward-circle-outline\" slot=\"end\"></ion-icon>\n                                        </ion-button>\n                                    </ion-col>\n                                </ion-row>\n                            </ion-grid>\n\n                        </div> -->\n                    \n\n                    </div>\n                \n                </div>\n\n            </ion-col>\n\n        </ion-row>\n\n    </ion-grid>\n\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\nimport { AlertController } from '@ionic/angular';\nimport { Subscription } from 'rxjs';\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { User } from '../../../models/user';\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { CoreService } from '../../../services/core.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\n\n@Component({\n  selector: 'rope-register',\n  templateUrl: './register.component.html',\n  styleUrls: ['./register.component.scss']\n})\nexport class RegisterComponent implements OnInit {\n\n  @Input() public origin;\n  @Input() public guestMode;\n  @Input() public redirectUrl: string;\n\n  @Input() public imageUrl: string;\n  @Input() public topText: string;\n  @Input() public text: string;\n\n  @Output() public navigate = new EventEmitter();\n  @Output() public onDismiss = new EventEmitter();\n\n  @Output() public modalAutocomplete = new EventEmitter();\n\n  public manualEdit = false;\n\n  public showPassword = false;\n  public user: User = new User();\n  public password2: string;\n  public userGeneralForm: FormGroup = undefined;\n  public passwordForm: FormGroup = undefined;\n  public userAddressForm: FormGroup = undefined;\n  public statusAddressCheck: any = { message: 'Wachten op postcode en huisnummer...', status: 'darkorange' };\n\n  // FOR BELGIUM ADDRESSES\n  public belgiumStep1 = false;\n  public belgiumStep2 = false;\n  public belgiumStep3 = false;\n\n  public belgiumNisCode;\n  public belgiumStreetId;\n  public belgiumPostalCode;\n  public belgiumLanguage;\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  constructor(\n    public authService: AuthService,\n    public coreService: CoreService,\n    public formBuilder: FormBuilder,\n    public screensizeService: ScreensizeService,\n    public alertCtrl: AlertController,\n    public analyticsService: AnalyticsService\n  ) { }\n\n  ngOnInit() {\n\n    this.screensizeObserver = this.screensizeService.isDesktopView().subscribe(isDesktop => {\n      this.isDesktop = isDesktop;\n    });\n\n    this.initGeneral();\n    this.initPassword();\n    this.initAddress();\n\n  }\n\n  ngOnDestroy() {\n    if (this.screensizeObserver) {\n      this.screensizeObserver.unsubscribe();\n    }\n  }\n\n  public checkOrigin() {\n    return this.origin;\n  }\n\n  public initGeneral() {\n\n    this.userGeneralForm = this.formBuilder.group({\n      username: ['', Validators.required],\n      first_name: ['', Validators.required],\n      last_name: ['', Validators.required]\n    });\n\n  }\n\n  public initPassword() {\n\n    this.passwordForm = this.formBuilder.group({\n      password: ['', Validators.required],\n      password2: ['', Validators.required]\n    }, { validator: this.checkPasswords });\n\n  }\n\n  public initAddress() {\n\n    this.userAddressForm = this.formBuilder.group({\n      country: ['NL', Validators.required],\n      postal_code: ['', Validators.required],\n      house_number: ['', Validators.required],\n      house_number_extension: [''],\n      house_number_total: [''],\n      street: ['', Validators.required],\n      city: ['', Validators.required]\n    });\n\n    const countryControl: FormControl = <FormControl>this.userAddressForm.controls['country'];\n    countryControl.valueChanges.pipe(debounceTime(400), distinctUntilChanged()).subscribe(newVal => this.updateAddress());\n\n    const postalCodeControl: FormControl = <FormControl>this.userAddressForm.controls['postal_code'];\n    postalCodeControl.valueChanges.pipe(debounceTime(400), distinctUntilChanged()).subscribe(newVal => this.updateAddress());\n\n    const houseNumberControl: FormControl = <FormControl>this.userAddressForm.controls['house_number'];\n    houseNumberControl.valueChanges.pipe(debounceTime(400), distinctUntilChanged()).subscribe(newVal => this.updateAddress());\n\n    const houseNumberExtControl: FormControl = <FormControl>this.userAddressForm.controls['house_number_extension'];\n    houseNumberExtControl.valueChanges.pipe(debounceTime(400), distinctUntilChanged()).subscribe(newVal => this.updateAddress());\n\n  }\n\n  public checkPasswords(group: FormGroup) {\n    let pass = group.controls.password.value;\n    let confirmPass = group.controls.password2.value;\n    return pass === confirmPass ? null : { notSame: true };\n  }\n\n  public getPassword() {\n    return this.passwordForm.controls.password.value;\n  }\n\n  public getPassword2() {\n    return this.passwordForm.controls.password2.value;\n  }\n\n  public getCountry() {\n    return this.userAddressForm.get('country').value;\n  }\n\n  public async openAddressChooser(type: string) {\n\n    let props;\n    if (type === 'postal_area') {\n\n      props = {\n        title: 'Kies je woonplaats',\n        placeholder: 'Voer je postcode of woonplaats in...',\n        observable: this.authService.getAddressBe,\n        obj: {\n          country: 'BE',\n        },\n        searchField: 'postal_code',\n        template: ['parsedMunicipalityNisCode', 'municipalityName']\n      };\n\n    } else if (type === 'street') {\n\n      props = {\n        title: 'Kies je straat',\n        placeholder: 'Voer je straatnaam in...',\n        observable: this.authService.getStreetBe,\n        obj: {\n          country: 'BE',\n          nis_code: this.belgiumNisCode\n        },\n        searchField: 'street',\n        template: ['municipalityName', 'streetName', 'houseNumberRange']\n      };\n\n    } else if (type === 'house_number') {\n\n      props = {\n        title: 'Kies je huisnummer',\n        placeholder: 'Voer je huisnummer in...',\n        observable: this.authService.getHousenumberBe,\n        obj: {\n          country: 'BE',\n          nis_code: this.belgiumNisCode,\n          street_id: this.belgiumStreetId,\n          language: this.belgiumLanguage,\n          postal_code: this.belgiumPostalCode\n        },\n        searchField: 'house_number',\n        template: ['', 'houseNumber']\n      };\n\n    }\n\n    this.modalAutocomplete.emit({\n      componentProps: props,\n      type: type\n    });\n\n  }\n\n  public parseAutocompleteResponse(type, d) {\n\n    if (d && d.data && d.data.result) {\n      if (type === 'postal_area') {\n\n        this.belgiumStep1 = true;\n        this.belgiumNisCode = d.data.result.municipalityNisCode;\n        this.userAddressForm.get('city').setValue(d.data['result'].municipalityName);\n\n      } else if (type === 'street') {\n\n        this.belgiumStep2 = true;\n        this.belgiumStreetId = d.data.result.streetId;\n        this.belgiumPostalCode = d.data.result.postcode;\n        this.belgiumLanguage = d.data.result.language;\n        this.userAddressForm.get('street').setValue(d.data['result'].streetName);\n        this.userAddressForm.get('postal_code').setValue(d.data['result'].postcode);\n\n      } else if (type === 'house_number') {\n\n        this.belgiumStep3 = true;\n        this.userAddressForm.get('house_number_total').setValue(d.data['result'].houseNumber);\n        this.userAddressForm.get('house_number').setValue(d.data['result'].number);\n\n        const regexp = new RegExp(d.data['result'].number);\n        this.userAddressForm.get('house_number_extension').setValue(d.data['result'].houseNumber.toString().replace(regexp, \"\").trim());\n\n      }\n\n      if (this.userAddressForm.valid) {\n        this.statusAddressCheck.message = 'Adresgegevens gevalideerd';\n        this.statusAddressCheck.status = 'darkgreen';\n      }\n\n    }\n\n  }\n\n  public changeCountry(event: any) {\n    if (event.detail.value === 'BE') {\n      this.statusAddressCheck.message = 'Adresgegevens nog incompleet...';\n      this.statusAddressCheck.status = 'darkorange';\n    }\n  }\n\n  public updateAddress() {\n\n    const country = this.userAddressForm.get('country').value;\n    const postalCode = this.userAddressForm.get('postal_code').value;\n    const houseNumber = this.userAddressForm.get('house_number').value;\n    const houseNumberExtension = this.userAddressForm.get('house_number_extension').value;\n\n    const streetControl = this.userAddressForm.get('street');\n    const cityControl = this.userAddressForm.get('city');\n    const houseNumberControl = this.userAddressForm.get('house_number');\n    const houseNumberExtensionControl = this.userAddressForm.get('house_number_extension');\n\n    if (!postalCode || !houseNumber) {\n      return;\n    }\n\n    if (postalCode && ((country === 'NL' && postalCode.length < 6) || (country === 'BE' && postalCode.length < 4))) {\n\n      streetControl.setValue('');\n      cityControl.setValue('');\n\n      this.statusAddressCheck.message = 'Wachten op postcode en huisnummer...';\n      this.statusAddressCheck.status = 'darkorange';\n\n      return;\n    }\n\n    if (country === 'BE') {\n      // check address\n      return;\n    }\n\n    const obj = {\n      country: country,\n      postal_code: postalCode.replace(' ', ''),\n      house_number: houseNumber,\n      house_number_extension: houseNumberExtension === '' ? undefined : houseNumberExtension\n    };\n\n    let obs = this.authService.getAddress(obj);\n    obs.subscribe(i => {\n\n      if (i.exception) {\n        streetControl.setValue('');\n        cityControl.setValue('');\n\n        this.statusAddressCheck.message = 'Niet gevonden. Controleer de gegevens a.u.b.';\n        this.statusAddressCheck.status = 'darkred';\n      } else {\n        streetControl.setValue(i.street);\n        cityControl.setValue(i.city);\n        houseNumberControl.setValue(i.houseNumber);\n        houseNumberExtensionControl.setValue(i.houseNumberAddition);\n\n        this.statusAddressCheck.message = 'Straat en woonplaats gevalideerd';\n        this.statusAddressCheck.status = 'darkgreen';\n      }\n\n    }, error => console.error(error));\n\n  }\n\n  public checkForms() {\n    const generalValid = (this.userGeneralForm && this.userGeneralForm.valid) || !this.userGeneralForm;\n    const passwordValid = (this.passwordForm && this.passwordForm.valid) || !this.passwordForm;\n    const addressValid = (this.userAddressForm && this.userAddressForm.valid) || !this.userAddressForm;\n    return !generalValid || (!this.guestMode && !passwordValid) || !addressValid;\n  }\n\n  public manualEditAddress() {\n    this.manualEdit = true;\n  }\n\n  public saveUser() {\n\n    if (this.checkForms()) {\n      return;\n    }\n\n    this.user.username = this.userGeneralForm.get('username').value;\n    this.user.email = this.user.username;\n    this.user.first_name = this.userGeneralForm.get('first_name').value;\n    this.user.last_name = this.userGeneralForm.get('last_name').value;\n\n    if (!this.guestMode) {\n      this.user.password = this.passwordForm.get('password').value;\n    }\n    this.user.telephone_number = '';\n\n    this.user.postal_code = String(this.userAddressForm.get('postal_code').value);\n    this.user.house_number = this.userAddressForm.get('house_number').value;\n    this.user.house_number_extension = this.userAddressForm.get('house_number_extension').value;\n    this.user.street = this.userAddressForm.get('street').value;\n    this.user.city = this.userAddressForm.get('city').value;\n    this.user.country_code = this.userAddressForm.get('country').value;\n\n    this.authService.register(this.user).subscribe(res => {\n\n      this.authService.storeUser(res).then(async us => {\n        \n        this.user = res;\n        this.analyticsService.setUserData(this.user);\n\n        if (!this.guestMode) {\n\n          let alert = await this.alertCtrl.create({\n            header: 'Registratie voltooid!',\n            message: 'Je bent succesvol geregistreerd op de webshop. We hebben je ook meteen ingelogd.',\n            backdropDismiss: false,\n            buttons: ['Oke!']\n          });\n\n          alert.onDidDismiss().then(() => {\n\n            if (this.checkOrigin()) {\n              this.onDismiss.emit({ status: 1 });\n            } else {\n              this.navigate.emit('user-detail');\n            }\n\n          });\n\n          await alert.present();\n\n        } else {\n\n          if (this.checkOrigin()) {\n            this.onDismiss.emit({ status: 1 });\n          } else {\n            this.navigate.emit('user-detail');\n          }\n\n        }\n\n      });\n\n    }, errorResponse => {\n      this.coreService.showAlert(errorResponse);\n    });\n\n  }\n\n}\n","<div class=\"blocks ion-padding\">\n\n    <ion-grid>\n    \n        <ion-row>\n    \n            <ion-col *ngIf=\"isDesktop && !checkOrigin()\" size=\"6\">\n    \n                <div class=\"block\" style=\"margin-left: 50px; margin-right: 50px;\">\n    \n                    <div *ngIf=\"imageUrl\" class=\"default-image\" [ngStyle]=\"{ 'background-image': 'url('+imageUrl+')' }\"\n                        style=\"height: 250px;\"></div>\n                    <ion-card-content>\n                        <p>{{ topText }}</p>\n                        <br>\n                        <p>{{ text }}</p>\n                    </ion-card-content>\n    \n                </div>\n    \n            </ion-col>\n            \n            <ion-col [size]=\"(isDesktop && !checkOrigin()) ? 6 : 12\">\n\n            <div class=\"block\" [ngClass]=\"(isDesktop && !checkOrigin()) ? 'boundary' : ''\">\n            \n                <div class=\"boundary-block\">\n            \n                    <ion-card-header>\n                        <ion-card-title>{{ guestMode ? 'Doorgaan als gast' : 'Registreren' }}</ion-card-title>\n                    </ion-card-header>\n\n                    <div style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px;\">\n                        <ion-item-divider style=\"height: 49px;\">\n                            <ion-label style=\"color: black; margin: 2px;\">\n                                Algemene gegevens\n                            </ion-label>\n                        </ion-item-divider>\n\n                        <form novalidate [formGroup]=\"userGeneralForm\" *ngIf=\"userGeneralForm\">\n                            <ion-item>\n                                <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">E-mailadres\n                                </ion-label>\n                                <ion-input type=\"email\" class=\"r-h2 r-privacy-field\" formControlName=\"username\" placeholder=\"...\"></ion-input>\n                            </ion-item>\n                            <ion-item>\n                                <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Voornaam\n                                </ion-label>\n                                <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" formControlName=\"first_name\" autocapitalize=\"true\" placeholder=\"...\"></ion-input>\n                            </ion-item>\n                            <ion-item>\n                                <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Achternaam\n                                </ion-label>\n                                <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" formControlName=\"last_name\" autocapitalize=\"true\" placeholder=\"...\"></ion-input>\n                            </ion-item>\n                        </form>\n                        <br>\n\n                    </div>\n\n                </div>\n\n                <br>\n                <br>\n\n                <div class=\"boundary-block\" *ngIf=\"!guestMode && passwordForm\">\n\n                    <div style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px;\">\n                        <ion-item-divider style=\"height: 49px;\">\n                            <ion-label style=\"color: black; margin: 2px;\">\n                                Wachtwoord\n                            </ion-label>\n                        </ion-item-divider>\n\n                        <form [formGroup]=\"passwordForm\">\n\n                            <ion-item class=\"no-border-item\">\n                                <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Nieuwe wachtwoord</ion-label>\n                                <ion-input [type]=\"showPassword ? 'text': 'password'\" placeholder=\"...\"\n                                    formControlName=\"password\" class=\"r-h2 r-privacy-field\"></ion-input>\n                                <ion-icon slot=\"end\" [name]=\"showPassword ? 'eye-off' : 'eye'\" color=\"secondary\"\n                                    (click)=\"showPassword = !showPassword\"></ion-icon>\n                            </ion-item>\n                            <ion-item class=\"no-border-item\">\n                                <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Nieuwe wachtwoord (nogmaals)\n                                </ion-label>\n                                <ion-input [type]=\"showPassword ? 'text': 'password'\" placeholder=\"...\"\n                                    formControlName=\"password2\" class=\"r-h2 r-privacy-field\"></ion-input>\n                                <ion-icon slot=\"end\" [name]=\"showPassword ? 'eye-off' : 'eye'\" color=\"secondary\"\n                                    (click)=\"showPassword = !showPassword\"></ion-icon>\n                            </ion-item>\n                        \n                            <br>\n                            <ion-item-divider></ion-item-divider>\n                        \n                            <ion-item>\n                                <ng-container *ngIf=\"passwordForm.hasError('notSame')\">\n                                    <ion-icon slot=\"start\" name=\"close-circle\" color=\"danger\"></ion-icon>\n                                    <ion-label position=\"stacked\">Status</ion-label>\n                                    <ion-input style=\"font-size: 1.1rem; color: darkred;\"\n                                        value=\"De opgegeven wachtwoorden zijn niet gelijk aan elkaar.\" readonly></ion-input>\n                                </ng-container>\n                                <ng-container *ngIf=\"passwordForm.valid\">\n                                    <ion-icon slot=\"start\" name=\"checkmark-circle\" color=\"success\"></ion-icon>\n                                    <ion-label position=\"stacked\">Status</ion-label>\n                                    <ion-input style=\"font-size: 1.1rem; color: darkgreen;\"\n                                        value=\"De opgegeven wachtwoorden zijn gelijk aan elkaar.\" readonly></ion-input>\n                                </ng-container>\n                                <ng-container *ngIf=\"getPassword() === undefined || getPassword().length === 0\">\n                                    <ion-icon slot=\"start\" name=\"help\" color=\"warning\"></ion-icon>\n                                    <ion-label position=\"stacked\">Status</ion-label>\n                                    <ion-input style=\"font-size: 1.1rem; color: darkorange;\" value=\"Nog geen wachtwoord ingevuld.\"\n                                        readonly></ion-input>\n                                </ng-container>\n                            </ion-item>\n                        \n                            <!-- <ion-item lines=\"none\">\n                                <ion-icon name=\"flash\" color=\"warning\" slot=\"start\"></ion-icon>\n                                <ion-label position=\"stacked\">Wachtwoordsterkte</ion-label>\n                                <div style=\"width: 100%;\">\n                                    <password-strength-meter [password]=\"getPassword()\"></password-strength-meter>\n                                </div>\n                            </ion-item> -->\n                        \n                        </form>\n                        <br>\n\n                    </div>\n\n                </div>\n\n                <br>\n                <br>\n\n                <div class=\"boundary-block\">\n\n                    <div style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px;\">\n                        <ion-item-divider style=\"height: 49px;\">\n                            <ion-label style=\"color: black; margin: 2px;\">\n                                Adresgegevens\n                            </ion-label>\n                        </ion-item-divider>\n\n                        <form novalidate [formGroup]=\"userAddressForm\" *ngIf=\"userAddressForm\">\n                            <ion-item>\n                                <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Land</ion-label>\n                                <ion-select formControlName=\"country\" (ionChange)=\"changeCountry($event)\">\n                                    <ion-select-option value=\"NL\">Nederland</ion-select-option>\n                                    <ion-select-option value=\"BE\">België</ion-select-option>\n                                    <!-- <ion-select-option value=\"DE\">Duitsland</ion-select-option> -->\n                                </ion-select>\n                            </ion-item>\n\n                            <ng-container *ngIf=\"getCountry() === 'NL'\">\n                                <ion-item>\n                                    <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Postcode\n                                    </ion-label>\n                                    <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" formControlName=\"postal_code\" placeholder=\"...\"></ion-input>\n                                </ion-item>\n                                <ion-item>\n                                    <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Huisnummer\n                                    </ion-label>\n                                    <ion-input type=\"tel\" class=\"r-h2 r-privacy-field\" formControlName=\"house_number\" placeholder=\"...\"></ion-input>\n                                </ion-item>\n                                <ion-item>\n                                    <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Huisnummer\n                                        toevoeging</ion-label>\n                                    <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" formControlName=\"house_number_extension\" placeholder=\"...\"></ion-input>\n                                </ion-item>\n                                <ion-item>\n                                    <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Straat</ion-label>\n                                    <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" formControlName=\"street\" placeholder=\"...\" [readonly]=\"!manualEdit\"></ion-input>\n                                    <ion-icon [name]=\"manualEdit ? 'lock-open-outline' : 'lock-closed'\" slot=\"end\" style=\"margin-top: 20px;\">\n                                    </ion-icon>\n                                </ion-item>\n                                <ion-item>\n                                    <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Woonplaats</ion-label>\n                                    <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" formControlName=\"city\" placeholder=\"...\" [readonly]=\"!manualEdit\"></ion-input>\n                                    <ion-icon [name]=\"manualEdit ? 'lock-open-outline' : 'lock-closed'\" slot=\"end\" style=\"margin-top: 20px;\">\n                                    </ion-icon>\n                                </ion-item>\n                                <ion-item>\n                                    <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Status van\n                                        adrescheck</ion-label>\n                                    <ion-input text-left text-wrap type=\"text\" readonly [ngStyle]=\"{ 'color': statusAddressCheck.status }\"\n                                        [value]=\"statusAddressCheck.message\"></ion-input>\n                                </ion-item>\n                            </ng-container>\n\n                            <ng-container *ngIf=\"getCountry() === 'BE'\">\n                                <ion-item>\n                                    <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Postcode &\n                                        Woonplaats</ion-label>\n                                    <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" formControlName=\"city\" readonly placeholder=\"...\"></ion-input>\n                                    <ion-button color=\"secondary\" shape=\"round\" fill=\"outline\" slot=\"end\"\n                                        (click)=\"openAddressChooser('postal_area')\">\n                                        Invullen\n                                        <ion-icon slot=\"end\" name=\"arrow-forward\"></ion-icon>\n                                    </ion-button>\n                                </ion-item>\n                                <ion-item>\n                                    <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Straat\n                                    </ion-label>\n                                    <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" formControlName=\"street\" readonly placeholder=\"...\"></ion-input>\n                                    <ion-button color=\"secondary\" shape=\"round\" fill=\"outline\" slot=\"end\"\n                                        (click)=\"openAddressChooser('street')\">\n                                        Invullen\n                                        <ion-icon slot=\"end\" name=\"arrow-forward\"></ion-icon>\n                                    </ion-button>\n                                </ion-item>\n                                <ion-item>\n                                    <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Huisnummer\n                                        en toevoeging</ion-label>\n                                    <ion-input type=\"text\" class=\"r-h2 r-privacy-field\" formControlName=\"house_number_total\" readonly placeholder=\"...\"></ion-input>\n                                    <ion-button color=\"secondary\" shape=\"round\" fill=\"outline\" slot=\"end\"\n                                        (click)=\"openAddressChooser('house_number')\">\n                                        Invullen\n                                        <ion-icon slot=\"end\" name=\"arrow-forward\"></ion-icon>\n                                    </ion-button>\n                                </ion-item>\n                                <ion-item>\n                                    <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Status van\n                                        adrescheck</ion-label>\n                                    <ion-input text-left text-wrap type=\"text\" readonly [ngStyle]=\"{ 'color': statusAddressCheck.status }\"\n                                        [value]=\"statusAddressCheck.message\"></ion-input>\n                                </ion-item>\n                            </ng-container>\n\n                        </form>\n\n                        <ion-item text-center lines=\"none\" *ngIf=\"getCountry() === 'NL'\">\n                            <ion-note text-center class=\"address-note\">\n                                De adresgegevens worden automatisch aangevuld op basis van je postcode en huisnummer.\n                            </ion-note>\n                        </ion-item>\n                        \n                        <ion-item text-center lines=\"none\" *ngIf=\"getCountry() === 'BE'\">\n                            <ion-note text-center class=\"address-note\">\n                                De adresgegevens worden automatisch aangevuld bij het invullen.\n                            </ion-note>\n                        </ion-item>\n\n                        <ion-item lines=\"none\" class=\"ion-text-center\" style=\"margin-top: 70px;\">\n                            <ion-note class=\"address-note ion-text-center\">\n                                Worden je gegevens niet gevonden op basis van je postcode en huisnummer? Klik dan op 'Handmatig adres\n                                aanpassen'. Let op: handmatig een adres aanpassen wordt niet aangeraden, het automatisch aanvullen zou ten alle\n                                tijden\n                                moeten werken.\n                            </ion-note>\n                        </ion-item>\n                        \n                        <br>\n                        \n                        <ion-button (click)=\"manualEditAddress()\" color=\"secondary\" expand=\"block\" fill=\"outline\">\n                            <ion-icon name=\"create\" slot=\"start\"></ion-icon>\n                            Handmatig adres aanpassen\n                        </ion-button>\n\n                        <br>\n                        <br>\n\n                    </div>\n\n                </div>\n\n                <div style=\"margin-top: 25px;\">\n                    <div style=\"font-size: 1.1rem; font-style: italic;\" class=\"ion-text-center\" *ngIf=\"checkOrigin()\">Na het opgeven van je gegevens ga\n                        je automatisch terug naar\n                        de pagina '{{ origin.name }}'.</div>\n                    <ion-button expand=\"block\" size=\"large\" [disabled]=\"checkForms()\" (click)=\"saveUser()\" color=\"tertiary\">\n                        {{ guestMode ? 'Doorgaan als gast' : 'Registreren' }}\n                        <ion-icon name=\"arrow-forward-circle-outline\" slot=\"end\"></ion-icon>\n                    </ion-button>\n                </div>\n\n            </div>\n\n        </ion-col>\n        \n        </ion-row>\n        \n    </ion-grid>\n\n</div>","import { Component, Input, OnInit } from '@angular/core';\nimport { CoreService } from '../../../services/core.service';\n\n@Component({\n  selector: 'rope-newsletter',\n  templateUrl: './newsletter.component.html',\n  styleUrls: ['./newsletter.component.scss']\n})\nexport class NewsletterComponent implements OnInit {\n\n  @Input() public identifier;\n\n  public newsletter;\n\n  constructor(\n    public coreService: CoreService\n  ) { }\n\n  ngOnInit(): void {\n\n    this.coreService.getNewsletter(this.identifier).subscribe(r => {\n      this.newsletter = r;\n    });\n\n  }\n\n}\n","<div class=\"blocks\">\n    <div class=\"block r-privacy-field\">\n        <rope-newsletter-signup\n            *ngIf=\"newsletter\"\n            [identifier]=\"newsletter.identifier\"\n            [title]=\"newsletter.name\"\n            [subtitle]=\"'Schrijf je in voor deze nieuwsbrief'\"\n            [htmlContent]=\"newsletter.description\"\n            [image]=\"newsletter.medias.length > 0 ? newsletter.medias[0].url : undefined\"\n        ></rope-newsletter-signup>\n    </div>\n</div>","import { ShippingMethod } from './shipping-method';\n\nexport class Shipment {\n    name?: string;\n    street: string;\n    house_number: number;\n    house_number_extension: string;\n    postal_code: string;\n    city: string;\n    country_code: string;\n    \n    timeframe_start: number;\n    timeframe_end: number;\n    \n    shipping_method: ShippingMethod;\n\n    // Minor fields\n    shipment: any;\n    pickup_location: any;\n\n    constructor() { }\n    \n}\n","import { CurrencyPipe } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { AlertController } from '@ionic/angular';\nimport { forkJoin, map } from 'rxjs';\nimport { firstBy } from 'thenby';\nimport { Order } from '../../../models/order';\nimport { Shipment } from '../../../models/shipment';\nimport { ShippingMethod } from '../../../models/shipping-method';\nimport { User } from '../../../models/user';\nimport { AuthService } from '../../../services/auth.service';\nimport { BranchService } from '../../../services/branch.service';\nimport { CartService } from '../../../services/cart.service';\nimport { CoreService } from '../../../services/core.service';\nimport { ShipmentService } from '../../../services/shipment.service';\n\n@Component({\n  selector: \"rope-cart-shipment\",\n  templateUrl: \"./cart-shipment.component.html\",\n  styleUrls: [\"./cart-shipment.component.scss\"],\n})\nexport class CartShipmentComponent implements OnInit {\n  \n  @Input() public isDesktop;\n  @Output() public onDismiss = new EventEmitter();\n  \n  public order: Order;\n  public user: User;\n  public baseShipment: Shipment;\n\n  @Input() public loading = true;\n  @Output() public loadingChange = new EventEmitter();\n\n  public deliveryTypes = [\n    {\n      key: 'delivery',\n      title: 'Bezorging aan huis',\n      shippingTitle: '',\n      get: (shipment) => {\n        return shipment;\n      },\n      sort_index: 0\n    },\n    {\n      key: 'pickup',\n      title: 'Afhalen bij een service point',\n      shippingTitle: '',\n      get: (shipment) => {\n        return shipment.shipment;\n      },\n      sort_index: 1\n    }\n  ];\n\n  public shipmentType: string;\n  public shipments: Shipment[];\n  public selectedShipment: Shipment = undefined;\n\n  public delay = false;\n  public extraDelay = 0;\n\n  public errorMessage;\n\n  public couriersMaster;\n  public couriers: any[];\n\n  public firstShipment;\n  public shouldChoosePickupShop = false;\n  public distanceToCustomer;\n\n  constructor(\n    private cartService: CartService,\n    private coreService: CoreService,\n    private authService: AuthService,\n    private shipmentService: ShipmentService,\n    private branchService: BranchService,\n    private alertCtrl: AlertController,\n    private currencyPipe: CurrencyPipe\n  ) {}\n\n  async ngOnInit() {\n\n    this.order = this.cartService.getCurrentOrder();\n    this.user = this.authService.getCurrentUser();\n\n    this.baseShipment = new Shipment();\n    this.baseShipment.street = this.user.street;\n    this.baseShipment.house_number = this.user.house_number;\n    this.baseShipment.house_number_extension = this.user.house_number_extension;\n    this.baseShipment.postal_code = this.user.postal_code;\n    this.baseShipment.city = this.user.city;\n    this.baseShipment.country_code = this.user.country_code;\n\n    this.couriers = await this.shipmentService.getShippingCouriers().toPromise();\n    this.couriers = this.couriers.sort((c1, c2) => c1.sort_index - c2.sort_index);\n    this.couriersMaster = this.couriers;\n\n    // Check if there is a delay\n    this.delay = this.order.order_lines.some(\n      (ol) => ol.productVariant.stocks[0].stock_level === 0\n    );\n    \n    const branches = await this.branchService.getAll().toPromise();\n    if (branches.length <= 2) {\n\n      const onlyBranch = branches.filter(br => !br.is_online)[0];\n      const onlineBranch = branches.filter(br => br.is_online)[0];\n      \n      if (onlyBranch['latitude'] === onlineBranch['latitude'] && onlyBranch['longitude'] === onlineBranch['longitude']) {\n        this.delay = false;\n      }\n\n    }\n\n    this.deliveryTypes = this.deliveryTypes.sort((a, b) => a.sort_index - b.sort_index);\n    this.shipmentType = this.deliveryTypes[0].key;\n\n    // Check if there are any preorders\n    let orderLinesDelayed = this.order.order_lines.filter(\n      (ol) => ol.productPreorder !== undefined\n    );\n    if (orderLinesDelayed.length > 0) {\n      //Check furthest date\n      let deliveryDate = Math.max(\n        ...orderLinesDelayed.map((ol) => ol.productPreorder.timestamp_delivery)\n      );\n      let diff = Math.ceil(\n        (deliveryDate - new Date().getTime()) / (1000 * 60 * 60 * 24)\n      );\n      this.extraDelay = diff;\n    }\n\n    this.loadShipments();\n\n  }\n\n  public dismiss() {\n    this.onDismiss.emit();\n  }\n\n  public getCourierImage(courier) {\n    if (!courier.custom_name || (courier.custom_name && courier.custom_name.toLowerCase() !== this.coreService.store.store_name.toLowerCase())) {\n      return courier.medias[0].url;\n    } else {\n      return this.coreService.store.store_logo;\n    }\n  }\n\n  public getShippingCost(shippingMethod) {\n\n    const costObj = shippingMethod.shipping_method_prices.find(smp => smp.timestamp_end === undefined);\n    const subtotal = this.cartService.getSubtotal() - this.cartService.getDiscount();\n    const shippingCost =\n      subtotal >= costObj.threshold_order_total\n        ? costObj.threshold_price\n        : costObj.price;\n    return shippingCost;\n\n  }\n\n  public checkSelectedShipment(event, searchFor?) {\n\n    const selected = event.detail.value;\n    if (selected) {\n\n      const courierId = Number(selected.split('_')[0]);\n      const type = selected.split('_')[1];\n\n      const shipments = this.getShipmentsByCourier(courierId, type);\n      if (searchFor) {\n\n        const existingShipmentIndex = shipments.findIndex(s => {\n\n          const dummyObj = JSON.parse(JSON.stringify(type === 'delivery' ? s : s.shipment));\n          dummyObj['delivery_type'] = type === 'delivery' ? 'delivery' : 'pickup';\n\n          return this.compareObjects(dummyObj, searchFor);\n\n        });\n\n        if (existingShipmentIndex) {\n\n          if (existingShipmentIndex > 1) {\n\n            const courier = this.couriers.find(c => courierId === c.id);\n            if (type === 'delivery') {\n              courier.showMoreTimeframeShipments = true;\n            } else {\n              courier.showMorePickupShipments = true;\n            }\n\n          }\n\n          this.selectedShipment = shipments[existingShipmentIndex];\n        }\n\n      } \n\n      if (!this.selectedShipment || !searchFor) {\n        this.selectedShipment = shipments[0];\n      }\n\n    }\n\n  }\n\n  public compareObjects = (a, b) => { \n    let s = (o) => Object.entries(o).sort().map(i => { \n      if(i[1] instanceof Object) i[1] = s(i[1]);\n      return i \n    }) \n    return JSON.stringify(s(a)) === JSON.stringify(s(b))\n  }\n\n  public async setSelectedShipment(event: any) {\n\n    this.selectedShipment = event.detail.value;\n    if (!this.selectedShipment || (typeof this.selectedShipment !== 'object')) {\n      return;\n    }\n\n    this.saveShipment();\n\n  }\n\n  public saveShipment() {\n\n    this.order.shipment = this.selectedShipment.pickup_location ? this.selectedShipment['shipment'] : this.selectedShipment;\n    this.order.shipment['delivery_type'] = this.selectedShipment.pickup_location ? 'pickup' : 'delivery';\n    this.cartService.storeOrder();\n    this.dismiss();\n\n  }\n\n  public segmentChanged(event: any) {\n    this.shipmentType = event.detail.value;\n    this.selectedShipment = undefined;\n    this.couriers = this.couriersMaster;\n    this.loadShipments();\n  }\n\n  public async loadShipments() {\n\n    this.errorMessage = undefined;\n    this.loading = true;\n\n    const obs1 = this.shipmentService.getShippingTimeFrames(\n      this.baseShipment,\n      this.delay === true ? \"1\" : \"0\",\n      this.extraDelay,\n      this.getProductVariantList()\n    );\n\n    const obs2 = this.shipmentService.getShippingLocations(\n      this.baseShipment,\n      this.delay === true ? \"1\" : \"0\",\n      this.extraDelay,\n      this.getProductVariantList()\n    );\n\n    forkJoin([obs1, obs2]).subscribe(r => {\n\n      this.shipments = [];\n      r.forEach((value, index, array) => {\n        this.shipments = this.shipments.concat(r[index]);\n      });\n      console.log(this.shipments);\n\n      // for (let shipment of this.shipments) {\n      //   if (shipment.shipping_method && shipment.shipping_method.localized_string === 'Normale bezorging') {\n      //     shipment.shipping_method.localized_string = 'Bezorging aan huis';\n      //   }\n      // }\n\n      this.checkCouriers();\n      this.loading = false;\n      this.loadingChange.emit();\n\n    }, error => {\n\n      this.errorMessage = error.localized_message\n              ? error.localized_message\n              : error.message;\n      this.loading = false;\n      this.loadingChange.emit();\n\n    });\n\n  }\n\n  public checkCouriers() {\n\n    for (let courier of this.couriers) {\n\n      if (\n        !this.shipments.some(\n          (s) =>\n            (s.shipping_method &&\n              s.shipping_method[\"shipping_courier\"].id === courier.id) ||\n            (s.shipment &&\n              s.shipment.shipping_method[\"shipping_courier\"].id === courier.id)\n        )\n      ) {\n        this.couriers = this.couriers.filter((c) => c.id !== courier.id);\n      } else {\n\n        courier['has_delivery'] = this.shipments.filter(\n          (s) =>\n            (s.shipping_method &&\n              s.shipping_method[\"shipping_courier\"].id === courier.id) ||\n            (s.shipment &&\n              s.shipment.shipping_method[\"shipping_courier\"].id === courier.id)\n        ).some(s => s.pickup_location === undefined);\n\n        courier['has_pickup'] = this.shipments.filter(\n          (s) =>\n            (s.shipping_method &&\n              s.shipping_method[\"shipping_courier\"].id === courier.id) ||\n            (s.shipment &&\n              s.shipment.shipping_method[\"shipping_courier\"].id === courier.id)\n        ).some(s => s.pickup_location !== undefined);\n\n      }\n\n      //Calculate lowest price\n      courier['lowest_price_delivery'] = this.getLowestPrice(courier, 'delivery');\n      courier['lowest_price_pickup'] = this.getLowestPrice(courier, 'pickup');\n\n    }\n\n    let searchForShipment = undefined;\n    if (this.order.shipment) {\n      \n      const type = this.order.shipment['delivery_type'];\n      const courier = this.couriers.find(c => this.order.shipment.shipping_method['shipping_courier'].id === c.id);\n      if (courier) {\n        this.firstShipment = courier.id+'_'+type;\n        searchForShipment = this.order.shipment;\n      }\n      \n      const dummyShipment = this.shipments.filter(s => {\n        \n        if (!s.pickup_location) {\n          return false;\n        }\n\n        const dummy = s.shipment;\n        dummy['delivery_type'] = 'pickup';\n        return this.compareObjects(dummy, searchForShipment);\n        \n      })[0];\n\n      if (dummyShipment) {\n        this.shouldChoosePickupShop = this.doShouldChoosePickupShop();\n        this.distanceToCustomer = Math.round(dummyShipment.pickup_location.distance / 1000);\n      }\n\n    }\n\n    // Check if the user is close to shop, and preselect pickup\n    const ropeRetailCourier = this.couriers.find(c => c.name === 'Rope Retail Delivery');\n    if (!this.order.shipment && ropeRetailCourier) {\n\n      this.shouldChoosePickupShop = this.doShouldChoosePickupShop();\n\n      const ropeRetailShippingMethod = this.shipments.filter(s => s.pickup_location && s.shipment.shipping_method['shipping_courier'].id === ropeRetailCourier.id).find(sm => sm.shipment.shipping_method.name === 'ROPE_RETAIL_PICKUP_AT_SHOP');\n      if (this.shouldChoosePickupShop) {\n\n        this.firstShipment = ropeRetailCourier.id+'_pickup';\n        searchForShipment = this.shipments.filter(s =>  s.pickup_location && s.shipment.shipping_method.id === ropeRetailShippingMethod.shipment.shipping_method.id)[0];\n        \n        this.shouldChoosePickupShop = true;\n        this.distanceToCustomer = Math.round(searchForShipment.pickup_location.distance / 1000);\n\n      }\n\n    }\n\n    if (!this.firstShipment) {\n      const key = this.deliveryTypes[0].key;\n      let courier = this.couriers.filter(c => c['has_' + key])[0];\n      if (!courier) {\n        courier = this.couriers[0];\n      }\n      this.firstShipment = courier.id+'_'+key;\n    }\n\n    this.checkSelectedShipment({\n      detail: {\n        value: this.firstShipment\n      }\n    }, searchForShipment);\n\n  }\n\n  public activateDelivery() {\n\n    this.shouldChoosePickupShop = false;\n    const key = this.deliveryTypes[0].key;\n    this.firstShipment = this.couriers.filter(c => c['has_'+key])[0].id+'_'+key;\n    this.checkSelectedShipment({\n      detail: {\n        value: this.firstShipment\n      }\n    }, undefined);\n    \n  }\n\n  public checkCouriersOnType(type) {\n    return this.couriers.filter(c => c['has_' + type.key]).length > 0;\n  }\n\n  public courierSelected(courier) {\n\n    if (this.firstShipment) {\n      const courierId = this.firstShipment.split('_')[0];\n      return Number(courierId) === courier.id;\n    }\n\n    return false;\n\n  }\n\n  public shipmentSelected(courier, sshipment) {\n\n    if (this.firstShipment) {\n\n      const courierId = this.firstShipment.split('_')[0];\n      const ropeRetailCourier = this.couriers.find(c => c.name === 'Rope Retail Delivery');\n      if (!ropeRetailCourier) {\n        return false;\n      }\n\n      const ropeRetailShippingMethod = this.shipments.filter(s => s.pickup_location && s.shipment.shipping_method['shipping_courier'].id === ropeRetailCourier.id).find(sm => sm.shipment.shipping_method.name === 'ROPE_RETAIL_PICKUP_AT_SHOP');\n      if (!ropeRetailShippingMethod) {\n        return false;\n      }\n\n      const shipment = this.shipments.filter(s =>  s.pickup_location && s.shipment.shipping_method.id === ropeRetailShippingMethod.shipment.shipping_method.id)[0];\n      return Number(courierId) === courier.id && shipment === sshipment;\n\n    }\n\n    return false;\n\n  }\n\n  public doShouldChoosePickupShop() {\n\n    const ropeRetailCourier = this.couriers.find(c => c.name === 'Rope Retail Delivery');\n    if (ropeRetailCourier) {\n\n      const ropeRetailShippingMethod = this.shipments.filter(s => s.pickup_location && s.shipment.shipping_method['shipping_courier'].id === ropeRetailCourier.id).find(sm => sm.shipment.shipping_method.name === 'ROPE_RETAIL_PICKUP_AT_SHOP');\n      if (ropeRetailShippingMethod) {\n\n        const lowestDistanceShipment = this.shipments.filter(s => s.pickup_location && s.shipment.shipping_method['shipping_courier'].id === ropeRetailCourier.id).sort((a, b) => a.pickup_location.distance - b.pickup_location.distance)[0];\n        const includedPostalAreas = JSON.parse(ropeRetailShippingMethod.shipment.shipping_method['included_postal_areas']);\n        \n        if (includedPostalAreas.indexOf(this.user.city.toLowerCase()) !== -1 || lowestDistanceShipment.pickup_location.distance < 10000) {\n          return true;\n        }\n\n      }\n\n    }\n\n    return false;\n\n  }\n\n  public getShipmentsByCourier(courierId, type) {\n    return this.shipments\n      .filter(\n        s => (type === 'pickup' && s.pickup_location !== undefined) || (type === 'delivery' && s.pickup_location === undefined)\n      )\n      .filter(\n      (s) =>\n        (s.shipping_method &&\n          s.shipping_method[\"shipping_courier\"].id === courierId) ||\n        (s.shipment &&\n          s.shipment.shipping_method[\"shipping_courier\"].id === courierId)\n      )\n      .sort(\n        firstBy((a, b) => a['timeframe_start'] - b['timeframe_start'])\n          .thenBy((a, b) => this.getShippingCost((type === 'pickup' ? a.shipment : a)['shipping_method']) - this.getShippingCost((type === 'pickup' ? b.shipment : b)['shipping_method']))\n      );\n  }\n\n  public isToday(epoch) {\n    const today = new Date().setHours(0, 0, 0, 0);\n    const thatDay = new Date(epoch).setHours(0, 0, 0, 0);\n    return today === thatDay;\n  }\n\n  public getProductVariantList() {\n    const list = [];\n    for (let orderLine of this.order.order_lines) {\n      let amount = Number(orderLine.count);\n      while (amount > 0) {\n        list.push(orderLine.productVariant.id);\n        amount--;\n      }\n    }\n    return list;\n  }\n\n  public getLowestPrice(courier, type) {\n    let shipments = this.getShipmentsByCourier(courier.id, type) as any;\n    let shippingMethodPrices = shipments.map(s => type === 'delivery' ? s.shipping_method : s.shipment.shipping_method).flatMap(sm => sm.shipping_method_prices);\n    let lowestPrice = Math.min(...shippingMethodPrices.filter(smp => !smp.timestamp_end).map(item => item.price));\n    const lowestPriceString = lowestPrice > 0 ? 'vanaf '+this.currencyPipe.transform(lowestPrice, 'EUR', 'symbol') : 'Gratis';\n    return lowestPriceString;\n  }\n\n}\n","<div *ngIf=\"loading\" style=\"width: 100%; height: 50vh;\">\n    <rope-loading [text]=\"'Bezorgopties laden...'\"></rope-loading>\n</div>\n\n<ion-radio-group *ngIf=\"!loading\" name=\"selectedShipment\" (ionChange)=\"setSelectedShipment($event)\" class=\"shipments-container\" [(ngModel)]=\"selectedShipment\">\n\n    <ion-chip color=\"success\" style=\"height: 50px;\">\n        <ion-icon name=\"alert-circle-outline\" color=\"success\"></ion-icon>\n        <ion-label>\n            <div style=\"font-family: var(--normal-font) !important; font-size: var(--h3-font-size) !important;\">\n                We hebben de bezorgopties alvast zo gesorteerd dat de beste bezorgoptie voor jou automatisch geselecteerd is.\n            </div>\n        </ion-label>\n    </ion-chip>\n\n    <ion-accordion-group *ngIf=\"firstShipment\" (ionChange)=\"checkSelectedShipment($event)\" [value]=\"firstShipment\">\n\n        <ion-chip *ngIf=\"delay && extraDelay === 0\" color=\"warning\" style=\"height: 45px; margin-bottom: 10px;\">\n            <ion-icon name=\"alert-circle-outline\"></ion-icon>\n            <ion-label>\n                <div style=\"font-family: var(--normal-font) !important; font-size: var(--h3-font-size) !important;\">\n                    Door verschuiving van voorraad zijn niet alle bezorgmomenten mogelijk. Hieronder zie je de snelst mogelijke\n                    bezorgmomenten.\n                </div>\n            </ion-label>\n        </ion-chip>\n        \n        <div class=\"r-warning r-h3\" style=\"margin-left: 0px !important; margin-right: 0px !important;\" *ngIf=\"extraDelay > 0\">\n            <strong>Levertijd pre-order producten</strong><br />\n            Er zitten pre-order producten in je shopping bag en daarom zijn de bezorgmomenten hier op aangepast.\n            Hieronder zie je de snelst mogelijke bezorgmomenten.\n        </div>\n\n        <ng-container *ngFor=\"let type of deliveryTypes\">\n\n            <ion-list [hidden]=\"loading\" *ngIf=\"!loading && !errorMessage\">\n\n                <ion-item-divider *ngIf=\"(!shouldChoosePickupShop || (shouldChoosePickupShop && type.key === 'pickup')) && checkCouriersOnType(type)\">\n                    <ion-label class=\"r-h2\" style=\"color: black; font-weight: 700;\">{{ type.title }}</ion-label>\n                </ion-item-divider>\n\n                <ng-container *ngFor=\"let courier of couriers\">\n\n                    <ion-accordion *ngIf=\"courier['has_'+type.key] && (!shouldChoosePickupShop || (shouldChoosePickupShop && courierSelected(courier)))\" [value]=\"courier.id+'_'+type.key\" [disabled]=\"shouldChoosePickupShop && !courierSelected(courier)\">\n\n                        <ion-item slot=\"header\">\n                            <ion-avatar slot=\"start\" style=\"width: 35px; height: 35px;\">\n                                <img [src]=\"getCourierImage(courier)\" style=\"width: 35px; height: 35px;\">\n                            </ion-avatar>\n                            <ion-label>\n                                <div class=\"r-h2\">{{ type.shippingTitle }} <i>{{ courier.custom_name || courier.name }}</i></div>\n                                <p class=\"r-h3 ion-text-wrap\">{{ courier.description }}</p>\n                                <div style=\"display: flex; align-items: center; justify-content: flex-start;\">\n                                    <ion-chip style=\"height: 14px;\" color=\"medium\">\n                                        <ion-label style=\"font-size: 1.0rem; color: rgba(0, 0, 0, 0.54);\">\n                                            {{ courier['lowest_price_'+type.key] }}\n                                        </ion-label>\n                                    </ion-chip>\n                                    <ion-chip *ngIf=\"courier.is_sustainable\" style=\"height: 14px;\" color=\"success\">\n                                        <ion-icon style=\"font-size: 1.5rem;\" name=\"leaf\" color=\"success\"></ion-icon>\n                                        <ion-label style=\"font-size: 1.0rem; color: rgba(0, 0, 0, 0.54);\">\n                                            Duurzaam\n                                        </ion-label>\n                                    </ion-chip>\n                                </div>\n                            </ion-label>\n                        </ion-item>\n\n                        <ion-list slot=\"content\" style=\"padding-top: 0px; background-color: #f2f2f2;\">\n\n                            <ng-container *ngFor=\"let shipment of getShipmentsByCourier(courier.id, type.key); let i = index;\">\n\n                                <ion-item style=\"--padding-start: 57px; --background: #f2f2f2;\"\n                                    *ngIf=\"i <= 1 || (i > 1 && courier['showMore'+type.key])\">\n                                    \n                                    <ion-label *ngIf=\"type.key === 'delivery'\">\n                                        <div class=\"r-h3\">\n                                            <div>{{ shipment.shipping_method.localized_string }}</div>\n                                            <ng-container *ngIf=\"!isToday(shipment.timeframe_start)\">\n                                                <div>{{ shipment.timeframe_start | date:'fullDate' }}</div>\n                                            </ng-container>\n                                            <ng-container *ngIf=\"isToday(shipment.timeframe_start)\">\n                                                <div>Vandaag</div>\n                                            </ng-container>\n                                            <p class=\"r-h3\">tussen {{ shipment.timeframe_start | date:'HH:mm' }} en {{ shipment.timeframe_end | date:'HH:mm'\n                                                }}</p>\n                                        </div>\n                                    </ion-label>\n\n                                    <ion-label *ngIf=\"type.key === 'pickup'\">\n                                    \n                                        <div class=\"r-h3 ion-text-wrap\">{{ shipment.shipment.shipping_method.localized_string }}</div>\n                                        <div class=\"r-h3 ion-text-wrap\">{{ shipment.pickup_location.name }}</div>\n                                        <div class=\"r-h3\">{{ shipment.shipment.street }} {{ shipment.shipment.house_number }}<span\n                                                *ngIf=\"shipment.shipment.house_number_extension\">-{{ shipment.shipment.house_number_extension }}</span>\n                                        </div>\n                                        <div class=\"r-h3\">{{ shipment.shipment.postal_code }} {{ shipment.shipment.city }}</div>\n                                        <div class=\"r-h3 r-flex r-flex-v-center r-flex-h-start\">\n                                            <ion-icon style=\"margin-right: 5px;\" name=\"map-outline\"></ion-icon>\n                                            <div>{{ (shipment.pickup_location.distance / 1000) | number:'1.0-0' }} km<ng-container\n                                                    *ngIf=\"shipment.pickup_location.duration\"> - {{ shipment.pickup_location.duration }} min. reizen\n                                                </ng-container>\n                                            </div>\n                                        </div>\n                                        <br>\n                                        <div class=\"r-h3 r-text-color-light\">{{ shipment.shipment.timeframe_start | date:'fullDate' }}</div>\n                                        <div class=\"r-h3 r-text-color-light\">\n                                            <ng-container *ngIf=\"!shipment.shipment.timeframe_end\">vanaf {{ shipment.shipment.timeframe_start |\n                                                date:'HH:mm' }}</ng-container>\n                                            <ng-container *ngIf=\"shipment.shipment.timeframe_end\">tussen {{ shipment.shipment.timeframe_start |\n                                                date:'HH:mm' }} en {{ shipment.shipment.timeframe_end | date:'HH:mm' }}</ng-container>\n                                        </div>\n                                    \n                                    </ion-label>\n\n                                    <div slot=\"end\" class=\"r-h2 r-b\">\n                                        <ng-container *ngIf=\"getShippingCost(type.get(shipment).shipping_method) > 0.00\">{{\n                                            getShippingCost(type.get(shipment).shipping_method) | currency:'EUR':'symbol' }}</ng-container>\n                                        <ng-container *ngIf=\"getShippingCost(type.get(shipment).shipping_method) === 0.00\">Gratis</ng-container>\n                                    </div>\n                                    <ion-radio color=\"secondary\" [value]=\"shipment\"></ion-radio>\n\n                                </ion-item>\n\n                            </ng-container>\n\n                            <ion-item-divider *ngIf=\"!courier['showMore'+type.key]\" style=\"margin-top: 0px !important; --background: #f2f2f2;\" (click)=\"courier['showMore'+type.key] = true;\">\n                                <ion-label>\n                                    <div class=\"r-h3 r-text-color-light\">Wil je meer opties zien?</div>\n                                </ion-label>\n                                <div slot=\"end\" class=\"r-h3 r-text-color-light\" style=\"padding-right: 16px; cursor: pointer;\">Klik hier</div>\n                            </ion-item-divider>\n\n                        </ion-list>\n\n                    </ion-accordion>\n\n                </ng-container>\n\n            </ion-list>\n\n        </ng-container>\n\n    </ion-accordion-group>\n\n</ion-radio-group>\n\n<ng-container *ngIf=\"shouldChoosePickupShop\">\n\n    <ion-accordion-group>\n\n        <ion-accordion>\n\n            <ion-item slot=\"header\">\n                <ion-label>\n                    <div class=\"r-h3 r-b\">Toch liever thuis laten bezorgen?</div>\n                </ion-label>\n            </ion-item>\n\n            <ion-list slot=\"content\" class=\"r-h3\" style=\"background: #f2f2f2; padding: 10px;\">\n                \n                We zouden het graag bij je laten bezorgen. Gezien de geringe afstand van jou tot een van onze winkels is het wel veel duurzamer om het op te halen in de winkel. \n                <br><br>\n                Bezorgen betekent namelijk dat het pakket gemiddeld <b>140 kilometer</b> zal afleggen voordat het bij jou is, met bijbehorende gevolgen voor het milieu en kosten van dien. Dit terwijl de afstand tot jou <b>{{ distanceToCustomer }} kilometer</b> bedraagt.\n                <br><br>\n                Natuurlijk zullen we je niet weerhouden van keuzevrijheid en kun je met onderstaande knop bezorging aan huis activeren:\n                <br><br>\n\n                <ion-button size=\"small\" color=\"secondary\" fill=\"outline\" (click)=\"activateDelivery()\">\n                    <ion-icon slot=\"start\" name=\"arrow-up-circle-outline\"></ion-icon>\n                    <ion-label class=\"r-h3\" style=\"color: var(--ion-color-secondary) !important;\">Bekijk alle bezorgopties</ion-label>\n                </ion-button>\n\n            </ion-list>\n\n        </ion-accordion>\n\n    </ion-accordion-group>\n\n</ng-container>\n\n<div class=\"fullscreen-div\" *ngIf=\"!loading && errorMessage\">\n    <div style=\"font-size: 1.4rem; color: indianred;\" class=\"ion-text-wrap\">\n        <i>{{ errorMessage }}</i>\n    </div>\n</div>","import { Component, OnInit, ViewChild } from '@angular/core';\nimport { IonInfiniteScroll } from '@ionic/angular';\nimport { Review } from '../../../models/review';\nimport { CoreService } from '../../../services/core.service';\nimport { ReviewService } from '../../../services/review.service';\n\n@Component({\n  selector: \"rope-review-overview\",\n  templateUrl: \"./review-overview.component.html\",\n  styleUrls: [\"./review-overview.component.scss\"],\n})\nexport class ReviewOverviewComponent implements OnInit {\n  @ViewChild(IonInfiniteScroll) infiniteScroll: IonInfiniteScroll;\n\n  public start = 0;\n  public limit = 25;\n\n  public reviews: Review[];\n  public Arr = Array;\n\n  public storeLogo;\n  public storeName;\n  public webwinkelkeurUrl;\n  public reviewRatingObj;\n\n  constructor(\n    public coreService: CoreService,\n    public reviewService: ReviewService\n  ) {}\n\n  async ngOnInit() {\n    this.storeLogo = this.coreService.store.store_logo;\n    this.storeName = this.coreService.store.store_name;\n    this.webwinkelkeurUrl =\n      this.coreService.store.webwinkelkeur_review_page_url || undefined;\n\n    this.reviewRatingObj = await this.reviewService.getAverage().toPromise();\n    this.reviewRatingObj.avgRating = Math.round(\n      this.reviewRatingObj.avg_rating\n    );\n\n    this.reviewService.get(this.start, this.limit).subscribe((res) => {\n      this.reviews = res;\n    });\n  }\n\n  public doInfinite(event) {\n    this.start = this.start + this.limit;\n    this.reviewService.get(this.start, this.limit).subscribe((res) => {\n      this.reviews = this.reviews.concat(res);\n      event.target.complete();\n    });\n  }\n\n  public goToReviewPage() {\n    this.coreService.openUrl(this.webwinkelkeurUrl, '_blank');\n  }\n\n  public getImage(review: Review): string {\n    if (review[\"external_id\"].endsWith(\"000\")) {\n      return \"https://lh3.googleusercontent.com/fnRJk0r9oQb8h3IcxBWfTzbgvjqDTSh0eb43GTZZ05ZG4FQOEhub2Pk7-Vv-DMAc2xAxWTMwa-DxhmlO20cgnzjkv5zhd6tE3zz-xIlonA\";\n    }\n\n    const reviewId = review.id;\n    return (\n      \"https://storage.googleapis.com/kiba-fashion-api-bucket/image/review/\" +\n      reviewId +\n      \".jpg\"\n    );\n  }\n}\n","<ion-grid>\n\n    <ion-row class=\"blocks\">\n\n        <ion-col size=\"12\" size-lg=\"4\" class=\"block\">\n\n            <div class=\"ion-text-center\" style=\"width: 100%; display: flex; justify-content: center;\">\n                <ion-avatar style=\"width: 55px; height: 55px;\">\n                <img [src]=\"storeLogo\" style=\"width: 55px; height: 55px;\">\n                </ion-avatar>\n            </div>\n\n            <ion-card-header>\n                <ion-card-title class=\"r-h2\">{{ storeName }}</ion-card-title>\n                <ion-card-subtitle class=\"r-h3\">\n                    <p>Onze score volgens onze klanten:</p>\n                </ion-card-subtitle>\n            </ion-card-header>\n\n            <div class=\"r-flex r-flex-h-center r-flex-v-center r-width-100\">\n                <div class=\"ion-text-center store-score\">\n                    <div class=\"r-h0\">{{ reviewRatingObj?.avg_rating*2 | number:'1.1-1' }}/10</div>\n                    <div class=\"r-h3 r-b\">Op basis van {{ reviewRatingObj?.amount | number }} reviews</div>\n                </div>\n            </div>\n\n            <div class=\"ion-text-center\" *ngIf=\"webwinkelkeurUrl\">\n                <p class=\"r-h3 ion-text-center\">Jouw feedback is heel erg belangrijk! Daarom hebben wij een externe partij, WebwinkelKeur, die onze reviews beheert. Zo blijven we objectief en transparant.<br>Klik hieronder door om onze reviews te lezen op Webwinkelkeur.</p>\n                <ion-button style=\"--background: #E71B8A; --color: white;\" size=\"small\" (click)=\"goToReviewPage()\">\n                    <div class=\"r-flex r-flex-h-start r-flex-v-center\">\n                        <img src=\"https://lh3.googleusercontent.com/3qaboqruD7Rlkj7nUh3lD64wMsSlc-cVmWWBw5DaAq-AJcxdGgx9gyop4Rz9DblUbM8FT114ZDYvEB1b7sGzoSw9_o_fb8nypPd6JhnoyMw\" style=\"height: 15px;\">\n                        <div style=\"margin-left: 10px; color: white;\" class=\"r-h2\">Bekijk op Webwinkelkeur</div>\n                    </div>\n                    <ion-icon slot=\"end\" name=\"arrow-forward-circle-outline\"></ion-icon>\n                </ion-button>\n            </div>\n\n        </ion-col>\n\n        <ion-col size=\"12\" size-lg=\"4\" *ngFor=\"let review of reviews; let i = index;\" class=\"block\">\n\n            <div class=\"ion-text-center\" style=\"width: 100%; display: flex; justify-content: center;\">\n                <ion-avatar style=\"width: 55px; height: 55px;\">\n                <img [src]=\"getImage(review)\" style=\"width: 55px; height: 55px;\">\n                </ion-avatar>\n            </div>\n\n            <ion-card-header>\n                <ion-card-title class=\"r-h2\">{{ review.name }}</ion-card-title>\n                <ion-card-subtitle class=\"r-h3\">\n                    <p>Geplaatst op {{ review.timestamp | date:'shortDate' }}</p>\n                </ion-card-subtitle>\n            </ion-card-header>\n\n            <div style=\"padding-top: 5px; width: 100%;\" class=\"ion-text-center\">\n                <ion-icon *ngFor=\"let i of Arr(review.rating).fill(1)\" name=\"star\" color=\"tertiary\" size=\"large\"></ion-icon>\n                <ion-icon *ngFor=\"let i of Arr(5-review.rating).fill(1)\" name=\"star-outline\" color=\"tertiary\" size=\"large\"></ion-icon>\n            </div>\n\n            <ion-card-content class=\"ion-text-center\">\n                <ion-label *ngIf=\"review.text\" class=\"ion-text-wrap r-h3\">\n                \"{{ review.text }}\"\n                </ion-label>\n                <ion-label *ngIf=\"!review.text\" class=\"no-review ion-text-wrap r-h3\">\n                <i>Geen tekst bij recensie geplaatst.</i>\n                </ion-label>\n            </ion-card-content>\n\n        </ion-col>\n\n    </ion-row>\n\n</ion-grid>\n\n<ion-infinite-scroll (ionInfinite)=\"doInfinite($event)\">\n<ion-infinite-scroll-content></ion-infinite-scroll-content>\n</ion-infinite-scroll>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Outfit } from '../../../models/outfit';\nimport { BranchService } from '../../../services/branch.service';\nimport { OutfitService } from '../../../services/outfit.service';\n\n@Component({\n  selector: \"rope-shop-window-product-overview\",\n  templateUrl: \"./shop-window-product-overview.component.html\",\n  styleUrls: [\"./shop-window-product-overview.component.scss\"],\n})\nexport class ShopWindowProductOverviewComponent implements OnInit {\n \n  @Input() public branchId;\n  @Output() public navigateToShopDetail = new EventEmitter();\n\n  public branch;\n  public results;\n\n  constructor(\n    private outfitService: OutfitService,\n    private branchService: BranchService\n  ) {}\n\n  async ngOnInit() {\n    this.branch = (\n      await this.branchService.getById(this.branchId).toPromise()\n    )[0];\n\n    this.outfitService.getShopWindowOutfits(this.branchId).subscribe((r) => {\n      this.results = r;\n    });\n  }\n\n  public goToShopDetail(outfit: Outfit) {\n    this.navigateToShopDetail.emit(outfit);\n  }\n}\n","<div class=\"blocks\">\n\n    <div style=\"padding: 14px;\">\n        <div *ngIf=\"branch\" [style.background-image]=\"'url(' + branch.images[0].url + ')'\" class=\"header-img default-image r-flex r-flex-v-center r-flex-h-center\">\n            <div class=\"branch-name-container\">\n                <div class=\"r-h2\" style=\"color: white;\">Winkel</div>\n                <div class=\"r-h0\" style=\"color: white;\">{{ branch.full_name }}</div>\n            </div>\n        </div>\n    </div>\n    <div></div>\n\n    <div class=\"block bg-alt\" *ngIf=\"results && results.length > 0\">\n\n        <ion-card-header>\n            <ion-card-title>De etalage</ion-card-title>\n            <ion-card-subtitle>Dit zijn de producten op dit moment in de etalage</ion-card-subtitle>\n        </ion-card-header>\n        <ion-card-content style=\"padding-left: 14px; padding-right: 14px;\">\n\n            <ion-grid class=\"ion-no-padding\">\n                <ion-row>\n                    <ion-col *ngFor=\"let result of results; let i = index;\" size=\"6\" size-xl=\"3\" size-lg=\"3\" size-md=\"3\" style=\"padding: 5px;\">\n                        <rope-product-container\n                            [outfit]=\"result\"\n                            [showLikeButton]=\"false\"\n                            [onlyPreorders]=\"false\"\n                            (navigateToShopDetail)=\"goToShopDetail($event)\"\n                        ></rope-product-container>\n                    </ion-col>\n                </ion-row>\n            </ion-grid>\n\n            <div *ngIf=\"!results || results.length === 0\" class=\"no-results\">\n                <div class=\"no-results-text\">Geen producten gevonden...</div>\n            </div>\n\n        </ion-card-content>\n\n    </div>\n\n</div>","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { Order } from '../../../models/order';\nimport { AuthService } from '../../../services/auth.service';\nimport { CoreService } from '../../../services/core.service';\nimport { OrderService } from '../../../services/order.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\n\n@Component({\n  selector: \"rope-order-overview\",\n  templateUrl: \"./order-overview.component.html\",\n  styleUrls: [\"./order-overview.component.scss\"],\n})\nexport class OrderOverviewComponent implements OnInit {\n  @Output() public navigateToOrder = new EventEmitter<string>();\n\n  public allOrders: Order[];\n  public orders: Order[];\n  public loading = true;\n\n  public chunkSize = 10;\n  public chunkCount = 1;\n\n  public storeName;\n\n  constructor(\n    public authService: AuthService,\n    public coreService: CoreService,\n    public orderService: OrderService,\n    public screenSizeService: ScreensizeService\n  ) {}\n\n  ngOnInit() {\n    this.storeName = this.coreService.store.store_name;\n\n    this.loading = true;\n    this.orderService.getOrders().subscribe((res) => {\n      this.allOrders = res;\n      this.orders =\n        res.length > this.chunkSize ? res.slice(0, this.chunkSize) : res;\n      this.loading = false;\n    });\n\n  }\n\n  loadData(event) {\n    this.orders = this.orders.concat(\n      this.allOrders.slice(\n        this.chunkSize * this.chunkCount,\n        this.chunkSize * (this.chunkCount + 1)\n      )\n    );\n    this.chunkCount++;\n\n    event.target.complete();\n\n    if (this.orders.length === this.allOrders.length) {\n      event.target.disabled = true;\n    }\n  }\n\n  public goToOrder(order: any) {\n    this.navigateToOrder.emit(order.id + \"\");\n  }\n\n  public getImage(order: Order): string {\n    const url = order[\"transaction_lines\"][0].product_variant.product.outfits[0].main_media_url;\n    return url;\n  }\n\n  public getStatus(order: Order) {\n    const status = order.status;\n    if (!status) {\n      return \"Geen status\";\n    }\n    if (status === \"CANCELLED\") {\n      return \"Geannuleerd\";\n    } else if (status === \"WAITING_FOR_PAYMENT\") {\n      return \"Wachten op betaling\";\n    } else if (status === \"RECEIVED_AND_PAID\") {\n      return \"Bestelling wordt verwerkt\";\n    } else if (status === \"READY_FOR_DELIVERY\") {\n      return \"Verstuurd\";\n    }\n  }\n\n  public getBorderColor(order: Order): string {\n    const status = order.status;\n    if (!status) {\n      return \"neutral\";\n    }\n    if (status === \"CANCELLED\") {\n      return \"danger\";\n    } else if (status === \"WAITING_FOR_PAYMENT\") {\n      return \"warning\";\n    } else if (status === \"RECEIVED_AND_PAID\") {\n      return \"success\";\n    } else if (status === \"READY_FOR_DELIVERY\") {\n      return \"success\";\n    }\n  }\n}\n","<div class=\"blocks\">\n\n    <div class=\"block\" style=\"padding-bottom: 20px !important;\">\n\n      <ion-card-header>\n        <ion-card-title>\n          Bestellingen\n        </ion-card-title>\n        <ion-card-subtitle class=\"r-h2\">\n          Alles op een rijtje\n        </ion-card-subtitle>\n      </ion-card-header>\n\n      <ion-card-content class=\"ion-text-center r-h3\">\n\n        Hieronder zie je al je bestellingen bij {{ storeName }}, met de bijbehorende status. Je kunt in een oogopslag\n        zien hoe het ervoor staat met je bestelling. Normaal gesproken dient de status direct naar betaald te gaan als\n        het geld van je rekening is geschreven. Is dit niet zo? Neem dan contact op met onze klantenservice.\n\n      </ion-card-content>\n\n    </div>\n\n  </div>\n\n  <div class=\"block\">\n  \n    <ion-list>\n  \n      <ng-container *ngIf=\"loading\">\n        <div style=\"height: 10vh; width: 100%; display: flex; align-items: center; justify-content: center;\">\n          <ion-spinner name=\"crescent\"></ion-spinner>\n        </div>\n      </ng-container>\n\n      <ng-container *ngFor=\"let order of orders\">\n        <ion-item detail=\"true\" (click)=\"goToOrder(order)\">\n          <ion-thumbnail slot=\"start\" class=\"order-avatar\">\n            <img [src]=\"getImage(order)\">\n          </ion-thumbnail>\n          <ion-label>\n            <div class=\"r-h2\">#{{ order.id }}</div>\n            <p class=\"ion-text-wrap r-h3\">{{ order['timestamp_start'] | date:'fullDate' }}</p>\n            <p class=\"ion-text-wrap r-h3\">{{ order['branch'].full_name }} - {{ order.transaction_lines.length }} stuk(s)</p>\n            <p class=\"ion-text-wrap r-h3 status\" [ngClass]=\"getBorderColor(order) + '-bg'\">{{ getStatus(order) }}</p>\n          </ion-label>\n          <div slot=\"end\" style=\"font-family: 'Source Sans Pro'; font-size: 2rem;\">\n            {{ order['total'] | currency:'EUR':'symbol' }}</div>\n        </ion-item>\n      </ng-container>\n  \n    </ion-list>\n\n    <ion-infinite-scroll threshold=\"100px\" (ionInfinite)=\"loadData($event)\">\n      <ion-infinite-scroll-content loadingSpinner=\"crescent\" loadingText=\"Meer laden...\">\n      </ion-infinite-scroll-content>\n    </ion-infinite-scroll>\n  \n  </div>","import { Directive, Input, Renderer2 } from '@angular/core';\nimport { DomController } from '@ionic/angular';\nimport { ScreensizeService } from '../services/screensize.service';\n\n@Directive({\n  selector: \"[ropeHideHeader]\",\n  host: {\n    \"(ionScroll)\": \"onContentScroll($event)\",\n  },\n})\nexport class HideHeaderDirective {\n  @Input(\"header\") headerRef: any;\n  @Input(\"footer\") footerRef: any;\n\n  private headerHeight = 44;\n  private footerHeight = 44;\n\n  private lastY = 0;\n  private hidden = false;\n\n  private screensizeObserver;\n  private isDesktop;\n  private init = false;\n\n  constructor(\n    private renderer: Renderer2,\n    private domCtrl: DomController,\n    private screensizeService: ScreensizeService\n  ) {}\n\n  ngOnInit() {\n    this.screensizeObserver = this.screensizeService\n      .isDesktopView()\n      .subscribe((isDesktop) => {\n        this.isDesktop = isDesktop;\n      });\n  }\n\n  ngOnDestroy() {\n    if (this.screensizeObserver) {\n      this.screensizeObserver.unsubscribe();\n    }\n  }\n\n  ngAfterViewInit() {\n    setTimeout(() => {\n      if (!this.isDesktop) {\n        this.headerRef = this.headerRef.header.el;\n        this.footerRef = this.footerRef.footer.el;\n\n        this.domCtrl.read(() => {\n          this.headerHeight = this.headerRef.clientHeight;\n          // this.renderer.setStyle(\n          //   this.headerRef,\n          //   \"transition\",\n          //   \"margin-top 700ms\"\n          // );\n\n          this.footerHeight = this.footerRef.clientHeight;\n          // this.renderer.setStyle(\n          //   this.footerRef,\n          //   \"transition\",\n          //   \"margin-bottom 700ms\"\n          // );\n        });\n      }\n    }, 1000);\n  }\n\n  public async onContentScroll($event) {\n\n    if (!this.isDesktop && this.headerRef && this.footerRef) {\n\n      const scrollElement = await $event.target.getScrollElement();\n      const currentY = $event.detail.currentY;\n\n      const scrollHeight = scrollElement.scrollHeight - scrollElement.clientHeight;\n      const currentScrollDepth = $event.detail.scrollTop;\n      const targetPercent = 90;\n      let triggerDepth = (scrollHeight / 100) * targetPercent;\n      let depthReached = currentScrollDepth > triggerDepth;\n\n      if ($event.detail.scrollTop > (this.lastY * 1.01) && currentY > 200 && !this.hidden) {\n        // this.hidden = true;\n        this.domCtrl.write(() => {\n          // this.renderer.setStyle(\n          //   this.headerRef,\n          //   \"margin-top\",\n          //   `-${this.headerHeight}px`\n          // );\n          // this.renderer.setStyle(\n          //   this.footerRef,\n          //   \"margin-bottom\",\n          //   `-${this.footerHeight}px`\n          // );\n        });\n      } else if ($event.detail.scrollTop < this.lastY && !depthReached && currentY < (scrollHeight - 200) && this.hidden) {\n        this.hidden = false;\n        this.domCtrl.write(() => {\n          // this.renderer.setStyle(this.headerRef, \"margin-top\", \"0\");\n          // this.renderer.setStyle(this.footerRef, \"margin-bottom\", \"0\");\n        });\n      }\n      this.lastY = $event.detail.scrollTop;\n\n    }\n\n  }\n}\n","export class PromoImageGlobal {\n}","import { Component, EventEmitter, Input, OnInit, Output, TemplateRef, ViewChild } from '@angular/core';\nimport { PromoImageGlobal } from '../promo-image-grid/promo-image-global';\n\n@Component({\n  selector: \"rope-promo-image\",\n  templateUrl: \"./promo-image.component.html\",\n  styleUrls: [\"./promo-image.component.scss\"],\n  providers: [{ provide: PromoImageGlobal, useExisting: PromoImageComponent }],\n})\nexport class PromoImageComponent implements OnInit {\n  \n  @Input() public imageUrl;\n  @Input() public text;\n  @Input() public href;\n\n  @Input() public size;\n  @Input() public sizeLg;\n\n  @Output() public navigate = new EventEmitter();\n\n  @ViewChild(\"template\") public template: TemplateRef<any>;\n\n  constructor() {}\n\n  ngOnInit(): void {}\n\n  public goHref() {\n    return this.navigate.emit(this.href);\n  }\n\n}\n","<ng-template #template>\n    <div [ngStyle]=\"{ 'background-image': 'url('+imageUrl+')' }\" class=\"img-container\" (click)=\"goHref()\">\n        <div class=\"text r-button-text\">{{ text }}</div>\n    </div>\n</ng-template>","import { Component, ContentChildren, OnInit, QueryList } from '@angular/core';\nimport { PromoImageGlobal } from './promo-image-global';\n\n@Component({\n  selector: \"rope-promo-image-grid\",\n  templateUrl: \"./promo-image-grid.component.html\",\n  styleUrls: [\"./promo-image-grid.component.scss\"],\n})\nexport class PromoImageGridComponent implements OnInit {\n\n  @ContentChildren(PromoImageGlobal) items: QueryList<PromoImageGlobal>;\n\n  constructor() {}\n\n  ngOnInit(): void {}\n  \n}\n","<ion-grid style=\"margin: -11px;\">\n    <ion-row>\n        <ion-col *ngFor=\"let item of items; let i = index;\" [size]=\"item['size']\" [sizeLg]=\"item['sizeLg']\">\n            <div>\n                <ng-template [ngTemplateOutlet]=\"item['template']\"></ng-template>\n            </div>\n        </ion-col>\n    </ion-row>\n</ion-grid>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { CoreService } from '../../../services/core.service';\nimport { OptionService } from '../../../services/option.service';\n\n@Component({\n  selector: 'rope-product-option-overview',\n  templateUrl: './product-option-overview.component.html',\n  styleUrls: ['./product-option-overview.component.scss']\n})\nexport class ProductOptionOverviewComponent implements OnInit {\n\n  @Input() public propertyId;\n  @Input() public title;\n\n  @Output() public navigate = new EventEmitter();\n\n  public optionSets;\n\n  constructor(\n    public optionService: OptionService,\n    public coreService: CoreService\n  ) { }\n\n  ngOnInit(): void {\n\n    this.optionService.getOptionSets(this.propertyId).subscribe(r => {\n      this.optionSets = r;\n    }, error => {\n      this.coreService.showAlert(error);\n    });\n\n  }\n\n  public getOptionSetImage(optionSet) {\n    if (optionSet.medias.length > 0) {\n      return optionSet.medias[0].url;\n    } else {\n      return \"https://storage.googleapis.com/kiba-fashion-api-bucket/misc/noimage.png\";\n    }\n  }\n\n  public goToShopWithOptionSet(optionSet) {\n    let filters = '?filters=';\n    let counter = 0;\n    for (let option of optionSet.options) {\n\n      filters += option.id;\n      if (counter < optionSet.options.length-1) {\n        filters += ',';\n      }\n      counter++;\n\n    }\n    this.navigate.emit('/shop/basics'+filters);\n  }\n\n}\n","<div class=\"r-h1 title\">{{ title }}</div>\n\n<ion-grid>\n    <ion-row>\n        <ion-col *ngFor=\"let opt of optionSets\" size=\"6\" sizeLg=\"2\">\n            <ion-card>\n                <ion-item lines=\"none\" style=\"--padding-start: 0px;\" (click)=\"goToShopWithOptionSet(opt)\">\n                    <div style=\"width: 40%; margin-right: 5px; height: 63px; background-size: cover; background-position: center;\" [ngStyle]=\"{ 'background-image': 'url('+getOptionSetImage(opt)+')' }\">\n                    </div>\n                    <ion-label class=\"ion-text-wrap\" style=\"height: 2em;\">\n                        <div class=\"r-h3\" style=\"padding: 0px 5px; line-height: 1em;\">{{ opt.name }}</div>\n                    </ion-label>\n                </ion-item>\n            </ion-card>\n        </ion-col>\n    </ion-row>\n</ion-grid>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { forkJoin } from 'rxjs';\nimport { tap } from 'rxjs/operators';\nimport { CoreService } from '../../../services/core.service';\nimport { OptionService } from '../../../services/option.service';\nimport { OutfitService } from '../../../services/outfit.service';\n\n@Component({\n  selector: \"rope-webshop-filters\",\n  templateUrl: \"./webshop-filters.component.html\",\n  styleUrls: [\"./webshop-filters.component.scss\"],\n})\nexport class WebshopFiltersComponent implements OnInit {\n  \n  @Input() public initialFilters;\n\n  @Output() public dismiss = new EventEmitter();\n\n  public filterIds: any[] = [];\n  public categories;\n  public brands;\n  public colors;\n  public sizes;\n  public selectedCategories = [];\n  public selectedBrands = [];\n  public selectedColors = [];\n  public selectedSizes = [];\n\n  public openCategory;\n  public openBrand;\n  public openColor;\n  public openSize;\n\n  public filterBlocks;\n\n  constructor(\n    public coreService: CoreService,\n    private optionService: OptionService,\n    private outfitService: OutfitService\n  ) {}\n\n  ngOnInit(): void {\n    this.loadFilters();\n  }\n\n  public apply() {\n    this.dismiss.emit(this.filterIds);\n  }\n\n  public init() {\n    \n  }\n\n  public loadFilters() {\n    this.filterIds = this.coreService.getFilters();\n\n    const categoryId = 5;\n    const brandId = 4;\n    const colorId = 6;\n\n    const obs1 = this.optionService.getOptions(categoryId).pipe(\n      tap((r) => {\n        this.categories = r;\n        for (const filterId of this.filterIds) {\n          const present = this.categories.find((c) => c.id === Number(filterId));\n          if (present !== undefined) {\n            this.selectedCategories.push(present);\n          }\n        }\n      })\n    );\n\n    const obs2 = this.optionService.getOptions(brandId).pipe(\n      tap((r) => {\n        this.brands = r;\n        for (const filterId of this.filterIds) {\n          const present = this.brands.find((c) => c.id === Number(filterId));\n          if (present !== undefined) {\n            this.selectedBrands.push(present);\n          }\n        }\n      })\n    );\n\n    const obs3 = this.optionService.getOptions(colorId).pipe(\n      tap((r) => {\n        this.colors = r;\n        for (const filterId of this.filterIds) {\n          const present = this.colors.find((c) => c.id === Number(filterId));\n          if (present !== undefined) {\n            this.selectedColors.push(present);\n          }\n        }\n      })\n    );\n\n    const obs4 = this.outfitService.getAvailableSizes().pipe(\n      tap((r) => {\n        this.sizes = r;\n        for (const filterId of this.filterIds) {\n          const present = this.sizes.find((c) => \"s\" + c.id === filterId);\n          if (present !== undefined) {\n            this.selectedSizes.push(present);\n          }\n        }\n      })\n    );\n\n    forkJoin([obs1, obs2, obs3, obs4]).subscribe((r) => {\n      this.filterBlocks = [\n        {\n          name: \"Categorieën\",\n          open: this.openCategory,\n          objects: this.categories,\n          setSelected: (obj) => (this.selectedCategories = [obj]),\n          getSelection: () => this.selectedCategories.length,\n          isSelected: ($e) => this.categoryIsSelected($e),\n          select: ($e) => this.selectCategory($e),\n          remove: (noInit?) => this.removeCategoryFilter(noInit),\n        },\n        {\n          name: \"Merken\",\n          open: this.openBrand,\n          objects: this.brands,\n          setSelected: (obj) => (this.selectedBrands = [obj]),\n          getSelection: () => this.selectedBrands.length,\n          isSelected: ($e) => this.brandIsSelected($e),\n          select: ($e) => this.selectBrand($e),\n          remove: (noInit?) => this.removeBrandFilter(noInit),\n        },\n        {\n          name: \"Kleuren\",\n          open: this.openColor,\n          objects: this.colors,\n          setSelected: (obj) => (this.selectedColors = [obj]),\n          getSelection: () => this.selectedColors.length,\n          isSelected: ($e) => this.colorIsSelected($e),\n          select: ($e) => this.selectColor($e),\n          remove: (noInit?) => this.removeColorFilter(noInit),\n        },\n        {\n          name: \"Maten\",\n          open: this.openSize,\n          objects: this.sizes,\n          setSelected: (obj) => (this.selectedSizes = [obj]),\n          getSelection: () => this.selectedSizes.length,\n          isSelected: ($e) => this.sizeIsSelected($e),\n          select: ($e) => this.selectSize($e),\n          remove: (noInit?) => this.removeSizeFilter(noInit),\n        },\n      ];\n\n      if (this.initialFilters) {\n        this.initialFilters.forEach((f) => {\n          this.selectFilter(f);\n        });\n      }\n    });\n  }\n\n  public selectFilter(filterId) {\n    if (this.filterBlocks) {\n      for (let filterBlock of this.filterBlocks) {\n        const obj = filterBlock.objects.find((c) =>\n          filterId.indexOf(\"s\") === -1\n            ? c.id === Number(filterId)\n            : \"s\" + c.id === filterId\n        );\n        if (obj) {\n          filterBlock.setSelected(obj);\n        }\n      }\n    }\n  }\n\n  public removeFilters() {\n    for (let filterBlock of this.filterBlocks) {\n      filterBlock.remove(true);\n    }\n    this.init();\n  }\n\n  public selectCategory(event: any, noInit?) {\n    const filterIds = this.coreService.getFilters();\n    for (const filterId of filterIds) {\n      const present = this.categories.find((c) => c.id === Number(filterId));\n      if (present !== undefined) {\n        this.coreService.removeFilter(present.id);\n      }\n    }\n\n    this.selectedCategories = [event];\n    this.coreService.addFilters(this.selectedCategories.map((i) => i.id));\n\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public countFilters(list) {\n    return 0;\n  }\n\n  public categoryIsSelected(cat) {\n    return this.selectedCategories.some((c) => c.id === cat.id);\n  }\n\n  public removeCategoryFilter(noInit?) {\n    this.coreService.removeFilters(this.selectedCategories.map((i) => i.id));\n    this.selectedCategories = [];\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public selectBrand(event: any, noInit?) {\n    const filterIds = this.coreService.getFilters();\n    for (const filterId of filterIds) {\n      const present = this.brands.find((c) => c.id === Number(filterId));\n      if (present !== undefined) {\n        this.coreService.removeFilter(present.id);\n      }\n    }\n\n    this.selectedBrands = [event];\n    this.coreService.addFilters(this.selectedBrands.map((i) => i.id));\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public brandIsSelected(cat) {\n    return this.selectedBrands.some((c) => c.id === cat.id);\n  }\n\n  public removeBrandFilter(noInit?) {\n    this.coreService.removeFilters(this.selectedBrands.map((i) => i.id));\n    this.selectedBrands = [];\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public selectColor(event: any, noInit?) {\n    const filterIds = this.coreService.getFilters();\n    for (const filterId of filterIds) {\n      const present = this.colors.find((c) => c.id === Number(filterId));\n      if (present !== undefined) {\n        this.coreService.removeFilter(present.id);\n      }\n    }\n\n    this.selectedColors = [event];\n    this.coreService.addFilters(this.selectedColors.map((i) => i.id));\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public colorIsSelected(cat) {\n    return this.selectedColors.some((c) => c.id === cat.id);\n  }\n\n  public removeColorFilter(noInit?) {\n    this.coreService.removeFilters(this.selectedColors.map((i) => i.id));\n    this.selectedColors = [];\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public selectSize(event: any, noInit?) {\n    const filterIds = this.coreService.getFilters();\n    for (const filterId of filterIds) {\n      const present = this.sizes.find((c) => \"s\" + c.id === filterId);\n      if (present !== undefined) {\n        this.coreService.removeFilter(present.id);\n      }\n    }\n\n    this.selectedSizes = [event];\n    this.coreService.addFilters(this.selectedSizes.map((i) => \"s\" + i.id));\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n  public sizeIsSelected(cat) {\n    return this.selectedSizes.some((c) => c.id === cat.id);\n  }\n\n  public removeSizeFilter(noInit?) {\n    this.coreService.removeFilters(this.selectedSizes.map((i) => \"s\" + i.id));\n    this.selectedSizes = [];\n    if (!noInit) {\n      this.init();\n    }\n  }\n\n}\n","<div style=\"padding: 10px;\">\n\n    <div>\n\n        <div *ngIf=\"!filterBlocks\" style=\"width: 100%; height: 232px; display: flex; justify-content: center; align-items: center;\">\n            <ion-spinner name=\"crescent\"></ion-spinner>\n        </div>\n\n        <div *ngFor=\"let filterBlock of filterBlocks\">\n            <ion-item lines=\"none\" color=\"light\" (click)=\"filterBlock.open = !filterBlock.open\" class=\"filter-title-block\">\n                <ion-label class=\"filter-title\">\n                    <div>\n                        <div class=\"r-h2\">{{ filterBlock.name }}</div>\n                        <p class=\"r-h3\">{{ filterBlock.objects.length }} opties beschikbaar</p>\n                    </div>\n                    <ion-badge [color]=\"filterBlock.getSelection() > 0 ? 'warning' : 'secondary'\" style=\"margin-left: 5px; font-weight: 500; padding: 4px;\" [ngStyle]=\"{ 'color': filterBlock.getSelection() > 0 ? 'black' : 'white' }\">{{ filterBlock.getSelection() }}</ion-badge>\n                </ion-label>\n                <ion-icon slot=\"end\" [name]=\"filterBlock.open ? 'arrow-down-outline' : 'arrow-up-outline'\"></ion-icon>\n            </ion-item>\n\n            <div *ngIf=\"filterBlock.open\" style=\"margin-top: 10px; margin-bottom: 35px;\">\n                <ion-grid>\n                    <ion-row>\n                        <ion-col size=\"6\" *ngFor=\"let obj of filterBlock.objects\">\n                            <div class=\"option\" [ngClass]=\"filterBlock.isSelected(obj) ? 'category-selected' : ''\">\n                                <div class=\"option-name r-h3\" style=\"width: 100%;\" (click)=\"!filterBlock.isSelected(obj) ? filterBlock.select(obj) : undefined\">{{ obj.name }}</div>\n                                <ion-icon name=\"close\" color=\"light\" (click)=\"filterBlock.remove(false)\" style=\"cursor: pointer;\"></ion-icon>\n                            </div>\n                        </ion-col>\n                    </ion-row>\n                </ion-grid>\n            </div>\n        </div>\n\n    </div>\n\n</div>\n\n<div class=\"sticky-footer ion-text-center r-flex r-flex-h-space-between r-flex-v-center\" style=\"margin-top: 15px;\">\n    <ion-button color=\"light\" size=\"small\" [disabled]=\"!filterIds || filterIds.length === 0\" (click)=\"removeFilters()\">\n        <ion-icon name=\"trash\" slot=\"start\" color=\"danger\"></ion-icon>\n        <div style=\"font-size: 0.9rem; color: black;\">Verwijder filters</div>\n    </ion-button>\n    <ion-button color=\"light\" size=\"small\" [disabled]=\"!filterIds || filterIds.length === 0\" (click)=\"apply()\">\n        <ion-icon name=\"filter-outline\" slot=\"start\" color=\"secondary\"></ion-icon>\n        <div style=\"font-size: 0.9rem;\">Toepassen</div>\n    </ion-button>\n</div>","import { Component, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'rope-customer-membership',\n  templateUrl: './customer-membership.component.html',\n  styleUrls: ['./customer-membership.component.scss']\n})\nexport class CustomerMembershipComponent implements OnInit {\n\n  constructor() { }\n\n  ngOnInit(): void {\n  }\n\n}\n","","import { formatDate } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { AlertController, ToastController, ModalController, LoadingController } from '@ionic/angular';\nimport { Subscription } from 'rxjs';\nimport { AppointmentService } from '../../../services/appointment.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { BranchService } from '../../../services/branch.service';\nimport { CoreService } from '../../../services/core.service';\nimport { LogService } from '../../../services/log.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\nimport { CalendarComponent, CalendarMode } from 'ionic2-calendar';\nimport { AlertButton } from \"@ionic/core\";\nimport { DateTime } from 'luxon';\n\n@Component({\n  selector: \"rope-appointment-agenda\",\n  templateUrl: \"./appointment-agenda.component.html\",\n  styleUrls: [\"./appointment-agenda.component.scss\"],\n})\nexport class AppointmentAgendaComponent implements OnInit {\n  \n  @Input() public scrollStarted = false;\n  @Input() public image;\n  @Input() public type;\n\n  @Input() public title;\n  @Input() public text;\n\n  @Output() public onCreateAppointment = new EventEmitter();\n\n  @ViewChild(CalendarComponent) myCal: CalendarComponent;\n\n  public minDate = new Date().toISOString();\n  public startDate;\n  public endDate;\n\n  public showTimes = false;\n\n  public eventObjects = [];\n  public eventSource = [];\n  public viewTitle;\n\n  public num0Showing = false;\n  public num1Showing = false;\n  public num2Showing = false;\n  public num3Showing = false;\n\n  public branches;\n  public selectedBranch;\n\n  public calendar = {\n    mode: \"week\" as CalendarMode,\n    currentDate: new Date(),\n    formatHourColumn: \"HH:mm\",\n    noEventsLabel: \"Beschikbaar\",\n    lockSwipes: false,\n    lockSwipeToPrev: false,\n    startHour: 8,\n    endHour: 20,\n    step: 20,\n  };\n  public calendarShow = true;\n  public calendarLoading = false;\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  constructor(\n    private alertCtrl: AlertController,\n    private appointmentService: AppointmentService,\n    private toastController: ToastController,\n    private modalController: ModalController,\n    private loadingController: LoadingController,\n    public screensizeService: ScreensizeService,\n    private authService: AuthService,\n    private branchService: BranchService,\n    public coreService: CoreService,\n    public logger: LogService\n  ) {}\n\n  ngOnInit() {\n\n    this.screensizeObserver = this.screensizeService\n      .isDesktopView()\n      .subscribe((isDesktop) => {\n        this.isDesktop = isDesktop;\n      });\n\n    this.branchService.getAll().subscribe((branches) => {\n      this.branches = branches.filter(\n        (br) => !br.is_online && br.full_name !== \"Geldrop\"\n      );\n      if (this.branches.length === 1) {\n        this.selectedBranch = this.branches[0];\n      }\n    });\n\n  }\n\n  public async selectBranch(event) {\n    this.calendarLoading = true;\n    this.calendarShow = false;\n    await new Promise((resolve) => setTimeout(resolve, 500));\n\n    const firstShow = !this.selectedBranch;\n    this.selectedBranch = event.detail.value;\n\n    //Check earliest starting hour\n    let lowestHour = undefined;\n    let highestHour = undefined;\n    for (let oh of this.selectedBranch[\"branch_opening_hours\"]) {\n      if (oh.open) {\n        let hLow =\n          Number(oh.open.split(\":\")[0]) +\n          Number(oh.open.split(\":\")[1] > 0 ? 1 : 0);\n        lowestHour = !lowestHour || hLow < lowestHour ? hLow : lowestHour;\n\n        let hHigh = Number(oh.closed.split(\":\")[0]);\n        highestHour = !highestHour || hHigh > highestHour ? hHigh : highestHour;\n      }\n    }\n    this.calendar.startHour = lowestHour;\n    this.calendar.endHour = highestHour;\n    this.calendarShow = true;\n\n    if (!firstShow) {\n      this.loadEvents();\n    }\n  }\n\n  onIntersection(e, num) {\n    if (num === 0) {\n      this.num0Showing = e.visible;\n    } else if (num === 1) {\n      this.num1Showing = e.visible;\n    } else if (num === 2) {\n      this.num2Showing = e.visible;\n    } else if (num === 3) {\n      this.num3Showing = e.visible;\n    }\n\n    if (\n      this.scrollStarted &&\n      !this.num0Showing &&\n      !this.num1Showing &&\n      !this.num2Showing &&\n      !this.num3Showing\n    ) {\n      this.showTimes = true;\n    } else {\n      this.showTimes = false;\n    }\n  }\n\n  public getDay(index) {\n    const d = new Date(this.startDate);\n    var day = d.getDay(),\n      diff = d.getDate() - day + (day == 0 ? -6 + index : 1 + index); // adjust when day is sunday\n    const dd = new Date(d.setDate(diff));\n    return dd.getDate();\n  }\n\n  public onRangeChanged(ev) {\n    this.startDate = ev.startTime;\n    this.endDate = ev.endTime;\n\n    if (this.calendar.mode === \"week\") {\n      const prevSlideDate = DateTime.fromJSDate(ev.startTime).minus({ days: 7 }).weekNumber;\n      const current = DateTime.now().weekNumber;\n      if (prevSlideDate < current) {\n        this.calendar.lockSwipeToPrev = true;\n      } else {\n        this.calendar.lockSwipeToPrev = false;\n      }\n    }\n    if (this.calendar.mode === \"day\") {\n      const prevSlideDate = DateTime.fromJSDate(ev.startTime).minus({ days: 1 }).weekday;\n      const current = DateTime.now().weekday;\n      if (prevSlideDate < current) {\n        this.calendar.lockSwipeToPrev = true;\n      } else {\n        this.calendar.lockSwipeToPrev = false;\n      }\n    }\n\n    if (this.selectedBranch) {\n      this.loadEvents();\n    }\n  }\n\n  public checkBranchOpen(timeStart, timeEnd) {\n    const dateToCheckStart = new Date(timeStart);\n    let day = dateToCheckStart.getDay();\n\n    const dateToCheckEnd = new Date(timeEnd);\n\n    const resp1 = this.branchService.checkOpen(\n      this.selectedBranch,\n      day,\n      dateToCheckStart.getHours(),\n      dateToCheckStart.getMinutes()\n    );\n\n    const resp2 = this.branchService.checkOpen(\n      this.selectedBranch,\n      day,\n      dateToCheckEnd.getHours(),\n      dateToCheckEnd.getMinutes()\n    );\n\n    return resp1.shopIsOpen && resp2.shopIsOpen;\n  }\n\n  public async loadEvents() {\n    let maxPerTimeslot = undefined;\n\n    this.appointmentService\n      .getByTypeAndBranch(\n        this.type,\n        this.selectedBranch.id,\n        this.startDate.getTime(),\n        this.endDate.getTime()\n      )\n      .subscribe((r) => {\n        const events = [];\n        for (let rr of r) {\n          if (!maxPerTimeslot) {\n            maxPerTimeslot = rr.appointment_type.max_per_timeslot;\n          }\n\n          events.push({\n            title: \"Bezet\",\n            startTime: new Date(rr.timestamp_start),\n            endTime: new Date(rr.timestamp_end),\n            allDay: false,\n          });\n        }\n\n        const masterEvents = [];\n\n        const startingDate = DateTime.fromJSDate(this.calendar.currentDate)\n          .startOf('week')\n          .set({ hour: this.calendar.startHour });\n        const endingDate = DateTime.fromJSDate(this.calendar.currentDate)\n          .endOf('week')\n          .set({ hour: this.calendar.endHour });\n\n        let d = startingDate;\n        while (d < endingDate) {\n          //Check number of events in this block\n          const startBlock = d.valueOf();\n          d = d.plus({ minutes: this.calendar.step });\n          const endBlock = d.valueOf();\n\n          const branchOpen = this.checkBranchOpen(startBlock, endBlock);\n          if (!branchOpen) {\n            masterEvents.push({\n              title: \"X\",\n              startTime: new Date(startBlock.valueOf()),\n              endTime: new Date(endBlock.valueOf()),\n              allDay: false,\n              type: \"closed\",\n            });\n            continue;\n          }\n\n          const eventsInBlock = events.filter((ev) => {\n            if (\n              ev.startTime.getTime() < endBlock &&\n              ev.endTime.getTime() > startBlock\n            ) {\n              return true;\n            }\n          });\n\n          const percentageFull = eventsInBlock.length / maxPerTimeslot;\n\n          if (eventsInBlock.length >= maxPerTimeslot) {\n            masterEvents.push({\n              title: \"Vol\",\n              startTime: new Date(startBlock.valueOf()),\n              endTime: new Date(endBlock.valueOf()),\n              allDay: false,\n              type: \"blocked\",\n            });\n          } else {\n            masterEvents.push({\n              title:\n                percentageFull >= 0.5\n                  ? \"Nog \" + (maxPerTimeslot - eventsInBlock.length) + \" plek\"\n                  : \"Vrij\",\n              startTime: new Date(startBlock.valueOf()),\n              endTime: new Date(endBlock.valueOf()),\n              allDay: false,\n              type: percentageFull >= 0.5 ? \"almost-full\" : \"available\",\n            });\n          }\n        }\n        this.eventSource = masterEvents;\n        this.eventObjects = masterEvents;\n\n        setTimeout(() => {\n          this.calendar.lockSwipes = true;\n          this.calendarLoading = false;\n        }, 500);\n      });\n  }\n\n  markDisabled = (date: Date) => {\n    var current = new Date();\n    return date < current;\n  };\n\n  // Change current month/week/day\n  next() {\n    this.calendarLoading = true;\n    this.calendar.currentDate = new Date(\n      this.calendar.currentDate.getTime() + 1000 * 60 * 60 * 24 * 7\n    );\n  }\n\n  back() {\n    if (!this.calendar.lockSwipeToPrev) {\n      this.calendarLoading = true;\n      this.calendar.currentDate = new Date(\n        this.calendar.currentDate.getTime() - 1000 * 60 * 60 * 24 * 7\n      );\n    }\n  }\n\n  // Change between month/week/day\n  changeMode(mode) {\n    this.calendar.mode = mode;\n    if (mode === \"day\") {\n      this.calendar.currentDate = new Date();\n    }\n\n    this.onRangeChanged({\n      startTime: new Date(),\n      endTime: new Date(),\n    });\n  }\n\n  // Focus today\n  today() {\n    this.calendar.currentDate = new Date();\n  }\n\n  // Selected date reange and hence title changed\n  onViewTitleChanged(title) {\n    this.viewTitle = title;\n  }\n\n  public getEventStatus(status) {\n    if (status === \"PENDING\") {\n      return \"In afwachting\";\n    } else if (status === \"REJECTED\") {\n      return \"Helaas niet mogelijk, probeer een andere datum.\";\n    } else if (status === \"ACCEPTED\") {\n      return \"Bevestigd\";\n    }\n  }\n\n  public async onEventSelected(event) {\n    const eventObj = this.eventObjects.find(\n      (e) => e.startTime.getTime() === event.startTime.getTime()\n    );\n\n    if (eventObj.type !== \"blocked\") {\n      return;\n    }\n\n    const currentCustomer = this.authService.getCurrentUser();\n\n    if (\n      eventObj.customer &&\n      currentCustomer &&\n      eventObj.customer.id === currentCustomer.id\n    ) {\n      const buttons: AlertButton[] = [\n        {\n          text: \"Oké\",\n          role: \"cancel\",\n        },\n      ];\n\n      const cancelPossible =\n        eventObj.status !== \"REJECTED\" &&\n        eventObj.status !== \"CANCELLED\" &&\n        event.startTime.getTime() > new Date().getTime();\n      if (cancelPossible) {\n        buttons.push({\n          text: \"Annuleer boeking\",\n          handler: () => {\n            this.appointmentService.cancel(eventObj).subscribe((r) => {\n              this.loadEvents();\n            });\n          },\n        });\n      }\n\n      const alert = await this.alertCtrl.create({\n        header: event.title,\n        cssClass: \"custom-alert\",\n        message:\n          \"Je hebt deze boeking bij ons aangevraagd.<br><br>De huidige status is: <br><strong>\" +\n          this.getEventStatus(eventObj.status) +\n          \"</strong>\" +\n          (cancelPossible\n            ? \"<br><br>Je kunt hieronder je boeking nog altijd annuleren.\"\n            : \"\"),\n        buttons: buttons,\n      });\n      alert.present();\n    } else {\n      let start = formatDate(event.startTime, \"medium\", \"nl-NL\");\n      let end = formatDate(event.endTime, \"medium\", \"nl-NL\");\n\n      const alert = await this.alertCtrl.create({\n        header: event.title,\n        cssClass: \"custom-alert\",\n        message:\n          \"Op de volgende tijden zijn er helaas geen plaatsen meer beschikbaar.<br><br>Van: \" +\n          start +\n          \"<br>Tot: \" +\n          end,\n        buttons: [\n          {\n            text: \"Oké\",\n            role: \"cancel\",\n          },\n        ],\n      });\n      alert.present();\n    }\n  }\n\n  public async onTimeSelected(ev) {\n    const startTime = ev.selectedTime;\n    const endTime =\n      new Date(ev.selectedTime).getTime() +\n      Number(this.calendar.step) * 60 * 1000;\n\n    if (!this.checkBranchOpen(startTime, endTime)) {\n      return;\n    }\n\n    let selected = new Date(ev.selectedTime);\n    const currentDate = new Date();\n\n    if (\n      this.eventSource.find(\n        (e) =>\n          e.startTime.getTime() === selected.getTime() && e.type === \"blocked\"\n      )\n    ) {\n      return;\n    }\n\n    if (selected <= currentDate) {\n      const toast = await this.toastController.create({\n        message:\n          \"Deze datum is al geweest, dus hiervoor kun je geen afspraak meer inplannen.\",\n        duration: 10000,\n        buttons: [\n          {\n            text: \"Oké\",\n            role: \"cancel\",\n          },\n        ],\n      });\n      await toast.present();\n    } else {\n      // Check when next event is\n      const filterList = this.eventSource\n        .filter((e) => e.startTime > selected && e.type === \"blocked\")\n        .sort((a, b) => a.startTime - b.startTime);\n\n      let minutesDiff;\n      if (filterList && filterList[0]) {\n        minutesDiff = Math.round(\n          (filterList[0].startTime.getTime() - selected.getTime()) / 1000 / 60\n        );\n      }\n\n      this.onCreateAppointment.emit({\n        startDate: selected,\n        minutesDiff: minutesDiff,\n        branch: this.selectedBranch,\n      });\n\n    }\n  }\n}\n","<div color=\"tertiary\" *ngIf=\"showTimes && selectedBranch && !isDesktop\" style=\"position: fixed; background-color: var(--ion-color-tertiary); z-index: 999999;\">\n\n  <div class=\"container-times\">\n    <table class=\"table table-bordered table-fixed weekview-header\">\n      <thead>\n        <tr>\n          <th class=\"calendar-hour-column\" style=\"width: 70px !important;\"></th>\n          <th class=\"weekview-header text-center\"> ma {{ getDay(0) }} </th>\n          <th class=\"weekview-header text-center\"> di {{ getDay(1) }} </th>\n          <th class=\"weekview-header text-center\"> wo {{ getDay(2) }} </th>\n          <th class=\"weekview-header text-center\"> do {{ getDay(3) }} </th>\n          <th class=\"weekview-header text-center\"> vr {{ getDay(4) }} </th>\n          <th class=\"weekview-header text-center\"> za {{ getDay(5) }} </th>\n          <th class=\"weekview-header text-center\"> zo {{ getDay(6) }} </th>\n        </tr>\n      </thead>\n    </table>\n  </div>\n\n</div>\n\n<div class=\"blocks\">\n\n    <div inViewport [inViewportOptions]=\"{ threshold: [0] }\" (inViewportAction)=\"onIntersection($event, 0)\"></div>\n    <div></div>\n\n    <ion-grid>\n\n      <ion-row>\n\n        <ion-col size=\"12\" *ngIf=\"!isDesktop\">\n          <div inViewport [inViewportOptions]=\"{ threshold: [0] }\" (inViewportAction)=\"onIntersection($event, 1)\"></div>\n        </ion-col>\n\n        <ion-col size=\"12\" size-lg=\"6\">\n          <div class=\"block\" style=\"padding-top: 10px; padding-bottom: 10px;\">\n            <div *ngIf=\"image\" class=\"ps-appointment-bg default-image\" [ngStyle]=\"{ 'background-image': 'url('+image+')' }\"></div>\n            <ion-card-header *ngIf=\"title\">\n              <ion-card-title>{{ title }}</ion-card-title>\n            </ion-card-header>\n            <ion-card-content style=\"padding-left: 16px; padding-right: 16px;\" *ngIf=\"text\">\n              <div [innerHTML]=\"text\"></div>\n            </ion-card-content>\n          </div>\n        </ion-col>\n\n        <ion-col size=\"12\" *ngIf=\"!isDesktop\">\n          <div inViewport [inViewportOptions]=\"{ threshold: [0] }\" (inViewportAction)=\"onIntersection($event, 2)\"></div>\n          <div></div>\n        </ion-col>\n\n        <ion-col size=\"12\" size-lg=\"6\">\n\n          <div class=\"block\" style=\"padding-top: 10px; padding-bottom: 10px;\">\n          \n            <ion-card-header>\n              <ion-card-title>Afspraak maken</ion-card-title>\n            </ion-card-header>\n          \n            <ion-grid>\n              <ion-row class=\"ion-align-items-center\">\n          \n                <ion-col size=\"12\">\n          \n                  <ion-item *ngIf=\"branches && branches.length > 0\">\n                    <ion-label position=\"stacked\">Kies eerst een filiaal</ion-label>\n                    <ion-select (ionChange)=\"selectBranch($event)\">\n                      <ion-select-option *ngFor=\"let branch of branches\" [value]=\"branch\">{{ branch.full_name  }}\n                      </ion-select-option>\n                    </ion-select>\n                  </ion-item>\n          \n                </ion-col>\n          \n                <ng-container>\n\n                  <ion-col size=\"3\" style=\"text-align: left;\">\n                    <ion-button fill=\"clear\" (click)=\"back()\" [disabled]=\"!selectedBranch\" color=\"secondary\" [disabled]=\"calendar.lockSwipeToPrev\">\n                      <ion-icon name=\"arrow-back-circle-outline\" slot=\"icon-only\"></ion-icon>\n                    </ion-button>\n                  </ion-col>\n            \n                  <ion-col style=\"text-align: center;\" class=\"cal-title\" [ngStyle]=\"{ 'opacity': !selectedBranch ? '0.4' : '1.0' }\">\n                    {{ viewTitle }}\n                  </ion-col>\n            \n                  <ion-col size=\"3\" style=\"text-align: right;\">\n                    <ion-button fill=\"clear\" (click)=\"next()\" [disabled]=\"!selectedBranch\" color=\"secondary\">\n                      <ion-icon name=\"arrow-forward-circle-outline\" slot=\"icon-only\"></ion-icon>\n                    </ion-button>\n                  </ion-col>\n\n                </ng-container>\n\n              </ion-row>\n            </ion-grid>\n          \n            <div inViewport [inViewportOptions]=\"{ threshold: [0] }\" (inViewportAction)=\"onIntersection($event, 3)\"></div>\n          \n            <div style=\"position: relative;\">\n\n              <calendar *ngIf=\"calendarShow\" class=\"custom-calendar\" [ngClass]=\"calendarLoading || !selectedBranch ? 'calendar-loading' : ''\" [eventSource]=\"eventSource\" [lockSwipes]=\"calendar.lockSwipes\"\n                [calendarMode]=\"calendar.mode\" [currentDate]=\"calendar.currentDate\" [formatHourColumn]=\"calendar.formatHourColumn\"\n                (onEventSelected)=\"onEventSelected($event)\" (onTitleChanged)=\"onViewTitleChanged($event)\"\n                (onTimeSelected)=\"onTimeSelected($event)\" (onRangeChanged)=\"onRangeChanged($event)\"\n                [noEventsLabel]=\"calendar.noEventsLabel\" [timeInterval]=\"20\"\n                queryMode=\"remote\" [autoSelect]=\"false\" [startHour]=\"calendar.startHour\" [endHour]=\"calendar.endHour\" [startingDayWeek]=\"1\"\n                [step]=\"calendar.step\" [weekviewNormalEventTemplate]=\"eventTemplate\">\n              </calendar>\n\n              <div style=\"height: 300px; width: 100%; background-color: #f1f1f1; border-radius: 5px; display: flex; justify-content: center; align-items: center;\" *ngIf=\"!calendarShow\">\n              </div>\n              \n              <div *ngIf=\"calendarLoading\" style=\"position: absolute; top: 50px; left: 50%; transform: translateX(-50%);\">\n                <ion-spinner name=\"crescent\"></ion-spinner>\n              </div>\n\n            </div>\n\n          </div>\n\n        </ion-col>\n\n      </ion-row>\n\n    </ion-grid>\n\n</div>\n\n<ng-template #eventTemplate let-displayEvent=\"displayEvent\">\n    <div class=\"calendar-event-inner inner-event\" [ngClass]=\"displayEvent.event.type\">\n      {{ displayEvent.event.title }}\n    </div>\n</ng-template>","import { Branch } from './branch';\nimport { Employee } from './employee';\nimport { User } from './user';\n\nexport class Appointment {\n    id: number;\n    timestamp_start: number;\n    timestamp_end: number;\n    branch_id: number;\n    customer_name: string;\n    customer_email: string;\n    customer_telephone_number: number;\n    status: string;\n    note: string;\n\n    branch: Branch;\n    employee: Employee;\n    appointment_type: any;\n    customer: User;\n}\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { FormGroup, FormBuilder, Validators } from '@angular/forms';\nimport { NavParams, AlertController } from '@ionic/angular';\nimport { Appointment } from '../../../models/appointment';\nimport { Branch } from '../../../models/branch';\nimport { Outfit } from '../../../models/outfit';\nimport { User } from '../../../models/user';\nimport { AppointmentService } from '../../../services/appointment.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { CoreService } from '../../../services/core.service';\nimport { OutfitService } from '../../../services/outfit.service';\nimport { DateTime } from 'luxon';\n\n@Component({\n  selector: \"rope-create-appointment\",\n  templateUrl: \"./create-appointment.component.html\",\n  styleUrls: [\"./create-appointment.component.scss\"],\n})\nexport class CreateAppointmentComponent implements OnInit {\n  \n  @Input() public showProductChoices = false;\n  \n  @Input() public appointmentTypeIdentifier;\n  @Input() public startDate: Date;\n  @Input() public minutesDiff;\n  @Input() public branch;\n\n  @Output() public onDismiss = new EventEmitter();\n\n  public appointmentType;\n\n  public generalForm: FormGroup = undefined;\n  public timesForm: FormGroup = undefined;\n  public preferencesForm: FormGroup = undefined;\n\n  public showChoices = false;\n  public outfitArrays: Array<Outfit[]> = [];\n\n  public timeBlocks;\n\n  constructor(\n    private formBuilder: FormBuilder,\n    private outfitService: OutfitService,\n    private appointmentService: AppointmentService,\n    private authService: AuthService,\n    private coreService: CoreService,\n    private alertController: AlertController\n  ) {}\n\n  async ngOnInit() {\n\n    this.appointmentType = (await this.appointmentService\n      .getTypes(this.appointmentTypeIdentifier).toPromise())[0]\n    \n    this.timeBlocks = [];\n    let i = 1;\n    while (i <= 3) {\n      this.timeBlocks.push(new String(i * this.appointmentType.timeslot_duration));\n      i++;\n    }\n\n    this.generalForm = this.formBuilder.group({\n      name: [\"\", Validators.required],\n      email: [\"\", Validators.required],\n      telephone_number: [\"\"],\n      note: [\"\"],\n    });\n\n    this.timesForm = this.formBuilder.group({\n      time: [this.timeBlocks[0]],\n    });\n\n    let offset = 0;\n    while (offset <= 12) {\n      this.outfitService.getLatest(offset).subscribe((r) => {\n        this.outfitArrays.push(r);\n      });\n      offset = offset + 4;\n    }\n\n    if (this.authService.isAuthenticated()) {\n      const u = this.authService.getCurrentUser();\n      this.generalForm.get(\"name\").setValue(u.first_name + \" \" + u.last_name);\n      this.generalForm.get(\"email\").setValue(u.username);\n      this.generalForm.get(\"telephone_number\").setValue(u.telephone_number);\n    }\n  }\n\n  public dismiss(params?: any) {\n    this.onDismiss.emit(params ? params : undefined);\n  }\n\n  public checkForms() {\n    const generalValid =\n      (this.generalForm && this.generalForm.valid) || !this.generalForm;\n    const timesValid =\n      (this.timesForm && this.timesForm.valid) || !this.timesForm;\n    const outfitsValid = this.checkOutfitChoices();\n\n    return !generalValid || !timesValid || !outfitsValid;\n  }\n\n  public selectOutfit(outfit, outfits: Outfit[]) {\n    outfits.forEach((o) => (o[\"dummy_selected\"] = undefined));\n    outfit[\"dummy_selected\"] = true;\n  }\n\n  public getOpacity(outfit, outfits: Outfit[]) {\n    if (outfits.findIndex((o) => o[\"dummy_selected\"] === true) !== -1) {\n      return outfit[\"dummy_selected\"] ? \"1.0\" : \"0.3\";\n    } else {\n      return \"1.0\";\n    }\n  }\n\n  public checkOutfitChoice(oList) {\n    const allMatch =\n      oList.findIndex((o) => o[\"dummy_selected\"] === true) !== -1;\n    return allMatch;\n  }\n\n  public checkOutfitChoices() {\n    if (!this.showChoices) {\n      return true;\n    }\n\n    const allMatch =\n      this.outfitArrays.filter(\n        (oList) =>\n          oList.findIndex((o) => o[\"dummy_selected\"] === true) !== -1 ||\n          oList.length === 0\n      ).length === this.outfitArrays.length;\n    return allMatch;\n  }\n\n  public createAppointment() {\n    const a = new Appointment();\n    a.timestamp_start = this.startDate.getTime();\n    a.timestamp_end = DateTime.fromJSDate(this.startDate)\n      .plus({ minutes: this.timesForm.get(\"time\").value })\n      .toJSDate()\n      .getTime();\n    a.customer_name = this.generalForm.get(\"name\").value;\n    a.customer_email = this.generalForm.get(\"email\").value;\n    a.customer_telephone_number = this.generalForm.get(\n      \"telephone_number\"\n    ).value;\n    a.status = \"PENDING\";\n\n    let note = this.generalForm.get(\"note\").value + \"%^STORM-\";\n\n    if (this.showChoices) {\n      for (const outfitList of this.outfitArrays) {\n        note +=\n          outfitList.find((o) => o[\"dummy_selected\"] === true).main_media_url +\n          \"%^\";\n      }\n    }\n    a.note = note;\n\n    const type = {\n      id: this.appointmentType.id,\n    };\n    a.appointment_type = type;\n\n    const branch = new Branch();\n    branch.id = this.branch.id;\n    a.branch = branch;\n\n    if (this.authService.isAuthenticated()) {\n      const customer = new User();\n      customer.id = this.authService.getCurrentUser().id;\n      a.customer = customer;\n    }\n\n    this.appointmentService.post(a).subscribe(\n      async (r) => {\n        this.dismiss({ status: 1 });\n        const alert = await this.alertController.create({\n          header: \"Afspraakverzoek ingediend\",\n          subHeader: \"Bedankt daarvoor\",\n          cssClass: \"custom-alert\",\n          message:\n            \"Je krijgt van ons automatisch een e-mail als we hebben gereageerd op je verzoek. Dit is meestal binnen een aantal uur.\",\n          buttons: [\n            {\n              role: \"cancel\",\n              text: \"Oké\",\n            },\n          ],\n        });\n\n        await alert.present();\n      },\n      (error) => {\n        this.coreService.showAlert(error);\n      }\n    );\n  }\n}\n","<div class=\"blocks\">\n\n    <div class=\"block\">\n\n      <ion-card-header>\n        <ion-card-title>Algemene gegevens</ion-card-title>\n        <ion-card-subtitle>Zo kunnen we je altijd bereiken</ion-card-subtitle>\n      </ion-card-header>\n\n      <ion-card-content class=\"small-note ion-text-center\">\n        Je maakt een afspraak welke begint op <b>{{ startDate | date:'mediumDate' }} om\n          {{ startDate | date:'shortTime' }}</b><br>\n          De afspraak is voor het filiaal <b>{{ branch.full_name }}</b>.\n      </ion-card-content>\n\n      <form novalidate [formGroup]=\"generalForm\" *ngIf=\"generalForm\">\n        <ion-item>\n          <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Naam</ion-label>\n          <ion-input type=\"text\" formControlName=\"name\" autocapitalize=\"true\"></ion-input>\n        </ion-item>\n        <ion-item>\n          <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">E-mailadres</ion-label>\n          <ion-input type=\"email\" formControlName=\"email\"></ion-input>\n        </ion-item>\n        <ion-item>\n          <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Telefoonnummer</ion-label>\n          <ion-input type=\"tel\" formControlName=\"telephone_number\"></ion-input>\n        </ion-item>\n        <ion-item>\n          <ion-label color=\"secondary\" class=\"force-stacked-label\" position=\"stacked\">Opmerkingen</ion-label>\n          <ion-textarea formControlName=\"note\" rows=\"4\" placeholder=\"Het plaatsen van een opmerking is niet verplicht.\">\n          </ion-textarea>\n        </ion-item>\n\n      </form>\n      <br />\n\n    </div>\n\n    <div class=\"block\">\n      <ion-card-header>\n        <ion-card-title>Tijdslot</ion-card-title>\n        <ion-card-subtitle>Hoe lang wil je winkelen? <ng-container\n            *ngIf=\"minutesDiff && minutesDiff < 60\"><br><br><i>Niet alle tijden zijn beschikbaar, omdat deze afspraak\n              anders overlapt met een andere afspraak.</i></ng-container>\n        </ion-card-subtitle>\n      </ion-card-header>\n      <form novalidate [formGroup]=\"timesForm\" *ngIf=\"timesForm\">\n        <ion-radio-group name=\"time\" formControlName=\"time\">\n          <ion-item>\n            <ion-label color=\"secondary\">20 minuten</ion-label>\n            <ion-radio slot=\"start\" value=\"20\"></ion-radio>\n          </ion-item>\n          <ion-item>\n            <ion-label color=\"secondary\">40 minuten</ion-label>\n            <ion-radio slot=\"start\" value=\"40\" [disabled]=\"minutesDiff && minutesDiff < 40\"></ion-radio>\n          </ion-item>\n          <ion-item>\n            <ion-label color=\"secondary\">60 minuten</ion-label>\n            <ion-radio slot=\"start\" value=\"60\" [disabled]=\"minutesDiff && minutesDiff < 60\"></ion-radio>\n          </ion-item>\n        </ion-radio-group>\n      </form>\n    </div>\n\n    <div class=\"block\" *ngIf=\"showProductChoices\">\n      <ion-card-header>\n        <ion-card-title>Keuzes</ion-card-title>\n      </ion-card-header>\n      <ion-card-content>\n        <p class=\"r-h3\">Je kunt alvast doorgeven wat je kledingsmaak is zodat we al wat kunnen voorbereiden voor je. Dit is optioneel en niet verplicht! Het is ook prima om gewoon zelf rond te komen kijken.</p>\n        <ion-item>\n          <ion-label color=\"secondary\">\n            <div class=\"r-h3 ion-text-wrap\">\n              Wil je alvast je kledingsmaak doorgeven?\n            </div>\n          </ion-label>\n          <ion-checkbox slot=\"end\" [(ngModel)]=\"showChoices\"></ion-checkbox>\n        </ion-item>\n      </ion-card-content>\n    </div>\n\n    <ng-container *ngIf=\"showChoices\">\n      <div *ngFor=\"let outfits of outfitArrays; index as i\">\n\n        <div class=\"block\" *ngIf=\"outfits.length > 0\">\n          <ion-card-header>\n            <ion-card-title class=\"card-header-with-icon\">\n              Kleding keuze #{{ i+1 }}\n              <ion-icon [ngStyle]=\"{ 'opacity': checkOutfitChoice(outfits) ? '1.0' : '0.0' }\" name=\"checkmark\"\n                color=\"success\"></ion-icon>\n            </ion-card-title>\n            <ion-card-subtitle>Welke outfit heeft je voorkeur?<br> Klik op de foto om de keuze te maken\n            </ion-card-subtitle>\n          </ion-card-header>\n          <div class=\"choice-container\">\n            <div *ngFor=\"let outfit of outfits\"\n              [ngStyle]=\"{'background-image': 'url(' + outfit.main_media_url + ')', 'opacity': getOpacity(outfit, outfits)}\"\n              (click)=\"selectOutfit(outfit, outfits)\"></div>\n          </div>\n        </div>\n\n      </div>\n    </ng-container>\n\n  </div>\n\n  <div class=\"block ion-text-center\" style=\"margin-bottom: 20px;\">\n    <ion-button [disabled]=\"checkForms()\" color=\"tertiary\" (click)=\"createAppointment()\" class=\"button-margin\">\n      <div class=\"r-button-text\">\n        Afspraak aanvragen\n      </div>\n      <ion-icon slot=\"end\" name=\"arrow-forward\"></ion-icon>\n    </ion-button>\n  </div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n@Component({\n  selector: 'rope-page-menu',\n  templateUrl: './page-menu.component.html',\n  styleUrls: ['./page-menu.component.scss']\n})\nexport class PageMenuComponent implements OnInit {\n\n  @Input() menuItems;\n\n  @Output() public navigate = new EventEmitter();\n  @Output() public navigateExternal = new EventEmitter();\n\n  constructor() { }\n\n  ngOnInit(): void {\n  }\n\n  public doNavigate(url, isExternal) {\n    return isExternal ? this.navigateExternal.emit(url) : this.navigate.emit(url);\n  }\n\n}\n","<div *ngFor=\"let menuItem of menuItems\">\n    <div style=\"margin-left: 10px; margin-right: 10px;\">\n        <ion-button class=\"button-no-pad\" (click)=\"doNavigate(menuItem.url, menuItem.isExternal)\" [color]=\"menuItem.buttonColor\" [ngClass]=\"menuItem.clazz ? menuItem.clazz : ''\" [ngStyle]=\"{ 'height': menuItem.height ? menuItem.height+'px' : '70px' }\">\n            <div class=\"inner-container r-flex r-flex-h-space-between r-flex-v-center\">\n                <ion-icon *ngIf=\"!menuItem.badgeValue()\" [name]=\"menuItem.icon\" style=\"flex: 1;\"></ion-icon>\n                <div *ngIf=\"menuItem.badgeValue()\" style=\"flex: 1;\">\n                    <ion-badge color=\"secondary\" style=\"font-size: 1.1rem;\">{{ menuItem.badgeValue() }}</ion-badge>\n                </div>\n                <div style=\"flex: 7;\">\n                    <div class=\"r-h3 r-b ion-text-left\">{{ menuItem.localized_name }}</div>\n                    <div class=\"r-flex r-flex-h-space-between r-flex-v-center\" style=\"margin-top: 5px; width: 85%;\">\n                        <div class=\"r-note r-text-color-light ion-text-wrap ion-text-left\">{{ menuItem.description }}</div>\n                    </div>\n                </div>\n                <ion-icon style=\"font-size: 1.4rem; flex: 1;\" name=\"chevron-forward-outline\"></ion-icon>\n            </div>\n        </ion-button>\n    </div>\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { AlertController } from '@ionic/angular';\nimport { AuthService } from '../../../services/auth.service';\n\n@Component({\n  selector: \"rope-my-account\",\n  templateUrl: \"./my-account.component.html\",\n  styleUrls: [\"./my-account.component.scss\"],\n})\nexport class MyAccountComponent implements OnInit {\n  \n  @Input() public membership;\n  @Output() public navigate = new EventEmitter<string>();\n\n  public menuItems: any[] = [\n    {\n      id: \"user-details\",\n      url: \"/user-detail\",\n      icon: \"person-outline\",\n      localized_name: \"Persoonlijke informatie\",\n      description: \"Naam en adresgegevens\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 0,\n    },\n    {\n      id: \"orders\",\n      url: \"/orders\",\n      icon: \"list-outline\",\n      localized_name: \"Bestellingen\",\n      description: \"Winkel- en online transacties\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 1,\n    },\n    {\n      id: \"reservations\",\n      url: \"/reservations\",\n      icon: \"shirt-outline\",\n      localized_name: \"Reserveringen\",\n      description: \"Artikelen die klaarhangen voor je\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 2,\n    },\n    {\n      id: \"watchlist\",\n      url: \"/watchlist\",\n      icon: \"eye-outline\",\n      localized_name: \"Watchlist\",\n      description: \"Artikelen die nu niet op voorraad zijn\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 3,\n    },\n  ];\n\n  public user;\n  public isAuthenticated;\n\n  constructor(\n    public authService: AuthService,\n    public alertController: AlertController\n  ) {}\n\n  ngOnInit(): void {\n    this.user = this.authService.getCurrentUser();\n    this.isAuthenticated = this.authService.isAuthenticated();\n    if (this.membership) {\n      this.menuItems.push({\n        id: \"membership\",\n        url: \"/membership\",\n        icon: \"star-outline\",\n        localized_name: this.membership.name,\n        description: this.membership.description,\n        buttonColor: \"tertiary\",\n        badgeValue: () => {\n          return undefined;\n        },\n        clazz: \"blocked-menu-item\",\n        sort_index: 4,\n      });\n    }\n  }\n\n  public getCustomerImage() {\n    return \"https://lh3.googleusercontent.com/fnRJk0r9oQb8h3IcxBWfTzbgvjqDTSh0eb43GTZZ05ZG4FQOEhub2Pk7-Vv-DMAc2xAxWTMwa-DxhmlO20cgnzjkv5zhd6tE3zz-xIlonA\";\n  }\n\n  public doNavigate(url) {\n    this.navigate.emit(url);\n  }\n\n  public editProfilePicture() {\n    \n  }\n\n  public async deleteAccount() {\n\n    const alert = await this.alertController.create({\n      header: 'Let op!',\n      subHeader: 'Account verwijderen',\n      message: 'Weet je het zeker dat je dit wil?',\n      cssClass: 'warning-alert',\n      buttons: [{\n        role: 'cancel',\n        text: 'Annuleer'\n      },\n      {\n        role: 'do',\n        text: 'Ja!'\n      }],\n    });\n\n    alert.onDidDismiss().then(d => {\n      console.log(d);\n      if (d && d.role === 'do') {\n        this.authService.logOut(this.user).then(() => {\n          this.ngOnInit();\n        });\n      }\n    })\n\n    await alert.present();\n\n  }\n\n}\n","<div *ngIf=\"isAuthenticated\">\n\n    <div class=\"blocks\">\n\n        <ion-grid>\n\n            <ion-row>\n\n                <ion-col size=\"12\" size-lg=\"4\">\n                    <div class=\"block\" style=\"padding-top: 5px; padding-bottom: 5px;\">\n                        <ion-card style=\"padding-top: 10px; padding-bottom: 10px;\">\n                            <ion-item lines=\"none\">\n                                <div slot=\"start\" style=\"position: relative;\">\n                                    <ion-avatar style=\"width: 50px; height: 50px;\">\n                                        <img [src]=\"getCustomerImage()\" style=\"width: 50px; height: 50px;\">\n                                    </ion-avatar>\n                                    <div class=\"overlay-button\" (click)=\"editProfilePicture()\">\n                                        <ion-icon name=\"add\" color=\"light\"></ion-icon>\n                                    </div>\n                                </div>\n                                <ion-label>\n                                    <div class=\"r-h2 r-privacy-field\">\n                                        {{ user.first_name }} {{ user.last_name }}\n                                    </div>\n                                    <div class=\"r-h3 r-privacy-field\">\n                                        Geregistreerd op {{ user.timestamp_created | date:'shortDate' }}\n                                    </div>\n                                </ion-label>\n                            </ion-item>\n                            <div class=\"ion-text-right\">\n                                <ion-button color=\"danger\" size=\"small\" (click)=\"deleteAccount()\">\n                                    <ion-icon slot=\"start\" name=\"trash\"></ion-icon>\n                                    <ion-label style=\"font-size: 0.9rem; color: white important!;\">Account verwijderen</ion-label>\n                                </ion-button>\n                            </div>\n                        </ion-card>\n                    </div>\n                </ion-col>\n\n                <ion-col size=\"12\" size-lg=\"4\">\n                    <div class=\"block\" style=\"padding-top: 5px; padding-bottom: 5px;\">\n                        <rope-page-menu \n                            [menuItems]=\"menuItems\"\n                            (navigate)=\"doNavigate($event)\"\n                        ></rope-page-menu>\n                    </div>\n                </ion-col>\n\n            </ion-row>\n\n        </ion-grid>\n\n    </div>\n\n</div>\n\n<div *ngIf=\"!isAuthenticated\">\n    <div style=\"margin: 10px;\" class=\"r-h3\">\n        Je bent niet ingelogd.\n    </div>\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { CoreService } from '../../../services/core.service';\n\n@Component({\n  selector: \"rope-customer-service-overview\",\n  templateUrl: \"./customer-service-overview.component.html\",\n  styleUrls: [\"./customer-service-overview.component.scss\"],\n})\nexport class CustomerServiceOverviewComponent implements OnInit {\n  \n  @Input() public mainText;\n  @Input() public contactText;\n  @Input() public sources: any[];\n  @Input() public extraBlocks: any[];\n\n  @Output() public navigate = new EventEmitter();\n  @Output() public navigateExternal = new EventEmitter();\n\n  public sourcesData = [\n    {\n      id: \"fb-messenger\",\n      name: \"Facebook Messenger\",\n      description: \"Snel contact via een chat\",\n      icon: \"logo-facebook\",\n    },\n    {\n      id: \"instagram\",\n      name: \"Instagram Direct Message\",\n      description: \"Snel contact via een chat\",\n      icon: \"logo-instagram\",\n    },\n    {\n      id: \"mail\",\n      name: \"Mailen\",\n      description: \"Mailen kan natuurlijk ook\",\n      icon: \"mail\",\n    },\n    {\n      id: \"call\",\n      name: \"Bellen\",\n      description: \"Telefonisch zijn we ook bereikbaar\",\n      icon: \"call\",\n    },\n  ];\n  public menuItems = [];\n  public storeMeta;\n\n  constructor(\n    public coreService: CoreService\n  ) {}\n\n  async ngOnInit() {\n\n    this.storeMeta = await this.coreService.getStoreMeta().toPromise();\n    this.storeMeta['name'] = this.coreService.store.store_name+' - Kantoor';\n    this.buildContactItems();\n\n  }\n\n  public buildContactItems() {\n\n    if (this.sources) {\n\n      let sortIndex = 0;\n      for (let source of this.sources) {\n        const sourceData = this.sourcesData.find((s) => s.id === source.id);\n        this.menuItems.push({\n          id: source.id,\n          url: source.data.url,\n          isExternal: true,\n          icon: sourceData.icon,\n          localized_name: sourceData.name,\n          description: sourceData.description,\n          buttonColor: \"primary\",\n          badgeValue: () => {\n            return undefined;\n          },\n          sort_index: sortIndex,\n        });\n        sortIndex++;\n      }\n\n    }\n\n  }\n\n  public doNavigate(event) {\n    this.navigate.emit(event);\n  }\n\n  public doNavigateExternal(event) {\n    this.navigateExternal.emit(event);\n  }\n\n  public getCustomerServiceStatus() {\n    const date = new Date();\n    const hour = date.getHours();\n    const day = date.getDay();\n\n    if (hour < 9 || hour > 18 || day === 6 || day === 0) {\n      return \"gesloten\";\n    } else {\n      return \"open\";\n    }\n  }\n}\n","<div>\n\n    <div class=\"blocks\">\n\n        <ion-grid>\n\n            <ion-row>\n\n                <ion-col size=\"12\" size-lg=\"4\">\n                    <div class=\"block\">\n                    \n                        <ion-card-header>\n                            <ion-card-title>Klantenservice</ion-card-title>\n                            <ion-card-subtitle>De klantenservice is {{ getCustomerServiceStatus() }}</ion-card-subtitle>\n                        </ion-card-header>\n                    \n                        <ion-card-content class=\"ion-text-center\">\n                            <div class=\"r-h2\">\n                                {{ mainText }}\n                            </div>\n                        </ion-card-content>\n                    \n                    </div>\n                </ion-col>\n\n                <ion-col size=\"12\" size-lg=\"4\">\n                    <div class=\"block\">\n\n                        <ion-card-header>\n                            <ion-card-title>Contact opnemen</ion-card-title>\n                            <ion-card-subtitle>Meerdere mogelijkheden</ion-card-subtitle>\n                        </ion-card-header>\n\n                         <ion-card-content class=\"ion-text-center\">\n                             <rope-page-menu\n                                 [menuItems]=\"menuItems\"\n                                 (navigate)=\"doNavigate($event)\"\n                                 (navigateExternal)=\"doNavigateExternal($event)\"\n                             ></rope-page-menu>\n                         </ion-card-content>\n                    </div>\n                </ion-col>\n\n                <ion-col size=\"12\" size-lg=\"4\">\n                    <div class=\"block\">\n                    \n                        <ion-card-header>\n                            <ion-card-title>Contactgegevens</ion-card-title>\n                            <ion-card-subtitle>Hoe kom je in contact met ons?</ion-card-subtitle>\n                        </ion-card-header>\n                    \n                        <ion-card-content class=\"ion-text-center\">\n                            \n                            <div class=\"r-h2\">\n                               {{ contactText }}\n                            </div>\n                            <br>\n                        \n                            <ng-container *ngIf=\"storeMeta\">\n                                <div style=\"margin-top: 15px;\">\n                                    <div class=\"r-h2\">{{ storeMeta['name'] }}</div>\n                                    <div class=\"r-h2\">{{ storeMeta['address'] }}</div>\n                                    <div class=\"r-h2\">{{ storeMeta['postal_code'] }} {{ storeMeta['city'] }} ({{ storeMeta['country_code'] }})</div>\n                                </div>\n                            \n                                <div style=\"margin-top: 15px;\">\n                                    <ion-icon style=\"padding-right: 7px;\" name=\"call\"></ion-icon> <a [href]=\"'tel:'+storeMeta['telephone_number']\"\n                                    style=\"color: black;\">{{ storeMeta['telephone_number'] }}</a><br>\n                                    <ion-icon style=\"padding-right: 7px;\" name=\"mail\"></ion-icon> <a [href]=\"'mailto:'+storeMeta['email_address']\"\n                                    style=\"color: black;\">{{ storeMeta['email_address'] }}</a>\n                                </div>\n                            \n                                <div style=\"margin-top: 15px;\">\n                                    KVK: {{ storeMeta['chamber_of_commerce_number'] }}<br>\n                                    BTW Nr.: {{ storeMeta['vat_id'] }}\n                                </div>\n                            </ng-container>\n                    \n                        </ion-card-content>\n                    \n                    </div>\n                </ion-col>\n\n                <ion-col size=\"12\" size-lg=\"4\" *ngFor=\"let block of extraBlocks\">\n                    <div class=\"block\">\n                        <ion-card-header>\n                            <ion-card-title>{{ block.title }}</ion-card-title>\n                            <ion-card-subtitle>{{ block.subtitle }}</ion-card-subtitle>\n                        </ion-card-header>\n                        <ion-card-content class=\"ion-text-center\">\n                            <div [innerHTML]=\"block.text\"></div>\n                        </ion-card-content>\n                    </div>\n                </ion-col>\n\n            </ion-row>\n\n        </ion-grid>\n\n    </div>\n\n</div>","import { DecimalPipe } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ReviewService } from '../../../services/review.service';\n\n@Component({\n  selector: \"rope-about-overview\",\n  templateUrl: \"./about-overview.component.html\",\n  styleUrls: [\"./about-overview.component.scss\"],\n})\nexport class AboutOverviewComponent implements OnInit {\n  @Input() public title;\n  @Input() public subtitle;\n  @Input() public mainText;\n\n  @Output() public navigate = new EventEmitter();\n\n  public menuItems = [\n    {\n      id: \"about\",\n      url: \"/about\",\n      icon: \"book-outline\",\n      localized_name: \"Over ons\",\n      description: \"Wie we zijn\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 1,\n    },\n    {\n      id: \"branches\",\n      url: \"/branches\",\n      icon: \"storefront-outline\",\n      localized_name: \"Winkels\",\n      description: \"Waar kun je ons fysiek bezoeken?\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 2,\n    },\n    {\n      id: \"reviews\",\n      url: \"/review\",\n      icon: \"chatbox-ellipses-outline\",\n      localized_name: \"Reviews\",\n      description: \"Wij scoren een $_REVIEW_AVG/10 ($_REVIEW_COUNT reviews)\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 3,\n    },\n    {\n      id: \"brands\",\n      url: \"/brands\",\n      icon: \"shirt-outline\",\n      localized_name: \"Merken\",\n      description: \"Bekijk ons assortiment\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 4,\n    },\n  ];\n\n  constructor(\n    public reviewService: ReviewService,\n    public numberPipe: DecimalPipe\n  ) {}\n\n  async ngOnInit() {\n    \n    const reviewRatingObj = await this.reviewService.getAverage().toPromise();\n    const reviewMenuItem = this.menuItems.find((m) => m.id === \"reviews\");\n\n    reviewMenuItem.description = reviewMenuItem.description\n      .replace(\n        \"$_REVIEW_AVG\",\n        this.numberPipe.transform(reviewRatingObj.avg_rating * 2, \"1.1-1\")\n      )\n      .replace(\n        \"$_REVIEW_COUNT\",\n        this.numberPipe.transform(reviewRatingObj.amount, \"1.0-0\")\n      );\n  }\n\n  public doNavigate(event) {\n    this.navigate.emit(event);\n  }\n}\n","<div>\n    <div class=\"blocks\">\n        <ion-grid>\n            <ion-row>\n\n                <ion-col size=\"12\" size-lg=\"4\">\n                    <div class=\"block\">\n                    \n                        <ion-card-header>\n                            <ion-card-title>{{ title }}</ion-card-title>\n                            <ion-card-subtitle>{{ subtitle }}</ion-card-subtitle>\n                        </ion-card-header>\n                    \n                        <ion-card-content class=\"ion-text-center\">\n                            <div class=\"r-h2\">\n                                {{ mainText }}\n                            </div>\n                        </ion-card-content>\n                    \n                    </div>\n                </ion-col>\n\n                <ion-col size=\"12\" size-lg=\"4\">\n                    <div class=\"block\">\n\n                        <ion-card-header>\n                            <ion-card-title>Over ons</ion-card-title>\n                            <ion-card-subtitle>Leer ons kennen</ion-card-subtitle>\n                        </ion-card-header>\n                    \n                        <ion-card-content class=\"ion-text-center\">\n                            <rope-page-menu \n                                [menuItems]=\"menuItems\"\n                                (navigate)=\"doNavigate($event)\"\n                            ></rope-page-menu>\n                        </ion-card-content>\n\n                    </div>\n                </ion-col>\n\n            </ion-row>\n        </ion-grid>\n    </div>\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n@Component({\n  selector: \"rope-terms-overview\",\n  templateUrl: \"./terms-overview.component.html\",\n  styleUrls: [\"./terms-overview.component.scss\"],\n})\nexport class TermsOverviewComponent implements OnInit {\n  @Input() public title;\n  @Input() public subtitle;\n  @Input() public mainText;\n\n  @Output() public navigate = new EventEmitter();\n\n  public menuItems = [\n    {\n      id: \"terms-and-conditions\",\n      url: \"/terms-and-conditions\",\n      icon: \"clipboard-outline\",\n      localized_name: \"Service voorwaarden\",\n      description: \"Bestellen, Betalen, Verzenden, Retourneren\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 0,\n    },\n    {\n      id: \"returns-policy\",\n      url: \"/returns-policy\",\n      icon: \"swap-horizontal-outline\",\n      localized_name: \"Retourneren\",\n      description: \"Bekijk onze retourprocedure\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 1,\n    },\n    {\n      id: \"complaints\",\n      url: \"/complaints\",\n      icon: \"sad-outline\",\n      localized_name: \"Klachten\",\n      description: \"Wat te doen als je ontevreden bent\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 2,\n    },\n    {\n      id: \"terms\",\n      url: \"/terms\",\n      icon: \"document-text-outline\",\n      localized_name: \"Algemene voorwaarden\",\n      description: \"Al de voorwaarden op een rijtje\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 4,\n    },\n    {\n      id: \"privacy-policy\",\n      url: \"/privacy-policy\",\n      icon: \"shield-outline\",\n      localized_name: \"Privacy policy\",\n      description: \"Wat we wel en niet doen met je gegevens\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 5,\n    },\n    {\n      id: \"cookies\",\n      url: \"/cookies\",\n      icon: \"id-card-outline\",\n      localized_name: \"Cookies\",\n      description: \"Beheer zelf welke cookies je accepteert\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 6,\n    },\n    {\n      id: \"about-this-app\",\n      url: \"/about-this-app\",\n      icon: \"phone-portrait-outline\",\n      localized_name: \"Over deze app\",\n      description: \"Informatie over de webapp\",\n      buttonColor: \"primary\",\n      badgeValue: () => {\n        return undefined;\n      },\n      sort_index: 7,\n    }\n  ];\n\n  constructor() {}\n\n  async ngOnInit() {}\n\n  public doNavigate(event) {\n    this.navigate.emit(event);\n  }\n}\n","<div>\n    <div class=\"blocks\">\n        <ion-grid>\n            <ion-row>\n\n                <ion-col size=\"12\" size-lg=\"4\">\n                    <div class=\"block\">\n                    \n                        <ion-card-header>\n                            <ion-card-title>{{ title }}</ion-card-title>\n                            <ion-card-subtitle>{{ subtitle }}</ion-card-subtitle>\n                        </ion-card-header>\n                    \n                        <ion-card-content class=\"ion-text-center\">\n                            <div class=\"r-h2\">\n                                {{ mainText }}\n                            </div>\n                        </ion-card-content>\n                    \n                    </div>\n                </ion-col>\n\n                <ion-col size=\"12\" size-lg=\"4\">\n                    <div class=\"block\">\n\n                        <ion-card-header>\n                            <ion-card-title>Alle documenten</ion-card-title>\n                            <ion-card-subtitle>Om na te lezen</ion-card-subtitle>\n                        </ion-card-header>\n                    \n                        <ion-card-content class=\"ion-text-center\">\n                            <rope-page-menu \n                                [menuItems]=\"menuItems\"\n                                (navigate)=\"doNavigate($event)\"\n                            ></rope-page-menu>\n                        </ion-card-content>\n\n                    </div>\n                </ion-col>\n\n            </ion-row>\n        </ion-grid>\n    </div>\n</div>","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { ScreensizeService } from '../../../services/screensize.service';\n\n@Component({\n  selector: \"rope-default-page\",\n  templateUrl: \"./default-page.component.html\",\n  styleUrls: [\"./default-page.component.scss\"],\n})\nexport class DefaultPageComponent implements OnInit, OnDestroy {\n\n  private screensizeObserver: Subscription;\n  public isDesktop;\n\n  constructor(public screenSizeService: ScreensizeService) {}\n\n  ngOnInit(): void {\n    this.screensizeObserver = this.screenSizeService\n      .isDesktopView()\n      .subscribe((isDesktop) => {\n        this.isDesktop = isDesktop;\n      });\n  }\n\n  ngOnDestroy(): void {\n    if (this.screensizeObserver) {\n      this.screensizeObserver.unsubscribe();\n    }\n  }\n\n}\n","","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { ModalController, AlertController, NavParams } from '@ionic/angular';\nimport { Branch } from '../../../models/branch';\nimport { Product } from '../../../models/product';\nimport { ProductVariant } from '../../../models/product-variant';\nimport { Reservation } from '../../../models/reservation';\nimport { ReservationRequest } from '../../../models/reservation-request';\nimport { ReservationResponse } from '../../../models/reservation-response';\nimport { AuthService } from '../../../services/auth.service';\nimport { BranchService } from '../../../services/branch.service';\nimport { CoreService } from '../../../services/core.service';\nimport { OutfitService } from '../../../services/outfit.service';\nimport { ReservationService } from '../../../services/reservation.service';\n\n@Component({\n  selector: \"rope-store-stock\",\n  templateUrl: \"./store-stock.component.html\",\n  styleUrls: [\"./store-stock.component.scss\"],\n})\nexport class StoreStockComponent implements OnInit {\n  \n  @Input() public outfitId;\n\n  @Output() public modalLogin = new EventEmitter();\n\n  public branches: Branch[];\n  public products: Product[];\n  public shopStockBranch;\n  public stockBranchMap;\n\n  constructor(\n    public modalCtrl: ModalController,\n    public alertCtrl: AlertController,\n    public branchService: BranchService,\n    public outfitService: OutfitService,\n    public navParams: NavParams,\n    public coreService: CoreService,\n    public reservationService: ReservationService,\n    public authService: AuthService,\n  ) {}\n\n  ngOnInit() {\n\n    this.branchService.getAll().subscribe((r) => {\n      this.branches = r.filter((br) => !br.is_online && br['is_active']);\n      this.shopStockBranch = this.branches[0].id;\n    });\n\n    this.outfitService.getProducts(this.outfitId, false).subscribe(\n      (res) => {\n        this.products = res;\n        this.buildStockBranchMap();\n      },\n      (errorResponse) => {\n        console.error(\"Error!\");\n        this.coreService.showAlert(errorResponse);\n      }\n    );\n  }\n\n  public shopStockChanged(event) {\n    this.shopStockBranch = event.detail.value;\n  }\n\n  public buildStockBranchMap() {\n    const stockMap = new Map<number, Map<number, number>>();\n    for (const pr of this.products) {\n      for (const pv of pr.product_variants) {\n        const map = new Map<number, number>();\n        for (const al of pv[\"all_stocks\"].filter((a) => a.branch.id !== 2)) {\n          map.set(al.branch.id, al.nett_stock_level);\n        }\n        stockMap.set(pv.id, map);\n      }\n    }\n\n    this.stockBranchMap = stockMap;\n  }\n\n  public dismiss() {\n    this.modalCtrl.dismiss();\n  }\n\n  public async createReservation(pv, branchId) {\n    const authenticated = this.authService.isAuthenticated();\n    if (!authenticated) {\n      const alert = await this.alertCtrl.create({\n        cssClass: \"custom-alert\",\n        header: \"Account nodig\",\n        subHeader:\n          \"Je hebt een account bij ons nodig om een reservering te plaatsen.\",\n        message: \"Wil je direct een account aanmaken of inloggen?\",\n        buttons: [\n          {\n            text: \"Nee\",\n            role: \"cancel\",\n          },\n          {\n            text: \"Ja!\",\n            handler: () => {\n              this.showLogin(pv, branchId);\n            },\n          },\n        ],\n      });\n\n      return await alert.present();\n    } else {\n      this.showCreateReservation(pv, branchId);\n    }\n  }\n\n  public async showLogin(pv, branchId) {\n    this.modalLogin.emit({\n      productVariant: pv,\n      branchId: branchId \n    });\n  }\n\n  public async showCreateReservation(pv, branchId) {\n\n    const branch = this.branches.find((br) => br.id === branchId);\n    const alert = await this.alertCtrl.create({\n      cssClass: \"custom-alert\",\n      header: \"Reservering plaatsen\",\n      subHeader:\n        \"Wil je dit product in maat \" +\n        pv.size.name +\n        \" reserveren in \" +\n        branch.full_name +\n        \"?\",\n      message:\n        \"Let op: de reservering is altijd onder voorbehoud. Als er op hetzelfde moment iemand dit artikel koopt in de winkel, wordt de resevering geweigerd. Je ontvangt hierover bericht.\",\n      buttons: [\n        {\n          text: \"Annuleer\",\n          role: \"cancel\",\n        },\n        {\n          text: \"Ja!\",\n          handler: () => {\n            this.doCreateReservation(pv.id, branchId);\n          },\n        },\n      ],\n    });\n\n    return await alert.present();\n\n  }\n\n  public doCreateReservation(productVariantId, branchId) {\n\n    const reservation = new Reservation();\n    reservation.product_variant = new ProductVariant();\n    reservation.product_variant.id = productVariantId;\n\n    reservation.status = \"OPEN\";\n    reservation.paid = true;\n\n    reservation.reservation_request = new ReservationRequest();\n    reservation.reservation_request.branch = new Branch();\n    reservation.reservation_request.branch.id = branchId;\n    reservation.reservation_request.timestamp = new Date().getTime();\n\n    reservation.reservation_response = new ReservationResponse();\n    reservation.reservation_response.branch = new Branch();\n    reservation.reservation_response.branch.id = branchId;\n\n    this.reservationService.postReservation(reservation).subscribe(\n      (res) => {\n        this.showResult(res.id);\n      },\n      (error) => {\n        console.error(error);\n        this.coreService.showAlert(error);\n      }\n    );\n\n  }\n\n  public async showResult(id) {\n\n    const alert = await this.alertCtrl.create({\n      cssClass: \"custom-alert\",\n      header: \"Reservering geplaatst\",\n      message:\n        \"De reservering is succesvol aangemaakt onder nummer #\" +\n        id +\n        \". Je ontvangt nog een e-mail over de status.\",\n      buttons: [\n        {\n          text: \"Oke!\",\n          role: \"cancel\",\n        },\n      ],\n    });\n    return await alert.present();\n\n  }\n\n}\n","<ng-container *ngIf=\"stockBranchMap\">\n\n    <div class=\"blocks\">\n\n      <div class=\"block\">\n\n        <ion-card-header>\n          <ion-card-title>Reservering plaatsen</ion-card-title>\n        </ion-card-header>\n\n        <ion-card-content class=\"ion-text-center\">\n          <p>Je kunt een artikel direct achter laten hangen in een van onze winkels door achter de gewenste maat van het artikel op reserveer te klikken. Je ontvangt een mail wanneer het artikel voor je klaarhangt, welke je vervolgens binnen 3 dagen op kunt halen. Let op: het kan zijn dat een artikel niet meer beschikbaar is, aangezien deze in de winkel in de tussentijd verkocht kan worden. De reservering zal dan afgewezen worden, hiervan ontvang je een e-mail.<br><br>Het maximaal aantal openstaande reserveringen per klant is 3.</p>\n        </ion-card-content>\n\n      </div>\n\n      <ng-container *ngIf=\"stockBranchMap && stockBranchMap.size > 0\">\n        <div class=\"block\">\n\n          <ion-card-header>\n            <ion-card-title>Winkelvoorraad</ion-card-title>\n          </ion-card-header>\n\n          <ion-item>\n            <ion-label position=\"stacked\">Filiaal</ion-label>\n            <ion-select [(ngModel)]=\"shopStockBranch\">\n              <ion-select-option *ngFor=\"let br of branches\" [value]=\"br.id\">{{ br.full_name }}</ion-select-option>\n            </ion-select>\n          </ion-item>\n\n          <!-- <ion-segment color=\"secondary\" (ionChange)=\"shopStockChanged($event)\" class=\"segment-custom\">\n            <ion-segment-button *ngFor=\"let br of branches\" [value]=\"br.id\" [checked]=\"shopStockBranch == br.id\">\n              <ion-label>{{ br.full_name }}</ion-label>\n            </ion-segment-button>\n          </ion-segment> -->\n\n          <ng-container *ngFor=\"let br of branches\">\n            <ng-container *ngIf=\"shopStockBranch == br.id\">\n\n              <ng-container *ngFor=\"let pr of products\">\n\n                <div style=\"margin-top: 40px;\">\n\n                  <ion-item text-left class=\"stock-level-item\">\n                    <ion-avatar slot=\"start\">\n                      <img [src]=\"pr.outfits[0].main_media_url\">\n                    </ion-avatar>\n                    <ion-label>\n                      <div class=\"r-h3\">{{ pr.name.replace('Dameskleding', '') }}</div>\n                    </ion-label>\n                  </ion-item>\n\n                  <ion-grid>\n\n                    <ion-row *ngFor=\"let pv of pr.product_variants\" class=\"stock-row ion-justify-content-between ion-align-items-center\">\n\n                      <ion-col size=\"2\" class=\"ion-align-self-center\">\n                        <ion-item lines=\"none\" text-left class=\"stock-level-item\">\n                          <ion-label text-wrap>\n                            <div class=\"r-h3\">{{ pv.size.name }}</div>\n                          </ion-label>\n                        </ion-item>\n                      </ion-col>\n\n                      <ion-col size=\"6\" text-right class=\"ion-align-self-center\">\n                        \n                        <ion-item lines=\"none\" class=\"stock-level-item\" *ngIf=\"stockBranchMap.get(pv.id).get(br.id) == 0\" text-right>\n                          <ion-label text-wrap>\n                            <div class=\"r-h3\">Niet op voorraad</div>\n                          </ion-label>\n                          <ion-icon slot=\"end\" name=\"close-circle\" color=\"danger\" size=\"small\"></ion-icon> \n                        </ion-item>\n                        <ion-item lines=\"none\" *ngIf=\"stockBranchMap.get(pv.id).get(br.id) > 0 && stockBranchMap.get(pv.id).get(br.id) < 2\" text-right class=\"stock-level-item\">\n                          <ion-label text-wrap>\n                            <div class=\"r-h3\">Nog {{ stockBranchMap.get(pv.id).get(br.id) }} op voorraad</div>\n                          </ion-label>\n                          <ion-icon slot=\"end\" name=\"checkmark-circle\" color=\"warning\" size=\"small\"></ion-icon>\n                        </ion-item>\n                        <ion-item lines=\"none\" *ngIf=\"stockBranchMap.get(pv.id).get(br.id) >= 2\" text-right class=\"stock-level-item\">\n                          <ion-label text-wrap>\n                            <div class=\"r-h3\">Op voorraad</div>\n                          </ion-label>\n                          <ion-icon slot=\"end\" name=\"checkmark-circle\" color=\"success\" size=\"small\"></ion-icon>\n                        </ion-item>\n                      \n                      </ion-col>\n\n                      <ion-col size=\"4\" class=\"ion-align-self-center\" text-center>\n                        <ion-button size=\"small\" color=\"secondary\" [disabled]=\"!stockBranchMap.get(pv.id).get(br.id) || stockBranchMap.get(pv.id).get(br.id) == 0\" (click)=\"createReservation(pv, br.id)\">\n                          <div class=\"r-button-text\">Reserveer</div>\n                        </ion-button>\n                      </ion-col>\n\n                    </ion-row>\n\n                  </ion-grid>\n                </div>\n\n              </ng-container>\n\n            </ng-container>\n          </ng-container>\n\n        </div>\n      </ng-container>\n\n    </div>\n\n</ng-container>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { LoadingController, Platform } from '@ionic/angular';\nimport { forkJoin, Subscription } from 'rxjs';\nimport { Outfit } from '../../../models/outfit';\nimport { CoreService } from '../../../services/core.service';\nimport { OptionService } from '../../../services/option.service';\nimport { OutfitService } from '../../../services/outfit.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\n\n@Component({\n  selector: \"rope-webshop-theme-detail\",\n  templateUrl: \"./webshop-theme-detail.component.html\",\n  styleUrls: [\"./webshop-theme-detail.component.scss\"],\n})\nexport class WebshopThemeDetailComponent implements OnInit {\n  \n  @Input() public shopThemeName;\n\n  @Output() public navigateShopDetail = new EventEmitter();\n\n  public sub: Subscription;\n  public category;\n  public theme;\n\n  public loading = true;\n  public outfits: any[];\n  public extraOutfits: any[];\n\n  public stats: any;\n  public pageNumber;\n  public perPage;\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  constructor(\n    public coreService: CoreService,\n    public outfitService: OutfitService,\n    public loadingCtrl: LoadingController,\n    public screensizeService: ScreensizeService,\n    public platform: Platform,\n    public optionService: OptionService,\n  ) {}\n\n  ngOnInit() {\n\n    this.screensizeObserver = this.screensizeService\n      .isDesktopView()\n      .subscribe((isDesktop) => {\n        this.isDesktop = isDesktop;\n      });\n\n    this.category = \"musthaves\";\n    const parsedThemeName = this.shopThemeName.toLowerCase().replaceAll(\"-\", \"\");\n\n    let obs1 = this.outfitService.getBestsellers('BASICS', 30, undefined, 1);\n    let obs2 = this.outfitService.getShopThemesByTitle(parsedThemeName);\n\n    forkJoin([obs1, obs2]).subscribe(\n      (r) => {\n        this.extraOutfits = r[0];\n        this.theme = r[1][0];\n\n        this.category = this.theme.outfit_category_first;\n        this.init();\n      },\n      (error) => {\n        this.coreService.showAlert(error);\n      }\n    );\n\n  }\n\n  ngOnDestroy(): void {\n    if (this.screensizeObserver) {\n      this.screensizeObserver.unsubscribe();\n    }\n  }\n\n  public categoryChanged(event: any) {\n    this.category = event.detail.value;\n    this.init();\n  }\n\n  public async init() {\n\n    this.outfits = new Array<Outfit>();\n    for (let product of this.theme.products) {\n\n      const outfit = product.outfits.find(\n        (o) => o.outfit_type.toLowerCase() === this.category && o.is_active\n      );\n\n      if (outfit) {\n        if (outfit.medias && outfit.medias.length > 0) {\n          outfit.main_media_url = outfit.medias.sort((m1, m2) => m1.sort_index - m2.sort_index)[0].url;\n        }\n        outfit.custom_fields = {\n          number_of_products: 1\n        };\n        this.outfits.push(outfit);\n      }\n\n    }\n    this.outfits.push(...this.extraOutfits);\n\n  }\n\n  public getThemeImage() {\n\n    if (this.theme.medias && this.theme.medias.length > 0) {\n      return this.theme.medias[0].url;\n    }\n\n    return (\n      \"https://storage.googleapis.com/kiba-fashion-api-bucket/image/shop_theme/\" +\n      this.theme.id +\n      \".jpg\"\n    );\n  }\n\n  public goToShopDetail(outfit: Outfit) {\n    this.navigateShopDetail.emit(outfit);\n  }\n}\n","<ng-container *ngIf=\"!theme\">\n  <rope-loading></rope-loading>\n</ng-container>\n\n<ng-container *ngIf=\"theme\">\n\n  <ng-container *ngIf=\"!outfits || outfits.length === 0\">\n\n    <div class=\"no-outfits\">\n      <div class=\"no-outfit-inner\">\n        <ion-icon name=\"shirt\" color=\"primary\" class=\"no-outfit-icon\"></ion-icon>\n        <div class=\"no-outfit-title\">Geen outfits gevonden</div>\n      </div>\n    </div>\n\n  </ng-container>\n\n  <ng-container *ngIf=\"outfits && outfits.length > 0\">\n\n      <ion-grid [ngClass]=\"!isDesktop ? 'ion-no-padding' : ''\">\n          <ion-row>\n              <ion-col *ngFor=\"let outfit of outfits; let i = index;\" size=\"6\" size-xl=\"3\" size-lg=\"3\" size-md=\"3\" [ngClass]=\"!isDesktop ? 'spacer-mobile' : ''\">\n                  <rope-product-container\n                      [outfit]=\"outfit\"\n                      [showLikeButton]=\"true\"\n                      [onlyPreorders]=\"false\"\n                      (navigateToShopDetail)=\"goToShopDetail($event)\"\n                  ></rope-product-container>\n              </ion-col>\n          </ion-row>\n      </ion-grid>\n\n  </ng-container>\n        \n</ng-container>","import { Component, EventEmitter, OnInit, Output } from '@angular/core';\nimport { OutfitService } from '../../../services/outfit.service';\n\n@Component({\n  selector: \"rope-webshop-outfit-mediaset-categories\",\n  templateUrl: \"./webshop-outfit-mediaset-categories.component.html\",\n  styleUrls: [\"./webshop-outfit-mediaset-categories.component.scss\"],\n})\nexport class WebshopOutfitMediasetCategoriesComponent implements OnInit {\n  public outfitMediasetCategories;\n  public outfitMediasetCategoryId;\n\n  public mediasetDescription;\n\n  @Output() public dismiss = new EventEmitter();\n\n  constructor(public outfitService: OutfitService) {}\n\n  ngOnInit(): void {\n    this.outfitMediasetCategories = this.outfitService.outfitMediasetCategories;\n    this.outfitMediasetCategoryId = this.outfitService.outfitMediasetCategoryId;\n\n    this.mediasetDescription = this.outfitService.outfitMediasetMetas.some(\n      (m) => m.key_ === \"mediaset_choice_description\"\n    )\n      ? this.outfitService.outfitMediasetMetas.find(\n          (m) => m.key_ === \"mediaset_choice_description\"\n        ).value_\n      : \"\";\n\n  }\n\n  public setOutfitMediasetCategory(id) {\n    this.outfitMediasetCategoryId = id;\n    this.outfitService.setOutfitMediasetCategory(id);\n    this.dismiss.emit();\n  }\n}\n","<div style=\"padding: 10px;\">\n\n    <div class=\"mediaset-box\">\n        <p class=\"ion-padding\">\n            {{ mediasetDescription }}\n        </p>\n\n        <ion-grid>\n            <ion-row>\n                <ion-col size=\"6\" *ngFor=\"let mediasetCategory of outfitMediasetCategories\" (click)=\"setOutfitMediasetCategory(mediasetCategory.id)\">\n                    <div [ngClass]=\"mediasetCategory.id === outfitMediasetCategoryId ? 'bordered-mediaset' : ''\">\n                        <img [src]=\"mediasetCategory.preview_image\" class=\"bordered-image border-choice\">\n                    </div>\n                    <div style=\"width: 100%; margin-top: 3px; font-size: 1.0rem;\" class=\"filters-title ion-text-center\">\n                        <b>{{ mediasetCategory.name }}</b>\n                        <p style=\"margin-top: 3px;\">{{ mediasetCategory.subtitle }}</p>\n                    </div>\n                </ion-col>\n            </ion-row>\n        </ion-grid>\n    </div>\n\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { AlertController, LoadingController } from '@ionic/angular';\nimport { lastValueFrom } from 'rxjs';\nimport { AuthService } from '../../../services/auth.service';\nimport { CoreService } from '../../../services/core.service';\nimport { LoyaltyService } from '../../../services/loyalty.service';\n\n@Component({\n  selector: 'rope-loyalty-gift-shop',\n  templateUrl: './loyalty-gift-shop.component.html',\n  styleUrls: ['./loyalty-gift-shop.component.scss']\n})\nexport class LoyaltyGiftShopComponent implements OnInit {\n\n  public themeColor;\n  public loyaltyColor;\n\n  @Output() public navigateToHome = new EventEmitter();\n  @Output() public navigateToGiftDetail = new EventEmitter<number>();\n  @Output() public navigateToLoyaltyVouchers = new EventEmitter();\n\n  @Output() public modalLogin = new EventEmitter();\n\n  public currentUser;\n  public currentStore;\n  public isAuthenticated;\n\n  public loyaltyBackgroundImage;\n  public useLoyaltyMultiplier;\n\n  public currentSort;\n  public currentFilter;\n\n  public loading = false;\n\n  public sorts = [\n    { value: 'price ASC', name: 'Punten oplopend'},\n    { value: 'price DESC', name: 'Punten aflopend'},\n    { value: 'value ASC', name: 'Waarde oplopend' },\n    { value: 'value DESC', name: 'Waarde aflopend' }\n  ];\n  public categories: any[];\n  public gifts: any[];\n  public vouchersCount;\n\n  constructor(\n    private coreService: CoreService,\n    private loyaltyService: LoyaltyService,\n    public authService: AuthService,\n    public alertCtrl: AlertController,\n    private loadingCtrl: LoadingController,\n  ) { }\n\n  async ngOnInit() {\n\n    this.loading = true;\n\n    this.currentSort = this.sorts[0];\n\n    this.currentUser = this.authService.getCurrentUser();\n    this.isAuthenticated = this.authService.isAuthenticated();\n\n    this.currentStore = this.coreService.store;\n    this.loyaltyBackgroundImage = this.currentStore.loyalty_background_image || \"https://images.pexels.com/photos/1303097/pexels-photo-1303097.jpeg?cs=srgb&dl=pexels-george-dolgikh-1303097.jpg&fm=jpg\";\n    this.themeColor = this.coreService.store.theme_color;\n    this.loyaltyColor = this.coreService.loyaltyColor;\n\n    this.useLoyaltyMultiplier = this.currentStore.loyalty_use_multiplier;\n\n    this.categories = await lastValueFrom(this.loyaltyService.getGiftCategories());\n    this.loadGifts();\n    \n    if (this.isAuthenticated) {\n      this.vouchersCount = (await lastValueFrom(this.loyaltyService.getLoyaltyGiftTransactionsCount()))['count'];\n      this.reloadPoints();\n    }\n\n  }\n\n  public reloadPoints() {\n\n    this.authService.getUserDetails(this.currentUser).subscribe(r => {\n\n      this.currentUser.points = r.points;\n      this.currentUser.multiplier = r.multiplier;\n      this.authService.storeUser(this.currentUser);\n\n    }, error => {\n\n      this.authService.logOut(this.currentUser).then(async () => {\n\n        this.navigateToHome.emit();\n\n        const al = await this.alertCtrl.create({\n          header: 'Opnieuw inloggen',\n          cssClass: 'custom-alert',\n          message: 'Je moet even opnieuw inloggen. Open het menu en klik op inloggen.',\n          buttons: ['Oke']\n        });\n\n        await al.present();\n\n      });\n\n    });\n\n  }\n\n  public loadGifts() {\n\n    this.loyaltyService.getAvailableGifts(this.currentFilter, this.currentSort).subscribe(r => {\n      this.gifts = r;\n      console.log(r);\n      this.loading = false;\n    }, error => {\n      this.coreService.showAlert(error);\n    });\n\n  }\n\n  public getProgress(gift) {\n    const perc = this.authService.getCurrentUser()['points'] / gift.price;\n    return perc > 1 ? 1.0 : perc;\n  }\n\n  public async openGiftDetail(gift) {\n    this.navigateToGiftDetail.emit(gift.id);\n  }\n\n  public goToTransactions() {\n    this.navigateToLoyaltyVouchers.emit();\n  }\n\n  public getCustomerImage() {\n\n    const customer = this.authService.getCurrentUser();\n    if (customer.medias && customer.medias.length > 0) {\n      return customer.medias[0].url;\n    }\n    return \"https://lh3.googleusercontent.com/fnRJk0r9oQb8h3IcxBWfTzbgvjqDTSh0eb43GTZZ05ZG4FQOEhub2Pk7-Vv-DMAc2xAxWTMwa-DxhmlO20cgnzjkv5zhd6tE3zz-xIlonA\";\n\n  }\n\n  public async openSort() {\n\n    const sortss = this.sorts;\n\n    if (!this.currentSort) {\n      const basicSort = { value: '0', name: 'Standaard Sorting' };\n      sortss.push(basicSort);\n      this.currentSort = basicSort;\n    }\n\n    sortss.sort((a, b) => a.value.localeCompare(b.value));\n\n    const inputs = [];\n    for (let s of sortss) {\n      inputs.push({\n        name: 'selectedSort',\n        type: 'radio',\n        label: s.name,\n        value: s,\n        checked: s.value === this.currentSort.value\n      });\n    }\n\n    const al = await this.alertCtrl.create({\n      header: 'Kies een sortering',\n      inputs: inputs,\n      cssClass: 'custom-alert',\n      buttons: [\n        {\n          role: 'cancel',\n          text: 'Annuleer'\n        },\n        {\n          text: 'Oke',\n          handler: d => {\n            this.currentSort = d;\n            this.loadGifts();\n          }\n        }\n      ]\n    });\n\n    await al.present();\n\n  }\n\n  public async openFilters() {\n\n    const cats = this.categories;\n\n    if (!this.currentFilter) {\n      const basicCat = { id: 0, name: 'Alle categorieën' };\n      cats.push(basicCat);\n      this.currentFilter = basicCat;\n    }\n\n    cats.sort((a, b) => a.id - b.id);\n\n    const inputs = [];\n    for (let cat of cats) {\n      inputs.push({\n        name: 'selectedCategory',\n        type: 'radio',\n        label: cat.name,\n        value: cat,\n        checked: cat.name === this.currentFilter.name\n      });\n    }\n\n    const al = await this.alertCtrl.create({\n      header: 'Kies een categorie',\n      inputs: inputs,\n      cssClass: 'custom-alert',\n      buttons: [\n        {\n          role: 'cancel',\n          text: 'Annuleer'\n        },\n        {\n          text: 'Oke',\n          handler: d => {\n            this.currentFilter = d;\n            this.loadGifts();\n          }\n        }\n      ]\n    });\n\n    await al.present();\n\n  }\n\n  public triggerLogin() {\n    this.modalLogin.emit();\n  }\n\n  public showHelpAboutMultiplier() {\n    this.coreService.showMessage(\n      'Loyalty Multiplier', \n      'Je Loyalty Multiplier geeft aan hoe snel je spaart. Standaard krijg je voor iedere euro die je besteedt, 1 punt. Als je multiplier 2x is, krijg je 2 punten per bestede euro.<br><br>Als je meer en vaker koopt, krijg je automatisch een hogere multiplier. Koop je een tijdje niks, dan daalt deze weer.'\n    );\n  }\n\n}\n","<ng-container *ngIf=\"loading\">\n    <rope-loading text=\"Spaarshop laden...\"></rope-loading>\n</ng-container>\n\n<ng-container *ngIf=\"gifts && !loading\">\n\n    <div class=\"gifts\" class=\"main-container\" [ngStyle]=\"{ 'background-image': 'url('+loyaltyBackgroundImage+')' }\">\n\n        <div style=\"user-select: none; width: 500px; max-width: 95vw;\" *ngIf=\"isAuthenticated\">\n            <div class=\"top-container\">\n                <div style=\"width: 70%; z-index: 99999;\">\n                    <div class=\"card r-flex r-flex-h-space-between r-flex-v-center\">\n                        <div>\n                            <ion-avatar style=\"width: 50px; height: 50px; margin-left: 5px;\">\n                                <img [src]=\"getCustomerImage()\" style=\"width: 50px; height: 50px;\">\n                            </ion-avatar>\n                            <div style=\"margin-top: 10px; margin-left: 10px;\">\n                                <div class=\"r-h2 r-privacy-field\">{{ authService.getCurrentUser().first_name }}</div>\n                                <div class=\"r-h3 r-privacy-field\" style=\"font-weight: 700;\">{{ authService.getCurrentUser().last_name }}</div>\n                            </div>\n                        </div>\n                        <rope-points [value]=\"authService.getCurrentUser()['points']\" size=\"big\" [widthAuto]=\"true\"></rope-points>\n                    </div>\n                    <div class=\"top-title ion-text-center ion-text-wrap\">{{ currentStore.store_name }}&nbsp;&nbsp; | &nbsp;&nbsp;Spaarkaart</div>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"bottom-container\">\n\n            <ion-item-divider *ngIf=\"!isAuthenticated\">\n                <ion-label class=\"r-h2 ion-text-wrap\">\n                    Om de loyalty shop te kunnen gebruiken moet je een account hebben.\n                </ion-label>\n                <div slot=\"end\">\n                    <ion-button color=\"cta\" (click)=\"triggerLogin()\">\n                        <ion-label class=\"r-h3\">Inloggen/Registreren</ion-label>\n                    </ion-button>\n                </div>\n            </ion-item-divider>\n\n            <ion-item-divider *ngIf=\"isAuthenticated && useLoyaltyMultiplier\" style=\"cursor: pointer;\">\n                <ion-label style=\"font-family: 'Source Sans Pro'; color: #1d1d1d;\">\n                    Loyalty Multiplier\n                </ion-label>\n            \n                <div slot=\"end\" class=\"r-flex r-flex-h-space-between r-flex-v-center\">\n                    <ion-badge color=\"secondary\">\n                        {{ currentUser.multiplier | number:'1.2-2' }}x\n                    </ion-badge>\n                    <ion-buttons style=\"margin-left: 15px; margin-right: 5px; z-index: 1;\">\n                        <ion-button slot=\"icon-only\" fill=\"solid\" color=\"light\" (click)=\"showHelpAboutMultiplier()\">\n                            <ion-icon size=\"small\" name=\"help-circle\"></ion-icon>\n                        </ion-button>\n                    </ion-buttons>\n                </div>\n            </ion-item-divider>\n\n            <ion-item-divider *ngIf=\"isAuthenticated\" (click)=\"goToTransactions()\" style=\"cursor: pointer;\">\n                <ion-label style=\"font-family: 'Source Sans Pro'; color: #1d1d1d;\">\n                    Bekijk je vouchers\n                </ion-label>\n                \n                <div slot=\"end\" class=\"r-flex r-flex-h-space-between r-flex-v-center\">\n                    <ion-badge color=\"secondary\">\n                        {{ vouchersCount }}\n                    </ion-badge>\n                    <ion-buttons style=\"margin-left: 15px; margin-right: 5px; z-index: 1;\">\n                        <ion-button slot=\"icon-only\" fill=\"solid\" color=\"light\">\n                            <ion-icon size=\"small\" name=\"arrow-forward\"></ion-icon>\n                        </ion-button>\n                    </ion-buttons>\n                </div>\n            </ion-item-divider>\n\n            <ion-item-divider style=\"padding-top: 30px;\">\n                <ion-label style=\"font-family: 'Source Sans Pro'; color: #1d1d1d;\">\n                    <b>Spaarshop</b><br>\n                    {{ gifts.length }} gifts beschikbaar\n                </ion-label>\n                <ion-buttons slot=\"end\" style=\"margin-right: 5px; z-index: 1;\">\n                    <ion-button slot=\"icon-only\" (click)=\"openSort()\" fill=\"solid\"\n                        [color]=\"currentSort && currentSort.value !== '0' ? 'success' : 'light'\">\n                        <ion-icon size=\"small\" name=\"funnel\"></ion-icon>\n                    </ion-button>\n                    <ion-button slot=\"icon-only\" (click)=\"openFilters()\" fill=\"solid\"\n                        [color]=\"currentFilter && currentFilter.id !== 0 ? 'success' : 'light'\">\n                        <ion-icon size=\"small\" name=\"options\"></ion-icon>\n                    </ion-button>\n                </ion-buttons>\n            </ion-item-divider>\n\n            <div>\n\n                <div *ngFor=\"let gift of gifts\" class=\"gift\" (click)=\"openGiftDetail(gift)\">\n                    <div class=\"gift-image\" [ngStyle]=\"{'background-image': 'url(' + gift.image + ')'}\" style=\"flex: 1 0 35%; margin-top: 10px; margin-bottom: 10px;\">\n                        <rope-points [value]=\"gift.price\" size=\"small\" [widthAuto]=\"true\"\n                            style=\"position: absolute; bottom: 10px; left: 5px;\"></rope-points>\n                        <div style=\"position: absolute; top: 10px; left: 5px; border: 1px solid black; border-radius: 10px;\">\n                            <img style=\"height: 50px; border: 5px white solid; background-color: white; border-radius: 10px;\" [src]=\"gift.loyalty_gift_partner.image_url\">\n                        </div>\n                    </div>\n                    <div style=\"flex: 1 0 65%; padding: 20px; position: relative; display: flex; justify-content: space-between; align-items: center;\" class=\"text-container\">\n\n                        <ion-progress-bar class=\"progress-bar\" [value]=\"getProgress(gift)\" color=\"tertiary\"></ion-progress-bar>\n                        <div>\n                            <div style=\"position: relative; z-index: 100000;\">\n                                <div class=\"gift-title ion-text-wrap\">{{ gift.name }}</div>\n                                <p>t.w.v. {{ gift.value | currency:'EUR':'symbol' }}</p>\n                                <div class=\"gift-category\">\n                                    <ion-icon name=\"pricetag\" color=\"dark\"></ion-icon>\n                                    {{ gift.loyalty_gift_category.name }}\n                                </div>\n                                <p>\n                                    <ng-container *ngIf=\"gift.has_stock\">Nog {{ gift.stock }} beschikbaar</ng-container>\n                                </p>\n                            </div>\n                        </div>\n                        <div>\n                            <ion-icon style=\"font-size: 2.5rem;\" name=\"chevron-forward\"></ion-icon>\n                        </div>\n\n                    </div>\n                </div>\n\n            </div>\n\n        </div>\n\n    </div>\n\n</ng-container>","import { Component, Input, OnInit } from '@angular/core';\n\n@Component({\n  selector: 'rope-startup-loading',\n  templateUrl: './startup-loading.component.html',\n  styleUrls: ['./startup-loading.component.scss']\n})\nexport class StartupLoadingComponent implements OnInit {\n\n  @Input() public logoUrl;\n\n  constructor() { }\n\n  ngOnInit(): void {\n  }\n\n}\n","<!-- <div class=\"load-page\">\n    <ion-spinner name=\"dots\" color=\"secondary\"></ion-spinner>\n</div>\n -->\n\n<ion-header>\n\n    <ion-toolbar color=\"light\">\n\n        <ion-title>\n            <ion-skeleton-text animated style=\"width: 20%\"></ion-skeleton-text>\n        </ion-title>\n\n    </ion-toolbar>\n\n</ion-header>\n\n<ion-content>\n\n    <div class=\"ion-padding\">\n        <ion-skeleton-text animated style=\"width: 100%; line-height: 500px;\"></ion-skeleton-text>\n    </div>\n\n    <ion-grid>\n        <ion-row>\n            <ion-col size=\"6\" size-lg=\"3\" *ngFor=\"let key of [1,2,3,4,5,6,7,8]\">\n                <ion-item>\n                    <ion-thumbnail slot=\"start\">\n                        <ion-skeleton-text animated></ion-skeleton-text>\n                    </ion-thumbnail>\n                    <ion-label>\n                        <h3>\n                            <ion-skeleton-text animated style=\"width: 50%\"></ion-skeleton-text>\n                        </h3>\n                        <p>\n                            <ion-skeleton-text animated style=\"width: 80%\"></ion-skeleton-text>\n                        </p>\n                        <p>\n                            <ion-skeleton-text animated style=\"width: 60%\"></ion-skeleton-text>\n                        </p>\n                    </ion-label>\n                </ion-item>\n            </ion-col>\n        </ion-row>\n    </ion-grid>\n\n</ion-content>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { AlertController, LoadingController, ModalController } from '@ionic/angular';\nimport { Subscription } from 'rxjs';\nimport { AuthService } from '../../../services/auth.service';\nimport { CoreService } from '../../../services/core.service';\nimport { LoyaltyService } from '../../../services/loyalty.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\n\n@Component({\n  selector: 'rope-loyalty-gift-detail',\n  templateUrl: './loyalty-gift-detail.component.html',\n  styleUrls: ['./loyalty-gift-detail.component.scss']\n})\nexport class LoyaltyGiftDetailComponent implements OnInit {\n\n  @Input() public loyaltyGiftId;\n\n  @Output() public navigate = new EventEmitter<string>();\n  @Output() public navigateBack = new EventEmitter();\n\n  @Output() public modalLogin = new EventEmitter();\n\n  public currentUser;\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  public gift;\n\n  constructor(\n    private loyaltyService: LoyaltyService,\n    private screensizeService: ScreensizeService,\n    private coreService: CoreService,\n    public authService: AuthService,\n    private alertCtrl: AlertController,\n    private loadingCtrl: LoadingController,\n    private modalCtrl: ModalController\n  ) { }\n\n  ngOnInit() {\n\n    this.screensizeObserver = this.screensizeService.isDesktopView().subscribe(isDesktop => {\n      this.isDesktop = isDesktop;\n    });\n\n    this.currentUser = this.authService.getCurrentUser();\n    this.loadGift(this.loyaltyGiftId);\n\n  }\n\n  ngOnDestroy() {\n    if (this.screensizeObserver) {\n      this.screensizeObserver.unsubscribe();\n    }\n  }\n\n  public loadGift(id?) {\n\n    if (!id) {\n      id = this.loyaltyGiftId;\n    }\n\n    this.gift = undefined;\n    this.loyaltyService.getOneGift(id).subscribe(r => {\n      this.gift = r[0];\n    }, error => {\n      this.coreService.showAlert(error);\n    });\n\n  }\n\n  public async getVoucher() {\n\n    const load = await this.loadingCtrl.create({\n      message: 'Laden...'\n    });\n    await load.present();\n\n    this.loyaltyService.claimGift(this.gift.id).subscribe(async r => {\n      \n      load.dismiss();\n      const alert = await this.alertCtrl.create({\n        header: 'Gelukt!',\n        subHeader: 'Je hebt een nieuwe voucher',\n        message: 'We hebben de voucher toegevoegd aan je account, je kunt deze meteen gaan inwisselen.',\n        cssClass: 'custom-alert',\n        buttons: ['Oké']\n      });\n\n      alert.onDidDismiss().then(() => {\n        this.navigate.emit('/loyalty-gift-shop');\n      });\n\n      await alert.present();\n\n    }, error => {\n      load.dismiss();\n      this.coreService.showAlert(error);\n    });\n\n  }\n\n  public goBack() {\n    this.navigateBack.emit();\n  }\n\n  public async triggerLogin() {\n    this.modalLogin.emit();\n  }\n\n}\n","<rope-back-button\n    *ngIf=\"isDesktop\"\n    (navigateBack)=\"goBack()\"\n></rope-back-button>\n\n<div *ngIf=\"!gift\" style=\"display: flex; align-items: center; justify-content: center; width: 100%; height: 50vh;\">\n    <rope-loading></rope-loading>\n</div>\n\n<ion-grid *ngIf=\"gift\" class=\"ion-no-padding\">\n\n    <ion-row class=\"blocks\">\n\n        <ion-col size=\"12\" size-lg=\"4\" style=\"min-height: 300px;\">\n            <div class=\"gift-image\" [style.background-image]=\"'url(' + gift.image + ')'\"></div>\n        </ion-col>\n        \n        <div class=\"block\"></div>\n        <ion-col size=\"12\" size-lg=\"4\" class=\"block\">\n\n            <ion-card-header>\n                <ion-card-title>{{ gift.name }}</ion-card-title>\n                <ion-card-subtitle>t.w.v. {{ gift.value | currency:'EUR':'symbol' }}</ion-card-subtitle>\n            </ion-card-header>\n\n            <div class=\"block-text\">\n\n                <div class=\"ion-text-center\">\n\n                    <rope-points [value]=\"gift.price\" size=\"big\" [widthAuto]=\"true\"></rope-points>\n\n                    <ng-container *ngIf=\"authService.isAuthenticated()\">\n\n                        <div style=\"margin-top: 25px;\" *ngIf=\"gift.price <= currentUser['points']\">\n                            <ion-button size=\"big\" color=\"cta\" style=\"font-weight: 700;\" (click)=\"getVoucher()\">\n                                <ion-label style=\"color: black;\">Selecteer deze voucher</ion-label>\n                            </ion-button>\n                            <div style=\"margin-left: 10px; margin-right: 10px;\">\n                                <ion-note style=\"font-size: 0.9rem; color: grey;\">\n                                    Door op bovenstaande knop te klikken ga je ermee akkoord dat je puntenaantal wordt\n                                    verminderd met {{\n                                    gift.price }}\n                                    punten. Dit is niet terug te draaien.\n                                </ion-note>\n                            </div>\n                        </div>\n                        <div style=\"margin-top: 25px;\" *ngIf=\"gift.price > currentUser['points']\">\n                            <ion-button size=\"big\" color=\"warning\" fill=\"outline\" style=\"font-weight: 700;\">\n                                Nog {{ gift.price - currentUser['points'] }} punten nodig\n                            </ion-button>\n                            <div style=\"margin-left: 10px; margin-right: 10px;\">\n                                <ion-note style=\"font-size: 0.9rem; color: grey;\">\n                                    Nog even doorsparen en dan kun je deze voucher hier selecteren. Wacht je nog op punten en weet je zeker dat je niks meer gaat retourneren? Neem dan even contact met ons op.\n                                </ion-note>\n                            </div>\n                        </div>\n\n                    </ng-container>\n\n                    <ng-container *ngIf=\"!authService.isAuthenticated()\">\n\n                        <div style=\"margin-top: 25px;\">\n                            <ion-button size=\"big\" color=\"secondary\" fill=\"outline\" style=\"font-weight: 700;\" (click)=\"triggerLogin()\">\n                                Inloggen/Registreren\n                            </ion-button>\n                            <div style=\"margin-left: 10px; margin-right: 10px;\">\n                                <ion-note style=\"font-size: 0.9rem; color: grey;\">\n                                    Je moet een account hebben met voldoende punten om deze loyalty gift te kunnen kopen.\n                                </ion-note>\n                            </div>\n                        </div>\n\n                    </ng-container>\n\n                </div>\n\n            </div>\n\n        </ion-col>\n\n        <ion-col size=\"12\" size-lg=\"4\" class=\"block\">\n            <ion-card-header>\n                <ion-card-title>Over deze voucher</ion-card-title>\n            </ion-card-header>\n            <ion-card-content style=\"white-space: pre-line;\" class=\"block-text ion-text-center\">\n                {{ gift.description }}<br><br>\n                <i></i>\n            </ion-card-content>\n        </ion-col>\n\n        <ion-col size=\"12\" size-lg=\"4\" class=\"block\">\n            <ion-card-header>\n                <ion-card-title>Partner</ion-card-title>\n                <ion-card-subtitle>Deze voucher wordt je aangeboden door</ion-card-subtitle>\n            </ion-card-header>\n            <ion-card-content class=\"block-text ion-text-center\">\n                <img [src]=\"gift.loyalty_gift_partner.image_url\">\n            </ion-card-content>\n        </ion-col>\n\n        <ion-col size=\"12\" size-lg=\"4\" class=\"block\">\n            <ion-card-header>\n                <ion-card-title>Over deze partner</ion-card-title>\n                <ion-card-subtitle>{{ gift.loyalty_gift_partner.name }}</ion-card-subtitle>\n            </ion-card-header>\n            <ion-card-content class=\"block-text ion-text-center\">\n                {{ gift.loyalty_gift_partner.description }}\n            </ion-card-content>\n        </ion-col>\n\n    </ion-row>\n\n</ion-grid>","import { DatePipe } from '@angular/common';\nimport { Component, EventEmitter, OnInit, Output, ViewChild } from '@angular/core';\nimport { AlertController } from '@ionic/angular';\nimport { Subscription } from 'rxjs';\nimport { CoreService } from '../../../services/core.service';\nimport { LoyaltyService } from '../../../services/loyalty.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\n\n@Component({\n  selector: 'rope-loyalty-gift-vouchers',\n  templateUrl: './loyalty-gift-vouchers.component.html',\n  styleUrls: ['./loyalty-gift-vouchers.component.scss']\n})\nexport class LoyaltyGiftVouchersComponent implements OnInit {\n\n  @Output() public navigate = new EventEmitter();\n  @Output() public navigateBack = new EventEmitter();\n\n  @Output() public navigateToScanner = new EventEmitter();\n\n  public lgts: any[];\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  constructor(\n    private loyaltyService: LoyaltyService,\n    public alertCtrl: AlertController,\n    private coreService: CoreService,\n    private datePipe: DatePipe,\n    private screensizeService: ScreensizeService\n  ) { }\n\n  ngOnInit() {\n\n    this.screensizeObserver = this.screensizeService.isDesktopView().subscribe(isDesktop => {\n      this.isDesktop = isDesktop;\n    });\n\n    this.loadTransactions();\n\n  }\n\n  ngOnDestroy() {\n    if (this.screensizeObserver) {\n      this.screensizeObserver.unsubscribe();\n    }\n  }\n\n  public loadTransactions() {\n\n    this.loyaltyService.getLoyaltyGiftTransactions().subscribe(r => {\n      this.lgts = r;\n    }, error => {\n      this.coreService.showAlert(error);\n    });\n\n  }\n\n  async takePicture(lgt) {\n\n    this.navigateToScanner.emit({\n      key: lgt.loyalty_gift.loyalty_gift_category.key,\n      location: lgt.loyalty_gift.loyalty_gift_category.name,\n      backgroundImage: lgt.loyalty_gift.image,\n      cardCode: lgt.card_code,\n      giftName: lgt.loyalty_gift.name\n    });\n\n  }\n\n  public goBack() {\n    this.navigateBack.emit();\n  }\n\n  public async manualCode(giftName, cardCode) {\n\n    const alert = await this.alertCtrl.create({\n      header: 'Voer de locatie code in',\n      buttons: [{\n        text: 'Oke',\n        role: 'apply'\n      }, \n      {\n        text: 'Annuleer',\n        role: 'cancel'\n      }],\n      inputs: [\n        {\n          id: 'code',\n          name: 'code',\n          placeholder: 'Locatie code...',\n        },\n      ],\n    });\n\n    alert.onDidDismiss().then(data => {\n\n      if (data.role === 'apply') {\n\n        const code = data.data.values.code;\n        this.loyaltyService.scanGift(code, cardCode).subscribe(r => {\n          this.coreService.showSuccess('Een cadeautje van ons', giftName, 'Laat deze melding zien aan de medewerker op locatie om de gift te ontvangen.<br><br>Tijdstip scan: '+this.datePipe.transform(new Date(), 'short'));\n          this.loadTransactions();\n        }, error => {\n          this.coreService.showAlert(error);\n        });\n        \n      }\n\n    })\n\n    await alert.present();\n\n  }\n\n}\n","<rope-back-button\n    *ngIf=\"isDesktop\"\n    (navigateBack)=\"goBack()\"\n></rope-back-button>\n\n<div style=\"margin-left: 10px; margin-right: 10px;\" class=\"ion-text-center ion-padding\">\n    <ion-note style=\"font-size: 1.1rem; color: grey;\" class=\"ion-text-center ion-text-wrap\">\n        Inleveren doe je door de partner-code te scannen op de locatie van het bedrijf dat de voucher\n        heeft uitgegeven. De camera van je telefoon opent automatisch als je op de knop klikt. Opent de camera niet, kun je de locatiecode handmatig invullen.\n    </ion-note>\n</div>\n\n<div class=\"blocks\">\n\n    <div *ngIf=\"lgts && lgts.length > 0\">\n        <div *ngFor=\"let lgt of lgts\" class=\"gift\" [ngClass]=\"lgt.timestamp_redeemed ? 'chng-opac' : ''\">\n\n            <div class=\"gift-image\" [style.background-image]=\"'url(' + lgt.loyalty_gift.image + ')'\"\n                [ngClass]=\"lgt.timestamp_redeemed ? 'bg-gray' : ''\">\n                <rope-points [value]=\"lgt.loyalty_gift.price\" size=\"big\" [widthAuto]=\"true\"\n                    style=\"position: absolute; bottom: 10px; left: 50%; transform: translateX(-50%);\"></rope-points>\n            </div>\n            <div class=\"text-container\">\n                <div class=\"gift-title\" text-wrap>{{ lgt.loyalty_gift.name }}</div>\n                <p>t.w.v. {{ lgt.loyalty_gift.value | currency:'EUR':'symbol' }}</p>\n                <br>\n                <p class=\"ion-text-wrap\"><i>In te wisselen bij {{ lgt.loyalty_gift.supplier_name }}</i></p>\n                <p class=\"ion-text-wrap\"><i>Gekocht op {{ lgt.timestamp | date:'medium' }}</i></p>\n                <p class=\"ion-text-wrap\" *ngIf=\"lgt.timestamp_redeemed\"><i>Ingeleverd op {{ lgt.timestamp_redeemed | date:'medium' }}</i>\n                </p>\n\n                <ng-container *ngIf=\"!lgt.timestamp_redeemed\">\n                    <ion-button size=\"small\" color=\"cta\" style=\"font-weight: 700;\" (click)=\"takePicture(lgt)\">\n                        INLEVEREN\n                    </ion-button>\n                </ng-container>\n\n            </div>\n\n        </div>\n    </div>\n    <div *ngIf=\"!lgts || lgts.length === 0\">\n        <ion-label>Nog geen vouchers gevonden</ion-label>\n    </div>\n\n</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { CartService } from '../../../services/cart.service';\nimport { CoreService } from '../../../services/core.service';\nimport { CouponService } from '../../../services/coupon.service';\nimport { PaymentService } from '../../../services/payment.service';\n\ndeclare var AdyenCheckout;\n\n@Component({\n  selector: 'rope-cart-payment',\n  templateUrl: './cart-payment.component.html',\n  styleUrls: ['./cart-payment.component.scss']\n})\nexport class CartPaymentComponent implements OnInit {\n\n  public paymentMethods;\n  public order;\n  public paymentProvider;\n\n  public adyenConfig;\n\n  public selectedPaymentMethodId;\n  public firstPaymentMethod;\n\n  public couponLoading = false;\n  public couponInput;\n  public couponError;\n\n  @Input() public loading = true;\n  @Output() public loadingChange = new EventEmitter();\n\n  constructor(\n    public cartService: CartService,\n    public coreService: CoreService,\n    public paymentService: PaymentService,\n    public couponService: CouponService\n  ) { }\n\n  async ngOnInit() {\n    this.paymentProvider = (await this.paymentService.getCurrentPaymentProvider().toPromise())['name'];\n    this.order = this.cartService.getCurrentOrder();\n    this.loadPaymentMethods();\n  }\n\n  public compareWith(o1: any, o2: any) {\n    return o1 && o2 ? o1.id === o2.id : o1 === o2;\n  }\n\n  public loadPaymentMethods() {\n\n    if (this.paymentProvider === \"adyen\") {\n      this.paymentService\n        .getPaymentMethodsAdyen(this.getTotalCost())\n        .subscribe((paymentMethods) => {\n          const configuration = this.getAdyenConfig(\n            this.order.id,\n            paymentMethods\n          );\n          const checkout = new AdyenCheckout(configuration);\n          const dropin = checkout.create(\"dropin\").mount(\"#dropin-container\");\n        });\n    } else if (this.paymentProvider === \"omnikassa_v2\") {\n\n      this.paymentService\n        .getPaymentMethods(this.order[\"address\"].country_code)\n        .subscribe((res) => {\n          this.paymentMethods = res;\n        });\n\n    } else if (this.paymentProvider === \"paynl\") {\n\n      this.paymentService\n        .getPaymentMethodsPaynl(\n          this.order[\"address\"].country_code,\n          this.getTotalCost()\n        )\n        .subscribe((res) => {\n\n          for (let rr of res) {\n\n            if (rr.payment_option.name === 'Billink') {\n              rr.payment_option.name = 'Achteraf betalen';\n            }\n\n            if (rr.payment_option.payment_option_sub_list) {\n              rr.payment_options = Object.values(rr.payment_option.payment_option_sub_list);\n            }\n\n          }\n\n          this.paymentMethods = res;\n\n          if (this.order.payment !== undefined) {\n            this.selectedPaymentMethodId = this.order.payment.payment_method.id;\n          } else {\n            this.selectedPaymentMethodId = this.paymentMethods[0].id;\n          }\n\n          this.firstPaymentMethod = this.paymentMethods.find(pm => pm.id === this.selectedPaymentMethodId);\n\n          if (this.order.payment !== undefined && this.order.payment.payment_method.selectedSub !== undefined) {\n            this.firstPaymentMethod.selectedSub = this.order.payment.payment_method.selectedSub;\n          }\n\n          if (this.order.payment === undefined) {\n            this.order.payment = {\n              payment_method: this.firstPaymentMethod\n            }\n            this.storePayment();\n          }\n\n          this.loading = false;\n          this.loadingChange.emit();\n\n        });\n\n    }\n\n  }\n\n  public getTotalCost() {\n    return this.cartService.getTotalCost() - this.cartService.getDiscount();\n  }\n\n  public getAdyenConfig(transactionId, paymentMethods) {\n\n    if (!this.adyenConfig) {\n      return;\n    }\n\n    const configuration = {\n      paymentMethodsResponse: paymentMethods,\n      originKey: this.adyenConfig.originKey,\n      locale: this.adyenConfig.locale,\n      environment: this.adyenConfig.environment,\n      onSubmit: (state, dropin) => {\n        this.paymentService\n          .initPaymentAdyen(transactionId, state.data)\n          .subscribe(\n            (response) => {\n              if (response.action) {\n                dropin.handleAction(response.action);\n              } else {\n\n              }\n            },\n            (error) => {\n              this.coreService.showAlert(error);\n            }\n          );\n      },\n      onAdditionalDetails: (state, dropin) => {\n        this.paymentService\n          .submitPaymentDetailsAdyen(\n            transactionId,\n            state.data.details,\n            state.data.paymentData ? state.data.paymentData : undefined\n          )\n          .subscribe(\n            (response) => {\n              if (response.action) {\n                dropin.handleAction(response.action);\n              } else {\n\n              }\n            },\n            (error) => {\n              this.coreService.showAlert(error);\n            }\n          );\n      },\n    };\n\n    return configuration;\n\n  }\n\n  public removePromocode() {\n    this.order.promocode = undefined;\n    this.cartService.storeOrder();\n  }\n\n  public removeCoupon() {\n    this.order.coupon = undefined;\n    this.cartService.storeOrder();\n  }\n\n  public checkCoupon() {\n\n    if (this.couponLoading) {\n      return;\n    }\n\n    this.couponLoading = true;\n    this.couponService.checkUniversal(this.couponInput).subscribe(r => {\n\n      const type = r['type'];\n      if (type === 'promocode') {\n\n        if (this.order.promocode) {\n          this.couponError = 'Je hebt al een promotie code toegevoegd aan deze bestelling, en er kan maar 1 promotie code per bestelling gebruikt worden.';\n          this.couponInput = undefined;\n        } else {\n\n          const res = r['promocode'];\n\n          let total;\n          if (res['type'] === 'VALUE') {\n            total = res['amount'];\n          } else if (res['type'] === 'PERCENTAGE') {\n            total = this.cartService.getTotalCost() * res['amount'];\n          }\n\n          if (res['amount'] > this.cartService.getTotalCost()) {\n            this.couponError = 'De waarde van deze promotie (€' + res['amount'] + ') is groter dan het totaal van de bestelling (€' + this.cartService.getTotalCost() + '). Promotie codes kunnen online alleen in een keer opgebruikt worden.';\n            this.couponInput = undefined;\n          } else {\n            this.couponError = undefined;\n            res['coupon_code'] = this.couponInput;\n            this.cartService.setPromoCode(res);\n            this.couponInput = undefined;\n          }\n\n        }\n\n      } else if (type === 'coupon') {\n\n        if (this.order.coupon) {\n          this.couponError = 'Je hebt al een kortingskaart toegevoegd aan deze bestelling, en er kan maar 1 kortingskaart per bestelling gebruikt worden.';\n          this.couponInput = undefined;\n        } else {\n\n          const res = r['coupon'];\n          if (res.value > this.cartService.getTotalCost()) {\n            this.couponError = 'De waarde van deze kortingsbon (€' + res.value + ') is groter dan het totaal van de bestelling (€' + this.cartService.getTotalCost() + '). Kortingsbonnen kunnen online alleen in een keer opgebruikt worden.';\n            this.couponInput = undefined;\n          } else {\n            this.couponError = undefined;\n            res['coupon_code'] = this.couponInput;\n            this.cartService.setCoupon(res);\n            this.couponInput = undefined;\n          }\n\n        }\n\n      }\n\n      this.couponLoading = false;\n\n    }, (error) => {\n      this.couponInput = undefined;\n      this.couponError = error.error.localized_message;\n      this.couponLoading = false;\n    });\n\n  }\n\n  public storePayment(event?) {\n    if (event) {\n      const selectedSub = event.detail.value;\n      this.order.payment.payment_method.selectedSub = selectedSub;\n    }\n    this.cartService.storeOrder();\n  }\n\n  public selectPaymentMethod(paymentMethod) {\n\n    if (this.selectedPaymentMethodId === paymentMethod.id) {\n    \n      this.selectedPaymentMethodId = undefined;\n      this.order.payment = undefined;\n\n    } else {\n\n      this.selectedPaymentMethodId = paymentMethod.id;\n      this.order.payment = {\n        payment_method: this.paymentMethods.find(pm => pm.id === this.selectedPaymentMethodId)\n      };\n\n    }\n\n    this.cartService.storeOrder();\n\n  }\n\n}\n","<div *ngIf=\"paymentProvider === 'adyen'\">\n    <div id=\"dropin-container\"></div>\n</div>\n\n<div *ngIf=\"paymentProvider === 'omnikassa_v2'\">\n\n    <ion-list *ngIf=\"loading\"\n        style=\"min-height: 200px; display: flex; align-items: center; justify-content: center;\">\n        <ion-spinner style=\"font-size: 4.0rem;\" name=\"crescent\">\n        </ion-spinner>\n    </ion-list>\n\n    <ion-list *ngIf=\"!loading\" class=\"omnikassa-payment-methods\">\n        <ion-item *ngFor=\"let paymentMethod of paymentMethods\">\n            <ion-avatar slot=\"start\">\n                <img [src]=\"paymentMethod.images[0].url\" class=\"custom-avatar\">\n            </ion-avatar>\n            <ion-label>\n                <h2 class=\"ion-text-wrap\">{{ paymentMethod.localized_name }}</h2>\n                <p class=\"ion-text-wrap\" style=\"font-size: 1.0rem;\">{{ paymentMethod.oneliner }}</p>\n            </ion-label>\n            \n        </ion-item>\n    </ion-list>\n\n</div>\n\n<div *ngIf=\"paymentProvider === 'paynl'\">\n\n    <div *ngIf=\"loading\" style=\"width: 100%; height: 50vh;\">\n        <rope-loading [text]=\"'Betaalmethoden laden...'\"></rope-loading>\n    </div>\n\n    <ng-container *ngIf=\"!loading\">\n\n        <ion-accordion-group style=\"margin-bottom: 15px;\">\n            <ion-accordion toggle-icon=\"arrow-down-circle-outline\">\n                <ion-item slot=\"header\">\n                    <ion-label class=\"r-h3\" style=\"text-decoration: underline;\">Kortingscode inleveren</ion-label>\n                </ion-item>\n                <ion-list slot=\"content\" style=\"padding-top: 0px; background-color: #f2f2f2;\">\n                    \n                    <ion-item style=\"--background: #f2f2f2; margin: 10px;\">\n                        <ion-input [(ngModel)]=\"couponInput\" placeholder=\"Kortingcode...\" class=\"r-h2\" (keyup.enter)=\"checkCoupon()\"></ion-input>\n                        <ion-button slot=\"end\" color=\"secondary\" (click)=\"checkCoupon()\" [disabled]=\"couponLoading\">\n                            <div *ngIf=\"!couponLoading\">Inwisselen</div>\n                            <ion-spinner *ngIf=\"couponLoading\" name=\"crescent\"></ion-spinner>\n                        </ion-button>\n                    </ion-item>\n                    <ion-item lines=\"none\" *ngIf=\"couponError\" style=\"--background: #f2f2f2;\">\n                        <ion-label class=\"ion-text-wrap\">\n                            <div class=\"r-h2\" style=\"color: var(--ion-color-danger);\">{{ couponError }}</div>\n                        </ion-label>\n                    </ion-item>\n\n                    <ion-item lines=\"none\" *ngIf=\"order.coupon\" style=\"cursor: pointer; --background: #f2f2f2;\">\n                        <ion-button slot=\"start\" size=\"small\" color=\"danger\" (click)=\"removeCoupon()\" class=\"button-extra-small\">\n                            <ion-icon name=\"trash\" slot=\"icon-only\" style=\"font-size: 1.3rem;\"></ion-icon>\n                        </ion-button>\n                        <ion-label style=\"display: flex; align-items: center;\">\n                            <div>\n                                <div class=\"ion-text-wrap r-h2\" color=\"pending\">\n                                    Kortingskaart:\n                                    {{ order.coupon.coupon_code }}</div>\n                                <p class=\"text-wrap\">t.w.v. {{ order.coupon.value | currency:'EUR':'symbol' }}</p>\n                            </div>\n                        </ion-label>\n                    </ion-item>\n                    \n                    <ion-item lines=\"none\" *ngIf=\"order.promocode\" style=\"cursor: pointer; --background: #f2f2f2;\">\n                        <ion-button slot=\"start\" size=\"small\" color=\"danger\" (click)=\"removePromocode()\" class=\"button-extra-small\">\n                            <ion-icon name=\"trash\" slot=\"icon-only\" style=\"font-size: 1.3rem;\"></ion-icon>\n                        </ion-button>\n                        <ion-label style=\"display: flex; align-items: center;\">\n                            <div>\n                                <h2 text-wrap color=\"pending\" style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.5rem;\">\n                                    Promotie code: {{ order.promocode.code }}</h2>\n                                <p class=\"text-wrap\" *ngIf=\"order.promocode.type === 'VALUE'\">t.w.v.\n                                    {{ order.promocode.amount | currency:'EUR':'symbol' }}</p>\n                                <div class=\"text-wrap\" *ngIf=\"order.promocode.type === 'PERCENTAGE'\">\n                                    <p>t.w.v. {{ order.promocode.amount | percent }}</p>\n                                    <div class=\"shipment-time-holder\" *ngIf=\"cartService.excludedOptionsText\">\n                                        <ion-icon name=\"pricetags\" color=\"light\"></ion-icon>\n                                        <div>\n                                            <h3 class=\"first-letter-uppercase ion-text-wrap\">{{ cartService.excludedOptionsText }}</h3>\n                                        </div>\n                                    </div>\n                                </div>\n                            </div>\n                        </ion-label>\n                    </ion-item>\n\n                </ion-list>\n            </ion-accordion>\n        </ion-accordion-group>\n\n        <ion-accordion-group [value]=\"firstPaymentMethod\">\n\n            <ion-list class=\"omnikassa-payment-methods\">\n                \n                <ion-radio-group [(ngModel)]=\"selectedPaymentMethodId\">\n                    <ion-accordion *ngFor=\"let paymentMethod of paymentMethods\" [value]=\"paymentMethod\">\n                        \n                        <ion-item slot=\"header\" (click)=\"selectPaymentMethod(paymentMethod)\">\n                            <ion-radio color=\"secondary\" slot=\"start\" [value]=\"paymentMethod.id\"></ion-radio>\n                            <ion-avatar slot=\"start\">\n                                <img [src]=\"paymentMethod.payment_option.image\" class=\"custom-avatar\">\n                            </ion-avatar>\n                            <ion-label>\n                                <div class=\"ion-text-wrap r-h2\">{{ paymentMethod.payment_option.name }}</div>\n                                <div class=\"ion-text-wrap r-h3\">{{ paymentMethod.oneliner }}</div>\n                            </ion-label>\n                        </ion-item>\n\n                        <ion-list slot=\"content\" style=\"padding-top: 0px; background-color: #f2f2f2;\">\n\n                            <ion-item lines=\"none\" *ngIf=\"paymentMethod.name === 'ideal'\" style=\"--background: #f2f2f2; margin-top: 10px; margin-bottom: 10px; border: 1px solid gray; border-radius: 10px; margin-left: 10px; margin-right: 10px;\">\n                                <ion-label class=\"force-stacked-label\" position=\"stacked\">Kies je bank</ion-label>\n                                <ion-select class=\"r-h2\" interface=\"popover\" placeholder=\"...\" (ionChange)=\"storePayment($event)\" [value]=\"paymentMethod['selectedSub']\" [compareWith]=\"compareWith\">\n                                    <ion-select-option *ngFor=\"let opt of paymentMethod.payment_options\" [value]=\"opt\">\n                                        {{ opt['visible_name'] }}\n                                    </ion-select-option>\n                                </ion-select>\n                            </ion-item>\n\n                        </ion-list>\n                        \n                    </ion-accordion>\n                </ion-radio-group>\n\n\n            </ion-list>\n\n        </ion-accordion-group>\n\n    </ng-container>\n\n</div>","import { DatePipe } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { CookieService } from 'ngx-cookie-service';\nimport { lastValueFrom, Subscription } from 'rxjs';\nimport { Shipment } from '../../../models/shipment';\nimport { User } from '../../../models/user';\nimport { AnalyticsService } from '../../../services/analytics.service';\nimport { AuthService } from '../../../services/auth.service';\nimport { CartService } from '../../../services/cart.service';\nimport { CoreService } from '../../../services/core.service';\nimport { PaymentService } from '../../../services/payment.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\nimport { ShipmentService } from '../../../services/shipment.service';\nimport { UserAddressDetailsComponent } from '../user-address-details/user-address-details.component';\n\n@Component({\n  selector: 'rope-cart-checkout',\n  templateUrl: './cart-checkout.component.html',\n  styleUrls: ['./cart-checkout.component.scss']\n})\nexport class CartCheckoutComponent implements OnInit {\n\n  @ViewChild('ropeUserAddressDetails') ropeUserAddressDetails: UserAddressDetailsComponent;\n  @Input() public version;\n\n  @Output() public onModalAutocomplete = new EventEmitter();\n  @Output() public onLogin = new EventEmitter();\n  @Output() public onNoPaymentNeeded = new EventEmitter();\n\n  @Output() public onGoToShopDetail = new EventEmitter();\n  @Output() public onGoToShop = new EventEmitter();\n  @Output() public onGoToTerms = new EventEmitter();\n  @Output() public onGoToShoppingBag = new EventEmitter();\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  public activeStep = 1;\n  public steps = [\n    {\n      id: 1,\n      name: 'Gegevens',\n      active: false,\n      done: false,\n      isLoading: () => false,\n      initialize: () => this.checkUser(),\n      checkDone: () => this.checkUserDone(),\n      finalize: () => this.saveUser()\n    },\n    {\n      id: 2,\n      name: 'Bezorgmethode',\n      active: false,\n      done: false,\n      isLoading: () => this.shipmentLoading,\n      initialize: () => this.checkShipment(),\n      checkDone: () => this.checkShipmentDone(),\n      finalize: () => this.trackAddShippingInfo()\n    },\n    {\n      id: 3,\n      name: 'Betaalmethode',\n      active: false,\n      done: false,\n      isLoading: () => this.paymentLoading,\n      initialize: () => this.checkPayment(),\n      checkDone: () => this.checkPaymentDone(),\n      finalize: () => this.trackAddPaymentInfo()\n    },\n    {\n      id: 4,\n      name: 'Overzicht',\n      active: false,\n      done: false,\n      isLoading: () => false,\n      initialize: () => true,\n      checkDone: () => true,\n      finalize: () => true\n    }\n  ];\n\n  public order;\n\n  public showUserInformation = false;\n  public currentUser;\n\n  public shipmentLoading = true;\n  public paymentLoading = true;\n\n  public placingOrder = false;\n\n  //Remote config files for ab testing\n  public showCostForPayingLater = false;\n\n  public wheelOfFortuneDiscount = true;\n\n  constructor(\n    public datePipe: DatePipe,\n    public coreService: CoreService,\n    public authService: AuthService,\n    public cartService: CartService,\n    public cookieService: CookieService,\n    public analyticsService: AnalyticsService,\n    public shipmentService: ShipmentService,\n    public screensizeService: ScreensizeService,\n    public paymentService: PaymentService\n  ) { }\n\n  async ngOnInit() {\n\n    this.screensizeObserver = this.screensizeService\n    .isDesktopView()\n    .subscribe((isDesktop) => {\n      this.isDesktop = isDesktop;\n    });\n\n    this.showUserInformation = this.authService.isAuthenticated();\n    this.currentUser = this.authService.getCurrentUser();\n    \n    await this.cartService.ready();\n\n    this.order = this.cartService.getCurrentOrder();\n    const fbpCookie = this.cookieService.get('_fbp');\n    const fbcCookie = this.cookieService.get('_fbc');\n\n    this.order.version = this.version;\n    this.order.user_agent = window.navigator.userAgent;\n    this.order.fbp_cookie = fbpCookie;\n    this.order.fbc_cookie = fbcCookie;\n\n    const firstStep = this.steps[0];\n    await firstStep.initialize();\n    firstStep.active = true;\n\n    //TODO: Create dynamic AB tests in system\n    // this.showCostForPayingLater = this.analyticsService.getRemoteConfigValue('cost_for_paying_later').asString() === '1';\n\n    this.trackCheckout();\n\n  }\n\n  public trackCheckout() {\n\n    const productIds = this.cartService.getProductIds();\n    this.cartService.calculatePromocodePercentageDiscount();\n\n    const totalCost = this.cartService.getTotalCost() - this.cartService.getDiscount();\n    this.analyticsService.trackInitiateCheckout(\n      totalCost,\n      productIds\n    );\n\n  }\n\n  public getCurrentStepWidth() {\n    const currentStep = this.steps.find(s => s.active);\n    const idActive = currentStep ? currentStep.id : 0;\n    return idActive / this.steps.length * 100;\n  }\n\n  public isCurrentStepLoading() {\n\n    const currentStep = this.steps.find(s => s.active);\n    if (!currentStep) {\n      return true;\n    }\n\n    return currentStep.isLoading();\n\n  }\n\n  public getNextStepText() {\n    const idActive = this.steps.findIndex(s => s.active);\n    return this.steps[idActive + 1].name.toLowerCase();\n  }\n\n  public isLastStepActive() {\n    return this.steps.findIndex(s => s.active) === this.steps.length-1;\n  }\n\n  public getActiveStep() {\n    const currentStep = this.steps.find(st => st.active);\n    return currentStep || { id: 0 };\n  }\n\n  public async goStepById(id) {\n    const step = this.steps.find(s => s.id === id);\n    this.goStep(step);\n  }\n\n  public async goStep(step) {\n\n    const newIndex = this.steps.findIndex(s => s.id === step.id);\n    for (let i = 0; i < newIndex; i++) {\n      const st = this.steps[i];\n      if (!st.done) {\n        return;\n      }\n    }\n\n    const idActive = this.steps.findIndex(s => s.active);\n    const prevStep = this.steps[idActive];\n    prevStep.active = false;\n\n    const stepInit = await step.initialize();\n    if (stepInit) {\n      step.active = true;\n    }\n\n  }\n\n  public async goNextStep() {\n    \n    const idActive = this.steps.findIndex(s => s.active);\n    const prevStep = this.steps[idActive];\n    const stepDone = await prevStep.finalize();\n\n    if (stepDone) {\n\n      prevStep.done = true;\n      prevStep.active = false;\n  \n      const nextStep = this.steps[idActive + 1];\n      const stepInit = await nextStep.initialize();\n      if (stepInit) {\n        nextStep.active = true;\n      }\n\n    }\n\n  }\n\n  public checkStepDone() {\n\n    const idActive = this.steps.findIndex(s => s.active);\n    if (idActive >= 0) {\n\n      const prevStep = this.steps[idActive];\n      const done = prevStep.checkDone();\n      prevStep.done = done;\n      return prevStep.done;\n\n    } else {\n      return false;\n    }\n\n  }\n\n  //GEGEVENS\n\n  public openModalAutocomplete(event) {\n    this.onModalAutocomplete.emit(event);\n  }\n\n  public parseUserDetails(type, d) {\n    this.ropeUserAddressDetails.parseAutocompleteResponse(type, d);\n  }\n\n  public triggerUser() {\n    this.currentUser = this.authService.getCurrentUser();\n    if (this.authService.isAuthenticated()) {\n      this.showUserInformation = true;\n    }\n  }\n\n  public checkUser() {\n\n    if (this.authService.isAuthenticated()) {\n      const idActive = this.steps.findIndex(s => s.id === 1);\n      const currentStep = this.steps[idActive];\n      currentStep.done = true;\n    }\n\n    return Promise.resolve(true);\n\n  }\n\n  public checkUserDone() {\n\n    //TODO: convert to checking with the form models\n\n    const fieldsFilled = \n      this.currentUser.first_name &&\n      this.currentUser.last_name &&\n      this.currentUser.username &&\n      this.currentUser.telephone_number &&\n      this.currentUser.postal_code &&\n      this.currentUser.house_number &&\n      this.currentUser.street &&\n      this.currentUser.city;\n\n    const fieldsValid = this.currentUser.telephone_number && this.currentUser.telephone_number.length >= 10;\n\n    return (fieldsFilled || this.authService.isAuthenticated()) && fieldsValid;\n  }\n\n  public moveOnAsGuest() {\n    this.currentUser = new User();\n    this.showUserInformation = true;\n  }\n\n  public login() {\n    this.onLogin.emit();\n  }\n\n  public async saveUser() {\n\n    const address = [];\n    address[\"street\"] = this.currentUser.street;\n    address[\"house_number\"] = this.currentUser.house_number;\n    address[\"house_number_extension\"] = this.currentUser.house_number_extension;\n    address[\"postal_code\"] = this.currentUser.postal_code;\n    address[\"city\"] = this.currentUser.city;\n    address[\"country_code\"] = this.currentUser.country_code;\n    this.cartService.setAddress(address, false);\n    this.order['address'] = address;\n\n    try {\n\n      if (this.currentUser.id !== undefined) {\n\n        const updateRes = await lastValueFrom(this.authService.updateUser(this.currentUser));\n        const storeRes = await this.authService.storeUser(this.currentUser);\n        \n        this.analyticsService.setUserData(this.currentUser);\n        this.cartService.syncWithServer();\n        \n        return Promise.resolve(true);\n\n      } else {\n\n        const registerRes = await lastValueFrom(this.authService.register(this.currentUser));\n        this.currentUser = registerRes;\n        const storeRes = await this.authService.storeUser(this.currentUser);\n        \n        this.analyticsService.setUserData(this.currentUser);\n        this.cartService.syncWithServer();\n        \n        return Promise.resolve(true);\n\n      }\n\n    } catch (ex) {\n      this.coreService.showAlert(ex);\n      return Promise.resolve(false);\n    }\n\n  }\n\n  //SHIPMENT\n\n  public checkShipment() {\n\n    this.shipmentLoading = true;\n    if (this.order.shipment && this.order.shipment.shipping_method) {\n\n      const delay = this.order.order_lines.some(\n        (ol) => ol.productVariant.stocks[0].stock_level === 0\n      );\n\n      let extraDelay = 0;\n      let orderLinesDelayed = this.order.order_lines.filter(\n        (ol) => ol.productPreorder !== undefined\n      );\n      if (orderLinesDelayed.length > 0) {\n        let deliveryDate = Math.max(\n          ...orderLinesDelayed.map(\n            (ol) => ol.productPreorder.timestamp_delivery\n          )\n        );\n        let diff = Math.ceil(\n          (deliveryDate - new Date().getTime()) / (1000 * 60 * 60 * 24)\n        );\n        extraDelay = diff;\n      }\n\n      if (!this.shipmentIsPickup(this.order.shipment)) {\n\n        this.shipmentService\n          .getShippingTimeFrames(\n            this.order.shipment,\n            delay === true ? \"1\" : \"0\",\n            extraDelay,\n            this.getProductVariantList()\n          )\n          .subscribe((r) => {\n            let first;\n            if (this.order.shipment.shipping_method[\"shipping_courier\"]) {\n              first = r.filter(\n                (s) =>\n                  s.shipping_method[\"shipping_courier\"].id ===\n                  this.order.shipment.shipping_method[\"shipping_courier\"].id\n              )[0];\n            } else {\n              first = r[0];\n            }\n\n            if (\n              !first ||\n              this.order.shipment.timeframe_start < first.timeframe_start\n            ) {\n              this.order.shipment = undefined;\n              this.cartService.storeOrder();\n            }\n          });\n\n      } else {\n        \n      }\n    }\n\n    return Promise.resolve(true);\n\n  }\n\n  public getProductVariantList() {\n    const list = [];\n    for (let orderLine of this.order.order_lines) {\n      let amount = Number(orderLine.count);\n      while (amount > 0) {\n        list.push(orderLine.productVariant.id);\n        amount--;\n      }\n    }\n    return list;\n  }\n\n  public checkShipmentDone() {\n    return this.order.shipment !== undefined;\n  }\n\n  public getTimeInfo(shipment: Shipment) {\n    if (shipment.timeframe_end) {\n      return (\n        \"tussen \" +\n        this.datePipe.transform(shipment.timeframe_start, \"HH:mm\") +\n        \" en \" +\n        this.datePipe.transform(shipment.timeframe_end, \"HH:mm\")\n      );\n    } else {\n      return (\n        \"vanaf \" + this.datePipe.transform(shipment.timeframe_start, \"HH:mm\")\n      );\n    }\n  }\n\n  public shipmentIsPickup(shipment?) {\n    return (\n      this.order.shipment && this.order.shipment.shipping_method && (\n        this.order.shipment.shipping_method.name ===\n          \"ROPE_RETAIL_PICKUP_AT_SHOP\" ||\n        this.order.shipment.shipping_method.name === \"PICK_UP_AT_PICK_UP_POINT\" ||\n        this.order.shipment.shipping_method.name === \"BUDBEE_BOX_DELIVERY\"\n      )\n    );\n  }\n\n  public trackAddShippingInfo() {\n\n    const value = this.cartService.getTotalCost() - this.cartService.getDiscount();\n    const orderLines = this.order.order_lines;\n    const products = orderLines.map(ol => ol.product);\n\n    this.analyticsService.trackAddShippingInfo(value, products);\n\n    return true;\n\n  }\n\n  //PAYMENT\n\n  public checkPayment() {\n    this.paymentLoading = true;\n    return Promise.resolve(true);\n  }\n\n  public checkPaymentDone() {\n    const needsSubChoice = this.order.payment && this.order.payment.payment_method.name === 'ideal';\n    return this.order.payment !== undefined && (!needsSubChoice || (needsSubChoice && this.order.payment.payment_method.selectedSub !== undefined));\n  }\n\n  public trackAddPaymentInfo() {\n\n    const value = this.cartService.getTotalCost() - this.cartService.getDiscount();\n    const orderLines = this.order.order_lines;\n    const products = orderLines.map(ol => ol.product);\n\n    this.analyticsService.trackAddPaymentInfo(value, products);\n\n    return true;\n\n  }\n\n  //FINAL\n\n  public signupNewsletter(event) {\n    this.order[\"newsletterSignUp\"] = event.detail.checked;\n  }\n\n  public placeOrder() {\n    \n    this.placingOrder = true;\n    this.order['user'] = this.currentUser;\n    const cartIdentifier = this.cartService.getCartIdentifier();\n\n    const paymentProvider = this.order.payment.payment_method.payment_provider;\n    const paymentMethodId = this.order.payment.payment_method.id;\n    const paynlPaymentMethodId = this.order.payment.payment_method.payment_option.id;\n\n    let subId = undefined;\n    if (this.order.payment.payment_method.name === 'ideal') {\n      subId = this.order.payment.payment_method.selectedSub.id;\n    }\n\n    this.cartService.placeOrder(1, cartIdentifier).subscribe(placedOrder => {\n\n      this.order.id = placedOrder.id;\n      this.order['timestamp_start'] = placedOrder.timestamp_start;\n\n      const pay = placedOrder.total > 0;\n      if (pay) {\n        \n        if (paymentProvider === 'omnikassa_v2') {\n          this.doOmnikassaPayment(paymentMethodId);\n        } else if (paymentProvider === 'paynl') {\n          this.doPaynlInitPayment(paymentMethodId, paynlPaymentMethodId, subId);\n        }\n\n      } else {\n        this.onNoPaymentNeeded.emit({\n          orderId: this.order.id,\n          status: \"No payment needed\",\n        });\n      }\n\n    }, error => {\n      this.coreService.showAlert(error);\n      this.placingOrder = false;\n    });\n\n  }\n\n  public doOmnikassaPayment(paymentMethodId) {\n\n    const data = {\n      payment_method_id: paymentMethodId,\n    };\n\n    this.paymentService.initPaymentOmnikassa(this.order.id, data).subscribe(\n      (r) => {\n        this.coreService.openUrl(r.redirect_url);\n      },\n      (error) => {\n        this.coreService.showAlert(error);\n      }\n    );\n  }\n\n  public async doPaynlInitPayment(paymentMethodId, paynlPaymentMethodId, subId?) {\n\n    const data: any = {\n      payment_method_id: paymentMethodId,\n      paynl_payment_method_id: paynlPaymentMethodId,\n    };\n\n    if (subId) {\n      data.paynl_payment_option_sub_id = subId;\n    }\n    \n    this.paymentService.initPaymentPaynl(this.order.id, data).subscribe(\n      (r) => {\n\n        if (r.redirect_url === '' && r.status && r.status === 'NOT-READY') {\n          this.coreService.showAlert('Helaas is deze betaalmethode op dit moment niet beschikbaar. Probeer a.u.b. een andere betaalmethode.');\n        } else {\n          this.coreService.openUrl(r.redirect_url);\n        }\n\n      },\n      (error) => {\n        this.coreService.showAlert(error);\n      }\n    );\n  }\n\n  public goToShop() {\n    this.onGoToShop.emit();\n  }\n\n  public goToShopDetail($event) {\n    this.onGoToShopDetail.emit($event);\n  }\n\n  public goToTerms() {\n    this.onGoToTerms.emit();\n  }\n\n  public goToShoppingBag() {\n    this.onGoToShoppingBag.emit();\n  }\n\n}\n","<div class=\"ion-padding\">\n\n    <ion-grid>\n        <ion-row>\n            <ion-col size-lg=\"4\" *ngIf=\"isDesktop\">\n\n                <rope-cart-overview \n                    [readonly]=\"true\"\n                    (onGoToTerms)=\"goToTerms()\"\n                    (onGoToShop)=\"goToShop()\"\n                    (onGoToShopDetail)=\"goToShopDetail($event)\"\n                ></rope-cart-overview>\n\n            </ion-col>\n            <ion-col size=\"12\" size-lg=\"8\">\n                \n                <div class=\"r-flex r-flex-h-space-between r-flex-v-center\">\n                    <div class=\"r-h1\">Checkout</div>\n                    <ion-button fill=\"clear\" (click)=\"goToShoppingBag()\">\n                        <ion-icon slot=\"start\" name=\"arrow-back-circle-outline\" style=\"color: black; font-size: 1.3rem;\"></ion-icon>\n                        <ion-label class=\"r-h3\">Terug naar shopping bag</ion-label>\n                    </ion-button>\n                </div>\n                \n                <div class=\"checkout\">\n                    <div class=\"checkout-lines\">\n                        <div class=\"step-line\"></div>\n                        <div class=\"step-line-filled\" [ngStyle]=\"{ 'width': getCurrentStepWidth()+'%' }\">\n                            <ion-icon *ngIf=\"!isLastStepActive()\" name=\"arrow-forward\"></ion-icon>\n                        </div>\n                    </div>\n                    <div class=\"checkout-steps\">\n                        <div class=\"step\" *ngFor=\"let step of steps\" (click)=\"goStep(step)\">\n                            <div style=\"position: relative;\">\n                                <ion-icon [name]=\"step.active || step.done ? 'ellipse' : 'ellipse-outline'\"\n                                    [color]=\"step.active || step.done ? 'secondary' : 'medium'\"></ion-icon>\n                                <ion-icon *ngIf=\"step.done\" name=\"checkmark-circle\" color=\"cta\"\n                                    style=\"position: absolute; top: 50%; left: 50%; transform: translate(-52%, -70%); font-size: 1.5rem;\">\n                                </ion-icon>\n                            </div>\n                            <div class=\"r-h3\" style=\"user-select: none;\" [ngClass]=\"step.done ? 'underlined' : ''\">{{ step.name }}</div>\n                        </div>\n                    </div>\n                </div>\n                \n                <div>\n                \n                    <div *ngIf=\"getActiveStep().id === 1\">\n                \n                        <div class=\"r-h1\">Jouw gegevens</div>\n                \n                        <div *ngIf=\"!authService.isAuthenticated() && !showUserInformation\"\n                            style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px; margin-top: 25px;\">\n                \n                            <div class=\"r-h2 ion-padding\">\n                                Je kunt inloggen op een bestaande account of doorgaan als gast. Tijdens het afrekenen kun je gratis een\n                                account aanmaken.\n                            </div>\n                \n                            <ion-grid>\n                                <ion-row>\n                                    <ion-col size=\"12\">\n                                        <ion-button expand=\"block\" color=\"secondary\" (click)=\"moveOnAsGuest()\">\n                                            Doorgaan als gast\n                                        </ion-button>\n                                    </ion-col>\n                                    <ion-col size=\"12\" style=\"text-align: center;\">\n                                        OF\n                                    </ion-col>\n                                    <ion-col size=\"12\">\n                                        <ion-button expand=\"block\" color=\"secondary\" (click)=\"login()\">\n                                            Inloggen\n                                        </ion-button>\n                                    </ion-col>\n                                </ion-row>\n                            </ion-grid>\n                \n                        </div>\n                \n                        <div *ngIf=\"showUserInformation\">\n                \n                            <div\n                                style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px; margin-top: 25px; margin-bottom: 10px;\">\n                                <ion-item lines=\"none\">\n                                    <ion-label style=\"color: black; margin: 2px;\" class=\"r-h2\">\n                \n                                        <div *ngIf=\"authService.isAuthenticated() && !currentUser.is_guest\">\n                                            <div class=\"r-h3\">Ingelogd als:</div>\n                                            <div>\n                                                {{ currentUser.first_name }} {{ currentUser.last_name }}\n                                                <p>{{ currentUser.email }}</p>\n                                            </div>\n                                        </div>\n                                        <div *ngIf=\"!authService.isAuthenticated() || currentUser.is_guest\">\n                                            <div>Doorgaan als gast</div>\n                                        </div>\n                \n                                    </ion-label>\n                                    <ion-button slot=\"end\" color=\"secondary\"\n                                        *ngIf=\"!authService.isAuthenticated() || currentUser.is_guest\" (click)=\"login()\">\n                                        Toch inloggen?\n                                    </ion-button>\n                                </ion-item>\n                            </div>\n                \n                            <rope-user-basic-details \n                                [isCartCheckout]=\"true\" \n                                [(user)]=\"currentUser\"\n                            ></rope-user-basic-details>\n                \n                            <rope-user-address-details \n                                #ropeUserAddressDetails\n                                [isCartCheckout]=\"true\" \n                                [(user)]=\"currentUser\"\n                                (modalAutocomplete)=\"openModalAutocomplete($event)\"\n                            ></rope-user-address-details>\n                \n                        </div>\n                \n                    </div>\n                \n                </div>\n                \n                <div *ngIf=\"getActiveStep().id === 2\">\n                \n                    <div class=\"r-h1\">Kies een bezorgmethode</div>\n                \n                    <div *ngIf=\"!shipmentLoading\"\n                        style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px; margin-top: 25px; margin-bottom: 10px;\">\n                        <ion-item lines=\"none\">\n                            <ion-label style=\"color: black; margin: 2px;\" class=\"r-h2\">\n                                <p class=\"r-h3\">Bezorging op basis van adres:</p>\n                                <div class=\"r-h2\">{{ this.currentUser.street }} {{ this.currentUser.house_number }}<span\n                                        *ngIf=\"this.currentUser.house_number_extension\">-{{ this.currentUser.house_number_extension\n                                        }}</span> in {{\n                                    this.currentUser.city }} ({{ this.currentUser.country_code }})</div>\n                            </ion-label>\n                        </ion-item>\n                    </div>\n                \n                    <rope-cart-shipment \n                        [isDesktop]=\"isDesktop\"\n                        [(loading)]=\"shipmentLoading\" \n                    ></rope-cart-shipment>\n                \n                </div>\n                \n                <div *ngIf=\"getActiveStep().id === 3\">\n                    <div class=\"r-h1\">Kies een betaalmethode</div>\n                    <rope-cart-payment [(loading)]=\"paymentLoading\"></rope-cart-payment>\n                </div>\n                \n                <div *ngIf=\"getActiveStep().id === 4\">\n                \n                    <div>\n                \n                        <div class=\"r-h1\">Jouw gegevens</div>\n                \n                        <ion-grid style=\"margin-top: 7px;\">\n                            <ion-row>\n                                <ion-col size=\"6\">\n                                    <div class=\"r-h2 r-privacy-field\">{{ currentUser.username || currentUser.email }}</div>\n                                </ion-col>\n                                <ion-col size=\"6\">\n                                    <div class=\"r-h2 ion-text-right r-privacy-field\">{{ order.address.street }} {{ order.address.house_number }} {{\n                                        order.address.house_number_extension }}</div>\n                                </ion-col>\n                            </ion-row>\n                            <ion-row>\n                                <ion-col size=\"6\">\n                                    <div class=\"r-h2 r-privacy-field\">{{ currentUser.telephone_number }}</div>\n                                </ion-col>\n                                <ion-col size=\"6\">\n                                    <div class=\"r-h2 ion-text-right r-privacy-field\">{{ order.address.postal_code }} {{ order.address.city }}</div>\n                                </ion-col>\n                            </ion-row>\n                            <ion-row>\n                                <ion-col size=\"6\">\n                                    <div class=\"underlined r-h2\" (click)=\"goStepById(1)\">Wijzig gegevens</div>\n                                </ion-col>\n                                <ion-col size=\"6\">\n                                    <div class=\"r-h2 ion-text-right r-privacy-field\">{{ order.address.country_code }}</div>\n                                </ion-col>\n                            </ion-row>\n                        </ion-grid>\n                \n                        <ion-item-divider style=\"min-height: 4px;\"></ion-item-divider>\n                \n                    </div>\n                \n                    <div style=\"margin-top: 15px;\">\n                \n                        <div class=\"r-h1\">Bezorging</div>\n                \n                        <ion-grid style=\"margin-top: 7px;\" class=\"r-privacy-field\">\n                            <ion-row>\n                                <ion-col size=\"12\">\n                \n                                    <div *ngIf=\"order.shipment.delivery_type === 'delivery'\" class=\"r-h2\">\n                                        Je bestelling wordt op {{ order.shipment.timeframe_start | date:'fullDate' }} {{\n                                        getTimeInfo(order.shipment) }}\n                                        op bovenstaand adres bezorgd door {{ order.shipment.shipping_method.shipping_courier.custom_name\n                                        || order.shipment.shipping_method.shipping_courier.name }}.\n                                    </div>\n                \n                                    <div *ngIf=\"order.shipment.delivery_type === 'pickup'\" class=\"r-h2\">\n                                        Je bestelling is vanaf {{ order.shipment.timeframe_start | date:'EEEE dd-MM-yyyy \\'om\\' HH:mm'\n                                        }} op te halen op:\n                                        <br><br>\n                                        <div>{{ order.shipment.name }}</div>\n                                        <div>{{ order.shipment.street }} {{ order.shipment.house_number }} {{\n                                            order.shipment.house_number_extension }}</div>\n                                        <div>{{ order.shipment.postal_code }} {{ order.shipment.city }}</div>\n                                    </div>\n                \n                                    <br>\n                                    <br>\n                                    <div class=\"underlined r-h2\" (click)=\"goStepById(2)\">Wijzig bezorging</div>\n                \n                                </ion-col>\n                            </ion-row>\n                        </ion-grid>\n                \n                        <ion-item-divider style=\"min-height: 4px;\"></ion-item-divider>\n                \n                    </div>\n                \n                    <div style=\"margin-top: 15px;\">\n                \n                        <div class=\"r-h1\">Betaalmethode</div>\n                \n                        <ion-grid style=\"margin-top: 7px;\" class=\"r-privacy-field\">\n                            <ion-row>\n                                <ion-col size=\"12\">\n                \n                                    <ion-item>\n                                        <ion-avatar slot=\"start\">\n                                            <img [src]=\"order.payment.payment_method.payment_option.image\"\n                                                style=\"object-fit: scale-down;\">\n                                        </ion-avatar>\n                                        <ion-label>\n                                            <div class=\"ion-text-wrap r-h2\">\n                                                {{ order.payment.payment_method.payment_option.name }}\n                                                <ng-container *ngIf=\"order.payment.payment_method.selectedSub\">({{\n                                                    order.payment.payment_method.selectedSub.name }})</ng-container>\n                                            </div>\n                                        </ion-label>\n                                    </ion-item>\n                \n                                    <br>\n                                    <br>\n                                    <div class=\"underlined r-h2\" (click)=\"goStepById(3)\">Wijzig betaalmethode</div>\n                \n                                </ion-col>\n                            </ion-row>\n                        </ion-grid>\n                \n                        <ion-item-divider style=\"min-height: 4px;\"></ion-item-divider>\n                \n                    </div>\n\n                    <!-- <div style=\"margin-top: 15px;\" *ngIf=\"wheelOfFortuneDiscount\">\n                    \n                        <div class=\"r-h1\">Draai voor korting!</div>\n\n\n                    \n                    </div> -->\n                \n                    <div style=\"margin-top: 15px;\" *ngIf=\"!isDesktop\">\n                \n                        <rope-cart-overview \n                            [readonly]=\"true\"\n                            (onGoToTerms)=\"goToTerms()\"\n                            (onGoToShop)=\"goToShop()\"\n                            (onGoToShopDetail)=\"goToShopDetail($event)\"\n                        ></rope-cart-overview>\n                \n                    </div>\n                \n                    <div>\n                \n                        <br>\n                        <ion-item lines=\"none\">\n                            <ion-checkbox (ionChange)=\"signupNewsletter($event)\" [checked]=\"order['newsletterSignUp']\" slot=\"start\"\n                                color=\"secondary\">\n                            </ion-checkbox>\n                            <ion-label class=\"ion-text-wrap\">\n                                <p style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem; color: black;\">\n                                    Ja, ik wil de wekelijkse nieuwsbrief ontvangen. Dan ben jij als eerste op de hoogte van onze\n                                    nieuwe\n                                    collectie en te gekke acties.\n                                </p>\n                            </ion-label>\n                        </ion-item>\n                \n                        <div class=\"ion-text-center ion-padding\">\n\n                            <ion-button (click)=\"placeOrder()\" [disabled]=\"placingOrder\" color=\"cta\" expand=\"block\" size=\"large\" class=\"ion-text-wrap\">\n                                <div class=\"r-h2\" style=\"color: black; font-weight: 700;\">Bestellen en betalen</div>\n                                <ion-spinner *ngIf=\"placingOrder\" name=\"crescent\" slot=\"end\" style=\"color: black; margin-left: 8px;\"></ion-spinner>\n                                <ion-icon *ngIf=\"!placingOrder\" name=\"arrow-forward-circle-outline\" slot=\"end\" style=\"font-size: 1.5rem; color: black;\">\n                                </ion-icon>\n                            </ion-button>\n\n                            <br>\n                            <ion-note style=\"font-family: 'Source Sans Pro', sans-serif; font-size: 1.2rem;\">\n                                Door op 'Bestelling afronden' te klikken, ga je akkoord\n                                met de algemene voorwaarden. Je wordt automatisch doorgestuurd naar de betaalpagina.\n                            </ion-note>\n\n                        </div>\n                \n                    </div>\n                \n                </div>\n\n                <div *ngIf=\"!isDesktop && !isLastStepActive() && showUserInformation && !isCurrentStepLoading()\">\n                    <ion-item lines=\"none\" style=\"--background: #f2f2f2; border-radius: 10px; margin-top: 15px;\">\n                        <ion-label class=\"ion-text-wrap\">\n                            <div class=\"r-h2\">Totaalbedrag</div>\n                        </ion-label>\n                        <div slot=\"end\">\n                            <div class=\"r-h2\">{{ cartService.getTotalCost()-cartService.getDiscount() | currency:'EUR':'symbol' }}</div>\n                        </div>\n                    </ion-item>\n                </div>\n                \n                <div *ngIf=\"!isLastStepActive() && showUserInformation && !isCurrentStepLoading()\" style=\"margin-top: 25px;\">\n                    <ion-button color=\"cta\" (click)=\"goNextStep()\" expand=\"block\" size=\"large\" [disabled]=\"!checkStepDone()\">\n                        <div class=\"r-h2\" style=\"color: black; font-weight: 700;\">Ga verder naar {{ getNextStepText() }}</div>\n                        <ion-icon slot=\"end\" name=\"arrow-forward-circle-outline\" style=\"font-size: 1.5rem; color: black;\"></ion-icon>\n                    </ion-button>\n                </div>\n\n            </ion-col>\n        </ion-row>\n    </ion-grid>\n\n</div>","import { DatePipe } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { IonModal } from '@ionic/angular';\nimport { lastValueFrom, Subscription } from 'rxjs';\nimport { OrderService } from '../../../services/order.service';\nimport { ScreensizeService } from '../../../services/screensize.service';\n\n@Component({\n  selector: 'rope-submit-return',\n  templateUrl: './submit-return.component.html',\n  styleUrls: ['./submit-return.component.scss']\n})\nexport class SubmitReturnComponent implements OnInit {\n\n  @ViewChild('insuranceModal') insuranceModal: IonModal;\n\n  @Input() public id;\n  @Input() public data;\n\n  @Output() public navigate = new EventEmitter();\n\n  public order;\n  public currentUser;\n\n  public loading = true;\n  public errorMessage;\n\n  public returnReasons: any[];\n\n  public pickupDatesLoading;\n  public pickupDates;\n  public returnCost = 5.95;\n\n  public termsAccepted;\n  public returnInsurance;\n  public returnInsuranceCost = 1.99;\n  public selectedReturnShipment;\n\n  public screensizeObserver: Subscription;\n  public isDesktop;\n\n  public steps = [\n    {\n      id: 1,\n      name: 'Productoverzicht',\n      active: false,\n      done: false,\n      isLoading: () => false,\n      initialize: () => true,\n      checkDone: () => this.checkProductsSelectedForReturn(),\n      finalize: () => true\n    },\n    {\n      id: 2,\n      name: 'Retourzending',\n      active: false,\n      done: false,\n      isLoading: () => this.pickupDatesLoading,\n      initialize: () => this.loadPickupDates(),\n      checkDone: () => this.termsAccepted,\n      finalize: () => true\n    },\n    {\n      id: 3,\n      name: 'Overzicht',\n      active: false,\n      done: false,\n      isLoading: () => false,\n      initialize: () => true,\n      checkDone: () => true,\n      finalize: () => true\n    }\n  ];\n\n  public customPopoverOptions = {\n    header: 'Retour reden',\n    subHeader: 'Selecteer een reden van retour',\n  };\n\n  constructor(\n    private screensizeService: ScreensizeService,\n    public orderService: OrderService,\n    private datePipe: DatePipe\n  ) { }\n\n  async ngOnInit() {\n    \n    this.screensizeObserver = this.screensizeService\n    .isDesktopView()\n    .subscribe((isDesktop) => {\n      this.isDesktop = isDesktop;\n    });\n\n    this.returnReasons = await lastValueFrom(this.orderService.getReturnReasons());\n\n    this.data = decodeURI(this.data);\n    this.loadOrder(this.id, this.data);\n\n  }\n\n  public loadOrder(id, authKey) {\n\n    this.loading = true;\n    this.orderService.getOne(id, authKey).subscribe({\n      next:  async (r) => {\n\n        this.order = r[0];\n        this.currentUser = this.order.customer;\n        console.log(this.order);\n        for (let ol of this.order.transaction_lines) {\n          ol['outfitImage'] = ol.product_variant.product.outfits[0].main_media_url;\n        }\n\n        const firstStep = this.steps[0];\n        await firstStep.initialize();\n        firstStep.active = true;\n\n      },\n      error: (e) => {\n        if (e.error && e.error.localized_message) {\n          this.errorMessage = e.error.localized_message;\n        }\n      }\n    }).add(() => {\n      this.loading = false;\n    });\n\n  }\n\n  public getCurrentStepWidth() {\n    const currentStep = this.steps.find(s => s.active);\n    const idActive = currentStep ? currentStep.id : 0;\n    return idActive / this.steps.length * 100;\n  }\n\n  public isCurrentStepLoading() {\n\n    const currentStep = this.steps.find(s => s.active);\n    if (!currentStep) {\n      return true;\n    }\n\n    return currentStep.isLoading();\n\n  }\n\n  public getNextStepText() {\n    const idActive = this.steps.findIndex(s => s.active);\n    return this.steps[idActive + 1].name.toLowerCase();\n  }\n\n  public isLastStepActive() {\n    return this.steps.findIndex(s => s.active) === this.steps.length-1;\n  }\n\n  public getActiveStep() {\n    const currentStep = this.steps.find(st => st.active);\n    return currentStep || { id: 0 };\n  }\n\n  public async goStepById(id) {\n    const step = this.steps.find(s => s.id === id);\n    this.goStep(step);\n  }\n\n  public async goStep(step) {\n\n    const newIndex = this.steps.findIndex(s => s.id === step.id);\n    for (let i = 0; i < newIndex; i++) {\n      const st = this.steps[i];\n      if (!st.done) {\n        return;\n      }\n    }\n\n    const idActive = this.steps.findIndex(s => s.active);\n    const prevStep = this.steps[idActive];\n    prevStep.active = false;\n\n    const stepInit = await step.initialize();\n    if (stepInit) {\n      step.active = true;\n    }\n\n  }\n\n  public async goNextStep() {\n    \n    const idActive = this.steps.findIndex(s => s.active);\n    const prevStep = this.steps[idActive];\n    const stepDone = await prevStep.finalize();\n\n    if (stepDone) {\n\n      prevStep.done = true;\n      prevStep.active = false;\n  \n      const nextStep = this.steps[idActive + 1];\n      const stepInit = await nextStep.initialize();\n      if (stepInit) {\n        nextStep.active = true;\n      }\n\n    }\n\n  }\n\n  public checkStepDone() {\n\n    const idActive = this.steps.findIndex(s => s.active);\n    if (idActive >= 0) {\n\n      const prevStep = this.steps[idActive];\n      const done = prevStep.checkDone();\n      prevStep.done = done;\n      return prevStep.done;\n\n    } else {\n      return false;\n    }\n\n  }\n\n  /**\n   * Product overview\n   */\n\n  public canBeSubmittedAsReturn(ol) {\n\n    if (ol.quantity === ol.number_of_returns) {\n      return false;\n    }\n\n    if (ol.return_line !== undefined) {\n      return false;\n    }\n\n    return true;\n\n  }\n\n  public checkProductsSelectedForReturn() {\n    return this.order.transaction_lines.some(ol => ol['is_selected_as_return'] && ol['return_reason']);\n  }\n\n  /**\n   * Shipment overview\n   */\n\n  public loadPickupDates() {\n\n    this.pickupDatesLoading = true;\n    this.orderService.getReturnPickupDates().subscribe(pickupDates => {\n      this.pickupDates = pickupDates;\n      this.selectedReturnShipment = this.pickupDates[0];\n      this.pickupDatesLoading = false;\n    });\n\n    return Promise.resolve(true);\n\n  }\n\n  /**\n   * Overview\n   */\n\n  public getTimeInfo(obj) {\n    return (\n      \"tussen \" +\n      this.datePipe.transform(obj.timeframe_start, \"HH:mm\") +\n      \" en \" +\n      this.datePipe.transform(obj.timeframe_end, \"HH:mm\")\n    );\n  }\n\n  public closeInsuranceModal() {\n    this.insuranceModal.dismiss(null, 'cancel');\n  }\n\n  public navigateToTerms() {\n    this.navigate.emit('/terms');\n  }\n\n  public getReturnCost() {\n    return this.returnCost + (this.returnInsurance ? this.returnInsuranceCost : 0.00)\n  }\n\n  public getReturnLines() {\n    return this.order.transaction_lines.filter(tl => tl['is_selected_as_return'] && tl['return_reason']);\n  }\n\n  public getPromoCalculated() {\n\n    if (this.order.promocodes.length <= 0) {\n      return 0.0;\n    }\n\n    const type = this.order.promocodes[0].type;\n    const promocode = this.order.promocodes[0];\n\n    if (type === 'PERCENTAGE') {\n\n      let exclude = 0.0;\n      let alreadyExcluded = [];\n      if (promocode['excluded_options']) {\n\n        const optionsArr = JSON.parse(promocode['excluded_options']);\n        const excludedOrderLines = this.order.transaction_lines.filter(ol =>\n          ol.product_variant.product['options'].some(o => optionsArr.indexOf(o.id) != -1),\n        );\n        exclude += excludedOrderLines.reduce((a, b) => a + b.sub_total, 0);\n\n        if (excludedOrderLines.length > 0) {\n          for (let ol of excludedOrderLines) {\n            alreadyExcluded.push(ol.product_variant.id);\n          }\n        }\n\n      }\n\n      if (promocode['exclude_sale']) {\n\n        const excludedOrderLines = this.order.transaction_lines.filter(ol => {\n          const bool1 = ol.total !== ol.product_variant.product.unit_price;\n          const bool2 = alreadyExcluded.indexOf(ol.product_variant.id) === -1;\n          return bool1 && bool2;\n        });\n        exclude += excludedOrderLines.reduce((a, b) => a + b.sub_total, 0);\n\n        if (excludedOrderLines.length > 0) {\n          for (let ol of excludedOrderLines) {\n            alreadyExcluded.push(ol.product_variant.id);\n          }\n        }\n\n      }\n\n      return this.order.promocodes[0].amount * (this.getTotalReturned() - exclude);\n\n    } else if (type === 'VALUE') {\n      return this.order.promocodes[0].amount;\n    }\n\n  }\n\n  public getTotalReturned() {\n    return this.order.transaction_lines.reduce((prev, curr) => prev + curr.total, 0);\n  }\n\n}\n","<ng-container *ngIf=\"!loading\">\n\n    <ng-container *ngIf=\"order\">\n        \n        <div class=\"ion-padding\">\n\n            <ion-grid>\n                <ion-row>\n                    <ion-col size-lg=\"4\" *ngIf=\"isDesktop\">\n\n                    </ion-col>\n\n                    <ion-col size=\"12\" size-lg=\"8\">\n                    \n                        <div class=\"r-flex r-flex-h-space-between r-flex-v-center\">\n                            <div class=\"r-h1\">Retour aanmelden</div>\n                            <div class=\"r-h2\">Bestelling #{{ order.id }}</div>\n                        </div>\n                    \n                        <div class=\"checkout\">\n                            <div class=\"checkout-lines\">\n                                <div class=\"step-line\"></div>\n                                <div class=\"step-line-filled\" [ngStyle]=\"{ 'width': getCurrentStepWidth()+'%' }\">\n                                    <ion-icon *ngIf=\"!isLastStepActive()\" name=\"arrow-forward\"></ion-icon>\n                                </div>\n                            </div>\n                            <div class=\"checkout-steps\">\n                                <div class=\"step\" *ngFor=\"let step of steps\" (click)=\"goStep(step)\">\n                                    <div style=\"position: relative;\">\n                                        <ion-icon [name]=\"step.active || step.done ? 'ellipse' : 'ellipse-outline'\"\n                                            [color]=\"step.active || step.done ? 'secondary' : 'medium'\"></ion-icon>\n                                        <ion-icon *ngIf=\"step.done\" name=\"checkmark-circle\" color=\"cta\"\n                                            style=\"position: absolute; top: 50%; left: 50%; transform: translate(-52%, -70%); font-size: 1.5rem;\">\n                                        </ion-icon>\n                                    </div>\n                                    <div class=\"r-h3\" style=\"user-select: none;\" [ngClass]=\"step.done ? 'underlined' : ''\">{{ step.name }}\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n\n                        <div>\n                        \n                            <div *ngIf=\"getActiveStep().id === 1\">\n                        \n                                <div class=\"r-h1\">Productoverzicht</div>\n\n                                <div style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px; margin-top: 25px; margin-bottom: 10px;\">\n                                    <ion-item lines=\"none\">\n                                        <ion-label style=\"color: black; margin: 2px;\">\n                                \n                                            <div class=\"r-h2\">\n                                                <b>Bestelling #{{ order.id }}</b>\n                                            </div>\n                                            <div class=\"r-h3\">Geplaatst op {{ order.timestamp_end | date:'shortDate' }}</div>\n                                            <div class=\"r-h3\">Totaalbedrag: {{ order.total | currency:'EUR':'symbol' }}</div>\n                                \n                                        </ion-label>\n                                    </ion-item>\n                                </div>\n\n                                <ion-list>\n                                    <ion-item *ngFor=\"let ol of order.transaction_lines\" style=\" --padding-bottom: 10px;\">\n                                        <div style=\"width: 100%; display: flex; flex-direction: column; align-items: flex-start;\">\n                                            <ion-item lines=\"none\" style=\"--padding-start: 0px;\">\n                                                <ion-avatar class=\"custom-avatar\" slot=\"start\">\n                                                    <img [src]=\"ol.outfitImage\">\n                                                </ion-avatar>\n                                                <ion-label>\n                                                    <div class=\"r-h2\">{{ ol.product_variant.product.name }} {{ ol.product_variant.size.name }}</div>\n                                                    <div class=\"r-h3\">{{ ol.quantity }} stuk{{ ol.quantity === 1 ? '' : 's' }} x {{ ol.total / ol.quantity | currency:'EUR':'symbol' }}</div>\n                                                </ion-label>\n                                            </ion-item>\n                                            <div *ngIf=\"canBeSubmittedAsReturn(ol)\" style=\"width: 100%; display: flex; justify-content: space-between; align-items: center;\">\n                                                <div class=\"r-h3\" style=\"width: 33%; margin-right: 5px;\">Retour reden:</div>\n                                                <ion-select [(ngModel)]=\"ol['return_reason']\" [interfaceOptions]=\"customPopoverOptions\" interface=\"action-sheet\" cancelText=\"Annuleer\" [disabled]=\"!ol['is_selected_as_return']\" style=\"width: 100%; max-width: 100% !important; border: 1px solid #e2e2e2; border-radius: 5px;\" placeholder=\"Kies een retour reden...\" class=\"r-h3\">\n                                                    <ion-select-option *ngFor=\"let rr of returnReasons\" [value]=\"rr\">{{ rr.localized_description }}</ion-select-option>\n                                                </ion-select>\n                                            </div>\n                                            <div *ngIf=\"!canBeSubmittedAsReturn(ol)\">\n                                                <ion-chip color=\"danger\">\n                                                    <ion-icon name=\"alert-circle-outline\"></ion-icon>\n                                                    <div class=\"r-h3\">\n                                                        Dit product is reeds als retour aangemeld/verwerkt.\n                                                    </div>\n                                                </ion-chip>\n                                            </div>\n                                        </div>\n                                        <ion-checkbox slot=\"end\" color=\"secondary\" [(ngModel)]=\"ol['is_selected_as_return']\" [disabled]=\"!canBeSubmittedAsReturn(ol)\"></ion-checkbox>\n                                    </ion-item>\n                                </ion-list>\n\n\n                            </div>\n\n                            <div *ngIf=\"getActiveStep().id === 2\">\n                            \n                                <div class=\"r-h1\">Retourzending</div>\n\n                                <ng-container *ngIf=\"!pickupDatesLoading\">\n\n                                    <div style=\"margin-top: 10px;\">\n                                        <div class=\"r-h3\">\n                                            <ul>\n                                                <li>De retourzending wordt bij je thuis opgehaald tussen 17:30 en 22:30. Je wordt hierover op de hoogte gehouden op de\n                                                gekozen dag.</li>\n                                                <li>De chauffeur heeft het geprinte retourlabel voor je bij, hiervoor hoeft je dus niets te doen.</li>\n                                                <li>Wat je wel moet doen, is zorgen voor een ingevuld retourformulier en een nette verpakking (bij voorkeur de zak van de\n                                                heenzending).</li>\n                                            </ul>\n                                        </div>\n                                        <div class=\"r-h3\" style=\"font-style: italic; margin-top: 5px;\">\n                                            <ion-chip color=\"warning\" style=\"height: 45px;\">\n                                                <ion-icon name=\"alert-circle-outline\"></ion-icon>\n                                                <ion-label class=\"r-h3\">Let op: retouren zonder ingevuld retourformulier kunnen niet worden verwerkt.</ion-label>\n                                            </ion-chip>\n                                        </div>\n                                    </div>\n\n                                    <div style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px; margin-top: 25px; margin-bottom: 10px;\">\n                                        <ion-item lines=\"none\">\n                                            <ion-label style=\"color: black; margin: 2px;\" class=\"r-h2\">\n                                                <p class=\"r-h3\">Ophaallocatie:</p>\n                                                <div class=\"r-h2\">{{ this.currentUser.street }} {{ this.currentUser.house_number }}<span\n                                                        *ngIf=\"this.currentUser.house_number_extension\">-{{ this.currentUser.house_number_extension\n                                                        }}</span> in {{\n                                                    this.currentUser.city }} ({{ this.currentUser.country_code }})</div>\n                                            </ion-label>\n                                        </ion-item>\n                                    </div>\n\n                                    <ion-list>\n                                        <ion-radio-group [(ngModel)]=\"selectedReturnShipment\" allowEmptySelection=\"false\">\n                                            <ion-list-header>\n                                                <ion-label>\n                                                    <div class=\"r-h3\">\n                                                        <b>Kies een ophaalmoment</b>\n                                                    </div>\n                                                </ion-label>\n                                            </ion-list-header>\n                                            <ion-item *ngFor=\"let returnShipment of pickupDates\">\n                                                <ion-label>\n                                                    <div class=\"r-flex r-flex-h-space-between r-flex-v-center\" style=\"margin-right: 10px;\">\n                                                        <div class=\"r-h2\">\n                                                            <div>{{ returnShipment.timeframe_start | date:'fullDate' }}</div>\n                                                            <p class=\"r-h3\">tussen {{ returnShipment.timeframe_start | date:'HH:mm' }} en {{ returnShipment.timeframe_end | date:'HH:mm' }}\n                                                            </p>\n                                                        </div>\n                                                        <div class=\"r-h2\">{{ returnCost | currency:'EUR':'symbol' }}</div>\n                                                    </div>\n                                                </ion-label>\n                                                <ion-radio [value]=\"returnShipment\" color=\"secondary\"></ion-radio>\n                                            </ion-item>\n                                        </ion-radio-group>\n                                    </ion-list>\n\n                                    <ion-item style=\"margin-top: 20px;\">\n                                        <ion-checkbox slot=\"start\" color=\"secondary\" [(ngModel)]=\"termsAccepted\"></ion-checkbox>\n                                        <ion-label class=\"ion-text-wrap\">\n                                            <div class=\"r-h3\">Ja, ik ga akkoord met de algemene voorwaarden</div>\n                                        </ion-label>\n                                        <ion-buttons slot=\"end\">\n                                            <ion-button size=\"small\" (click)=\"navigateToTerms()\">\n                                                <ion-icon slot=\"icon-only\" name=\"exit-outline\"></ion-icon>\n                                            </ion-button>\n                                        </ion-buttons>\n                                    </ion-item>\n\n\n                                    <ion-item>\n                                        <ion-checkbox slot=\"start\" color=\"secondary\" [(ngModel)]=\"returnInsurance\"></ion-checkbox>\n                                        <ion-label class=\"ion-text-wrap\">\n                                            <div class=\"r-h3\">\n                                                Ja, ik wil mijn pakket verzekeren tegen schade of diefstal <b>(aanbevolen)</b> - {{ returnInsuranceCost | currency:'EUR':'symbol' }}\n                                            </div>\n                                            <ion-modal #insuranceModal trigger=\"open-insurance-modal\" [initialBreakpoint]=\"0.50\" [breakpoints]=\"[0, 0.5, 0.75]\">\n                                                <ng-template>\n                                                    <ion-toolbar>\n                                                        <ion-title>\n                                                            <div class=\"r-h1\">\n                                                                Informatie over pakket verzekering\n                                                            </div>\n                                                        </ion-title>\n                                                        <ion-buttons slot=\"end\">\n                                                            <ion-button (click)=\"closeInsuranceModal()\" [strong]=\"true\">Sluit</ion-button>\n                                                        </ion-buttons>\n                                                    </ion-toolbar>\n                                                    <ion-content class=\"ion-padding\">\n                                                        <div class=\"r-h2\">\n                                                            Je hebt een pakket van ons ontvangen welke vanaf dat moment jouw eigendom is. Dat betekent dat de verantwoordelijkheid van de retourzending niet bij ons ligt.\n                                                            <br><br>\n                                                            Er kan natuurlijk altijd iets fout gaat bij het retourzenden van een pakket, en wij bieden je de mogelijkheid je hiervoor te verzekeren.\n                                                            <br><br>\n                                                            Indien het pakket schade oploopt, wordt gestolen of om een andere reden niet bij ons komt, krijg je alsnog de waarde van het pakket vergoed. De verzekering gaat in zodra je pakket succesvol in handen is van onze transporteur.\n                                                        </div>\n                                                        <div class=\"r-h2\">\n                                                            <ul>\n                                                                <li>Je pakket is tot €200,00 verzekerd</li>\n                                                                <li>Zorgeloos je pakket retourneren</li>\n                                                                <li>Altijd zeker van retourbetaling</li>\n                                                            </ul>\n                                                        </div>\n                                                        <div class=\"r-h2\">Heb je nog vragen over deze pakketverzekering? Neem dan contact op met onze klantenservice.</div>\n                                                    </ion-content>\n                                                </ng-template>\n                                            </ion-modal>\n                                        </ion-label>\n                                        <ion-buttons slot=\"end\">\n                                            <ion-button size=\"small\" id=\"open-insurance-modal\">\n                                                <ion-icon slot=\"icon-only\" name=\"help-circle-outline\"></ion-icon>\n                                            </ion-button>\n                                        </ion-buttons>\n                                    </ion-item>\n\n                                    <div style=\"border: 1px solid darkgrey; border-radius: 5px; padding: 2px; margin-top: 25px; margin-bottom: 10px;\">\n                                        <ion-item lines=\"none\">\n                                            <ion-label style=\"color: black; margin: 2px;\">\n                                                <div class=\"r-h2\">Totaalbedrag retour</div>\n                                            </ion-label>\n                                            <div slot=\"end\" class=\"r-h2 r-b\">{{ getReturnCost() | currency:'EUR':'symbol' }}</div>\n                                        </ion-item>\n                                    </div>\n\n                                </ng-container>\n\n                                <div *ngIf=\"pickupDatesLoading\" style=\"width: 100%; height: 300px; display: flex; align-items: center; justify-content: center;\">\n                                    <rope-loading></rope-loading>\n                                </div>\n\n                            </div>\n\n                        </div>\n\n                        <div *ngIf=\"getActiveStep().id === 3\">\n                        \n                            <div>\n                            \n                                <div class=\"r-h1\">Producten</div>\n                            \n                                <div class=\"r-h3\" style=\"margin-top: 10px;\">\n                                    Bestelling #{{ order.id }}\n                                </div>\n                                <div class=\"r-h3\">Geplaatst op {{ order.timestamp_end | date:'shortDate' }}</div>\n                                <div class=\"r-h3\">Totaalbedrag: {{ order.total | currency:'EUR':'symbol' }}</div>\n                    \n                                <ion-list>\n                                    <ion-item *ngFor=\"let ol of getReturnLines()\">\n                                        <ion-avatar class=\"custom-avatar-2\" slot=\"start\">\n                                            <img [src]=\"ol.outfitImage\">\n                                        </ion-avatar>\n                                        <ion-label>\n                                            <div class=\"r-h2\">{{ ol.product_variant.product.name }} {{ ol.product_variant.size.name }}</div>\n                                            <div class=\"r-h3\">{{ ol.quantity }} stuk{{ ol.quantity === 1 ? '' : 's' }} x {{ ol.total / ol.quantity | currency:'EUR':'symbol' }}</div>\n                                        </ion-label>\n                                        <div slot=\"end\">\n                                            <div class=\"r-h2\">{{ ol.total | currency:'EUR':'symbol' }}</div>\n                                        </div>\n                                    </ion-item>\n                                    <ion-item>\n                                        <ion-label>Totaal</ion-label>\n                                        <div slot=\"end\">\n                                            <div class=\"r-h2\">{{ getTotalReturned() | currency:'EUR':'symbol' }}</div>\n                                        </div>\n                                    </ion-item>\n                                </ion-list>\n\n                                <ion-item-divider style=\"min-height: 4px;\"></ion-item-divider>\n                            \n                            </div>\n\n                            <div style=\"margin-top: 15px;\">\n                            \n                                <div class=\"r-h1\">Retourzending</div>\n                                <div class=\"r-h2\">\n                                    Je bestelling wordt op {{ selectedReturnShipment.timeframe_start | date:'fullDate' }} {{\n                                    getTimeInfo(selectedReturnShipment) }}\n                                    op opgehaald op adres: {{ this.currentUser.street }} {{ this.currentUser.house_number }}<span\n                                        *ngIf=\"this.currentUser.house_number_extension\">-{{ this.currentUser.house_number_extension\n                                        }}</span> in {{\n                                    this.currentUser.city }} ({{ this.currentUser.country_code }}).\n                                </div>\n                                <ion-item-divider style=\"min-height: 4px;\"></ion-item-divider>\n                            \n                            </div>\n\n                        </div>\n\n                        <div *ngIf=\"!isLastStepActive() && !isCurrentStepLoading()\" style=\"margin-top: 25px;\">\n                            <ion-button color=\"cta\" (click)=\"goNextStep()\" expand=\"block\" size=\"large\" [disabled]=\"!checkStepDone()\">\n                                <div class=\"r-h2\" style=\"color: black; font-weight: 700;\">Ga verder naar {{ getNextStepText() }}</div>\n                                <ion-icon slot=\"end\" name=\"arrow-forward-circle-outline\" style=\"font-size: 1.5rem; color: black;\"></ion-icon>\n                            </ion-button>\n                        </div>\n\n                    </ion-col>\n\n                </ion-row>\n            </ion-grid>\n\n        </div>\n\n    </ng-container>\n\n    <ng-container *ngIf=\"!order\">\n        <div class=\"error-container\">\n            <ion-chip color=\"danger\">{{ errorMessage }}</ion-chip>\n        </div>    \n    </ng-container>\n\n</ng-container>\n\n<ng-container *ngIf=\"loading\">\n    <rope-loading></rope-loading>\n</ng-container>\n","import { NgModule, ModuleWithProviders, CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { IonicModule } from '@ionic/angular';\nimport { CommonModule } from '@angular/common';\n// import { NgAisModule } from 'angular-instantsearch';\nimport { CommonHeaderComponent } from './components/core/common-header/common-header.component';\nimport { WizardComponent } from './components/wizard/wizard.component';\nimport { WizardStepComponent } from './components/wizard/wizard.step.component';\nimport { CommonFooterComponent } from './components/core/common-footer/common-footer.component';\nimport { FooterComponent } from './components/core/footer/footer.component';\nimport { ProductAddToCartComponent } from './components/shopping/product-add-to-cart/product-add-to-cart.component';\nimport { HeaderComponent } from './components/core/header/header.component';\nimport { CartOverviewComponent } from './components/pages/cart-overview/cart-overview.component';\nimport { ProductSliderComponent } from './components/shopping/product-slider/product-slider.component';\nimport { FeaturedProductComponent } from './components/shopping/featured-product/featured-product.component';\nimport { BannersComponent } from './components/core/banners/banners.component';\nimport { TextBlockComponent } from './components/core/text-block/text-block.component';\nimport { NewsletterSignupComponent } from './components/misc/newsletter-signup/newsletter-signup.component';\nimport { UspContainerComponent } from './components/misc/usp-container/usp-container.component';\nimport { UspItemComponent } from './components/misc/usp-item/usp-item.component';\nimport { MenuComponent } from './components/core/menu/menu.component';\nimport { WishlistOverviewComponent } from './components/pages/wishlist-overview/wishlist-overview.component';\nimport { SearchComponent } from './components/pages/search/search.component';\nimport { ProductContainerComponent } from './components/shopping/product-container/product-container.component';\nimport { CartSummaryComponent } from './components/pages/cart-summary/cart-summary.component';\nimport { CartDoPaymentComponent } from './components/pages/cart-do-payment/cart-do-payment.component';\nimport { CartCheckPaymentComponent } from './components/pages/cart-check-payment/cart-check-payment.component';\nimport { CartResultPaymentComponent } from './components/pages/cart-result-payment/cart-result-payment.component';\nimport { SubscriptionMainComponent } from './components/pages/subscription-main/subscription-main.component';\nimport { SubscriptionInfoComponent } from './components/pages/subscription-info/subscription-info.component';\nimport { SubscriptionTransactionComponent } from './components/pages/subscription-transaction/subscription-transaction.component';\nimport { SubscriptionTransactionArchiveComponent } from './components/pages/subscription-transaction-archive/subscription-transaction-archive.component';\nimport { SubscriptionNoteComponent } from './components/pages/subscription-note/subscription-note.component';\nimport { SubscriptionReviewComponent } from './components/pages/subscription-review/subscription-review.component';\nimport { SubscriptionConsentComponent } from './components/pages/subscription-consent/subscription-consent.component';\nimport { SubscriptionEmployeeComponent } from './components/pages/subscription-employee/subscription-employee.component';\nimport { SubscriptionTestComponent } from './components/pages/subscription-test/subscription-test.component';\nimport { UserAddressDetailsComponent } from './components/pages/user-address-details/user-address-details.component';\nimport { UserBasicDetailsComponent } from './components/pages/user-basic-details/user-basic-details.component';\nimport { ProductOverviewComponent } from './components/pages/product-overview/product-overview.component';\nimport { CouponCheckComponent } from './components/pages/coupon-check/coupon-check.component';\nimport { RouterModule } from '@angular/router';\nimport { NgxStarsModule } from 'ngx-stars';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { AnalyticsService } from './services/analytics.service';\nimport { AppointmentService } from './services/appointment.service';\nimport { AuthService } from './services/auth.service';\nimport { BlogService } from './services/blog.service';\nimport { BranchService } from './services/branch.service';\nimport { CartService } from './services/cart.service';\nimport { CookieConsentService } from './services/cookie.service';\nimport { CoreService } from './services/core.service';\nimport { CouponService } from './services/coupon.service';\nimport { EmployeeService } from './services/employee.service';\nimport { EventService } from './services/event.service';\nimport { ScriptService } from './services/script.service';\nimport { FavouriteService } from './services/favourite.service';\nimport { LogService } from './services/log.service';\nimport { LoyaltyService } from './services/loyalty.service';\nimport { OptionService } from './services/option.service';\nimport { OrderService } from './services/order.service';\nimport { OutfitService } from './services/outfit.service';\nimport { PaymentService } from './services/payment.service';\nimport { ReservationService } from './services/reservation.service';\nimport { ReviewService } from './services/review.service';\nimport { SeoService } from './services/seo.service';\nimport { ShipmentService } from './services/shipment.service';\nimport { StorageService } from './services/storage.service';\nimport { SubscriptionService } from './services/subscription.service';\nimport { WebsiteService } from './services/website.service';\nimport { WindowRefService } from './services/window-ref-service.service';\nimport { WishlistService } from './services/wishlist.service';\nimport { InitializeComponent } from './components/core/initialize/initialize.component';\nimport { PointsComponent } from './components/misc/points/points.component';\nimport { ScreensizeService } from './services/screensize.service';\nimport { HeaderDropdownComponent } from './components/core/header-dropdown/header-dropdown.component';\nimport { ProductDetailComponent } from './components/pages/product-detail/product-detail.component';\nimport { VgCoreModule } from '@videogular/ngx-videogular/core';\nimport { VgControlsModule } from '@videogular/ngx-videogular/controls';\nimport { VgOverlayPlayModule } from '@videogular/ngx-videogular/overlay-play';\nimport { VgBufferingModule } from '@videogular/ngx-videogular/buffering';\nimport { CampaignDetailComponent } from './components/pages/campaign-detail/campaign-detail.component';\nimport { CampaignService } from './services/campaign.service';\nimport { LazyLoadImageModule } from 'ng-lazyload-image';\nimport { ChatComponent } from './components/misc/chat/chat.component';\nimport { ChatService } from './services/chat.service';\nimport { OnlineShoppingComponent } from './components/pages/online-shopping/online-shopping.component';\nimport { ServiceRequestService } from './services/service-request.service';\nimport { LoginComponent } from './components/core/login/login.component';\nimport { RegisterComponent } from './components/core/register/register.component';\nimport { BackButtonComponent } from './components/core/back-button/back-button.component';\nimport { NewsletterComponent } from './components/pages/newsletter/newsletter.component';\nimport { PromoBannerComponent } from './components/misc/promo-banner/promo-banner.component';\nimport { CartShipmentComponent } from './components/pages/cart-shipment/cart-shipment.component';\nimport { LoadingComponent } from './components/core/loading/loading.component';\nimport { ReviewOverviewComponent } from './components/pages/review-overview/review-overview.component';\nimport { ShopWindowProductOverviewComponent } from './components/pages/shop-window-product-overview/shop-window-product-overview.component';\nimport { OrderOverviewComponent } from './components/pages/order-overview/order-overview.component';\nimport { HideHeaderDirective } from './directives/hide-header.directive';\nimport { PromoImageComponent } from './components/misc/promo-image/promo-image.component';\nimport { PromoImageGridComponent } from './components/misc/promo-image-grid/promo-image-grid.component';\nimport { ProductOptionOverviewComponent } from './components/shopping/product-option-overview/product-option-overview.component';\nimport { WebshopFiltersComponent } from './components/pages/webshop-filters/webshop-filters.component';\nimport { CustomerMembershipComponent } from './components/pages/customer-membership/customer-membership.component';\nimport { AppointmentAgendaComponent } from './components/pages/appointment-agenda/appointment-agenda.component';\nimport { NgCalendarModule } from \"ionic2-calendar\";\nimport { InViewportModule } from \"ng-in-viewport\";\nimport { CreateAppointmentComponent } from './components/pages/create-appointment/create-appointment.component';\nimport { MyAccountComponent } from './components/pages/my-account/my-account.component';\nimport { MockService } from './services/mock.service';\nimport { CustomerServiceOverviewComponent } from './components/pages/customer-service-overview/customer-service-overview.component';\nimport { AboutOverviewComponent } from './components/pages/about-overview/about-overview.component';\nimport { TermsOverviewComponent } from './components/pages/terms-overview/terms-overview.component';\nimport { PageMenuComponent } from './components/core/page-menu/page-menu.component';\nimport { DefaultPageComponent } from './components/core/default-page/default-page.component';\nimport { StoreStockComponent } from './components/pages/store-stock/store-stock.component';\nimport { WebshopThemeDetailComponent } from './components/pages/webshop-theme-detail/webshop-theme-detail.component';\nimport { WebshopOutfitMediasetCategoriesComponent } from './components/pages/webshop-outfit-mediaset-categories/webshop-outfit-mediaset-categories.component';\nimport { LoyaltyGiftShopComponent } from './components/pages/loyalty-gift-shop/loyalty-gift-shop.component';\nimport { StartupLoadingComponent } from './components/core/startup-loading/startup-loading.component';\nimport { LoyaltyGiftDetailComponent } from './components/pages/loyalty-gift-detail/loyalty-gift-detail.component';\nimport { LoyaltyGiftVouchersComponent } from './components/pages/loyalty-gift-vouchers/loyalty-gift-vouchers.component';\nimport { NewsletterSignupModalComponent } from './components/misc/newsletter-signup-modal/newsletter-signup-modal.component';\nimport { CartCheckoutComponent } from './components/pages/cart-checkout/cart-checkout.component';\nimport { CartPaymentComponent } from './components/pages/cart-payment/cart-payment.component';\nimport { ProductFamilyOverviewComponent } from './components/shopping/product-family-overview/product-family-overview.component';\nimport { ProductAddToCartModalComponent } from './components/shopping/product-add-to-cart-modal/product-add-to-cart-modal.component';\nimport { AddToCartSuccessModalComponent } from './components/shopping/add-to-cart-success-modal/add-to-cart-success-modal.component';\nimport { SearchResultsComponent } from './components/misc/search-results/search-results.component';\nimport { SubmitReturnComponent } from './components/pages/submit-return/submit-return.component';\nimport { StoryViewerComponent } from './components/misc/story-viewer/story-viewer.component';\nimport { SpinTheWheelComponent } from './components/misc/spin-the-wheel/spin-the-wheel.component';\n\nimport { register } from 'swiper/element/bundle';\nregister();\n\n@NgModule({\n  declarations: [\n    InitializeComponent,\n    CommonHeaderComponent,\n    WizardComponent,\n    WizardStepComponent,\n    CommonFooterComponent,\n    FooterComponent,\n    ProductAddToCartComponent,\n    HeaderComponent,\n    CartOverviewComponent,\n    ProductSliderComponent,\n    FeaturedProductComponent,\n    BannersComponent,\n    TextBlockComponent,\n    NewsletterSignupComponent,\n    UspContainerComponent,\n    UspItemComponent,\n    MenuComponent,\n    WishlistOverviewComponent,\n    SearchComponent,\n    ProductContainerComponent,\n    CartSummaryComponent,\n    CartDoPaymentComponent,\n    CartCheckPaymentComponent,\n    CartResultPaymentComponent,\n    SubscriptionMainComponent,\n    SubscriptionInfoComponent,\n    SubscriptionTransactionComponent,\n    SubscriptionTransactionArchiveComponent,\n    SubscriptionNoteComponent,\n    SubscriptionReviewComponent,\n    SubscriptionConsentComponent,\n    SubscriptionEmployeeComponent,\n    SubscriptionTestComponent,\n    UserAddressDetailsComponent,\n    UserBasicDetailsComponent,\n    ProductOverviewComponent,\n    CouponCheckComponent,\n    InitializeComponent,\n    MenuComponent,\n    PointsComponent,\n    HeaderDropdownComponent,\n    ProductDetailComponent,\n    CampaignDetailComponent,\n    ChatComponent,\n    OnlineShoppingComponent,\n    LoginComponent,\n    RegisterComponent,\n    BackButtonComponent,\n    NewsletterComponent,\n    PromoBannerComponent,\n    CartShipmentComponent,\n    LoadingComponent,\n    ReviewOverviewComponent,\n    ShopWindowProductOverviewComponent,\n    OrderOverviewComponent,\n    HideHeaderDirective,\n    PromoImageComponent,\n    PromoImageGridComponent,\n    ProductOptionOverviewComponent,\n    WebshopFiltersComponent,\n    CustomerMembershipComponent,\n    AppointmentAgendaComponent,\n    CreateAppointmentComponent,\n    MyAccountComponent,\n    CustomerServiceOverviewComponent,\n    AboutOverviewComponent,\n    TermsOverviewComponent,\n    PageMenuComponent,\n    DefaultPageComponent,\n    StoreStockComponent,\n    WebshopThemeDetailComponent,\n    WebshopOutfitMediasetCategoriesComponent,\n    LoyaltyGiftShopComponent,\n    StartupLoadingComponent,\n    LoyaltyGiftDetailComponent,\n    LoyaltyGiftVouchersComponent,\n    NewsletterSignupModalComponent,\n    CartCheckoutComponent,\n    CartPaymentComponent,\n    ProductFamilyOverviewComponent,\n    ProductAddToCartModalComponent,\n    AddToCartSuccessModalComponent,\n    SearchResultsComponent,\n    SubmitReturnComponent,\n    StoryViewerComponent,\n    SpinTheWheelComponent,\n  ],\n  imports: [\n    CommonModule,\n    HttpClientModule,\n    IonicModule,\n    RouterModule,\n    NgxStarsModule,\n    // NgAisModule,\n    FormsModule,\n    ReactiveFormsModule,\n    LazyLoadImageModule,\n    VgCoreModule,\n    VgControlsModule,\n    VgOverlayPlayModule,\n    VgBufferingModule,\n    NgCalendarModule,\n    InViewportModule,\n  ],\n  exports: [\n    InitializeComponent,\n    CommonHeaderComponent,\n    WizardComponent,\n    WizardStepComponent,\n    CommonFooterComponent,\n    FooterComponent,\n    ProductAddToCartComponent,\n    HeaderComponent,\n    CartOverviewComponent,\n    ProductSliderComponent,\n    FeaturedProductComponent,\n    BannersComponent,\n    TextBlockComponent,\n    NewsletterSignupComponent,\n    UspContainerComponent,\n    UspItemComponent,\n    MenuComponent,\n    WishlistOverviewComponent,\n    SearchComponent,\n    ProductContainerComponent,\n    CartSummaryComponent,\n    CartShipmentComponent,\n    CartDoPaymentComponent,\n    CartCheckPaymentComponent,\n    CartResultPaymentComponent,\n    SubscriptionMainComponent,\n    SubscriptionInfoComponent,\n    SubscriptionTransactionComponent,\n    SubscriptionTransactionArchiveComponent,\n    SubscriptionNoteComponent,\n    SubscriptionReviewComponent,\n    SubscriptionConsentComponent,\n    SubscriptionEmployeeComponent,\n    SubscriptionTestComponent,\n    UserAddressDetailsComponent,\n    UserBasicDetailsComponent,\n    ProductOverviewComponent,\n    CouponCheckComponent,\n    InitializeComponent,\n    MenuComponent,\n    PointsComponent,\n    ProductDetailComponent,\n    CampaignDetailComponent,\n    ChatComponent,\n    OnlineShoppingComponent,\n    LoginComponent,\n    RegisterComponent,\n    BackButtonComponent,\n    NewsletterComponent,\n    LoadingComponent,\n    ReviewOverviewComponent,\n    ShopWindowProductOverviewComponent,\n    OrderOverviewComponent,\n    HideHeaderDirective,\n    PromoImageComponent,\n    PromoImageGridComponent,\n    ProductOptionOverviewComponent,\n    WebshopFiltersComponent,\n    CustomerMembershipComponent,\n    AppointmentAgendaComponent,\n    CreateAppointmentComponent,\n    MyAccountComponent,\n    CustomerServiceOverviewComponent,\n    AboutOverviewComponent,\n    TermsOverviewComponent,\n    PageMenuComponent,\n    DefaultPageComponent,\n    StoreStockComponent,\n    WebshopThemeDetailComponent,\n    WebshopOutfitMediasetCategoriesComponent,\n    LoyaltyGiftShopComponent,\n    StartupLoadingComponent,\n    LoyaltyGiftDetailComponent,\n    LoyaltyGiftVouchersComponent,\n    NewsletterSignupModalComponent,\n    CartCheckoutComponent,\n    CartPaymentComponent,\n    SubmitReturnComponent,\n    SpinTheWheelComponent\n  ],\n  schemas: [\n    CUSTOM_ELEMENTS_SCHEMA\n  ]\n})\nexport class RopeNgxIonicEcommerceModule {\n  static forRoot(): ModuleWithProviders<RopeNgxIonicEcommerceModule> {\n    return {\n      ngModule: RopeNgxIonicEcommerceModule,\n      providers: [\n        AnalyticsService,\n        AppointmentService,\n        AuthService,\n        BlogService,\n        BranchService,\n        CampaignService,\n        CartService,\n        ChatService,\n        CookieConsentService,\n        CoreService,\n        CouponService,\n        EmployeeService,\n        EventService,\n        FavouriteService,\n        LogService,\n        LoyaltyService,\n        MockService,\n        OptionService,\n        OrderService,\n        OutfitService,\n        PaymentService,\n        ReservationService,\n        ReviewService,\n        ScreensizeService,\n        ScriptService,\n        SeoService,\n        ServiceRequestService,\n        ShipmentService,\n        StorageService,\n        SubscriptionService,\n        WebsiteService,\n        WindowRefService,\n        WishlistService,\n      ],\n    };\n  }\n}","export class Blog {\n    id: number;\n    content: string;\n    externalId: 5;\n    title: string;\n    timestamp: number;\n}","import { Image } from './image';\n\nexport class Employee {\n    id: number;\n    name: string;\n    instagram_url: string;\n    images: Image[];\n    title: string;\n    feed: any;\n}\n","export class Image {\n    url: string;\n\n    constructor(url: string) {\n        \n    }\n}\n","export class Option {\n    id: number;\n    name: string;\n    is_active: boolean;\n}\n","import { Image } from './image';\n\nexport class Outfit {\n    id: number;\n    name: string;\n    images: Image[];\n    short_description: string;\n    description: string;\n    outfit_type: string;\n    price: number;\n    main_media_url: string;\n    outfit_advices: any[];\n    likes: number;\n    medias: any[];\n    outfit_mediasets: any[];\n\n    products: any[];\n\n    constructor() {\n        this.images = new Array<Image>();\n        this.likes = 0;\n    }\n}\n","import { PaymentMethod } from './payment-method';\nimport { Order } from \"./order\";\n\nexport class Payment {\n    payment_method: PaymentMethod;\n    transaction: Order;\n}\n","import { Image } from './image';\n\nexport class PaymentMethod {\n    name: string;\n    localized_name: string;\n    oneliner: string;\n    images: Image[];\n}\n","import { ProductVariant } from './product-variant';\nimport { Image } from './image';\nimport { Outfit } from \"./outfit\";\n\nexport class Product {\n    id: number;\n    name: string;\n    discount_price: number;\n    unit_price: number;\n    showMessage: boolean;\n    supplier_code: string;\n\n    product_variants: ProductVariant[];\n    product_preorders: any[];\n    productVariantToAdd: ProductVariant;\n    outfits: Outfit[];\n    image: Image;\n    promotion;\n\n}","import { Image } from './image';\n\nexport class Review {\n    id: number;\n    name: string;\n    rating: 5;\n    text: string;\n    timestamp: number;\n}","import { Image } from './image';\n\nexport class ShippingMethod {\n    cif_string: string;\n    cost: number;\n    localized_string: string;\n    name: string;\n    product_code_delivery: string;\n    images: Image[];\n}\n","export class Stats {\n    count: number;\n}","export class Stock {\n    id: number;\n    stock_level: number;\n}","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["uuid","i2.LogService","i3.MockService","i4","i5.StorageService","i1.CoreService","i3.StorageService","uuidv5","i1","i2","i4.StorageService","i5.OutfitService","i6","i7.WindowRefService","i8.CoreService","i9.LogService","i2.CoreService","i3","i5.AnalyticsService","i6.StorageService","i1.StorageService","i3.CoreService","i4.AnalyticsService","i3.CookieConsentService","i4.AuthService","i6.AnalyticsService","i1.CartService","i1.WizardComponent","i2.MockService","i2.ReviewService","i1.AuthService","i4.MockService","i2.ScreensizeService","i3.ChatService","i4.BranchService","i5.ReviewService","i8","i9","i2.StorageService","i3.AuthService","i2.AnalyticsService","i3.WishlistService","i4.ReservationService","i5","i6.AuthService","i7","i1.OutfitService","i4.ScreensizeService","i5.CartService","i3.ProductContainerComponent","tap","i2.ChatService","i3.AnalyticsService","i5.CoreService","i6.WishlistService","i8.BranchService","i9.OrderService","i10.OutfitService","i11.AuthService","i12","i13","i14","i15.PromoBannerComponent","first","i2.CartService","i4.FavouriteService","i6.OutfitService","i8.ShipmentService","i9.CoreService","i10.ScreensizeService","i11","i12.LoadingComponent","i3.ScreensizeService","i1.ScreensizeService","i2.WishlistService","i5.ShipmentService","i10.PointsComponent","i4.WishlistService","i6.ScreensizeService","i7.OutfitService","i3.OutfitService","i7.AnalyticsService","i9.ScreensizeService","i3.PaymentService","i4.OrderService","i1.PaymentService","i2.SubscriptionService","i6.PaymentService","i1.SubscriptionService","i4.CoreService","i1.EmployeeService","i2.OutfitService","i4.EmployeeService","i5.BranchService","i7.AuthService","i10.WizardComponent","i11.WizardStepComponent","i5.ReservationService","i7.CartService","i2.AuthService","i8.LoadingComponent","i2.OptionService","i4.OutfitService","i5.ScreensizeService","i6.FavouriteService","i7.WishlistService","i8.CartService","i10.SeoService","i11.StorageService","i14.ProductContainerComponent","i1.CouponService","i3.CartService","i5.TextBlockComponent","i4.CartService","i5.CouponService","i2.CouponService","i6.ScriptService","i6.CartService","i9.CookieConsentService","i10.AnalyticsService","i11.BranchService","i12.CampaignService","i13.OptionService","i3.ReservationService","i5.WishlistService","i6.CoreService","i8.AnalyticsService","i9.BranchService","i11.CartService","i12.ScreensizeService","i15.CommonFooterComponent","i16.ProductContainerComponent","i17.BackButtonComponent","i18.ProductFamilyOverviewComponent","i2.CampaignService","i7.ProductContainerComponent","i1.ChatService","i3.ServiceRequestService","i1.ServiceRequestService","i8.ChatComponent","i8.WishlistService","i3.NewsletterSignupComponent","i4.ShipmentService","i9.LoadingComponent","i2.BranchService","i5.ProductContainerComponent","i3.OrderService","i1.OptionService","i2.AppointmentService","i7.LogService","i10","i3.AppointmentService","i4.PageMenuComponent","i1.ReviewService","i2.PageMenuComponent","i5.OptionService","i2.LoyaltyService","i6.PointsComponent","i7.LoadingComponent","i1.LoyaltyService","i7.PointsComponent","i8.BackButtonComponent","i7.BackButtonComponent","i4.CouponService","i7.ShipmentService","i8.ScreensizeService","i9.PaymentService","i11.CartOverviewComponent","i12.UserAddressDetailsComponent","i13.UserBasicDetailsComponent","i14.CartShipmentComponent","i15.CartPaymentComponent","i2.OrderService","i6.LoadingComponent"],"mappings":"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"}