@infrab4a/connect-angular 5.0.0-beta.4 → 5.0.0-beta.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/angular-connect.module.d.ts +9 -6
  2. package/angular-firestore.module.d.ts +1 -2
  3. package/consts/index.d.ts +1 -0
  4. package/consts/persistence.const.d.ts +1 -0
  5. package/esm2022/angular-connect.module.mjs +25 -5
  6. package/esm2022/angular-firestore.module.mjs +17 -34
  7. package/esm2022/angular-hasura-graphql.module.mjs +24 -2
  8. package/esm2022/consts/index.mjs +2 -1
  9. package/esm2022/consts/persistence.const.mjs +2 -0
  10. package/esm2022/index.mjs +2 -1
  11. package/esm2022/persistence/cookie-data-persistence.mjs +22 -0
  12. package/esm2022/persistence/data-persistence.mjs +2 -0
  13. package/esm2022/persistence/index.mjs +3 -0
  14. package/esm2022/services/cart.service.mjs +11 -10
  15. package/esm2022/services/catalog/adapters/new-category-structure.adapter.mjs +6 -4
  16. package/esm2022/services/catalog/catalog.service.mjs +69 -13
  17. package/esm2022/services/catalog/category.service.mjs +4 -4
  18. package/esm2022/services/catalog/wishlist.service.mjs +28 -19
  19. package/esm2022/services/checkout-subscription.service.mjs +18 -21
  20. package/esm2022/services/checkout.service.mjs +13 -16
  21. package/esm2022/services/coupon.service.mjs +35 -10
  22. package/fesm2022/infrab4a-connect-angular.mjs +256 -123
  23. package/fesm2022/infrab4a-connect-angular.mjs.map +1 -1
  24. package/index.d.ts +1 -0
  25. package/package.json +7 -7
  26. package/persistence/cookie-data-persistence.d.ts +10 -0
  27. package/persistence/data-persistence.d.ts +6 -0
  28. package/persistence/index.d.ts +2 -0
  29. package/services/catalog/catalog.service.d.ts +10 -4
  30. package/services/catalog/category.service.d.ts +6 -1
  31. package/services/catalog/wishlist.service.d.ts +6 -5
  32. package/services/checkout-subscription.service.d.ts +5 -4
  33. package/services/checkout.service.d.ts +8 -4
  34. package/services/coupon.service.d.ts +6 -2
@@ -1,20 +1,20 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { NgModule, InjectionToken, PLATFORM_ID, Injectable, Inject } from '@angular/core';
3
3
  import * as i1$4 from '@angular/fire/app';
4
- import { FirebaseApp, getApp, initializeApp, provideFirebaseApp } from '@angular/fire/app';
4
+ import { FirebaseApp, provideFirebaseApp, getApp, initializeApp } from '@angular/fire/app';
5
+ import * as i2 from '@angular/fire/storage';
6
+ import { Storage, provideStorage, getStorage } from '@angular/fire/storage';
5
7
  import * as i1$2 from '@infrab4a/connect';
6
- import { ProductsIndex, AxiosAdapter, Authentication, AuthenticationFirebaseAuthService, Register, RegisterFirebaseAuthService, SignOut, RecoveryPassword, UserBeautyProfileFirestoreRepository, Buy2WinFirestoreRepository, CategoryFirestoreRepository, CheckoutFirestoreRepository, CheckoutSubscriptionFirestoreRepository, CouponFirestoreRepository, CampaignHashtagFirestoreRepository, CampaignDashboardFirestoreRepository, SubscriptionEditionFirestoreRepository, HomeFirestoreRepository, LeadFirestoreRepository, LegacyOrderFirestoreRepository, ShopMenuFirestoreRepository, OrderFirestoreRepository, PaymentFirestoreRepository, ProductFirestoreRepository, ShopSettingsFirestoreRepository, SubscriptionPaymentFirestoreRepository, SubscriptionPlanFirestoreRepository, SubscriptionProductFirestoreRepository, SubscriptionFirestoreRepository, UserFirestoreRepository, UserAddressFirestoreRepository, UserPaymentMethodFirestoreRepository, SubscriptionMaterializationFirestoreRepository, SubscriptionSummaryFirestoreRepository, ProductVariantFirestoreRepository, FirebaseFileUploaderService, CategoryHasuraGraphQLRepository, ProductHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository, ProductReviewsHasuraGraphQLRepository, VariantHasuraGraphQLRepository, FilterOptionHasuraGraphQLRepository, FilterHasuraGraphQLRepository, CategoryCollectionChildrenHasuraGraphQLRepository, WishlistHasuraGraphQLRepository, Where, Shops, CheckoutTypes, CouponTypes, Exclusivities, isNil, NotFoundError, Checkout, pick, LineItem, RoundProductPricesHelper, set, InvalidArgumentError, Category, Wishlist, CheckoutSubscription, Product, RequiredArgumentError, add, Order, UpdateUserImage } from '@infrab4a/connect';
8
+ import { ProductsIndex, AxiosAdapter, Authentication, AuthenticationFirebaseAuthService, Register, RegisterFirebaseAuthService, SignOut, RecoveryPassword, ConnectFirestoreService, UserBeautyProfileFirestoreRepository, Buy2WinFirestoreRepository, CategoryFirestoreRepository, CheckoutFirestoreRepository, CheckoutSubscriptionFirestoreRepository, CouponFirestoreRepository, CampaignHashtagFirestoreRepository, CampaignDashboardFirestoreRepository, SubscriptionEditionFirestoreRepository, HomeFirestoreRepository, LeadFirestoreRepository, LegacyOrderFirestoreRepository, ShopMenuFirestoreRepository, OrderFirestoreRepository, PaymentFirestoreRepository, ProductFirestoreRepository, ShopSettingsFirestoreRepository, SubscriptionPaymentFirestoreRepository, SubscriptionPlanFirestoreRepository, SubscriptionProductFirestoreRepository, SubscriptionFirestoreRepository, UserFirestoreRepository, UserAddressFirestoreRepository, UserPaymentMethodFirestoreRepository, SubscriptionMaterializationFirestoreRepository, SubscriptionSummaryFirestoreRepository, ProductVariantFirestoreRepository, CategoryHasuraGraphQLRepository, ProductHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository, ProductReviewsHasuraGraphQLRepository, VariantHasuraGraphQLRepository, ProductStockNotificationHasuraGraphQLRepository, FilterOptionHasuraGraphQLRepository, FilterHasuraGraphQLRepository, CategoryCollectionChildrenHasuraGraphQLRepository, WishlistHasuraGraphQLRepository, Where, Shops, CheckoutTypes, CouponTypes, Exclusivities, isNil, NotFoundError, Checkout, pick, LineItem, RoundProductPricesHelper, set, InvalidArgumentError, Category, Wishlist, CheckoutSubscription, Product, RequiredArgumentError, add, Order, UpdateUserImage, FirebaseFileUploaderService } from '@infrab4a/connect';
7
9
  import * as i1 from '@angular/fire/auth';
8
- import { Auth, getAuth, provideAuth, getIdToken, authState } from '@angular/fire/auth';
10
+ import { Auth, provideAuth, getAuth, getIdToken, authState } from '@angular/fire/auth';
9
11
  import { isPlatformBrowser, isPlatformServer } from '@angular/common';
10
12
  import * as i1$1 from '@angular/fire/firestore';
11
- import { Firestore, getFirestore, memoryLocalCache, initializeFirestore, provideFirestore, doc, docSnapshots } from '@angular/fire/firestore';
12
- import * as i2 from '@angular/fire/storage';
13
- import { Storage, getStorage, provideStorage } from '@angular/fire/storage';
14
- import { combineLatest, of, from, throwError, Subject, iif, forkJoin } from 'rxjs';
15
- import { map, catchError, mergeMap, concatMap, tap } from 'rxjs/operators';
13
+ import { Firestore, provideFirestore, initializeFirestore, memoryLocalCache, docSnapshots, doc } from '@angular/fire/firestore';
16
14
  import cookie from 'js-cookie';
17
- import { __metadata, __decorate } from 'tslib';
15
+ import { of, from, combineLatest, throwError, Subject, iif, forkJoin } from 'rxjs';
16
+ import { map, mergeMap, catchError, concatMap, tap } from 'rxjs/operators';
17
+ import { __decorate, __metadata } from 'tslib';
18
18
  import { Type } from 'class-transformer';
19
19
  import * as i1$3 from '@angular/common/http';
20
20
 
@@ -61,6 +61,8 @@ const FIREBASE_OPTIONS = new InjectionToken('firebaseOptions');
61
61
 
62
62
  const HASURA_OPTIONS = 'HASURA_OPTIONS';
63
63
 
64
+ const PERSISTENCE_PROVIDER = 'PERSISTENCE_PROVIDER';
65
+
64
66
  class AngularFirebaseAuthModule {
65
67
  static initializeApp(options, nameOrConfig) {
66
68
  return {
@@ -169,8 +171,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
169
171
  }]
170
172
  }] });
171
173
 
172
- const STORAGE_BASE_URL = 'STORAGE_BASE_URL';
173
-
174
174
  class MobileOperationSystemCheckerHelper {
175
175
  static isAppleDevice() {
176
176
  return (['iPad Simulator', 'iPhone Simulator', 'iPod Simulator', 'iPad', 'iPhone', 'iPod'].includes(navigator?.platform) ||
@@ -190,12 +190,12 @@ class AngularFirestoreModule {
190
190
  };
191
191
  }
192
192
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularFirestoreModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
193
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.3", ngImport: i0, type: AngularFirestoreModule, imports: [AngularElasticSeachModule, i1$1.FirestoreModule, i2.StorageModule] }); }
193
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.3", ngImport: i0, type: AngularFirestoreModule, imports: [AngularElasticSeachModule, i1$1.FirestoreModule] }); }
194
194
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularFirestoreModule, providers: [
195
195
  {
196
196
  provide: 'FirestoreOptions',
197
197
  useFactory: (firestore, platformId) => ({
198
- firestore,
198
+ firestore: new ConnectFirestoreService(firestore),
199
199
  interceptors: {
200
200
  request: (request) => {
201
201
  if (isPlatformBrowser(platformId))
@@ -403,27 +403,20 @@ class AngularFirestoreModule {
403
403
  },
404
404
  deps: ['FirestoreOptions', ProductFirestoreRepository],
405
405
  },
406
- {
407
- provide: 'FileUploaderService',
408
- useFactory: (storage, baseUrl) => {
409
- return new FirebaseFileUploaderService(storage, baseUrl);
410
- },
411
- deps: [Storage, STORAGE_BASE_URL],
412
- },
413
406
  ], imports: [AngularElasticSeachModule,
414
407
  provideFirestore((injector) => {
415
408
  const platformId = injector.get(PLATFORM_ID);
416
- if (isPlatformServer(platformId))
417
- return getFirestore(injector.get(FirebaseApp));
418
- if (!MobileOperationSystemCheckerHelper.isAppleDevice())
419
- return getFirestore(injector.get(FirebaseApp));
409
+ if (isPlatformServer(platformId) || !MobileOperationSystemCheckerHelper.isAppleDevice())
410
+ return initializeFirestore(injector.get(FirebaseApp), {
411
+ ignoreUndefinedProperties: true,
412
+ });
420
413
  const firestore = initializeFirestore(injector.get(FirebaseApp), {
421
414
  experimentalForceLongPolling: true,
415
+ ignoreUndefinedProperties: true,
422
416
  localCache: memoryLocalCache(),
423
417
  });
424
418
  return firestore;
425
- }),
426
- provideStorage(() => getStorage())] }); }
419
+ })] }); }
427
420
  }
428
421
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularFirestoreModule, decorators: [{
429
422
  type: NgModule,
@@ -432,23 +425,23 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
432
425
  AngularElasticSeachModule,
433
426
  provideFirestore((injector) => {
434
427
  const platformId = injector.get(PLATFORM_ID);
435
- if (isPlatformServer(platformId))
436
- return getFirestore(injector.get(FirebaseApp));
437
- if (!MobileOperationSystemCheckerHelper.isAppleDevice())
438
- return getFirestore(injector.get(FirebaseApp));
428
+ if (isPlatformServer(platformId) || !MobileOperationSystemCheckerHelper.isAppleDevice())
429
+ return initializeFirestore(injector.get(FirebaseApp), {
430
+ ignoreUndefinedProperties: true,
431
+ });
439
432
  const firestore = initializeFirestore(injector.get(FirebaseApp), {
440
433
  experimentalForceLongPolling: true,
434
+ ignoreUndefinedProperties: true,
441
435
  localCache: memoryLocalCache(),
442
436
  });
443
437
  return firestore;
444
438
  }),
445
- provideStorage(() => getStorage()),
446
439
  ],
447
440
  providers: [
448
441
  {
449
442
  provide: 'FirestoreOptions',
450
443
  useFactory: (firestore, platformId) => ({
451
- firestore,
444
+ firestore: new ConnectFirestoreService(firestore),
452
445
  interceptors: {
453
446
  request: (request) => {
454
447
  if (isPlatformBrowser(platformId))
@@ -656,13 +649,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
656
649
  },
657
650
  deps: ['FirestoreOptions', ProductFirestoreRepository],
658
651
  },
659
- {
660
- provide: 'FileUploaderService',
661
- useFactory: (storage, baseUrl) => {
662
- return new FirebaseFileUploaderService(storage, baseUrl);
663
- },
664
- deps: [Storage, STORAGE_BASE_URL],
665
- },
666
652
  ],
667
653
  }]
668
654
  }] });
@@ -744,6 +730,17 @@ class AngularHasuraGraphQLModule {
744
730
  },
745
731
  deps: ['HasuraConfig'],
746
732
  },
733
+ {
734
+ provide: 'ProductStockNotificationRepository',
735
+ useExisting: ProductStockNotificationHasuraGraphQLRepository,
736
+ },
737
+ {
738
+ provide: ProductStockNotificationHasuraGraphQLRepository,
739
+ useFactory: (hasuraConfig) => {
740
+ return new ProductStockNotificationHasuraGraphQLRepository(hasuraConfig);
741
+ },
742
+ deps: ['HasuraConfig'],
743
+ },
747
744
  {
748
745
  provide: 'CategoryFilterRepository',
749
746
  useExisting: CategoryFilterHasuraGraphQLRepository,
@@ -870,6 +867,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
870
867
  },
871
868
  deps: ['HasuraConfig'],
872
869
  },
870
+ {
871
+ provide: 'ProductStockNotificationRepository',
872
+ useExisting: ProductStockNotificationHasuraGraphQLRepository,
873
+ },
874
+ {
875
+ provide: ProductStockNotificationHasuraGraphQLRepository,
876
+ useFactory: (hasuraConfig) => {
877
+ return new ProductStockNotificationHasuraGraphQLRepository(hasuraConfig);
878
+ },
879
+ deps: ['HasuraConfig'],
880
+ },
873
881
  {
874
882
  provide: 'CategoryFilterRepository',
875
883
  useExisting: CategoryFilterHasuraGraphQLRepository,
@@ -927,6 +935,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
927
935
  }]
928
936
  }] });
929
937
 
938
+ const STORAGE_BASE_URL = 'STORAGE_BASE_URL';
939
+
940
+ class CookieDataPersistence {
941
+ get(key) {
942
+ return of(cookie.get(key));
943
+ }
944
+ remove(key) {
945
+ return of(cookie.remove(key));
946
+ }
947
+ set(key, value) {
948
+ return from(cookie.set(key, value)).pipe(map(() => { }));
949
+ }
950
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CookieDataPersistence, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
951
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CookieDataPersistence }); }
952
+ }
953
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CookieDataPersistence, decorators: [{
954
+ type: Injectable
955
+ }] });
956
+
930
957
  class AuthService {
931
958
  constructor(angularFireAuth, userRepository) {
932
959
  this.angularFireAuth = angularFireAuth;
@@ -1033,32 +1060,33 @@ class CouponService {
1033
1060
  return of(discount);
1034
1061
  }
1035
1062
  async calcDiscountShopping(coupon, checkout) {
1036
- let discount = 0;
1063
+ let discountInfo = null;
1037
1064
  if (checkout.user.isSubscriber && coupon.discount.subscriber.value) {
1038
- discount = await this.calcDiscountByType(coupon.discount.subscriber.type, coupon.discount.subscriber.value, coupon.productsCategories, checkout);
1065
+ discountInfo = await this.calcDiscountByType(coupon.discount.subscriber.type, coupon.discount.subscriber.value, coupon.productsCategories, checkout);
1039
1066
  }
1040
1067
  else {
1041
- discount = await this.calcDiscountByType(coupon.discount.non_subscriber.type, coupon.discount.non_subscriber.value, coupon.productsCategories, checkout);
1068
+ discountInfo = await this.calcDiscountByType(coupon.discount.non_subscriber.type, coupon.discount.non_subscriber.value, coupon.productsCategories, checkout);
1042
1069
  }
1043
- return discount;
1070
+ return { discount: discountInfo.discount, lineItems: discountInfo.lineItems };
1044
1071
  }
1045
1072
  async calcDiscountByType(type, value, categories, checkout) {
1046
1073
  let discount = 0;
1047
- let lineItensDiscount = await this.getLineItensEligebleForDiscount(categories, checkout);
1048
- const subTotal = this.calcCheckoutSubtotal(lineItensDiscount, checkout.user, checkout.shop);
1074
+ let lineItensElegibleForDiscount = await this.getLineItensEligebleForDiscount(categories, checkout);
1075
+ const subTotal = this.calcCheckoutSubtotal(lineItensElegibleForDiscount, checkout.user);
1049
1076
  if (type == CouponTypes.ABSOLUTE) {
1050
1077
  discount = value > subTotal ? subTotal : value;
1051
1078
  }
1052
1079
  else {
1053
1080
  discount = subTotal * (value / 100);
1054
1081
  }
1055
- return discount;
1082
+ const lineItems = this.calcLineItenDiscount(type, lineItensElegibleForDiscount, value, subTotal);
1083
+ return { discount, lineItems };
1056
1084
  }
1057
1085
  async hasMinSubTotal(coupon, checkout) {
1058
1086
  if (!coupon.minSubTotalValue)
1059
1087
  return true;
1060
1088
  let lineItensDiscount = await this.getLineItensEligebleForDiscount(coupon.productsCategories, checkout);
1061
- const subTotal = this.calcCheckoutSubtotal(lineItensDiscount, checkout.user, checkout.shop);
1089
+ const subTotal = this.calcCheckoutSubtotal(lineItensDiscount, checkout.user);
1062
1090
  if (coupon.minSubTotalValue <= subTotal)
1063
1091
  return true;
1064
1092
  return false;
@@ -1126,7 +1154,7 @@ class CouponService {
1126
1154
  }
1127
1155
  return lineItensDiscount;
1128
1156
  }
1129
- calcCheckoutSubtotal(lineItens, user, shop) {
1157
+ calcCheckoutSubtotal(lineItens, user) {
1130
1158
  return (lineItens?.reduce((acc, curr) => user?.isSubscriber && curr.price.subscriberPrice
1131
1159
  ? acc + curr.price?.subscriberPrice * curr.quantity
1132
1160
  : acc + curr.pricePaid * curr.quantity, 0) || 0);
@@ -1164,6 +1192,30 @@ class CouponService {
1164
1192
  }
1165
1193
  return couponUseLimits;
1166
1194
  }
1195
+ calcLineItenDiscount(type, lineItems, couponDiscount, subTotal) {
1196
+ let lineItemsDiscount = [];
1197
+ if (type === CouponTypes.ABSOLUTE) {
1198
+ const couponDiscountMax = couponDiscount > subTotal ? subTotal : couponDiscount;
1199
+ lineItemsDiscount = lineItems.map((item) => {
1200
+ const totalItemPercentage = item.pricePaid / subTotal;
1201
+ const discountItem = couponDiscountMax * totalItemPercentage;
1202
+ return {
1203
+ ...item,
1204
+ discount: Number(discountItem.toFixed(2)),
1205
+ };
1206
+ });
1207
+ }
1208
+ else {
1209
+ lineItemsDiscount = lineItems.map((item) => {
1210
+ const discountItem = item.pricePaid * (couponDiscount / 100);
1211
+ return {
1212
+ ...item,
1213
+ discount: Number(discountItem.toFixed(2)),
1214
+ };
1215
+ });
1216
+ }
1217
+ return lineItemsDiscount;
1218
+ }
1167
1219
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CouponService, deps: [{ token: 'CouponRepository' }, { token: DEFAULT_SHOP }, { token: 'OrderRepository' }, { token: 'CategoryRepository' }], target: i0.ɵɵFactoryTarget.Injectable }); }
1168
1220
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CouponService, providedIn: 'root' }); }
1169
1221
  }
@@ -1187,18 +1239,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
1187
1239
  }] }] });
1188
1240
 
1189
1241
  class CheckoutService {
1190
- constructor(couponService, checkoutRepository, orderRepository, userRepository, defaultShop) {
1242
+ constructor(couponService, checkoutRepository, userRepository, defaultShop, dataPersistence) {
1191
1243
  this.couponService = couponService;
1192
1244
  this.checkoutRepository = checkoutRepository;
1193
- this.orderRepository = orderRepository;
1194
1245
  this.userRepository = userRepository;
1195
1246
  this.defaultShop = defaultShop;
1247
+ this.dataPersistence = dataPersistence;
1196
1248
  }
1197
1249
  getCheckout(checkoutData) {
1198
- const checkoutId = cookie.get('checkoutId');
1199
- if (!isNil(checkoutId))
1200
- return from(this.checkoutRepository.get({ id: checkoutId }));
1201
- return from(this.createCheckout(checkoutData));
1250
+ return this.dataPersistence
1251
+ .get('checkoutId')
1252
+ .pipe(concatMap((id) => (!isNil(id) ? this.checkoutRepository.get({ id }) : this.createCheckout(checkoutData))));
1202
1253
  }
1203
1254
  getUserByCheckout(checkoutId) {
1204
1255
  return from(this.checkoutRepository.get({ id: checkoutId })).pipe(concatMap((checkout) => checkout?.user?.id ? of(checkout.user) : from(this.userRepository.get({ id: checkout.user.id }))), concatMap((user) => of(user) || throwError(() => new NotFoundError('User is not found'))));
@@ -1210,8 +1261,7 @@ class CheckoutService {
1210
1261
  return from(this.checkoutRepository.update(Checkout.toInstance({ id: checkout.id, user: checkout.user })));
1211
1262
  }
1212
1263
  clearCheckoutFromSession() {
1213
- cookie.remove('checkoutId');
1214
- return of();
1264
+ return this.dataPersistence.remove('checkoutId');
1215
1265
  }
1216
1266
  calcDiscount(coupon) {
1217
1267
  return this.getCheckout().pipe(concatMap(async (checkout) => await this.couponService.calcDiscountShopping(coupon, checkout)));
@@ -1225,10 +1275,10 @@ class CheckoutService {
1225
1275
  ...Checkout.toInstance(pick(checkoutData, ['user', 'shop'])).toPlain(),
1226
1276
  shop: checkoutData?.shop || this.defaultShop,
1227
1277
  });
1228
- cookie.set('checkoutId', checkout.id);
1278
+ await this.dataPersistence.set('checkoutId', checkout.id).toPromise();
1229
1279
  return checkout;
1230
1280
  }
1231
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CheckoutService, deps: [{ token: CouponService }, { token: 'CheckoutRepository' }, { token: 'OrderRepository' }, { token: 'UserRepository' }, { token: DEFAULT_SHOP }], target: i0.ɵɵFactoryTarget.Injectable }); }
1281
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CheckoutService, deps: [{ token: CouponService }, { token: 'CheckoutRepository' }, { token: 'UserRepository' }, { token: DEFAULT_SHOP }, { token: PERSISTENCE_PROVIDER }], target: i0.ɵɵFactoryTarget.Injectable }); }
1232
1282
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CheckoutService }); }
1233
1283
  }
1234
1284
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CheckoutService, decorators: [{
@@ -1236,15 +1286,15 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
1236
1286
  }], ctorParameters: () => [{ type: CouponService }, { type: undefined, decorators: [{
1237
1287
  type: Inject,
1238
1288
  args: ['CheckoutRepository']
1239
- }] }, { type: undefined, decorators: [{
1240
- type: Inject,
1241
- args: ['OrderRepository']
1242
1289
  }] }, { type: undefined, decorators: [{
1243
1290
  type: Inject,
1244
1291
  args: ['UserRepository']
1245
1292
  }] }, { type: i1$2.Shops, decorators: [{
1246
1293
  type: Inject,
1247
1294
  args: [DEFAULT_SHOP]
1295
+ }] }, { type: undefined, decorators: [{
1296
+ type: Inject,
1297
+ args: [PERSISTENCE_PROVIDER]
1248
1298
  }] }] });
1249
1299
 
1250
1300
  class CartService {
@@ -1280,8 +1330,8 @@ class CartService {
1280
1330
  this.buildLineItem = async ({ checkout, item, quantity, }) => {
1281
1331
  const product = await this.getProductData(item.id);
1282
1332
  item.quantity = item?.quantity || checkout?.lineItems?.find((lineItem) => lineItem.id === item.id)?.quantity || 0;
1283
- if (this.checkMaxStock(item, quantity || 0))
1284
- throw new Error('Desculpe! Temos apenas ' + item.stock?.quantity + ' em estoque.');
1333
+ if (this.checkMaxStock(product.stock.quantity, item.quantity || 0, quantity || 0))
1334
+ throw new Error('Desculpe! Temos apenas ' + product.stock?.quantity + ' em estoque.');
1285
1335
  const image = item.image || item.images?.shift();
1286
1336
  const { id, name, EAN, slug, stock, price, weight, sku, type } = item;
1287
1337
  const isGift = item.isGift || null;
@@ -1306,6 +1356,7 @@ class CartService {
1306
1356
  weight: weight ?? product.weight,
1307
1357
  quantity: (item.quantity || 0) + (quantity || 0),
1308
1358
  pricePaid,
1359
+ discount: 0,
1309
1360
  categories: product.categories ?? [],
1310
1361
  isGift: isGift ?? null,
1311
1362
  costPrice: product.costPrice ?? 0,
@@ -1321,10 +1372,10 @@ class CartService {
1321
1372
  ? Number(info.subscriberPrice.toFixed(2))
1322
1373
  : Number(info.price.toFixed(2));
1323
1374
  };
1324
- this.checkMaxStock = (item, quantity) => {
1325
- const maxStock = item.stock?.quantity || 0;
1326
- const currentItemAmount = item.quantity || 0;
1327
- return currentItemAmount + quantity > maxStock;
1375
+ this.checkMaxStock = (currentStock, currentItemQtd, quantityToAdd) => {
1376
+ const maxStock = currentStock || 0;
1377
+ const currentItemAmount = currentItemQtd || 0;
1378
+ return currentItemAmount + quantityToAdd > maxStock;
1328
1379
  };
1329
1380
  }
1330
1381
  addItem(item, quantity = 1) {
@@ -1357,7 +1408,7 @@ class CartService {
1357
1408
  }), concatMap((checkout) => this.checkoutService.updateCheckoutLineItems(checkout)), map((checkout) => this.generateCartObject(checkout.lineItems)), tap((cart) => this.cartSubject.next(cart)));
1358
1409
  }
1359
1410
  updateUserCart(user) {
1360
- return this.checkoutService.getCheckout().pipe(concatMap((checkout) => this.checkoutService.updateCheckoutUser(Checkout.toInstance({ ...checkout.toPlain(), user }))), concatMap(async (checkout) => this.checkoutService
1411
+ return this.checkoutService.getCheckout().pipe(concatMap((checkout) => this.checkoutService.updateCheckoutUser(Checkout.toInstance({ ...checkout.toPlain(), user }))), concatMap(async (checkout) => await this.checkoutService
1361
1412
  .updateCheckoutLineItems(Checkout.toInstance({
1362
1413
  ...checkout.toPlain(),
1363
1414
  lineItems: checkout.lineItems?.length
@@ -1541,9 +1592,11 @@ class NewCategoryStructureAdapter {
1541
1592
  .then((categories) => categories.map((category) => category.id.toString()));
1542
1593
  }
1543
1594
  async getCategory(category) {
1544
- return isNil(category.isCollection) || (category.isCollection && !category.products?.length)
1545
- ? this.categoryRepository.get({ id: category.id })
1546
- : category;
1595
+ const collectionCategory = category.isCollection ||
1596
+ (isNil(category.isCollection) && !category.products?.length) ||
1597
+ category.isWishlist ||
1598
+ category.brandCategory;
1599
+ return collectionCategory ? this.categoryRepository.get({ id: category.id }) : category;
1547
1600
  }
1548
1601
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: NewCategoryStructureAdapter, deps: [{ token: 'CategoryRepository' }], target: i0.ɵɵFactoryTarget.Injectable }); }
1549
1602
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: NewCategoryStructureAdapter }); }
@@ -1576,8 +1629,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
1576
1629
  }] }] });
1577
1630
 
1578
1631
  class CatalogService {
1579
- constructor(productRepository, categoryStructureAdapter, shop, productIndex) {
1632
+ constructor(productRepository, productStockNotificationRepository, categoryRepository, categoryStructureAdapter, shop, productIndex) {
1580
1633
  this.productRepository = productRepository;
1634
+ this.productStockNotificationRepository = productStockNotificationRepository;
1635
+ this.categoryRepository = categoryRepository;
1581
1636
  this.categoryStructureAdapter = categoryStructureAdapter;
1582
1637
  this.shop = shop;
1583
1638
  this.productIndex = productIndex;
@@ -1607,17 +1662,22 @@ class CatalogService {
1607
1662
  if (!sort || sort === 'most-relevant')
1608
1663
  return {};
1609
1664
  if (sort === 'best-sellers')
1610
- return { shoppingCount: 'desc' };
1665
+ return {
1666
+ shoppingCount: 'desc',
1667
+ rate: 'desc',
1668
+ stock: 'desc',
1669
+ name: 'asc',
1670
+ };
1611
1671
  if (sort === 'biggest-price')
1612
- return { subscriberPrice: 'desc' };
1672
+ return { subscriberPrice: 'desc', rate: 'desc', shoppingCount: 'desc' };
1613
1673
  if (sort === 'lowest-price')
1614
- return { subscriberPrice: 'asc' };
1674
+ return { subscriberPrice: 'asc', rate: 'desc', shoppingCount: 'desc' };
1615
1675
  if (sort === 'best-rating')
1616
- return { rate: 'desc' };
1676
+ return { rate: 'desc', shoppingCount: 'desc', stock: 'desc', name: 'asc' };
1617
1677
  if (sort === 'news')
1618
1678
  return { createdAt: 'desc' };
1619
1679
  if (sort === 'biggest-discount')
1620
- return { subscriberDiscountPercentage: 'desc' };
1680
+ return { subscriberDiscountPercentage: 'desc', rate: 'desc', shoppingCount: 'desc' };
1621
1681
  };
1622
1682
  this.buildLimitQuery = (options) => {
1623
1683
  const limit = options?.perPage || 20;
@@ -1651,9 +1711,27 @@ class CatalogService {
1651
1711
  brands: distinct?.brand,
1652
1712
  }));
1653
1713
  }
1714
+ async addCustomerToStockNotification(shop, productId, name, email) {
1715
+ return this.productStockNotificationRepository.addCustomerEmail(shop, productId, name, email);
1716
+ }
1654
1717
  async findCatalog(options, limits) {
1655
- if (this.hasTerm(options) && options.sort === 'most-relevant')
1656
- return this.findCatalogByTermAndSortByMostRevelant(options, limits);
1718
+ if (this.hasTerm(options) && options.sort === 'most-relevant') {
1719
+ const productsIds = await this.findCatalogIdsByElasticSearch(options.term);
1720
+ return this.findCatalogAndSortByMostRevelantByTerm(productsIds, options, limits);
1721
+ }
1722
+ if (this.hasCategory(options) && options.sort === 'most-relevant') {
1723
+ const mostRelevant = options.category.getMostRelevantByShop(this.shop) ?? [];
1724
+ const productsIds = await this.productRepository
1725
+ .findCatalog({
1726
+ fields: ['id'],
1727
+ filters: {
1728
+ ...(await this.buildMainFilter(options)),
1729
+ ...this.buildFilterQuery(options?.filters || {}),
1730
+ },
1731
+ })
1732
+ .then((products) => products.data.map((product) => product.id));
1733
+ return this.findCatalogAndSortByMostRevelant(mostRelevant, productsIds, options, limits);
1734
+ }
1657
1735
  const repoParams = {
1658
1736
  filters: {
1659
1737
  ...(await this.buildMainFilter(options)),
@@ -1681,8 +1759,33 @@ class CatalogService {
1681
1759
  .search(term, 999, this.shop)
1682
1760
  .then((data) => ({ id: { operator: Where.IN, value: data.hits.map(({ _source }) => _source.id) } }));
1683
1761
  }
1684
- async findCatalogByTermAndSortByMostRevelant(options, limits) {
1685
- const productIds = await this.findCatalogIdsByElasticSearch(options.term);
1762
+ async findCatalogAndSortByMostRevelant(mostRelevants, productIds, options, limits) {
1763
+ const mostRelevantProductsIds = [...new Set(mostRelevants.concat(productIds))];
1764
+ const totalResult = await this.productRepository.findCatalog({
1765
+ filters: {
1766
+ id: { operator: Where.IN, value: mostRelevantProductsIds },
1767
+ ...this.buildFilterQuery(options?.filters || {}),
1768
+ },
1769
+ orderBy: this.buildSortQuery('news'),
1770
+ options: {
1771
+ minimal: ['price'],
1772
+ maximum: ['price'],
1773
+ distinct: ['brand'],
1774
+ },
1775
+ }, options?.mainGender || this.shop === Shops.MENSMARKET ? 'male' : 'female');
1776
+ const firstProducts = totalResult.data.filter((product) => mostRelevants.includes(product.id));
1777
+ const lastProducts = totalResult.data.filter((product) => !mostRelevants.includes(product.id));
1778
+ const categoryMostRelevants = firstProducts.concat(lastProducts);
1779
+ const resultFinal = categoryMostRelevants.slice(limits.offset, limits.offset + limits.limit);
1780
+ return {
1781
+ data: resultFinal,
1782
+ count: totalResult.count,
1783
+ maximum: totalResult.maximum,
1784
+ minimal: totalResult.minimal,
1785
+ distinct: totalResult.distinct,
1786
+ };
1787
+ }
1788
+ async findCatalogAndSortByMostRevelantByTerm(productIds, options, limits) {
1686
1789
  const totalResult = await this.productRepository.findCatalog({
1687
1790
  fields: ['id', 'stock'],
1688
1791
  filters: {
@@ -1728,7 +1831,7 @@ class CatalogService {
1728
1831
  return [...new Set(sorted.map(({ _source }) => _source.id))];
1729
1832
  }));
1730
1833
  }
1731
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CatalogService, deps: [{ token: 'ProductRepository' }, { token: CATEGORY_STRUCTURE }, { token: DEFAULT_SHOP }, { token: i1$2.ProductsIndex }], target: i0.ɵɵFactoryTarget.Injectable }); }
1834
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CatalogService, deps: [{ token: 'ProductRepository' }, { token: 'ProductStockNotificationRepository' }, { token: 'CategoryRepository' }, { token: CATEGORY_STRUCTURE }, { token: DEFAULT_SHOP }, { token: i1$2.ProductsIndex }], target: i0.ɵɵFactoryTarget.Injectable }); }
1732
1835
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CatalogService }); }
1733
1836
  }
1734
1837
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CatalogService, decorators: [{
@@ -1736,6 +1839,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
1736
1839
  }], ctorParameters: () => [{ type: undefined, decorators: [{
1737
1840
  type: Inject,
1738
1841
  args: ['ProductRepository']
1842
+ }] }, { type: undefined, decorators: [{
1843
+ type: Inject,
1844
+ args: ['ProductStockNotificationRepository']
1845
+ }] }, { type: undefined, decorators: [{
1846
+ type: Inject,
1847
+ args: ['CategoryRepository']
1739
1848
  }] }, { type: undefined, decorators: [{
1740
1849
  type: Inject,
1741
1850
  args: [CATEGORY_STRUCTURE]
@@ -1752,15 +1861,15 @@ class CategoryService {
1752
1861
  this.categoryStructureAdapter = categoryStructureAdapter;
1753
1862
  this.shop = shop;
1754
1863
  }
1755
- async fetchBrands(category, mainGender) {
1864
+ async fetchBrands(category, options) {
1756
1865
  const brands = await this.productRepository
1757
1866
  .findCatalog({
1758
1867
  filters: await this.categoryStructureAdapter.buildProductFilterByCategory(category),
1759
1868
  fields: ['brand'],
1760
- }, mainGender || this.shop === Shops.MENSMARKET ? 'male' : 'female')
1869
+ }, options?.mainGender ? options?.mainGender : this.shop === Shops.MENSMARKET ? 'male' : 'female')
1761
1870
  .then(({ data }) => Object.keys(data.map((product) => product.brand).reduce((brands, brand) => ({ ...brands, [brand]: true }), {})));
1762
1871
  return this.categoryRepository
1763
- .find({ filters: { brandCategory: true, shop: this.shop }, orderBy: { name: 'asc' } })
1872
+ .find({ filters: { brandCategory: true, shop: options?.shop || this.shop }, orderBy: { name: 'asc' } })
1764
1873
  .then(({ data }) => data.filter((category) => brands.includes(category.conditions.brand)));
1765
1874
  }
1766
1875
  async fetchFilterOptions(category) {
@@ -1809,12 +1918,11 @@ __decorate([
1809
1918
  ], CategoryWithTree.prototype, "children", void 0);
1810
1919
 
1811
1920
  class WishlistService {
1812
- constructor(wishlistRepository, categoryRepository, shop, productRepository, categoryFilterRepository, productIndex) {
1921
+ constructor(wishlistRepository, shop, productRepository, categoryFilterRepository, categoryRepository, productStockNotificationRepository, productIndex) {
1813
1922
  this.wishlistRepository = wishlistRepository;
1814
- this.categoryRepository = categoryRepository;
1815
1923
  this.shop = shop;
1816
1924
  const categoryStructureAdapter = new NewCategoryStructureAdapter(wishlistRepository);
1817
- this.catalogService = new CatalogService(productRepository, categoryStructureAdapter, shop, productIndex);
1925
+ this.catalogService = new CatalogService(productRepository, productStockNotificationRepository, categoryRepository, categoryStructureAdapter, shop, productIndex);
1818
1926
  this.categoryService = new CategoryService(productRepository, categoryRepository, categoryFilterRepository, categoryStructureAdapter, shop);
1819
1927
  }
1820
1928
  getCatalogService() {
@@ -1823,22 +1931,25 @@ class WishlistService {
1823
1931
  getCategoryService() {
1824
1932
  return this.categoryService;
1825
1933
  }
1826
- async create({ personId, title, description, userFullName, userPhoto, theme, bannerUrl, }) {
1934
+ async create({ personId, title, description, published, userFullName, userPhoto, theme, bannerUrl, }) {
1827
1935
  const data = {
1828
1936
  slug: '',
1829
1937
  name: title,
1830
1938
  description,
1831
- metadata: {
1832
- title: `${userFullName} - ${title}`,
1833
- description: `${userFullName} - ${description}`,
1834
- },
1939
+ metadata: [
1940
+ {
1941
+ shop: this.shop,
1942
+ title: `${userFullName} - ${title}`,
1943
+ description: `${userFullName} - ${description}`,
1944
+ },
1945
+ ],
1835
1946
  shop: this.shop,
1836
1947
  shops: [this.shop],
1837
1948
  personId,
1838
1949
  personName: userFullName,
1839
1950
  personPhoto: userPhoto,
1840
1951
  brandCategory: false,
1841
- published: true,
1952
+ published,
1842
1953
  theme,
1843
1954
  bannerUrl,
1844
1955
  };
@@ -1846,15 +1957,19 @@ class WishlistService {
1846
1957
  await this.wishlistRepository.update({ id: newWishlist.id, slug: newWishlist.id });
1847
1958
  return Wishlist.toInstance({ ...newWishlist.toPlain(), slug: newWishlist.id });
1848
1959
  }
1849
- update({ id, title, description, userFullName, userPhoto, theme, bannerUrl, }) {
1960
+ update({ id, title, description, published, userFullName, userPhoto, theme, bannerUrl, }) {
1850
1961
  const data = {
1851
1962
  id,
1852
1963
  name: title,
1853
1964
  description,
1854
- metadata: {
1855
- title: `${userFullName} - ${title}`,
1856
- description: `${userFullName} - ${description}`,
1857
- },
1965
+ published,
1966
+ metadata: [
1967
+ {
1968
+ shop: this.shop,
1969
+ title: `${userFullName} - ${title}`,
1970
+ description: `${userFullName} - ${description}`,
1971
+ },
1972
+ ],
1858
1973
  personName: userFullName,
1859
1974
  personPhoto: userPhoto,
1860
1975
  theme,
@@ -1894,7 +2009,7 @@ class WishlistService {
1894
2009
  }
1895
2010
  return wishlist;
1896
2011
  }
1897
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: WishlistService, deps: [{ token: 'WishlistRepository' }, { token: 'CategoryRepository' }, { token: DEFAULT_SHOP }, { token: 'ProductRepository' }, { token: 'CategoryFilterRepository' }, { token: i1$2.ProductsIndex }], target: i0.ɵɵFactoryTarget.Injectable }); }
2012
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: WishlistService, deps: [{ token: 'WishlistRepository' }, { token: DEFAULT_SHOP }, { token: 'ProductRepository' }, { token: 'CategoryFilterRepository' }, { token: 'CategoryRepository' }, { token: 'ProductStockNotificationRepository' }, { token: i1$2.ProductsIndex }], target: i0.ɵɵFactoryTarget.Injectable }); }
1898
2013
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: WishlistService }); }
1899
2014
  }
1900
2015
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: WishlistService, decorators: [{
@@ -1902,9 +2017,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
1902
2017
  }], ctorParameters: () => [{ type: undefined, decorators: [{
1903
2018
  type: Inject,
1904
2019
  args: ['WishlistRepository']
1905
- }] }, { type: undefined, decorators: [{
1906
- type: Inject,
1907
- args: ['CategoryRepository']
1908
2020
  }] }, { type: i1$2.Shops, decorators: [{
1909
2021
  type: Inject,
1910
2022
  args: [DEFAULT_SHOP]
@@ -1914,31 +2026,27 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
1914
2026
  }] }, { type: undefined, decorators: [{
1915
2027
  type: Inject,
1916
2028
  args: ['CategoryFilterRepository']
2029
+ }] }, { type: undefined, decorators: [{
2030
+ type: Inject,
2031
+ args: ['CategoryRepository']
2032
+ }] }, { type: undefined, decorators: [{
2033
+ type: Inject,
2034
+ args: ['ProductStockNotificationRepository']
1917
2035
  }] }, { type: i1$2.ProductsIndex }] });
1918
2036
 
1919
2037
  class CheckoutSubscriptionService {
1920
- constructor(checkoutSubscriptionRepository, subscriptionRepository, couponService) {
2038
+ constructor(checkoutSubscriptionRepository, dataPersistence, couponService) {
1921
2039
  this.checkoutSubscriptionRepository = checkoutSubscriptionRepository;
1922
- this.subscriptionRepository = subscriptionRepository;
2040
+ this.dataPersistence = dataPersistence;
1923
2041
  this.couponService = couponService;
1924
2042
  }
1925
2043
  getCheckoutSubscription(checkoutData) {
1926
- const checkoutId = cookie.get('checkoutSubscriptionId');
1927
- if (!isNil(checkoutId))
1928
- return from(this.checkoutSubscriptionRepository.get({ id: checkoutId }));
1929
- return from(this.createCheckoutSubscription(checkoutData));
1930
- }
1931
- async createCheckoutSubscription(checkoutData) {
1932
- const checkout = await this.checkoutSubscriptionRepository.create({
1933
- createdAt: new Date(),
1934
- ...CheckoutSubscription.toInstance(pick(checkoutData, ['user', 'shop'])).toPlain(),
1935
- });
1936
- cookie.set('checkoutSubscriptionId', checkout.id);
1937
- return checkout;
2044
+ return this.dataPersistence
2045
+ .get('checkoutSubscriptionId')
2046
+ .pipe(concatMap((id) => !isNil(id) ? this.checkoutSubscriptionRepository.get({ id }) : this.createCheckoutSubscription(checkoutData)));
1938
2047
  }
1939
2048
  clearCheckoutSubscriptionFromSession() {
1940
- cookie.remove('checkoutSubscriptionId');
1941
- return of();
2049
+ return this.dataPersistence.remove('checkoutSubscriptionId');
1942
2050
  }
1943
2051
  checkCoupon(nickname, userEmail) {
1944
2052
  return this.getCheckoutSubscription().pipe(concatMap((checkout) => this.couponService
@@ -1948,7 +2056,15 @@ class CheckoutSubscriptionService {
1948
2056
  calcDiscountSubscription(coupon) {
1949
2057
  return this.getCheckoutSubscription().pipe(concatMap((checkout) => this.couponService.calcDiscountSubscription(coupon, checkout).pipe()));
1950
2058
  }
1951
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CheckoutSubscriptionService, deps: [{ token: 'CheckoutSubscriptionRepository' }, { token: 'SubscriptionRepository' }, { token: CouponService }], target: i0.ɵɵFactoryTarget.Injectable }); }
2059
+ async createCheckoutSubscription(checkoutData) {
2060
+ const checkout = await this.checkoutSubscriptionRepository.create({
2061
+ createdAt: new Date(),
2062
+ ...CheckoutSubscription.toInstance(pick(checkoutData, ['user', 'shop'])).toPlain(),
2063
+ });
2064
+ await this.dataPersistence.set('checkoutSubscriptionId', checkout.id).toPromise();
2065
+ return checkout;
2066
+ }
2067
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CheckoutSubscriptionService, deps: [{ token: 'CheckoutSubscriptionRepository' }, { token: PERSISTENCE_PROVIDER }, { token: CouponService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1952
2068
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CheckoutSubscriptionService }); }
1953
2069
  }
1954
2070
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: CheckoutSubscriptionService, decorators: [{
@@ -1958,7 +2074,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
1958
2074
  args: ['CheckoutSubscriptionRepository']
1959
2075
  }] }, { type: undefined, decorators: [{
1960
2076
  type: Inject,
1961
- args: ['SubscriptionRepository']
2077
+ args: [PERSISTENCE_PROVIDER]
1962
2078
  }] }, { type: CouponService }] });
1963
2079
 
1964
2080
  class UtilHelper {
@@ -2216,6 +2332,7 @@ class AngularConnectModule {
2216
2332
  ? OldCategoryStructureAdapter
2217
2333
  : NewCategoryStructureAdapter,
2218
2334
  },
2335
+ { provide: PERSISTENCE_PROVIDER, useClass: options?.persistenceProvider || CookieDataPersistence },
2219
2336
  ...(isNil(defaultShop) ? [] : [{ provide: DEFAULT_SHOP, useValue: defaultShop }]),
2220
2337
  ...(isNil(options?.firebase) ? [] : [{ provide: FIREBASE_OPTIONS, useValue: options?.firebase }]),
2221
2338
  ...(isNil(options?.firebase) ? [] : [{ provide: FIREBASE_APP_NAME, useValue: nameOrConfig }]),
@@ -2227,7 +2344,7 @@ class AngularConnectModule {
2227
2344
  };
2228
2345
  }
2229
2346
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.3", ngImport: i0, type: AngularConnectModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
2230
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.3", ngImport: i0, type: AngularConnectModule, imports: [i1$4.FirebaseAppModule, AngularElasticSeachModule,
2347
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.3", ngImport: i0, type: AngularConnectModule, imports: [i1$4.FirebaseAppModule, i2.StorageModule, AngularElasticSeachModule,
2231
2348
  AngularFirebaseAuthModule,
2232
2349
  AngularFirestoreModule,
2233
2350
  AngularHasuraGraphQLModule] }); }
@@ -2250,6 +2367,13 @@ class AngularConnectModule {
2250
2367
  },
2251
2368
  deps: ['UserRepository', 'FileUploaderService'],
2252
2369
  },
2370
+ {
2371
+ provide: 'FileUploaderService',
2372
+ useFactory: (storage, baseUrl) => {
2373
+ return new FirebaseFileUploaderService(storage, baseUrl);
2374
+ },
2375
+ deps: [Storage, STORAGE_BASE_URL],
2376
+ },
2253
2377
  ], imports: [provideFirebaseApp((injector) => {
2254
2378
  const appName = injector.get(FIREBASE_APP_NAME) || '[DEFAULT]';
2255
2379
  try {
@@ -2259,6 +2383,7 @@ class AngularConnectModule {
2259
2383
  return initializeApp(injector.get(FIREBASE_OPTIONS), appName);
2260
2384
  }
2261
2385
  }),
2386
+ provideStorage((injector) => getStorage(injector.get(FirebaseApp))),
2262
2387
  AngularElasticSeachModule,
2263
2388
  AngularFirebaseAuthModule,
2264
2389
  AngularFirestoreModule,
@@ -2277,6 +2402,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
2277
2402
  return initializeApp(injector.get(FIREBASE_OPTIONS), appName);
2278
2403
  }
2279
2404
  }),
2405
+ provideStorage((injector) => getStorage(injector.get(FirebaseApp))),
2280
2406
  AngularElasticSeachModule,
2281
2407
  AngularFirebaseAuthModule,
2282
2408
  AngularFirestoreModule,
@@ -2301,6 +2427,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
2301
2427
  },
2302
2428
  deps: ['UserRepository', 'FileUploaderService'],
2303
2429
  },
2430
+ {
2431
+ provide: 'FileUploaderService',
2432
+ useFactory: (storage, baseUrl) => {
2433
+ return new FirebaseFileUploaderService(storage, baseUrl);
2434
+ },
2435
+ deps: [Storage, STORAGE_BASE_URL],
2436
+ },
2304
2437
  ],
2305
2438
  }]
2306
2439
  }] });
@@ -2309,5 +2442,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.3", ngImpor
2309
2442
  * Generated bundle index. Do not edit.
2310
2443
  */
2311
2444
 
2312
- export { AngularConnectModule, AngularFirebaseAuthModule, AngularFirestoreModule, AngularHasuraGraphQLModule, AuthService, CartService, CatalogService, CategoryService, CategoryWithTree, CheckoutService, CheckoutSubscriptionService, CouponService, HomeShopService, NewCategoryStructureAdapter, OldCategoryStructureAdapter, OrderService, ProductSorts, ShippingService, UtilHelper, WishlistService };
2445
+ export { AngularConnectModule, AngularFirebaseAuthModule, AngularFirestoreModule, AngularHasuraGraphQLModule, AuthService, CartService, CatalogService, CategoryService, CategoryWithTree, CheckoutService, CheckoutSubscriptionService, CookieDataPersistence, CouponService, HomeShopService, NewCategoryStructureAdapter, OldCategoryStructureAdapter, OrderService, ProductSorts, ShippingService, UtilHelper, WishlistService };
2313
2446
  //# sourceMappingURL=infrab4a-connect-angular.mjs.map