@snabcentr/client-ui 4.14.5 → 4.14.6-profstroy
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/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.d.ts +3 -3
- package/catalog/input-quantity/sc-input-quantity.component.d.ts +17 -1
- package/esm2022/banner/sc-banner.component.mjs +4 -4
- package/esm2022/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.mjs +5 -16
- package/esm2022/catalog/input-quantity/sc-input-quantity.component.mjs +29 -6
- package/esm2022/helpers/sc-file-helper.mjs +29 -0
- package/esm2022/order/draft/helpers/sc-draft-list-helper.mjs +42 -0
- package/esm2022/order/draft/models/sc-i-draft-list-item.mjs +2 -0
- package/esm2022/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.mjs +68 -0
- package/esm2022/order/draft/profstroy/badge/sc-profstroy-badge.component.mjs +21 -0
- package/esm2022/order/draft/profstroy/badges/sc-profstroy-draft-badges.component.mjs +31 -0
- package/esm2022/order/draft/profstroy/create-dialog/sc-profstroy-draft-create-dialog.component.mjs +132 -0
- package/esm2022/order/draft/profstroy/enums/sc-profstroy-draft-state.mjs +32 -0
- package/esm2022/order/draft/profstroy/helpers/sc-profstroy-draft-helper.mjs +72 -0
- package/esm2022/order/draft/profstroy/index.mjs +8 -0
- package/esm2022/order/draft/profstroy/models/sc-i-profstroy-draft-state-view.mjs +2 -0
- package/esm2022/order/draft/sc-draft.component.mjs +173 -10
- package/esm2022/order/index.mjs +5 -1
- package/esm2022/order/models/sc-i-order-items-group.mjs +2 -0
- package/esm2022/order/order-direction-items/sc-order-direction-items.component.mjs +7 -3
- package/esm2022/order/order-item/sc-order-item.component.mjs +14 -5
- package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +60 -7
- package/esm2022/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.mjs +7 -3
- package/esm2022/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.mjs +1 -1
- package/esm2022/pipes/sc-format-date.mjs +1 -1
- package/esm2022/providers/sc-date-formatter.mjs +1 -1
- package/fesm2022/snabcentr-client-ui.mjs +672 -42
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/helpers/sc-file-helper.d.ts +13 -0
- package/order/draft/helpers/sc-draft-list-helper.d.ts +22 -0
- package/order/draft/models/sc-i-draft-list-item.d.ts +14 -0
- package/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.d.ts +54 -0
- package/order/draft/profstroy/badge/sc-profstroy-badge.component.d.ts +12 -0
- package/order/draft/profstroy/badges/sc-profstroy-draft-badges.component.d.ts +21 -0
- package/order/draft/profstroy/create-dialog/sc-profstroy-draft-create-dialog.component.d.ts +58 -0
- package/order/draft/profstroy/enums/sc-profstroy-draft-state.d.ts +29 -0
- package/order/draft/profstroy/helpers/sc-profstroy-draft-helper.d.ts +26 -0
- package/order/draft/profstroy/index.d.ts +7 -0
- package/order/draft/profstroy/models/sc-i-profstroy-draft-state-view.d.ts +17 -0
- package/order/draft/sc-draft.component.d.ts +88 -1
- package/order/index.d.ts +4 -0
- package/order/models/sc-i-order-items-group.d.ts +22 -0
- package/order/order-direction-items/sc-order-direction-items.component.d.ts +5 -1
- package/order/order-item/sc-order-item.component.d.ts +9 -1
- package/order/order-items-list/sc-order-items-list.component.d.ts +23 -1
- package/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.d.ts +5 -1
- package/package.json +2 -2
- package/pipes/sc-format-date.d.ts +1 -1
- package/providers/sc-date-formatter.d.ts +1 -1
- package/release_notes.tmp +2 -4
- package/styles/tailwind/tailwind.scss +16 -0
|
@@ -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,22 @@
|
|
|
1
|
+
import { 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 drafts Полученные краткие данные черновиков.
|
|
12
|
+
* @param isFullPage Признак, что получена вся страница: тогда состав и порядок списка берутся из неё.
|
|
13
|
+
*/
|
|
14
|
+
static merge(items: ScIDraftListItem[], drafts: ScOrderDraftShort[], isFullPage: boolean): ScIDraftListItem[];
|
|
15
|
+
/**
|
|
16
|
+
* Обновляет элемент списка краткими данными черновика. Полные данные черновика не заменяются, а дополняются.
|
|
17
|
+
*
|
|
18
|
+
* @param item Элемент списка.
|
|
19
|
+
* @param short Краткие данные черновика.
|
|
20
|
+
*/
|
|
21
|
+
private static update;
|
|
22
|
+
}
|
|
@@ -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
|
+
}
|
package/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.d.ts
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
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
|
+
readonly draft: import("@angular/core").InputSignal<ScOrderDraft>;
|
|
16
|
+
/**
|
|
17
|
+
* Момент, на который определяется состояние.
|
|
18
|
+
*/
|
|
19
|
+
readonly now: import("@angular/core").InputSignal<Date>;
|
|
20
|
+
/**
|
|
21
|
+
* Признак выполнения действия над черновиком.
|
|
22
|
+
*/
|
|
23
|
+
readonly busy: import("@angular/core").InputSignal<boolean>;
|
|
24
|
+
/**
|
|
25
|
+
* Событие запуска актуализации.
|
|
26
|
+
*/
|
|
27
|
+
readonly actualize: import("@angular/core").OutputEmitterRef<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Событие запуска пересборки из файла.
|
|
30
|
+
*/
|
|
31
|
+
readonly reload: import("@angular/core").OutputEmitterRef<void>;
|
|
32
|
+
/**
|
|
33
|
+
* Текущее состояние черновика.
|
|
34
|
+
*/
|
|
35
|
+
protected readonly state: import("@angular/core").Signal<ScProfstroyDraftState>;
|
|
36
|
+
/**
|
|
37
|
+
* Данные об отображении состояния.
|
|
38
|
+
*/
|
|
39
|
+
protected readonly stateView: import("@angular/core").Signal<import("@snabcentr/client-ui").ScIProfstroyDraftStateView>;
|
|
40
|
+
/**
|
|
41
|
+
* Признак, что выполняется обработка.
|
|
42
|
+
*/
|
|
43
|
+
protected readonly isProcessing: import("@angular/core").Signal<boolean>;
|
|
44
|
+
/**
|
|
45
|
+
* Признак, что срок действия актуализации ещё не истёк.
|
|
46
|
+
*/
|
|
47
|
+
protected readonly isActual: import("@angular/core").Signal<boolean>;
|
|
48
|
+
/**
|
|
49
|
+
* Абсолютная ссылка на исходный файл заявки. Файл лежит на хосте API.
|
|
50
|
+
*/
|
|
51
|
+
protected readonly fileUrl: import("@angular/core").Signal<string | null>;
|
|
52
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ScProfstroyActualizationPanelComponent, never>;
|
|
53
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScProfstroyActualizationPanelComponent, "sc-profstroy-actualization-panel", never, { "draft": { "alias": "draft"; "required": true; "isSignal": true; }; "now": { "alias": "now"; "required": false; "isSignal": true; }; "busy": { "alias": "busy"; "required": false; "isSignal": true; }; }, { "actualize": "actualize"; "reload": "reload"; }, never, never, true, never>;
|
|
54
|
+
}
|
|
@@ -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": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
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
|
+
protected readonly allowedExtensions: string[];
|
|
25
|
+
/**
|
|
26
|
+
* Форма создания черновика.
|
|
27
|
+
*/
|
|
28
|
+
protected readonly form: FormGroup<{
|
|
29
|
+
file: FormControl<File | null>;
|
|
30
|
+
name: FormControl<string>;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* Признак выполнения запроса создания.
|
|
34
|
+
*/
|
|
35
|
+
protected readonly submitting: import("@angular/core").WritableSignal<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* Удаляет выбранный файл.
|
|
38
|
+
*/
|
|
39
|
+
protected removeFile(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Отправляет файл и создаёт черновик.
|
|
42
|
+
*/
|
|
43
|
+
protected submit(): void;
|
|
44
|
+
/**
|
|
45
|
+
* Возвращает ошибку, если расширение файла не входит в список допустимых.
|
|
46
|
+
*
|
|
47
|
+
* @param control Контрол файла.
|
|
48
|
+
*/
|
|
49
|
+
private validateExtension;
|
|
50
|
+
/**
|
|
51
|
+
* Раскладывает ошибки сервера по полям формы.
|
|
52
|
+
*
|
|
53
|
+
* @param error Ошибка запроса.
|
|
54
|
+
*/
|
|
55
|
+
private applyServerErrors;
|
|
56
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ScProfstroyDraftCreateDialogComponent, never>;
|
|
57
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScProfstroyDraftCreateDialogComponent, "sc-profstroy-draft-create-dialog", never, {}, {}, never, never, true, never>;
|
|
58
|
+
}
|
|
@@ -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,26 @@
|
|
|
1
|
+
import { 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
|
+
}
|
|
@@ -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' | 'success' | 'warning' | 'error' | 'neutral';
|
|
13
|
+
/**
|
|
14
|
+
* Пояснение к состоянию.
|
|
15
|
+
*/
|
|
16
|
+
description: string;
|
|
17
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { OnInit } from '@angular/core';
|
|
2
|
-
import { ScOrderDraft } from '@snabcentr/client-core';
|
|
2
|
+
import { ScOrderDraft, ScOrderItem } from '@snabcentr/client-core';
|
|
3
3
|
import { ScOrderItemsByDirection } from '../models/sc-i-cart-items-by-direction';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
/**
|
|
@@ -18,6 +18,14 @@ export declare class ScDraftComponent implements OnInit {
|
|
|
18
18
|
* Сервис для работы с черновиками заказов.
|
|
19
19
|
*/
|
|
20
20
|
private readonly draftsService;
|
|
21
|
+
/**
|
|
22
|
+
* Интервалы обновления данных.
|
|
23
|
+
*/
|
|
24
|
+
private readonly updateInterval;
|
|
25
|
+
/**
|
|
26
|
+
* Сервис уведомлений.
|
|
27
|
+
*/
|
|
28
|
+
private readonly alerts;
|
|
21
29
|
/**
|
|
22
30
|
* Сигнал с данными текущего черновика заказа (из параметра orderId в URL).
|
|
23
31
|
*/
|
|
@@ -38,6 +46,34 @@ export declare class ScDraftComponent implements OnInit {
|
|
|
38
46
|
* Текущий ключ маршрута.
|
|
39
47
|
*/
|
|
40
48
|
protected readonly isDraftPage: import("@angular/core").Signal<boolean>;
|
|
49
|
+
/**
|
|
50
|
+
* Функция группировки позиций черновика Профстрой по группам из файла.
|
|
51
|
+
*/
|
|
52
|
+
protected readonly groupByFileGroup: (item: ScOrderItem) => string;
|
|
53
|
+
/**
|
|
54
|
+
* Признак черновика Профстрой.
|
|
55
|
+
*/
|
|
56
|
+
protected readonly isProfstroy: import("@angular/core").Signal<boolean>;
|
|
57
|
+
/**
|
|
58
|
+
* Текущий момент для проверки срока актуализации. Обновляется по таймеру, пока открыт черновик Профстрой.
|
|
59
|
+
*/
|
|
60
|
+
protected readonly now: import("@angular/core").WritableSignal<Date>;
|
|
61
|
+
/**
|
|
62
|
+
* Признак выполнения действия над черновиком Профстрой.
|
|
63
|
+
*/
|
|
64
|
+
protected readonly busy: import("@angular/core").WritableSignal<boolean>;
|
|
65
|
+
/**
|
|
66
|
+
* Признак, что можно менять состав черновика Профстрой.
|
|
67
|
+
*/
|
|
68
|
+
protected readonly canEditProfstroy: import("@angular/core").Signal<boolean>;
|
|
69
|
+
/**
|
|
70
|
+
* Позиции, выбранные для заказа из черновика Профстрой.
|
|
71
|
+
*/
|
|
72
|
+
protected readonly selectedProfstroyItems: import("@angular/core").Signal<ScOrderItem[]>;
|
|
73
|
+
/**
|
|
74
|
+
* Причина, по которой нельзя оформить заказ из черновика Профстрой, или пустая строка.
|
|
75
|
+
*/
|
|
76
|
+
protected readonly profstroyOrderBlockReason: import("@angular/core").Signal<"" | "Оформление доступно после успешной актуализации." | "В заявке нет позиций, которые могут попасть в заказ." | "Выберите позиции для заказа.">;
|
|
41
77
|
/**
|
|
42
78
|
* Ссылка для автоматического управления уничтожением зависимостей.
|
|
43
79
|
*/
|
|
@@ -46,6 +82,10 @@ export declare class ScDraftComponent implements OnInit {
|
|
|
46
82
|
* Сервис установки SEO-данных приложения.
|
|
47
83
|
*/
|
|
48
84
|
private readonly seoService;
|
|
85
|
+
/**
|
|
86
|
+
* Инициализирует экземпляр класса {@link ScDraftComponent}.
|
|
87
|
+
*/
|
|
88
|
+
constructor();
|
|
49
89
|
/** @inheritDoc */
|
|
50
90
|
ngOnInit(): void;
|
|
51
91
|
/**
|
|
@@ -54,10 +94,57 @@ export declare class ScDraftComponent implements OnInit {
|
|
|
54
94
|
* @param direction Группа позиций по направлению продаж.
|
|
55
95
|
*/
|
|
56
96
|
protected goToNewOrder(direction: ScOrderItemsByDirection): void;
|
|
97
|
+
/**
|
|
98
|
+
* Переход к оформлению заказа из черновика Профстрой по выбранным позициям.
|
|
99
|
+
*/
|
|
100
|
+
protected goToNewProfstroyOrder(): void;
|
|
101
|
+
/**
|
|
102
|
+
* Запускает актуализацию черновика Профстрой.
|
|
103
|
+
*/
|
|
104
|
+
protected actualizeProfstroy(): void;
|
|
105
|
+
/**
|
|
106
|
+
* Запускает пересборку черновика Профстрой из файла после подтверждения.
|
|
107
|
+
*/
|
|
108
|
+
protected reloadProfstroy(): void;
|
|
57
109
|
/**
|
|
58
110
|
* Удаляет черновик и перенаправляет к списку черновиков.
|
|
59
111
|
*/
|
|
60
112
|
protected clearDraft(): void;
|
|
113
|
+
/**
|
|
114
|
+
* Выполняет действие над черновиком Профстрой. Пока действие выполняется, остальные заблокированы.
|
|
115
|
+
* При ошибке показывает текст сервера и перезапрашивает черновик, так как его состояние могло смениться.
|
|
116
|
+
*
|
|
117
|
+
* @param action Функция, возвращающая запрос действия по идентификатору черновика.
|
|
118
|
+
*/
|
|
119
|
+
private runProfstroyAction;
|
|
120
|
+
/**
|
|
121
|
+
* Показывает текст ошибки отказа в доступе. Остальные ошибки показывает перехватчик приложения.
|
|
122
|
+
*
|
|
123
|
+
* @param error Ошибка запроса.
|
|
124
|
+
*/
|
|
125
|
+
private showForbiddenError;
|
|
126
|
+
/**
|
|
127
|
+
* Открывает подтверждение и возвращает {@link Observable}, который выдаёт значение только при согласии.
|
|
128
|
+
*
|
|
129
|
+
* @param label Заголовок.
|
|
130
|
+
* @param content Текст подтверждения.
|
|
131
|
+
* @param yes Текст кнопки согласия.
|
|
132
|
+
*/
|
|
133
|
+
private confirm$;
|
|
134
|
+
/**
|
|
135
|
+
* Обновляет черновик, если пришли данные того же черновика, который открыт сейчас.
|
|
136
|
+
*
|
|
137
|
+
* @param draft Полученные данные черновика.
|
|
138
|
+
*/
|
|
139
|
+
private setDraftIfCurrent;
|
|
140
|
+
/**
|
|
141
|
+
* Обновляет текущий момент по таймеру, пока открыт черновик Профстрой, чтобы истечение срока актуализации отражалось без перезагрузки.
|
|
142
|
+
*/
|
|
143
|
+
private watchProfstroyExpiration;
|
|
144
|
+
/**
|
|
145
|
+
* Пока черновик Профстрой в обработке, опрашивает его состояние лёгким запросом списка и после смены статуса перезапрашивает черновик целиком.
|
|
146
|
+
*/
|
|
147
|
+
private watchProfstroyProcessing;
|
|
61
148
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScDraftComponent, never>;
|
|
62
149
|
static ɵcmp: i0.ɵɵComponentDeclaration<ScDraftComponent, "sc-draft", never, { "draft": { "alias": "draft"; "required": false; "isSignal": true; }; "selectedItemsIds": { "alias": "selectedItemsIds"; "required": false; "isSignal": true; }; }, { "draft": "draftChange"; "selectedItemsIds": "selectedItemsIdsChange"; "deleteEvent": "deleteEvent"; }, never, never, true, never>;
|
|
63
150
|
}
|
package/order/index.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export * from './directives';
|
|
2
2
|
export * from './models/i-new-order-form';
|
|
3
3
|
export * from './models/sc-i-cart-items-by-direction';
|
|
4
|
+
export * from './models/sc-i-order-items-group';
|
|
4
5
|
export * from './order-direction-items/sc-order-direction-items.component';
|
|
5
6
|
export * from './order-form/sc-order-form.config';
|
|
6
7
|
export * from './order-form/sc-order-form.component';
|
|
@@ -8,6 +9,9 @@ export * from './order-item/sc-order-item.component';
|
|
|
8
9
|
export * from './order-items-list/sc-order-items-list.component';
|
|
9
10
|
export * from './order-items-list-by-directions/sc-order-items-list-by-directions.component';
|
|
10
11
|
export * from './order-items-list-by-stock/sc-order-items-list-by-stock.component';
|
|
12
|
+
export * from './draft/helpers/sc-draft-list-helper';
|
|
13
|
+
export * from './draft/models/sc-i-draft-list-item';
|
|
14
|
+
export * from './draft/profstroy';
|
|
11
15
|
export * from './draft/sc-draft.component';
|
|
12
16
|
export * from './sc-payment-status/sc-payment-status.component';
|
|
13
17
|
export * from './sc-order.module';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { ScOrderItem } from '@snabcentr/client-core';
|
|
2
|
+
/**
|
|
3
|
+
* Данные о группе позиций заказа (корзины / черновика).
|
|
4
|
+
*/
|
|
5
|
+
export interface ScIOrderItemsGroup {
|
|
6
|
+
/**
|
|
7
|
+
* Название группы. Пустое, если позиции не группируются.
|
|
8
|
+
*/
|
|
9
|
+
name: string;
|
|
10
|
+
/**
|
|
11
|
+
* Позиции группы.
|
|
12
|
+
*/
|
|
13
|
+
items: ScOrderItem[];
|
|
14
|
+
/**
|
|
15
|
+
* Количество позиций группы, которые могут попасть в заказ.
|
|
16
|
+
*/
|
|
17
|
+
orderableCount: number;
|
|
18
|
+
/**
|
|
19
|
+
* Сумма позиций группы в рублях.
|
|
20
|
+
*/
|
|
21
|
+
sum: number;
|
|
22
|
+
}
|
|
@@ -16,6 +16,10 @@ export declare class ScOrderDirectionItemsComponent {
|
|
|
16
16
|
* Включить выбор позиций чекбоксами.
|
|
17
17
|
*/
|
|
18
18
|
readonly selectable: import("@angular/core").InputSignal<boolean>;
|
|
19
|
+
/**
|
|
20
|
+
* Признак, что цена за единицу берётся из позиции, а не из текущей цены товара.
|
|
21
|
+
*/
|
|
22
|
+
readonly useLinePrice: import("@angular/core").InputSignal<boolean>;
|
|
19
23
|
/**
|
|
20
24
|
* Время обработки и принятия заказов (из настроек окружения приложения).
|
|
21
25
|
*/
|
|
@@ -25,5 +29,5 @@ export declare class ScOrderDirectionItemsComponent {
|
|
|
25
29
|
*/
|
|
26
30
|
readonly selectedItemsIdsChange: import("@angular/core").OutputEmitterRef<string[]>;
|
|
27
31
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScOrderDirectionItemsComponent, never>;
|
|
28
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ScOrderDirectionItemsComponent, "sc-order-direction-items", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "orderProcessingAcceptanceTime": { "alias": "orderProcessingAcceptanceTime"; "required": false; "isSignal": true; }; }, { "selectedItemsIdsChange": "selectedItemsIdsChange"; }, never, ["[footerActions]"], true, never>;
|
|
32
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScOrderDirectionItemsComponent, "sc-order-direction-items", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "useLinePrice": { "alias": "useLinePrice"; "required": false; "isSignal": true; }; "orderProcessingAcceptanceTime": { "alias": "orderProcessingAcceptanceTime"; "required": false; "isSignal": true; }; }, { "selectedItemsIdsChange": "selectedItemsIdsChange"; }, never, ["[footerActions]"], true, never>;
|
|
29
33
|
}
|
|
@@ -22,6 +22,14 @@ export declare class ScOrderItemComponent extends AbstractScPriceCard {
|
|
|
22
22
|
* Признак, что необходимо отобразить элементы редактирования.
|
|
23
23
|
*/
|
|
24
24
|
readonly isShowEditControls: import("@angular/core").InputSignal<boolean>;
|
|
25
|
+
/**
|
|
26
|
+
* Признак, что цена за единицу берётся из позиции, а не из текущей цены товара (например, цена, зафиксированная в заявке).
|
|
27
|
+
*/
|
|
28
|
+
readonly useLinePrice: import("@angular/core").InputSignal<boolean>;
|
|
29
|
+
/**
|
|
30
|
+
* Признак, что позиции, которые не попадут в заказ, помечаются причиной и остаются доступными для изменения количества.
|
|
31
|
+
*/
|
|
32
|
+
readonly markUnavailable: import("@angular/core").InputSignal<boolean>;
|
|
25
33
|
/**
|
|
26
34
|
* Отображает спецификацию.
|
|
27
35
|
*
|
|
@@ -35,5 +43,5 @@ export declare class ScOrderItemComponent extends AbstractScPriceCard {
|
|
|
35
43
|
*/
|
|
36
44
|
protected configuratorHintVisible(visible: boolean): void;
|
|
37
45
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScOrderItemComponent, never>;
|
|
38
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ScOrderItemComponent, "sc-order-item", never, { "isShowEditControls": { "alias": "isShowEditControls"; "required": false; "isSignal": true; }; }, { "clickSettings": "clickSettings"; }, never, never, true, never>;
|
|
46
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScOrderItemComponent, "sc-order-item", never, { "isShowEditControls": { "alias": "isShowEditControls"; "required": false; "isSignal": true; }; "useLinePrice": { "alias": "useLinePrice"; "required": false; "isSignal": true; }; "markUnavailable": { "alias": "markUnavailable"; "required": false; "isSignal": true; }; }, { "clickSettings": "clickSettings"; }, never, never, true, never>;
|
|
39
47
|
}
|
|
@@ -2,6 +2,7 @@ import { FormControl, FormGroup } from '@angular/forms';
|
|
|
2
2
|
import { ScIOrderEditorLoader, ScIOrderLoader, ScOrderItem } from '@snabcentr/client-core';
|
|
3
3
|
import { AbstractScPriceCard } from '../../directives';
|
|
4
4
|
import { ScOrderOptions } from '../directives/sc-order-options';
|
|
5
|
+
import { ScIOrderItemsGroup } from '../models/sc-i-order-items-group';
|
|
5
6
|
import * as i0 from "@angular/core";
|
|
6
7
|
/**
|
|
7
8
|
* Компонент списка товаров корзины, заказа или черновика.
|
|
@@ -20,6 +21,22 @@ export declare class ScOrderItemsListComponent {
|
|
|
20
21
|
* Включить редактирование позиций.
|
|
21
22
|
*/
|
|
22
23
|
readonly editable: import("@angular/core").InputSignal<boolean>;
|
|
24
|
+
/**
|
|
25
|
+
* Функция, возвращающая название группы позиции. Если не задана, позиции выводятся одним списком без заголовков.
|
|
26
|
+
*/
|
|
27
|
+
readonly groupBy: import("@angular/core").InputSignal<((item: ScOrderItem) => string) | null>;
|
|
28
|
+
/**
|
|
29
|
+
* Признак, что позиции, которые не попадут в заказ, помечаются причиной, не выбираются и остаются доступными для изменения.
|
|
30
|
+
*/
|
|
31
|
+
readonly markUnavailable: import("@angular/core").InputSignal<boolean>;
|
|
32
|
+
/**
|
|
33
|
+
* Признак, что цена за единицу берётся из позиции, а не из текущей цены товара.
|
|
34
|
+
*/
|
|
35
|
+
readonly useLinePrice: import("@angular/core").InputSignal<boolean>;
|
|
36
|
+
/**
|
|
37
|
+
* Позиции, разбитые на группы в порядке первого появления группы.
|
|
38
|
+
*/
|
|
39
|
+
protected readonly groups: import("@angular/core").Signal<ScIOrderItemsGroup[]>;
|
|
23
40
|
/**
|
|
24
41
|
* Внутренняя группа формы для выбора позиций.
|
|
25
42
|
*/
|
|
@@ -62,6 +79,11 @@ export declare class ScOrderItemsListComponent {
|
|
|
62
79
|
* Предоставляется родителем через токен {@link SC_DIALOG_SERVICE_TOKEN}.
|
|
63
80
|
*/
|
|
64
81
|
private readonly scDialogService;
|
|
82
|
+
/**
|
|
83
|
+
* Инициализирует экземпляр класса {@link ScOrderItemsListComponent}.
|
|
84
|
+
* Входы выбора и пометки недоступных позиций могут прийти после списка позиций, поэтому при их изменении выбор синхронизируется заново.
|
|
85
|
+
*/
|
|
86
|
+
constructor();
|
|
65
87
|
/**
|
|
66
88
|
* Список элементов корзины (товаров). При установке синхронно обновляет контролы выбора в форме.
|
|
67
89
|
*/
|
|
@@ -105,5 +127,5 @@ export declare class ScOrderItemsListComponent {
|
|
|
105
127
|
*/
|
|
106
128
|
protected openPriceHistoryChartDialog(product: ScOrderItem['product']): void;
|
|
107
129
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScOrderItemsListComponent, never>;
|
|
108
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ScOrderItemsListComponent, "sc-order-items-list", never, { "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; }; }, { "selectedItemsIdsChange": "selectedItemsIdsChange"; }, never, never, true, never>;
|
|
130
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScOrderItemsListComponent, "sc-order-items-list", never, { "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "groupBy": { "alias": "groupBy"; "required": false; "isSignal": true; }; "markUnavailable": { "alias": "markUnavailable"; "required": false; "isSignal": true; }; "useLinePrice": { "alias": "useLinePrice"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; }; }, { "selectedItemsIdsChange": "selectedItemsIdsChange"; }, never, never, true, never>;
|
|
109
131
|
}
|
package/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.d.ts
CHANGED
|
@@ -14,6 +14,10 @@ export declare class ScOrderItemsListByDirectionsComponent {
|
|
|
14
14
|
* Включить редактирование позиций.
|
|
15
15
|
*/
|
|
16
16
|
readonly editable: import("@angular/core").InputSignal<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* Признак, что цена за единицу берётся из позиции, а не из текущей цены товара.
|
|
19
|
+
*/
|
|
20
|
+
readonly useLinePrice: import("@angular/core").InputSignal<boolean>;
|
|
17
21
|
/**
|
|
18
22
|
* Включить отображение кнопки продолжения.
|
|
19
23
|
*/
|
|
@@ -54,5 +58,5 @@ export declare class ScOrderItemsListByDirectionsComponent {
|
|
|
54
58
|
*/
|
|
55
59
|
protected selectedItemsHandler(itemsIds: string[], direction: ScOrderItemsByDirection): void;
|
|
56
60
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScOrderItemsListByDirectionsComponent, never>;
|
|
57
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<ScOrderItemsListByDirectionsComponent, "sc-order-items-list-by-directions", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "showContinueButton": { "alias": "showContinueButton"; "required": false; "isSignal": true; }; "continueButtonText": { "alias": "continueButtonText"; "required": false; "isSignal": true; }; "selectedItemsIds": { "alias": "selectedItemsIds"; "required": false; "isSignal": true; }; }, { "continueClick": "continueClick"; "selectedItemsIds": "selectedItemsIdsChange"; }, never, ["[footerActions]"], true, never>;
|
|
61
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<ScOrderItemsListByDirectionsComponent, "sc-order-items-list-by-directions", never, { "items": { "alias": "items"; "required": true; "isSignal": true; }; "selectable": { "alias": "selectable"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "useLinePrice": { "alias": "useLinePrice"; "required": false; "isSignal": true; }; "showContinueButton": { "alias": "showContinueButton"; "required": false; "isSignal": true; }; "continueButtonText": { "alias": "continueButtonText"; "required": false; "isSignal": true; }; "selectedItemsIds": { "alias": "selectedItemsIds"; "required": false; "isSignal": true; }; }, { "continueClick": "continueClick"; "selectedItemsIds": "selectedItemsIdsChange"; }, never, ["[footerActions]"], true, never>;
|
|
58
62
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@snabcentr/client-ui",
|
|
3
|
-
"version": "4.14.
|
|
3
|
+
"version": "4.14.6-profstroy",
|
|
4
4
|
"author": "Snabcentr Ltd.",
|
|
5
5
|
"repository": "https://gitlab.snabcentr.met/web/angular/snabcentr-client-ui-lib",
|
|
6
6
|
"license": "Commercial",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"@maskito/core": "^3.11.1",
|
|
17
17
|
"@ng-web-apis/intersection-observer": "^4.14.0",
|
|
18
18
|
"@ng-web-apis/common": "^4.14.0",
|
|
19
|
-
"@snabcentr/client-core": "
|
|
19
|
+
"@snabcentr/client-core": "3.21.0-profstroy",
|
|
20
20
|
"@taiga-ui/addon-charts": "^4.66.0",
|
|
21
21
|
"@taiga-ui/addon-commerce": "^4.66.0",
|
|
22
22
|
"@taiga-ui/cdk": "^4.66.0",
|
|
@@ -14,7 +14,7 @@ export declare class ScFormatDatePipe implements PipeTransform {
|
|
|
14
14
|
* @param timeString - Строка времени.
|
|
15
15
|
* @returns Форматированная дата и время.
|
|
16
16
|
*/
|
|
17
|
-
transform(timeString?: string): string | undefined;
|
|
17
|
+
transform(timeString?: string | Date): string | undefined;
|
|
18
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<ScFormatDatePipe, never>;
|
|
19
19
|
static ɵpipe: i0.ɵɵPipeDeclaration<ScFormatDatePipe, "scFormatDate", true>;
|
|
20
20
|
}
|
|
@@ -3,4 +3,4 @@ import { InjectionToken } from '@angular/core';
|
|
|
3
3
|
* Токен для функции форматирования даты и времени.
|
|
4
4
|
* По умолчанию используется формат 'DD.MM.YYYY HH:MM'.
|
|
5
5
|
*/
|
|
6
|
-
export declare const SC_DATE_FORMATTER: InjectionToken<(date: string) => string>;
|
|
6
|
+
export declare const SC_DATE_FORMATTER: InjectionToken<(date: string | Date) => string>;
|
package/release_notes.tmp
CHANGED
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
## 4.14.
|
|
1
|
+
## 4.14.6-profstroy (2026-09-24)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
- [#13914: Исправлено перелистывание баннеров свайпом и возвращены кнопки навигации](web_soft/libs/angular/snabcentr-client-ui-lib@d6f87bc5ceafc183998f38947213c66fe729c1ef) ([merge request](web_soft/libs/angular/snabcentr-client-ui-lib!449))
|
|
3
|
+
No changes.
|
|
6
4
|
|