@steroidsjs/core 3.0.90 → 3.0.92
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/actions/list.js +0 -20
- package/actions/notifications.d.ts +4 -1
- package/components/ClientStorageComponent.d.ts +1 -7
- package/components/ClientStorageComponent.js +14 -12
- package/docs-autogen-result.json +69 -31
- package/en.json +2 -2
- package/hooks/useList.js +1 -1
- package/package.json +1 -1
- package/ui/content/Alert/Alert.d.ts +1 -1
- package/ui/form/DropDownField/DropDownField.d.ts +4 -0
- package/ui/form/DropDownField/DropDownField.js +2 -1
- package/ui/layout/Notifications/Notifications.d.ts +4 -0
- package/ui/layout/Tooltip/Tooltip.d.ts +4 -0
- package/ui/layout/Tooltip/Tooltip.js +1 -1
- package/ui/list/TreeTable/TreeTable.d.ts +9 -1
- package/ui/list/TreeTable/TreeTable.js +93 -11
package/actions/list.js
CHANGED
|
@@ -42,26 +42,6 @@ exports.LIST_CHANGE_ACTION = '@list/change_action';
|
|
|
42
42
|
exports.LIST_SELECT_ITEM = '@list/select_item';
|
|
43
43
|
//const STORAGE_LAYOUT_KEY_PREFIX = 'listLayout_';
|
|
44
44
|
var lazyTimers = {};
|
|
45
|
-
var createList = function (listId, props) { return ({
|
|
46
|
-
action: props.action || props.action === '' ? props.action : null,
|
|
47
|
-
actionMethod: props.actionMethod || 'get',
|
|
48
|
-
onFetch: props.onFetch,
|
|
49
|
-
onError: props.onError,
|
|
50
|
-
condition: props.condition,
|
|
51
|
-
scope: props.scope,
|
|
52
|
-
total: props.total || null,
|
|
53
|
-
items: null,
|
|
54
|
-
sourceItems: props.items || null,
|
|
55
|
-
isRemote: !props.items,
|
|
56
|
-
loadMore: props._pagination.loadMore,
|
|
57
|
-
primaryKey: props.primaryKey,
|
|
58
|
-
listId: listId,
|
|
59
|
-
formId: (0, get_1["default"])(props, 'searchForm.formId') || listId,
|
|
60
|
-
pageAttribute: (0, get_1["default"])(props, '_pagination.attribute') || null,
|
|
61
|
-
pageSizeAttribute: (0, get_1["default"])(props, '_paginationSize.attribute') || null,
|
|
62
|
-
sortAttribute: (0, get_1["default"])(props, '_sort.attribute') || null,
|
|
63
|
-
layoutAttribute: (0, get_1["default"])(props, '_layout.attribute') || null
|
|
64
|
-
}); };
|
|
65
45
|
var httpFetchHandler = function (list, query, _a, options) {
|
|
66
46
|
var http = _a.http;
|
|
67
47
|
if (options === void 0) { options = {}; }
|
|
@@ -9,5 +9,8 @@ export declare const closeNotification: (id?: string | null) => {
|
|
|
9
9
|
type: string;
|
|
10
10
|
id: string;
|
|
11
11
|
};
|
|
12
|
-
export declare const showNotification: (message: string
|
|
12
|
+
export declare const showNotification: (message: string | {
|
|
13
|
+
message: string;
|
|
14
|
+
description?: string;
|
|
15
|
+
}, level?: ColorName, params?: IShowNotificationParameters) => (dispatch: any) => void;
|
|
13
16
|
export declare const setFlashes: (flashes: any) => ((dispatch: any) => void)[][];
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
export interface IClientStorageComponentConfig {
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*/
|
|
5
|
-
domain?: string;
|
|
6
|
-
/**
|
|
7
|
-
* Автоматически устанавливает куку для всех поддоменов текущего домена,
|
|
8
|
-
* но только если параметр domain не указан явно
|
|
3
|
+
* Позволяет использовать cookie на всех поддоменах (по умолчанию, false)
|
|
9
4
|
*/
|
|
10
5
|
shareBetweenSubdomains?: boolean;
|
|
11
6
|
/**
|
|
@@ -49,7 +44,6 @@ export default class ClientStorageComponent implements IClientStorageComponent {
|
|
|
49
44
|
STORAGE_SESSION: any;
|
|
50
45
|
localStorageAvailable: boolean;
|
|
51
46
|
sessionStorageAvailable: boolean;
|
|
52
|
-
domain?: string;
|
|
53
47
|
shareBetweenSubdomains?: boolean;
|
|
54
48
|
private _ssrCookie;
|
|
55
49
|
constructor(components: any, config: any);
|
|
@@ -62,7 +62,6 @@ var ClientStorageComponent = /** @class */ (function () {
|
|
|
62
62
|
this.sessionStorageAvailable = false;
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
-
this.domain = (config === null || config === void 0 ? void 0 : config.domain) || null;
|
|
66
65
|
this.shareBetweenSubdomains = (_a = config === null || config === void 0 ? void 0 : config.shareBetweenSubdomains) !== null && _a !== void 0 ? _a : false;
|
|
67
66
|
this._ssrCookie = config === null || config === void 0 ? void 0 : config.ssrCookie;
|
|
68
67
|
}
|
|
@@ -88,10 +87,13 @@ var ClientStorageComponent = /** @class */ (function () {
|
|
|
88
87
|
window.sessionStorage.setItem(name, value);
|
|
89
88
|
}
|
|
90
89
|
else {
|
|
90
|
+
var domain = this._getDomain();
|
|
91
91
|
var options = {
|
|
92
|
-
expires: expires
|
|
93
|
-
domain: this._getDomain()
|
|
92
|
+
expires: expires
|
|
94
93
|
};
|
|
94
|
+
if (domain) {
|
|
95
|
+
options.domain = domain;
|
|
96
|
+
}
|
|
95
97
|
if (expires && process.env.IS_SSR) {
|
|
96
98
|
options.expires = (0, dayjs_1["default"])().add(options.expires, 'days').utc().toDate();
|
|
97
99
|
}
|
|
@@ -108,27 +110,27 @@ var ClientStorageComponent = /** @class */ (function () {
|
|
|
108
110
|
window.sessionStorage.removeItem(name);
|
|
109
111
|
}
|
|
110
112
|
else {
|
|
111
|
-
var
|
|
112
|
-
|
|
113
|
-
|
|
113
|
+
var domain = this._getDomain();
|
|
114
|
+
var options = {};
|
|
115
|
+
if (domain) {
|
|
116
|
+
options.domain = domain;
|
|
117
|
+
}
|
|
114
118
|
process.env.IS_SSR ? this._ssrCookie.remove(name, options) : cookie.remove(name, options);
|
|
115
119
|
}
|
|
116
120
|
};
|
|
117
121
|
ClientStorageComponent.prototype._getDomain = function () {
|
|
118
|
-
if (this.domain) {
|
|
119
|
-
return this.domain;
|
|
120
|
-
}
|
|
121
|
-
var host = typeof window !== 'undefined' ? window.location.hostname : '';
|
|
122
122
|
if (this.shareBetweenSubdomains) {
|
|
123
|
+
var host = typeof window !== 'undefined' ? window.location.hostname : '';
|
|
123
124
|
var isIp = /^\d{1,3}(\.\d{1,3}){3}$/.test(host);
|
|
124
|
-
|
|
125
|
+
var isLocalhost = host === 'localhost';
|
|
126
|
+
if (!isIp && !isLocalhost) {
|
|
125
127
|
return host
|
|
126
128
|
.split('.')
|
|
127
129
|
.slice(-2)
|
|
128
130
|
.join('.');
|
|
129
131
|
}
|
|
130
132
|
}
|
|
131
|
-
return
|
|
133
|
+
return null;
|
|
132
134
|
};
|
|
133
135
|
return ClientStorageComponent;
|
|
134
136
|
}());
|
package/docs-autogen-result.json
CHANGED
|
@@ -298,18 +298,10 @@
|
|
|
298
298
|
"IClientStorageComponentConfig"
|
|
299
299
|
],
|
|
300
300
|
"properties": [
|
|
301
|
-
{
|
|
302
|
-
"name": "domain",
|
|
303
|
-
"decorators": [],
|
|
304
|
-
"description": "Кастомный домен для куки",
|
|
305
|
-
"required": false,
|
|
306
|
-
"type": "string",
|
|
307
|
-
"example": null
|
|
308
|
-
},
|
|
309
301
|
{
|
|
310
302
|
"name": "shareBetweenSubdomains",
|
|
311
303
|
"decorators": [],
|
|
312
|
-
"description": "
|
|
304
|
+
"description": "Позволяет использовать cookie на всех поддоменах (по умолчанию, false)",
|
|
313
305
|
"required": false,
|
|
314
306
|
"type": "boolean",
|
|
315
307
|
"example": null
|
|
@@ -429,18 +421,10 @@
|
|
|
429
421
|
"defaultProps": null,
|
|
430
422
|
"extends": [],
|
|
431
423
|
"properties": [
|
|
432
|
-
{
|
|
433
|
-
"name": "domain",
|
|
434
|
-
"decorators": [],
|
|
435
|
-
"description": "Кастомный домен для куки",
|
|
436
|
-
"required": false,
|
|
437
|
-
"type": "string",
|
|
438
|
-
"example": null
|
|
439
|
-
},
|
|
440
424
|
{
|
|
441
425
|
"name": "shareBetweenSubdomains",
|
|
442
426
|
"decorators": [],
|
|
443
|
-
"description": "
|
|
427
|
+
"description": "Позволяет использовать cookie на всех поддоменах (по умолчанию, false)",
|
|
444
428
|
"required": false,
|
|
445
429
|
"type": "boolean",
|
|
446
430
|
"example": null
|
|
@@ -6241,7 +6225,7 @@
|
|
|
6241
6225
|
{
|
|
6242
6226
|
"name": "description",
|
|
6243
6227
|
"decorators": [],
|
|
6244
|
-
"description": "Дополнительное
|
|
6228
|
+
"description": "Дополнительное содержание сообщения.",
|
|
6245
6229
|
"required": false,
|
|
6246
6230
|
"type": "string",
|
|
6247
6231
|
"example": "'Please, check your email.'",
|
|
@@ -6360,7 +6344,7 @@
|
|
|
6360
6344
|
{
|
|
6361
6345
|
"name": "description",
|
|
6362
6346
|
"decorators": [],
|
|
6363
|
-
"description": "Дополнительное
|
|
6347
|
+
"description": "Дополнительное содержание сообщения.",
|
|
6364
6348
|
"required": false,
|
|
6365
6349
|
"type": "string",
|
|
6366
6350
|
"example": "'Please, check your email.'"
|
|
@@ -19628,6 +19612,15 @@
|
|
|
19628
19612
|
"example": null,
|
|
19629
19613
|
"defaultValue": null
|
|
19630
19614
|
},
|
|
19615
|
+
{
|
|
19616
|
+
"name": "itemViewProps",
|
|
19617
|
+
"decorators": [],
|
|
19618
|
+
"description": "Пропсы для отображения элемента",
|
|
19619
|
+
"required": false,
|
|
19620
|
+
"type": "any",
|
|
19621
|
+
"example": null,
|
|
19622
|
+
"defaultValue": null
|
|
19623
|
+
},
|
|
19631
19624
|
{
|
|
19632
19625
|
"name": "items",
|
|
19633
19626
|
"decorators": [],
|
|
@@ -20162,6 +20155,14 @@
|
|
|
20162
20155
|
"type": "React.ReactNode | {}",
|
|
20163
20156
|
"example": null
|
|
20164
20157
|
},
|
|
20158
|
+
{
|
|
20159
|
+
"name": "itemViewProps",
|
|
20160
|
+
"decorators": [],
|
|
20161
|
+
"description": "Пропсы для отображения элемента",
|
|
20162
|
+
"required": false,
|
|
20163
|
+
"type": "any",
|
|
20164
|
+
"example": null
|
|
20165
|
+
},
|
|
20165
20166
|
{
|
|
20166
20167
|
"name": "items",
|
|
20167
20168
|
"decorators": [],
|
|
@@ -32365,6 +32366,14 @@
|
|
|
32365
32366
|
"INotificationItem"
|
|
32366
32367
|
],
|
|
32367
32368
|
"properties": [
|
|
32369
|
+
{
|
|
32370
|
+
"name": "description",
|
|
32371
|
+
"decorators": [],
|
|
32372
|
+
"description": "Дополнительное содержание сообщения.",
|
|
32373
|
+
"required": false,
|
|
32374
|
+
"type": "string",
|
|
32375
|
+
"example": "'Успешно сохранено'"
|
|
32376
|
+
},
|
|
32368
32377
|
{
|
|
32369
32378
|
"name": "id",
|
|
32370
32379
|
"decorators": [],
|
|
@@ -33553,6 +33562,15 @@
|
|
|
33553
33562
|
"type": "ITooltipStylePosition",
|
|
33554
33563
|
"example": null,
|
|
33555
33564
|
"defaultValue": null
|
|
33565
|
+
},
|
|
33566
|
+
{
|
|
33567
|
+
"name": "viewProps",
|
|
33568
|
+
"decorators": [],
|
|
33569
|
+
"description": "Пропсы для отображения элемента",
|
|
33570
|
+
"required": false,
|
|
33571
|
+
"type": "any",
|
|
33572
|
+
"example": null,
|
|
33573
|
+
"defaultValue": null
|
|
33556
33574
|
}
|
|
33557
33575
|
],
|
|
33558
33576
|
"methods": [
|
|
@@ -33710,6 +33728,14 @@
|
|
|
33710
33728
|
"required": true,
|
|
33711
33729
|
"type": "ITooltipStylePosition",
|
|
33712
33730
|
"example": null
|
|
33731
|
+
},
|
|
33732
|
+
{
|
|
33733
|
+
"name": "viewProps",
|
|
33734
|
+
"decorators": [],
|
|
33735
|
+
"description": "Пропсы для отображения элемента",
|
|
33736
|
+
"required": false,
|
|
33737
|
+
"type": "any",
|
|
33738
|
+
"example": null
|
|
33713
33739
|
}
|
|
33714
33740
|
],
|
|
33715
33741
|
"methods": [
|
|
@@ -37901,12 +37927,14 @@
|
|
|
37901
37927
|
"defaultProps": {
|
|
37902
37928
|
"alwaysOpened": "false",
|
|
37903
37929
|
"collapseChildItems": "false",
|
|
37930
|
+
"hasAlternatingColors": "false",
|
|
37904
37931
|
"levelPadding": "32",
|
|
37905
|
-
"saveInClientStorage": "false"
|
|
37932
|
+
"saveInClientStorage": "false",
|
|
37933
|
+
"size": "'md'"
|
|
37906
37934
|
},
|
|
37907
37935
|
"extends": [
|
|
37908
37936
|
"Omit<IGridProps",
|
|
37909
|
-
"'items'>",
|
|
37937
|
+
"'items' | 'itemsIndexing'>",
|
|
37910
37938
|
"Pick<ITreeProps",
|
|
37911
37939
|
"'alwaysOpened' | 'levelPadding' | 'customIcon' | 'saveInClientStorage' | 'collapseChildItems'>"
|
|
37912
37940
|
],
|
|
@@ -37956,6 +37984,24 @@
|
|
|
37956
37984
|
"example": "[\n {\n id: 1,\n name: 'Jane'\n },\n {\n id: 2,\n name: 'John',\n items: [...]\n }\n]",
|
|
37957
37985
|
"defaultValue": null
|
|
37958
37986
|
},
|
|
37987
|
+
{
|
|
37988
|
+
"name": "itemsIndexing",
|
|
37989
|
+
"decorators": [],
|
|
37990
|
+
"description": "",
|
|
37991
|
+
"required": false,
|
|
37992
|
+
"type": "never",
|
|
37993
|
+
"example": null,
|
|
37994
|
+
"defaultValue": null
|
|
37995
|
+
},
|
|
37996
|
+
{
|
|
37997
|
+
"name": "itemsKey",
|
|
37998
|
+
"decorators": [],
|
|
37999
|
+
"description": "Ключ для доступа к вложенным элементам узла",
|
|
38000
|
+
"required": false,
|
|
38001
|
+
"type": "string",
|
|
38002
|
+
"example": "'items'",
|
|
38003
|
+
"defaultValue": null
|
|
38004
|
+
},
|
|
37959
38005
|
{
|
|
37960
38006
|
"name": "levelPadding",
|
|
37961
38007
|
"decorators": [],
|
|
@@ -41348,18 +41394,10 @@
|
|
|
41348
41394
|
"description": "Слой хранения данных в браузере (cookie, local/session storage) или ReactNative",
|
|
41349
41395
|
"tags": {},
|
|
41350
41396
|
"properties": [
|
|
41351
|
-
{
|
|
41352
|
-
"name": "domain",
|
|
41353
|
-
"decorators": [],
|
|
41354
|
-
"description": "Кастомный домен для куки",
|
|
41355
|
-
"required": false,
|
|
41356
|
-
"type": "string",
|
|
41357
|
-
"example": null
|
|
41358
|
-
},
|
|
41359
41397
|
{
|
|
41360
41398
|
"name": "shareBetweenSubdomains",
|
|
41361
41399
|
"decorators": [],
|
|
41362
|
-
"description": "
|
|
41400
|
+
"description": "Позволяет использовать cookie на всех поддоменах (по умолчанию, false)",
|
|
41363
41401
|
"required": false,
|
|
41364
41402
|
"type": "boolean",
|
|
41365
41403
|
"example": null
|
package/en.json
CHANGED
|
@@ -1045,9 +1045,9 @@
|
|
|
1045
1045
|
"\nКомпонент поля ввода текста с маской.\n": "A text input field component with a mask.",
|
|
1046
1046
|
"\nКомпонент Tooltip предоставляет всплывающую подсказку для дочерних элементов.\nВнутри компонента, то есть между тегами Tooltip можно использовать только html теги, например div, span и тд\n": "The Tooltip component provides a popup hint for child elements.\nInside the component, that is, between the Tooltip tags, you can only use HTML tags, e.g., div, span, etc.",
|
|
1047
1047
|
"Логическое значение, указывающее, есть ли еще элементы в списке с бесконечным скроллом": "",
|
|
1048
|
-
"
|
|
1049
|
-
" Автоматически устанавливает куку для всех поддоменов текущего домена,\n но только если параметр domain не указан явно": "",
|
|
1048
|
+
"Позволяет использовать cookie на всех поддоменах (по умолчанию, false)": "",
|
|
1050
1049
|
"Задержка в мс": "",
|
|
1050
|
+
"Дополнительное содержание сообщения.": "",
|
|
1051
1051
|
"Задержка применения введённого значения": "",
|
|
1052
1052
|
"Флаг, который указывает, что высота поля должна быть равна высоте контента": ""
|
|
1053
1053
|
}
|
package/hooks/useList.js
CHANGED
|
@@ -280,7 +280,7 @@ function useList(config) {
|
|
|
280
280
|
dispatch([
|
|
281
281
|
(0, list_2.listSetItems)(config.listId, config.items),
|
|
282
282
|
]);
|
|
283
|
-
}, [dispatch, config.items, config.listId]);
|
|
283
|
+
}, [dispatch, config.items, config.listId, list === null || list === void 0 ? void 0 : list.isFetched]);
|
|
284
284
|
// Check change action
|
|
285
285
|
var prevAction = (0, react_use_1.usePrevious)(config.action);
|
|
286
286
|
(0, react_use_1.useUpdateEffect)(function () {
|
package/package.json
CHANGED
|
@@ -30,7 +30,7 @@ export interface IAlertProps extends IUiComponent {
|
|
|
30
30
|
* @example 'Sending is confirmed!'
|
|
31
31
|
*/
|
|
32
32
|
message?: string;
|
|
33
|
-
/** Дополнительное
|
|
33
|
+
/** Дополнительное содержание сообщения.
|
|
34
34
|
* @example 'Please, check your email.'
|
|
35
35
|
*/
|
|
36
36
|
description?: string;
|
|
@@ -174,6 +174,10 @@ export interface IDropDownFieldProps extends IFieldWrapperInputProps, Omit<IData
|
|
|
174
174
|
* Сигнал, запрещающий отправку запроса на получение данных
|
|
175
175
|
*/
|
|
176
176
|
isFetchDisabled?: boolean;
|
|
177
|
+
/**
|
|
178
|
+
* Пропсы для отображения элемента
|
|
179
|
+
*/
|
|
180
|
+
itemViewProps?: CustomViewProps;
|
|
177
181
|
[key: string]: any;
|
|
178
182
|
}
|
|
179
183
|
export interface IDropDownFieldViewProps extends IDropDownFieldProps {
|
|
@@ -228,7 +228,8 @@ function DropDownField(props) {
|
|
|
228
228
|
childIndex: item.id,
|
|
229
229
|
toggleCollapse: toggleCollapse,
|
|
230
230
|
isItemToSelectAll: item.id === (normalizedItemToSelectAll === null || normalizedItemToSelectAll === void 0 ? void 0 : normalizedItemToSelectAll.id),
|
|
231
|
-
isSelectedAll: isSelectedAll
|
|
231
|
+
isSelectedAll: isSelectedAll,
|
|
232
|
+
itemViewProps: props.itemViewProps
|
|
232
233
|
}); };
|
|
233
234
|
var renderItem = (0, react_1.useCallback)(function (item) {
|
|
234
235
|
if (hasGroup && Array.isArray(item[props.groupAttribute])) {
|
|
@@ -87,6 +87,10 @@ export interface ITooltipProps {
|
|
|
87
87
|
* Дополнительный CSS-класс для элемента отображения
|
|
88
88
|
*/
|
|
89
89
|
className?: CssClassName;
|
|
90
|
+
/**
|
|
91
|
+
* Пропсы для отображения элемента
|
|
92
|
+
*/
|
|
93
|
+
viewProps?: CustomViewProps;
|
|
90
94
|
[key: string]: any;
|
|
91
95
|
}
|
|
92
96
|
export interface ITooltipViewProps extends ITooltipProps {
|
|
@@ -77,7 +77,7 @@ function Tooltip(props) {
|
|
|
77
77
|
})
|
|
78
78
|
: (React.createElement("span", { ref: childRef, onFocus: onShow, onMouseOver: onShow, onBlur: onHide, onMouseOut: onHide }, props.children)),
|
|
79
79
|
isComponentExist && (React.createElement(TooltipPortalInner_1["default"], null,
|
|
80
|
-
React.createElement(TooltipView, { isTooltipVisible: isComponentVisible, content: props.content, position: position, style: style, arrowPosition: arrowPosition, calculatePosition: calculatePosition, className: props.className })))));
|
|
80
|
+
React.createElement(TooltipView, { isTooltipVisible: isComponentVisible, content: props.content, position: position, style: style, arrowPosition: arrowPosition, calculatePosition: calculatePosition, className: props.className, viewProps: props.viewProps })))));
|
|
81
81
|
}
|
|
82
82
|
Tooltip.defaultProps = {
|
|
83
83
|
content: '',
|
|
@@ -10,7 +10,7 @@ export interface ITreeColumnViewProps extends IColumnViewProps, Pick<ITreeTableP
|
|
|
10
10
|
*
|
|
11
11
|
* Компонент для представления данных коллекции в виде иерархической структуры.
|
|
12
12
|
*/
|
|
13
|
-
export interface ITreeTableProps extends Omit<IGridProps, 'items'>, Pick<ITreeProps, 'alwaysOpened' | 'levelPadding' | 'customIcon' | 'saveInClientStorage' | 'collapseChildItems'> {
|
|
13
|
+
export interface ITreeTableProps extends Omit<IGridProps, 'items' | 'itemsIndexing'>, Pick<ITreeProps, 'alwaysOpened' | 'levelPadding' | 'customIcon' | 'saveInClientStorage' | 'collapseChildItems'> {
|
|
14
14
|
/**
|
|
15
15
|
* Элементы коллекции
|
|
16
16
|
* @example
|
|
@@ -37,6 +37,12 @@ export interface ITreeTableProps extends Omit<IGridProps, 'items'>, Pick<ITreePr
|
|
|
37
37
|
* @example 'arrow'
|
|
38
38
|
*/
|
|
39
39
|
customIcon?: string | React.ReactElement;
|
|
40
|
+
/**
|
|
41
|
+
* Ключ для доступа к вложенным элементам узла
|
|
42
|
+
* @example 'items'
|
|
43
|
+
*/
|
|
44
|
+
itemsKey?: string;
|
|
45
|
+
itemsIndexing?: never;
|
|
40
46
|
}
|
|
41
47
|
export declare const addTreeColumnFieldsToFirstColumn: (columns: IGridColumn[], levelPadding: string | number, customIcon?: string | React.ReactElement) => IGridColumn[];
|
|
42
48
|
declare function TreeTable(props: ITreeTableProps): JSX.Element;
|
|
@@ -46,6 +52,8 @@ declare namespace TreeTable {
|
|
|
46
52
|
alwaysOpened: boolean;
|
|
47
53
|
saveInClientStorage: boolean;
|
|
48
54
|
collapseChildItems: boolean;
|
|
55
|
+
size: string;
|
|
56
|
+
hasAlternatingColors: boolean;
|
|
49
57
|
};
|
|
50
58
|
}
|
|
51
59
|
export default TreeTable;
|
|
@@ -50,10 +50,13 @@ exports.addTreeColumnFieldsToFirstColumn = void 0;
|
|
|
50
50
|
var React = __importStar(require("react"));
|
|
51
51
|
var react_1 = require("react");
|
|
52
52
|
var merge_1 = __importDefault(require("lodash-es/merge"));
|
|
53
|
-
var
|
|
53
|
+
var Format_1 = __importDefault(require("@steroidsjs/core/ui/format/Format"));
|
|
54
|
+
var ControlsColumn_1 = __importDefault(require("@steroidsjs/core/ui/list/ControlsColumn"));
|
|
55
|
+
var upperFirst_1 = __importDefault(require("lodash-es/upperFirst"));
|
|
56
|
+
var isString_1 = __importDefault(require("lodash-es/isString"));
|
|
57
|
+
var hooks_1 = require("@steroidsjs/core/hooks");
|
|
54
58
|
var useTree_1 = __importDefault(require("../../../hooks/useTree"));
|
|
55
|
-
var
|
|
56
|
-
var useSelector_1 = __importDefault(require("../../../hooks/useSelector"));
|
|
59
|
+
var useList_1 = __importDefault(require("../../../hooks/useList"));
|
|
57
60
|
var TREE_COLUMN_VIEW_FIELDS = {
|
|
58
61
|
valueView: 'TreeColumnView',
|
|
59
62
|
headerClassName: 'TreeColumnHeader'
|
|
@@ -66,25 +69,104 @@ var addTreeColumnFieldsToFirstColumn = function (columns, levelPadding, customIc
|
|
|
66
69
|
};
|
|
67
70
|
exports.addTreeColumnFieldsToFirstColumn = addTreeColumnFieldsToFirstColumn;
|
|
68
71
|
function TreeTable(props) {
|
|
69
|
-
var
|
|
70
|
-
var
|
|
71
|
-
var
|
|
72
|
+
var components = (0, hooks_1.useComponents)();
|
|
73
|
+
var mergedColumns = (0, react_1.useMemo)(function () { return (0, exports.addTreeColumnFieldsToFirstColumn)(props.columns, props.levelPadding, props.customIcon); }, [props.columns, props.customIcon, props.levelPadding]);
|
|
74
|
+
var _a = (0, useList_1["default"])({
|
|
75
|
+
listId: props.listId,
|
|
76
|
+
primaryKey: props.primaryKey,
|
|
77
|
+
action: props.action,
|
|
78
|
+
actionMethod: props.actionMethod,
|
|
79
|
+
pagination: props.pagination,
|
|
80
|
+
paginationSize: props.paginationSize,
|
|
81
|
+
infiniteScroll: props.infiniteScroll,
|
|
82
|
+
sort: props.sort,
|
|
83
|
+
layout: props.layout,
|
|
84
|
+
empty: props.empty,
|
|
85
|
+
searchForm: props.searchForm,
|
|
86
|
+
autoDestroy: props.autoDestroy,
|
|
87
|
+
onFetch: props.onFetch,
|
|
88
|
+
condition: props.condition,
|
|
89
|
+
addressBar: props.addressBar,
|
|
90
|
+
scope: props.scope,
|
|
91
|
+
query: props.query,
|
|
92
|
+
model: props.model,
|
|
93
|
+
searchModel: props.searchModel,
|
|
72
94
|
items: props.items,
|
|
95
|
+
initialItems: props.initialItems,
|
|
96
|
+
initialTotal: props.initialTotal,
|
|
97
|
+
autoFetchOnFormChanges: props.autoFetchOnFormChanges
|
|
98
|
+
}), list = _a.list, model = _a.model, searchModel = _a.searchModel, paginationPosition = _a.paginationPosition, paginationSizePosition = _a.paginationSizePosition, layoutNamesPosition = _a.layoutNamesPosition, renderList = _a.renderList, renderLoading = _a.renderLoading, renderEmpty = _a.renderEmpty, renderPagination = _a.renderPagination, renderPaginationSize = _a.renderPaginationSize, renderLayoutNames = _a.renderLayoutNames, renderSearchForm = _a.renderSearchForm, renderInfiniteScroll = _a.renderInfiniteScroll, onFetch = _a.onFetch, onSort = _a.onSort, sort = _a.sort;
|
|
99
|
+
var items = (0, react_1.useMemo)(function () { return (list === null || list === void 0 ? void 0 : list.items) || []; }, [list === null || list === void 0 ? void 0 : list.items]);
|
|
100
|
+
var treeItems = (0, useTree_1["default"])({
|
|
101
|
+
items: items,
|
|
73
102
|
autoOpenLevels: 0,
|
|
74
103
|
alwaysOpened: props.alwaysOpened,
|
|
75
|
-
currentPage: list === null || list === void 0 ? void 0 : list.page,
|
|
76
|
-
itemsOnPage: list === null || list === void 0 ? void 0 : list.pageSize,
|
|
77
104
|
collapseChildItems: props.collapseChildItems,
|
|
78
105
|
saveInClientStorage: props.saveInClientStorage,
|
|
79
106
|
clientStorageId: props.listId,
|
|
80
|
-
isSinglePageItems: props.isSinglePageItems
|
|
107
|
+
isSinglePageItems: props.isSinglePageItems,
|
|
108
|
+
itemsKey: props.itemsKey
|
|
81
109
|
}).treeItems;
|
|
82
|
-
|
|
110
|
+
var renderLabel = (0, react_1.useCallback)(function (column) {
|
|
111
|
+
if (column.headerView) {
|
|
112
|
+
var HeaderView = column.headerView;
|
|
113
|
+
return (React.createElement(HeaderView, __assign({}, column, column.headerProps, { listId: props.listId })));
|
|
114
|
+
}
|
|
115
|
+
if (column.label || column.label === '') {
|
|
116
|
+
return column.label;
|
|
117
|
+
}
|
|
118
|
+
var attributeMeta = []
|
|
119
|
+
.concat((model === null || model === void 0 ? void 0 : model.attributes) || [])
|
|
120
|
+
.concat((searchModel === null || searchModel === void 0 ? void 0 : searchModel.attributes) || [])
|
|
121
|
+
.find(function (item) { return column.attribute && item.attribute === column.attribute; });
|
|
122
|
+
return attributeMeta ? attributeMeta.label : (0, upperFirst_1["default"])(column.attribute);
|
|
123
|
+
}, [model, props.listId, searchModel]);
|
|
124
|
+
var renderValue = (0, react_1.useCallback)(function (item, column) {
|
|
125
|
+
// Custom component
|
|
126
|
+
if (column.valueView) {
|
|
127
|
+
var isValueViewString = typeof column.valueView === 'string';
|
|
128
|
+
var ValueView = isValueViewString ? components.ui.getView("list.".concat(column.valueView)) : column.valueView;
|
|
129
|
+
var viewProps_1 = __assign(__assign(__assign({}, column), column.valueProps), { listId: props.listId, primaryKey: props.primaryKey, item: item, size: props.size });
|
|
130
|
+
if (isValueViewString) {
|
|
131
|
+
return components.ui.renderView(ValueView, viewProps_1);
|
|
132
|
+
}
|
|
133
|
+
return (React.createElement(ValueView, __assign({}, viewProps_1)));
|
|
134
|
+
}
|
|
135
|
+
return (React.createElement(Format_1["default"], __assign({ item: item, model: props.model }, column, (column.formatter || {}))));
|
|
136
|
+
}, [props.listId, props.model, props.primaryKey]);
|
|
137
|
+
// Columns
|
|
138
|
+
var columns = (0, react_1.useMemo)(function () { return []
|
|
139
|
+
.concat({
|
|
140
|
+
label: __('№'),
|
|
141
|
+
valueView: function (_a) {
|
|
142
|
+
var item = _a.item;
|
|
143
|
+
return item.index + 1;
|
|
144
|
+
},
|
|
145
|
+
visible: false
|
|
146
|
+
})
|
|
147
|
+
.concat(mergedColumns)
|
|
148
|
+
.concat({
|
|
149
|
+
valueView: ControlsColumn_1["default"],
|
|
150
|
+
valueProps: {
|
|
151
|
+
controls: props.controls
|
|
152
|
+
},
|
|
153
|
+
visible: !!props.controls
|
|
154
|
+
})
|
|
155
|
+
.map(function (column) { return ((0, isString_1["default"])(column) ? { attribute: column } : column); })
|
|
156
|
+
.filter(function (column) { return column.visible !== false; })
|
|
157
|
+
.map(function (column) { return (__assign(__assign({}, column), { label: renderLabel(column) })); }); }, [mergedColumns, props.controls, renderLabel]);
|
|
158
|
+
var viewProps = (0, react_1.useMemo)(function () { return (__assign(__assign({}, props.viewProps), { list: list, paginationPosition: paginationPosition, paginationSizePosition: paginationSizePosition, layoutNamesPosition: layoutNamesPosition, renderList: renderList, renderLoading: renderLoading, renderEmpty: renderEmpty, renderPagination: renderPagination, renderPaginationSize: renderPaginationSize, renderLayoutNames: renderLayoutNames, renderSearchForm: renderSearchForm, renderInfiniteScroll: renderInfiniteScroll, renderValue: renderValue, columns: columns, onFetch: onFetch, onSort: onSort, sort: sort, items: treeItems, searchForm: props.searchForm, listId: props.listId, isLoading: props.isLoading, size: props.size, hasAlternatingColors: props.hasAlternatingColors, className: props.className, primaryKey: props.primaryKey })); }, [treeItems, list, paginationPosition, paginationSizePosition, layoutNamesPosition, renderList, renderLoading, renderEmpty,
|
|
159
|
+
renderPagination, renderPaginationSize, renderLayoutNames, renderSearchForm, renderInfiniteScroll, renderValue,
|
|
160
|
+
columns, onFetch, onSort, sort, props.searchForm, props.listId, props.isLoading, props.size, props.hasAlternatingColors,
|
|
161
|
+
props.className, props.primaryKey, props.viewProps]);
|
|
162
|
+
return components.ui.renderView(props.view || 'list.GridView', viewProps);
|
|
83
163
|
}
|
|
84
164
|
exports["default"] = TreeTable;
|
|
85
165
|
TreeTable.defaultProps = {
|
|
86
166
|
levelPadding: 32,
|
|
87
167
|
alwaysOpened: false,
|
|
88
168
|
saveInClientStorage: false,
|
|
89
|
-
collapseChildItems: false
|
|
169
|
+
collapseChildItems: false,
|
|
170
|
+
size: 'md',
|
|
171
|
+
hasAlternatingColors: false
|
|
90
172
|
};
|