@snabcentr/client-core 3.5.4 → 3.5.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/catalog/services/sc-catalog-filter.service.d.ts +9 -1
- package/esm2022/catalog/services/sc-catalog-filter.service.mjs +27 -9
- package/esm2022/helpers/sc-units-helper.mjs +17 -36
- package/fesm2022/snabcentr-client-core.mjs +40 -39
- package/fesm2022/snabcentr-client-core.mjs.map +1 -1
- package/helpers/sc-units-helper.d.ts +10 -20
- package/package.json +1 -1
- package/release_notes.tmp +3 -3
|
@@ -13,13 +13,21 @@ export declare class ScCatalogFilterService {
|
|
|
13
13
|
* HTTP клиент для выполнения запросов.
|
|
14
14
|
*/
|
|
15
15
|
private readonly http;
|
|
16
|
+
/**
|
|
17
|
+
* Время жизни кэша фильтров.
|
|
18
|
+
*/
|
|
19
|
+
private readonly cacheLifeTime;
|
|
20
|
+
/**
|
|
21
|
+
* Кэш фильтров по ключу `categoryIdOrSlug:recursively`.
|
|
22
|
+
*/
|
|
23
|
+
private readonly filterMap;
|
|
16
24
|
/**
|
|
17
25
|
* Возвращает список доступных фильтров продуктов в категории.
|
|
18
26
|
*
|
|
19
27
|
* @param categoryIdOrSlug Идентификатор или slug категории товаров.
|
|
20
28
|
* @param recursively Признак того, что необходимо вернуть фильтры с учетом вложенных категорий.
|
|
21
29
|
*/
|
|
22
|
-
getFilters$(categoryIdOrSlug: string | number, recursively?: boolean): Observable<ScCatalogFilter[]>;
|
|
30
|
+
getFilters$(categoryIdOrSlug: string | number, recursively?: boolean): Observable<ScCatalogFilter[] | null>;
|
|
23
31
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScCatalogFilterService, never>;
|
|
24
32
|
static ɵprov: i0.ɵɵInjectableDeclaration<ScCatalogFilterService>;
|
|
25
33
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { HttpClient, HttpParams } from '@angular/common/http';
|
|
2
2
|
import { inject, Injectable } from '@angular/core';
|
|
3
|
-
import { SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT, SC_URLS } from '../../tokens';
|
|
3
|
+
import { SC_CACHE_LIFETIME, SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT, SC_URLS } from '../../tokens';
|
|
4
|
+
import { ScCachedItem } from '../classes/sc-cached-item';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
5
6
|
/**
|
|
6
7
|
* Сервис для работы с фильтрами каталога.
|
|
@@ -15,6 +16,14 @@ export class ScCatalogFilterService {
|
|
|
15
16
|
* HTTP клиент для выполнения запросов.
|
|
16
17
|
*/
|
|
17
18
|
this.http = inject(HttpClient);
|
|
19
|
+
/**
|
|
20
|
+
* Время жизни кэша фильтров.
|
|
21
|
+
*/
|
|
22
|
+
this.cacheLifeTime = inject(SC_CACHE_LIFETIME);
|
|
23
|
+
/**
|
|
24
|
+
* Кэш фильтров по ключу `categoryIdOrSlug:recursively`.
|
|
25
|
+
*/
|
|
26
|
+
this.filterMap = new Map();
|
|
18
27
|
}
|
|
19
28
|
/**
|
|
20
29
|
* Возвращает список доступных фильтров продуктов в категории.
|
|
@@ -23,14 +32,23 @@ export class ScCatalogFilterService {
|
|
|
23
32
|
* @param recursively Признак того, что необходимо вернуть фильтры с учетом вложенных категорий.
|
|
24
33
|
*/
|
|
25
34
|
getFilters$(categoryIdOrSlug, recursively) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
35
|
+
const key = `${categoryIdOrSlug}:${recursively ?? ''}`;
|
|
36
|
+
let cachedItem = this.filterMap.get(key);
|
|
37
|
+
if (!cachedItem) {
|
|
38
|
+
let params = new HttpParams();
|
|
39
|
+
if (recursively !== undefined) {
|
|
40
|
+
params = params.set('recursively', String(recursively));
|
|
41
|
+
}
|
|
42
|
+
cachedItem = new ScCachedItem(this.cacheLifeTime.categoryData, this.http.get(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/filters`, {
|
|
43
|
+
params,
|
|
44
|
+
context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,
|
|
45
|
+
}));
|
|
46
|
+
this.filterMap.set(key, cachedItem);
|
|
47
|
+
}
|
|
48
|
+
if (!cachedItem.cachedDataIsActual()) {
|
|
49
|
+
cachedItem.update();
|
|
29
50
|
}
|
|
30
|
-
return
|
|
31
|
-
params,
|
|
32
|
-
context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,
|
|
33
|
-
});
|
|
51
|
+
return cachedItem.item$;
|
|
34
52
|
}
|
|
35
53
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogFilterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
36
54
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogFilterService, providedIn: 'root' }); }
|
|
@@ -41,4 +59,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
41
59
|
providedIn: 'root',
|
|
42
60
|
}]
|
|
43
61
|
}] });
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0YWxvZy1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY2F0YWxvZy9zZXJ2aWNlcy9zYy1jYXRhbG9nLWZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLHFDQUFxQyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNqRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7O0FBR3pEOztHQUVHO0FBSUgsTUFBTSxPQUFPLHNCQUFzQjtJQUhuQztRQUlJOztXQUVHO1FBQ2MsU0FBSSxHQUFZLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVqRDs7V0FFRztRQUNjLFNBQUksR0FBZSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFdkQ7O1dBRUc7UUFDYyxrQkFBYSxHQUFxQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUU3RTs7V0FFRztRQUNjLGNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBMkMsQ0FBQztLQW9DbkY7SUFsQ0c7Ozs7O09BS0c7SUFDSSxXQUFXLENBQUMsZ0JBQWlDLEVBQUUsV0FBcUI7UUFDdkUsTUFBTSxHQUFHLEdBQUcsR0FBRyxnQkFBZ0IsSUFBSSxXQUFXLElBQUksRUFBRSxFQUFFLENBQUM7UUFDdkQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFekMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ2QsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUU5QixJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDNUIsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxFQUFFLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFFRCxVQUFVLEdBQUcsSUFBSSxZQUFZLENBQ3pCLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxFQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBb0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sdUJBQXVCLGdCQUFnQixVQUFVLEVBQUU7Z0JBQ25HLE1BQU07Z0JBQ04sT0FBTyxFQUFFLHFDQUFxQzthQUNqRCxDQUFDLENBQ0wsQ0FBQztZQUVGLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLENBQUM7WUFDbkMsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hCLENBQUM7UUFFRCxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUM7SUFDNUIsQ0FBQzsrR0F0RFEsc0JBQXNCO21IQUF0QixzQkFBc0IsY0FGbkIsTUFBTTs7NEZBRVQsc0JBQXNCO2tCQUhsQyxVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEh0dHBDbGllbnQsIEh0dHBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgU2NJQ2FjaGVMaWZldGltZSwgU2NJVXJscyB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XG5pbXBvcnQgeyBTQ19DQUNIRV9MSUZFVElNRSwgU0NfSVNfSElEREVOX0VSUk9SX0FMRVJUX0hUVFBfQ09OVEVYVCwgU0NfVVJMUyB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBTY0NhY2hlZEl0ZW0gfSBmcm9tICcuLi9jbGFzc2VzL3NjLWNhY2hlZC1pdGVtJztcbmltcG9ydCB7IFNjQ2F0YWxvZ0ZpbHRlciB9IGZyb20gJy4uL2ludGVyZmFjZXMvc2MtY2F0YWxvZy1maWx0ZXInO1xuXG4vKipcbiAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINGE0LjQu9GM0YLRgNCw0LzQuCDQutCw0YLQsNC70L7Qs9CwLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY0NhdGFsb2dGaWx0ZXJTZXJ2aWNlIHtcbiAgICAvKipcbiAgICAgKiBBUEkgVVJMINC00LvRjyDRgNCw0LHQvtGC0Ysg0YEg0LrQsNGC0LDQu9C+0LPQvtC8LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXJsczogU2NJVXJscyA9IGluamVjdChTQ19VUkxTKTtcblxuICAgIC8qKlxuICAgICAqIEhUVFAg0LrQu9C40LXQvdGCINC00LvRjyDQstGL0L/QvtC70L3QtdC90LjRjyDQt9Cw0L/RgNC+0YHQvtCyLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCA9IGluamVjdChIdHRwQ2xpZW50KTtcblxuICAgIC8qKlxuICAgICAqINCS0YDQtdC80Y8g0LbQuNC30L3QuCDQutGN0YjQsCDRhNC40LvRjNGC0YDQvtCyLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FjaGVMaWZlVGltZTogU2NJQ2FjaGVMaWZldGltZSA9IGluamVjdChTQ19DQUNIRV9MSUZFVElNRSk7XG5cbiAgICAvKipcbiAgICAgKiDQmtGN0Ygg0YTQuNC70YzRgtGA0L7QsiDQv9C+INC60LvRjtGH0YMgYGNhdGVnb3J5SWRPclNsdWc6cmVjdXJzaXZlbHlgLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlsdGVyTWFwID0gbmV3IE1hcDxzdHJpbmcsIFNjQ2FjaGVkSXRlbTxTY0NhdGFsb2dGaWx0ZXJbXT4+KCk7XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgdC/0LjRgdC+0Log0LTQvtGB0YLRg9C/0L3Ri9GFINGE0LjQu9GM0YLRgNC+0LIg0L/RgNC+0LTRg9C60YLQvtCyINCyINC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeUlkT3JTbHVnINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCBzbHVnINC60LDRgtC10LPQvtGA0LjQuCDRgtC+0LLQsNGA0L7Qsi5cbiAgICAgKiBAcGFyYW0gcmVjdXJzaXZlbHkg0J/RgNC40LfQvdCw0Log0YLQvtCz0L4sINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQstC10YDQvdGD0YLRjCDRhNC40LvRjNGC0YDRiyDRgSDRg9GH0LXRgtC+0Lwg0LLQu9C+0LbQtdC90L3Ri9GFINC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RmlsdGVycyQoY2F0ZWdvcnlJZE9yU2x1Zzogc3RyaW5nIHwgbnVtYmVyLCByZWN1cnNpdmVseT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPFNjQ2F0YWxvZ0ZpbHRlcltdIHwgbnVsbD4ge1xuICAgICAgICBjb25zdCBrZXkgPSBgJHtjYXRlZ29yeUlkT3JTbHVnfToke3JlY3Vyc2l2ZWx5ID8/ICcnfWA7XG4gICAgICAgIGxldCBjYWNoZWRJdGVtID0gdGhpcy5maWx0ZXJNYXAuZ2V0KGtleSk7XG5cbiAgICAgICAgaWYgKCFjYWNoZWRJdGVtKSB7XG4gICAgICAgICAgICBsZXQgcGFyYW1zID0gbmV3IEh0dHBQYXJhbXMoKTtcblxuICAgICAgICAgICAgaWYgKHJlY3Vyc2l2ZWx5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdyZWN1cnNpdmVseScsIFN0cmluZyhyZWN1cnNpdmVseSkpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjYWNoZWRJdGVtID0gbmV3IFNjQ2FjaGVkSXRlbTxTY0NhdGFsb2dGaWx0ZXJbXT4oXG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZUxpZmVUaW1lLmNhdGVnb3J5RGF0YSxcbiAgICAgICAgICAgICAgICB0aGlzLmh0dHAuZ2V0PFNjQ2F0YWxvZ0ZpbHRlcltdPihgJHt0aGlzLnVybHMuYXBpVXJsfS9jYXRhbG9nL2NhdGVnb3JpZXMvJHtjYXRlZ29yeUlkT3JTbHVnfS9maWx0ZXJzYCwge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IFNDX0lTX0hJRERFTl9FUlJPUl9BTEVSVF9IVFRQX0NPTlRFWFQsXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIHRoaXMuZmlsdGVyTWFwLnNldChrZXksIGNhY2hlZEl0ZW0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjYWNoZWRJdGVtLmNhY2hlZERhdGFJc0FjdHVhbCgpKSB7XG4gICAgICAgICAgICBjYWNoZWRJdGVtLnVwZGF0ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNhY2hlZEl0ZW0uaXRlbSQ7XG4gICAgfVxufVxuIl19
|
|
@@ -1,52 +1,33 @@
|
|
|
1
|
-
import { Inject, Injectable } from '@angular/core';
|
|
2
|
-
import { SC_LINEAR_VALUES_TOKEN } from '../tokens';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
1
|
/**
|
|
5
|
-
*
|
|
2
|
+
* Класс-помощник для работы со значениями единиц измерения товара.
|
|
6
3
|
*/
|
|
7
4
|
export class ScUnitsHelper {
|
|
8
5
|
/**
|
|
9
|
-
*
|
|
6
|
+
* Возвращает признак, что указанный товар имеет линейную единицу измерения.
|
|
10
7
|
*
|
|
11
|
-
* @param
|
|
8
|
+
* @param product Данные о товаре для которого нужно проверить линейность его единицы измерения.
|
|
12
9
|
*/
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
static productIsMeasurable(product) {
|
|
11
|
+
return product.unit.isLinear || product.unit.isSquare;
|
|
15
12
|
}
|
|
16
13
|
/**
|
|
17
|
-
* Возвращает
|
|
14
|
+
* Возвращает кратность количества для указанного товара.
|
|
18
15
|
*
|
|
19
|
-
* @param product
|
|
16
|
+
* @param product Данные о товаре для которого необходимо вернуть кратность количества.
|
|
20
17
|
*/
|
|
21
|
-
|
|
22
|
-
return
|
|
18
|
+
static getProductMultiplicity(product) {
|
|
19
|
+
return !product.properties?.ignoreMinCountCheck && product.minCount && !ScUnitsHelper.productIsMeasurable(product) ? product.minCount : 1;
|
|
23
20
|
}
|
|
24
21
|
/**
|
|
25
|
-
* Возвращает кратность
|
|
22
|
+
* Возвращает кратность длины для указанного товара.
|
|
26
23
|
*
|
|
27
|
-
* @param product
|
|
24
|
+
* @param product Данные о товаре для которого необходимо вернуть кратность длины.
|
|
28
25
|
*/
|
|
29
|
-
|
|
30
|
-
|
|
26
|
+
static getProductLengthMultiplicity(product) {
|
|
27
|
+
if (product.properties?.lengthStep) {
|
|
28
|
+
return product.properties.lengthStep;
|
|
29
|
+
}
|
|
30
|
+
return !product.properties?.ignoreMinCountCheck && product.minCount ? product.minCount : 0.01;
|
|
31
31
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Возвращает значение кратности, для проверки кратности количества товара.
|
|
34
|
-
*
|
|
35
|
-
* @param product Товар для которого нужно вернуть значение кратность.
|
|
36
|
-
*/
|
|
37
|
-
productStepForValidator(product) {
|
|
38
|
-
return product.ignoreMinCountCheck ? 1 : this.productMultiplicity(product);
|
|
39
|
-
}
|
|
40
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUnitsHelper, deps: [{ token: SC_LINEAR_VALUES_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
41
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUnitsHelper, providedIn: 'root' }); }
|
|
42
32
|
}
|
|
43
|
-
|
|
44
|
-
type: Injectable,
|
|
45
|
-
args: [{
|
|
46
|
-
providedIn: 'root',
|
|
47
|
-
}]
|
|
48
|
-
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
49
|
-
type: Inject,
|
|
50
|
-
args: [SC_LINEAR_VALUES_TOKEN]
|
|
51
|
-
}] }] });
|
|
52
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtdW5pdHMtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9oZWxwZXJzL3NjLXVuaXRzLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBRW5EOztHQUVHO0FBSUgsTUFBTSxPQUFPLGFBQWE7SUFDdEI7Ozs7T0FJRztJQUNILFlBQW1FLFlBQXNCO1FBQXRCLGlCQUFZLEdBQVosWUFBWSxDQUFVO0lBQUcsQ0FBQztJQUU3Rjs7OztPQUlHO0lBQ0ksbUJBQW1CLENBQUMsT0FBa0I7UUFDekMsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3pELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksbUJBQW1CLENBQUMsT0FBa0I7UUFDekMsT0FBTyxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksdUJBQXVCLENBQUMsT0FBa0I7UUFDN0MsT0FBTyxPQUFPLENBQUMsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQy9FLENBQUM7K0dBakNRLGFBQWEsa0JBTUssc0JBQXNCO21IQU54QyxhQUFhLGNBRlYsTUFBTTs7NEZBRVQsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQU91QixNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTY1Byb2R1Y3QgfSBmcm9tICcuLi9jYXRhbG9nL2R0by9zYy1wcm9kdWN0JztcbmltcG9ydCB7IFNDX0xJTkVBUl9WQUxVRVNfVE9LRU4gfSBmcm9tICcuLi90b2tlbnMnO1xuXG4vKipcbiAqINCa0LvQsNGBLdC/0L7QvNC+0YnQvdC40Log0LTQu9GPINGA0LDQsdC+0YLRiyDRgdC+INC30L3QsNGH0LXQvdC40Y/QvNC4INC10LTQuNC90LjRhiDQuNC30LzQtdGA0LXQvdC40Y8g0YLQvtCy0LDRgNCwLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY1VuaXRzSGVscGVyIHtcbiAgICAvKipcbiAgICAgKiDQmNC90LjRhtC40LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY1VuaXRzSGVscGVyfS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBsaW5lYXJWYWx1ZXMg0JXQtNC40L3QuNGG0Ysg0LjQt9C80LXRgNC10L3QuNGPINC70LjQvdC10LnQvdC+0Lkg0LLQtdC70LjRh9C40L3Riy5cbiAgICAgKi9cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoQEluamVjdChTQ19MSU5FQVJfVkFMVUVTX1RPS0VOKSBwdWJsaWMgcmVhZG9ubHkgbGluZWFyVmFsdWVzOiBzdHJpbmdbXSkge31cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0YDQuNC30L3QsNC6INCy0L7Qt9C80L7QttC90L7RgdGC0Lgg0L/RgNC+0LTQsNC20Lgg0YLQvtCy0LDRgNCwINC90LAg0LzQtdGC0YDQsNC2LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3Qg0KLQvtCy0LDRgCDQtNC70Y8g0LrQvtGC0L7RgNC+0LPQviDQvdGD0LbQvdC+INC/0YDQvtCy0LXRgNC40YLRjCDQstC+0LfQvNC+0LbQvdC+0YHRgtGMINC/0YDQvtC00LDQttC4INC90LAg0LzQtdGC0YDQsNC2LlxuICAgICAqL1xuICAgIHB1YmxpYyBwcm9kdWN0SXNNZWFzdXJhYmxlKHByb2R1Y3Q6IFNjUHJvZHVjdCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5saW5lYXJWYWx1ZXMuaW5jbHVkZXMocHJvZHVjdC51bml0Lm5hbWUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC60YDQsNGC0L3QvtGB0YLRjCDQutC+0LvQuNGH0LXRgdGC0LLQsCDQtNC70Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3Qg0KLQvtCy0LDRgCDQtNC70Y8g0LrQvtGC0L7RgNC+0LPQviDQvdGD0LbQvdC+INCy0LXRgNC90YPRgtGMINC60YDQsNGC0L3QvtGB0YLRjCDQutC+0LvQuNGH0LXRgdGC0LLQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcHJvZHVjdE11bHRpcGxpY2l0eShwcm9kdWN0OiBTY1Byb2R1Y3QpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gcHJvZHVjdC5taW5Db3VudCAmJiAhdGhpcy5saW5lYXJWYWx1ZXMuaW5jbHVkZXMocHJvZHVjdC51bml0Lm5hbWUpID8gcHJvZHVjdC5taW5Db3VudCA6IDE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0LfQvdCw0YfQtdC90LjQtSDQutGA0LDRgtC90L7RgdGC0LgsINC00LvRjyDQv9GA0L7QstC10YDQutC4INC60YDQsNGC0L3QvtGB0YLQuCDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdCDQotC+0LLQsNGAINC00LvRjyDQutC+0YLQvtGA0L7Qs9C+INC90YPQttC90L4g0LLQtdGA0L3Rg9GC0Ywg0LfQvdCw0YfQtdC90LjQtSDQutGA0LDRgtC90L7RgdGC0YwuXG4gICAgICovXG4gICAgcHVibGljIHByb2R1Y3RTdGVwRm9yVmFsaWRhdG9yKHByb2R1Y3Q6IFNjUHJvZHVjdCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiBwcm9kdWN0Lmlnbm9yZU1pbkNvdW50Q2hlY2sgPyAxIDogdGhpcy5wcm9kdWN0TXVsdGlwbGljaXR5KHByb2R1Y3QpO1xuICAgIH1cbn1cbiJdfQ==
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtdW5pdHMtaGVscGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9oZWxwZXJzL3NjLXVuaXRzLWhlbHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBQ3RCOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBa0I7UUFDaEQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxPQUFrQjtRQUNuRCxPQUFPLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUksQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsNEJBQTRCLENBQUMsT0FBa0I7UUFDekQsSUFBSSxPQUFPLENBQUMsVUFBVSxFQUFFLFVBQVUsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7UUFDekMsQ0FBQztRQUVELE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLG1CQUFtQixJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNsRyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY1Byb2R1Y3QgfSBmcm9tICcuLi9jYXRhbG9nL2R0by9zYy1wcm9kdWN0JztcblxuLyoqXG4gKiDQmtC70LDRgdGBLdC/0L7QvNC+0YnQvdC40Log0LTQu9GPINGA0LDQsdC+0YLRiyDRgdC+INC30L3QsNGH0LXQvdC40Y/QvNC4INC10LTQuNC90LjRhiDQuNC30LzQtdGA0LXQvdC40Y8g0YLQvtCy0LDRgNCwLlxuICovXG5leHBvcnQgY2xhc3MgU2NVbml0c0hlbHBlciB7XG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0L/RgNC40LfQvdCw0LosINGH0YLQviDRg9C60LDQt9Cw0L3QvdGL0Lkg0YLQvtCy0LDRgCDQuNC80LXQtdGCINC70LjQvdC10LnQvdGD0Y4g0LXQtNC40L3QuNGG0YMg0LjQt9C80LXRgNC10L3QuNGPLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3Qg0JTQsNC90L3Ri9C1INC+INGC0L7QstCw0YDQtSDQtNC70Y8g0LrQvtGC0L7RgNC+0LPQviDQvdGD0LbQvdC+INC/0YDQvtCy0LXRgNC40YLRjCDQu9C40L3QtdC50L3QvtGB0YLRjCDQtdCz0L4g0LXQtNC40L3QuNGG0Ysg0LjQt9C80LXRgNC10L3QuNGPLlxuICAgICAqL1xuICAgIHB1YmxpYyBzdGF0aWMgcHJvZHVjdElzTWVhc3VyYWJsZShwcm9kdWN0OiBTY1Byb2R1Y3QpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHByb2R1Y3QudW5pdC5pc0xpbmVhciB8fCBwcm9kdWN0LnVuaXQuaXNTcXVhcmU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0LrRgNCw0YLQvdC+0YHRgtGMINC60L7Qu9C40YfQtdGB0YLQstCwINC00LvRjyDRg9C60LDQt9Cw0L3QvdC+0LPQviDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdCDQlNCw0L3QvdGL0LUg0L4g0YLQvtCy0LDRgNC1INC00LvRjyDQutC+0YLQvtGA0L7Qs9C+INC90LXQvtCx0YXQvtC00LjQvNC+INCy0LXRgNC90YPRgtGMINC60YDQsNGC0L3QvtGB0YLRjCDQutC+0LvQuNGH0LXRgdGC0LLQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIGdldFByb2R1Y3RNdWx0aXBsaWNpdHkocHJvZHVjdDogU2NQcm9kdWN0KTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuICFwcm9kdWN0LnByb3BlcnRpZXM/Lmlnbm9yZU1pbkNvdW50Q2hlY2sgJiYgcHJvZHVjdC5taW5Db3VudCAmJiAhU2NVbml0c0hlbHBlci5wcm9kdWN0SXNNZWFzdXJhYmxlKHByb2R1Y3QpID8gcHJvZHVjdC5taW5Db3VudCA6IDE7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0LrRgNCw0YLQvdC+0YHRgtGMINC00LvQuNC90Ysg0LTQu9GPINGD0LrQsNC30LDQvdC90L7Qs9C+INGC0L7QstCw0YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0INCU0LDQvdC90YvQtSDQviDRgtC+0LLQsNGA0LUg0LTQu9GPINC60L7RgtC+0YDQvtCz0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0LLQtdGA0L3Rg9GC0Ywg0LrRgNCw0YLQvdC+0YHRgtGMINC00LvQuNC90YsuXG4gICAgICovXG4gICAgcHVibGljIHN0YXRpYyBnZXRQcm9kdWN0TGVuZ3RoTXVsdGlwbGljaXR5KHByb2R1Y3Q6IFNjUHJvZHVjdCk6IG51bWJlciB7XG4gICAgICAgIGlmIChwcm9kdWN0LnByb3BlcnRpZXM/Lmxlbmd0aFN0ZXApIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9kdWN0LnByb3BlcnRpZXMubGVuZ3RoU3RlcDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhcHJvZHVjdC5wcm9wZXJ0aWVzPy5pZ25vcmVNaW5Db3VudENoZWNrICYmIHByb2R1Y3QubWluQ291bnQgPyBwcm9kdWN0Lm1pbkNvdW50IDogMC4wMTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -3123,6 +3123,14 @@ class ScCatalogFilterService {
|
|
|
3123
3123
|
* HTTP клиент для выполнения запросов.
|
|
3124
3124
|
*/
|
|
3125
3125
|
this.http = inject(HttpClient);
|
|
3126
|
+
/**
|
|
3127
|
+
* Время жизни кэша фильтров.
|
|
3128
|
+
*/
|
|
3129
|
+
this.cacheLifeTime = inject(SC_CACHE_LIFETIME);
|
|
3130
|
+
/**
|
|
3131
|
+
* Кэш фильтров по ключу `categoryIdOrSlug:recursively`.
|
|
3132
|
+
*/
|
|
3133
|
+
this.filterMap = new Map();
|
|
3126
3134
|
}
|
|
3127
3135
|
/**
|
|
3128
3136
|
* Возвращает список доступных фильтров продуктов в категории.
|
|
@@ -3131,14 +3139,23 @@ class ScCatalogFilterService {
|
|
|
3131
3139
|
* @param recursively Признак того, что необходимо вернуть фильтры с учетом вложенных категорий.
|
|
3132
3140
|
*/
|
|
3133
3141
|
getFilters$(categoryIdOrSlug, recursively) {
|
|
3134
|
-
|
|
3135
|
-
|
|
3136
|
-
|
|
3142
|
+
const key = `${categoryIdOrSlug}:${recursively ?? ''}`;
|
|
3143
|
+
let cachedItem = this.filterMap.get(key);
|
|
3144
|
+
if (!cachedItem) {
|
|
3145
|
+
let params = new HttpParams();
|
|
3146
|
+
if (recursively !== undefined) {
|
|
3147
|
+
params = params.set('recursively', String(recursively));
|
|
3148
|
+
}
|
|
3149
|
+
cachedItem = new ScCachedItem(this.cacheLifeTime.categoryData, this.http.get(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/filters`, {
|
|
3150
|
+
params,
|
|
3151
|
+
context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,
|
|
3152
|
+
}));
|
|
3153
|
+
this.filterMap.set(key, cachedItem);
|
|
3137
3154
|
}
|
|
3138
|
-
|
|
3139
|
-
|
|
3140
|
-
|
|
3141
|
-
|
|
3155
|
+
if (!cachedItem.cachedDataIsActual()) {
|
|
3156
|
+
cachedItem.update();
|
|
3157
|
+
}
|
|
3158
|
+
return cachedItem.item$;
|
|
3142
3159
|
}
|
|
3143
3160
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogFilterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3144
3161
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogFilterService, providedIn: 'root' }); }
|
|
@@ -4269,53 +4286,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
4269
4286
|
}] });
|
|
4270
4287
|
|
|
4271
4288
|
/**
|
|
4272
|
-
*
|
|
4289
|
+
* Класс-помощник для работы со значениями единиц измерения товара.
|
|
4273
4290
|
*/
|
|
4274
4291
|
class ScUnitsHelper {
|
|
4275
4292
|
/**
|
|
4276
|
-
*
|
|
4293
|
+
* Возвращает признак, что указанный товар имеет линейную единицу измерения.
|
|
4277
4294
|
*
|
|
4278
|
-
* @param
|
|
4295
|
+
* @param product Данные о товаре для которого нужно проверить линейность его единицы измерения.
|
|
4279
4296
|
*/
|
|
4280
|
-
|
|
4281
|
-
|
|
4297
|
+
static productIsMeasurable(product) {
|
|
4298
|
+
return product.unit.isLinear || product.unit.isSquare;
|
|
4282
4299
|
}
|
|
4283
4300
|
/**
|
|
4284
|
-
* Возвращает
|
|
4301
|
+
* Возвращает кратность количества для указанного товара.
|
|
4285
4302
|
*
|
|
4286
|
-
* @param product
|
|
4303
|
+
* @param product Данные о товаре для которого необходимо вернуть кратность количества.
|
|
4287
4304
|
*/
|
|
4288
|
-
|
|
4289
|
-
return
|
|
4305
|
+
static getProductMultiplicity(product) {
|
|
4306
|
+
return !product.properties?.ignoreMinCountCheck && product.minCount && !ScUnitsHelper.productIsMeasurable(product) ? product.minCount : 1;
|
|
4290
4307
|
}
|
|
4291
4308
|
/**
|
|
4292
|
-
* Возвращает кратность
|
|
4309
|
+
* Возвращает кратность длины для указанного товара.
|
|
4293
4310
|
*
|
|
4294
|
-
* @param product
|
|
4311
|
+
* @param product Данные о товаре для которого необходимо вернуть кратность длины.
|
|
4295
4312
|
*/
|
|
4296
|
-
|
|
4297
|
-
|
|
4298
|
-
|
|
4299
|
-
|
|
4300
|
-
|
|
4301
|
-
*
|
|
4302
|
-
* @param product Товар для которого нужно вернуть значение кратность.
|
|
4303
|
-
*/
|
|
4304
|
-
productStepForValidator(product) {
|
|
4305
|
-
return product.ignoreMinCountCheck ? 1 : this.productMultiplicity(product);
|
|
4313
|
+
static getProductLengthMultiplicity(product) {
|
|
4314
|
+
if (product.properties?.lengthStep) {
|
|
4315
|
+
return product.properties.lengthStep;
|
|
4316
|
+
}
|
|
4317
|
+
return !product.properties?.ignoreMinCountCheck && product.minCount ? product.minCount : 0.01;
|
|
4306
4318
|
}
|
|
4307
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUnitsHelper, deps: [{ token: SC_LINEAR_VALUES_TOKEN }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
4308
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUnitsHelper, providedIn: 'root' }); }
|
|
4309
4319
|
}
|
|
4310
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUnitsHelper, decorators: [{
|
|
4311
|
-
type: Injectable,
|
|
4312
|
-
args: [{
|
|
4313
|
-
providedIn: 'root',
|
|
4314
|
-
}]
|
|
4315
|
-
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
4316
|
-
type: Inject,
|
|
4317
|
-
args: [SC_LINEAR_VALUES_TOKEN]
|
|
4318
|
-
}] }] });
|
|
4319
4320
|
|
|
4320
4321
|
/**
|
|
4321
4322
|
* Возвращает текущий маршрут.
|