@infrab4a/connect 0.14.4 → 0.14.5-beta.1

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.
@@ -1,5 +1,5 @@
1
1
  import { __awaiter } from "tslib";
2
- import { Base } from '../../../../../utils';
2
+ import { Base, chunk } from '../../../../../utils';
3
3
  import { Category, Shops } from '../../../../../domain';
4
4
  import { withCrudFirestore, withFirestore, withHelpers } from '../../mixins';
5
5
  import { DuplicatedResultsError, NotFoundError, RequiredArgumentError } from '../../../../../errors';
@@ -34,41 +34,37 @@ export class CategoryFirestoreRepository extends withCrudFirestore(withHelpers(w
34
34
  if (categorySnap.empty)
35
35
  throw new NotFoundError('Categories not found');
36
36
  const categories = categorySnap.docs.map((doc) => doc.data());
37
- const homeSections = [];
38
- for (const category of categories) {
39
- const products = yield this.mountCategory(category);
40
- homeSections.push({
37
+ const homeSections = yield Promise.all(categories.map((category) => __awaiter(this, void 0, void 0, function* () {
38
+ return ({
41
39
  category,
42
- products: products.filter((product) => product.stock.quantity > 0).splice(0, limit),
40
+ products: yield this.mountCategory(category, { limit, hasStock: true }),
43
41
  });
44
- }
42
+ })));
45
43
  return homeSections;
46
44
  });
47
45
  }
48
- mountCategory(category) {
46
+ mountCategory(category, options) {
49
47
  return __awaiter(this, void 0, void 0, function* () {
50
48
  if (!category.products)
51
49
  throw new RequiredArgumentError(['Category products is empty']);
52
- const chunks = category.products.reduce((resultArray, item, index) => {
53
- const chunkIndex = Math.floor(index / 10);
54
- if (!resultArray[chunkIndex])
55
- resultArray[chunkIndex] = [];
56
- resultArray[chunkIndex].push(item);
57
- return resultArray;
58
- }, []);
50
+ const chunks = chunk(category.products, 10);
59
51
  const products = [];
60
52
  const publishedField = category.shop === Shops.GLAMSHOP ? 'publishedGlam' : 'published';
61
- yield Promise.all(chunks.map((productIds) => __awaiter(this, void 0, void 0, function* () {
62
- const productSnap = yield this.collection('products')
63
- .where(publishedField, '==', true)
64
- .where('id', 'in', productIds)
65
- .get();
53
+ for (const productIds of chunks) {
54
+ if ((options === null || options === void 0 ? void 0 : options.limit) && products.length >= (options === null || options === void 0 ? void 0 : options.limit))
55
+ break;
56
+ let query = yield this.collection('products').where(publishedField, '==', true).where('id', 'in', productIds);
57
+ if (options === null || options === void 0 ? void 0 : options.hasStock)
58
+ query = query.where('stock.quantity', '>', 0);
59
+ if (options === null || options === void 0 ? void 0 : options.limit)
60
+ query = query.limit(options === null || options === void 0 ? void 0 : options.limit);
61
+ const productSnap = yield query.get();
66
62
  if (productSnap.empty)
67
- return;
63
+ continue;
68
64
  products.push(...productSnap.docs.map((doc) => doc.data()));
69
- })));
65
+ }
70
66
  return products;
71
67
  });
72
68
  }
73
69
  }
74
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktZmlyZXN0b3JlLnJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy9saWIvaW5mcmEvZmlyZWJhc2UvZmlyZXN0b3JlL3JlcG9zaXRvcmllcy9jYXRhbG9nL2NhdGVnb3J5LWZpcmVzdG9yZS5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBK0IsS0FBSyxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFFcEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUE7QUFDNUUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLGFBQWEsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBRXBHLE1BQU0sT0FBTywyQkFDWCxTQUFRLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUdyRSxZQUFxQixTQUE0QjtRQUMvQyxLQUFLLEVBQUUsQ0FBQTtRQURZLGNBQVMsR0FBVCxTQUFTLENBQW1CO1FBRS9DLElBQUksQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFBO0lBQ3ZCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsSUFBVztRQUN6QyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQzthQUN4QyxLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7YUFDekIsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO2FBQ3pCLEtBQUssQ0FBQyxXQUFXLEVBQUUsSUFBSSxF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VyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7cUJBQ2xELEtBQUssQ0FBQyxjQUFjLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztxQkFDakMsS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxDQUFDO3FCQUM3QixHQUFHLEVBQUUsQ0FBQTtnQkFFUixJQUFJLFdBQVcsQ0FBQyxLQUFLO29CQUFFLE9BQU07Z0JBRTdCLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQTtZQUM3RCxDQUFDLENBQUEsQ0FBQyxDQUNILENBQUE7WUFFRCxPQUFPLFFBQVEsQ0FBQTtRQUNqQixDQUFDO0tBQUE7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpcmViYXNlRmlyZXN0b3JlIH0gZnJvbSAnQGZpcmViYXNlL2ZpcmVzdG9yZS10eXBlcydcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgQ2F0ZWdvcnksIENhdGVnb3J5UmVwb3NpdG9yeSwgUHJvZHVjdCwgU2hvcHMgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9kb21haW4nXG5cbmltcG9ydCB7IHdpdGhDcnVkRmlyZXN0b3JlLCB3aXRoRmlyZXN0b3JlLCB3aXRoSGVscGVycyB9IGZyb20gJy4uLy4uL21peGlucydcbmltcG9ydCB7IER1cGxpY2F0ZWRSZXN1bHRzRXJyb3IsIE5vdEZvdW5kRXJyb3IsIFJlcXVpcmVkQXJndW1lbnRFcnJvciB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2Vycm9ycydcblxuZXhwb3J0IGNsYXNzIENhdGVnb3J5RmlyZXN0b3JlUmVwb3NpdG9yeVxuICBleHRlbmRzIHdpdGhDcnVkRmlyZXN0b3JlKHdpdGhIZWxwZXJzKHdpdGhGaXJlc3RvcmU8Q2F0ZWdvcnk+KEJhc2UpKSlcbiAgaW1wbGVtZW50cyBDYXRlZ29yeVJlcG9zaXRvcnlcbntcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgZmlyZXN0b3JlOiBGaXJlYmFzZUZpcmVzdG9yZSkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmNvbGxlY3Rpb25OYW1lID0gJ2NhdGVnb3JpZXMnXG4gICAgdGhpcy5tb2RlbCA9IENhdGVnb3J5XG4gIH1cblxuICBnZXRDYXRlZ29yeUJ5U2x1ZyhzbHVnOiBzdHJpbmcsIHNob3A6IFNob3BzKTogUHJvbWlzZTxDYXRlZ29yeT4ge1xuICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb24odGhpcy5jb2xsZWN0aW9uTmFtZSlcbiAgICAgIC53aGVyZSgnc2x1ZycsICc9PScsIHNsdWcpXG4gICAgICAud2hlcmUoJ3Nob3AnLCAnPT0nLCBzaG9wKVxuICAgICAgLndoZXJlKCdwdWJsaXNoZWQnLCAnPT0nLCB0cnVlKVxuICAgICAgLmdldCgpXG4gICAgICAudGhlbigoc25hcCkgPT4ge1xuICAgICAgICBpZiAoc25hcC5zaXplID4gMSkgdGhyb3cgbmV3IER1cGxpY2F0ZWRSZXN1bHRzRXJyb3IoJ1F1ZXJ5IHJldHVybmVkIGR1cGxpY2F0ZWQgdmFsdWVzJylcblxuICAgICAgICBpZiAoc25hcC5lbXB0eSkgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYERvY3VtZW50IHdpdGggc2x1ZyAke3NsdWd9IG5vdCBmb3VuZGApXG5cbiAgICAgICAgcmV0dXJuIHNuYXAuZG9jc1swXS5kYXRhKClcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiBlcnJvcilcbiAgfVxuXG4gIGFzeW5jIGdldENhdGVnb3JpZXNGb3JIb21lKGNhdGVnb3J5SWRzOiBzdHJpbmdbXSwgbGltaXQgPSA0KTogUHJvbWlzZTx7IGNhdGVnb3J5OiBDYXRlZ29yeTsgcHJvZHVjdHM6IFByb2R1Y3RbXSB9W10+IHtcbiAgICBjb25zdCBjYXRlZ29yeVNuYXAgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb24odGhpcy5jb2xsZWN0aW9uTmFtZSlcbiAgICAgIC53aGVyZSgnaWQnLCAnaW4nLCBjYXRlZ29yeUlkcylcbiAgICAgIC53aGVyZSgncHVibGlzaGVkJywgJz09JywgdHJ1ZSlcbiAgICAgIC5nZXQoKVxuXG4gICAgaWYgKGNhdGVnb3J5U25hcC5lbXB0eSkgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoJ0NhdGVnb3JpZXMgbm90IGZvdW5kJylcblxuICAgIGNvbnN0IGNhdGVnb3JpZXMgPSBjYXRlZ29yeVNuYXAuZG9jcy5tYXAoKGRvYykgPT4gZG9jLmRhdGEoKSlcbiAgICBjb25zdCBob21lU2VjdGlvbnMgPSBbXVxuXG4gICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiBjYXRlZ29yaWVzKSB7XG4gICAgICBjb25zdCBwcm9kdWN0cyA9IGF3YWl0IHRoaXMubW91bnRDYXRlZ29yeShjYXRlZ29yeSlcblxuICAgICAgaG9tZVNlY3Rpb25zLnB1c2goe1xuICAgICAgICBjYXRlZ29yeSxcbiAgICAgICAgcHJvZHVjdHM6IHByb2R1Y3RzLmZpbHRlcigocHJvZHVjdCkgPT4gcHJvZHVjdC5zdG9jay5xdWFudGl0eSA+IDApLnNwbGljZSgwLCBsaW1pdCksXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBob21lU2VjdGlvbnNcbiAgfVxuXG4gIGFzeW5jIG1vdW50Q2F0ZWdvcnkoY2F0ZWdvcnk6IENhdGVnb3J5KTogUHJvbWlzZTxQcm9kdWN0W10+IHtcbiAgICBpZiAoIWNhdGVnb3J5LnByb2R1Y3RzKSB0aHJvdyBuZXcgUmVxdWlyZWRBcmd1bWVudEVycm9yKFsnQ2F0ZWdvcnkgcHJvZHVjdHMgaXMgZW1wdHknXSlcblxuICAgIGNvbnN0IGNodW5rcyA9IGNhdGVnb3J5LnByb2R1Y3RzLnJlZHVjZSgocmVzdWx0QXJyYXksIGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjaHVua0luZGV4ID0gTWF0aC5mbG9vcihpbmRleCAvIDEwKVxuXG4gICAgICBpZiAoIXJlc3VsdEFycmF5W2NodW5rSW5kZXhdKSByZXN1bHRBcnJheVtjaHVua0luZGV4XSA9IFtdXG5cbiAgICAgIHJlc3VsdEFycmF5W2NodW5rSW5kZXhdLnB1c2goaXRlbSlcblxuICAgICAgcmV0dXJuIHJlc3VsdEFycmF5XG4gICAgfSwgW10pXG5cbiAgICBjb25zdCBwcm9kdWN0cyA9IFtdXG4gICAgY29uc3QgcHVibGlzaGVkRmllbGQgPSBjYXRlZ29yeS5zaG9wID09PSBTaG9wcy5HTEFNU0hPUCA/ICdwdWJsaXNoZWRHbGFtJyA6ICdwdWJsaXNoZWQnXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIGNodW5rcy5tYXAoYXN5bmMgKHByb2R1Y3RJZHMpID0+IHtcbiAgICAgICAgY29uc3QgcHJvZHVjdFNuYXAgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb24oJ3Byb2R1Y3RzJylcbiAgICAgICAgICAud2hlcmUocHVibGlzaGVkRmllbGQsICc9PScsIHRydWUpXG4gICAgICAgICAgLndoZXJlKCdpZCcsICdpbicsIHByb2R1Y3RJZHMpXG4gICAgICAgICAgLmdldCgpXG5cbiAgICAgICAgaWYgKHByb2R1Y3RTbmFwLmVtcHR5KSByZXR1cm5cblxuICAgICAgICBwcm9kdWN0cy5wdXNoKC4uLnByb2R1Y3RTbmFwLmRvY3MubWFwKChkb2MpID0+IGRvYy5kYXRhKCkpKVxuICAgICAgfSksXG4gICAgKVxuXG4gICAgcmV0dXJuIHByb2R1Y3RzXG4gIH1cbn1cbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktZmlyZXN0b3JlLnJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy9saWIvaW5mcmEvZmlyZWJhc2UvZmlyZXN0b3JlL3JlcG9zaXRvcmllcy9jYXRhbG9nL2NhdGVnb3J5LWZpcmVzdG9yZS5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxPQUFPLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQ2xELE9BQU8sRUFBRSxRQUFRLEVBQStCLEtBQUssRUFBRSxNQUFNLHVCQUF1QixDQUFBO0FBRXBGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQzVFLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxhQUFhLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUVwRyxNQUFNLE9BQU8sMkJBQ1gsU0FBUSxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFXLElBQUksQ0FBQyxDQUFDLENBQUM7SUFHckUsWUFBcUIsU0FBNEI7UUFDL0MsS0FBSyxFQUFFLENBQUE7UUFEWSxjQUFTLEdBQVQsU0FBUyxDQUFtQjtRQUUvQyxJQUFJLENBQUMsY0FBYyxHQUFHLFlBQVksQ0FBQTtRQUNsQyxJQUFJLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQTtJQUN2QixDQUFDO0lBRUQsaUJBQWlCLENBQUMsSUFBWSxFQUFFLElBQVc7UUFDekMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7YUFDeEMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO2FBQ3pCLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQzthQUN6QixLQUFLLENBQUMsV0FBVyxF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QyxDQUFDLENBQUE7Z0JBQ3BFLElBQUksT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLEtBQUs7b0JBQUUsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUV2RCxNQUFNLFdBQVcsR0FBRyxNQUFNLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQTtnQkFFckMsSUFBSSxXQUFXLENBQUMsS0FBSztvQkFBRSxTQUFRO2dCQUUvQixRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUE7YUFDNUQ7WUFFRCxPQUFPLFFBQVEsQ0FBQTtRQUNqQixDQUFDO0tBQUE7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpcmViYXNlRmlyZXN0b3JlIH0gZnJvbSAnQGZpcmViYXNlL2ZpcmVzdG9yZS10eXBlcydcblxuaW1wb3J0IHsgQmFzZSwgY2h1bmsgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlscydcbmltcG9ydCB7IENhdGVnb3J5LCBDYXRlZ29yeVJlcG9zaXRvcnksIFByb2R1Y3QsIFNob3BzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZG9tYWluJ1xuXG5pbXBvcnQgeyB3aXRoQ3J1ZEZpcmVzdG9yZSwgd2l0aEZpcmVzdG9yZSwgd2l0aEhlbHBlcnMgfSBmcm9tICcuLi8uLi9taXhpbnMnXG5pbXBvcnQgeyBEdXBsaWNhdGVkUmVzdWx0c0Vycm9yLCBOb3RGb3VuZEVycm9yLCBSZXF1aXJlZEFyZ3VtZW50RXJyb3IgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi9lcnJvcnMnXG5cbmV4cG9ydCBjbGFzcyBDYXRlZ29yeUZpcmVzdG9yZVJlcG9zaXRvcnlcbiAgZXh0ZW5kcyB3aXRoQ3J1ZEZpcmVzdG9yZSh3aXRoSGVscGVycyh3aXRoRmlyZXN0b3JlPENhdGVnb3J5PihCYXNlKSkpXG4gIGltcGxlbWVudHMgQ2F0ZWdvcnlSZXBvc2l0b3J5XG57XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGZpcmVzdG9yZTogRmlyZWJhc2VGaXJlc3RvcmUpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5jb2xsZWN0aW9uTmFtZSA9ICdjYXRlZ29yaWVzJ1xuICAgIHRoaXMubW9kZWwgPSBDYXRlZ29yeVxuICB9XG5cbiAgZ2V0Q2F0ZWdvcnlCeVNsdWcoc2x1Zzogc3RyaW5nLCBzaG9wOiBTaG9wcyk6IFByb21pc2U8Q2F0ZWdvcnk+IHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uKHRoaXMuY29sbGVjdGlvbk5hbWUpXG4gICAgICAud2hlcmUoJ3NsdWcnLCAnPT0nLCBzbHVnKVxuICAgICAgLndoZXJlKCdzaG9wJywgJz09Jywgc2hvcClcbiAgICAgIC53aGVyZSgncHVibGlzaGVkJywgJz09JywgdHJ1ZSlcbiAgICAgIC5nZXQoKVxuICAgICAgLnRoZW4oKHNuYXApID0+IHtcbiAgICAgICAgaWYgKHNuYXAuc2l6ZSA+IDEpIHRocm93IG5ldyBEdXBsaWNhdGVkUmVzdWx0c0Vycm9yKCdRdWVyeSByZXR1cm5lZCBkdXBsaWNhdGVkIHZhbHVlcycpXG5cbiAgICAgICAgaWYgKHNuYXAuZW1wdHkpIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKGBEb2N1bWVudCB3aXRoIHNsdWcgJHtzbHVnfSBub3QgZm91bmRgKVxuXG4gICAgICAgIHJldHVybiBzbmFwLmRvY3NbMF0uZGF0YSgpXG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4gZXJyb3IpXG4gIH1cblxuICBhc3luYyBnZXRDYXRlZ29yaWVzRm9ySG9tZShjYXRlZ29yeUlkczogc3RyaW5nW10sIGxpbWl0ID0gNCk6IFByb21pc2U8eyBjYXRlZ29yeTogQ2F0ZWdvcnk7IHByb2R1Y3RzOiBQcm9kdWN0W10gfVtdPiB7XG4gICAgY29uc3QgY2F0ZWdvcnlTbmFwID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uKHRoaXMuY29sbGVjdGlvbk5hbWUpXG4gICAgICAud2hlcmUoJ2lkJywgJ2luJywgY2F0ZWdvcnlJZHMpXG4gICAgICAud2hlcmUoJ3B1Ymxpc2hlZCcsICc9PScsIHRydWUpXG4gICAgICAuZ2V0KClcblxuICAgIGlmIChjYXRlZ29yeVNuYXAuZW1wdHkpIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKCdDYXRlZ29yaWVzIG5vdCBmb3VuZCcpXG5cbiAgICBjb25zdCBjYXRlZ29yaWVzID0gY2F0ZWdvcnlTbmFwLmRvY3MubWFwKChkb2MpID0+IGRvYy5kYXRhKCkpXG4gICAgY29uc3QgaG9tZVNlY3Rpb25zID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBjYXRlZ29yaWVzLm1hcChhc3luYyAoY2F0ZWdvcnkpID0+ICh7XG4gICAgICAgIGNhdGVnb3J5LFxuICAgICAgICBwcm9kdWN0czogYXdhaXQgdGhpcy5tb3VudENhdGVnb3J5KGNhdGVnb3J5LCB7IGxpbWl0LCBoYXNTdG9jazogdHJ1ZSB9KSxcbiAgICAgIH0pKSxcbiAgICApXG5cbiAgICByZXR1cm4gaG9tZVNlY3Rpb25zXG4gIH1cblxuICBhc3luYyBtb3VudENhdGVnb3J5KGNhdGVnb3J5OiBDYXRlZ29yeSwgb3B0aW9ucz86IHsgbGltaXQ/OiBudW1iZXI7IGhhc1N0b2NrPzogYm9vbGVhbiB9KTogUHJvbWlzZTxQcm9kdWN0W10+IHtcbiAgICBpZiAoIWNhdGVnb3J5LnByb2R1Y3RzKSB0aHJvdyBuZXcgUmVxdWlyZWRBcmd1bWVudEVycm9yKFsnQ2F0ZWdvcnkgcHJvZHVjdHMgaXMgZW1wdHknXSlcblxuICAgIGNvbnN0IGNodW5rcyA9IGNodW5rKGNhdGVnb3J5LnByb2R1Y3RzLCAxMClcbiAgICBjb25zdCBwcm9kdWN0cyA9IFtdXG4gICAgY29uc3QgcHVibGlzaGVkRmllbGQgPSBjYXRlZ29yeS5zaG9wID09PSBTaG9wcy5HTEFNU0hPUCA/ICdwdWJsaXNoZWRHbGFtJyA6ICdwdWJsaXNoZWQnXG5cbiAgICBmb3IgKGNvbnN0IHByb2R1Y3RJZHMgb2YgY2h1bmtzKSB7XG4gICAgICBpZiAob3B0aW9ucz8ubGltaXQgJiYgcHJvZHVjdHMubGVuZ3RoID49IG9wdGlvbnM/LmxpbWl0KSBicmVha1xuXG4gICAgICBsZXQgcXVlcnkgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb24oJ3Byb2R1Y3RzJykud2hlcmUocHVibGlzaGVkRmllbGQsICc9PScsIHRydWUpLndoZXJlKCdpZCcsICdpbicsIHByb2R1Y3RJZHMpXG5cbiAgICAgIGlmIChvcHRpb25zPy5oYXNTdG9jaykgcXVlcnkgPSBxdWVyeS53aGVyZSgnc3RvY2sucXVhbnRpdHknLCAnPicsIDApXG4gICAgICBpZiAob3B0aW9ucz8ubGltaXQpIHF1ZXJ5ID0gcXVlcnkubGltaXQob3B0aW9ucz8ubGltaXQpXG5cbiAgICAgIGNvbnN0IHByb2R1Y3RTbmFwID0gYXdhaXQgcXVlcnkuZ2V0KClcblxuICAgICAgaWYgKHByb2R1Y3RTbmFwLmVtcHR5KSBjb250aW51ZVxuXG4gICAgICBwcm9kdWN0cy5wdXNoKC4uLnByb2R1Y3RTbmFwLmRvY3MubWFwKChkb2MpID0+IGRvYy5kYXRhKCkpKVxuICAgIH1cblxuICAgIHJldHVybiBwcm9kdWN0c1xuICB9XG59XG4iXX0=
@@ -1,7 +1,7 @@
1
1
  import 'reflect-metadata';
2
2
  import { plainToClass, classToPlain, Expose, Type } from 'class-transformer';
3
3
  import { __decorate, __metadata, __awaiter } from 'tslib';
4
- import { isNil, isObject, isNumber, isString, isEmpty } from 'lodash';
4
+ import { isNil, isObject, isNumber, isString, isEmpty, chunk } from 'lodash';
5
5
  export { chunk, isEmpty, isNil, isNumber, isObject, isString, pick } from 'lodash';
6
6
  import { Md5 } from 'ts-md5';
7
7
  import firebase from 'firebase';
@@ -1387,39 +1387,35 @@ class CategoryFirestoreRepository extends withCrudFirestore(withHelpers(withFire
1387
1387
  if (categorySnap.empty)
1388
1388
  throw new NotFoundError('Categories not found');
1389
1389
  const categories = categorySnap.docs.map((doc) => doc.data());
1390
- const homeSections = [];
1391
- for (const category of categories) {
1392
- const products = yield this.mountCategory(category);
1393
- homeSections.push({
1390
+ const homeSections = yield Promise.all(categories.map((category) => __awaiter(this, void 0, void 0, function* () {
1391
+ return ({
1394
1392
  category,
1395
- products: products.filter((product) => product.stock.quantity > 0).splice(0, limit),
1393
+ products: yield this.mountCategory(category, { limit, hasStock: true }),
1396
1394
  });
1397
- }
1395
+ })));
1398
1396
  return homeSections;
1399
1397
  });
1400
1398
  }
1401
- mountCategory(category) {
1399
+ mountCategory(category, options) {
1402
1400
  return __awaiter(this, void 0, void 0, function* () {
1403
1401
  if (!category.products)
1404
1402
  throw new RequiredArgumentError(['Category products is empty']);
1405
- const chunks = category.products.reduce((resultArray, item, index) => {
1406
- const chunkIndex = Math.floor(index / 10);
1407
- if (!resultArray[chunkIndex])
1408
- resultArray[chunkIndex] = [];
1409
- resultArray[chunkIndex].push(item);
1410
- return resultArray;
1411
- }, []);
1403
+ const chunks = chunk(category.products, 10);
1412
1404
  const products = [];
1413
1405
  const publishedField = category.shop === Shops.GLAMSHOP ? 'publishedGlam' : 'published';
1414
- yield Promise.all(chunks.map((productIds) => __awaiter(this, void 0, void 0, function* () {
1415
- const productSnap = yield this.collection('products')
1416
- .where(publishedField, '==', true)
1417
- .where('id', 'in', productIds)
1418
- .get();
1406
+ for (const productIds of chunks) {
1407
+ if ((options === null || options === void 0 ? void 0 : options.limit) && products.length >= (options === null || options === void 0 ? void 0 : options.limit))
1408
+ break;
1409
+ let query = yield this.collection('products').where(publishedField, '==', true).where('id', 'in', productIds);
1410
+ if (options === null || options === void 0 ? void 0 : options.hasStock)
1411
+ query = query.where('stock.quantity', '>', 0);
1412
+ if (options === null || options === void 0 ? void 0 : options.limit)
1413
+ query = query.limit(options === null || options === void 0 ? void 0 : options.limit);
1414
+ const productSnap = yield query.get();
1419
1415
  if (productSnap.empty)
1420
- return;
1416
+ continue;
1421
1417
  products.push(...productSnap.docs.map((doc) => doc.data()));
1422
- })));
1418
+ }
1423
1419
  return products;
1424
1420
  });
1425
1421
  }