@snabcentr/client-ui 4.20.1 → 4.23.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.
Files changed (127) hide show
  1. package/alerts/confirm-alert/sc-confirm-alert.component.d.ts +22 -0
  2. package/alerts/index.d.ts +1 -0
  3. package/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.d.ts +1 -1
  4. package/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.d.ts +3 -3
  5. package/catalog/input-quantity/sc-input-quantity.component.d.ts +17 -1
  6. package/contragents/sc-contragents.module.d.ts +1 -1
  7. package/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.d.ts +5 -0
  8. package/delivery-address/sc-delivery-address.module.d.ts +1 -1
  9. package/directives/address-quality/sc-address-quality.directive.d.ts +5 -0
  10. package/directives/address-quality/sc-address-quality.service.d.ts +9 -1
  11. package/esm2022/alerts/confirm-alert/sc-confirm-alert.component.mjs +29 -0
  12. package/esm2022/alerts/index.mjs +2 -0
  13. package/esm2022/auth/sc-simple-sign-up-form/sc-simple-sign-up-form.component.mjs +1 -1
  14. package/esm2022/auth/sign-up-form/sc-sign-up-form.component.mjs +1 -1
  15. package/esm2022/cart/add-or-editing-cart-item-dialog/sc-add-or-editing-cart-item-dialog.component.mjs +4 -3
  16. package/esm2022/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.mjs +5 -16
  17. package/esm2022/catalog/input-quantity/sc-input-quantity.component.mjs +24 -4
  18. package/esm2022/catalog/notify-when-in-stock-dialog/sc-notify-when-in-stock-dialog.component.mjs +2 -2
  19. package/esm2022/catalog/price-warehouse-stock/sc-price-warehouse-stock.component.mjs +3 -3
  20. package/esm2022/contacts/new-contact-form/sc-new-contact-form.component.mjs +1 -1
  21. package/esm2022/contragents/new-contragent-bank-account-form/sc-new-contragent-bank-account-form.component.mjs +1 -1
  22. package/esm2022/contragents/new-contragent-form/sc-new-contragent-form.component.mjs +3 -3
  23. package/esm2022/contragents/sc-contragents.module.mjs +5 -2
  24. package/esm2022/delivery-address/add-delivery-address-dialog/sc-add-delivery-address-dialog.component.mjs +10 -3
  25. package/esm2022/delivery-address/sc-delivery-address.module.mjs +5 -2
  26. package/esm2022/directives/address-quality/sc-address-quality.directive.mjs +8 -1
  27. package/esm2022/directives/address-quality/sc-address-quality.service.mjs +14 -6
  28. package/esm2022/feedback/feedback-form/sc-feedback-form.component.mjs +21 -11
  29. package/esm2022/form-fields/suggestion-field/sc-suggestion-field.component.mjs +6 -31
  30. package/esm2022/helpers/sc-api-error-helper.mjs +25 -0
  31. package/esm2022/helpers/sc-file-helper.mjs +29 -0
  32. package/esm2022/order/draft/helpers/sc-draft-list-helper.mjs +83 -0
  33. package/esm2022/order/draft/models/sc-i-draft-list-item.mjs +2 -0
  34. package/esm2022/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.mjs +73 -0
  35. package/esm2022/order/draft/profstroy/badge/sc-profstroy-badge.component.mjs +21 -0
  36. package/esm2022/order/draft/profstroy/badges/sc-profstroy-draft-badges.component.mjs +31 -0
  37. package/esm2022/order/draft/profstroy/create-dialog/sc-profstroy-draft-create-dialog.component.mjs +139 -0
  38. package/esm2022/order/draft/profstroy/enums/sc-profstroy-draft-state.mjs +32 -0
  39. package/esm2022/order/draft/profstroy/helpers/sc-profstroy-draft-helper.mjs +94 -0
  40. package/esm2022/order/draft/profstroy/index.mjs +8 -0
  41. package/esm2022/order/draft/profstroy/models/sc-i-profstroy-draft-state-view.mjs +2 -0
  42. package/esm2022/order/draft/sc-draft.component.mjs +148 -14
  43. package/esm2022/order/draft/services/sc-draft-expiration-clock.service.mjs +42 -0
  44. package/esm2022/order/draft/services/sc-draft-list-updates.service.mjs +288 -0
  45. package/esm2022/order/index.mjs +6 -1
  46. package/esm2022/order/new-order-items/sc-new-order-items.component.mjs +11 -3
  47. package/esm2022/order/order-form/sc-order-form.component.mjs +4 -2
  48. package/esm2022/order/order-item/sc-order-item.component.mjs +37 -5
  49. package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +282 -44
  50. package/esm2022/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.mjs +1 -1
  51. package/esm2022/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.mjs +15 -3
  52. package/esm2022/pipes/sc-format-date.mjs +1 -1
  53. package/esm2022/providers/cleanup-recaptcha-artifacts.mjs +30 -0
  54. package/esm2022/providers/index.mjs +2 -1
  55. package/esm2022/providers/sc-block-incomplete-address.mjs +3 -3
  56. package/esm2022/providers/sc-date-formatter.mjs +1 -1
  57. package/esm2022/public-api.mjs +2 -2
  58. package/esm2022/samples/sc-sample.module.mjs +10 -3
  59. package/esm2022/services/index.mjs +1 -2
  60. package/esm2022/user/update-user-info-dialog/sc-update-user-info-dialog.component.mjs +3 -3
  61. package/feedback/feedback-form/sc-feedback-form.component.d.ts +1 -1
  62. package/fesm2022/snabcentr-client-ui.mjs +1483 -527
  63. package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
  64. package/form-fields/suggestion-field/sc-suggestion-field.component.d.ts +3 -14
  65. package/helpers/sc-api-error-helper.d.ts +18 -0
  66. package/helpers/sc-file-helper.d.ts +13 -0
  67. package/order/draft/helpers/sc-draft-list-helper.d.ts +51 -0
  68. package/order/draft/models/sc-i-draft-list-item.d.ts +14 -0
  69. package/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.d.ts +58 -0
  70. package/order/draft/profstroy/badge/sc-profstroy-badge.component.d.ts +12 -0
  71. package/order/draft/profstroy/badges/sc-profstroy-draft-badges.component.d.ts +21 -0
  72. package/order/draft/profstroy/create-dialog/sc-profstroy-draft-create-dialog.component.d.ts +65 -0
  73. package/order/draft/profstroy/enums/sc-profstroy-draft-state.d.ts +29 -0
  74. package/order/draft/profstroy/helpers/sc-profstroy-draft-helper.d.ts +33 -0
  75. package/order/draft/profstroy/index.d.ts +7 -0
  76. package/order/draft/profstroy/models/sc-i-profstroy-draft-state-view.d.ts +17 -0
  77. package/order/draft/sc-draft.component.d.ts +73 -1
  78. package/order/draft/services/sc-draft-expiration-clock.service.d.ts +29 -0
  79. package/order/draft/services/sc-draft-list-updates.service.d.ts +158 -0
  80. package/order/index.d.ts +5 -0
  81. package/order/new-order-items/sc-new-order-items.component.d.ts +9 -1
  82. package/order/order-form/sc-order-form.component.d.ts +1 -0
  83. package/order/order-item/sc-order-item.component.d.ts +25 -1
  84. package/order/order-items-list/sc-order-items-list.component.d.ts +140 -7
  85. package/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.d.ts +13 -1
  86. package/package.json +3 -2
  87. package/pipes/sc-format-date.d.ts +1 -1
  88. package/providers/cleanup-recaptcha-artifacts.d.ts +7 -0
  89. package/providers/index.d.ts +1 -0
  90. package/providers/sc-block-incomplete-address.d.ts +1 -1
  91. package/providers/sc-date-formatter.d.ts +1 -1
  92. package/public-api.d.ts +1 -1
  93. package/release_notes.tmp +8 -3
  94. package/samples/sc-sample.module.d.ts +2 -1
  95. package/services/index.d.ts +0 -1
  96. package/styles/taiga/variables.less +16 -1
  97. package/styles/tailwind/tailwind.scss +43 -40
  98. package/esm2022/services/sc-scripts.service.mjs +0 -106
  99. package/esm2022/smart-captcha/index.mjs +0 -5
  100. package/esm2022/smart-captcha/interfaces/index.mjs +0 -6
  101. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-api.mjs +0 -2
  102. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-event.mjs +0 -2
  103. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-language.mjs +0 -2
  104. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-render-params.mjs +0 -2
  105. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-settings.mjs +0 -2
  106. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-window.mjs +0 -2
  107. package/esm2022/smart-captcha/sc-smart-captcha.component.mjs +0 -167
  108. package/esm2022/smart-captcha/services/index.mjs +0 -2
  109. package/esm2022/smart-captcha/services/sc-smart-captcha-loader.service.mjs +0 -87
  110. package/esm2022/smart-captcha/tokens/index.mjs +0 -3
  111. package/esm2022/smart-captcha/tokens/sc-smart-captcha-load-timeout.token.mjs +0 -8
  112. package/esm2022/smart-captcha/tokens/sc-smart-captcha-settings.token.mjs +0 -6
  113. package/services/sc-scripts.service.d.ts +0 -51
  114. package/smart-captcha/index.d.ts +0 -4
  115. package/smart-captcha/interfaces/index.d.ts +0 -5
  116. package/smart-captcha/interfaces/sc-smart-captcha-api.d.ts +0 -36
  117. package/smart-captcha/interfaces/sc-smart-captcha-event.d.ts +0 -4
  118. package/smart-captcha/interfaces/sc-smart-captcha-language.d.ts +0 -4
  119. package/smart-captcha/interfaces/sc-smart-captcha-render-params.d.ts +0 -16
  120. package/smart-captcha/interfaces/sc-smart-captcha-settings.d.ts +0 -16
  121. package/smart-captcha/interfaces/sc-smart-captcha-window.d.ts +0 -14
  122. package/smart-captcha/sc-smart-captcha.component.d.ts +0 -92
  123. package/smart-captcha/services/index.d.ts +0 -1
  124. package/smart-captcha/services/sc-smart-captcha-loader.service.d.ts +0 -50
  125. package/smart-captcha/tokens/index.d.ts +0 -2
  126. package/smart-captcha/tokens/sc-smart-captcha-load-timeout.token.d.ts +0 -5
  127. package/smart-captcha/tokens/sc-smart-captcha-settings.token.d.ts +0 -6
@@ -13,11 +13,6 @@ export declare class ScSuggestionFieldComponent implements OnInit {
13
13
  * Тип подсказок.
14
14
  */
15
15
  type: ScISuggestionType;
16
- /**
17
- * Признак, что элементы подсказок показывают пометку о полноте адреса.
18
- * Отключается там, где адреса из подсказки по организации не применяются.
19
- */
20
- showAddressQuality: boolean;
21
16
  /**
22
17
  * Событие выбора результата подсказки.
23
18
  */
@@ -72,18 +67,12 @@ export declare class ScSuggestionFieldComponent implements OnInit {
72
67
  */
73
68
  isDisabledSuggestion(suggestion: ScSuggestion): boolean;
74
69
  /**
75
- * Возвращает текст пометки о качестве адреса для элемента выпадающего списка подсказок либо null, когда пометка не требуется.
70
+ * Возвращает текст пометки о качестве адреса для элемента выпадающего списка подсказок по адресу либо null, когда пометка не требуется.
71
+ * Неполный адрес и адрес с неопределённой полнотой помечаются одинаково.
76
72
  *
77
73
  * @param quality Качество (полнота) адреса.
78
74
  */
79
75
  getAddressQualityWarning(quality: ScSuggestionAddressQuality | null | undefined): string | null;
80
- /**
81
- * Возвращает текст пометки о качестве юридического адреса для подсказки по организации либо null,
82
- * когда пометка не требуется, в том числе когда у организации нет юридического адреса.
83
- *
84
- * @param suggestion Объект подсказки по организации.
85
- */
86
- getOrganizationAddressQualityWarning(suggestion: ScISuggestionOrganization): string | null;
87
76
  /**
88
77
  * Проверяет прекращена ли деятельность указанной организации.
89
78
  *
@@ -103,5 +92,5 @@ export declare class ScSuggestionFieldComponent implements OnInit {
103
92
  */
104
93
  private applyOrganizationSuggestion;
105
94
  static ɵfac: i0.ɵɵFactoryDeclaration<ScSuggestionFieldComponent, [{ skipSelf: true; }, null]>;
106
- static ɵcmp: i0.ɵɵComponentDeclaration<ScSuggestionFieldComponent, "sc-suggestion-field", never, { "type": { "alias": "type"; "required": false; }; "showAddressQuality": { "alias": "showAddressQuality"; "required": false; }; }, { "selectedClick": "selectedClick"; }, never, never, false, never>;
95
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScSuggestionFieldComponent, "sc-suggestion-field", never, { "type": { "alias": "type"; "required": false; }; }, { "selectedClick": "selectedClick"; }, never, never, false, never>;
107
96
  }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Класс-помощник для сообщений об ошибках запросов к API.
3
+ */
4
+ export declare class ScApiErrorHelper {
5
+ /**
6
+ * Возвращает текст ошибки из ответа API или указанный текст, если ответ его не содержит.
7
+ *
8
+ * @param error Ошибка запроса.
9
+ * @param fallback Текст по умолчанию.
10
+ */
11
+ static getMessage(error: unknown, fallback: string): string;
12
+ /**
13
+ * Возвращает признак ответа 404: запись не найдена, например удалена в другой вкладке.
14
+ *
15
+ * @param error Ошибка запроса.
16
+ */
17
+ static isNotFound(error: unknown): boolean;
18
+ }
@@ -0,0 +1,13 @@
1
+ import { ScUploadedFile } from '@snabcentr/client-core';
2
+ import { Observable } from 'rxjs';
3
+ /**
4
+ * Класс-помощник для работы с файлами, выбранными пользователем.
5
+ */
6
+ export declare class ScFileHelper {
7
+ /**
8
+ * Читает файл и возвращает его для отправки в API: название и содержимое в виде data-URI. При отписке чтение прерывается.
9
+ *
10
+ * @param file Выбранный файл.
11
+ */
12
+ static readAsUploadedFile$(file: File): Observable<ScUploadedFile>;
13
+ }
@@ -0,0 +1,51 @@
1
+ import { ScIPaginate, ScOrderDraftShort } from '@snabcentr/client-core';
2
+ import { ScIDraftListItem } from '../models/sc-i-draft-list-item';
3
+ /**
4
+ * Класс-помощник для работы со списком черновиков.
5
+ */
6
+ export declare class ScDraftListHelper {
7
+ /**
8
+ * Возвращает признак, что состав страницы не изменился: то же общее количество черновиков и те же черновики в том же порядке.
9
+ *
10
+ * @param items Текущие элементы списка.
11
+ * @param total Текущее общее количество черновиков.
12
+ * @param drafts Черновики полученной страницы.
13
+ * @param receivedTotal Общее количество черновиков в полученных данных.
14
+ */
15
+ static isSamePage(items: ScIDraftListItem[], total: number, drafts: ScOrderDraftShort[], receivedTotal: number): boolean;
16
+ /**
17
+ * Возвращает подпись состава страницы: общее количество черновиков и номера черновиков страницы по порядку.
18
+ *
19
+ * @param page Страница списка.
20
+ */
21
+ static getSignature(page: ScIPaginate<ScOrderDraftShort>): string;
22
+ /**
23
+ * Возвращает элементы новой страницы списка. Черновики, которые уже есть в списке, сохраняют раскрытие и полные данные.
24
+ *
25
+ * @param items Текущие элементы списка.
26
+ * @param drafts Черновики новой страницы.
27
+ */
28
+ static fromPage(items: ScIDraftListItem[], drafts: ScOrderDraftShort[]): ScIDraftListItem[];
29
+ /**
30
+ * Возвращает список с обновлёнными краткими данными полученных черновиков, состав и порядок списка не меняются.
31
+ * Полные данные раскрытых черновиков не меняются: их обновляет кэш черновика.
32
+ *
33
+ * @param items Текущие элементы списка.
34
+ * @param drafts Полученные краткие данные черновиков.
35
+ */
36
+ static merge(items: ScIDraftListItem[], drafts: ScOrderDraftShort[]): ScIDraftListItem[];
37
+ /**
38
+ * Возвращает номера черновиков с полными данными, у которых краткие данные отличаются: название или данные актуализации.
39
+ *
40
+ * @param items Текущие элементы списка.
41
+ * @param drafts Полученные краткие данные черновиков.
42
+ */
43
+ static getChangedFullDraftIds(items: ScIDraftListItem[], drafts: ScOrderDraftShort[]): number[];
44
+ /**
45
+ * Обновляет элемент списка краткими данными черновика. Полные данные черновика не заменяются.
46
+ *
47
+ * @param item Элемент списка.
48
+ * @param short Краткие данные черновика.
49
+ */
50
+ private static update;
51
+ }
@@ -0,0 +1,14 @@
1
+ import { ScOrderDraft, ScOrderDraftShort } from '@snabcentr/client-core';
2
+ /**
3
+ * Данные об элементе списка черновиков заказов.
4
+ */
5
+ export interface ScIDraftListItem {
6
+ /**
7
+ * Краткие или полные данные о черновике заказа.
8
+ */
9
+ order: ScOrderDraft | ScOrderDraftShort;
10
+ /**
11
+ * Признак, что черновик раскрыт в списке.
12
+ */
13
+ isExpanded: boolean;
14
+ }
@@ -0,0 +1,58 @@
1
+ import { ScOrderDraft } from '@snabcentr/client-core';
2
+ import { ScProfstroyDraftState } from '../enums/sc-profstroy-draft-state';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Компонент панели состояния актуализации черновика Профстрой с действиями актуализации и пересборки.
6
+ */
7
+ export declare class ScProfstroyActualizationPanelComponent {
8
+ /**
9
+ * Список ссылок приложения.
10
+ */
11
+ private readonly urls;
12
+ /**
13
+ * Объект документа.
14
+ */
15
+ private readonly document;
16
+ /**
17
+ * Черновик Профстрой.
18
+ */
19
+ readonly draft: import("@angular/core").InputSignal<ScOrderDraft>;
20
+ /**
21
+ * Момент, на который определяется состояние. Передаётся снаружи и обновляется по таймеру проверки срока, иначе метка «Данные устарели» не сменится.
22
+ */
23
+ readonly now: import("@angular/core").InputSignal<Date>;
24
+ /**
25
+ * Признак, что действия над черновиком недоступны.
26
+ */
27
+ readonly busy: import("@angular/core").InputSignal<boolean>;
28
+ /**
29
+ * Событие запуска актуализации.
30
+ */
31
+ readonly actualize: import("@angular/core").OutputEmitterRef<void>;
32
+ /**
33
+ * Событие запуска пересборки из файла.
34
+ */
35
+ readonly reload: import("@angular/core").OutputEmitterRef<void>;
36
+ /**
37
+ * Текущее состояние черновика.
38
+ */
39
+ protected readonly state: import("@angular/core").Signal<ScProfstroyDraftState>;
40
+ /**
41
+ * Данные об отображении состояния.
42
+ */
43
+ protected readonly stateView: import("@angular/core").Signal<import("@snabcentr/client-ui").ScIProfstroyDraftStateView>;
44
+ /**
45
+ * Признак, что выполняется обработка.
46
+ */
47
+ protected readonly isProcessing: import("@angular/core").Signal<boolean>;
48
+ /**
49
+ * Признак, что срок действия актуализации ещё не истёк.
50
+ */
51
+ protected readonly isActual: import("@angular/core").Signal<boolean>;
52
+ /**
53
+ * Абсолютная ссылка на исходный файл заявки. Файл лежит на хосте API, адрес API может быть указан относительно сайта.
54
+ */
55
+ protected readonly fileUrl: import("@angular/core").Signal<string | null>;
56
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScProfstroyActualizationPanelComponent, never>;
57
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScProfstroyActualizationPanelComponent, "sc-profstroy-actualization-panel", never, { "draft": { "alias": "draft"; "required": true; "isSignal": true; }; "now": { "alias": "now"; "required": true; "isSignal": true; }; "busy": { "alias": "busy"; "required": false; "isSignal": true; }; }, { "actualize": "actualize"; "reload": "reload"; }, never, never, true, never>;
58
+ }
@@ -0,0 +1,12 @@
1
+ import * as i0 from "@angular/core";
2
+ /**
3
+ * Компонент метки «Профстрой» у черновика или заказа, созданного из файла программы «Профстрой».
4
+ */
5
+ export declare class ScProfstroyBadgeComponent {
6
+ /**
7
+ * Размер метки.
8
+ */
9
+ readonly size: import("@angular/core").InputSignal<"m" | "s">;
10
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScProfstroyBadgeComponent, never>;
11
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScProfstroyBadgeComponent, "sc-profstroy-badge", never, { "size": { "alias": "size"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
12
+ }
@@ -0,0 +1,21 @@
1
+ import { ScOrderDraftActualization } from '@snabcentr/client-core';
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Компонент меток черновика Профстрой: признак и текущее состояние обработки.
5
+ */
6
+ export declare class ScProfstroyDraftBadgesComponent {
7
+ /**
8
+ * Данные об актуализации черновика.
9
+ */
10
+ readonly actualization: import("@angular/core").InputSignal<ScOrderDraftActualization | undefined>;
11
+ /**
12
+ * Момент, на который определяется состояние. Передаётся снаружи и обновляется по таймеру проверки срока, иначе метка «Данные устарели» не сменится.
13
+ */
14
+ readonly now: import("@angular/core").InputSignal<Date>;
15
+ /**
16
+ * Данные об отображении состояния.
17
+ */
18
+ protected readonly stateView: import("@angular/core").Signal<import("@snabcentr/client-ui").ScIProfstroyDraftStateView>;
19
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScProfstroyDraftBadgesComponent, never>;
20
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScProfstroyDraftBadgesComponent, "sc-profstroy-draft-badges", never, { "actualization": { "alias": "actualization"; "required": false; "isSignal": true; }; "now": { "alias": "now"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
21
+ }
@@ -0,0 +1,65 @@
1
+ import { FormControl, FormGroup } from '@angular/forms';
2
+ import { ScOrderDraft } from '@snabcentr/client-core';
3
+ import { TuiDialogContext } from '@taiga-ui/core';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * Компонент диалога создания черновика заказа из файла программы «Профстрой».
7
+ */
8
+ export declare class ScProfstroyDraftCreateDialogComponent {
9
+ /**
10
+ * Контекст диалогового окна, в котором открыт компонент.
11
+ */
12
+ protected readonly context: TuiDialogContext<ScOrderDraft | undefined, undefined>;
13
+ /**
14
+ * Сервис для работы с черновиками заказов.
15
+ */
16
+ private readonly draftsService;
17
+ /**
18
+ * Ссылка для автоматического управления уничтожением зависимостей.
19
+ */
20
+ private readonly destroyRef;
21
+ /**
22
+ * Настройки поля выбора файлов, в том числе наибольший размер файла из настроек приложения.
23
+ */
24
+ private readonly inputFilesOptions;
25
+ /**
26
+ * Допустимое расширение файла.
27
+ */
28
+ protected readonly accept = ".xlsx";
29
+ /**
30
+ * Наибольшая длина названия заявки.
31
+ */
32
+ protected readonly nameMaxLength = 255;
33
+ /**
34
+ * Форма создания черновика. Формат и размер файла проверяются на самом поле: после выбора файла поле выбора убирается вместе со своими проверками.
35
+ */
36
+ protected readonly form: FormGroup<{
37
+ file: FormControl<File | null>;
38
+ name: FormControl<string>;
39
+ }>;
40
+ /**
41
+ * Признак выполнения запроса создания.
42
+ */
43
+ protected readonly submitting: import("@angular/core").WritableSignal<boolean>;
44
+ /**
45
+ * Признак попытки создать заявку. До неё незаполненное поле файла ошибкой не подсвечивается: поле теряет фокус уже при открытии окна выбора файла.
46
+ */
47
+ protected readonly submitAttempted: import("@angular/core").WritableSignal<boolean>;
48
+ /**
49
+ * Удаляет выбранный файл.
50
+ */
51
+ protected removeFile(): void;
52
+ /**
53
+ * Отправляет файл и создаёт черновик. Ошибки сервера с прошлой отправки не мешают отправить форму снова.
54
+ */
55
+ protected submit(): void;
56
+ /**
57
+ * Показывает ошибку создания в форме: ошибки проверки данных у полей, ошибку чтения файла у поля файла, остальные ошибкой формы (401 обрабатывает авторизация).
58
+ * Диалог остаётся открытым.
59
+ *
60
+ * @param error Ошибка чтения файла или запроса.
61
+ */
62
+ private applyError;
63
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScProfstroyDraftCreateDialogComponent, never>;
64
+ static ɵcmp: i0.ɵɵComponentDeclaration<ScProfstroyDraftCreateDialogComponent, "sc-profstroy-draft-create-dialog", never, {}, {}, never, never, true, never>;
65
+ }
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Перечисление состояний черновика Профстрой для отображения пользователю.
3
+ */
4
+ export declare enum ScProfstroyDraftState {
5
+ /**
6
+ * Выполняется обработка.
7
+ */
8
+ processing = "processing",
9
+ /**
10
+ * Актуализирован, срок действия не истёк.
11
+ */
12
+ actual = "actual",
13
+ /**
14
+ * Актуализирован, но срок действия истёк.
15
+ */
16
+ outdated = "outdated",
17
+ /**
18
+ * Обработка завершилась с ошибкой.
19
+ */
20
+ error = "error",
21
+ /**
22
+ * Требуется актуализация после изменения состава.
23
+ */
24
+ needsActualization = "needsActualization",
25
+ /**
26
+ * Состояние не известно.
27
+ */
28
+ unknown = "unknown"
29
+ }
@@ -0,0 +1,33 @@
1
+ import { ScOrderDraft, ScOrderDraftActualization } from '@snabcentr/client-core';
2
+ import { ScProfstroyDraftState } from '../enums/sc-profstroy-draft-state';
3
+ import { ScIProfstroyDraftStateView } from '../models/sc-i-profstroy-draft-state-view';
4
+ /**
5
+ * Класс-помощник для отображения черновиков Профстрой.
6
+ */
7
+ export declare class ScProfstroyDraftHelper {
8
+ /**
9
+ * Данные об отображении состояний черновика.
10
+ */
11
+ private static readonly stateViews;
12
+ /**
13
+ * Возвращает состояние черновика на указанный момент.
14
+ *
15
+ * @param actualization Данные об актуализации.
16
+ * @param now Момент проверки.
17
+ */
18
+ static getState(actualization: ScOrderDraftActualization | undefined, now: Date): ScProfstroyDraftState;
19
+ /**
20
+ * Возвращает данные об отображении состояния черновика на указанный момент.
21
+ *
22
+ * @param actualization Данные об актуализации.
23
+ * @param now Момент проверки.
24
+ */
25
+ static getStateView(actualization: ScOrderDraftActualization | undefined, now: Date): ScIProfstroyDraftStateView;
26
+ /**
27
+ * Возвращает данные об отображении панели состояния черновика: для актуальной заявки пояснение зависит от того, сколько позиций попадёт в заказ.
28
+ *
29
+ * @param draft Черновик Профстрой.
30
+ * @param now Момент проверки.
31
+ */
32
+ static getPanelView(draft: ScOrderDraft, now: Date): ScIProfstroyDraftStateView;
33
+ }
@@ -0,0 +1,7 @@
1
+ export * from './actualization-panel/sc-profstroy-actualization-panel.component';
2
+ export * from './badge/sc-profstroy-badge.component';
3
+ export * from './badges/sc-profstroy-draft-badges.component';
4
+ export * from './create-dialog/sc-profstroy-draft-create-dialog.component';
5
+ export * from './enums/sc-profstroy-draft-state';
6
+ export * from './helpers/sc-profstroy-draft-helper';
7
+ export * from './models/sc-i-profstroy-draft-state-view';
@@ -0,0 +1,17 @@
1
+ /**
2
+ * Данные об отображении состояния черновика Профстрой.
3
+ */
4
+ export interface ScIProfstroyDraftStateView {
5
+ /**
6
+ * Краткое название состояния.
7
+ */
8
+ label: string;
9
+ /**
10
+ * Оформление метки и панели состояния.
11
+ */
12
+ appearance: 'info' | 'positive' | 'warning' | 'negative' | 'neutral';
13
+ /**
14
+ * Пояснение к состоянию.
15
+ */
16
+ description: string;
17
+ }
@@ -17,6 +17,10 @@ export declare class ScDraftComponent implements OnInit {
17
17
  * Сервис для работы с черновиками заказов.
18
18
  */
19
19
  private readonly draftsService;
20
+ /**
21
+ * Сервис уведомлений.
22
+ */
23
+ private readonly alerts;
20
24
  /**
21
25
  * Сигнал с данными текущего черновика заказа (из параметра orderId в URL).
22
26
  */
@@ -37,6 +41,42 @@ export declare class ScDraftComponent implements OnInit {
37
41
  * Текущий ключ маршрута.
38
42
  */
39
43
  protected readonly isDraftPage: import("@angular/core").Signal<boolean>;
44
+ /**
45
+ * Признак черновика Профстрой.
46
+ */
47
+ protected readonly isProfstroy: import("@angular/core").Signal<boolean>;
48
+ /**
49
+ * Признак, что идёт обработка черновика Профстрой.
50
+ */
51
+ protected readonly isProcessing: import("@angular/core").Signal<boolean>;
52
+ /**
53
+ * Сервис текущего момента для проверки срока актуализации.
54
+ */
55
+ private readonly expirationClock;
56
+ /**
57
+ * Текущий момент для проверки срока актуализации из общего источника. Обновляется, пока открыт черновик Профстрой.
58
+ */
59
+ protected readonly now: import("@angular/core").Signal<Date>;
60
+ /**
61
+ * Признак выполнения актуализации или пересборки черновика Профстрой.
62
+ */
63
+ protected readonly actionRunning: import("@angular/core").WritableSignal<boolean>;
64
+ /**
65
+ * Признак, что для черновика выполняются или ждут очереди запросы изменения или перечитывания.
66
+ */
67
+ protected readonly queueBusy: import("@angular/core").Signal<boolean>;
68
+ /**
69
+ * Признак, что действия над черновиком Профстрой недоступны, пока выполняется действие или запрос черновика.
70
+ */
71
+ protected readonly busy: import("@angular/core").Signal<boolean>;
72
+ /**
73
+ * Признак, что можно менять состав черновика Профстрой.
74
+ */
75
+ protected readonly canEditProfstroy: import("@angular/core").Signal<boolean>;
76
+ /**
77
+ * Причина, по которой нельзя оформить заказ из черновика Профстрой, или пустая строка.
78
+ */
79
+ protected readonly profstroyOrderBlockReason: import("@angular/core").Signal<string>;
40
80
  /**
41
81
  * Ссылка для автоматического управления уничтожением зависимостей.
42
82
  */
@@ -45,6 +85,10 @@ export declare class ScDraftComponent implements OnInit {
45
85
  * Сервис установки SEO-данных приложения.
46
86
  */
47
87
  private readonly seoService;
88
+ /**
89
+ * Инициализирует экземпляр класса {@link ScDraftComponent}.
90
+ */
91
+ constructor();
48
92
  /** @inheritDoc */
49
93
  ngOnInit(): void;
50
94
  /**
@@ -52,9 +96,37 @@ export declare class ScDraftComponent implements OnInit {
52
96
  */
53
97
  protected goToNewOrder(): void;
54
98
  /**
55
- * Удаляет черновик и перенаправляет к списку черновиков.
99
+ * Запускает актуализацию черновика Профстрой.
100
+ */
101
+ protected actualizeProfstroy(): void;
102
+ /**
103
+ * Запускает пересборку черновика Профстрой из файла после подтверждения.
104
+ */
105
+ protected reloadProfstroy(): void;
106
+ /**
107
+ * Удаляет черновик и перенаправляет к списку черновиков. Пока черновик удаляется, действия над ним заблокированы.
108
+ * Если удалить не удалось, пользователь остаётся на странице, сообщение об ошибке показывает перехватчик приложения.
56
109
  */
57
110
  protected clearDraft(): void;
111
+ /**
112
+ * Выполняет действие над черновиком Профстрой. Пока действие выполняется, остальные заблокированы.
113
+ * Ответ попадает в кэш черновика, после отказа 403 или 409 сервис сам перезапрашивает черновик. Сообщение об ошибке показывает перехватчик приложения.
114
+ *
115
+ * @param action Функция, возвращающая запрос действия по идентификатору черновика.
116
+ */
117
+ private runProfstroyAction;
118
+ /**
119
+ * Пока черновик Профстрой на его странице в обработке, опрашивает состояние лёгким запросом списка и после окончания обработки перезапрашивает черновик.
120
+ * Опрос идёт, пока перезапрошенный черновик остаётся в обработке: неудачный перезапрос повторяется на следующем шаге.
121
+ * Если черновика больше нет (удалён в другой вкладке), опрос завершается, а пользователь возвращается к списку. В списке черновиков состояние опрашивает сам список.
122
+ */
123
+ private watchProfstroyProcessing;
124
+ /**
125
+ * Сообщает, что черновик не найден, и возвращает к списку черновиков.
126
+ *
127
+ * @param draftId Идентификатор черновика.
128
+ */
129
+ private leaveMissingDraft;
58
130
  static ɵfac: i0.ɵɵFactoryDeclaration<ScDraftComponent, never>;
59
131
  static ɵcmp: i0.ɵɵComponentDeclaration<ScDraftComponent, "sc-draft", never, { "draft": { "alias": "draft"; "required": false; "isSignal": true; }; }, { "draft": "draftChange"; "deleteEvent": "deleteEvent"; }, never, never, true, never>;
60
132
  }
@@ -0,0 +1,29 @@
1
+ import { Signal } from '@angular/core';
2
+ import { Observable } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Сервис текущего момента для меток и проверок срока актуализации черновиков Профстрой. Момент обновляется с интервалом проверки срока
6
+ * актуализации одним таймером на всех подписчиков, поэтому список черновиков, страница черновика и оформление заказа видят один момент.
7
+ * Таймер работает, только пока есть подписчики.
8
+ */
9
+ export declare class ScDraftExpirationClockService {
10
+ /**
11
+ * Интервалы обновления данных.
12
+ */
13
+ private readonly updateInterval;
14
+ /**
15
+ * {@link Observable} текущего момента. Первый подписчик запускает таймер, после отписки всех подписчиков таймер останавливается.
16
+ * Следующие подписчики сразу получают последний момент, а не новый: он может отставать от текущего времени не больше чем
17
+ * на интервал проверки срока, и метки срока у нового подписчика обновятся на ближайшем тике общего таймера.
18
+ */
19
+ readonly now$: Observable<Date>;
20
+ /**
21
+ * Возвращает сигнал текущего момента, который обновляется общим таймером, только пока признак истинен. Вызывается в контексте
22
+ * внедрения зависимостей, например при объявлении поля компонента: подписка живёт, пока жив компонент.
23
+ *
24
+ * @param active Признак, пока он истинен, момент обновляется.
25
+ */
26
+ nowWhile(active: Signal<boolean>): Signal<Date>;
27
+ static ɵfac: i0.ɵɵFactoryDeclaration<ScDraftExpirationClockService, never>;
28
+ static ɵprov: i0.ɵɵInjectableDeclaration<ScDraftExpirationClockService>;
29
+ }