@snabcentr/client-core 4.12.0 → 4.14.0

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.
@@ -551,6 +551,11 @@ const SC_PRODUCT_PAGINATION_OPTIONS = new InjectionToken('SC_PRODUCT_PAGINATION_
551
551
  const SC_NEXT_PAGE_PAGINATION_CLICK = new InjectionToken('SC_NEXT_PAGE_PAGINATION_CLICK', {
552
552
  factory: () => new EventEmitter(),
553
553
  });
554
+ /**
555
+ * Токен подключаемого загрузчика страницы товаров для {@link ScPaginationService}.
556
+ * Если не задан, используется загрузчик по умолчанию (`ScCatalogService.getProducts$`).
557
+ */
558
+ const SC_PRODUCTS_PAGINATION_LOADER = new InjectionToken('SC_PRODUCTS_PAGINATION_LOADER');
554
559
 
555
560
  /**
556
561
  * Токен внедрения информации о релизе.
@@ -3449,6 +3454,23 @@ class ScCatalogService {
3449
3454
  return data.map((item, index) => new ScProduct(item, index));
3450
3455
  }));
3451
3456
  }
3457
+ /**
3458
+ * Создает запрос получения списка товаров, созданных за указанный период (с пагинацией).
3459
+ *
3460
+ * @param params Параметры запроса товаров за период.
3461
+ */
3462
+ getNewProducts$(params) {
3463
+ return this.http
3464
+ .get(`${this.urls.apiUrl}/catalog/products/new`, {
3465
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-argument
3466
+ params: this.convertersService.toHttpParams({ ...params }, { nonNullable: true }),
3467
+ })
3468
+ .pipe(map$1((data) => {
3469
+ const cloneData = structuredClone(data);
3470
+ cloneData.data = cloneData.data.map((item) => new ScProduct(item));
3471
+ return cloneData;
3472
+ }));
3473
+ }
3452
3474
  /**
3453
3475
  * Создает запрос получения списка товаров категории и кэширует его.
3454
3476
  *
@@ -4533,10 +4555,14 @@ class ScUnitsHelper {
4533
4555
  /**
4534
4556
  * Возвращает кратность количества для указанного товара.
4535
4557
  *
4558
+ * Кратность равна {@link ScProduct.minCount} и не зависит от {@link ScIProperties.ignoreMinCountCheck}:
4559
+ * этот признак только снимает валидацию кратности/минимума при ручном вводе, но начальное количество
4560
+ * и шаг кнопок +/- остаются кратны minCount.
4561
+ *
4536
4562
  * @param product Данные о товаре для которого необходимо вернуть кратность количества.
4537
4563
  */
4538
4564
  static getProductMultiplicity(product) {
4539
- return !product.properties?.ignoreMinCountCheck && product.minCount && !ScUnitsHelper.productIsMeasurable(product) ? product.minCount : 1;
4565
+ return product.minCount && !ScUnitsHelper.productIsMeasurable(product) ? product.minCount : 1;
4540
4566
  }
4541
4567
  /**
4542
4568
  * Возвращает кратность длины для указанного товара.
@@ -7082,9 +7108,36 @@ class ScOrderDraftsService {
7082
7108
  params: { offer_id: offerId, order_id: order.id },
7083
7109
  });
7084
7110
  });
7085
- this.offerMap.get(offerId)?.update();
7111
+ this.removeOrderedProductsFromCache(offerId, data.items ?? []);
7086
7112
  }));
7087
7113
  }
7114
+ /**
7115
+ * Убирает заказанные позиции из кэша черновика локально (сервер сразу после заказа ещё может вернуть их в списке).
7116
+ *
7117
+ * @param offerId Идентификатор черновика.
7118
+ * @param orderedItemIds Идентификаторы заказанных позиций.
7119
+ */
7120
+ removeOrderedProductsFromCache(offerId, orderedItemIds) {
7121
+ const cachedItem = this.offerMap.get(offerId);
7122
+ if (!cachedItem || orderedItemIds.length === 0) {
7123
+ return;
7124
+ }
7125
+ const orderedIds = new Set(orderedItemIds.map(String));
7126
+ cachedItem.item$.pipe(take(1)).subscribe((draft) => {
7127
+ if (draft === loadingPlaceholder) {
7128
+ return;
7129
+ }
7130
+ const currentDraft = draft;
7131
+ const remainingProducts = currentDraft.products.filter((product) => !orderedIds.has(product.id));
7132
+ if (remainingProducts.length === currentDraft.products.length) {
7133
+ return;
7134
+ }
7135
+ const updatedDraft = new ScOrderDraft(currentDraft);
7136
+ updatedDraft.products = remainingProducts;
7137
+ updatedDraft.sum = remainingProducts.reduce((sum, product) => sum + product.costRub, 0);
7138
+ cachedItem.setValue(updatedDraft);
7139
+ });
7140
+ }
7088
7141
  /**
7089
7142
  * Добавляет продукт в коммерческое предложение/черновик.
7090
7143
  *
@@ -7367,6 +7420,15 @@ class ScPaginationService {
7367
7420
  * Сервис работы с каталогом.
7368
7421
  */
7369
7422
  this.catalogService = inject(ScCatalogService);
7423
+ /**
7424
+ * Загрузчик страницы товаров. По умолчанию — обычный список товаров ({@link ScCatalogService.getProducts$});
7425
+ * может быть переопределён через токен {@link SC_PRODUCTS_PAGINATION_LOADER} (например, для страницы новых товаров).
7426
+ *
7427
+ * @param params Параметры запроса страницы товаров с пагинацией.
7428
+ */
7429
+ this.productsLoader = inject(SC_PRODUCTS_PAGINATION_LOADER, { optional: true }) ??
7430
+ // eslint-disable-next-line unicorn/consistent-function-scoping
7431
+ ((params) => this.catalogService.getProducts$(params));
7370
7432
  /**
7371
7433
  * Объект данных пагинации.
7372
7434
  */
@@ -7374,9 +7436,7 @@ class ScPaginationService {
7374
7436
  // Избегаем множественных сигналов при одновременном изменении фильтров page$ и others$.
7375
7437
  debounceTime(0),
7376
7438
  // eslint-disable-next-line @typescript-eslint/no-unsafe-return
7377
- map$1((page) => ({ ...params, ...page })),
7378
- // TODO: Заменить this.catalogService.getProducts$ на абстрактный метод сервиса по примеру `TuiTreeLoader`.
7379
- switchMap((paginationParams) => this.authStatus$.pipe(switchMap(() => this.catalogService.getProducts$(paginationParams).pipe(startWith$1(null))))))), share());
7439
+ map$1((page) => ({ ...params, ...page })), switchMap((paginationParams) => this.authStatus$.pipe(switchMap(() => this.productsLoader(paginationParams).pipe(startWith$1(null))))))), share());
7380
7440
  /**
7381
7441
  * Объект данных пагинации с сохранением предыдущих значений для "разворачивания" списка товаров.
7382
7442
  * Список сохраняется при переходе по страницам, до тех пор пока не будет получен сигнал `others$`.
@@ -7386,9 +7446,7 @@ class ScPaginationService {
7386
7446
  // «пинает» ещё живую предыдущую подписку — debounceTime(0) схлопывает такой всплеск до одной эмиссии.
7387
7447
  debounceTime(0),
7388
7448
  // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access,@typescript-eslint/no-unsafe-assignment
7389
- map$1((page) => ({ ...params, ...page })),
7390
- // TODO: Заменить this.catalogService.getProducts$ на абстрактный метод сервиса по примеру `TuiTreeLoader`.
7391
- concatMap((paginationParams) => this.catalogService.getProducts$(paginationParams).pipe(startWith$1(null))),
7449
+ map$1((page) => ({ ...params, ...page })), concatMap((paginationParams) => this.productsLoader(paginationParams).pipe(startWith$1(null))),
7392
7450
  // TODO: Заменить `ScProduct` на T тип.
7393
7451
  scan(
7394
7452
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -8818,5 +8876,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.16", ngImpo
8818
8876
  * Generated bundle index. Do not edit.
8819
8877
  */
8820
8878
 
8821
- export { CATEGORY_PROVIDERS, EMPTY_CART, IS_BROWSER, IS_RUNNING_ON_TERMINAL, IS_SERVER, SC_ACCESS_AUTH_TOKEN_STORAGE_KEY, SC_API_KEYS, SC_AUTH_ADD_HEADER_REQUIRED, SC_AUTH_AS_CLIENT_DEFAULT_OPTIONS, SC_AUTH_AS_CLIENT_OPTIONS, SC_CACHE_LIFETIME, SC_CACHE_SETTINGS, SC_CATALOG_ITEM_PAGE_META, SC_CATALOG_ROOT_PAGE_META, SC_CATEGORY_INFO, SC_CATEGORY_STATE, SC_COMPANY_INFO, SC_COMPANY_NAME, SC_CONFIGURATOR_COMPONENTS, SC_CONFIGURATOR_SETTINGS, SC_COUNT_FIRST_DISCOUNTED_PRODUCTS, SC_COUNT_LAST_NEWS, SC_DATE_FORMAT, SC_DEFAULT_PAGE_META, SC_FEEDBACK_API, SC_GUEST_ENDPOINTS_TOKEN, SC_GUEST_PARAMETER_NAME_TOKEN, SC_GUEST_TOKEN_STORAGE_KEY, SC_ID_OR_SLUG_IN_ROUTE, SC_IS_HEADER_REQUIRED, SC_IS_HIDDEN_ERROR_ALERT, SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT, SC_IS_LOGOUT_REQUEST, SC_IS_REFRESH_REQUIRED, SC_LINEAR_VALUES, SC_LINEAR_VALUES_TOKEN, SC_MAX_LENGTH_SEARCH_TERM, SC_MIN_LENGTH_SEARCH_TERM, SC_NEXT_PAGE_PAGINATION_CLICK, SC_ORDER_LOADER, SC_ORDER_LOADING, SC_PATH_IMAGE_NOT_FOUND, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS, SC_PRODUCT_PAGINATION_OPTIONS, SC_REFRESH_AUTH_TOKEN_STORAGE_KEY, SC_RELEASE, SC_SSR_HTTP_TIMEOUT, SC_UPDATE_INTERVAL, SC_URLS, SC_USER_INFO, SC_VACANCIES_DATA_SOURCE, SC_VIRTUAL_CATEGORY_INFO, SC_VIRTUAL_CATEGORY_PROVIDERS, SEARCH_TERM, SEARCH_TERM_PROVIDERS, ScAuthAsClientGuard, ScAuthInterceptor, ScAuthService, ScBanner, ScBannerService, ScCacheInterceptor, ScCacheSettings, ScCachedData, ScCachedItem, ScCart, ScCartService, ScCatalogFilterService, ScCatalogFormat, ScCatalogItem, ScCatalogRedirectService, ScCatalogService, ScCatalogableItem, ScCategory, ScClientType, ScCodedIdentity, ScConfiguratorService, ScContactsService, ScContragentService, ScConvertInterceptor, ScConvertersService, ScDateFormatInterceptor, ScDeletableNamedIdentity, ScDeliveryAddressService, ScDeliveryCost, ScDeliveryType, ScDocumentInfoNode, ScDocumentInfoTypesEnum, ScErrorRequestState, ScErrorsInterceptor, ScFavoriteService, ScFeedbackForms, ScFeedbackService, ScFilesService, ScFrequentlyAskedQuestionsService, ScGuestInterceptor, ScHiddenCatalogableItem, ScIBreadcrumbItem, ScISuggestionType, ScIconTypesEnum, ScIdOrSlugGuard, ScIdOrSlugPipe, ScIdentity, ScImage, ScImageHelper, ScLoadingRequestState, ScLocationsService, ScMediaImageTransformerPipe, ScMimeTypes, ScNamedIdentity, ScNews, ScNewsService, ScNotificationActionTypes, ScNotificationLevelNames, ScNotificationsService, ScOpfList, ScOptionsInterceptor, ScOrder, ScOrderBase, ScOrderDraft, ScOrderDraftShort, ScOrderDraftType, ScOrderDraftsService, ScOrderItem, ScOrderShort, ScOrderStateStatus, ScOrdersService, ScPaginationService, ScPaymentStatus, ScPaymentType, ScPhoneService, ScPrimaryCatalogableItem, ScProduct, ScProductTileType, ScQuestionnaireService, ScQuestionnaireStatusEnum, ScReclamationService, ScReclamationStatus, ScRecommendationService, ScReference, ScReferenceName, ScReferencesService, ScRequestStateStatusEnum, ScRequisitesService, ScRouteKeys, ScSearchService, ScSeoService, ScSocialType, ScSsrTimeoutInterceptor, ScSuccessRequestState, ScSuggestionService, ScSum, ScTokenService, ScUIService, ScUTMService, ScUnitsHelper, ScUpdatableNamedIdentity, ScUploadedFile, ScUser, ScUserMetadata, ScUserMetrikaGoalsEnum, ScUserMetrikaService, ScUserService, ScUserType, ScVCardService, ScVacanciesList, ScVacanciesService, ScVacancy, ScVerificationService, ScVirtualCategory, ScWarehouseService, SchemaOrgFactory, TERMINAL_PROVIDERS, USER_AGENT_TERMINAL, filterChangedByKey, loadingPlaceholder, mapRequestStateToDataOrNull, mapToRequestState, runningOnTerminalFactory, scGetCurrentRoute, scOrderIsLoaded, searchTermFactory };
8879
+ export { CATEGORY_PROVIDERS, EMPTY_CART, IS_BROWSER, IS_RUNNING_ON_TERMINAL, IS_SERVER, SC_ACCESS_AUTH_TOKEN_STORAGE_KEY, SC_API_KEYS, SC_AUTH_ADD_HEADER_REQUIRED, SC_AUTH_AS_CLIENT_DEFAULT_OPTIONS, SC_AUTH_AS_CLIENT_OPTIONS, SC_CACHE_LIFETIME, SC_CACHE_SETTINGS, SC_CATALOG_ITEM_PAGE_META, SC_CATALOG_ROOT_PAGE_META, SC_CATEGORY_INFO, SC_CATEGORY_STATE, SC_COMPANY_INFO, SC_COMPANY_NAME, SC_CONFIGURATOR_COMPONENTS, SC_CONFIGURATOR_SETTINGS, SC_COUNT_FIRST_DISCOUNTED_PRODUCTS, SC_COUNT_LAST_NEWS, SC_DATE_FORMAT, SC_DEFAULT_PAGE_META, SC_FEEDBACK_API, SC_GUEST_ENDPOINTS_TOKEN, SC_GUEST_PARAMETER_NAME_TOKEN, SC_GUEST_TOKEN_STORAGE_KEY, SC_ID_OR_SLUG_IN_ROUTE, SC_IS_HEADER_REQUIRED, SC_IS_HIDDEN_ERROR_ALERT, SC_IS_HIDDEN_ERROR_ALERT_HTTP_CONTEXT, SC_IS_LOGOUT_REQUEST, SC_IS_REFRESH_REQUIRED, SC_LINEAR_VALUES, SC_LINEAR_VALUES_TOKEN, SC_MAX_LENGTH_SEARCH_TERM, SC_MIN_LENGTH_SEARCH_TERM, SC_NEXT_PAGE_PAGINATION_CLICK, SC_ORDER_LOADER, SC_ORDER_LOADING, SC_PATH_IMAGE_NOT_FOUND, SC_PRODUCTS_PAGINATION_LOADER, SC_PRODUCT_PAGINATION_DEFAULT_OPTIONS, SC_PRODUCT_PAGINATION_OPTIONS, SC_REFRESH_AUTH_TOKEN_STORAGE_KEY, SC_RELEASE, SC_SSR_HTTP_TIMEOUT, SC_UPDATE_INTERVAL, SC_URLS, SC_USER_INFO, SC_VACANCIES_DATA_SOURCE, SC_VIRTUAL_CATEGORY_INFO, SC_VIRTUAL_CATEGORY_PROVIDERS, SEARCH_TERM, SEARCH_TERM_PROVIDERS, ScAuthAsClientGuard, ScAuthInterceptor, ScAuthService, ScBanner, ScBannerService, ScCacheInterceptor, ScCacheSettings, ScCachedData, ScCachedItem, ScCart, ScCartService, ScCatalogFilterService, ScCatalogFormat, ScCatalogItem, ScCatalogRedirectService, ScCatalogService, ScCatalogableItem, ScCategory, ScClientType, ScCodedIdentity, ScConfiguratorService, ScContactsService, ScContragentService, ScConvertInterceptor, ScConvertersService, ScDateFormatInterceptor, ScDeletableNamedIdentity, ScDeliveryAddressService, ScDeliveryCost, ScDeliveryType, ScDocumentInfoNode, ScDocumentInfoTypesEnum, ScErrorRequestState, ScErrorsInterceptor, ScFavoriteService, ScFeedbackForms, ScFeedbackService, ScFilesService, ScFrequentlyAskedQuestionsService, ScGuestInterceptor, ScHiddenCatalogableItem, ScIBreadcrumbItem, ScISuggestionType, ScIconTypesEnum, ScIdOrSlugGuard, ScIdOrSlugPipe, ScIdentity, ScImage, ScImageHelper, ScLoadingRequestState, ScLocationsService, ScMediaImageTransformerPipe, ScMimeTypes, ScNamedIdentity, ScNews, ScNewsService, ScNotificationActionTypes, ScNotificationLevelNames, ScNotificationsService, ScOpfList, ScOptionsInterceptor, ScOrder, ScOrderBase, ScOrderDraft, ScOrderDraftShort, ScOrderDraftType, ScOrderDraftsService, ScOrderItem, ScOrderShort, ScOrderStateStatus, ScOrdersService, ScPaginationService, ScPaymentStatus, ScPaymentType, ScPhoneService, ScPrimaryCatalogableItem, ScProduct, ScProductTileType, ScQuestionnaireService, ScQuestionnaireStatusEnum, ScReclamationService, ScReclamationStatus, ScRecommendationService, ScReference, ScReferenceName, ScReferencesService, ScRequestStateStatusEnum, ScRequisitesService, ScRouteKeys, ScSearchService, ScSeoService, ScSocialType, ScSsrTimeoutInterceptor, ScSuccessRequestState, ScSuggestionService, ScSum, ScTokenService, ScUIService, ScUTMService, ScUnitsHelper, ScUpdatableNamedIdentity, ScUploadedFile, ScUser, ScUserMetadata, ScUserMetrikaGoalsEnum, ScUserMetrikaService, ScUserService, ScUserType, ScVCardService, ScVacanciesList, ScVacanciesService, ScVacancy, ScVerificationService, ScVirtualCategory, ScWarehouseService, SchemaOrgFactory, TERMINAL_PROVIDERS, USER_AGENT_TERMINAL, filterChangedByKey, loadingPlaceholder, mapRequestStateToDataOrNull, mapToRequestState, runningOnTerminalFactory, scGetCurrentRoute, scOrderIsLoaded, searchTermFactory };
8822
8880
  //# sourceMappingURL=snabcentr-client-core.mjs.map