mdt-client 1.0.22 → 1.0.25
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/dist/index.d.ts +6 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +8 -8
- package/package.json +1 -1
- package/types/common/Datasource.d.ts +9 -0
- package/types/common/Field.d.ts +38 -0
- package/types/common/MdtField.d.ts +9 -0
- package/types/common/MdtObject.d.ts +7 -0
- package/types/common/Record.d.ts +12 -0
- package/types/common/Table.d.ts +34 -0
- package/types/datasources/FetchResult.d.ts +5 -0
- package/types/helpers/formatOptions.d.ts +6 -0
- package/types/security/PermissionLevel.d.ts +32 -0
- package/types/services/IFilter.d.ts +77 -0
- package/types/services/ModuleData.d.ts +8 -0
- package/types/services/api/ApiRequestOptions.d.ts +27 -0
- package/types/services/api/BaseQuery.d.ts +15 -0
- package/types/services/api/Query.d.ts +67 -0
- package/types/services/customModules/facades/Form/IFieldControlFacade.d.ts +26 -0
- package/types/services/customModules/facades/Form/IFieldControlManagerFacade.d.ts +36 -0
- package/types/services/customModules/facades/Form/IFormControlFacade.d.ts +47 -0
- package/types/services/customModules/facades/Form/IFormFacade.d.ts +60 -0
- package/types/services/customModules/facades/IAuthFacade.d.ts +6 -0
- package/types/services/customModules/facades/IMdtFacade.d.ts +55 -0
- package/types/services/customModules/facades/IModuleRegistryFacade.d.ts +5 -0
- package/types/services/customModules/facades/List/IListCellFacade.d.ts +8 -0
- package/types/services/customModules/facades/List/IListControlFacade.d.ts +41 -0
- package/types/services/customModules/facades/List/IListRowFacade.d.ts +2 -0
- package/types/services/customModules/facades/List/IListServiceFacade.d.ts +24 -0
- package/types/services/customModules/facades/schema/IFieldFacade.d.ts +7 -0
- package/types/services/customModules/facades/schema/IObjectFacade.d.ts +9 -0
- package/types/services/customModules/facades/schema/ISchemaFacade.d.ts +5 -0
- package/types/services/customModules/facades/services/INavigationFacade.d.ts +43 -0
- package/types/services/customModules/facades/services/ISecurityFacade.d.ts +19 -0
- package/types/services/customModules/facades/utils/IApiFacade.d.ts +43 -0
- package/types/services/customModules/facades/utils/IUiComponentsFacade.d.ts +9 -0
- package/types/services/customModules/facades/utils/IUiFacade.d.ts +70 -0
- package/types/services/customModules/facades/utils/IUtilsFacade.d.ts +5 -0
- package/types/services/customModules/facades/utils/ImUtilsFacade.d.ts +22 -0
- package/types/views/controls/Control.d.ts +7 -0
- package/types/views/form/controls/monacoEditor/jsonSchemas/Button.schema.d.ts +69 -0
- package/types/views/list/IListView.d.ts +58 -0
- package/types/views/list/schema/ListPageOptions.schema.d.ts +76 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/// <reference types="mithril" />
|
|
2
|
+
import { IFieldControlFacade as IFieldControlFacadeOrig } from "../types/services/customModules/facades/Form/IFieldControlFacade";
|
|
3
|
+
import { IMDTFacade } from "../types/services/customModules/facades/IMdtFacade";
|
|
4
|
+
export declare const MDT: IMDTFacade;
|
|
5
|
+
export declare const Navigation: import("../types/services/customModules/facades/services/INavigationFacade").INavigationFacade, SecurityManager: import("../types/services/customModules/facades/services/ISecurityFacade").ISecurityFacade, ListService: import("../types/services/customModules/facades/List/IListServiceFacade").IListServiceFacade, List: import("../types/services/customModules/facades/List/IListControlFacade").IListControlFacadeContstructor, FormService: import("../types/services/customModules/facades/Form/IFormFacade").IFormServiceFacade, Form: import("../types/services/customModules/facades/Form/IFormControlFacade").IFormControlFacadeContstructor, ControlManager: import("../types/services/customModules/facades/Form/IFieldControlManagerFacade").IFieldControlManagerFacade<any>, FieldControl: import("../types/services/customModules/facades/Form/IFieldControlFacade").IFieldControlFacadeContstructor<any>, mUtils: import("../types/services/customModules/facades/utils/ImUtilsFacade").ImUtilsFacade, Utils: import("../types/services/customModules/facades/utils/IUtilsFacade").IUtilsFacade, Ui: import("../types/services/customModules/facades/utils/IUiFacade").IUiFacade, Api: import("../types/services/customModules/facades/utils/IApiFacade").IApiFacade, m: _mithril.MithrilStatic, Filter: import("../types/services/IFilter").FilterConstructor, registerModule: (callback: () => void) => void, Auth: import("../types/services/customModules/facades/IAuthFacade").IAuthFacade, ModuleRegistry: import("../types/services/customModules/facades/IModuleRegistryFacade").IModuleRegistryFacade, UiComponents: import("../types/services/customModules/facades/utils/IUiComponentsFacade").IUiComponentsFacade, Schema: import("../types/services/customModules/facades/schema/ISchemaFacade").ISchemaFacade;
|
|
6
|
+
export declare type IFieldControlFacade<T = any> = IFieldControlFacadeOrig<T>;
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Schema = exports.UiComponents = exports.ModuleRegistry = exports.Auth = exports.registerModule = exports.Filter = exports.m = exports.Api = exports.Ui = exports.Utils = exports.mUtils = exports.FieldControl = exports.ControlManager = exports.Form = exports.FormService = exports.List = exports.ListService = exports.SecurityManager = exports.Navigation = exports.MDT = void 0;
|
|
4
|
+
exports.MDT = window.MDT;
|
|
5
|
+
exports.Navigation = exports.MDT.Navigation, exports.SecurityManager = exports.MDT.SecurityManager, exports.ListService = exports.MDT.ListService, exports.List = exports.MDT.List, exports.FormService = exports.MDT.FormService, exports.Form = exports.MDT.Form, exports.ControlManager = exports.MDT.ControlManager, exports.FieldControl = exports.MDT.FieldControl, exports.mUtils = exports.MDT.mUtils, exports.Utils = exports.MDT.Utils, exports.Ui = exports.MDT.Ui, exports.Api = exports.MDT.Api, exports.m = exports.MDT.m, exports.Filter = exports.MDT.Filter, exports.registerModule = exports.MDT.registerModule, exports.Auth = exports.MDT.Auth, exports.ModuleRegistry = exports.MDT.ModuleRegistry, exports.UiComponents = exports.MDT.UiComponents, exports.Schema = exports.MDT.Schema;
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAGa,QAAA,GAAG,GAAgB,MAAc,CAAC,GAAG,CAAC;AAGlD,QAAA,UAAU,GAmBP,WAAG,aAlBN,QAAA,eAAe,GAkBZ,WAAG,kBAjBN,QAAA,WAAW,GAiBR,WAAG,cAhBN,QAAA,IAAI,GAgBD,WAAG,OAfN,QAAA,WAAW,GAeR,WAAG,cAdN,QAAA,IAAI,GAcD,WAAG,OAbN,QAAA,cAAc,GAaX,WAAG,iBAZN,QAAA,YAAY,GAYT,WAAG,eAXN,QAAA,MAAM,GAWH,WAAG,SAVN,QAAA,KAAK,GAUF,WAAG,QATN,QAAA,EAAE,GASC,WAAG,KARN,QAAA,GAAG,GAQA,WAAG,MAPN,QAAA,CAAC,GAOE,WAAG,IANN,QAAA,MAAM,GAMH,WAAG,SALN,QAAA,cAAc,GAKX,WAAG,iBAJN,QAAA,IAAI,GAID,WAAG,OAHN,QAAA,cAAc,GAGX,WAAG,iBAFN,QAAA,YAAY,GAET,WAAG,eADN,QAAA,MAAM,GACH,WAAG,QAAC"}
|
|
@@ -192,8 +192,8 @@
|
|
|
192
192
|
"affectsGlobalScope": false
|
|
193
193
|
},
|
|
194
194
|
"../types/services/api/query.d.ts": {
|
|
195
|
-
"version": "
|
|
196
|
-
"signature": "
|
|
195
|
+
"version": "3b9b60123628da7037fa0b05606b8a15b0b2960675669e60b0c567ace3e720d8",
|
|
196
|
+
"signature": "3b9b60123628da7037fa0b05606b8a15b0b2960675669e60b0c567ace3e720d8",
|
|
197
197
|
"affectsGlobalScope": false
|
|
198
198
|
},
|
|
199
199
|
"../types/services/api/apirequestoptions.d.ts": {
|
|
@@ -297,8 +297,8 @@
|
|
|
297
297
|
"affectsGlobalScope": false
|
|
298
298
|
},
|
|
299
299
|
"../types/views/list/schema/listpageoptions.schema.d.ts": {
|
|
300
|
-
"version": "
|
|
301
|
-
"signature": "
|
|
300
|
+
"version": "799aaf8b1a193ab60f0f4709a4cfb7f5759460465f123e5b193b0f4b1d5e3f49",
|
|
301
|
+
"signature": "799aaf8b1a193ab60f0f4709a4cfb7f5759460465f123e5b193b0f4b1d5e3f49",
|
|
302
302
|
"affectsGlobalScope": false
|
|
303
303
|
},
|
|
304
304
|
"../types/services/custommodules/facades/list/ilistcontrolfacade.d.ts": {
|
|
@@ -307,8 +307,8 @@
|
|
|
307
307
|
"affectsGlobalScope": false
|
|
308
308
|
},
|
|
309
309
|
"../types/services/custommodules/facades/list/ilistservicefacade.d.ts": {
|
|
310
|
-
"version": "
|
|
311
|
-
"signature": "
|
|
310
|
+
"version": "de66ed2cb32a2096464eb9fb893e1f18019fa70168e41134d1d7ba14bc3c4ed6",
|
|
311
|
+
"signature": "de66ed2cb32a2096464eb9fb893e1f18019fa70168e41134d1d7ba14bc3c4ed6",
|
|
312
312
|
"affectsGlobalScope": false
|
|
313
313
|
},
|
|
314
314
|
"../types/services/custommodules/facades/services/inavigationfacade.d.ts": {
|
|
@@ -412,8 +412,8 @@
|
|
|
412
412
|
"affectsGlobalScope": false
|
|
413
413
|
},
|
|
414
414
|
"../types/services/custommodules/facades/utils/iuicomponentsfacade.d.ts": {
|
|
415
|
-
"version": "
|
|
416
|
-
"signature": "
|
|
415
|
+
"version": "3efd94192eb709d50d571d19e1e2592bce9811153161c4e801462ad1cdcb060f",
|
|
416
|
+
"signature": "3efd94192eb709d50d571d19e1e2592bce9811153161c4e801462ad1cdcb060f",
|
|
417
417
|
"affectsGlobalScope": false
|
|
418
418
|
},
|
|
419
419
|
"../types/helpers/formatoptions.d.ts": {
|
package/package.json
CHANGED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Table } from "./Table";
|
|
2
|
+
import { Query } from "../services/api/Query";
|
|
3
|
+
import { ApiRequestOptions } from "../services/api/ApiRequestOptions";
|
|
4
|
+
export interface Datasource {
|
|
5
|
+
fetch(query: Query, table: Table, options?: ApiRequestOptions, batch?: boolean): any;
|
|
6
|
+
save?(data: any, params?: any, options?: ApiRequestOptions): any;
|
|
7
|
+
delete?(ids: any[], table: Table): any;
|
|
8
|
+
table?: Table;
|
|
9
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Record } from "./Record";
|
|
2
|
+
import { Table } from "./Table";
|
|
3
|
+
export interface Field extends Record {
|
|
4
|
+
id?: any;
|
|
5
|
+
code?: string;
|
|
6
|
+
title?: string;
|
|
7
|
+
type?: string;
|
|
8
|
+
codeLowered?: string;
|
|
9
|
+
code$?: string;
|
|
10
|
+
code$Lowered?: string;
|
|
11
|
+
refTableCode?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
table?: Table;
|
|
14
|
+
nullable?: boolean;
|
|
15
|
+
identity?: boolean;
|
|
16
|
+
primary?: boolean;
|
|
17
|
+
hidden?: boolean;
|
|
18
|
+
id_RefObject?: number;
|
|
19
|
+
id_RefObjectField?: number;
|
|
20
|
+
kind?: string;
|
|
21
|
+
role?: string;
|
|
22
|
+
length?: number;
|
|
23
|
+
hasDefault?: boolean;
|
|
24
|
+
extended?: boolean;
|
|
25
|
+
isFixedLength?: boolean;
|
|
26
|
+
defaultValue?: string | number | boolean | Date;
|
|
27
|
+
formatMask?: string;
|
|
28
|
+
refTable?: Table;
|
|
29
|
+
readonly?: boolean;
|
|
30
|
+
multiple?: boolean;
|
|
31
|
+
refFilter?: any;
|
|
32
|
+
validate?: Function;
|
|
33
|
+
min?: number;
|
|
34
|
+
max?: number;
|
|
35
|
+
dynamicFkObjectPath?: string;
|
|
36
|
+
id_DynamicFkRecordObjectField?: number;
|
|
37
|
+
dynamicFkRecordObjectFieldCode?: string;
|
|
38
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Table } from "./Table";
|
|
2
|
+
export declare type RecordId = number | string;
|
|
3
|
+
export interface Record {
|
|
4
|
+
$id?: RecordId;
|
|
5
|
+
$table?: Table;
|
|
6
|
+
$diff?: any;
|
|
7
|
+
$new?: boolean;
|
|
8
|
+
$dirty?: boolean;
|
|
9
|
+
$destroy?: boolean;
|
|
10
|
+
$params?: any;
|
|
11
|
+
[field: string]: any;
|
|
12
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { PermissionLevel } from "../security/PermissionLevel";
|
|
2
|
+
import { Datasource } from "./Datasource";
|
|
3
|
+
import { Field } from "./Field";
|
|
4
|
+
import { Record } from "./Record";
|
|
5
|
+
export interface Table extends Record {
|
|
6
|
+
$id?: number;
|
|
7
|
+
id?: number;
|
|
8
|
+
object_id?: number;
|
|
9
|
+
title?: string;
|
|
10
|
+
titlePlural?: string;
|
|
11
|
+
code?: string;
|
|
12
|
+
abstract?: boolean;
|
|
13
|
+
defaultFieldCode?: any;
|
|
14
|
+
defaultField?: Field;
|
|
15
|
+
fields?: Field[];
|
|
16
|
+
primaryField?: Field;
|
|
17
|
+
map?: any;
|
|
18
|
+
mapLowered?: any;
|
|
19
|
+
$datasource?: Datasource;
|
|
20
|
+
id_ObjectType?: string;
|
|
21
|
+
tag_Enabled?: any;
|
|
22
|
+
accessLevel?: PermissionLevel;
|
|
23
|
+
children?: Array<string>;
|
|
24
|
+
readonly?: boolean;
|
|
25
|
+
icon?: string;
|
|
26
|
+
audit_Enabled?: boolean;
|
|
27
|
+
inline_AddInRow?: boolean;
|
|
28
|
+
inline_Enabled?: boolean;
|
|
29
|
+
hierarchyParentField?: string;
|
|
30
|
+
hierarchyIDField?: string;
|
|
31
|
+
flagHierarchy?: boolean;
|
|
32
|
+
$original?: Table;
|
|
33
|
+
$system?: boolean;
|
|
34
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { MdtField } from "../common/MdtField";
|
|
2
|
+
import { MdtObject } from "../common/MdtObject";
|
|
3
|
+
import { Record } from "../common/Record";
|
|
4
|
+
export declare enum PermissionLevel {
|
|
5
|
+
None = 0,
|
|
6
|
+
Read = 1,
|
|
7
|
+
Write = 2,
|
|
8
|
+
Delete = 4,
|
|
9
|
+
Add = 8,
|
|
10
|
+
Execute = 16,
|
|
11
|
+
Filter = 32,
|
|
12
|
+
All = 255
|
|
13
|
+
}
|
|
14
|
+
export interface PrincipalPermission extends Record {
|
|
15
|
+
ID_Permission?: number;
|
|
16
|
+
ID_Permission$?: Permission;
|
|
17
|
+
ID_Object?: number;
|
|
18
|
+
ID_Object$?: MdtObject;
|
|
19
|
+
ID_Field?: number;
|
|
20
|
+
ID_Field$?: MdtField;
|
|
21
|
+
LevelGrant?: PermissionLevel;
|
|
22
|
+
LevelDeny?: PermissionLevel;
|
|
23
|
+
Filter?: string;
|
|
24
|
+
}
|
|
25
|
+
export interface Permission extends Record {
|
|
26
|
+
id?: number;
|
|
27
|
+
Code: string;
|
|
28
|
+
LevelMask: PermissionLevel;
|
|
29
|
+
ID_Parent: number;
|
|
30
|
+
FlagObject: boolean;
|
|
31
|
+
FlagField: boolean;
|
|
32
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Фильтр
|
|
3
|
+
*
|
|
4
|
+
* @default { "op": "eq", "p1": "", "p2": "" }
|
|
5
|
+
*/
|
|
6
|
+
export declare type IFilter = IFilterItem | IFilterGroup | IFilterIn;
|
|
7
|
+
/** Группировка фильтров */
|
|
8
|
+
export interface IFilterGroup {
|
|
9
|
+
op: "and" | "or";
|
|
10
|
+
groups: IFilter[];
|
|
11
|
+
not?: boolean;
|
|
12
|
+
}
|
|
13
|
+
/** Фильтр */
|
|
14
|
+
export interface IFilterItem {
|
|
15
|
+
op: "eq" | "ne" | "gt" | "ge" | "lt" | "le" | "startsWith" | "endsWith" | "contains" | "fulltext" | "equalTemplate";
|
|
16
|
+
/** Поле, по которому происходит фильтрация */
|
|
17
|
+
p1: string;
|
|
18
|
+
/** Значение фильтра */
|
|
19
|
+
p2: string | number | Date;
|
|
20
|
+
not?: boolean;
|
|
21
|
+
cast?: "date";
|
|
22
|
+
}
|
|
23
|
+
/** Фильтр */
|
|
24
|
+
export interface IFilterIn extends Omit<IFilterItem, "op" | "p2"> {
|
|
25
|
+
op: "in";
|
|
26
|
+
p2: {
|
|
27
|
+
table: string;
|
|
28
|
+
field: string;
|
|
29
|
+
filter?: IFilter;
|
|
30
|
+
args?: any;
|
|
31
|
+
} | string[];
|
|
32
|
+
}
|
|
33
|
+
export interface FilterSetterOptions {
|
|
34
|
+
fireEvents?: boolean;
|
|
35
|
+
}
|
|
36
|
+
export interface FilterConstructor {
|
|
37
|
+
new (): Filter;
|
|
38
|
+
and(...groups: any[]): IFilterGroup;
|
|
39
|
+
or(...groups: any[]): IFilterGroup;
|
|
40
|
+
eq(p1: any, p2: any): IFilterItem;
|
|
41
|
+
ne(p1: any, p2: any): IFilterItem;
|
|
42
|
+
gt(p1: any, p2: any): IFilterItem;
|
|
43
|
+
ge(p1: any, p2: any): IFilterItem;
|
|
44
|
+
lt(p1: any, p2: any): IFilterItem;
|
|
45
|
+
le(p1: any, p2: any): IFilterItem;
|
|
46
|
+
startsWith(p1: any, p2: any): IFilterItem;
|
|
47
|
+
endsWith(p1: any, p2: any): IFilterItem;
|
|
48
|
+
contains(p1: any, p2: any): IFilterItem;
|
|
49
|
+
fulltext(p1: any, p2: any): IFilterItem;
|
|
50
|
+
not(f: any): IFilterItem;
|
|
51
|
+
in(p1: any, ar: any): IFilterIn;
|
|
52
|
+
queryIn(field: any, table: any, subField: any, filter: any, args?: any): IFilterIn;
|
|
53
|
+
cast(filter: any, cast: any): IFilter;
|
|
54
|
+
equalTemplate(p1: any, p2: any): any;
|
|
55
|
+
}
|
|
56
|
+
export declare class Filter {
|
|
57
|
+
static empty: IFilter;
|
|
58
|
+
static isEmptyFilter(filter: IFilter): boolean;
|
|
59
|
+
static mergeFilters(orig: IFilter, filter: IFilter): IFilter;
|
|
60
|
+
static and(...groups: any[]): IFilterGroup;
|
|
61
|
+
static or(...groups: any[]): IFilterGroup;
|
|
62
|
+
static eq(p1: any, p2: any): IFilterItem;
|
|
63
|
+
static ne(p1: any, p2: any): IFilterItem;
|
|
64
|
+
static gt(p1: any, p2: any): IFilterItem;
|
|
65
|
+
static ge(p1: any, p2: any): IFilterItem;
|
|
66
|
+
static lt(p1: any, p2: any): IFilterItem;
|
|
67
|
+
static le(p1: any, p2: any): IFilterItem;
|
|
68
|
+
static startsWith(p1: any, p2: any): IFilterItem;
|
|
69
|
+
static endsWith(p1: any, p2: any): IFilterItem;
|
|
70
|
+
static contains(p1: any, p2: any): IFilterItem;
|
|
71
|
+
static fulltext(p1: any, p2: any): IFilterItem;
|
|
72
|
+
static not(f: any): IFilterItem;
|
|
73
|
+
static in(p1: any, ar: any): IFilterIn;
|
|
74
|
+
static queryIn(field: any, table: any, subField: any, filter: any, args?: any): IFilterIn;
|
|
75
|
+
static cast(filter: any, cast: any): IFilter;
|
|
76
|
+
static equalTemplate(p1: any, p2: any): IFilter;
|
|
77
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface ApiRequest {
|
|
2
|
+
abort?: () => void;
|
|
3
|
+
}
|
|
4
|
+
export interface ApiRequestOptions {
|
|
5
|
+
req?: (x?: any) => ApiRequest;
|
|
6
|
+
onerror?: (e: any) => boolean | void;
|
|
7
|
+
onRequestError?: () => void;
|
|
8
|
+
camel?: boolean;
|
|
9
|
+
multi?: boolean;
|
|
10
|
+
method?: string;
|
|
11
|
+
xhrConfig?(xhr: XMLHttpRequest): void;
|
|
12
|
+
background?: boolean;
|
|
13
|
+
ignoreUnwrapError?: boolean;
|
|
14
|
+
withCredentials?: boolean;
|
|
15
|
+
url?: string;
|
|
16
|
+
user?: string;
|
|
17
|
+
password?: string;
|
|
18
|
+
data?: any;
|
|
19
|
+
unwrapSuccess?(data: any): any;
|
|
20
|
+
unwrapError?(data: any, options?: any): any;
|
|
21
|
+
serialize?(dataToSerialize: any): string;
|
|
22
|
+
deserialize?(dataToDeserialize: string): any;
|
|
23
|
+
extract?(xhr: XMLHttpRequest, options: ApiRequestOptions): string;
|
|
24
|
+
type?(data: Object): void;
|
|
25
|
+
config?(xhr: XMLHttpRequest, options?: ApiRequestOptions): XMLHttpRequest;
|
|
26
|
+
dataType?: string;
|
|
27
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { IFilter } from "../IFilter";
|
|
2
|
+
import { QuerySorting } from "./Query";
|
|
3
|
+
export interface BaseQuery {
|
|
4
|
+
/** Названия выбранных полей */
|
|
5
|
+
select?: string[];
|
|
6
|
+
/** Количество записей */
|
|
7
|
+
top?: number;
|
|
8
|
+
/** Фильтр запроса */
|
|
9
|
+
filter?: IFilter;
|
|
10
|
+
/** Количество пропускаемых с начала записей */
|
|
11
|
+
skip?: number;
|
|
12
|
+
/** Сортировка записей */
|
|
13
|
+
sorting?: QuerySorting[];
|
|
14
|
+
count?: boolean;
|
|
15
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Table } from "../../common/Table";
|
|
2
|
+
import { BaseQuery } from "./BaseQuery";
|
|
3
|
+
export declare type QuerySorting = string | {
|
|
4
|
+
path: string;
|
|
5
|
+
asc?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export interface Query extends BaseQuery {
|
|
8
|
+
options?: QueryOptions;
|
|
9
|
+
withCount?: boolean;
|
|
10
|
+
distinct?: boolean;
|
|
11
|
+
key?: any;
|
|
12
|
+
params?: any;
|
|
13
|
+
dependency?: {
|
|
14
|
+
table: string;
|
|
15
|
+
field: string;
|
|
16
|
+
};
|
|
17
|
+
aggregate?: boolean;
|
|
18
|
+
export?: string;
|
|
19
|
+
format?: string;
|
|
20
|
+
hierarchy?: any;
|
|
21
|
+
placeIn?: any;
|
|
22
|
+
date?: Date;
|
|
23
|
+
table?: Table;
|
|
24
|
+
children?: Query[];
|
|
25
|
+
parent?: Query;
|
|
26
|
+
groups?: GroupQuery;
|
|
27
|
+
disableDefaultSorting?: boolean;
|
|
28
|
+
pure?: boolean;
|
|
29
|
+
audit?: string;
|
|
30
|
+
workflow?: string;
|
|
31
|
+
tag?: string;
|
|
32
|
+
skippedRowsCount?: number;
|
|
33
|
+
}
|
|
34
|
+
export interface GroupQuery {
|
|
35
|
+
groups?: GroupItem[];
|
|
36
|
+
allParents?: boolean;
|
|
37
|
+
orphans?: boolean;
|
|
38
|
+
toggledValues?: any[];
|
|
39
|
+
}
|
|
40
|
+
export declare type GroupLabel = {
|
|
41
|
+
title?: string;
|
|
42
|
+
icon?: string;
|
|
43
|
+
color?: string;
|
|
44
|
+
textColor?: string;
|
|
45
|
+
};
|
|
46
|
+
export interface GroupItem {
|
|
47
|
+
fieldPath: string;
|
|
48
|
+
collapsed?: boolean;
|
|
49
|
+
label?: GroupLabel | false;
|
|
50
|
+
toggledValues?: any[];
|
|
51
|
+
withEmpty?: boolean;
|
|
52
|
+
sortDesc?: boolean;
|
|
53
|
+
select?: string[];
|
|
54
|
+
sorting?: {
|
|
55
|
+
path: string;
|
|
56
|
+
asc?: boolean;
|
|
57
|
+
}[];
|
|
58
|
+
}
|
|
59
|
+
export interface QueryOptions {
|
|
60
|
+
root?: boolean;
|
|
61
|
+
reset?: boolean;
|
|
62
|
+
firstQuery?: boolean;
|
|
63
|
+
secondary?: boolean;
|
|
64
|
+
ext?: {
|
|
65
|
+
[ext: string]: any;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare type FieldValue = any;
|
|
2
|
+
export interface ErrorInfo {
|
|
3
|
+
/** Текст ошибки */
|
|
4
|
+
message: string;
|
|
5
|
+
/** Код ошибки */
|
|
6
|
+
key?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface IFieldControlFacadeContstructor<T = FieldValue> {
|
|
9
|
+
new (options: any, fieldCtrl: any): IFieldControlFacade<T>;
|
|
10
|
+
}
|
|
11
|
+
export interface IFieldControlFacade<T = FieldValue> {
|
|
12
|
+
/** Получить значение поля */
|
|
13
|
+
getValue: () => T;
|
|
14
|
+
/** Установить значение поля */
|
|
15
|
+
setValue: (val: T) => void;
|
|
16
|
+
/** Проверка, является ли поле редактируемым */
|
|
17
|
+
isEditable: () => boolean;
|
|
18
|
+
/** Установить ошибку валидации для поля */
|
|
19
|
+
setErrors: (errors: ErrorInfo[]) => void;
|
|
20
|
+
/** Очистить ошибки валидации */
|
|
21
|
+
clearErrors: (errorKey?: string) => void;
|
|
22
|
+
/** Подписаться на событие обновления значения поля */
|
|
23
|
+
onUpdated: (callback: (val: T) => void) => () => void;
|
|
24
|
+
/** Заголовок поля */
|
|
25
|
+
title: () => string;
|
|
26
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { IFieldControlFacade } from "./IFieldControlFacade";
|
|
2
|
+
export interface MountContext<V> {
|
|
3
|
+
/** Родительский DOM-элемент контрола */
|
|
4
|
+
el: HTMLElement;
|
|
5
|
+
/** Поле, к которому привязан контрол */
|
|
6
|
+
field: IFieldControlFacade<V>;
|
|
7
|
+
/** Опции контрола */
|
|
8
|
+
options: any;
|
|
9
|
+
/** Подписка на событие удаления контрола */
|
|
10
|
+
onUnmount: (onUnmountCallback?: (field: IFieldControlFacade) => void) => void;
|
|
11
|
+
/** Mithril класс контрола */
|
|
12
|
+
control: any;
|
|
13
|
+
}
|
|
14
|
+
export interface IMithrilCustomControl<V> {
|
|
15
|
+
new (options: any, field: IFieldControlFacade<V>): any;
|
|
16
|
+
}
|
|
17
|
+
export interface RegisterArgs<V> {
|
|
18
|
+
/** Наименование контрола */
|
|
19
|
+
title: string;
|
|
20
|
+
/** Код контрола */
|
|
21
|
+
code: string;
|
|
22
|
+
/** Mithril класс контрола */
|
|
23
|
+
control?: IMithrilCustomControl<V>;
|
|
24
|
+
/** Типы полей, для которых предназначен контрол */
|
|
25
|
+
types?: string | string[];
|
|
26
|
+
/** Используется ли контрол для полей с внешним ключом */
|
|
27
|
+
ref?: boolean;
|
|
28
|
+
/** Скрыть контрол из списка в конструкторе форм */
|
|
29
|
+
hidden?: boolean;
|
|
30
|
+
/** Подписка на событие рендера контрола */
|
|
31
|
+
onMount?: (params: MountContext<V>) => void;
|
|
32
|
+
}
|
|
33
|
+
export interface IFieldControlManagerFacade<V = any> {
|
|
34
|
+
/** Зарегистрировать новый контрол */
|
|
35
|
+
register: <T = V>(args: RegisterArgs<T>) => void;
|
|
36
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { IObjectFacade } from "../schema/IObjectFacade";
|
|
2
|
+
import { ParentCtrl } from "../utils/IUiFacade";
|
|
3
|
+
import { ButtonFacade } from "./IFormFacade";
|
|
4
|
+
export declare type IFormFieldOptionsConfig = {
|
|
5
|
+
[fieldCode: string]: any;
|
|
6
|
+
};
|
|
7
|
+
export interface IFormControlFacadeContstructor {
|
|
8
|
+
new (formCtrl: any): IFormControlFacade;
|
|
9
|
+
}
|
|
10
|
+
export interface IFormControlFacade extends ParentCtrl {
|
|
11
|
+
/** Получить оригинальный контрол формы */
|
|
12
|
+
getFormCtrl(): any;
|
|
13
|
+
/** Получить объект, к которому приязана форма */
|
|
14
|
+
getObject(): IObjectFacade;
|
|
15
|
+
/** Получить код формы */
|
|
16
|
+
getCode(): string;
|
|
17
|
+
/** Получить контекстный параметр формы */
|
|
18
|
+
getContext(key: string): any;
|
|
19
|
+
/** Установить контекстный параметр формы */
|
|
20
|
+
setContext(key: string, value: any): void;
|
|
21
|
+
/** Проверка, что запись в форме новая */
|
|
22
|
+
isNewRecord(): boolean;
|
|
23
|
+
/** Получить или установить значение для поля формы */
|
|
24
|
+
value(field: string, val?: any, val$?: any, fireEvent?: boolean, setDirty?: boolean, updateData?: {}): any;
|
|
25
|
+
/** Получение значения по пути */
|
|
26
|
+
valueByPath(path: string): any;
|
|
27
|
+
/** Подписаться на событие инициализации записи формы */
|
|
28
|
+
onBound(callback: () => void): void;
|
|
29
|
+
/** Подписаться на событие сохранения записи */
|
|
30
|
+
onSave<T = {
|
|
31
|
+
[field: string]: any;
|
|
32
|
+
}>(callback: (record: T) => void): void;
|
|
33
|
+
/** Подписаться на событие создания макета формы */
|
|
34
|
+
onLayoutCreated(callback: () => void): void;
|
|
35
|
+
/** Установить команду на форму */
|
|
36
|
+
addCommand(command: ButtonFacade): void;
|
|
37
|
+
/** Установить настройки для полей формы */
|
|
38
|
+
setFieldOptions(options: IFormFieldOptionsConfig): void;
|
|
39
|
+
/** Установить настройки для компонента формы */
|
|
40
|
+
setControlOptions(findControl: (col: any) => boolean, controlOptions: any): any;
|
|
41
|
+
/** Изменить свойства существующей кнопки */
|
|
42
|
+
updateCommand(findCondition: () => boolean, command: Partial<ButtonFacade>): void;
|
|
43
|
+
/** Сохранить форму */
|
|
44
|
+
save(): void;
|
|
45
|
+
/** Открыть конструктор формы */
|
|
46
|
+
openDesigner(): void;
|
|
47
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { Field } from "../../../../common/Field";
|
|
2
|
+
import { IButton } from "../../../../views/form/controls/monacoEditor/jsonSchemas/Button.schema";
|
|
3
|
+
import { RecordId } from "../utils/IApiFacade";
|
|
4
|
+
import { IFormControlFacade } from "./IFormControlFacade";
|
|
5
|
+
export declare type ActionButton = IButton & {
|
|
6
|
+
/** Всплывающая подсказка */
|
|
7
|
+
description?: string | {
|
|
8
|
+
(): string;
|
|
9
|
+
};
|
|
10
|
+
/** Подписка на событие нажатия на кнопку */
|
|
11
|
+
execute?: () => void;
|
|
12
|
+
/** Активность кнопки */
|
|
13
|
+
enabled?: () => boolean;
|
|
14
|
+
/** Видимость кнопки */
|
|
15
|
+
visible?: () => boolean;
|
|
16
|
+
/** CSS-класс кнопки */
|
|
17
|
+
className?: string;
|
|
18
|
+
};
|
|
19
|
+
export interface ButtonFacade extends ActionButton {
|
|
20
|
+
/** Дочерние элементы кнопки */
|
|
21
|
+
items?: ButtonFacade[];
|
|
22
|
+
}
|
|
23
|
+
export interface IFormInitOptions {
|
|
24
|
+
/** Уникальный код списка */
|
|
25
|
+
code?: string;
|
|
26
|
+
/** Настройки полей */
|
|
27
|
+
fieldOptions?: {
|
|
28
|
+
[fieldCode: string]: any;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
export interface IFormOptions {
|
|
32
|
+
/** Код формы */
|
|
33
|
+
code: string;
|
|
34
|
+
/** Наименование формы */
|
|
35
|
+
title?: string;
|
|
36
|
+
/** Поля формы */
|
|
37
|
+
fields?: ICustomField[];
|
|
38
|
+
/** Настройки главной кнопки формы */
|
|
39
|
+
primaryButton?: ButtonFacade;
|
|
40
|
+
/** Подписаться на событие сохранения записи формы */
|
|
41
|
+
onSave(record: Record<string, any>): any;
|
|
42
|
+
}
|
|
43
|
+
export interface IFormServiceFacade {
|
|
44
|
+
/** Создать форму, привязанную объекту */
|
|
45
|
+
create(tableCode: string, id: RecordId, options?: any, extOptions?: any): IFormControlFacade;
|
|
46
|
+
/** Создать кастомную форму */
|
|
47
|
+
createCustom(options: IFormOptions): IFormControlFacade;
|
|
48
|
+
/** Подписаться на событие инициализации формы */
|
|
49
|
+
onInit(callback: (form: IFormControlFacade) => void): void;
|
|
50
|
+
/** Подписаться на событие создания формы */
|
|
51
|
+
onCreate(callback: (form: IFormControlFacade) => void): void;
|
|
52
|
+
/** Подписаться на событие окончания создания формы */
|
|
53
|
+
onCreated(callback: (form: IFormControlFacade) => void): void;
|
|
54
|
+
/** Добавить настройки для полей формы */
|
|
55
|
+
addFieldOptions(tableCode: string, options: IFormInitOptions): void;
|
|
56
|
+
}
|
|
57
|
+
export interface ICustomField extends Field {
|
|
58
|
+
/** Опции контрола поля */
|
|
59
|
+
options?: any;
|
|
60
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/// <reference types="mithril" />
|
|
2
|
+
import { FilterConstructor } from "../../../services/IFilter";
|
|
3
|
+
import { IFieldControlFacadeContstructor } from "./Form/IFieldControlFacade";
|
|
4
|
+
import { IFieldControlManagerFacade } from "./Form/IFieldControlManagerFacade";
|
|
5
|
+
import { IFormControlFacadeContstructor } from "./Form/IFormControlFacade";
|
|
6
|
+
import { IFormServiceFacade } from "./Form/IFormFacade";
|
|
7
|
+
import { IAuthFacade } from "./IAuthFacade";
|
|
8
|
+
import { IModuleRegistryFacade } from "./IModuleRegistryFacade";
|
|
9
|
+
import { ISchemaFacade } from "./schema/ISchemaFacade";
|
|
10
|
+
import { IListControlFacadeContstructor } from "./List/IListControlFacade";
|
|
11
|
+
import { IListServiceFacade } from "./List/IListServiceFacade";
|
|
12
|
+
import { INavigationFacade } from "./services/INavigationFacade";
|
|
13
|
+
import { ISecurityFacade } from "./services/ISecurityFacade";
|
|
14
|
+
import { IApiFacade } from "./utils/IApiFacade";
|
|
15
|
+
import { ImUtilsFacade } from "./utils/ImUtilsFacade";
|
|
16
|
+
import { IUiComponentsFacade } from "./utils/IUiComponentsFacade";
|
|
17
|
+
import { IUiFacade } from "./utils/IUiFacade";
|
|
18
|
+
import { IUtilsFacade } from "./utils/IUtilsFacade";
|
|
19
|
+
export interface IMDTFacade {
|
|
20
|
+
/** Mithril библиотека */
|
|
21
|
+
m: _mithril.MithrilStatic;
|
|
22
|
+
/** Управление навигацией */
|
|
23
|
+
Navigation: INavigationFacade;
|
|
24
|
+
/** Управление пользователем и безопасностью */
|
|
25
|
+
SecurityManager: ISecurityFacade;
|
|
26
|
+
/** Управление списками */
|
|
27
|
+
ListService: IListServiceFacade;
|
|
28
|
+
/** Компонент списка */
|
|
29
|
+
List: IListControlFacadeContstructor;
|
|
30
|
+
/** Управление формами */
|
|
31
|
+
FormService: IFormServiceFacade;
|
|
32
|
+
/** Компонент формы */
|
|
33
|
+
Form: IFormControlFacadeContstructor;
|
|
34
|
+
/** Управление контролами */
|
|
35
|
+
ControlManager: IFieldControlManagerFacade;
|
|
36
|
+
/** Компонент контрола */
|
|
37
|
+
FieldControl: IFieldControlFacadeContstructor;
|
|
38
|
+
/** Утилиты для Mithril */
|
|
39
|
+
mUtils: ImUtilsFacade;
|
|
40
|
+
/** Утилиты */
|
|
41
|
+
Utils: IUtilsFacade;
|
|
42
|
+
/** Управление UI компонентами */
|
|
43
|
+
Ui: IUiFacade;
|
|
44
|
+
UiComponents: IUiComponentsFacade;
|
|
45
|
+
/** Управление запросами к API */
|
|
46
|
+
Api: IApiFacade;
|
|
47
|
+
/** Компонент фильтра */
|
|
48
|
+
Filter: FilterConstructor;
|
|
49
|
+
Schema: ISchemaFacade;
|
|
50
|
+
ModuleRegistry: IModuleRegistryFacade;
|
|
51
|
+
/** Управление способами авторизации */
|
|
52
|
+
Auth: IAuthFacade;
|
|
53
|
+
/** Зарегистрировать модуль */
|
|
54
|
+
registerModule(callback: () => void): void;
|
|
55
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ViewElement } from "../../../../helpers/types";
|
|
2
|
+
import { ILayoutColumnBase } from "../../../../views/list/IListView";
|
|
3
|
+
import { IListComponentFacade } from "./IListComponentFacade";
|
|
4
|
+
export interface IListCellFacade extends IListComponentFacade {
|
|
5
|
+
col: ILayoutColumnBase;
|
|
6
|
+
value(): any;
|
|
7
|
+
setContent(content: ViewElement[]): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/// <reference types="mithril" />
|
|
2
|
+
import { FilterSetterOptions, IFilter } from "../../../../services/IFilter";
|
|
3
|
+
import { ButtonFacade } from "../Form/IFormFacade";
|
|
4
|
+
import { ParentCtrl } from "../utils/IUiFacade";
|
|
5
|
+
import { IListRowFacade } from "./IListRowFacade";
|
|
6
|
+
import { IListCellFacade } from "./IListCellFacade";
|
|
7
|
+
import { IObjectFacade } from "../schema/IObjectFacade";
|
|
8
|
+
import { ListPageOptions } from "../../../../views/list/schema/ListPageOptions.schema";
|
|
9
|
+
export interface IListControlFacadeContstructor {
|
|
10
|
+
new (listCtrl: any): IListControlFacade;
|
|
11
|
+
}
|
|
12
|
+
export interface IListControlFacade extends ParentCtrl {
|
|
13
|
+
/** Получить оригинальный контрол списка */
|
|
14
|
+
getListCtrl(): any;
|
|
15
|
+
/** Получить уникальный код списка */
|
|
16
|
+
getCode(): string;
|
|
17
|
+
/** Получить объект списка */
|
|
18
|
+
getObject(): IObjectFacade;
|
|
19
|
+
/** Получить выделенные строки списка */
|
|
20
|
+
getSelectedRows(): any[];
|
|
21
|
+
/** Добавить команду на список */
|
|
22
|
+
addCommand(command: ButtonFacade): void;
|
|
23
|
+
/** Установить фильтр на список */
|
|
24
|
+
setFilter(filter: IFilter | null, options?: FilterSetterOptions, key?: string): void;
|
|
25
|
+
/** Обновить данные списка */
|
|
26
|
+
refresh(): _mithril.MithrilPromise<_mithril.MithrilPromise<void>>;
|
|
27
|
+
/** Изменить отображение строк списка */
|
|
28
|
+
addTransformerForRow(callback: (row: IListRowFacade) => void): void;
|
|
29
|
+
/** Изменить отображение ячеек списка */
|
|
30
|
+
addTransformerForCell(callback: (cell: IListCellFacade) => void): void;
|
|
31
|
+
/** Установить опции списка */
|
|
32
|
+
setOptions(options: ListPageOptions): void;
|
|
33
|
+
/** Установить расширения списка */
|
|
34
|
+
setExtOptions(extOptions: any): void;
|
|
35
|
+
/** Изменить свойства существующей кнопки */
|
|
36
|
+
updateCommand(findCondition: () => boolean, command: Partial<ButtonFacade>): void;
|
|
37
|
+
/** Открыть форму добавления записи */
|
|
38
|
+
openNewRecordForm(): void;
|
|
39
|
+
/** Удалить выделенные строки */
|
|
40
|
+
removeSelectedRows(): void;
|
|
41
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { IListControlFacade } from "./IListControlFacade";
|
|
2
|
+
export interface IListInitOptions {
|
|
3
|
+
/** Уникальный код списка */
|
|
4
|
+
code?: string;
|
|
5
|
+
/** Опции списка */
|
|
6
|
+
listOptions?: any;
|
|
7
|
+
/** Настройки расширений списка */
|
|
8
|
+
extConfig?: any;
|
|
9
|
+
}
|
|
10
|
+
export interface IListServiceFacade {
|
|
11
|
+
/** Подписаться на событие создания списка */
|
|
12
|
+
onCreate(callback: (list: IListControlFacade) => void): void;
|
|
13
|
+
/** Подписаться на событие окончания создания списка */
|
|
14
|
+
onCreated(callback: (list: IListControlFacade) => void): void;
|
|
15
|
+
/** Установить опции списка */
|
|
16
|
+
configureList(tableCode: string, options: IListInitOptions): void;
|
|
17
|
+
/** Создать список */
|
|
18
|
+
create(tableCode: string, options?: any, extOptions?: any): IListControlFacade;
|
|
19
|
+
/** Зарегистрировать расширение списка */
|
|
20
|
+
registerExtender<T>(extender: IListExtenderFacade<T>): void;
|
|
21
|
+
}
|
|
22
|
+
export interface IListExtenderFacade<T> {
|
|
23
|
+
new (list: IListControlFacade, options: any): T;
|
|
24
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { IFieldFacade } from "./IFieldFacade";
|
|
2
|
+
export interface IObjectFacade {
|
|
3
|
+
getCode(): string;
|
|
4
|
+
getTitle(): string;
|
|
5
|
+
getIcon(): string;
|
|
6
|
+
getPrimaryField(): IFieldFacade;
|
|
7
|
+
isReadonly(): boolean;
|
|
8
|
+
getField(code: string, check?: boolean): IFieldFacade;
|
|
9
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Управление навигацией */
|
|
2
|
+
export interface INavigationFacade {
|
|
3
|
+
/** Добавить узел навигации */
|
|
4
|
+
addNode: (node: CustomNavNode) => void;
|
|
5
|
+
}
|
|
6
|
+
export interface CustomNavNode {
|
|
7
|
+
/** Код узла */
|
|
8
|
+
code: string;
|
|
9
|
+
/** Наименование узла */
|
|
10
|
+
title: string;
|
|
11
|
+
/** Уникальный идентификатор узла */
|
|
12
|
+
key?: string;
|
|
13
|
+
/** Иконка узла */
|
|
14
|
+
icon?: string;
|
|
15
|
+
/** Настройки значения узла */
|
|
16
|
+
value?: CustomNavNodeValue;
|
|
17
|
+
/** Код объекта узла навигации */
|
|
18
|
+
objectCode?: string;
|
|
19
|
+
/** Дочерние узлы */
|
|
20
|
+
childNodes?: CustomNavNode[];
|
|
21
|
+
/** Позиция размещения узла навигации. Сортировка узлов производится от меньшего к большему. */
|
|
22
|
+
position?: number;
|
|
23
|
+
/** Путь к родительскому узлу */
|
|
24
|
+
parentPath?: string;
|
|
25
|
+
/** Код контрола для текущего узла навигации
|
|
26
|
+
* @default "ListCtrl"
|
|
27
|
+
*/
|
|
28
|
+
controlCode?: NavNodeControl | string;
|
|
29
|
+
/** Настройки контрола */
|
|
30
|
+
controlTemplate?: Record<string, any>;
|
|
31
|
+
}
|
|
32
|
+
interface CustomNavNodeValue {
|
|
33
|
+
/** Иконка статуса узла */
|
|
34
|
+
iconExt?: string;
|
|
35
|
+
/** Значение узла навигации. Отображается рядом с заголовком */
|
|
36
|
+
value?: string;
|
|
37
|
+
/** Стиль значения узла */
|
|
38
|
+
style?: string;
|
|
39
|
+
/** Иконка значения узла */
|
|
40
|
+
icon?: string;
|
|
41
|
+
}
|
|
42
|
+
declare type NavNodeControl = "ListCtrl" | "FormCtrl" | "FkPanelsPage" | "dashboard" | "FirstRecordCtrl";
|
|
43
|
+
export {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface IUser {
|
|
2
|
+
id: any;
|
|
3
|
+
permissions: any[];
|
|
4
|
+
fullName: string;
|
|
5
|
+
email: string;
|
|
6
|
+
identityName: string;
|
|
7
|
+
isAdmin: boolean;
|
|
8
|
+
isAnonymous: boolean;
|
|
9
|
+
roles: string[];
|
|
10
|
+
userGroups: any[];
|
|
11
|
+
languageId: number;
|
|
12
|
+
isImpersonated: boolean;
|
|
13
|
+
}
|
|
14
|
+
export interface ISecurityFacade {
|
|
15
|
+
/** Проверка на наличие роли у пользователя */
|
|
16
|
+
hasRole(role: string): boolean;
|
|
17
|
+
/** Получить информацию о текущем пользователе */
|
|
18
|
+
getUser(): IUser;
|
|
19
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { BaseQuery } from "../../../../services/api/BaseQuery";
|
|
2
|
+
import { FetchResult } from "../../../../datasources/FetchResult";
|
|
3
|
+
import { ApiRequestOptions } from "../../../../services/api/ApiRequestOptions";
|
|
4
|
+
export declare type RecordId = number | string;
|
|
5
|
+
export interface QueryParams {
|
|
6
|
+
[param: string]: string | number;
|
|
7
|
+
}
|
|
8
|
+
export interface IApiFacade {
|
|
9
|
+
/** Отправить запрос на получение данных по объекту */
|
|
10
|
+
fetch<R = FetchResult>(objectCode: string, query: BaseQuery): Promise<R>;
|
|
11
|
+
/** Отправить запрос на получение одной записи из объекта */
|
|
12
|
+
fetchRecord<R = FetchResult>(objectCode: string, query: BaseQuery): Promise<R>;
|
|
13
|
+
/** Отправить запрос к функции */
|
|
14
|
+
fetchFromFunction<R extends FetchResult = FetchResult>(objectCode: string, query: BaseQuery, params: any[]): Promise<R>;
|
|
15
|
+
/** Отправить запрос на получение одной записи из функции */
|
|
16
|
+
fetchRecordFromFunction<R = any>(objectCode: string, query: BaseQuery, params: any[]): Promise<R>;
|
|
17
|
+
/** Сохранить новые данные */
|
|
18
|
+
save<S = MdtQueryResult>(objectCode: string, record: MdtRecord): Promise<S>;
|
|
19
|
+
/** Удалить данные */
|
|
20
|
+
delete(objectCode: string, ids: number[]): Promise<MdtQueryResult>;
|
|
21
|
+
/** Отправить запрос к API */
|
|
22
|
+
request<R = any>(serviceUrl: string, params?: any, options?: ApiRequestOptions): Promise<R>;
|
|
23
|
+
getFullUrl(url: string, queryParams?: QueryParams): string;
|
|
24
|
+
}
|
|
25
|
+
export interface MdtRecord {
|
|
26
|
+
$id?: RecordId;
|
|
27
|
+
[key: string]: any;
|
|
28
|
+
}
|
|
29
|
+
export interface MdtQueryResult {
|
|
30
|
+
$: string;
|
|
31
|
+
/** Результаты выполнения операции */
|
|
32
|
+
items: {
|
|
33
|
+
/** ID сохраненных записей */
|
|
34
|
+
ids: number[];
|
|
35
|
+
/** Информация о затронутых строках */
|
|
36
|
+
stats: {
|
|
37
|
+
deleted: number;
|
|
38
|
+
inserted: number;
|
|
39
|
+
updated: number;
|
|
40
|
+
};
|
|
41
|
+
}[];
|
|
42
|
+
type: string;
|
|
43
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="mithril" />
|
|
2
|
+
import { IconOptions } from "../../../../components/icon/iconOptions";
|
|
3
|
+
import { IDropdownManagerClass } from "../../../../services/dropdown/IDropDownManager";
|
|
4
|
+
import { ButtonFacade } from "../Form/IFormFacade";
|
|
5
|
+
export interface IUiComponentsFacade {
|
|
6
|
+
button(button: ButtonFacade, translate?: boolean): _mithril.MithrilVirtualElement;
|
|
7
|
+
icon(code: string, options?: IconOptions): _mithril.MithrilVirtualElement;
|
|
8
|
+
DropdownManager: IDropdownManagerClass;
|
|
9
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/// <reference types="mithril" />
|
|
2
|
+
import { ButtonFacade } from "../Form/IFormFacade";
|
|
3
|
+
export declare type onModalResizeCallback = (data: IModalSizingState) => void;
|
|
4
|
+
export declare type MithrilControl = ViewControl | ContentControl;
|
|
5
|
+
export interface IType<T> {
|
|
6
|
+
new (...args: any[]): T;
|
|
7
|
+
}
|
|
8
|
+
interface ViewControl {
|
|
9
|
+
$view(): _mithril.MithrilVirtualElement | string;
|
|
10
|
+
}
|
|
11
|
+
interface ContentControl {
|
|
12
|
+
content: any;
|
|
13
|
+
}
|
|
14
|
+
export interface ParentCtrl {
|
|
15
|
+
getViewControl(): MithrilControl;
|
|
16
|
+
}
|
|
17
|
+
export interface CustomNotification {
|
|
18
|
+
/** Заголовок сообщения */
|
|
19
|
+
title: string;
|
|
20
|
+
/** Текст сообщения */
|
|
21
|
+
text: string;
|
|
22
|
+
/** Наименование иконки */
|
|
23
|
+
icon?: string;
|
|
24
|
+
/** Тип выводимого сообщения*/
|
|
25
|
+
type?: "default" | "info" | "success" | "warning" | "danger";
|
|
26
|
+
/** Кнопки, отображаемые в сообщении*/
|
|
27
|
+
actions?: ButtonFacade[];
|
|
28
|
+
}
|
|
29
|
+
export interface IUiFacade {
|
|
30
|
+
/** Вызвать окно уведомления */
|
|
31
|
+
showNotification(msg: CustomNotification, duration?: number): any;
|
|
32
|
+
/** Вызвать модальное окно */
|
|
33
|
+
showModal(ctrl: MithrilControl | ParentCtrl, options?: IModalOptions): any;
|
|
34
|
+
/** Вызвать боковую панель */
|
|
35
|
+
showSidebar(ctrl: MithrilControl | ParentCtrl, options?: IPanelOptions): any;
|
|
36
|
+
}
|
|
37
|
+
export declare type ModalTypes = "info" | "success" | "warning" | "danger" | "primary" | "fatal";
|
|
38
|
+
export interface IModalOptions {
|
|
39
|
+
/** CSS класс */
|
|
40
|
+
class?: string;
|
|
41
|
+
/** Подписка на инциализацию модального окна */
|
|
42
|
+
initContainer?: (container: any) => void;
|
|
43
|
+
/** Размер модального окна */
|
|
44
|
+
size?: "lg" | "sm" | "md";
|
|
45
|
+
/** Классы CSS для содержимого модального окна */
|
|
46
|
+
css?: string;
|
|
47
|
+
/** Заголовок модального окна */
|
|
48
|
+
title?: string;
|
|
49
|
+
/** Иконка для модального окна */
|
|
50
|
+
icon?: string;
|
|
51
|
+
/** Затемнение заднего фона */
|
|
52
|
+
backdrop?: boolean;
|
|
53
|
+
/** Параметры размеров модального окна */
|
|
54
|
+
initialSizingState?: IModalSizingState;
|
|
55
|
+
/** Тип модального окна */
|
|
56
|
+
type?: ModalTypes;
|
|
57
|
+
}
|
|
58
|
+
export interface IPanelOptions {
|
|
59
|
+
/** Отображать боковую панель в расширенном на весь экран виде */
|
|
60
|
+
maximized?: boolean;
|
|
61
|
+
}
|
|
62
|
+
export interface IModalSizingState {
|
|
63
|
+
/** Отображать окно в расширенном на весь экран виде */
|
|
64
|
+
full: boolean;
|
|
65
|
+
/** Ширина */
|
|
66
|
+
width: number;
|
|
67
|
+
/** Высота */
|
|
68
|
+
height: number;
|
|
69
|
+
}
|
|
70
|
+
export {};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/// <reference types="mithril" />
|
|
2
|
+
export declare type ConfigFunction = (element: HTMLElement, isInitialized: boolean, context?: any) => void;
|
|
3
|
+
export interface ImUtilsFacade {
|
|
4
|
+
/** Проверка, есть ли класс у элемента */
|
|
5
|
+
hasClass(obj: _mithril.MithrilVirtualElement, className: string): boolean;
|
|
6
|
+
/** Добавить класс для элемента */
|
|
7
|
+
addClass(obj: _mithril.MithrilVirtualElement, className: string): void;
|
|
8
|
+
/** Удалить класс у элемента */
|
|
9
|
+
removeClass(obj: _mithril.MithrilVirtualElement, className: string): void;
|
|
10
|
+
/** Переключить класс элемента. Если у элемента есть данный класс, то он будет удален. Если у элемента нет данного класса, то он будет добавлен. */
|
|
11
|
+
toggleClass(obj: _mithril.MithrilVirtualElement, className: string): void;
|
|
12
|
+
/** Добавить стили для элемента */
|
|
13
|
+
addStyle(obj: _mithril.MithrilVirtualElement, prop: string, value: string): void;
|
|
14
|
+
/** Установить функцию жизненного цикла Mithril компонента */
|
|
15
|
+
config(obj: _mithril.MithrilVirtualElement, config: ConfigFunction, before?: boolean): _mithril.MithrilVirtualElement;
|
|
16
|
+
/** Подписаться на событие удаления компонента со страницы */
|
|
17
|
+
onunload(ctx: any, fn: Function): void;
|
|
18
|
+
/** Установить атрибут элемента */
|
|
19
|
+
attr(obj: {
|
|
20
|
+
$attrs: any;
|
|
21
|
+
}, attr?: string, value?: string, op?: boolean): void;
|
|
22
|
+
}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { FormattedText } from "mdtScripts/helpers/formattedText";
|
|
2
|
+
import { ControlSize } from "mdtScripts/views/controls/Control";
|
|
3
|
+
export declare type ButtonTypes = "default" | "primary" | "success" | "info" | "warning" | "danger" | "link" | "group-title" | "extended" | "fatal";
|
|
4
|
+
export interface IButton {
|
|
5
|
+
/**
|
|
6
|
+
* Тип кнопки
|
|
7
|
+
*/
|
|
8
|
+
type?: ButtonTypes | (() => ButtonTypes);
|
|
9
|
+
/**
|
|
10
|
+
* Размер кнопки
|
|
11
|
+
*/
|
|
12
|
+
size?: ControlSize;
|
|
13
|
+
/**
|
|
14
|
+
* Дочерние элементы
|
|
15
|
+
*/
|
|
16
|
+
items?: Button[];
|
|
17
|
+
/**
|
|
18
|
+
* Поле является группировочным
|
|
19
|
+
*/
|
|
20
|
+
group?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Иконка
|
|
23
|
+
*/
|
|
24
|
+
icon?: string | {
|
|
25
|
+
(): string;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Иконка при наведении
|
|
29
|
+
*/
|
|
30
|
+
hoverIcon?: string | {
|
|
31
|
+
(): string;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Название
|
|
35
|
+
*/
|
|
36
|
+
title?: any;
|
|
37
|
+
supIcon?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Показывать дочерние при наведении
|
|
40
|
+
*/
|
|
41
|
+
itemsShowOnHover?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Показывать дочерние по клику
|
|
44
|
+
*/
|
|
45
|
+
showItemsOnClick?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Скрыть каретку
|
|
48
|
+
*/
|
|
49
|
+
hideCaret?: boolean;
|
|
50
|
+
/**
|
|
51
|
+
* Порядок отображения
|
|
52
|
+
*/
|
|
53
|
+
order?: number;
|
|
54
|
+
/**
|
|
55
|
+
* Ссылка
|
|
56
|
+
*/
|
|
57
|
+
href?: string | {
|
|
58
|
+
(): string;
|
|
59
|
+
};
|
|
60
|
+
code?: string;
|
|
61
|
+
}
|
|
62
|
+
export interface Button extends IButton {
|
|
63
|
+
/**
|
|
64
|
+
* Всплывающая подсказка
|
|
65
|
+
*/
|
|
66
|
+
tooltip?: FormattedText | {
|
|
67
|
+
(): FormattedText;
|
|
68
|
+
};
|
|
69
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/// <reference types="mithril" />
|
|
2
|
+
import { Field } from "../../common/Field";
|
|
3
|
+
import { IListControlFacade } from "../../services/customModules/facades/List/IListControlFacade";
|
|
4
|
+
export interface ICellTransformerCtx {
|
|
5
|
+
row: any;
|
|
6
|
+
td: _mithril.MithrilVirtualElement;
|
|
7
|
+
tr: _mithril.MithrilVirtualElement;
|
|
8
|
+
isHead?: boolean;
|
|
9
|
+
idx?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface CellTransformerContext extends ICellTransformerCtx {
|
|
12
|
+
list: IListControlFacade;
|
|
13
|
+
col: LayoutColumn;
|
|
14
|
+
}
|
|
15
|
+
export interface IRowTransformerContext {
|
|
16
|
+
row: any;
|
|
17
|
+
tr: _mithril.MithrilVirtualElement;
|
|
18
|
+
list: any;
|
|
19
|
+
}
|
|
20
|
+
export interface RowTransformerContext extends IRowTransformerContext {
|
|
21
|
+
list: IListControlFacade;
|
|
22
|
+
}
|
|
23
|
+
export interface ILayoutColumnBase {
|
|
24
|
+
id?: number;
|
|
25
|
+
code?: string;
|
|
26
|
+
fieldPath?: string;
|
|
27
|
+
title?: string;
|
|
28
|
+
description?: string;
|
|
29
|
+
width?: number;
|
|
30
|
+
type?: string;
|
|
31
|
+
position?: number;
|
|
32
|
+
flagIconOnly?: boolean;
|
|
33
|
+
id_FilterFunction?: number;
|
|
34
|
+
}
|
|
35
|
+
export interface ILayoutColumn extends ILayoutColumnBase {
|
|
36
|
+
control?: any;
|
|
37
|
+
transformer?: any;
|
|
38
|
+
$field?: Field;
|
|
39
|
+
$pathFields?: Field[];
|
|
40
|
+
$pathFieldsFull?: Field[];
|
|
41
|
+
$refFields?: Field[];
|
|
42
|
+
$type?: any;
|
|
43
|
+
$column?: any;
|
|
44
|
+
$valuePath?: string;
|
|
45
|
+
$valuePathFull?: string;
|
|
46
|
+
$lastRefField?: Field;
|
|
47
|
+
$refIdPath?: string;
|
|
48
|
+
$system?: boolean;
|
|
49
|
+
$new?: boolean;
|
|
50
|
+
$title?: string;
|
|
51
|
+
$destroy?: boolean;
|
|
52
|
+
}
|
|
53
|
+
export interface LayoutColumn extends ILayoutColumn {
|
|
54
|
+
$valueView?: (value: any, ctx: CellTransformerContext, args?: O2MValueViewArgs) => any;
|
|
55
|
+
}
|
|
56
|
+
export interface O2MValueViewArgs {
|
|
57
|
+
valueIndex?: number;
|
|
58
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { BaseQuery } from "../../../services/api/BaseQuery";
|
|
2
|
+
import { QuerySorting } from "../../../services/api/Query";
|
|
3
|
+
import { IFilter } from "../../../services/IFilter";
|
|
4
|
+
declare type WhiteSpaceType = "normal" | "nowrap" | "pre" | "pre-line" | "pre-wrap" | "inherit";
|
|
5
|
+
export interface ListPageOptions {
|
|
6
|
+
/** Настройки получения данных */
|
|
7
|
+
paging?: {
|
|
8
|
+
/** Количество записей, подгружаемых в память при прокрутке списка */
|
|
9
|
+
size?: number;
|
|
10
|
+
/** Настройка сортировки по-умолчанию */
|
|
11
|
+
sorting?: {
|
|
12
|
+
list: QuerySorting[];
|
|
13
|
+
};
|
|
14
|
+
/** Добавлять информацию об общем количестве записей в запрос */
|
|
15
|
+
withCount?: boolean;
|
|
16
|
+
};
|
|
17
|
+
/** Выполнять запросы списка в фоновом режиме */
|
|
18
|
+
background?: boolean;
|
|
19
|
+
/** Код макет списка */
|
|
20
|
+
layout?: string;
|
|
21
|
+
/** Контейнер для дочерних пользовательских интерфейсов */
|
|
22
|
+
container?: "modal" | "sidebar";
|
|
23
|
+
/** Высота списка */
|
|
24
|
+
maxHeight?: number;
|
|
25
|
+
/** Фильтр по-умолчанию на таблицу */
|
|
26
|
+
filter?: IFilter | (() => IFilter);
|
|
27
|
+
/** Скрыть индикатор загрузки */
|
|
28
|
+
hideLoading?: boolean;
|
|
29
|
+
/** Скрыть полосу загрузки */
|
|
30
|
+
hideProgressBar?: boolean;
|
|
31
|
+
/** Показывать ссылки на внешние таблицы в виде сылок */
|
|
32
|
+
fkLinks?: boolean;
|
|
33
|
+
/** Разрешить редактирование форм, открытых по нажатию на ссылки на внешние таблицы */
|
|
34
|
+
fkLinksEditable?: boolean;
|
|
35
|
+
/** Запретить редактирование записей */
|
|
36
|
+
readonly?: any;
|
|
37
|
+
/** Запрашивать дополнительную информацию по путям, не отображающимся в списке */
|
|
38
|
+
addSelect?: string[];
|
|
39
|
+
/** Дополнительные параметры запроса к данным */
|
|
40
|
+
query?: BaseQuery;
|
|
41
|
+
/** Автообновление данных в списке (в миллисекундах) */
|
|
42
|
+
autoRefresh?: number;
|
|
43
|
+
/**
|
|
44
|
+
* Определяет как будут отображаться пробелы в данных:
|
|
45
|
+
*
|
|
46
|
+
* normal - текст в окне браузера выводится как обычно, переносы строк устанавливаются автоматически
|
|
47
|
+
*
|
|
48
|
+
* nowrap - пробелы не учитываются, переносы строк игнорируются, весь текст отображается одной строкой
|
|
49
|
+
*
|
|
50
|
+
* pre - текст показывается с учетом всех пробелов и переносов
|
|
51
|
+
*
|
|
52
|
+
* pre-line - в тексте пробелы не учитываются, текст автоматически переносится на следующую строку, если он не помещается в заданную область
|
|
53
|
+
*
|
|
54
|
+
* pre-wrap - в тексте сохраняются все пробелы и переносы, однако если строка по ширине не помещается в заданную область, то текст автоматически будет перенесен на следующую строку.
|
|
55
|
+
*
|
|
56
|
+
* inherit - наследует значение родителя
|
|
57
|
+
* */
|
|
58
|
+
whiteSpace?: WhiteSpaceType;
|
|
59
|
+
/**
|
|
60
|
+
* Определяет как будут отображаться пробелы в заголовке:
|
|
61
|
+
*
|
|
62
|
+
* normal - текст в окне браузера выводится как обычно, переносы строк устанавливаются автоматически
|
|
63
|
+
*
|
|
64
|
+
* nowrap - пробелы не учитываются, переносы строк игнорируются, весь заголовок отображается одной строкой
|
|
65
|
+
*
|
|
66
|
+
* pre - заголовок показывается с учетом всех пробелов и переносов
|
|
67
|
+
*
|
|
68
|
+
* pre-line - в заголовке пробелы не учитываются, текст автоматически переносится на следующую строку, если он не помещается в заданную область
|
|
69
|
+
*
|
|
70
|
+
* pre-wrap - в заголовке сохраняются все пробелы и переносы, однако если строка по ширине не помещается в заданную область, то текст автоматически будет перенесен на следующую строку.
|
|
71
|
+
*
|
|
72
|
+
* inherit - наследует значение родителя
|
|
73
|
+
* */
|
|
74
|
+
whiteSpaceHeader?: WhiteSpaceType;
|
|
75
|
+
}
|
|
76
|
+
export {};
|