@steroidsjs/core 3.0.5 → 3.0.6

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.
@@ -4581,6 +4581,14 @@
4581
4581
  "type": "number",
4582
4582
  "example": "1"
4583
4583
  },
4584
+ {
4585
+ "name": "clientStorageId",
4586
+ "decorators": [],
4587
+ "description": "Идентификатор (ключ) для сохранения в LocalStorage коллекции.",
4588
+ "required": false,
4589
+ "type": "string",
4590
+ "example": "'exampleTree'"
4591
+ },
4584
4592
  {
4585
4593
  "name": "currentPage",
4586
4594
  "decorators": [],
@@ -4629,6 +4637,14 @@
4629
4637
  "type": "any",
4630
4638
  "example": null
4631
4639
  },
4640
+ {
4641
+ "name": "saveInClientStorage",
4642
+ "decorators": [],
4643
+ "description": "Сохранение в localStorage уровней вложенности.",
4644
+ "required": false,
4645
+ "type": "boolean",
4646
+ "example": "true"
4647
+ },
4632
4648
  {
4633
4649
  "name": "selectedItemId",
4634
4650
  "decorators": [],
@@ -15312,7 +15328,7 @@
15312
15328
  "'items'>",
15313
15329
  "IUiComponent",
15314
15330
  "Pick<ITreeProps",
15315
- "'levelPadding' | 'alwaysOpened' | 'customIcon'>"
15331
+ "'levelPadding' | 'alwaysOpened' | 'hasIconExpandOnly' | 'customIcon' | 'saveInClientStorage'>"
15316
15332
  ],
15317
15333
  "properties": [
15318
15334
  {
@@ -15423,6 +15439,15 @@
15423
15439
  "example": "items",
15424
15440
  "defaultValue": null
15425
15441
  },
15442
+ {
15443
+ "name": "hasIconExpandOnly",
15444
+ "decorators": [],
15445
+ "description": "Флаг, определяющий раскрывать вложенные элементы по клику на весь элемент или только на иконку",
15446
+ "required": false,
15447
+ "type": "boolean",
15448
+ "example": "false",
15449
+ "defaultValue": null
15450
+ },
15426
15451
  {
15427
15452
  "name": "hasOnlyLeafCheckboxes",
15428
15453
  "decorators": [],
@@ -15576,6 +15601,15 @@
15576
15601
  "example": "true",
15577
15602
  "defaultValue": null
15578
15603
  },
15604
+ {
15605
+ "name": "saveInClientStorage",
15606
+ "decorators": [],
15607
+ "description": "Сохранение в localStorage уровней вложенности.",
15608
+ "required": false,
15609
+ "type": "boolean",
15610
+ "example": "true",
15611
+ "defaultValue": null
15612
+ },
15579
15613
  {
15580
15614
  "name": "selectFirst",
15581
15615
  "decorators": [],
@@ -15671,7 +15705,7 @@
15671
15705
  "extends": [
15672
15706
  "IFieldWrapperOutputProps",
15673
15707
  "Pick<ITreeProps",
15674
- "'levelPadding' | 'customIcon'>"
15708
+ "'levelPadding' | 'hasIconExpandOnly' | 'customIcon'>"
15675
15709
  ],
15676
15710
  "properties": [
15677
15711
  {
@@ -15706,6 +15740,14 @@
15706
15740
  "type": "string",
15707
15741
  "example": null
15708
15742
  },
15743
+ {
15744
+ "name": "hasIconExpandOnly",
15745
+ "decorators": [],
15746
+ "description": "Флаг, определяющий раскрывать вложенные элементы по клику на весь элемент или только на иконку",
15747
+ "required": false,
15748
+ "type": "boolean",
15749
+ "example": "false"
15750
+ },
15709
15751
  {
15710
15752
  "name": "hasOnlyLeafCheckboxes",
15711
15753
  "decorators": [],
@@ -36567,7 +36609,7 @@
36567
36609
  "extends": [
36568
36610
  "IColumnViewProps",
36569
36611
  "Pick<ITreeTableProps",
36570
- "'levelPadding' | 'customIcon'>"
36612
+ "'levelPadding' | 'customIcon' >"
36571
36613
  ],
36572
36614
  "properties": [
36573
36615
  {
@@ -36773,13 +36815,14 @@
36773
36815
  "tags": {},
36774
36816
  "defaultProps": {
36775
36817
  "alwaysOpened": "false",
36776
- "levelPadding": "32"
36818
+ "levelPadding": "32",
36819
+ "saveInClientStorage": "false"
36777
36820
  },
36778
36821
  "extends": [
36779
36822
  "Omit<IGridProps",
36780
36823
  "'items'>",
36781
36824
  "Pick<ITreeProps",
36782
- "'alwaysOpened' | 'levelPadding' | 'customIcon'>"
36825
+ "'alwaysOpened' | 'levelPadding' | 'customIcon' | 'saveInClientStorage'>"
36783
36826
  ],
36784
36827
  "properties": [
36785
36828
  {
@@ -36817,6 +36860,15 @@
36817
36860
  "type": "number",
36818
36861
  "example": "32",
36819
36862
  "defaultValue": "32"
36863
+ },
36864
+ {
36865
+ "name": "saveInClientStorage",
36866
+ "decorators": [],
36867
+ "description": "Сохранение в localStorage уровней вложенности.",
36868
+ "required": false,
36869
+ "type": "boolean",
36870
+ "example": "true",
36871
+ "defaultValue": "false"
36820
36872
  }
36821
36873
  ],
36822
36874
  "methods": []
@@ -38832,6 +38884,14 @@
38832
38884
  "type": "string",
38833
38885
  "example": null
38834
38886
  },
38887
+ {
38888
+ "name": "clientStorageId",
38889
+ "decorators": [],
38890
+ "description": "Идентификатор (ключ) для сохранения в LocalStorage коллекции.",
38891
+ "required": false,
38892
+ "type": "string",
38893
+ "example": "'exampleTree'"
38894
+ },
38835
38895
  {
38836
38896
  "name": "customIcon",
38837
38897
  "decorators": [],
@@ -38912,6 +38972,14 @@
38912
38972
  "type": "any",
38913
38973
  "example": null
38914
38974
  },
38975
+ {
38976
+ "name": "saveInClientStorage",
38977
+ "decorators": [],
38978
+ "description": "Сохранение в localStorage уровней вложенности.",
38979
+ "required": false,
38980
+ "type": "boolean",
38981
+ "example": "true"
38982
+ },
38915
38983
  {
38916
38984
  "name": "selectedItemId",
38917
38985
  "decorators": [],
@@ -38989,15 +39057,6 @@
38989
39057
  "example": null
38990
39058
  }
38991
39059
  ]
38992
- },
38993
- {
38994
- "name": "onNestedItemClick",
38995
- "decorators": [],
38996
- "description": "",
38997
- "required": false,
38998
- "type": "void",
38999
- "example": null,
39000
- "parameters": []
39001
39060
  }
39002
39061
  ]
39003
39062
  },
@@ -39015,6 +39074,7 @@
39015
39074
  "itemsKey": "'items'",
39016
39075
  "level": "0",
39017
39076
  "levelPadding": "32",
39077
+ "saveInClientStorage": "false",
39018
39078
  "useSameSelectedItemId": "true"
39019
39079
  },
39020
39080
  "extends": [
@@ -39058,6 +39118,15 @@
39058
39118
  "example": null,
39059
39119
  "defaultValue": null
39060
39120
  },
39121
+ {
39122
+ "name": "clientStorageId",
39123
+ "decorators": [],
39124
+ "description": "Идентификатор (ключ) для сохранения в LocalStorage коллекции.",
39125
+ "required": false,
39126
+ "type": "string",
39127
+ "example": "'exampleTree'",
39128
+ "defaultValue": null
39129
+ },
39061
39130
  {
39062
39131
  "name": "customIcon",
39063
39132
  "decorators": [],
@@ -39139,6 +39208,15 @@
39139
39208
  "example": null,
39140
39209
  "defaultValue": null
39141
39210
  },
39211
+ {
39212
+ "name": "saveInClientStorage",
39213
+ "decorators": [],
39214
+ "description": "Сохранение в localStorage уровней вложенности.",
39215
+ "required": false,
39216
+ "type": "boolean",
39217
+ "example": "true",
39218
+ "defaultValue": "false"
39219
+ },
39142
39220
  {
39143
39221
  "name": "selectedItemId",
39144
39222
  "decorators": [],
@@ -39257,6 +39335,14 @@
39257
39335
  "type": "string",
39258
39336
  "example": null
39259
39337
  },
39338
+ {
39339
+ "name": "clientStorageId",
39340
+ "decorators": [],
39341
+ "description": "Идентификатор (ключ) для сохранения в LocalStorage коллекции.",
39342
+ "required": false,
39343
+ "type": "string",
39344
+ "example": "'exampleTree'"
39345
+ },
39260
39346
  {
39261
39347
  "name": "customIcon",
39262
39348
  "decorators": [],
@@ -39329,6 +39415,14 @@
39329
39415
  "type": "any",
39330
39416
  "example": null
39331
39417
  },
39418
+ {
39419
+ "name": "saveInClientStorage",
39420
+ "decorators": [],
39421
+ "description": "Сохранение в localStorage уровней вложенности.",
39422
+ "required": false,
39423
+ "type": "boolean",
39424
+ "example": "true"
39425
+ },
39332
39426
  {
39333
39427
  "name": "selectedItemId",
39334
39428
  "decorators": [],
package/en.json CHANGED
@@ -979,6 +979,8 @@
979
979
  "Скрыть иконку c лева от элемента": "",
980
980
  "\nКомпонент `Kanban` позволяет создать доску для управления задачами.\nКоличество столбцов задается с помощью пропа `columns`.\nЗадачи на доске можно создавать, редактировать и перемещать с визуальным отображением.\n\nДля работы этого компонента необходимо установить в проекте зависимости `react-beautiful-dnd`\nи передать в пропсы `droppableComponent`, `draggableComponent` и `dndContext`\nкомпоненты `Droppable`, `Draggable` и `DragDropContext` соответственно.\n\nДля корректной работы функционала создания задач,\nнеобходимо установить в проекте зависимости `@ckeditor/ckeditor5-react` и `@steroidsjs/ckeditor5`,\nзатем импортировать `CKEditor` из `@ckeditor/ckeditor5-react` и `ClassicEditor` из `@steroidsjs/ckeditor5/packages/ckeditor5-build-classic`.\nИмпортированные компоненты нужно передать в проп `createTaskEditorConfig`,\nв поле `htmlComponent` передать `CKEditor`, а в `editorConstructor` передать `ClassicEditor`.\n": "",
981
981
  "Компонент для создания HTML-разметки, использующий WYSIWYG редактор.\n\nДля использования WYSIWYG редактора, необходимо установить в проекте зависимости `@ckeditor/ckeditor5-react` и `@steroidsjs/ckeditor5`,\nзатем импортировать `CKEditor` из `@ckeditor/ckeditor5-react` и `ClassicEditor` из `@steroidsjs/ckeditor5/packages/ckeditor5-build-classic`.\nКомпонент `CKEditor` нужно передать в проп `htmlComponent`, а конструктор `ClassicEditor` в проп `editorConstructor`.\n\nПри передаче `HtmlField` с бэкенда, необходимо переопределить `view` компонента, указав локальный.\nВ локальном компоненте добавить вместо пропсов `htmlComponent` и `editorConstructor` импорты `CKEditor` и `ClassicEditor` соотвественно.\n": "",
982
+ "Идентификатор (ключ) для сохранения в LocalStorage коллекции.": "",
983
+ "Сохранение в localStorage уровней вложенности.": "",
982
984
  "Компоненты для подключения wysiwyg редактора": "",
983
985
  "Отображать чекбоксы только на узлах, не имеющих вложенных элементов": "",
984
986
  "Размер компонента и вложенных полей": "",
@@ -100,5 +100,15 @@ export interface ITreeConfig {
100
100
  * @example true
101
101
  */
102
102
  useSameSelectedItemId?: boolean;
103
+ /**
104
+ * Сохранение в localStorage уровней вложенности.
105
+ * @example true
106
+ */
107
+ saveInClientStorage?: boolean;
108
+ /**
109
+ * Идентификатор (ключ) для сохранения в LocalStorage коллекции.
110
+ * @example 'exampleTree'
111
+ */
112
+ clientStorageId?: string;
103
113
  }
104
114
  export default function useTree(config: ITreeConfig): ITreeOutput;
package/hooks/useTree.js CHANGED
@@ -22,12 +22,15 @@ var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
22
22
  var isEmpty_1 = __importDefault(require("lodash-es/isEmpty"));
23
23
  var isNil_1 = __importDefault(require("lodash-es/isNil"));
24
24
  var keys_1 = __importDefault(require("lodash-es/keys"));
25
+ var react_use_1 = require("react-use");
26
+ var useComponents_1 = __importDefault(require("./useComponents"));
25
27
  var useSelector_1 = __importDefault(require("./useSelector"));
26
28
  var router_1 = require("../reducers/router");
27
29
  var INITIAL_CURRENT_LEVEL = 0;
28
30
  var DOT_SEPARATOR = '.';
29
31
  var EMPTY_PARENT_ID = '';
30
32
  var FIRST_LEVEL_PARENT_ID = '0';
33
+ var CLIENT_STORAGE_KEY = '_tree';
31
34
  var defaultProps = {
32
35
  itemsKey: 'items',
33
36
  autoOpenLevels: 0
@@ -96,6 +99,7 @@ function useTree(config) {
96
99
  var primaryKey = config.itemsKey || defaultProps.itemsKey;
97
100
  var _a = (0, react_1.useState)(null), selectedUniqueId = _a[0], setSelectedUniqueId = _a[1];
98
101
  var _b = (0, react_1.useState)({}), expandedItems = _b[0], setExpandedItems = _b[1];
102
+ var clientStorage = (0, useComponents_1["default"])().clientStorage;
99
103
  //Redux connection
100
104
  var _c = (0, useSelector_1["default"])(function (state) { return ({
101
105
  routes: (0, isString_1["default"])(config.items) ? (0, router_1.getNavItems)(state, config.items) : null,
@@ -116,11 +120,32 @@ function useTree(config) {
116
120
  }, [config.items, config.routerParams, routes]);
117
121
  // Initial expanded items
118
122
  (0, react_1.useEffect)(function () {
119
- // TODO add clientStorage
120
123
  setExpandedItems(getAutoExpandedItems(items, selectedItemId, primaryKey, config.autoOpenLevels));
121
124
  var selectedItem = findChildById(items, selectedItemId, primaryKey);
122
125
  setSelectedUniqueId(selectedItem ? selectedItem.uniqueId : null);
123
126
  }, [items]);
127
+ var localTree = JSON.parse(clientStorage.get(CLIENT_STORAGE_KEY)) || {};
128
+ var saveInClientStorage = function () {
129
+ if (config.saveInClientStorage) {
130
+ localTree[config.clientStorageId] = expandedItems;
131
+ clientStorage.set(CLIENT_STORAGE_KEY, JSON.stringify(localTree));
132
+ }
133
+ };
134
+ (0, react_use_1.useMount)(function () {
135
+ if (config.saveInClientStorage) {
136
+ var treeData = localTree[config.clientStorageId];
137
+ if (treeData) {
138
+ setExpandedItems(treeData);
139
+ }
140
+ }
141
+ });
142
+ (0, react_use_1.useUnmount)(function () {
143
+ saveInClientStorage();
144
+ });
145
+ (0, react_use_1.useBeforeUnload)(function () {
146
+ saveInClientStorage();
147
+ return true;
148
+ });
124
149
  var onExpand = (0, react_1.useCallback)(function (e, uniqueId, item) {
125
150
  var _a;
126
151
  e.preventDefault();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@steroidsjs/core",
3
- "version": "3.0.5",
3
+ "version": "3.0.6",
4
4
  "description": "",
5
5
  "author": "Vladimir Kozhin <hello@kozhindev.com>",
6
6
  "repository": {
@@ -19,7 +19,7 @@ type CheckboxTreeItems = string | ({
19
19
  *
20
20
  * Список с вложенными чекбоксами. Используется в формах для создания иерархической структуры и выбора нескольких значений.
21
21
  */
22
- export interface ICheckboxTreeFieldProps extends IFieldWrapperInputProps, Omit<IDataProviderConfig, 'items'>, Omit<IDataSelectConfig, 'items'>, IUiComponent, Pick<ITreeProps, 'levelPadding' | 'alwaysOpened' | 'customIcon'> {
22
+ export interface ICheckboxTreeFieldProps extends IFieldWrapperInputProps, Omit<IDataProviderConfig, 'items'>, Omit<IDataSelectConfig, 'items'>, IUiComponent, Pick<ITreeProps, 'levelPadding' | 'alwaysOpened' | 'hasIconExpandOnly' | 'customIcon' | 'saveInClientStorage'> {
23
23
  /**
24
24
  * Свойства для элемента input
25
25
  * @example { onKeyDown: ... }
@@ -52,7 +52,7 @@ export interface ICheckboxTreeFieldProps extends IFieldWrapperInputProps, Omit<I
52
52
  hasOnlyLeafCheckboxes?: boolean;
53
53
  [key: string]: any;
54
54
  }
55
- export interface ICheckboxTreeFieldViewProps extends IFieldWrapperOutputProps, Pick<ITreeProps, 'levelPadding' | 'customIcon'> {
55
+ export interface ICheckboxTreeFieldViewProps extends IFieldWrapperOutputProps, Pick<ITreeProps, 'levelPadding' | 'hasIconExpandOnly' | 'customIcon'> {
56
56
  items: {
57
57
  id: number | string | boolean;
58
58
  label?: string;
@@ -67,6 +67,6 @@ export interface ICheckboxTreeFieldViewProps extends IFieldWrapperOutputProps, P
67
67
  size?: Size;
68
68
  hasOnlyLeafCheckboxes?: boolean;
69
69
  }
70
- export declare const getNestedItemsIds: (item: any, groupAttribute: any) => any[];
70
+ export declare const getNestedItemsIds: (item: any, groupAttribute: any, hasOnlyLeafCheckboxes?: boolean) => any[];
71
71
  declare const _default: import("../../../ui/form/Field/fieldWrapper").FieldWrapperComponent<ICheckboxTreeFieldProps>;
72
72
  export default _default;
@@ -44,12 +44,13 @@ var isArray_1 = __importDefault(require("lodash-es/isArray"));
44
44
  var isEqual_1 = __importDefault(require("lodash-es/isEqual"));
45
45
  var hooks_1 = require("../../../hooks");
46
46
  var fieldWrapper_1 = __importDefault(require("../../../ui/form/Field/fieldWrapper"));
47
- var getNestedItemsIds = function (item, groupAttribute) {
47
+ var getNestedItemsIds = function (item, groupAttribute, hasOnlyLeafCheckboxes) {
48
+ if (hasOnlyLeafCheckboxes === void 0) { hasOnlyLeafCheckboxes = false; }
48
49
  if (item.disabled) {
49
50
  return [];
50
51
  }
51
52
  var _a = item, _b = groupAttribute, _c = _a[_b], nestedItems = _c === void 0 ? [] : _c;
52
- var result = [item.id];
53
+ var result = hasOnlyLeafCheckboxes ? [] : [item.id];
53
54
  if (groupAttribute && (0, isArray_1["default"])(nestedItems)) {
54
55
  nestedItems.reduce(function (acc, nestedItem) {
55
56
  if ((0, isArray_1["default"])(nestedItem[groupAttribute])) {
@@ -88,8 +89,8 @@ function CheckboxTreeField(props) {
88
89
  inputValue: props.input.value
89
90
  }), selectedIds = _a.selectedIds, setSelectedIds = _a.setSelectedIds;
90
91
  var onItemSelect = (0, react_1.useCallback)(function (checkbox) {
91
- if (checkbox.hasItems && !props.hasOnlyLeafCheckboxes) {
92
- var selectedItemIds = (0, exports.getNestedItemsIds)(checkbox, props.primaryKey);
92
+ if (checkbox.hasItems) {
93
+ var selectedItemIds = (0, exports.getNestedItemsIds)(checkbox, props.primaryKey, props.hasOnlyLeafCheckboxes);
93
94
  setSelectedIds(selectedItemIds);
94
95
  }
95
96
  else if (checkbox.id && !checkbox.hasItems) {
@@ -126,8 +127,9 @@ function CheckboxTreeField(props) {
126
127
  renderCheckbox: renderCheckbox,
127
128
  size: props.size,
128
129
  levelPadding: props.levelPadding,
129
- hasOnlyLeafCheckboxes: props.hasOnlyLeafCheckboxes
130
- }); }, [onItemSelect, props.levelPadding, props.hasOnlyLeafCheckboxes, props.size, renderCheckbox, selectedIds, treeItems]);
130
+ hasOnlyLeafCheckboxes: props.hasOnlyLeafCheckboxes,
131
+ hasIconExpandOnly: props.hasIconExpandOnly
132
+ }); }, [treeItems, onItemSelect, selectedIds, renderCheckbox, props.size, props.levelPadding, props.hasOnlyLeafCheckboxes, props.hasIconExpandOnly]);
131
133
  return components.ui.renderView(props.view || 'form.CheckboxTreeFieldView', viewProps);
132
134
  }
133
135
  CheckboxTreeField.defaultProps = {
@@ -137,6 +139,8 @@ CheckboxTreeField.defaultProps = {
137
139
  levelPadding: 32,
138
140
  alwaysOpened: false,
139
141
  primaryKey: 'items',
140
- hasOnlyLeafCheckboxes: false
142
+ hasOnlyLeafCheckboxes: false,
143
+ hasIconExpandOnly: true,
144
+ saveInClientStorage: false
141
145
  };
142
146
  exports["default"] = (0, fieldWrapper_1["default"])('CheckboxTreeField', CheckboxTreeField);
@@ -50,7 +50,8 @@ function NumberField(props) {
50
50
  var onInputChange = (0, useInputTypeNumber_1["default"])(currentInputRef, {
51
51
  max: props.max,
52
52
  min: props.min,
53
- value: props.input.value
53
+ value: props.input.value,
54
+ required: props.required
54
55
  }, onChange).onInputChange;
55
56
  var onStep = (0, react_1.useCallback)(function (isIncrement) {
56
57
  var _a;
@@ -3,6 +3,7 @@ interface IInputTypeNumberProps {
3
3
  max: any;
4
4
  min: any;
5
5
  value: string | undefined | null;
6
+ required?: boolean;
6
7
  }
7
8
  declare const useInputTypeNumber: (currentInputRef: React.MutableRefObject<HTMLInputElement>, inputTypeNumberProps: IInputTypeNumberProps, onChange: (event: React.ChangeEvent<HTMLInputElement>, value?: any) => void) => {
8
9
  onInputChange: (event: React.ChangeEvent<HTMLInputElement>) => void;
@@ -7,14 +7,15 @@ var react_1 = __importDefault(require("react"));
7
7
  var useInputTypeNumber = function (currentInputRef, inputTypeNumberProps, onChange) {
8
8
  react_1["default"].useEffect(function () {
9
9
  var _a;
10
- var defaultValidity = 'The number is not valid.';
11
- var errorMessage = inputTypeNumberProps.value > inputTypeNumberProps.max
12
- || inputTypeNumberProps.value < inputTypeNumberProps.min
13
- || !inputTypeNumberProps.value
14
- ? __(defaultValidity)
10
+ var defaultValidity = __('The number is not valid.');
11
+ var errorMessage = inputTypeNumberProps.required
12
+ && (inputTypeNumberProps.value > inputTypeNumberProps.max
13
+ || inputTypeNumberProps.value < inputTypeNumberProps.min
14
+ || !inputTypeNumberProps.value)
15
+ ? defaultValidity
15
16
  : '';
16
17
  (_a = currentInputRef.current) === null || _a === void 0 ? void 0 : _a.setCustomValidity(errorMessage);
17
- }, [currentInputRef, inputTypeNumberProps.value, inputTypeNumberProps.max, inputTypeNumberProps.min]);
18
+ }, [currentInputRef, inputTypeNumberProps.value, inputTypeNumberProps.max, inputTypeNumberProps.min, inputTypeNumberProps.required]);
18
19
  var isValueNumeric = function (value) {
19
20
  if (!value) {
20
21
  return true;
@@ -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'> {
13
+ export interface ITreeTableProps extends Omit<IGridProps, 'items'>, Pick<ITreeProps, 'alwaysOpened' | 'levelPadding' | 'customIcon' | 'saveInClientStorage'> {
14
14
  /**
15
15
  * Элементы коллекции
16
16
  * @example
@@ -35,6 +35,7 @@ declare namespace TreeTable {
35
35
  var defaultProps: {
36
36
  levelPadding: number;
37
37
  alwaysOpened: boolean;
38
+ saveInClientStorage: boolean;
38
39
  };
39
40
  }
40
41
  export default TreeTable;
@@ -73,12 +73,15 @@ function TreeTable(props) {
73
73
  autoOpenLevels: 0,
74
74
  alwaysOpened: props.alwaysOpened,
75
75
  currentPage: list === null || list === void 0 ? void 0 : list.page,
76
- itemsOnPage: list === null || list === void 0 ? void 0 : list.pageSize
76
+ itemsOnPage: list === null || list === void 0 ? void 0 : list.pageSize,
77
+ saveInClientStorage: props.saveInClientStorage,
78
+ clientStorageId: props.listId
77
79
  }).treeItems;
78
80
  return (React.createElement(Grid_1["default"], __assign({}, props, { columns: columns, items: treeItems, itemsIndexing: false })));
79
81
  }
80
82
  exports["default"] = TreeTable;
81
83
  TreeTable.defaultProps = {
82
84
  levelPadding: 32,
83
- alwaysOpened: false
85
+ alwaysOpened: false,
86
+ saveInClientStorage: false
84
87
  };
@@ -6,7 +6,6 @@ export interface ITreeViewProps extends ITreeProps {
6
6
  export interface ITreeItemViewProps extends ITreeProps {
7
7
  item: IPreparedTreeItem;
8
8
  children?: JSX.Element;
9
- onNestedItemClick?: () => void;
10
9
  withoutPointerOnLabel?: boolean;
11
10
  }
12
11
  /**
@@ -70,6 +69,7 @@ declare namespace Tree {
70
69
  hasIconExpandOnly: boolean;
71
70
  useSameSelectedItemId: boolean;
72
71
  hideIcon: boolean;
72
+ saveInClientStorage: boolean;
73
73
  };
74
74
  }
75
75
  export default Tree;
@@ -13,7 +13,9 @@ function Tree(props) {
13
13
  onExpand: props.onItemClick,
14
14
  level: props.level,
15
15
  alwaysOpened: props.alwaysOpened,
16
- useSameSelectedItemId: props.useSameSelectedItemId
16
+ useSameSelectedItemId: props.useSameSelectedItemId,
17
+ saveInClientStorage: props.autoSave,
18
+ clientStorageId: props.id
17
19
  }).treeItems;
18
20
  var viewProps = (0, react_1.useMemo)(function () { return ({
19
21
  items: treeItems,
@@ -34,5 +36,6 @@ Tree.defaultProps = {
34
36
  levelPadding: 32,
35
37
  hasIconExpandOnly: false,
36
38
  useSameSelectedItemId: true,
37
- hideIcon: false
39
+ hideIcon: false,
40
+ saveInClientStorage: false
38
41
  };