@snabcentr/client-core 2.66.18 → 2.66.20
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=
|
|
@@ -3131,6 +3131,14 @@ class ScCatalogFilterService {
|
|
|
3131
3131
|
* HTTP клиент для выполнения запросов.
|
|
3132
3132
|
*/
|
|
3133
3133
|
this.http = inject(HttpClient);
|
|
3134
|
+
/**
|
|
3135
|
+
* Время жизни кэша фильтров.
|
|
3136
|
+
*/
|
|
3137
|
+
this.cacheLifeTime = inject(SC_CACHE_LIFETIME);
|
|
3138
|
+
/**
|
|
3139
|
+
* Кэш фильтров по ключу `categoryIdOrSlug:recursively`.
|
|
3140
|
+
*/
|
|
3141
|
+
this.filterMap = new Map();
|
|
3134
3142
|
}
|
|
3135
3143
|
/**
|
|
3136
3144
|
* Возвращает список доступных фильтров продуктов в категории.
|
|
@@ -3139,14 +3147,23 @@ class ScCatalogFilterService {
|
|
|
3139
3147
|
* @param recursively Признак того, что необходимо вернуть фильтры с учетом вложенных категорий.
|
|
3140
3148
|
*/
|
|
3141
3149
|
getFilters$(categoryIdOrSlug, recursively) {
|
|
3142
|
-
|
|
3143
|
-
|
|
3144
|
-
|
|
3150
|
+
const key = `${categoryIdOrSlug}:${recursively ?? ''}`;
|
|
3151
|
+
let cachedItem = this.filterMap.get(key);
|
|
3152
|
+
if (!cachedItem) {
|
|
3153
|
+
let params = new HttpParams();
|
|
3154
|
+
if (recursively !== undefined) {
|
|
3155
|
+
params = params.set('recursively', String(recursively));
|
|
3156
|
+
}
|
|
3157
|
+
cachedItem = new ScCachedItem(this.cacheLifeTime.categoryData, this.http.get(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/filters`, {
|
|
3158
|
+
params,
|
|
3159
|
+
context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,
|
|
3160
|
+
}));
|
|
3161
|
+
this.filterMap.set(key, cachedItem);
|
|
3145
3162
|
}
|
|
3146
|
-
|
|
3147
|
-
|
|
3148
|
-
|
|
3149
|
-
|
|
3163
|
+
if (!cachedItem.cachedDataIsActual()) {
|
|
3164
|
+
cachedItem.update();
|
|
3165
|
+
}
|
|
3166
|
+
return cachedItem.item$;
|
|
3150
3167
|
}
|
|
3151
3168
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogFilterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
3152
3169
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScCatalogFilterService, providedIn: 'root' }); }
|
|
@@ -4277,53 +4294,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
4277
4294
|
}] });
|
|
4278
4295
|
|
|
4279
4296
|
/**
|
|
4280
|
-
*
|
|
4297
|
+
* Класс-помощник для работы со значениями единиц измерения товара.
|
|
4281
4298
|
*/
|
|
4282
4299
|
class ScUnitsHelper {
|
|
4283
4300
|
/**
|
|
4284
|
-
*
|
|
4301
|
+
* Возвращает признак, что указанный товар имеет линейную единицу измерения.
|
|
4285
4302
|
*
|
|
4286
|
-
* @param
|
|
4303
|
+
* @param product Данные о товаре для которого нужно проверить линейность его единицы измерения.
|
|
4287
4304
|
*/
|
|
4288
|
-
|
|
4289
|
-
|
|
4305
|
+
static productIsMeasurable(product) {
|
|
4306
|
+
return product.unit.isLinear || product.unit.isSquare;
|
|
4290
4307
|
}
|
|
4291
4308
|
/**
|
|
4292
|
-
* Возвращает
|
|
4309
|
+
* Возвращает кратность количества для указанного товара.
|
|
4293
4310
|
*
|
|
4294
|
-
* @param product
|
|
4311
|
+
* @param product Данные о товаре для которого необходимо вернуть кратность количества.
|
|
4295
4312
|
*/
|
|
4296
|
-
|
|
4297
|
-
return
|
|
4313
|
+
static getProductMultiplicity(product) {
|
|
4314
|
+
return !product.properties?.ignoreMinCountCheck && product.minCount && !ScUnitsHelper.productIsMeasurable(product) ? product.minCount : 1;
|
|
4298
4315
|
}
|
|
4299
4316
|
/**
|
|
4300
|
-
* Возвращает кратность
|
|
4317
|
+
* Возвращает кратность длины для указанного товара.
|
|
4301
4318
|
*
|
|
4302
|
-
* @param product
|
|
4319
|
+
* @param product Данные о товаре для которого необходимо вернуть кратность длины.
|
|
4303
4320
|
*/
|
|
4304
|
-
|
|
4305
|
-
|
|
4306
|
-
|
|
4307
|
-
|
|
4308
|
-
|
|
4309
|
-
*
|
|
4310
|
-
* @param product Товар для которого нужно вернуть значение кратность.
|
|
4311
|
-
*/
|
|
4312
|
-
productStepForValidator(product) {
|
|
4313
|
-
return product.ignoreMinCountCheck ? 1 : this.productMultiplicity(product);
|
|
4321
|
+
static getProductLengthMultiplicity(product) {
|
|
4322
|
+
if (product.properties?.lengthStep) {
|
|
4323
|
+
return product.properties.lengthStep;
|
|
4324
|
+
}
|
|
4325
|
+
return !product.properties?.ignoreMinCountCheck && product.minCount ? product.minCount : 0.01;
|
|
4314
4326
|
}
|
|
4315
|
-
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 }); }
|
|
4316
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUnitsHelper, providedIn: 'root' }); }
|
|
4317
4327
|
}
|
|
4318
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUnitsHelper, decorators: [{
|
|
4319
|
-
type: Injectable,
|
|
4320
|
-
args: [{
|
|
4321
|
-
providedIn: 'root',
|
|
4322
|
-
}]
|
|
4323
|
-
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
4324
|
-
type: Inject,
|
|
4325
|
-
args: [SC_LINEAR_VALUES_TOKEN]
|
|
4326
|
-
}] }] });
|
|
4327
4328
|
|
|
4328
4329
|
/**
|
|
4329
4330
|
* Возвращает текущий маршрут.
|