@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.
@@ -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
- let params = new HttpParams();
27
- if (recursively !== undefined) {
28
- params = params.set('recursively', String(recursively));
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 this.http.get(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/filters`, {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2F0YWxvZy1maWx0ZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvY2F0YWxvZy9zZXJ2aWNlcy9zYy1jYXRhbG9nLWZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFJbkQsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE9BQU8sRUFBRSxNQUFNLGNBQWMsQ0FBQzs7QUFHOUU7O0dBRUc7QUFJSCxNQUFNLE9BQU8sc0JBQXNCO0lBSG5DO1FBSUk7O1dBRUc7UUFDYyxTQUFJLEdBQVksTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWpEOztXQUVHO1FBQ2MsU0FBSSxHQUFlLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztLQW9CMUQ7SUFsQkc7Ozs7O09BS0c7SUFDSSxXQUFXLENBQUMsZ0JBQWlDLEVBQUUsV0FBcUI7UUFDdkUsSUFBSSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUU5QixJQUFJLFdBQVcsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUM1QixNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQW9CLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLHVCQUF1QixnQkFBZ0IsVUFBVSxFQUFFO1lBQzFHLE1BQU07WUFDTixPQUFPLEVBQUUscUNBQXFDO1NBQ2pELENBQUMsQ0FBQztJQUNQLENBQUM7K0dBNUJRLHNCQUFzQjttSEFBdEIsc0JBQXNCLGNBRm5CLE1BQU07OzRGQUVULHNCQUFzQjtrQkFIbEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwUGFyYW1zIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IFNjSVVybHMgfSBmcm9tICcuLi8uLi9jb25maWcnO1xuaW1wb3J0IHsgU0NfSVNfSElEREVOX0VSUk9SX0FMRVJUX0hUVFBfQ09OVEVYVCwgU0NfVVJMUyB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBTY0NhdGFsb2dGaWx0ZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NjLWNhdGFsb2ctZmlsdGVyJztcblxuLyoqXG4gKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDRhNC40LvRjNGC0YDQsNC80Lgg0LrQsNGC0LDQu9C+0LPQsC5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NDYXRhbG9nRmlsdGVyU2VydmljZSB7XG4gICAgLyoqXG4gICAgICogQVBJIFVSTCDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC60LDRgtCw0LvQvtCz0L7QvC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVybHM6IFNjSVVybHMgPSBpbmplY3QoU0NfVVJMUyk7XG5cbiAgICAvKipcbiAgICAgKiBIVFRQINC60LvQuNC10L3RgiDQtNC70Y8g0LLRi9C/0L7Qu9C90LXQvdC40Y8g0LfQsNC/0YDQvtGB0L7Qsi5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQgPSBpbmplY3QoSHR0cENsaWVudCk7XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgdC/0LjRgdC+0Log0LTQvtGB0YLRg9C/0L3Ri9GFINGE0LjQu9GM0YLRgNC+0LIg0L/RgNC+0LTRg9C60YLQvtCyINCyINC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeUlkT3JTbHVnINCY0LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCBzbHVnINC60LDRgtC10LPQvtGA0LjQuCDRgtC+0LLQsNGA0L7Qsi5cbiAgICAgKiBAcGFyYW0gcmVjdXJzaXZlbHkg0J/RgNC40LfQvdCw0Log0YLQvtCz0L4sINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQstC10YDQvdGD0YLRjCDRhNC40LvRjNGC0YDRiyDRgSDRg9GH0LXRgtC+0Lwg0LLQu9C+0LbQtdC90L3Ri9GFINC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2V0RmlsdGVycyQoY2F0ZWdvcnlJZE9yU2x1Zzogc3RyaW5nIHwgbnVtYmVyLCByZWN1cnNpdmVseT86IGJvb2xlYW4pOiBPYnNlcnZhYmxlPFNjQ2F0YWxvZ0ZpbHRlcltdPiB7XG4gICAgICAgIGxldCBwYXJhbXMgPSBuZXcgSHR0cFBhcmFtcygpO1xuXG4gICAgICAgIGlmIChyZWN1cnNpdmVseSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBwYXJhbXMgPSBwYXJhbXMuc2V0KCdyZWN1cnNpdmVseScsIFN0cmluZyhyZWN1cnNpdmVseSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQ8U2NDYXRhbG9nRmlsdGVyW10+KGAke3RoaXMudXJscy5hcGlVcmx9L2NhdGFsb2cvY2F0ZWdvcmllcy8ke2NhdGVnb3J5SWRPclNsdWd9L2ZpbHRlcnNgLCB7XG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBjb250ZXh0OiBTQ19JU19ISURERU5fRVJST1JfQUxFUlRfSFRUUF9DT05URVhULFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
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
- * Инициирует экземпляр класса {@link ScUnitsHelper}.
6
+ * Возвращает признак, что указанный товар имеет линейную единицу измерения.
10
7
  *
11
- * @param linearValues Единицы измерения линейной величины.
8
+ * @param product Данные о товаре для которого нужно проверить линейность его единицы измерения.
12
9
  */
13
- constructor(linearValues) {
14
- this.linearValues = linearValues;
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
- productIsMeasurable(product) {
22
- return this.linearValues.includes(product.unit.name);
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
- productMultiplicity(product) {
30
- return product.minCount && !this.linearValues.includes(product.unit.name) ? product.minCount : 1;
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
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScUnitsHelper, decorators: [{
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
- let params = new HttpParams();
3143
- if (recursively !== undefined) {
3144
- params = params.set('recursively', String(recursively));
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
- return this.http.get(`${this.urls.apiUrl}/catalog/categories/${categoryIdOrSlug}/filters`, {
3147
- params,
3148
- context: SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT,
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
- * Инициирует экземпляр класса {@link ScUnitsHelper}.
4301
+ * Возвращает признак, что указанный товар имеет линейную единицу измерения.
4285
4302
  *
4286
- * @param linearValues Единицы измерения линейной величины.
4303
+ * @param product Данные о товаре для которого нужно проверить линейность его единицы измерения.
4287
4304
  */
4288
- constructor(linearValues) {
4289
- this.linearValues = linearValues;
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
- productIsMeasurable(product) {
4297
- return this.linearValues.includes(product.unit.name);
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
- productMultiplicity(product) {
4305
- return product.minCount && !this.linearValues.includes(product.unit.name) ? product.minCount : 1;
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
  * Возвращает текущий маршрут.