mdt-client 31.3.30 → 31.3.31
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/package.json +1 -1
- package/types/common/form/tabs/TabsFormExtenderOptions.d.ts +12 -0
- package/types/common/list/aggregation/AggregayionTypes.d.ts +2 -0
- package/types/common/list/cacheUpdateTime/CacheUpdateTimePublicOptions.d.ts +6 -0
- package/types/common/list/cellControlExtender/CellControlExtender.d.ts +1 -0
- package/types/common/list/columnMenu/ColumnMenuOptions.d.ts +17 -0
- package/types/common/list/columnMenu/QuickFilterOptions.d.ts +7 -0
- package/types/common/list/columnMenu/ValuesFilterOptions.d.ts +24 -0
- package/types/common/list/form/FormListPublicOptions.d.ts +40 -0
- package/types/common/list/gallery/GalleryListExtenderPublicOptions.d.ts +11 -0
- package/types/common/list/group/groupTypes.d.ts +119 -86
- package/types/common/list/historyType/HistoryTypeListExtenderOptions.d.ts +3 -0
- package/types/common/list/labelStyle/LabelStylePublicOptions.d.ts +6 -0
- package/types/common/list/legend/LegendListExtenderOptions.d.ts +8 -0
- package/types/common/list/listView/ListViewListExtenderOptions.d.ts +25 -0
- package/types/common/list/namedFilter/InMemoryNamedFilterOptions.d.ts +23 -0
- package/types/common/list/namedFilter/NamedFilterListExtenderPublicOptions.d.ts +29 -0
- package/types/common/list/reorder/ReorderListExtenderPublicOptions.d.ts +4 -0
- package/types/common/list/select/SelectPublicOptions.d.ts +18 -0
- package/types/common/list/styleField/StyleFieldListExtenderPublicOptions.d.ts +3 -0
- package/types/common/list/toolbar/ToolbarPublicOptions.d.ts +22 -0
- package/types/common/list/virtualScroll/VIrtualScrollPublicOptions.d.ts +7 -0
- package/types/components/textWithIcon/textWithIconOptions.d.ts +17 -0
- package/types/data/fieldFilter/ToolbarFieldFilterOptions.d.ts +21 -0
- package/types/helpers/dateUtils.d.ts +23 -0
- package/types/services/api/Query.d.ts +1 -1
- package/types/services/customModules/facades/Form/IFormFacade.d.ts +2 -1
- package/types/services/customModules/facades/ILegacyFacade.d.ts +12 -0
- package/types/services/customModules/facades/List/IListCellFacade.d.ts +1 -1
- package/types/services/customModules/facades/List/IListControlFacade.d.ts +1 -1
- package/types/services/customModules/facades/List/IListServiceFacade.d.ts +26 -7
- package/types/services/customModules/facades/List/ListOptions/IListOptions.d.ts +4 -0
- package/types/services/customModules/facades/internalModules/importModuleFacade.d.ts +5 -0
- package/types/services/customModules/facades/schema/IObjectFacade.d.ts +6 -1
- package/types/services/customModules/facades/schema/ISchemaFacade.d.ts +15 -2
- package/types/services/customModules/facades/schema/fieldBuilder/fieldBuilder/IFieldBuilder.d.ts +23 -0
- package/types/services/customModules/facades/schema/fieldBuilder/fieldFkBuilder/IFieldFkBuilder.d.ts +8 -0
- package/types/services/customModules/facades/services/INavigationFacade.d.ts +5 -1
- package/types/services/customModules/facades/utils/IApiFacade.d.ts +1 -1
- package/types/services/customModules/facades/utils/IUiComponentsFacade.d.ts +56 -0
- package/types/services/customModules/facades/utils/IUtilsFacade.d.ts +199 -1
- package/types/services/customModules/facades/utils/ImUtilsFacade.d.ts +16 -0
- package/types/views/form/schema/FormPageExtOptions.schema.d.ts +22 -0
- package/types/views/gallery/ImageFetchOptions.d.ts +5 -0
- package/types/views/list/features/aggregation/AggregationRowListOptions.d.ts +23 -0
- package/types/views/list/schema/ListPageExtOptions.schema.d.ts +123 -0
- package/types/views/list/schema/ListPageOptions.schema.d.ts +10 -0
- package/types/views/page/charts/ChartControlOptions.schema.d.ts +82 -6
- package/types/views/page/charts/facade/I/320/241hartControlFacade.d.ts +0 -24
- /package/types/views/list/{IListView.d.ts → ListViewOptions.d.ts} +0 -0
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { MdtRecord } from "mdtScripts/common/Record";
|
|
2
|
+
import { ButtonFacade } from "./Form/IFormFacade";
|
|
1
3
|
/** @deprecated */
|
|
2
4
|
export interface ILegacyFacade {
|
|
3
5
|
SchemaManagerInstance: any;
|
|
@@ -187,4 +189,14 @@ export interface ModulesLegacyFacade {
|
|
|
187
189
|
JobHelper: any;
|
|
188
190
|
};
|
|
189
191
|
ExportApiAccessor?: any;
|
|
192
|
+
password?: {
|
|
193
|
+
buttons: {
|
|
194
|
+
changePassword: (args: {
|
|
195
|
+
mdtPrincipalRecord: MdtRecord;
|
|
196
|
+
}) => ButtonFacade;
|
|
197
|
+
sendInvitation: (args: {
|
|
198
|
+
mdtPrincipalRecord: MdtRecord;
|
|
199
|
+
}) => ButtonFacade;
|
|
200
|
+
};
|
|
201
|
+
};
|
|
190
202
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ViewElement } from "../../../../helpers/types";
|
|
2
|
-
import { ILayoutColumnBase, LayoutColumnValued } from "../../../../views/list/
|
|
2
|
+
import { ILayoutColumnBase, LayoutColumnValued } from "../../../../views/list/ListViewOptions";
|
|
3
3
|
import { IListComponentFacade } from "./IListComponentFacade";
|
|
4
4
|
export interface IListCellFacade extends IListComponentFacade {
|
|
5
5
|
col: ILayoutColumnBase & LayoutColumnValued;
|
|
@@ -6,7 +6,7 @@ import { IListCellFacade } from "./IListCellFacade";
|
|
|
6
6
|
import { IObjectFacade } from "../schema/IObjectFacade";
|
|
7
7
|
import { ListPageOptions } from "../../../../views/list/schema/ListPageOptions.schema";
|
|
8
8
|
import { FieldCode, FieldPath, ViewElement } from "../../../../helpers/types";
|
|
9
|
-
import { ILayoutColumnBase } from "../../../../views/list/
|
|
9
|
+
import { ILayoutColumnBase } from "../../../../views/list/ListViewOptions";
|
|
10
10
|
import { ClassNamesArg } from "mdtScripts/helpers/utils/classNames";
|
|
11
11
|
import { IColumnFacade } from "./Column/IColumnFacade";
|
|
12
12
|
import { RecordValueFacade } from "../record/IRecordFacade";
|
|
@@ -3,13 +3,15 @@ import { Field } from "../../../../../scripts/common/Field";
|
|
|
3
3
|
import { ObjectCode, ViewControl } from "../../../../helpers/types";
|
|
4
4
|
import { MdtRecord } from "../utils/IApiFacade";
|
|
5
5
|
import { IListControlFacade } from "./IListControlFacade";
|
|
6
|
+
import { IListExtOptions, IListOptions } from "./ListOptions/IListOptions";
|
|
7
|
+
import { IBaseFieldBuilder } from "../schema/fieldBuilder/fieldBuilder/IFieldBuilder";
|
|
6
8
|
export interface IListInitOptions {
|
|
7
9
|
/** Уникальный код списка */
|
|
8
10
|
code?: string;
|
|
9
11
|
/** Опции списка */
|
|
10
|
-
listOptions?:
|
|
12
|
+
listOptions?: IListOptions;
|
|
11
13
|
/** Настройки расширений списка */
|
|
12
|
-
extConfig?:
|
|
14
|
+
extConfig?: IListExtOptions;
|
|
13
15
|
}
|
|
14
16
|
export interface IListServiceFacade {
|
|
15
17
|
/** Переопределить опции и настройки компонента перед его инициализацией */
|
|
@@ -35,19 +37,36 @@ export interface IListServiceFacade {
|
|
|
35
37
|
export interface IListExtenderFacade<T> extends Partial<ViewControl> {
|
|
36
38
|
new (list: IListControlFacade, options: any): T;
|
|
37
39
|
}
|
|
40
|
+
export interface CustomListSaveOptions<R = MdtRecord> {
|
|
41
|
+
changedRecord: R;
|
|
42
|
+
oldRecord?: R;
|
|
43
|
+
}
|
|
38
44
|
export interface CustomListOptions<R = MdtRecord> {
|
|
39
45
|
/** Код объекта списка */
|
|
40
46
|
code: ObjectCode;
|
|
41
|
-
/** Поля списка
|
|
42
|
-
|
|
47
|
+
/** Поля списка
|
|
48
|
+
* @example Примеры
|
|
49
|
+
*
|
|
50
|
+
* ```js
|
|
51
|
+
* fields: [
|
|
52
|
+
* Schema.customField("Name", "string", "Имя").length(10),
|
|
53
|
+
* Schema.customField("Age", "number", "Возраст").length(10),
|
|
54
|
+
* Schema.customFkField("Customer", "md.Customer", "Клиент").nullable()
|
|
55
|
+
* ],
|
|
56
|
+
*
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
fields: (Field | IBaseFieldBuilder)[];
|
|
43
60
|
/**
|
|
44
61
|
* Записи списка
|
|
62
|
+
* @deprecated
|
|
63
|
+
* Используйте fetch() вместо этого
|
|
45
64
|
*/
|
|
46
65
|
records?: R[];
|
|
47
66
|
/** Опции списка */
|
|
48
|
-
listOptions?:
|
|
67
|
+
listOptions?: IListOptions;
|
|
49
68
|
/** Настройки расширений списка */
|
|
50
|
-
extConfig?:
|
|
69
|
+
extConfig?: IListExtOptions;
|
|
51
70
|
/** Функция для получения записей списка с возможностью обновления данных или использования пользовательского API */
|
|
52
|
-
fetch?: (query: ApiV2.Request.Fetch | ApiV2.Request.Fetch[]) => Promise<
|
|
71
|
+
fetch?: (query: ApiV2.Request.Fetch | ApiV2.Request.Fetch[]) => Promise<R[]>;
|
|
53
72
|
}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { ListPageExtOptions } from "mdtScripts/views/list/schema/ListPageExtOptions.schema";
|
|
2
|
+
import { ListPageOptions } from "mdtScripts/views/list/schema/ListPageOptions.schema";
|
|
3
|
+
export declare type IListExtOptions = ListPageExtOptions;
|
|
4
|
+
export declare type IListOptions = ListPageOptions;
|
|
@@ -42,6 +42,11 @@ export interface ImportFormSkipRequired {
|
|
|
42
42
|
}
|
|
43
43
|
export interface ImportFormOptions extends PredefinedValues, ImportFormSkipRequired {
|
|
44
44
|
onSuccessfullyCompleted?: () => void;
|
|
45
|
+
mapping?: ImportMappingDisableKeySelection;
|
|
46
|
+
}
|
|
47
|
+
export interface ImportMappingDisableKeySelection {
|
|
48
|
+
/** Отключить возможность выбора ключевых полей при импорте */
|
|
49
|
+
disableKeySelection?: boolean;
|
|
45
50
|
}
|
|
46
51
|
export interface ImportManagerImportOptions {
|
|
47
52
|
onSuccessfullyCompleted: () => void;
|
|
@@ -9,7 +9,12 @@ export interface IObjectFacade {
|
|
|
9
9
|
getDefaultField(): IFieldFacade | undefined;
|
|
10
10
|
getObject(): Table;
|
|
11
11
|
isReadonly(): boolean;
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* Получить поле по коду
|
|
14
|
+
* @param code - код поля
|
|
15
|
+
* @param allowNotFound - Если true, возвращает undefined при отсутствии поля, вместо выброса ошибки
|
|
16
|
+
*/
|
|
17
|
+
getField(code: string, allowNotFound?: boolean): IFieldFacade | undefined;
|
|
13
18
|
getId(): ObjectId | undefined;
|
|
14
19
|
getFields(): IFieldFacade[];
|
|
15
20
|
}
|
|
@@ -1,11 +1,24 @@
|
|
|
1
1
|
import { IFieldSettings } from "./IFieldFacade";
|
|
2
2
|
import { IObjectFacade } from "./IObjectFacade";
|
|
3
|
+
import { BaseBuilderTypes } from "./fieldBuilder/fieldBuilder/IFieldBuilder";
|
|
4
|
+
import { IFieldFkBuilder } from "./fieldBuilder/fieldFkBuilder/IFieldFkBuilder";
|
|
3
5
|
declare const allFieldPhysicalTypes: readonly ["bigint", "binary", "bit", "char", "date", "datetime", "datetime2", "datetimeoffset", "decimal", "float", "geography", "geometry", "hierarchyid", "image", "int", "money", "nchar", "ntext", "numeric", "nvarchar", "real", "smalldatetime", "smallint", "smallmoney", "sql_variant", "sysname", "text", "time", "timestamp", "tinyint", "uniqueidentifier", "varbinary", "varchar", "xml"];
|
|
6
|
+
export declare const allFieldLogicalTypes: readonly ["number", "money", "long", "string", "date", "time", "datetime", "boolean", "image", "icon", "secret", "identifier", "url", "xml", "markdown", "query", "etl", "json"];
|
|
4
7
|
export declare type FieldPhysicalType = typeof allFieldPhysicalTypes[number];
|
|
8
|
+
export declare type FieldLogicalType = typeof allFieldLogicalTypes[number];
|
|
9
|
+
export declare type FieldType = FieldPhysicalType | FieldLogicalType;
|
|
5
10
|
export interface ISchemaFacade {
|
|
6
|
-
/**
|
|
7
|
-
|
|
11
|
+
/**
|
|
12
|
+
* Получить объект по коду или по ID
|
|
13
|
+
* @param idOrCode - код или ID объекта для поиска
|
|
14
|
+
* @param allowNotFound - Если true, возвращает undefined при отсутствии объекта, вместо выброса ошибки
|
|
15
|
+
*/
|
|
16
|
+
getObject(idOrCode: string | number, allowNotFound?: boolean): IObjectFacade;
|
|
8
17
|
/** Установить настройки для поля */
|
|
9
18
|
setFieldSettings(objectCode: string, settings: Record<string, IFieldSettings>): void;
|
|
19
|
+
/** Создать кастомное поле */
|
|
20
|
+
customField<T extends FieldType>(code: string, type: T, title?: string): BaseBuilderTypes[T];
|
|
21
|
+
/** Создать кастомное FK поле */
|
|
22
|
+
customFkField(code: string, refTableCode: string, title?: string): IFieldFkBuilder;
|
|
10
23
|
}
|
|
11
24
|
export {};
|
package/types/services/customModules/facades/schema/fieldBuilder/fieldBuilder/IFieldBuilder.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Field } from "mdtScripts/common/Field";
|
|
2
|
+
import { FieldType } from "../../ISchemaFacade";
|
|
3
|
+
export interface IFieldBuilder {
|
|
4
|
+
toJson(): Field;
|
|
5
|
+
}
|
|
6
|
+
export interface IBaseFieldBuilder extends IFieldBuilder {
|
|
7
|
+
description(description: string): this;
|
|
8
|
+
nullable(): this;
|
|
9
|
+
primary(): this;
|
|
10
|
+
unique(): this;
|
|
11
|
+
readonly(): this;
|
|
12
|
+
defaultValue(defaultValue: string | number | boolean | Date): this;
|
|
13
|
+
}
|
|
14
|
+
export interface IStringFieldBuilder extends IBaseFieldBuilder {
|
|
15
|
+
length(length: number): this;
|
|
16
|
+
}
|
|
17
|
+
export interface INumberFieldBuilder extends IBaseFieldBuilder {
|
|
18
|
+
identity(): this;
|
|
19
|
+
}
|
|
20
|
+
export interface BaseBuilderTypes extends Record<FieldType, IBaseFieldBuilder> {
|
|
21
|
+
string: IStringFieldBuilder;
|
|
22
|
+
int: INumberFieldBuilder;
|
|
23
|
+
}
|
package/types/services/customModules/facades/schema/fieldBuilder/fieldFkBuilder/IFieldFkBuilder.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { IFieldBuilder } from "../fieldBuilder/IFieldBuilder";
|
|
2
|
+
export interface IFieldFkBuilder extends IFieldBuilder {
|
|
3
|
+
description(description: string): this;
|
|
4
|
+
nullable(): this;
|
|
5
|
+
unique(): this;
|
|
6
|
+
readonly(): this;
|
|
7
|
+
defaultValue(defaultValue: string | number | boolean | Date): this;
|
|
8
|
+
}
|
|
@@ -62,6 +62,8 @@ export interface CustomNavNode {
|
|
|
62
62
|
controlCode?: NavNodeControl | string;
|
|
63
63
|
/** Настройки контрола */
|
|
64
64
|
controlTemplate?: Record<string, any>;
|
|
65
|
+
/** Контрол для страницы */
|
|
66
|
+
pageControl?: Function;
|
|
65
67
|
}
|
|
66
68
|
export interface NavigationNodeFacade {
|
|
67
69
|
code?: string;
|
|
@@ -82,6 +84,8 @@ interface CustomNavNodeValue {
|
|
|
82
84
|
style?: string;
|
|
83
85
|
/** Иконка значения узла */
|
|
84
86
|
icon?: string;
|
|
87
|
+
/** Текст появляющийся при наведении на счетчик. Поддерживается markdown */
|
|
88
|
+
tooltip?: string;
|
|
85
89
|
}
|
|
86
|
-
declare type NavNodeControl = "ListCtrl" | "FormCtrl" | "FkPanelsPage" | "dashboard" | "FirstRecordCtrl";
|
|
90
|
+
export declare type NavNodeControl = "ListCtrl" | "FormCtrl" | "FkPanelsPage" | "dashboard" | "FirstRecordCtrl";
|
|
87
91
|
export {};
|
|
@@ -19,6 +19,7 @@ import { ChartFormControlFacadeOptions, IChartControlFacade } from "../../../../
|
|
|
19
19
|
import { CodeEditorFacade, CodeEditorFacadeOptions } from "../components/CodeEditorFacade";
|
|
20
20
|
import { ButtonFacade } from "../Form/IFormFacade";
|
|
21
21
|
import { TabularListSettings } from "../../../../views/list/tabular/TabularListTypes";
|
|
22
|
+
import { TextWithIconOptions } from "mdtScripts/components/textWithIcon/textWithIconOptions";
|
|
22
23
|
export interface IUiComponentsFacade {
|
|
23
24
|
button(button: ButtonFacade, translate?: boolean): ViewElement;
|
|
24
25
|
topNavButton(options: TopNavButton): _mithril.MithrilVirtualElement;
|
|
@@ -66,6 +67,61 @@ export interface IUiComponentsFacade {
|
|
|
66
67
|
}): MithrilControl & {
|
|
67
68
|
getListCtrl(): any;
|
|
68
69
|
};
|
|
70
|
+
/**
|
|
71
|
+
* Компонент для отображения разницы между датами.
|
|
72
|
+
*
|
|
73
|
+
* @param date дата события
|
|
74
|
+
* @param base базовая дата относительно которой вычисляется разница во времени. По умолчанию - текущая дата
|
|
75
|
+
*
|
|
76
|
+
* @example
|
|
77
|
+
* **Пример**
|
|
78
|
+
*
|
|
79
|
+
* ```js
|
|
80
|
+
* const startDate = new Date("2024-01-01");
|
|
81
|
+
* const endDate = new Date("2024-01-03");
|
|
82
|
+
* Ui.userFriendlyDatesDistance(startDate);
|
|
83
|
+
* // Результат: "2 дня назад"
|
|
84
|
+
* ```
|
|
85
|
+
*
|
|
86
|
+
* При наведении курсора отображается точная дата и время
|
|
87
|
+
*/
|
|
88
|
+
userFriendlyDatesDistance(date: Date, base?: Date): ViewElement;
|
|
89
|
+
/**
|
|
90
|
+
* Выводит иконку и текст с базовым отступом для консистентности системы
|
|
91
|
+
*
|
|
92
|
+
* @param options параметры для создания элемента с иконкой и текстом
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* **Примеры**
|
|
96
|
+
*
|
|
97
|
+
* Создать элемент с иконкой и простым текстом:
|
|
98
|
+
* ```js
|
|
99
|
+
* Ui.textWithIcon({
|
|
100
|
+
* icon: { name: "check" },
|
|
101
|
+
* textContent: { text: "Успешно выполнено" }
|
|
102
|
+
* });
|
|
103
|
+
* ```
|
|
104
|
+
*
|
|
105
|
+
* Создать элемент с иконкой и текстом с дополнительными стилями:
|
|
106
|
+
* ```js
|
|
107
|
+
*Ui.textWithIcon({
|
|
108
|
+
*icon: {
|
|
109
|
+
* name: "warning",
|
|
110
|
+
* options: {
|
|
111
|
+
* className: "icon-warning",
|
|
112
|
+
* animate: "flash",
|
|
113
|
+
* tooltip: "Внимание!"
|
|
114
|
+
* }
|
|
115
|
+
*},
|
|
116
|
+
*textContent: {
|
|
117
|
+
* text: "Ошибка загрузки",
|
|
118
|
+
* className: "error-text",
|
|
119
|
+
* attrs: { style: "color: red; font-weight: bold;" }
|
|
120
|
+
*}
|
|
121
|
+
*});
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
textWithIcon(options: TextWithIconOptions): ViewElement;
|
|
69
125
|
}
|
|
70
126
|
export interface IProcessFormBlockOptions {
|
|
71
127
|
title: string;
|
|
@@ -6,11 +6,80 @@ import { AnyObject } from "../../../../helpers/types";
|
|
|
6
6
|
import { EventEmitter } from "../../../../helpers/events/EventEmitter";
|
|
7
7
|
import { Pipeline } from "../../../../helpers/pipeline/Pipeline";
|
|
8
8
|
import { ImmutableArgPipeline } from "../../../../helpers/pipeline/ImmutableArgPipeline";
|
|
9
|
+
import { MdtDateStringFormat } from "mdtScripts/helpers/dateUtils";
|
|
9
10
|
export interface IUtilsFacade {
|
|
10
11
|
ListButtonExtendPipelineService: IListButtonExtendPipelineService;
|
|
12
|
+
/**
|
|
13
|
+
* Переводит текст по ключу из таблицы с локализацией
|
|
14
|
+
*
|
|
15
|
+
* @example Примеры
|
|
16
|
+
*
|
|
17
|
+
* ```js
|
|
18
|
+
* const text = Utils.getText("Save");
|
|
19
|
+
* // text: "Сохранить" (в зависимости от языка)
|
|
20
|
+
*
|
|
21
|
+
* // Допустим есть ключ "Поле {field} отсутствует в таблице {table}"
|
|
22
|
+
* const field = "MDT_FlagActive";
|
|
23
|
+
* const table = "md.Customer"
|
|
24
|
+
* const text = Utils.getText("Field `{field}` is missing in table `{table}`", { field, table });
|
|
25
|
+
* // text: "Поле `MDT_FlagActive` отсутствует в таблице `md.Customer`"
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
11
28
|
getText(textCode: string, args?: AnyObject, complex?: true): string;
|
|
29
|
+
/**
|
|
30
|
+
* Форматирует значение
|
|
31
|
+
* - type: "number" - форматирует как число
|
|
32
|
+
* - type: "date" - форматирует как дату
|
|
33
|
+
*
|
|
34
|
+
* @param value Значение
|
|
35
|
+
* @param options Опции форматирования
|
|
36
|
+
*
|
|
37
|
+
* @example Примеры
|
|
38
|
+
*
|
|
39
|
+
* ```js
|
|
40
|
+
* // форматирование даты
|
|
41
|
+
* const today = new Date();
|
|
42
|
+
* const formattedValue = Utils.format(today, { type: "date" });
|
|
43
|
+
* // formattedValue: "01.01.2024"
|
|
44
|
+
*
|
|
45
|
+
* // форматирование числа
|
|
46
|
+
* const formattedValue = Utils.format(123456.789, { type: "number" });
|
|
47
|
+
* // formattedValue: "123 456,79"
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
12
50
|
format(value: any, options?: FormatOptions): any;
|
|
51
|
+
/**
|
|
52
|
+
* Генерирует GUID
|
|
53
|
+
*
|
|
54
|
+
* @example Примеры
|
|
55
|
+
*
|
|
56
|
+
* ```js
|
|
57
|
+
* const guid = Utils.guid();
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
13
60
|
guid(): string;
|
|
61
|
+
/**
|
|
62
|
+
* Получает значение из localStorage
|
|
63
|
+
*
|
|
64
|
+
* @param key Ключ
|
|
65
|
+
* @param defaultValue Значение по умолчанию
|
|
66
|
+
*
|
|
67
|
+
* @example Примеры
|
|
68
|
+
*
|
|
69
|
+
* ```js
|
|
70
|
+
* const storage = Utils.getStorageItem("feature-name", "default");
|
|
71
|
+
*
|
|
72
|
+
* // Если не было ранее значения
|
|
73
|
+
* const v = storage.get(); // "default"
|
|
74
|
+
*
|
|
75
|
+
* // Если было ранее значение
|
|
76
|
+
* storage.set("value");
|
|
77
|
+
* const v = storage.get(); // "value"
|
|
78
|
+
*
|
|
79
|
+
* // Очистка значения
|
|
80
|
+
* storage.clear();
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
14
83
|
getStorageItem<T>(key: string, defaultValue?: T): KeyStorage<T>;
|
|
15
84
|
/**
|
|
16
85
|
* Скачать файл по url
|
|
@@ -18,9 +87,138 @@ export interface IUtilsFacade {
|
|
|
18
87
|
* Увеличить лимит времени загрузки можно с помощью глобальной переменной mdt.file.download.timeLimit
|
|
19
88
|
*/
|
|
20
89
|
downloadFile(url: string): void;
|
|
90
|
+
/**
|
|
91
|
+
*
|
|
92
|
+
* @example Примеры
|
|
93
|
+
*
|
|
94
|
+
* ```js
|
|
95
|
+
* const value1 = getValued(123), // 123
|
|
96
|
+
* const value2 = getValued(() => 123), // 123
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
21
99
|
getValued: typeof getValued;
|
|
22
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Объединяет два объекта в один. Не мутирует исходные объекты.
|
|
102
|
+
*
|
|
103
|
+
* @param object1 Первый объект
|
|
104
|
+
* @param object2 Второй объект
|
|
105
|
+
*
|
|
106
|
+
* @example Примеры
|
|
107
|
+
*
|
|
108
|
+
* ```js
|
|
109
|
+
* const object1 = { a: 1, b: 2 };
|
|
110
|
+
* const object2 = { b: 3, c: 4 };
|
|
111
|
+
* const result = Utils.mergeDeep(object1, object2);
|
|
112
|
+
* // result: { a: 1, b: 3, c: 4 }
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
mergeDeep<T = AnyObject>(object1: T, object2: T): AnyObject;
|
|
116
|
+
/**
|
|
117
|
+
* Удаляет элемент из массива (первое вхождение).
|
|
118
|
+
*
|
|
119
|
+
* @param array Массив, из которого нужно удалить элемент
|
|
120
|
+
* @param item Элемент, который нужно удалить
|
|
121
|
+
* @example Примеры
|
|
122
|
+
|
|
123
|
+
* ```js
|
|
124
|
+
* const array = [1, 2, 3, 2];
|
|
125
|
+
* Utils.deleteFromArray(array, 2);
|
|
126
|
+
* // array теперь: [1, 3, 2]
|
|
127
|
+
* ```
|
|
128
|
+
*/
|
|
129
|
+
deleteFromArray<T>(array: T[], item: T): void;
|
|
130
|
+
/**
|
|
131
|
+
* Проверяет, является ли примитивное значение пустым (null, undefined).
|
|
132
|
+
*
|
|
133
|
+
* @param value Проверяемое значение
|
|
134
|
+
*
|
|
135
|
+
* @example Примеры
|
|
136
|
+
*
|
|
137
|
+
* ```js
|
|
138
|
+
* Utils.isEmpty(""); // true
|
|
139
|
+
* Utils.isEmpty(null); // true
|
|
140
|
+
* Utils.isEmpty(0); // false
|
|
141
|
+
* Utils.isEmpty("текст"); // false
|
|
142
|
+
* Utils.isEmpty([1,2]); // false
|
|
143
|
+
* ```
|
|
144
|
+
*/
|
|
145
|
+
isEmpty(value: unknown): boolean;
|
|
146
|
+
date: {
|
|
147
|
+
/**
|
|
148
|
+
* Преобразует строку даты из строкового формата в объект Date.
|
|
149
|
+
*
|
|
150
|
+
* @param dateString Строка даты в формате "дд.мм.гггг" или "дд.мм.гггг чч:мм:сс"
|
|
151
|
+
*
|
|
152
|
+
* @example Примеры
|
|
153
|
+
*
|
|
154
|
+
* ```js
|
|
155
|
+
* const date = Utils.date.stringDateToDate("01.02.2024");
|
|
156
|
+
* ```
|
|
157
|
+
*/
|
|
158
|
+
stringDateToDate(dateString: MdtDateStringFormat): Date;
|
|
159
|
+
/**
|
|
160
|
+
* Преобразует объект Date в строку формата "дд.мм.гггг" или "дд.мм.гггг чч:мм:сс".
|
|
161
|
+
*
|
|
162
|
+
* @param date Объект Date
|
|
163
|
+
*
|
|
164
|
+
* @example Примеры
|
|
165
|
+
*
|
|
166
|
+
* ```js
|
|
167
|
+
* Utils.date.dateToStringDate(new Date(2024, 0, 2)); // "02.01.2024"
|
|
168
|
+
* Utils.date.dateToStringDate(new Date(2024, 0, 2, 10, 30, 0)); // "02.01.2024 10:30:00"
|
|
169
|
+
* ```
|
|
170
|
+
*/
|
|
171
|
+
dateToStringDate(date: Date, withTime: boolean): string;
|
|
172
|
+
/**
|
|
173
|
+
* Преобразует объект Date в строку формата ISO8601 ("гггг-мм-дд").
|
|
174
|
+
*
|
|
175
|
+
* @param date Объект Date
|
|
176
|
+
*
|
|
177
|
+
* @example Примеры
|
|
178
|
+
*
|
|
179
|
+
* ```js
|
|
180
|
+
* Utils.date.dateToISO8601(new Date(2024, 0, 2)); // "2024-01-02"
|
|
181
|
+
* ```
|
|
182
|
+
*/
|
|
183
|
+
dateToISO8601(date: Date): string;
|
|
184
|
+
/**
|
|
185
|
+
* Проверяет, равны ли две даты.
|
|
186
|
+
*
|
|
187
|
+
* @param date1 Первая дата
|
|
188
|
+
* @param date2 Вторая дата
|
|
189
|
+
* @param options Опции сравнения (например, ignoreTime — игнорировать время)
|
|
190
|
+
*
|
|
191
|
+
* @example Примеры
|
|
192
|
+
*
|
|
193
|
+
* ```js
|
|
194
|
+
* Utils.date.isDateEqual(new Date(2024, 0, 2), new Date(2024, 0, 2)); // true
|
|
195
|
+
* Utils.date.isDateEqual(new Date(2024, 0, 2, 10), new Date(2024, 0, 2, 15), { ignoreTime: true }); // true
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
isDateEqual(date1: Date, date2: Date, options?: IsDateEqualOptions): boolean;
|
|
199
|
+
};
|
|
200
|
+
/**
|
|
201
|
+
* Позволяет определять события, подписываться на них и вызывать
|
|
202
|
+
*
|
|
203
|
+
* @example Примеры
|
|
204
|
+
*
|
|
205
|
+
* ```typescript
|
|
206
|
+
* interface Events {
|
|
207
|
+
* "custom-event": { data: string }
|
|
208
|
+
* }
|
|
209
|
+
*
|
|
210
|
+
* const eventEmitter = new EventEmitter<Events>();
|
|
211
|
+
* // Подписка на событие
|
|
212
|
+
* eventEmitter.on("custom-event", (data) => console.log(data));
|
|
213
|
+
* // Вызов события
|
|
214
|
+
* eventEmitter.emit("custom-event", { data: "data" }); // выведет "data"
|
|
215
|
+
*
|
|
216
|
+
* ```
|
|
217
|
+
*/
|
|
23
218
|
EventEmitter: typeof EventEmitter;
|
|
24
219
|
Pipeline: typeof Pipeline;
|
|
25
220
|
ImmutableArgPipeline: typeof ImmutableArgPipeline;
|
|
26
221
|
}
|
|
222
|
+
export declare type IsDateEqualOptions = {
|
|
223
|
+
ignoreTime?: boolean;
|
|
224
|
+
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/// <reference types="../../../../mithril" />
|
|
2
2
|
/// <reference types="mithril" />
|
|
3
|
+
import { ClassNamesArg } from "mdtScripts/helpers/utils/classNames";
|
|
3
4
|
import { MithrilControl } from "../../../../helpers/types";
|
|
4
5
|
export declare type ConfigFunction = (element: HTMLElement, isInitialized: boolean, context?: any) => void;
|
|
5
6
|
export interface ImUtilsFacade {
|
|
@@ -23,4 +24,19 @@ export interface ImUtilsFacade {
|
|
|
23
24
|
}, attr?: string, value?: string, op?: boolean): void;
|
|
24
25
|
/** Проверить наличие view у компонента */
|
|
25
26
|
hasView(ctrl: MithrilControl): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Формирует строку CSS-классов из набора аргументов (строки, объекты, массивы).
|
|
29
|
+
*
|
|
30
|
+
* @param args Список классов, объектов или массивов, которые будут объединены в одну строку
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* Utils.classNames('foo', 'bar'); // 'foo bar'
|
|
34
|
+
* Utils.classNames('foo', { bar: true }); // 'foo bar'
|
|
35
|
+
* Utils.classNames({ 'foo-bar': true }); // 'foo-bar'
|
|
36
|
+
* Utils.classNames({ 'foo-bar': false }); // ''
|
|
37
|
+
* Utils.classNames({ foo: true }, { bar: true }); // 'foo bar'
|
|
38
|
+
* Utils.classNames('foo', { bar: true, duck: false }, 'baz', { quux: true }); // 'foo bar baz quux'
|
|
39
|
+
* Utils.classNames(null, false, 'bar', undefined, 0, { baz: null }, ''); // 'bar'
|
|
40
|
+
*/
|
|
41
|
+
classNames(...args: ClassNamesArg[]): string;
|
|
26
42
|
}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { TabsFormExtenderPublicOptions } from "mdtScripts/common/form/tabs/TabsFormExtenderOptions";
|
|
2
|
+
export interface FormPageExtOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Вкладки на форме
|
|
5
|
+
*/
|
|
6
|
+
tabs?: TabsFormExtenderPublicOptions;
|
|
7
|
+
/**
|
|
8
|
+
* Добавляет блок с вложениями на форму
|
|
9
|
+
*
|
|
10
|
+
* Для работы необходимо o2m-поле на таблицу со ссылкой на mdt.File
|
|
11
|
+
*
|
|
12
|
+
* @default false
|
|
13
|
+
*/
|
|
14
|
+
attachment?: boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Выводит дату создания и имя автора записи при наличии специальных полей (MDT_DateCreate и MDT_ID_PrincipalCreatedBy)
|
|
17
|
+
*
|
|
18
|
+
* @markdownDescription "Выводит дату создания и имя автора записи при наличии полей `MDT_DateCreate` и `MDT_ID_PrincipalCreatedBy`"
|
|
19
|
+
* @default false
|
|
20
|
+
*/
|
|
21
|
+
common?: boolean;
|
|
22
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AggregationType } from "mdtScripts/common/list/aggregation/AggregayionTypes";
|
|
2
|
+
export interface AggregationRowListOptions {
|
|
3
|
+
/** Пути к агрегируемым полям */
|
|
4
|
+
fields: {
|
|
5
|
+
[fieldCode: string]: AggregationType | AggregationTypeOptions;
|
|
6
|
+
};
|
|
7
|
+
/** Показывать тип агрегации в строке. По-умолчанию `true` */
|
|
8
|
+
showTitle?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export interface AggregationTypeOptions {
|
|
11
|
+
type: AggregationType;
|
|
12
|
+
/**
|
|
13
|
+
* @title Маска по которой будет отформатировано.
|
|
14
|
+
* @description Подробнее можно [узнать в статье](https://ics-it.gram.ax/mdt/content/dataView/formatMask).
|
|
15
|
+
*/
|
|
16
|
+
mask?: string;
|
|
17
|
+
/**
|
|
18
|
+
* @default true
|
|
19
|
+
*/
|
|
20
|
+
inheritFieldMask?: boolean;
|
|
21
|
+
title?: string;
|
|
22
|
+
tooltip?: string;
|
|
23
|
+
}
|