@infrab4a/connect-angular 4.1.0-beta.1 → 4.1.0-beta.11

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 (106) hide show
  1. package/angular-connect.module.d.ts +22 -22
  2. package/angular-elastic-search.module.d.ts +9 -9
  3. package/angular-firebase-auth.module.d.ts +12 -12
  4. package/angular-firestore.module.d.ts +18 -18
  5. package/angular-hasura-graphql.module.d.ts +16 -16
  6. package/consts/backend-url.const.d.ts +1 -1
  7. package/consts/category-structure.d.ts +1 -1
  8. package/consts/default-shop.const.d.ts +1 -1
  9. package/consts/es-config.const.d.ts +1 -1
  10. package/consts/firebase-const.d.ts +3 -3
  11. package/consts/hasura-options.const.d.ts +1 -1
  12. package/consts/index.d.ts +6 -6
  13. package/{esm2020 → esm2022}/angular-connect.module.mjs +66 -66
  14. package/esm2022/angular-elastic-search.module.mjs +34 -0
  15. package/esm2022/angular-firebase-auth.module.mjs +130 -0
  16. package/esm2022/angular-firestore.module.mjs +459 -0
  17. package/esm2022/angular-hasura-graphql.module.mjs +243 -0
  18. package/{esm2020 → esm2022}/consts/backend-url.const.mjs +1 -1
  19. package/{esm2020 → esm2022}/consts/category-structure.mjs +2 -2
  20. package/{esm2020 → esm2022}/consts/default-shop.const.mjs +2 -2
  21. package/{esm2020 → esm2022}/consts/es-config.const.mjs +2 -2
  22. package/{esm2020 → esm2022}/consts/firebase-const.mjs +4 -4
  23. package/{esm2020 → esm2022}/consts/hasura-options.const.mjs +2 -2
  24. package/{esm2020 → esm2022}/consts/index.mjs +7 -7
  25. package/{esm2020 → esm2022}/helpers/index.mjs +2 -2
  26. package/{esm2020 → esm2022}/helpers/mobile-operation-system-checker.helper.mjs +7 -7
  27. package/{esm2020 → esm2022}/index.mjs +6 -6
  28. package/{esm2020 → esm2022}/infrab4a-connect-angular.mjs +4 -4
  29. package/{esm2020 → esm2022}/services/auth.service.mjs +37 -37
  30. package/{esm2020 → esm2022}/services/cart.service.mjs +281 -281
  31. package/{esm2020 → esm2022}/services/catalog/adapters/category-structure.adapter.mjs +2 -2
  32. package/{esm2020 → esm2022}/services/catalog/adapters/index.mjs +4 -4
  33. package/{esm2020 → esm2022}/services/catalog/adapters/new-category-structure.adapter.mjs +41 -41
  34. package/{esm2020 → esm2022}/services/catalog/adapters/old-category-structure.adapter.mjs +23 -23
  35. package/esm2022/services/catalog/catalog.service.mjs +122 -0
  36. package/esm2022/services/catalog/category.service.mjs +51 -0
  37. package/{esm2020 → esm2022}/services/catalog/enums/index.mjs +2 -2
  38. package/{esm2020 → esm2022}/services/catalog/enums/product-sorts.enum.mjs +11 -11
  39. package/{esm2020 → esm2022}/services/catalog/index.mjs +7 -7
  40. package/{esm2020 → esm2022}/services/catalog/models/category-with-tree.model.mjs +10 -10
  41. package/{esm2020 → esm2022}/services/catalog/models/index.mjs +2 -2
  42. package/{esm2020 → esm2022}/services/catalog/types/index.mjs +2 -2
  43. package/{esm2020 → esm2022}/services/catalog/types/product-sort.type.mjs +2 -2
  44. package/{esm2020 → esm2022}/services/catalog/wishlist.service.mjs +106 -106
  45. package/{esm2020 → esm2022}/services/checkout-subscription.service.mjs +53 -53
  46. package/{esm2020 → esm2022}/services/checkout.service.mjs +71 -71
  47. package/{esm2020 → esm2022}/services/coupon.service.mjs +218 -218
  48. package/{esm2020 → esm2022}/services/helpers/index.mjs +2 -2
  49. package/{esm2020 → esm2022}/services/helpers/util.helper.mjs +18 -18
  50. package/{esm2020 → esm2022}/services/home-shop.service.mjs +114 -114
  51. package/{esm2020 → esm2022}/services/index.mjs +11 -11
  52. package/{esm2020 → esm2022}/services/order.service.mjs +30 -30
  53. package/{esm2020 → esm2022}/services/shipping.service.mjs +96 -96
  54. package/{esm2020 → esm2022}/services/types/index.mjs +3 -3
  55. package/{esm2020 → esm2022}/services/types/required-checkout-data.type.mjs +2 -2
  56. package/{esm2020 → esm2022}/services/types/required-checkout-subscription-data.type.mjs +2 -2
  57. package/esm2022/services/types/shipping-methods.type.mjs +2 -0
  58. package/{esm2020 → esm2022}/types/firebase-app-config.type.mjs +2 -2
  59. package/{esm2020 → esm2022}/types/index.mjs +2 -2
  60. package/{fesm2020 → fesm2022}/infrab4a-connect-angular.mjs +2047 -2063
  61. package/fesm2022/infrab4a-connect-angular.mjs.map +1 -0
  62. package/helpers/index.d.ts +1 -1
  63. package/helpers/mobile-operation-system-checker.helper.d.ts +3 -3
  64. package/index.d.ts +5 -5
  65. package/package.json +10 -17
  66. package/services/auth.service.d.ts +18 -18
  67. package/services/cart.service.d.ts +42 -42
  68. package/services/catalog/adapters/category-structure.adapter.d.ts +4 -4
  69. package/services/catalog/adapters/index.d.ts +3 -3
  70. package/services/catalog/adapters/new-category-structure.adapter.d.ts +12 -12
  71. package/services/catalog/adapters/old-category-structure.adapter.d.ts +10 -10
  72. package/services/catalog/catalog.service.d.ts +80 -80
  73. package/services/catalog/category.service.d.ts +15 -15
  74. package/services/catalog/enums/index.d.ts +1 -1
  75. package/services/catalog/enums/product-sorts.enum.d.ts +9 -9
  76. package/services/catalog/index.d.ts +6 -6
  77. package/services/catalog/models/category-with-tree.model.d.ts +4 -4
  78. package/services/catalog/models/index.d.ts +1 -1
  79. package/services/catalog/types/index.d.ts +1 -1
  80. package/services/catalog/types/product-sort.type.d.ts +2 -2
  81. package/services/catalog/wishlist.service.d.ts +22 -22
  82. package/services/checkout-subscription.service.d.ts +18 -18
  83. package/services/checkout.service.d.ts +23 -23
  84. package/services/coupon.service.d.ts +28 -28
  85. package/services/helpers/index.d.ts +1 -1
  86. package/services/helpers/util.helper.d.ts +3 -3
  87. package/services/home-shop.service.d.ts +25 -25
  88. package/services/index.d.ts +10 -10
  89. package/services/order.service.d.ts +13 -13
  90. package/services/shipping.service.d.ts +19 -19
  91. package/services/types/index.d.ts +2 -2
  92. package/services/types/required-checkout-data.type.d.ts +2 -2
  93. package/services/types/required-checkout-subscription-data.type.d.ts +2 -2
  94. package/services/types/shipping-methods.type.d.ts +12 -12
  95. package/types/firebase-app-config.type.d.ts +1 -1
  96. package/types/index.d.ts +1 -1
  97. package/esm2020/angular-elastic-search.module.mjs +0 -34
  98. package/esm2020/angular-firebase-auth.module.mjs +0 -130
  99. package/esm2020/angular-firestore.module.mjs +0 -473
  100. package/esm2020/angular-hasura-graphql.module.mjs +0 -243
  101. package/esm2020/services/catalog/catalog.service.mjs +0 -124
  102. package/esm2020/services/catalog/category.service.mjs +0 -51
  103. package/esm2020/services/types/shipping-methods.type.mjs +0 -2
  104. package/fesm2015/infrab4a-connect-angular.mjs +0 -2208
  105. package/fesm2015/infrab4a-connect-angular.mjs.map +0 -1
  106. package/fesm2020/infrab4a-connect-angular.mjs.map +0 -1
@@ -1,243 +0,0 @@
1
- import { isPlatformBrowser } from '@angular/common';
2
- import { NgModule, PLATFORM_ID } from '@angular/core';
3
- import { CategoryCollectionChildrenHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository, CategoryHasuraGraphQLRepository, FilterHasuraGraphQLRepository, FilterOptionHasuraGraphQLRepository, ProductHasuraGraphQLRepository, VariantHasuraGraphQLRepository, WishlistHasuraGraphQLRepository, } from '@infrab4a/connect';
4
- import { HASURA_OPTIONS } from './consts';
5
- import * as i0 from "@angular/core";
6
- export class AngularHasuraGraphQLModule {
7
- static initializeApp(options) {
8
- return {
9
- ngModule: AngularHasuraGraphQLModule,
10
- providers: [{ provide: HASURA_OPTIONS, useValue: options }],
11
- };
12
- }
13
- }
14
- AngularHasuraGraphQLModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AngularHasuraGraphQLModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
15
- AngularHasuraGraphQLModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.1.0", ngImport: i0, type: AngularHasuraGraphQLModule });
16
- AngularHasuraGraphQLModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AngularHasuraGraphQLModule, providers: [
17
- {
18
- provide: 'HasuraConfig',
19
- useFactory: (options, platformId) => ({
20
- endpoint: options.endpoint,
21
- authOptions: options.credentials,
22
- interceptors: {
23
- request: (request) => {
24
- if (isPlatformBrowser(platformId))
25
- return request;
26
- const interval = setInterval(() => { }, 100);
27
- request.interval = interval;
28
- return request;
29
- },
30
- response: (response, request) => {
31
- if (isPlatformBrowser(platformId))
32
- return response;
33
- clearInterval(request.interval);
34
- return response;
35
- },
36
- },
37
- }),
38
- deps: [HASURA_OPTIONS, PLATFORM_ID],
39
- },
40
- {
41
- provide: 'CategoryRepository',
42
- useExisting: CategoryHasuraGraphQLRepository,
43
- },
44
- {
45
- provide: CategoryHasuraGraphQLRepository,
46
- useFactory: (options, productRepository, categoryFilterRepository) => {
47
- return new CategoryHasuraGraphQLRepository(options, productRepository, categoryFilterRepository);
48
- },
49
- deps: ['HasuraConfig', ProductHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository],
50
- },
51
- {
52
- provide: 'ProductRepository',
53
- useExisting: ProductHasuraGraphQLRepository,
54
- },
55
- {
56
- provide: ProductHasuraGraphQLRepository,
57
- useFactory: (hasuraConfig) => {
58
- return new ProductHasuraGraphQLRepository(hasuraConfig);
59
- },
60
- deps: ['HasuraConfig'],
61
- },
62
- {
63
- provide: 'VariantRepository',
64
- useExisting: VariantHasuraGraphQLRepository,
65
- },
66
- {
67
- provide: VariantHasuraGraphQLRepository,
68
- useFactory: (hasuraConfig) => {
69
- return new VariantHasuraGraphQLRepository(hasuraConfig);
70
- },
71
- deps: ['HasuraConfig'],
72
- },
73
- {
74
- provide: 'CategoryFilterRepository',
75
- useExisting: CategoryFilterHasuraGraphQLRepository,
76
- },
77
- {
78
- provide: CategoryFilterHasuraGraphQLRepository,
79
- useFactory: (options) => {
80
- return new CategoryFilterHasuraGraphQLRepository(options);
81
- },
82
- deps: ['HasuraConfig'],
83
- },
84
- {
85
- provide: 'FilterOptionRepository',
86
- useExisting: FilterOptionHasuraGraphQLRepository,
87
- },
88
- {
89
- provide: FilterOptionHasuraGraphQLRepository,
90
- useFactory: (options) => {
91
- return new FilterOptionHasuraGraphQLRepository(options);
92
- },
93
- deps: ['HasuraConfig'],
94
- },
95
- {
96
- provide: 'FilterRepository',
97
- useExisting: FilterHasuraGraphQLRepository,
98
- },
99
- {
100
- provide: FilterHasuraGraphQLRepository,
101
- useFactory: (options, filterOptionRepository, categoryFilterRepository) => {
102
- return new FilterHasuraGraphQLRepository(options, filterOptionRepository, categoryFilterRepository);
103
- },
104
- deps: ['HasuraConfig', FilterOptionHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository],
105
- },
106
- {
107
- provide: CategoryCollectionChildrenHasuraGraphQLRepository,
108
- useFactory: (options) => new CategoryCollectionChildrenHasuraGraphQLRepository(options),
109
- deps: ['HasuraConfig'],
110
- },
111
- {
112
- provide: 'CategoryCollectionChildrenRepository',
113
- useExisting: CategoryCollectionChildrenHasuraGraphQLRepository,
114
- },
115
- {
116
- provide: WishlistHasuraGraphQLRepository,
117
- useFactory: (options, categoryFilterRepository) => {
118
- return new WishlistHasuraGraphQLRepository(options, categoryFilterRepository);
119
- },
120
- deps: ['HasuraConfig', CategoryFilterHasuraGraphQLRepository],
121
- },
122
- {
123
- provide: 'WishlistRepository',
124
- useExisting: WishlistHasuraGraphQLRepository,
125
- },
126
- ] });
127
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: AngularHasuraGraphQLModule, decorators: [{
128
- type: NgModule,
129
- args: [{
130
- providers: [
131
- {
132
- provide: 'HasuraConfig',
133
- useFactory: (options, platformId) => ({
134
- endpoint: options.endpoint,
135
- authOptions: options.credentials,
136
- interceptors: {
137
- request: (request) => {
138
- if (isPlatformBrowser(platformId))
139
- return request;
140
- const interval = setInterval(() => { }, 100);
141
- request.interval = interval;
142
- return request;
143
- },
144
- response: (response, request) => {
145
- if (isPlatformBrowser(platformId))
146
- return response;
147
- clearInterval(request.interval);
148
- return response;
149
- },
150
- },
151
- }),
152
- deps: [HASURA_OPTIONS, PLATFORM_ID],
153
- },
154
- {
155
- provide: 'CategoryRepository',
156
- useExisting: CategoryHasuraGraphQLRepository,
157
- },
158
- {
159
- provide: CategoryHasuraGraphQLRepository,
160
- useFactory: (options, productRepository, categoryFilterRepository) => {
161
- return new CategoryHasuraGraphQLRepository(options, productRepository, categoryFilterRepository);
162
- },
163
- deps: ['HasuraConfig', ProductHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository],
164
- },
165
- {
166
- provide: 'ProductRepository',
167
- useExisting: ProductHasuraGraphQLRepository,
168
- },
169
- {
170
- provide: ProductHasuraGraphQLRepository,
171
- useFactory: (hasuraConfig) => {
172
- return new ProductHasuraGraphQLRepository(hasuraConfig);
173
- },
174
- deps: ['HasuraConfig'],
175
- },
176
- {
177
- provide: 'VariantRepository',
178
- useExisting: VariantHasuraGraphQLRepository,
179
- },
180
- {
181
- provide: VariantHasuraGraphQLRepository,
182
- useFactory: (hasuraConfig) => {
183
- return new VariantHasuraGraphQLRepository(hasuraConfig);
184
- },
185
- deps: ['HasuraConfig'],
186
- },
187
- {
188
- provide: 'CategoryFilterRepository',
189
- useExisting: CategoryFilterHasuraGraphQLRepository,
190
- },
191
- {
192
- provide: CategoryFilterHasuraGraphQLRepository,
193
- useFactory: (options) => {
194
- return new CategoryFilterHasuraGraphQLRepository(options);
195
- },
196
- deps: ['HasuraConfig'],
197
- },
198
- {
199
- provide: 'FilterOptionRepository',
200
- useExisting: FilterOptionHasuraGraphQLRepository,
201
- },
202
- {
203
- provide: FilterOptionHasuraGraphQLRepository,
204
- useFactory: (options) => {
205
- return new FilterOptionHasuraGraphQLRepository(options);
206
- },
207
- deps: ['HasuraConfig'],
208
- },
209
- {
210
- provide: 'FilterRepository',
211
- useExisting: FilterHasuraGraphQLRepository,
212
- },
213
- {
214
- provide: FilterHasuraGraphQLRepository,
215
- useFactory: (options, filterOptionRepository, categoryFilterRepository) => {
216
- return new FilterHasuraGraphQLRepository(options, filterOptionRepository, categoryFilterRepository);
217
- },
218
- deps: ['HasuraConfig', FilterOptionHasuraGraphQLRepository, CategoryFilterHasuraGraphQLRepository],
219
- },
220
- {
221
- provide: CategoryCollectionChildrenHasuraGraphQLRepository,
222
- useFactory: (options) => new CategoryCollectionChildrenHasuraGraphQLRepository(options),
223
- deps: ['HasuraConfig'],
224
- },
225
- {
226
- provide: 'CategoryCollectionChildrenRepository',
227
- useExisting: CategoryCollectionChildrenHasuraGraphQLRepository,
228
- },
229
- {
230
- provide: WishlistHasuraGraphQLRepository,
231
- useFactory: (options, categoryFilterRepository) => {
232
- return new WishlistHasuraGraphQLRepository(options, categoryFilterRepository);
233
- },
234
- deps: ['HasuraConfig', CategoryFilterHasuraGraphQLRepository],
235
- },
236
- {
237
- provide: 'WishlistRepository',
238
- useExisting: WishlistHasuraGraphQLRepository,
239
- },
240
- ],
241
- }]
242
- }] });
243
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1oYXN1cmEtZ3JhcGhxbC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL2FuZ3VsYXItaGFzdXJhLWdyYXBocWwubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ25ELE9BQU8sRUFBdUIsUUFBUSxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxRSxPQUFPLEVBQ0wsaURBQWlELEVBQ2pELHFDQUFxQyxFQUVyQywrQkFBK0IsRUFFL0IsNkJBQTZCLEVBQzdCLG1DQUFtQyxFQUtuQyw4QkFBOEIsRUFFOUIsOEJBQThCLEVBRTlCLCtCQUErQixHQUNoQyxNQUFNLG1CQUFtQixDQUFBO0FBQzFCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxVQUFVLENBQUE7O0FBc0l6QyxNQUFNLE9BQU8sMEJBQTBCO0lBQ3JDLE1BQU0sQ0FBQyxhQUFhLENBQUMsT0FHcEI7UUFDQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLDBCQUEwQjtZQUNwQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxDQUFDO1NBQzVELENBQUE7SUFDSCxDQUFDOzt1SEFUVSwwQkFBMEI7d0hBQTFCLDBCQUEwQjt3SEFBMUIsMEJBQTBCLGFBakkxQjtRQUNUO1lBQ0UsT0FBTyxFQUFFLGNBQWM7WUFDdkIsVUFBVSxFQUFFLENBQUMsT0FBNkIsRUFBRSxVQUFrQixFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUNsRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVE7Z0JBQzFCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVztnQkFDaEMsWUFBWSxFQUFFO29CQUNaLE9BQU8sRUFBRSxDQUFDLE9BQTBELEVBQUUsRUFBRTt3QkFDdEUsSUFBSSxpQkFB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LEVBQXFELEVBQUUsQ0FDOUUsSUFBSSxpREFBaUQsQ0FBQyxPQUFPLENBQUM7NEJBQ2hFLElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQzt5QkFDdkI7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLHNDQUFzQzs0QkFDL0MsV0FBVyxFQUFFLGlEQUFpRDt5QkFDL0Q7d0JBQ0Q7NEJBQ0UsT0FBTyxFQUFFLCtCQUErQjs0QkFDeEMsVUFBVSxFQUFFLENBQ1YsT0FBWSxFQUNaLHdCQUErRCxFQUM5QixFQUFFO2dDQUNuQyxPQUFPLElBQUksK0JBQStCLENBQUMsT0FBTyxFQUFFLHdCQUF3QixDQUFDLENBQUE7NEJBQy9FLENBQUM7NEJBQ0QsSUFBSSxFQUFFLENBQUMsY0FBYyxFQUFFLHFDQUFxQyxDQUFDO3lCQUM5RDt3QkFDRDs0QkFDRSxPQUFPLEVBQUUsb0JBQW9COzRCQUM3QixXQUFXLEVBQUUsK0JBQStCO3lCQUM3QztxQkFDRjtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGlzUGxhdGZvcm1Ccm93c2VyIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUsIFBMQVRGT1JNX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIENhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gIENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gIENhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSxcbiAgQ2F0ZWdvcnlIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgQ2F0ZWdvcnlSZXBvc2l0b3J5LFxuICBGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgRmlsdGVyT3B0aW9uSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gIEZpbHRlck9wdGlvblJlcG9zaXRvcnksXG4gIEZpbHRlclJlcG9zaXRvcnksXG4gIEdyYXBoUUxQYXJhbXMsXG4gIEhhc3VyYUdyYXBoUUxBdXRoT3B0aW9ucyxcbiAgUHJvZHVjdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICBQcm9kdWN0UmVwb3NpdG9yeSxcbiAgVmFyaWFudEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICBWYXJpYW50UmVwb3NpdG9yeSxcbiAgV2lzaGxpc3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5pbXBvcnQgeyBIQVNVUkFfT1BUSU9OUyB9IGZyb20gJy4vY29uc3RzJ1xuXG5leHBvcnQgdHlwZSBIYXN1cmFHcmFwaFFMT3B0aW9ucyA9IHsgZW5kcG9pbnQ6IHN0cmluZzsgY3JlZGVudGlhbHM6IEhhc3VyYUdyYXBoUUxBdXRoT3B0aW9ucyB9XG5cbkBOZ01vZHVsZSh7XG4gIHByb3ZpZGVyczogW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdIYXN1cmFDb25maWcnLFxuICAgICAgdXNlRmFjdG9yeTogKG9wdGlvbnM6IEhhc3VyYUdyYXBoUUxPcHRpb25zLCBwbGF0Zm9ybUlkOiBzdHJpbmcpID0+ICh7XG4gICAgICAgIGVuZHBvaW50OiBvcHRpb25zLmVuZHBvaW50LFxuICAgICAgICBhdXRoT3B0aW9uczogb3B0aW9ucy5jcmVkZW50aWFscyxcbiAgICAgICAgaW50ZXJjZXB0b3JzOiB7XG4gICAgICAgICAgcmVxdWVzdDogKHJlcXVlc3Q6IEdyYXBoUUxQYXJhbXM8YW55PiAmIHsgaW50ZXJ2YWw6IE5vZGVKUy5UaW1lb3V0IH0pID0+IHtcbiAgICAgICAgICAgIGlmIChpc1BsYXRmb3JtQnJvd3NlcihwbGF0Zm9ybUlkKSkgcmV0dXJuIHJlcXVlc3RcblxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB7fSwgMTAwKVxuXG4gICAgICAgICAgICByZXF1ZXN0LmludGVydmFsID0gaW50ZXJ2YWxcblxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3RcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc3BvbnNlOiAocmVzcG9uc2U6IGFueSwgcmVxdWVzdDogR3JhcGhRTFBhcmFtczxhbnk+ICYgeyBpbnRlcnZhbDogTm9kZUpTLlRpbWVvdXQgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzUGxhdGZvcm1Ccm93c2VyKHBsYXRmb3JtSWQpKSByZXR1cm4gcmVzcG9uc2VcblxuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChyZXF1ZXN0LmludGVydmFsKVxuXG4gICAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSksXG4gICAgICBkZXBzOiBbSEFTVVJBX09QVElPTlMsIFBMQVRGT1JNX0lEXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdDYXRlZ29yeVJlcG9zaXRvcnknLFxuICAgICAgdXNlRXhpc3Rpbmc6IENhdGVnb3J5SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBDYXRlZ29yeUhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgICAgdXNlRmFjdG9yeTogKFxuICAgICAgICBvcHRpb25zOiBhbnksXG4gICAgICAgIHByb2R1Y3RSZXBvc2l0b3J5OiBQcm9kdWN0SGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICAgIGNhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeTogQ2F0ZWdvcnlGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICAgICk6IENhdGVnb3J5UmVwb3NpdG9yeSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgQ2F0ZWdvcnlIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeShvcHRpb25zLCBwcm9kdWN0UmVwb3NpdG9yeSwgY2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5KVxuICAgICAgfSxcbiAgICAgIGRlcHM6IFsnSGFzdXJhQ29uZmlnJywgUHJvZHVjdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LCBDYXRlZ29yeUZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdQcm9kdWN0UmVwb3NpdG9yeScsXG4gICAgICB1c2VFeGlzdGluZzogUHJvZHVjdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogUHJvZHVjdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgICAgdXNlRmFjdG9yeTogKGhhc3VyYUNvbmZpZzogYW55KTogUHJvZHVjdFJlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFByb2R1Y3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeShoYXN1cmFDb25maWcpXG4gICAgICB9LFxuICAgICAgZGVwczogWydIYXN1cmFDb25maWcnXSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6ICdWYXJpYW50UmVwb3NpdG9yeScsXG4gICAgICB1c2VFeGlzdGluZzogVmFyaWFudEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogVmFyaWFudEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgICAgdXNlRmFjdG9yeTogKGhhc3VyYUNvbmZpZzogYW55KTogVmFyaWFudFJlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFZhcmlhbnRIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeShoYXN1cmFDb25maWcpXG4gICAgICB9LFxuICAgICAgZGVwczogWydIYXN1cmFDb25maWcnXSxcbiAgICB9LFxuXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0NhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeScsXG4gICAgICB1c2VFeGlzdGluZzogQ2F0ZWdvcnlGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogYW55KTogQ2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBDYXRlZ29yeUZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5KG9wdGlvbnMpXG4gICAgICB9LFxuICAgICAgZGVwczogWydIYXN1cmFDb25maWcnXSxcbiAgICB9LFxuXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0ZpbHRlck9wdGlvblJlcG9zaXRvcnknLFxuICAgICAgdXNlRXhpc3Rpbmc6IEZpbHRlck9wdGlvbkhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogRmlsdGVyT3B0aW9uSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogYW55KTogRmlsdGVyT3B0aW9uUmVwb3NpdG9yeSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyT3B0aW9uSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnkob3B0aW9ucylcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0hhc3VyYUNvbmZpZyddLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ0ZpbHRlclJlcG9zaXRvcnknLFxuICAgICAgdXNlRXhpc3Rpbmc6IEZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogRmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICB1c2VGYWN0b3J5OiAoXG4gICAgICAgIG9wdGlvbnM6IGFueSxcbiAgICAgICAgZmlsdGVyT3B0aW9uUmVwb3NpdG9yeTogRmlsdGVyT3B0aW9uSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICAgIGNhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeTogQ2F0ZWdvcnlGaWx0ZXJIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICAgICk6IEZpbHRlclJlcG9zaXRvcnkgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5KG9wdGlvbnMsIGZpbHRlck9wdGlvblJlcG9zaXRvcnksIGNhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSlcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0hhc3VyYUNvbmZpZycsIEZpbHRlck9wdGlvbkhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LCBDYXRlZ29yeUZpbHRlckhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5XSxcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IENhdGVnb3J5Q29sbGVjdGlvbkNoaWxkcmVuSGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICB1c2VGYWN0b3J5OiAob3B0aW9uczogYW55KTogQ2F0ZWdvcnlDb2xsZWN0aW9uQ2hpbGRyZW5IYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSA9PlxuICAgICAgICBuZXcgQ2F0ZWdvcnlDb2xsZWN0aW9uQ2hpbGRyZW5IYXN1cmFHcmFwaFFMUmVwb3NpdG9yeShvcHRpb25zKSxcbiAgICAgIGRlcHM6IFsnSGFzdXJhQ29uZmlnJ10sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiAnQ2F0ZWdvcnlDb2xsZWN0aW9uQ2hpbGRyZW5SZXBvc2l0b3J5JyxcbiAgICAgIHVzZUV4aXN0aW5nOiBDYXRlZ29yeUNvbGxlY3Rpb25DaGlsZHJlbkhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5LFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogV2lzaGxpc3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICAgIHVzZUZhY3Rvcnk6IChcbiAgICAgICAgb3B0aW9uczogYW55LFxuICAgICAgICBjYXRlZ29yeUZpbHRlclJlcG9zaXRvcnk6IENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnksXG4gICAgICApOiBXaXNobGlzdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5ID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBXaXNobGlzdEhhc3VyYUdyYXBoUUxSZXBvc2l0b3J5KG9wdGlvbnMsIGNhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSlcbiAgICAgIH0sXG4gICAgICBkZXBzOiBbJ0hhc3VyYUNvbmZpZycsIENhdGVnb3J5RmlsdGVySGFzdXJhR3JhcGhRTFJlcG9zaXRvcnldLFxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogJ1dpc2hsaXN0UmVwb3NpdG9yeScsXG4gICAgICB1c2VFeGlzdGluZzogV2lzaGxpc3RIYXN1cmFHcmFwaFFMUmVwb3NpdG9yeSxcbiAgICB9LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBBbmd1bGFySGFzdXJhR3JhcGhRTE1vZHVsZSB7XG4gIHN0YXRpYyBpbml0aWFsaXplQXBwKG9wdGlvbnM6IHtcbiAgICBlbmRwb2ludDogc3RyaW5nXG4gICAgY3JlZGVudGlhbHM6IEhhc3VyYUdyYXBoUUxBdXRoT3B0aW9uc1xuICB9KTogTW9kdWxlV2l0aFByb3ZpZGVyczxBbmd1bGFySGFzdXJhR3JhcGhRTE1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQW5ndWxhckhhc3VyYUdyYXBoUUxNb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFt7IHByb3ZpZGU6IEhBU1VSQV9PUFRJT05TLCB1c2VWYWx1ZTogb3B0aW9ucyB9XSxcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -1,124 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { InvalidArgumentError, ProductsIndex, RoundProductPricesHelper, set, Shops, Where, } from '@infrab4a/connect';
3
- import { CATEGORY_STRUCTURE, DEFAULT_SHOP } from '../../consts';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@infrab4a/connect";
6
- export class CatalogService {
7
- constructor(productRepository, categoryStructureAdapter, shop, productIndex) {
8
- this.productRepository = productRepository;
9
- this.categoryStructureAdapter = categoryStructureAdapter;
10
- this.shop = shop;
11
- this.productIndex = productIndex;
12
- this.buildFilterQuery = ({ clubDiscount, brands, prices, gender, tags, rate, customOptions, }) => {
13
- const filters = {};
14
- if (clubDiscount?.length)
15
- set(filters, 'price.subscriberDiscountPercentage', { operator: Where.IN, value: clubDiscount });
16
- if (brands?.length)
17
- filters.brand = { operator: Where.IN, value: brands };
18
- if (gender?.length)
19
- filters.gender = { operator: Where.IN, value: gender };
20
- if (prices?.min || prices?.max)
21
- set(filters, prices.subscriberPrice ? 'price.subscriberPrice' : 'price.price', [
22
- ...(prices.min ? [{ operator: Where.GTE, value: Math.round(prices.min) }] : []),
23
- ...(prices.max ? [{ operator: Where.LTE, value: Math.ceil(prices.max) }] : []),
24
- ]);
25
- if (rate)
26
- filters.rate = { operator: Where.GTE, value: rate };
27
- if (tags?.length)
28
- filters.tags = { operator: Where.LIKE, value: tags };
29
- if (customOptions?.length)
30
- filters.filters = { operator: Where.LIKE, value: customOptions };
31
- return filters;
32
- };
33
- this.buildSortQuery = (sort) => {
34
- if (!sort || sort === 'most-relevant')
35
- return {};
36
- if (sort === 'best-sellers')
37
- return { shoppingCount: 'desc' };
38
- if (sort === 'biggest-price')
39
- return { subscriberPrice: 'desc' };
40
- if (sort === 'lowest-price')
41
- return { subscriberPrice: 'asc' };
42
- if (sort === 'best-rating')
43
- return { rate: 'desc' };
44
- if (sort === 'news')
45
- return { createdAt: 'desc' };
46
- if (sort === 'biggest-discount')
47
- return { subscriberDiscountPercentage: 'desc' };
48
- };
49
- this.buildLimitQuery = (options) => {
50
- const limit = options?.perPage || 20;
51
- return {
52
- limit,
53
- offset: ((options?.page || 1) - 1) * limit,
54
- };
55
- };
56
- this.hasProfile = (options) => 'profile' in options;
57
- this.hasTerm = (options) => 'term' in options;
58
- this.hasCategory = (options) => 'category' in options;
59
- }
60
- async fetchProducts(options) {
61
- const limits = this.buildLimitQuery(options);
62
- if (this.hasProfile(options) && options.filters?.customOptions)
63
- throw new InvalidArgumentError(`It couldn't filled customOptions when profile is given`);
64
- if (this.hasProfile(options) && options.filters?.tags)
65
- throw new InvalidArgumentError(`It couldn't filled tags when profile is given`);
66
- if (this.hasTerm(options) && options.filters?.customOptions)
67
- throw new InvalidArgumentError(`It couldn't filled customOptions when term is given`);
68
- return await this.findCatalog(options, limits).then(({ data, count: total, maximum, minimal, distinct }) => ({
69
- products: { data: data.map((product) => RoundProductPricesHelper.roundProductPrices(product)), total },
70
- pages: Math.ceil(total / limits.limit),
71
- prices: {
72
- price: { min: +minimal?.price?.price?.toFixed(2), max: +maximum?.price?.price?.toFixed(2) },
73
- subscriberPrice: {
74
- min: +minimal?.price?.subscriberPrice?.toFixed(2),
75
- max: +maximum?.price?.subscriberPrice?.toFixed(2),
76
- },
77
- },
78
- brands: distinct?.brand,
79
- }));
80
- }
81
- async findCatalog(options, limits) {
82
- const repoParams = {
83
- filters: {
84
- ...(await this.buildMainFilter(options)),
85
- ...this.buildFilterQuery(options?.filters || {}),
86
- },
87
- ...(options?.sort ? { orderBy: this.buildSortQuery(options?.sort) } : {}),
88
- limits,
89
- options: {
90
- minimal: ['price'],
91
- maximum: ['price'],
92
- ...(!this.hasCategory(options) ? { distinct: ['brand'] } : {}),
93
- },
94
- };
95
- if (['biggest-price', 'lowest-price', 'biggest-discount', 'best-rating'].includes(options.sort))
96
- return this.productRepository.findCatalog(repoParams);
97
- return this.productRepository.findCatalog(repoParams, options?.mainGender || this.shop === Shops.MENSMARKET ? 'male' : 'female');
98
- }
99
- async buildMainFilter({ category, profile, term, }) {
100
- if (category)
101
- return this.categoryStructureAdapter.buildProductFilterByCategory(category);
102
- if (profile)
103
- return { tags: { operator: Where.LIKE, value: profile } };
104
- if (term)
105
- return this.productIndex
106
- .search(term, 999, this.shop)
107
- .then((data) => ({ id: { operator: Where.IN, value: data.hits.map(({ _source }) => _source.id) } }));
108
- }
109
- }
110
- CatalogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CatalogService, deps: [{ token: 'ProductRepository' }, { token: CATEGORY_STRUCTURE }, { token: DEFAULT_SHOP }, { token: i1.ProductsIndex }], target: i0.ɵɵFactoryTarget.Injectable });
111
- CatalogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CatalogService });
112
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CatalogService, decorators: [{
113
- type: Injectable
114
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
115
- type: Inject,
116
- args: ['ProductRepository']
117
- }] }, { type: undefined, decorators: [{
118
- type: Inject,
119
- args: [CATEGORY_STRUCTURE]
120
- }] }, { type: i1.Shops, decorators: [{
121
- type: Inject,
122
- args: [DEFAULT_SHOP]
123
- }] }, { type: i1.ProductsIndex }]; } });
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9zZXJ2aWNlcy9jYXRhbG9nL2NhdGFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBR0wsb0JBQW9CLEVBSXBCLGFBQWEsRUFJYix3QkFBd0IsRUFDeEIsR0FBRyxFQUNILEtBQUssRUFDTCxLQUFLLEdBQ04sTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBOzs7QUFzRC9ELE1BQU0sT0FBTyxjQUFjO0lBQ3pCLFlBQ2dELGlCQUFvQyxFQUNyQyx3QkFBa0QsRUFDeEQsSUFBVyxFQUNqQyxZQUEyQjtRQUhFLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDckMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUN4RCxTQUFJLEdBQUosSUFBSSxDQUFPO1FBQ2pDLGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBc0V0QyxxQkFBZ0IsR0FBRyxDQUFDLEVBQzFCLFlBQVksRUFDWixNQUFNLEVBQ04sTUFBTSxFQUNOLE1BQU0sRUFDTixJQUFJLEVBQ0osSUFBSSxFQUNKLGFBQWEsR0FDUSxFQUFtQyxFQUFFO1lBQzFELE1BQU0sT0FBTyxHQUFHLEVBQXFDLENBQUE7WUFFckQsSUFBSSxZQUFZLEVBQUUsTUFBTTtnQkFDdEIsR0FBRyxDQUFDLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFLEtBQUssRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFBO1lBQ2pHLElBQUksTUFBTSxFQUFFLE1BQU07Z0JBQUUsT0FBTyxDQUFDLEtBQUssR0FBRyxFQUFF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SyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDMUcsQ0FBQzs7MkdBekVVLGNBQWMsa0JBRWYsbUJBQW1CLGFBQ25CLGtCQUFrQixhQUNsQixZQUFZOytHQUpYLGNBQWM7MkZBQWQsY0FBYztrQkFEMUIsVUFBVTs7MEJBR04sTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUMxQixNQUFNOzJCQUFDLGtCQUFrQjs7MEJBQ3pCLE1BQU07MkJBQUMsWUFBWSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQge1xuICBDYXRlZ29yeSxcbiAgRmluZFJlcG9zaXRvcnlQYXJhbXMsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBQcm9kdWN0LFxuICBQcm9kdWN0R2VuZGVyLFxuICBQcm9kdWN0UmVwb3NpdG9yeSxcbiAgUHJvZHVjdHNJbmRleCxcbiAgUmVwb3NpdG9yeUZpbmRGaWVsdGVycyxcbiAgUmVwb3NpdG9yeUZpbmRSZXN1bHQsXG4gIFJlcG9zaXRvcnlPcmRlckJ5LFxuICBSb3VuZFByb2R1Y3RQcmljZXNIZWxwZXIsXG4gIHNldCxcbiAgU2hvcHMsXG4gIFdoZXJlLFxufSBmcm9tICdAaW5mcmFiNGEvY29ubmVjdCdcbmltcG9ydCB7IENBVEVHT1JZX1NUUlVDVFVSRSwgREVGQVVMVF9TSE9QIH0gZnJvbSAnLi4vLi4vY29uc3RzJ1xuaW1wb3J0IHsgQ2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyIH0gZnJvbSAnLi9hZGFwdGVycydcbmltcG9ydCB7IFByb2R1Y3RTb3J0IH0gZnJvbSAnLi90eXBlcy9wcm9kdWN0LXNvcnQudHlwZSdcblxudHlwZSBGZXRjaFByb2R1Y3RzRmlsdGVycyA9IHtcbiAgY2x1YkRpc2NvdW50PzogbnVtYmVyW11cbiAgYnJhbmRzPzogc3RyaW5nW11cbiAgcHJpY2VzPzogeyBtaW4/OiBudW1iZXI7IG1heD86IG51bWJlcjsgc3Vic2NyaWJlclByaWNlPzogYm9vbGVhbiB9XG4gIGdlbmRlcj86IFByb2R1Y3RHZW5kZXJbXVxuICByYXRlPzogbnVtYmVyXG4gIGN1c3RvbU9wdGlvbnM/OiBzdHJpbmdbXVxuICB0YWdzPzogc3RyaW5nW11cbn1cblxudHlwZSBGZXRjaFByb2R1Y3RzT3B0aW9ucyA9IHtcbiAgcGFnZT86IG51bWJlclxuICBwZXJQYWdlPzogbnVtYmVyXG4gIHNvcnQ/OiBQcm9kdWN0U29ydFxuICBtYWluR2VuZGVyPzogUHJvZHVjdEdlbmRlclxufVxuXG50eXBlIEZldGNoUHJvZHVjdHNNYWluUGFyYW1zPFQgZXh0ZW5kcyBDYXRlZ29yeT4gPSB7XG4gIGNhdGVnb3J5PzogVFxuICBwcm9maWxlPzogc3RyaW5nW11cbiAgdGVybT86IHN0cmluZ1xufVxuXG50eXBlIEZldGNoUHJvZHVjdHNQYXJhbXM8VCBleHRlbmRzIENhdGVnb3J5PiA9IEZldGNoUHJvZHVjdHNPcHRpb25zICZcbiAgKFxuICAgIHwge1xuICAgICAgICBjYXRlZ29yeTogRmV0Y2hQcm9kdWN0c01haW5QYXJhbXM8VD5bJ2NhdGVnb3J5J11cbiAgICAgICAgZmlsdGVycz86IEZldGNoUHJvZHVjdHNGaWx0ZXJzXG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHByb2ZpbGU6IEZldGNoUHJvZHVjdHNNYWluUGFyYW1zPFQ+Wydwcm9maWxlJ11cbiAgICAgICAgZmlsdGVycz86IEZldGNoUHJvZHVjdHNGaWx0ZXJzICYgeyBjdXN0b21PcHRpb25zPzogbmV2ZXI7IHRhZ3M/OiBuZXZlciB9XG4gICAgICB9XG4gICAgfCB7XG4gICAgICAgIHRlcm06IEZldGNoUHJvZHVjdHNNYWluUGFyYW1zPFQ+Wyd0ZXJtJ11cbiAgICAgICAgZmlsdGVycz86IEZldGNoUHJvZHVjdHNGaWx0ZXJzICYgeyBjdXN0b21PcHRpb25zPzogbmV2ZXIgfVxuICAgICAgfVxuICApXG5cbnR5cGUgRmV0Y2hQcm9kdWN0c1Jlc3BvbnNlID0ge1xuICBwcm9kdWN0czogeyBkYXRhOiBQcm9kdWN0W107IHRvdGFsOiBudW1iZXIgfVxuICBwYWdlczogbnVtYmVyXG4gIHByaWNlczoge1xuICAgIHByaWNlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9XG4gICAgc3Vic2NyaWJlclByaWNlOiB7IG1pbjogbnVtYmVyOyBtYXg6IG51bWJlciB9XG4gIH1cbiAgYnJhbmRzPzogc3RyaW5nW11cbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIENhdGFsb2dTZXJ2aWNlPFQgZXh0ZW5kcyBDYXRlZ29yeSA9IENhdGVnb3J5PiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoJ1Byb2R1Y3RSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBwcm9kdWN0UmVwb3NpdG9yeTogUHJvZHVjdFJlcG9zaXRvcnksXG4gICAgQEluamVjdChDQVRFR09SWV9TVFJVQ1RVUkUpIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlTdHJ1Y3R1cmVBZGFwdGVyOiBDYXRlZ29yeVN0cnVjdHVyZUFkYXB0ZXIsXG4gICAgQEluamVjdChERUZBVUxUX1NIT1ApIHByaXZhdGUgcmVhZG9ubHkgc2hvcDogU2hvcHMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBwcm9kdWN0SW5kZXg6IFByb2R1Y3RzSW5kZXgsXG4gICkge31cblxuICBhc3luYyBmZXRjaFByb2R1Y3RzKG9wdGlvbnM6IEZldGNoUHJvZHVjdHNQYXJhbXM8VD4pOiBQcm9taXNlPEZldGNoUHJvZHVjdHNSZXNwb25zZT4ge1xuICAgIGNvbnN0IGxpbWl0cyA9IHRoaXMuYnVpbGRMaW1pdFF1ZXJ5KG9wdGlvbnMpXG5cbiAgICBpZiAodGhpcy5oYXNQcm9maWxlKG9wdGlvbnMpICYmIG9wdGlvbnMuZmlsdGVycz8uY3VzdG9tT3B0aW9ucylcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgSXQgY291bGRuJ3QgZmlsbGVkIGN1c3RvbU9wdGlvbnMgd2hlbiBwcm9maWxlIGlzIGdpdmVuYClcbiAgICBpZiAodGhpcy5oYXNQcm9maWxlKG9wdGlvbnMpICYmIG9wdGlvbnMuZmlsdGVycz8udGFncylcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgSXQgY291bGRuJ3QgZmlsbGVkIHRhZ3Mgd2hlbiBwcm9maWxlIGlzIGdpdmVuYClcbiAgICBpZiAodGhpcy5oYXNUZXJtKG9wdGlvbnMpICYmIG9wdGlvbnMuZmlsdGVycz8uY3VzdG9tT3B0aW9ucylcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgSXQgY291bGRuJ3QgZmlsbGVkIGN1c3RvbU9wdGlvbnMgd2hlbiB0ZXJtIGlzIGdpdmVuYClcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmZpbmRDYXRhbG9nKG9wdGlvbnMsIGxpbWl0cykudGhlbigoeyBkYXRhLCBjb3VudDogdG90YWwsIG1heGltdW0sIG1pbmltYWwsIGRpc3RpbmN0IH0pID0+ICh7XG4gICAgICBwcm9kdWN0czogeyBkYXRhOiBkYXRhLm1hcCgocHJvZHVjdCkgPT4gUm91bmRQcm9kdWN0UHJpY2VzSGVscGVyLnJvdW5kUHJvZHVjdFByaWNlcyhwcm9kdWN0KSksIHRvdGFsIH0sXG4gICAgICBwYWdlczogTWF0aC5jZWlsKHRvdGFsIC8gbGltaXRzLmxpbWl0KSxcbiAgICAgIHByaWNlczoge1xuICAgICAgICBwcmljZTogeyBtaW46ICttaW5pbWFsPy5wcmljZT8ucHJpY2U/LnRvRml4ZWQoMiksIG1heDogK21heGltdW0/LnByaWNlPy5wcmljZT8udG9GaXhlZCgyKSB9LFxuICAgICAgICBzdWJzY3JpYmVyUHJpY2U6IHtcbiAgICAgICAgICBtaW46ICttaW5pbWFsPy5wcmljZT8uc3Vic2NyaWJlclByaWNlPy50b0ZpeGVkKDIpLFxuICAgICAgICAgIG1heDogK21heGltdW0/LnByaWNlPy5zdWJzY3JpYmVyUHJpY2U/LnRvRml4ZWQoMiksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYnJhbmRzOiBkaXN0aW5jdD8uYnJhbmQsXG4gICAgfSkpXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGZpbmRDYXRhbG9nKFxuICAgIG9wdGlvbnM6IEZldGNoUHJvZHVjdHNQYXJhbXM8VD4sXG4gICAgbGltaXRzOiB7XG4gICAgICBsaW1pdD86IG51bWJlclxuICAgICAgb2Zmc2V0PzogbnVtYmVyXG4gICAgfSxcbiAgKTogUHJvbWlzZTxSZXBvc2l0b3J5RmluZFJlc3VsdDxQcm9kdWN0Pj4ge1xuICAgIGNvbnN0IHJlcG9QYXJhbXM6IEZpbmRSZXBvc2l0b3J5UGFyYW1zPFByb2R1Y3Q+ID0ge1xuICAgICAgZmlsdGVyczoge1xuICAgICAgICAuLi4oYXdhaXQgdGhpcy5idWlsZE1haW5GaWx0ZXIob3B0aW9ucykpLFxuICAgICAgICAuLi50aGlzLmJ1aWxkRmlsdGVyUXVlcnkob3B0aW9ucz8uZmlsdGVycyB8fCB7fSksXG4gICAgICB9LFxuICAgICAgLi4uKG9wdGlvbnM/LnNvcnQgPyB7IG9yZGVyQnk6IHRoaXMuYnVpbGRTb3J0UXVlcnkob3B0aW9ucz8uc29ydCkgfSA6IHt9KSxcbiAgICAgIGxpbWl0cyxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgbWluaW1hbDogWydwcmljZSddLFxuICAgICAgICBtYXhpbXVtOiBbJ3ByaWNlJ10sXG4gICAgICAgIC4uLighdGhpcy5oYXNDYXRlZ29yeShvcHRpb25zKSA/IHsgZGlzdGluY3Q6IFsnYnJhbmQnXSB9IDoge30pLFxuICAgICAgfSxcbiAgICB9XG5cbiAgICBpZiAoWydiaWdnZXN0LXByaWNlJywgJ2xvd2VzdC1wcmljZScsICdiaWdnZXN0LWRpc2NvdW50JywgJ2Jlc3QtcmF0aW5nJ10uaW5jbHVkZXMob3B0aW9ucy5zb3J0KSlcbiAgICAgIHJldHVybiB0aGlzLnByb2R1Y3RSZXBvc2l0b3J5LmZpbmRDYXRhbG9nKHJlcG9QYXJhbXMpXG5cbiAgICByZXR1cm4gdGhpcy5wcm9kdWN0UmVwb3NpdG9yeS5maW5kQ2F0YWxvZyhcbiAgICAgIHJlcG9QYXJhbXMsXG4gICAgICBvcHRpb25zPy5tYWluR2VuZGVyIHx8IHRoaXMuc2hvcCA9PT0gU2hvcHMuTUVOU01BUktFVCA/ICdtYWxlJyA6ICdmZW1hbGUnLFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgYnVpbGRNYWluRmlsdGVyKHtcbiAgICBjYXRlZ29yeSxcbiAgICBwcm9maWxlLFxuICAgIHRlcm0sXG4gIH06IEZldGNoUHJvZHVjdHNNYWluUGFyYW1zPFQ+KTogUHJvbWlzZTxSZXBvc2l0b3J5RmluZEZpZWx0ZXJzPFByb2R1Y3Q+PiB7XG4gICAgaWYgKGNhdGVnb3J5KSByZXR1cm4gdGhpcy5jYXRlZ29yeVN0cnVjdHVyZUFkYXB0ZXIuYnVpbGRQcm9kdWN0RmlsdGVyQnlDYXRlZ29yeShjYXRlZ29yeSlcbiAgICBpZiAocHJvZmlsZSkgcmV0dXJuIHsgdGFnczogeyBvcGVyYXRvcjogV2hlcmUuTElLRSwgdmFsdWU6IHByb2ZpbGUgfSB9XG4gICAgaWYgKHRlcm0pXG4gICAgICByZXR1cm4gdGhpcy5wcm9kdWN0SW5kZXhcbiAgICAgICAgLnNlYXJjaCh0ZXJtLCA5OTksIHRoaXMuc2hvcClcbiAgICAgICAgLnRoZW4oKGRhdGEpID0+ICh7IGlkOiB7IG9wZXJhdG9yOiBXaGVyZS5JTiwgdmFsdWU6IGRhdGEuaGl0cy5tYXAoKHsgX3NvdXJjZSB9KSA9PiBfc291cmNlLmlkKSB9IH0pKVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbHRlclF1ZXJ5ID0gKHtcbiAgICBjbHViRGlzY291bnQsXG4gICAgYnJhbmRzLFxuICAgIHByaWNlcyxcbiAgICBnZW5kZXIsXG4gICAgdGFncyxcbiAgICByYXRlLFxuICAgIGN1c3RvbU9wdGlvbnMsXG4gIH06IEZldGNoUHJvZHVjdHNGaWx0ZXJzKTogUmVwb3NpdG9yeUZpbmRGaWVsdGVyczxQcm9kdWN0PiA9PiB7XG4gICAgY29uc3QgZmlsdGVycyA9IHt9IGFzIFJlcG9zaXRvcnlGaW5kRmllbHRlcnM8UHJvZHVjdD5cblxuICAgIGlmIChjbHViRGlzY291bnQ/Lmxlbmd0aClcbiAgICAgIHNldChmaWx0ZXJzLCAncHJpY2Uuc3Vic2NyaWJlckRpc2NvdW50UGVyY2VudGFnZScsIHsgb3BlcmF0b3I6IFdoZXJlLklOLCB2YWx1ZTogY2x1YkRpc2NvdW50IH0pXG4gICAgaWYgKGJyYW5kcz8ubGVuZ3RoKSBmaWx0ZXJzLmJyYW5kID0geyBvcGVyYXRvcjogV2hlcmUuSU4sIHZhbHVlOiBicmFuZHMgfVxuICAgIGlmIChnZW5kZXI/Lmxlbmd0aCkgZmlsdGVycy5nZW5kZXIgPSB7IG9wZXJhdG9yOiBXaGVyZS5JTiwgdmFsdWU6IGdlbmRlciB9XG4gICAgaWYgKHByaWNlcz8ubWluIHx8IHByaWNlcz8ubWF4KVxuICAgICAgc2V0KGZpbHRlcnMsIHByaWNlcy5zdWJzY3JpYmVyUHJpY2UgPyAncHJpY2Uuc3Vic2NyaWJlclByaWNlJyA6ICdwcmljZS5wcmljZScsIFtcbiAgICAgICAgLi4uKHByaWNlcy5taW4gPyBbeyBvcGVyYXRvcjogV2hlcmUuR1RFLCB2YWx1ZTogTWF0aC5yb3VuZChwcmljZXMubWluKSB9XSA6IFtdKSxcbiAgICAgICAgLi4uKHByaWNlcy5tYXggPyBbeyBvcGVyYXRvcjogV2hlcmUuTFRFLCB2YWx1ZTogTWF0aC5jZWlsKHByaWNlcy5tYXgpIH1dIDogW10pLFxuICAgICAgXSlcbiAgICBpZiAocmF0ZSkgZmlsdGVycy5yYXRlID0geyBvcGVyYXRvcjogV2hlcmUuR1RFLCB2YWx1ZTogcmF0ZSB9XG4gICAgaWYgKHRhZ3M/Lmxlbmd0aCkgZmlsdGVycy50YWdzID0geyBvcGVyYXRvcjogV2hlcmUuTElLRSwgdmFsdWU6IHRhZ3MgfVxuICAgIGlmIChjdXN0b21PcHRpb25zPy5sZW5ndGgpIGZpbHRlcnMuZmlsdGVycyA9IHsgb3BlcmF0b3I6IFdoZXJlLkxJS0UsIHZhbHVlOiBjdXN0b21PcHRpb25zIH1cblxuICAgIHJldHVybiBmaWx0ZXJzXG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU29ydFF1ZXJ5ID0gKHNvcnQ6IFByb2R1Y3RTb3J0KTogUmVwb3NpdG9yeU9yZGVyQnk8UHJvZHVjdD4gPT4ge1xuICAgIGlmICghc29ydCB8fCBzb3J0ID09PSAnbW9zdC1yZWxldmFudCcpIHJldHVybiB7fVxuXG4gICAgaWYgKHNvcnQgPT09ICdiZXN0LXNlbGxlcnMnKSByZXR1cm4geyBzaG9wcGluZ0NvdW50OiAnZGVzYycgfVxuICAgIGlmIChzb3J0ID09PSAnYmlnZ2VzdC1wcmljZScpIHJldHVybiB7IHN1YnNjcmliZXJQcmljZTogJ2Rlc2MnIH0gYXMgYW55XG4gICAgaWYgKHNvcnQgPT09ICdsb3dlc3QtcHJpY2UnKSByZXR1cm4geyBzdWJzY3JpYmVyUHJpY2U6ICdhc2MnIH0gYXMgYW55XG4gICAgaWYgKHNvcnQgPT09ICdiZXN0LXJhdGluZycpIHJldHVybiB7IHJhdGU6ICdkZXNjJyB9XG4gICAgaWYgKHNvcnQgPT09ICduZXdzJykgcmV0dXJuIHsgY3JlYXRlZEF0OiAnZGVzYycgfVxuICAgIGlmIChzb3J0ID09PSAnYmlnZ2VzdC1kaXNjb3VudCcpIHJldHVybiB7IHN1YnNjcmliZXJEaXNjb3VudFBlcmNlbnRhZ2U6ICdkZXNjJyB9IGFzIGFueVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZExpbWl0UXVlcnkgPSAob3B0aW9uczogeyBwYWdlPzogbnVtYmVyOyBwZXJQYWdlPzogbnVtYmVyIH0pOiB7IGxpbWl0PzogbnVtYmVyOyBvZmZzZXQ/OiBudW1iZXIgfSA9PiB7XG4gICAgY29uc3QgbGltaXQgPSBvcHRpb25zPy5wZXJQYWdlIHx8IDIwXG5cbiAgICByZXR1cm4ge1xuICAgICAgbGltaXQsXG4gICAgICBvZmZzZXQ6ICgob3B0aW9ucz8ucGFnZSB8fCAxKSAtIDEpICogbGltaXQsXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYXNQcm9maWxlID0gKFxuICAgIG9wdGlvbnM6IEZldGNoUHJvZHVjdHNQYXJhbXM8VD4sXG4gICk6IG9wdGlvbnMgaXMgRmV0Y2hQcm9kdWN0c09wdGlvbnMgJiB7XG4gICAgcHJvZmlsZTogRmV0Y2hQcm9kdWN0c01haW5QYXJhbXM8VD5bJ3Byb2ZpbGUnXVxuICAgIGZpbHRlcnM/OiBGZXRjaFByb2R1Y3RzRmlsdGVycyAmIHsgY3VzdG9tT3B0aW9ucz86IG5ldmVyOyB0YWdzPzogbmV2ZXIgfVxuICB9ID0+ICdwcm9maWxlJyBpbiBvcHRpb25zXG5cbiAgcHJpdmF0ZSBoYXNUZXJtID0gKFxuICAgIG9wdGlvbnM6IEZldGNoUHJvZHVjdHNQYXJhbXM8VD4sXG4gICk6IG9wdGlvbnMgaXMgRmV0Y2hQcm9kdWN0c09wdGlvbnMgJiB7XG4gICAgdGVybTogRmV0Y2hQcm9kdWN0c01haW5QYXJhbXM8VD5bJ3Rlcm0nXVxuICAgIGZpbHRlcnM/OiBGZXRjaFByb2R1Y3RzRmlsdGVycyAmIHsgY3VzdG9tT3B0aW9ucz86IG5ldmVyIH1cbiAgfSA9PiAndGVybScgaW4gb3B0aW9uc1xuXG4gIHByaXZhdGUgaGFzQ2F0ZWdvcnkgPSAoXG4gICAgb3B0aW9uczogRmV0Y2hQcm9kdWN0c1BhcmFtczxUPixcbiAgKTogb3B0aW9ucyBpcyBGZXRjaFByb2R1Y3RzT3B0aW9ucyAmIHtcbiAgICBjYXRlZ29yeTogRmV0Y2hQcm9kdWN0c01haW5QYXJhbXM8VD5bJ2NhdGVnb3J5J11cbiAgICBmaWx0ZXJzPzogRmV0Y2hQcm9kdWN0c0ZpbHRlcnNcbiAgfSA9PiAnY2F0ZWdvcnknIGluIG9wdGlvbnNcbn1cbiJdfQ==
@@ -1,51 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core';
2
- import { Shops, } from '@infrab4a/connect';
3
- import { CATEGORY_STRUCTURE, DEFAULT_SHOP } from '../../consts';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "@infrab4a/connect";
6
- export class CategoryService {
7
- constructor(productRepository, categoryRepository, categoryFilterRepository, categoryStructureAdapter, shop) {
8
- this.productRepository = productRepository;
9
- this.categoryRepository = categoryRepository;
10
- this.categoryFilterRepository = categoryFilterRepository;
11
- this.categoryStructureAdapter = categoryStructureAdapter;
12
- this.shop = shop;
13
- }
14
- async fetchBrands(category, mainGender) {
15
- const brands = await this.productRepository
16
- .findCatalog({
17
- filters: await this.categoryStructureAdapter.buildProductFilterByCategory(category),
18
- fields: ['brand'],
19
- }, mainGender || this.shop === Shops.MENSMARKET ? 'male' : 'female')
20
- .then(({ data }) => Object.keys(data.map((product) => product.brand).reduce((brands, brand) => ({ ...brands, [brand]: true }), {})));
21
- return this.categoryRepository
22
- .find({ filters: { brandCategory: true, shop: this.shop }, orderBy: { name: 'asc' } })
23
- .then(({ data }) => data.filter((category) => brands.includes(category.conditions.brand)));
24
- }
25
- async fetchFilterOptions(category) {
26
- return await this.categoryFilterRepository
27
- .find({ filters: { categoryId: +category.id } })
28
- .then(({ data }) => data.map((categoryFilter) => categoryFilter.filter));
29
- }
30
- }
31
- CategoryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService, deps: [{ token: 'ProductRepository' }, { token: 'CategoryRepository' }, { token: 'CategoryFilterRepository' }, { token: CATEGORY_STRUCTURE }, { token: DEFAULT_SHOP }], target: i0.ɵɵFactoryTarget.Injectable });
32
- CategoryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService });
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService, decorators: [{
34
- type: Injectable
35
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
36
- type: Inject,
37
- args: ['ProductRepository']
38
- }] }, { type: undefined, decorators: [{
39
- type: Inject,
40
- args: ['CategoryRepository']
41
- }] }, { type: undefined, decorators: [{
42
- type: Inject,
43
- args: ['CategoryFilterRepository']
44
- }] }, { type: undefined, decorators: [{
45
- type: Inject,
46
- args: [CATEGORY_STRUCTURE]
47
- }] }, { type: i1.Shops, decorators: [{
48
- type: Inject,
49
- args: [DEFAULT_SHOP]
50
- }] }]; } });
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3QtYW5ndWxhci9zcmMvc2VydmljZXMvY2F0YWxvZy9jYXRlZ29yeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFPTCxLQUFLLEdBQ04sTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFBOzs7QUFJL0QsTUFBTSxPQUFPLGVBQWU7SUFDMUIsWUFDZ0QsaUJBQW9DLEVBQ25DLGtCQUFzQyxFQUNoQyx3QkFBa0QsRUFDMUQsd0JBQWtELEVBQ3hELElBQVc7UUFKSixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBQ25DLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDaEMsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtRQUMxRCw2QkFBd0IsR0FBeEIsd0JBQXdCLENBQTBCO1FBQ3hELFNBQUksR0FBSixJQUFJLENBQU87SUFDakQsQ0FBQztJQUVKLEtBQUssQ0FBQyxXQUFXLENBQUMsUUFBa0IsRUFBRSxVQUEwQjtRQUM5RCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxpQkFBaUI7YUFDeEMsV0FBVyxDQUNWO1lBQ0UsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDLHdCQUF3QixDQUFDLDRCQUE0QixDQUFDLFFBQVEsQ0FBQztZQUNuRixNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUM7U0FDbEIsRUFDRCxVQUFVLElBQUksSUFBSSxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FDakU7YUFDQSxJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FDakIsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUNoSCxDQUFBO1FBRUgsT0FBTyxJQUFJLENBQUMsa0JBQWtCO2FBQzNCLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQzthQUNyRixJQUFJLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsUUFBUSxFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQzlGLENBQUM7SUFFRCxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBa0I7UUFDekMsT0FBTyxNQUFNLElBQUksQ0FBQyx3QkFBd0I7YUFDdkMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7YUFDL0MsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLGNBQWMsRUFBRSxFQUFFLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUE7SUFDNUUsQ0FBQzs7NEdBL0JVLGVBQWUsa0JBRWhCLG1CQUFtQixhQUNuQixvQkFBb0IsYUFDcEIsMEJBQTBCLGFBQzFCLGtCQUFrQixhQUNsQixZQUFZO2dIQU5YLGVBQWU7MkZBQWYsZUFBZTtrQkFEM0IsVUFBVTs7MEJBR04sTUFBTTsyQkFBQyxtQkFBbUI7OzBCQUMxQixNQUFNOzJCQUFDLG9CQUFvQjs7MEJBQzNCLE1BQU07MkJBQUMsMEJBQTBCOzswQkFDakMsTUFBTTsyQkFBQyxrQkFBa0I7OzBCQUN6QixNQUFNOzJCQUFDLFlBQVkiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgQ2F0ZWdvcnksXG4gIENhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSxcbiAgQ2F0ZWdvcnlSZXBvc2l0b3J5LFxuICBGaWx0ZXIsXG4gIFByb2R1Y3RHZW5kZXIsXG4gIFByb2R1Y3RSZXBvc2l0b3J5LFxuICBTaG9wcyxcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5pbXBvcnQgeyBDQVRFR09SWV9TVFJVQ1RVUkUsIERFRkFVTFRfU0hPUCB9IGZyb20gJy4uLy4uL2NvbnN0cydcbmltcG9ydCB7IENhdGVnb3J5U3RydWN0dXJlQWRhcHRlciB9IGZyb20gJy4vYWRhcHRlcnMnXG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBDYXRlZ29yeVNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCdQcm9kdWN0UmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgcHJvZHVjdFJlcG9zaXRvcnk6IFByb2R1Y3RSZXBvc2l0b3J5LFxuICAgIEBJbmplY3QoJ0NhdGVnb3J5UmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlSZXBvc2l0b3J5OiBDYXRlZ29yeVJlcG9zaXRvcnksXG4gICAgQEluamVjdCgnQ2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeUZpbHRlclJlcG9zaXRvcnk6IENhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSxcbiAgICBASW5qZWN0KENBVEVHT1JZX1NUUlVDVFVSRSkgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeVN0cnVjdHVyZUFkYXB0ZXI6IENhdGVnb3J5U3RydWN0dXJlQWRhcHRlcixcbiAgICBASW5qZWN0KERFRkFVTFRfU0hPUCkgcHJpdmF0ZSByZWFkb25seSBzaG9wOiBTaG9wcyxcbiAgKSB7fVxuXG4gIGFzeW5jIGZldGNoQnJhbmRzKGNhdGVnb3J5OiBDYXRlZ29yeSwgbWFpbkdlbmRlcj86IFByb2R1Y3RHZW5kZXIpOiBQcm9taXNlPENhdGVnb3J5W10+IHtcbiAgICBjb25zdCBicmFuZHMgPSBhd2FpdCB0aGlzLnByb2R1Y3RSZXBvc2l0b3J5XG4gICAgICAuZmluZENhdGFsb2coXG4gICAgICAgIHtcbiAgICAgICAgICBmaWx0ZXJzOiBhd2FpdCB0aGlzLmNhdGVnb3J5U3RydWN0dXJlQWRhcHRlci5idWlsZFByb2R1Y3RGaWx0ZXJCeUNhdGVnb3J5KGNhdGVnb3J5KSxcbiAgICAgICAgICBmaWVsZHM6IFsnYnJhbmQnXSxcbiAgICAgICAgfSxcbiAgICAgICAgbWFpbkdlbmRlciB8fCB0aGlzLnNob3AgPT09IFNob3BzLk1FTlNNQVJLRVQgPyAnbWFsZScgOiAnZmVtYWxlJyxcbiAgICAgIClcbiAgICAgIC50aGVuKCh7IGRhdGEgfSkgPT5cbiAgICAgICAgT2JqZWN0LmtleXMoZGF0YS5tYXAoKHByb2R1Y3QpID0+IHByb2R1Y3QuYnJhbmQpLnJlZHVjZSgoYnJhbmRzLCBicmFuZCkgPT4gKHsgLi4uYnJhbmRzLCBbYnJhbmRdOiB0cnVlIH0pLCB7fSkpLFxuICAgICAgKVxuXG4gICAgcmV0dXJuIHRoaXMuY2F0ZWdvcnlSZXBvc2l0b3J5XG4gICAgICAuZmluZCh7IGZpbHRlcnM6IHsgYnJhbmRDYXRlZ29yeTogdHJ1ZSwgc2hvcDogdGhpcy5zaG9wIH0sIG9yZGVyQnk6IHsgbmFtZTogJ2FzYycgfSB9KVxuICAgICAgLnRoZW4oKHsgZGF0YSB9KSA9PiBkYXRhLmZpbHRlcigoY2F0ZWdvcnkpID0+IGJyYW5kcy5pbmNsdWRlcyhjYXRlZ29yeS5jb25kaXRpb25zLmJyYW5kKSkpXG4gIH1cblxuICBhc3luYyBmZXRjaEZpbHRlck9wdGlvbnMoY2F0ZWdvcnk6IENhdGVnb3J5KTogUHJvbWlzZTxGaWx0ZXJbXT4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLmNhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeVxuICAgICAgLmZpbmQoeyBmaWx0ZXJzOiB7IGNhdGVnb3J5SWQ6ICtjYXRlZ29yeS5pZCB9IH0pXG4gICAgICAudGhlbigoeyBkYXRhIH0pID0+IGRhdGEubWFwKChjYXRlZ29yeUZpbHRlcikgPT4gY2F0ZWdvcnlGaWx0ZXIuZmlsdGVyKSlcbiAgfVxufVxuIl19
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hpcHBpbmctbWV0aG9kcy50eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9zZXJ2aWNlcy90eXBlcy9zaGlwcGluZy1tZXRob2RzLnR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgU2hpcHBpbmdNZXRob2RSZXNwb25zZSB7XG4gIGRheXNUb0RlbGl2ZXJ5OiBudW1iZXI7XG4gIGN1cnJlbmN5OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG1heERlbGl2ZXJ5RGF0ZTogc3RyaW5nO1xuICBtaW5EZWxpdmVyeURhdGU6IHN0cmluZztcbiAgc2VydmljZUNvZGU6IHN0cmluZztcbiAgc2VydmljZU5hbWU6IHN0cmluZztcbiAgdG90YWxQcmljZTogbnVtYmVyO1xuICBhZGRpdGlvbmFsRGVzY3JpcHRpb246IHN0cmluZztcbiAgY25wajogc3RyaW5nO1xufSJdfQ==