@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 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, level?: ColorName, params?: IShowNotificationParameters) => (dispatch: any) => void;
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 options = {
112
- domain: this._getDomain()
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
- if (!isIp) {
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 host;
133
+ return null;
132
134
  };
133
135
  return ClientStorageComponent;
134
136
  }());
@@ -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": " Автоматически устанавливает куку для всех поддоменов текущего домена,\n но только если параметр domain не указан явно",
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": " Автоматически устанавливает куку для всех поддоменов текущего домена,\n но только если параметр domain не указан явно",
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": " Автоматически устанавливает куку для всех поддоменов текущего домена,\n но только если параметр domain не указан явно",
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "3.0.90",
3
+ "version": "3.0.92",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -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])) {
@@ -28,6 +28,10 @@ interface INotificationItem {
28
28
  * @example Сохранено!
29
29
  */
30
30
  message?: string;
31
+ /** Дополнительное содержание сообщения.
32
+ * @example 'Успешно сохранено'
33
+ */
34
+ description?: string;
31
35
  isClosing?: boolean;
32
36
  }
33
37
  /**
@@ -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 list_1 = require("@steroidsjs/core/reducers/list");
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 Grid_1 = __importDefault(require("../Grid"));
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 columns = (0, react_1.useMemo)(function () { return (0, exports.addTreeColumnFieldsToFirstColumn)(props.columns, props.levelPadding, props.customIcon); }, [props.columns, props.customIcon, props.levelPadding]);
70
- var list = (0, useSelector_1["default"])(function (state) { return (0, list_1.getList)(state, props.listId); });
71
- var treeItems = (0, useTree_1["default"])({
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
- return (React.createElement(Grid_1["default"], __assign({}, props, { columns: columns, items: treeItems, itemsIndexing: false })));
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
  };