@astral/ui 4.114.0 → 4.115.1

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.
Files changed (153) hide show
  1. package/components/DataGrid/Body/Body.d.ts +1 -1
  2. package/components/DataGrid/Body/Body.js +7 -3
  3. package/components/DataGrid/Body/types.d.ts +11 -3
  4. package/components/DataGrid/DataGrid.js +0 -1
  5. package/components/DataGrid/PinnedSections/PinnedSections.js +2 -2
  6. package/components/DataGrid/PinnedSections/useLogic/useLogic.d.ts +1 -0
  7. package/components/DataGrid/PinnedSections/useLogic/useLogic.js +4 -3
  8. package/components/DataGrid/Row/Row.js +13 -9
  9. package/components/DataGrid/Row/RowContext/RowContext.d.ts +15 -4
  10. package/components/DataGrid/Row/RowContext/RowContext.js +3 -3
  11. package/components/DataGrid/Row/RowContext/RowProvider/RowProvider.d.ts +10 -1
  12. package/components/DataGrid/Row/RowContext/RowProvider/RowProvider.js +23 -17
  13. package/components/DataGrid/Row/types.d.ts +7 -3
  14. package/components/DataGrid/Row/useLogic/useLogic.d.ts +6 -4
  15. package/components/DataGrid/Row/useLogic/useLogic.js +21 -12
  16. package/components/DataGrid/RowBase/RowBase.js +5 -2
  17. package/components/DataGrid/RowBase/types.d.ts +9 -5
  18. package/components/DataGrid/RowBase/useLogic/useLogic.d.ts +5 -4
  19. package/components/DataGrid/RowBase/useLogic/useLogic.js +16 -10
  20. package/components/DataGrid/RowCheckbox/RowCheckbox.d.ts +5 -0
  21. package/components/DataGrid/RowCheckbox/RowCheckbox.js +13 -0
  22. package/components/DataGrid/RowCheckbox/constants.d.ts +4 -0
  23. package/components/DataGrid/RowCheckbox/constants.js +4 -0
  24. package/components/DataGrid/RowCheckbox/index.d.ts +1 -0
  25. package/components/DataGrid/RowCheckbox/index.js +1 -0
  26. package/components/DataGrid/RowCheckbox/types.d.ts +7 -0
  27. package/components/DataGrid/RowCheckbox/types.js +1 -0
  28. package/components/DataGrid/hooks/index.d.ts +1 -0
  29. package/components/DataGrid/hooks/index.js +1 -0
  30. package/components/DataGrid/hooks/useWarnRowsWithoutDisabledReason/index.d.ts +1 -0
  31. package/components/DataGrid/hooks/useWarnRowsWithoutDisabledReason/index.js +1 -0
  32. package/components/DataGrid/hooks/useWarnRowsWithoutDisabledReason/useWarnRowsWithoutDisabledReason.d.ts +5 -0
  33. package/components/DataGrid/hooks/useWarnRowsWithoutDisabledReason/useWarnRowsWithoutDisabledReason.js +17 -0
  34. package/components/DataGrid/index.d.ts +1 -1
  35. package/components/DataGrid/public.d.ts +1 -1
  36. package/components/DataGrid/tests/performance/testDataGridPerformance.d.ts +3 -1
  37. package/components/DataGrid/tests/performance/testDataGridPerformance.js +234 -2
  38. package/components/DataGrid/tests/selection/testDataGridSelection.d.ts +14 -0
  39. package/components/DataGrid/tests/selection/testDataGridSelection.js +562 -0
  40. package/components/DataGrid/types.d.ts +34 -1
  41. package/components/DataGrid/useLogic/useLogic.d.ts +6 -3
  42. package/components/DataGrid/useLogic/useLogic.js +15 -10
  43. package/components/DataGrid/utils/getRowDisabledState/getRowDisabledState.d.ts +31 -0
  44. package/components/DataGrid/utils/getRowDisabledState/getRowDisabledState.js +20 -0
  45. package/components/DataGrid/utils/getRowDisabledState/index.d.ts +1 -0
  46. package/components/DataGrid/utils/getRowDisabledState/index.js +1 -0
  47. package/components/DataGrid/utils/index.d.ts +3 -0
  48. package/components/DataGrid/utils/index.js +3 -0
  49. package/components/DataGrid/utils/resolveRowDisabled/index.d.ts +1 -0
  50. package/components/DataGrid/utils/resolveRowDisabled/index.js +1 -0
  51. package/components/DataGrid/utils/resolveRowDisabled/resolveRowDisabled.d.ts +5 -0
  52. package/components/DataGrid/utils/resolveRowDisabled/resolveRowDisabled.js +17 -0
  53. package/components/DataGrid/utils/resolveRowsDisabled/index.d.ts +1 -0
  54. package/components/DataGrid/utils/resolveRowsDisabled/index.js +1 -0
  55. package/components/DataGrid/utils/resolveRowsDisabled/resolveRowsDisabled.d.ts +16 -0
  56. package/components/DataGrid/utils/resolveRowsDisabled/resolveRowsDisabled.js +17 -0
  57. package/components/DataGridActionCell/hooks/useBlockingActions/useBlockingActions.js +3 -3
  58. package/components/DataGridCollapsibleRow/useLogic/useLogic.d.ts +3 -2
  59. package/components/DataGridCollapsibleRow/useLogic/useLogic.js +4 -3
  60. package/components/DataGridInfinite/DataGridInfinite.js +4 -4
  61. package/components/DataGridInfinite/DataGridInfiniteContext/DataGridInfiniteContext.d.ts +1 -1
  62. package/components/DataGridInfinite/DataGridInfiniteContext/DataGridInfiniteContext.js +1 -1
  63. package/components/DataGridInfinite/Footer/Footer.js +2 -2
  64. package/components/DataGridInfinite/Row/Row.js +2 -2
  65. package/components/DataGridInfinite/Row/index.d.ts +1 -0
  66. package/components/DataGridInfinite/Row/types.d.ts +17 -2
  67. package/components/DataGridInfinite/Row/useLogic/useLogic.d.ts +4 -2
  68. package/components/DataGridInfinite/Row/useLogic/useLogic.js +12 -4
  69. package/components/DataGridInfinite/constants.d.ts +2 -0
  70. package/components/DataGridInfinite/constants.js +2 -0
  71. package/components/DataGridInfinite/faker.d.ts +1 -5
  72. package/components/DataGridInfinite/faker.js +1 -2
  73. package/components/DataGridInfinite/useLogic/useLogic.d.ts +3 -2
  74. package/components/DataGridInfinite/useLogic/useLogic.js +25 -13
  75. package/components/PageContent/styles.js +25 -1
  76. package/components/index.d.ts +1 -1
  77. package/node/components/DataGrid/Body/Body.d.ts +1 -1
  78. package/node/components/DataGrid/Body/Body.js +7 -3
  79. package/node/components/DataGrid/Body/types.d.ts +11 -3
  80. package/node/components/DataGrid/DataGrid.js +0 -1
  81. package/node/components/DataGrid/PinnedSections/PinnedSections.js +2 -2
  82. package/node/components/DataGrid/PinnedSections/useLogic/useLogic.d.ts +1 -0
  83. package/node/components/DataGrid/PinnedSections/useLogic/useLogic.js +4 -3
  84. package/node/components/DataGrid/Row/Row.js +13 -9
  85. package/node/components/DataGrid/Row/RowContext/RowContext.d.ts +15 -4
  86. package/node/components/DataGrid/Row/RowContext/RowContext.js +3 -3
  87. package/node/components/DataGrid/Row/RowContext/RowProvider/RowProvider.d.ts +10 -1
  88. package/node/components/DataGrid/Row/RowContext/RowProvider/RowProvider.js +23 -17
  89. package/node/components/DataGrid/Row/types.d.ts +7 -3
  90. package/node/components/DataGrid/Row/useLogic/useLogic.d.ts +6 -4
  91. package/node/components/DataGrid/Row/useLogic/useLogic.js +23 -14
  92. package/node/components/DataGrid/RowBase/RowBase.js +5 -2
  93. package/node/components/DataGrid/RowBase/types.d.ts +9 -5
  94. package/node/components/DataGrid/RowBase/useLogic/useLogic.d.ts +5 -4
  95. package/node/components/DataGrid/RowBase/useLogic/useLogic.js +16 -10
  96. package/node/components/DataGrid/RowCheckbox/RowCheckbox.d.ts +5 -0
  97. package/node/components/DataGrid/RowCheckbox/RowCheckbox.js +17 -0
  98. package/node/components/DataGrid/RowCheckbox/constants.d.ts +4 -0
  99. package/node/components/DataGrid/RowCheckbox/constants.js +7 -0
  100. package/node/components/DataGrid/RowCheckbox/index.d.ts +1 -0
  101. package/node/components/DataGrid/RowCheckbox/index.js +17 -0
  102. package/node/components/DataGrid/RowCheckbox/types.d.ts +7 -0
  103. package/node/components/DataGrid/RowCheckbox/types.js +2 -0
  104. package/node/components/DataGrid/hooks/index.d.ts +1 -0
  105. package/node/components/DataGrid/hooks/index.js +1 -0
  106. package/node/components/DataGrid/hooks/useWarnRowsWithoutDisabledReason/index.d.ts +1 -0
  107. package/node/components/DataGrid/hooks/useWarnRowsWithoutDisabledReason/index.js +17 -0
  108. package/node/components/DataGrid/hooks/useWarnRowsWithoutDisabledReason/useWarnRowsWithoutDisabledReason.d.ts +5 -0
  109. package/node/components/DataGrid/hooks/useWarnRowsWithoutDisabledReason/useWarnRowsWithoutDisabledReason.js +21 -0
  110. package/node/components/DataGrid/index.d.ts +1 -1
  111. package/node/components/DataGrid/public.d.ts +1 -1
  112. package/node/components/DataGrid/tests/performance/testDataGridPerformance.d.ts +3 -1
  113. package/node/components/DataGrid/tests/performance/testDataGridPerformance.js +232 -0
  114. package/node/components/DataGrid/tests/selection/testDataGridSelection.d.ts +14 -0
  115. package/node/components/DataGrid/tests/selection/testDataGridSelection.js +566 -0
  116. package/node/components/DataGrid/types.d.ts +34 -1
  117. package/node/components/DataGrid/useLogic/useLogic.d.ts +6 -3
  118. package/node/components/DataGrid/useLogic/useLogic.js +17 -12
  119. package/node/components/DataGrid/utils/getRowDisabledState/getRowDisabledState.d.ts +31 -0
  120. package/node/components/DataGrid/utils/getRowDisabledState/getRowDisabledState.js +24 -0
  121. package/node/components/DataGrid/utils/getRowDisabledState/index.d.ts +1 -0
  122. package/node/components/DataGrid/utils/getRowDisabledState/index.js +5 -0
  123. package/node/components/DataGrid/utils/index.d.ts +3 -0
  124. package/node/components/DataGrid/utils/index.js +7 -1
  125. package/node/components/DataGrid/utils/resolveRowDisabled/index.d.ts +1 -0
  126. package/node/components/DataGrid/utils/resolveRowDisabled/index.js +5 -0
  127. package/node/components/DataGrid/utils/resolveRowDisabled/resolveRowDisabled.d.ts +5 -0
  128. package/node/components/DataGrid/utils/resolveRowDisabled/resolveRowDisabled.js +21 -0
  129. package/node/components/DataGrid/utils/resolveRowsDisabled/index.d.ts +1 -0
  130. package/node/components/DataGrid/utils/resolveRowsDisabled/index.js +5 -0
  131. package/node/components/DataGrid/utils/resolveRowsDisabled/resolveRowsDisabled.d.ts +16 -0
  132. package/node/components/DataGrid/utils/resolveRowsDisabled/resolveRowsDisabled.js +21 -0
  133. package/node/components/DataGridActionCell/hooks/useBlockingActions/useBlockingActions.js +3 -3
  134. package/node/components/DataGridCollapsibleRow/useLogic/useLogic.d.ts +3 -2
  135. package/node/components/DataGridCollapsibleRow/useLogic/useLogic.js +4 -3
  136. package/node/components/DataGridInfinite/DataGridInfinite.js +4 -4
  137. package/node/components/DataGridInfinite/DataGridInfiniteContext/DataGridInfiniteContext.d.ts +1 -1
  138. package/node/components/DataGridInfinite/DataGridInfiniteContext/DataGridInfiniteContext.js +1 -1
  139. package/node/components/DataGridInfinite/Footer/Footer.js +1 -1
  140. package/node/components/DataGridInfinite/Row/Row.js +2 -2
  141. package/node/components/DataGridInfinite/Row/index.d.ts +1 -0
  142. package/node/components/DataGridInfinite/Row/types.d.ts +17 -2
  143. package/node/components/DataGridInfinite/Row/useLogic/useLogic.d.ts +4 -2
  144. package/node/components/DataGridInfinite/Row/useLogic/useLogic.js +12 -4
  145. package/node/components/DataGridInfinite/constants.d.ts +2 -0
  146. package/node/components/DataGridInfinite/constants.js +2 -0
  147. package/node/components/DataGridInfinite/faker.d.ts +1 -5
  148. package/node/components/DataGridInfinite/faker.js +1 -2
  149. package/node/components/DataGridInfinite/useLogic/useLogic.d.ts +3 -2
  150. package/node/components/DataGridInfinite/useLogic/useLogic.js +26 -14
  151. package/node/components/PageContent/styles.js +24 -0
  152. package/node/components/index.d.ts +1 -1
  153. package/package.json +1 -1
@@ -0,0 +1,566 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.testDataGridSelection = void 0;
4
+ const jsx_runtime_1 = require("react/jsx-runtime");
5
+ const tests_1 = require("@ui/dev/tests");
6
+ const react_1 = require("react");
7
+ const vitest_1 = require("vitest");
8
+ const Tooltip_1 = require("../../../Tooltip");
9
+ const constants_1 = require("../../Row/constants");
10
+ const COLUMNS = [
11
+ { field: 'name', label: 'Наименование' },
12
+ ];
13
+ const COLUMNS_WITH_ACTION = [
14
+ { field: 'name', label: 'Наименование' },
15
+ {
16
+ label: 'Действия',
17
+ renderCell: ({ name }) => (0, jsx_runtime_1.jsxs)("button", { type: "button", children: ["\u041E\u0442\u043A\u0440\u044B\u0442\u044C ", name] }),
18
+ },
19
+ ];
20
+ const FIRST_PAGE_ROWS = [
21
+ { id: '1', name: 'Договор №1' },
22
+ { id: '2', name: 'Договор №2' },
23
+ ];
24
+ const SECOND_PAGE_ROWS = [
25
+ { id: '3', name: 'Договор №3' },
26
+ { id: '4', name: 'Договор №4' },
27
+ ];
28
+ const NUMERIC_ID_ROWS = [{ id: 1, name: 'Договор №1' }];
29
+ const SELECTION_DISABLED = {
30
+ mode: 'selection',
31
+ reason: 'Документ отправляется',
32
+ };
33
+ const ROW_DISABLED = {
34
+ mode: 'row',
35
+ reason: 'Нет доступа',
36
+ };
37
+ const ROW_EXCEPT_LAST_CELL_DISABLED = {
38
+ mode: 'row-except-last-cell',
39
+ reason: 'Нет доступа',
40
+ };
41
+ const SELECTION_DISABLED_WITHOUT_REASON = {
42
+ mode: 'selection',
43
+ reason: '',
44
+ };
45
+ const ROW_DISABLED_WITHOUT_REASON = {
46
+ mode: 'row',
47
+ reason: '',
48
+ };
49
+ const INERT_BY_MODE_CASES = [
50
+ { mode: 'row', isInertCell: true, isInertLastCell: true },
51
+ { mode: 'row-except-last-cell', isInertCell: true, isInertLastCell: false },
52
+ { mode: 'selection', isInertCell: false, isInertLastCell: false },
53
+ ];
54
+ const NESTED_ROWS = [
55
+ {
56
+ id: '1',
57
+ name: 'Пакет документов',
58
+ children: [{ id: '1-1', name: 'Вложенный договор' }],
59
+ },
60
+ ];
61
+ const getSelectAllCheckbox = () => (0, tests_1.within)(tests_1.screen.getByRole('heading')).getByRole('checkbox');
62
+ // closest берёт ближайшую строку, поэтому для вложенной строки не находится родительская
63
+ const getRowCheckbox = (name) => {
64
+ const row = tests_1.screen.getByText(name).closest('li');
65
+ if (!row) {
66
+ throw new Error(`Строка «${name}» не найдена`);
67
+ }
68
+ return (0, tests_1.within)(row).getByRole('checkbox');
69
+ };
70
+ // Заблокированная ячейка недоступна через атрибут inert
71
+ const checkIsInert = (element) => Boolean(element.closest('[inert]'));
72
+ const getActionButton = (name) => tests_1.screen.getByRole('button', { name: `Открыть ${name}` });
73
+ const getRowContent = (name) => {
74
+ const rowContent = tests_1.screen.getByText(name).closest(`[${constants_1.DISABLE_ROW_ATTR}]`);
75
+ if (!(rowContent instanceof HTMLElement)) {
76
+ throw new Error(`Содержимое строки «${name}» не найдено`);
77
+ }
78
+ return rowContent;
79
+ };
80
+ const testDataGridSelection = ({ render, renderGrid, }) => {
81
+ const setup = (props = {}) => {
82
+ const onSelectRowSpy = vitest_1.vi.fn();
83
+ const renderUi = (nextProps) => renderGrid({
84
+ rows: FIRST_PAGE_ROWS,
85
+ columns: COLUMNS,
86
+ onSelectRow: onSelectRowSpy,
87
+ onRetry: () => { },
88
+ ...nextProps,
89
+ });
90
+ const view = render(renderUi(props));
91
+ const rerenderGrid = (nextProps) => view.rerender(renderUi(nextProps));
92
+ return { onSelectRowSpy, rerenderGrid };
93
+ };
94
+ (0, vitest_1.it)('Выбор строк предыдущей страницы сохраняется при выборе строки на новой странице', async () => {
95
+ const { onSelectRowSpy } = setup({
96
+ rows: SECOND_PAGE_ROWS,
97
+ selectedRows: [FIRST_PAGE_ROWS[0]],
98
+ });
99
+ await tests_1.userEvents.click(getRowCheckbox('Договор №3'));
100
+ (0, vitest_1.expect)(onSelectRowSpy).toHaveBeenCalledWith([
101
+ FIRST_PAGE_ROWS[0],
102
+ SECOND_PAGE_ROWS[0],
103
+ ]);
104
+ });
105
+ (0, vitest_1.it)('Строки отмечены выбранными при возврате на страницу с выбранными строками', () => {
106
+ const selectedRows = [FIRST_PAGE_ROWS[0]];
107
+ const { rerenderGrid } = setup({
108
+ rows: SECOND_PAGE_ROWS,
109
+ selectedRows,
110
+ });
111
+ rerenderGrid({ rows: FIRST_PAGE_ROWS, selectedRows });
112
+ (0, vitest_1.expect)(getRowCheckbox('Договор №1')).toBeChecked();
113
+ });
114
+ (0, vitest_1.it)('Строка выбрана при числовом keyId', () => {
115
+ setup({ rows: NUMERIC_ID_ROWS, selectedRows: NUMERIC_ID_ROWS });
116
+ (0, vitest_1.expect)(getRowCheckbox('Договор №1')).toBeChecked();
117
+ });
118
+ (0, vitest_1.it)('«Выбрать все» не отмечен при selectedRows только из строк вне выдачи', () => {
119
+ setup({ selectedRows: SECOND_PAGE_ROWS });
120
+ (0, vitest_1.expect)(getSelectAllCheckbox()).not.toBeChecked();
121
+ });
122
+ (0, vitest_1.describe)('onSelectRow не вызывается', () => {
123
+ (0, vitest_1.it)('При новом массиве selectedRows', () => {
124
+ const { rerenderGrid, onSelectRowSpy } = setup({
125
+ selectedRows: [FIRST_PAGE_ROWS[0]],
126
+ });
127
+ rerenderGrid({ selectedRows: [FIRST_PAGE_ROWS[1]] });
128
+ (0, vitest_1.expect)(onSelectRowSpy).not.toHaveBeenCalled();
129
+ });
130
+ (0, vitest_1.it)('При новом массиве rows с теми же строками', () => {
131
+ const { rerenderGrid, onSelectRowSpy } = setup({
132
+ selectedRows: [FIRST_PAGE_ROWS[0]],
133
+ });
134
+ rerenderGrid({
135
+ rows: [...FIRST_PAGE_ROWS],
136
+ selectedRows: [FIRST_PAGE_ROWS[0]],
137
+ });
138
+ (0, vitest_1.expect)(onSelectRowSpy).not.toHaveBeenCalled();
139
+ });
140
+ (0, vitest_1.it)('При новой функции getRowDisabled', () => {
141
+ const selectedRows = [FIRST_PAGE_ROWS[0]];
142
+ const { rerenderGrid, onSelectRowSpy } = setup({
143
+ selectedRows,
144
+ getRowDisabled: () => undefined,
145
+ });
146
+ rerenderGrid({
147
+ selectedRows,
148
+ getRowDisabled: () => SELECTION_DISABLED,
149
+ });
150
+ (0, vitest_1.expect)(onSelectRowSpy).not.toHaveBeenCalled();
151
+ });
152
+ });
153
+ (0, vitest_1.describe)('Выбрать все', () => {
154
+ (0, vitest_1.it)('Выбор строк других страниц сохраняется', async () => {
155
+ const { onSelectRowSpy } = setup({
156
+ rows: SECOND_PAGE_ROWS,
157
+ selectedRows: [FIRST_PAGE_ROWS[0]],
158
+ });
159
+ await tests_1.userEvents.click(getSelectAllCheckbox());
160
+ (0, vitest_1.expect)(onSelectRowSpy).toHaveBeenCalledWith([
161
+ FIRST_PAGE_ROWS[0],
162
+ ...SECOND_PAGE_ROWS,
163
+ ]);
164
+ });
165
+ vitest_1.it.each([
166
+ { condition: 'mode=selection', rowDisabled: SELECTION_DISABLED },
167
+ { condition: 'mode=row', rowDisabled: ROW_DISABLED },
168
+ {
169
+ condition: 'mode=row-except-last-cell',
170
+ rowDisabled: ROW_EXCEPT_LAST_CELL_DISABLED,
171
+ },
172
+ {
173
+ condition: 'options.isDisabled=true',
174
+ options: { isDisabled: true },
175
+ },
176
+ {
177
+ condition: 'isNotSelectable=true',
178
+ options: { isNotSelectable: true },
179
+ },
180
+ ])('Строка с $condition не выбирается', async ({ rowDisabled, options }) => {
181
+ const rows = [
182
+ FIRST_PAGE_ROWS[0],
183
+ { ...FIRST_PAGE_ROWS[1], options },
184
+ ];
185
+ const { onSelectRowSpy } = setup({
186
+ rows,
187
+ selectedRows: [],
188
+ getRowDisabled: rowDisabled
189
+ ? (row) => (row.id === '2' ? rowDisabled : undefined)
190
+ : undefined,
191
+ });
192
+ await tests_1.userEvents.click(getSelectAllCheckbox());
193
+ (0, vitest_1.expect)(onSelectRowSpy).toHaveBeenCalledWith([FIRST_PAGE_ROWS[0]]);
194
+ });
195
+ (0, vitest_1.it)('Чекбокс отмечен, если выбраны все доступные строки', () => {
196
+ setup({
197
+ selectedRows: [FIRST_PAGE_ROWS[0]],
198
+ getRowDisabled: (row) => row.id === '2' ? SELECTION_DISABLED : undefined,
199
+ });
200
+ (0, vitest_1.expect)(getSelectAllCheckbox()).toBeChecked();
201
+ });
202
+ (0, vitest_1.it)('Чекбокс в неопределённом состоянии при выборе части доступных строк', () => {
203
+ setup({ selectedRows: [FIRST_PAGE_ROWS[0]] });
204
+ (0, vitest_1.expect)(getSelectAllCheckbox()).toHaveAttribute('aria-checked', 'mixed');
205
+ });
206
+ (0, vitest_1.it)('Чекбокс не отмечен, если выбрана только строка с mode=selection', () => {
207
+ setup({
208
+ selectedRows: [FIRST_PAGE_ROWS[1]],
209
+ getRowDisabled: (row) => row.id === '2' ? SELECTION_DISABLED : undefined,
210
+ });
211
+ (0, vitest_1.expect)(getSelectAllCheckbox()).toHaveAttribute('aria-checked', 'false');
212
+ });
213
+ (0, vitest_1.it)('Выбранная строка с mode=selection остаётся выбранной', async () => {
214
+ const { onSelectRowSpy } = setup({
215
+ selectedRows: [FIRST_PAGE_ROWS[1]],
216
+ getRowDisabled: (row) => row.id === '2' ? SELECTION_DISABLED : undefined,
217
+ });
218
+ await tests_1.userEvents.click(getSelectAllCheckbox());
219
+ (0, vitest_1.expect)(onSelectRowSpy).toHaveBeenCalledWith([
220
+ FIRST_PAGE_ROWS[1],
221
+ FIRST_PAGE_ROWS[0],
222
+ ]);
223
+ });
224
+ });
225
+ (0, vitest_1.describe)('Снятие «Выбрать все»', () => {
226
+ (0, vitest_1.it)('Выбор строк других страниц сохраняется', async () => {
227
+ const { onSelectRowSpy } = setup({
228
+ selectedRows: [SECOND_PAGE_ROWS[0], ...FIRST_PAGE_ROWS],
229
+ });
230
+ await tests_1.userEvents.click(getSelectAllCheckbox());
231
+ (0, vitest_1.expect)(onSelectRowSpy).toHaveBeenCalledWith([SECOND_PAGE_ROWS[0]]);
232
+ });
233
+ (0, vitest_1.it)('Выбор строки с mode=selection снимается', async () => {
234
+ const { onSelectRowSpy } = setup({
235
+ selectedRows: FIRST_PAGE_ROWS,
236
+ getRowDisabled: (row) => row.id === '2' ? SELECTION_DISABLED : undefined,
237
+ });
238
+ await tests_1.userEvents.click(getSelectAllCheckbox());
239
+ (0, vitest_1.expect)(onSelectRowSpy).toHaveBeenCalledWith([]);
240
+ });
241
+ });
242
+ (0, vitest_1.describe)('Выбранная строка с mode=selection', () => {
243
+ const setupSelectedDisabledRow = () => setup({
244
+ selectedRows: [FIRST_PAGE_ROWS[1]],
245
+ getRowDisabled: (row) => row.id === '2' ? SELECTION_DISABLED : undefined,
246
+ });
247
+ (0, vitest_1.it)('Чекбокс строки отмечен', () => {
248
+ setupSelectedDisabledRow();
249
+ (0, vitest_1.expect)(getRowCheckbox('Договор №2')).toBeChecked();
250
+ });
251
+ (0, vitest_1.it)('Чекбокс строки заблокирован', () => {
252
+ setupSelectedDisabledRow();
253
+ (0, vitest_1.expect)(getRowCheckbox('Договор №2')).toBeDisabled();
254
+ });
255
+ });
256
+ (0, vitest_1.describe)('Блокировка через getRowDisabled', () => {
257
+ (0, vitest_1.it)('Чекбокс строки заблокирован при mode=selection', () => {
258
+ setup({
259
+ getRowDisabled: (row) => row.id === '1' ? SELECTION_DISABLED : undefined,
260
+ });
261
+ (0, vitest_1.expect)(getRowCheckbox('Договор №1')).toBeDisabled();
262
+ });
263
+ (0, vitest_1.it)('Чекбокс строки заблокирован при mode=row', () => {
264
+ setup({
265
+ getRowDisabled: (row) => (row.id === '1' ? ROW_DISABLED : undefined),
266
+ });
267
+ (0, vitest_1.expect)(getRowCheckbox('Договор №1')).toBeDisabled();
268
+ });
269
+ (0, vitest_1.it)('onSelectRow не вызывается при клике по checkbox с mode=selection', async () => {
270
+ const { onSelectRowSpy } = setup({
271
+ getRowDisabled: (row) => row.id === '1' ? SELECTION_DISABLED : undefined,
272
+ });
273
+ await tests_1.userEvents.click(getRowCheckbox('Договор №1'));
274
+ (0, vitest_1.expect)(onSelectRowSpy).not.toHaveBeenCalled();
275
+ });
276
+ (0, vitest_1.it)('onRowClick вызывается при клике по строке с mode=selection', async () => {
277
+ const onRowClickSpy = vitest_1.vi.fn();
278
+ setup({
279
+ onRowClick: onRowClickSpy,
280
+ getRowDisabled: (row) => row.id === '1' ? SELECTION_DISABLED : undefined,
281
+ });
282
+ await tests_1.userEvents.click(tests_1.screen.getByText('Договор №1'));
283
+ (0, vitest_1.expect)(onRowClickSpy).toHaveBeenCalledWith(FIRST_PAGE_ROWS[0]);
284
+ });
285
+ (0, vitest_1.it)('onRowClick не вызывается при клике по строке с mode=row', async () => {
286
+ const onRowClickSpy = vitest_1.vi.fn();
287
+ setup({
288
+ onRowClick: onRowClickSpy,
289
+ getRowDisabled: (row) => (row.id === '1' ? ROW_DISABLED : undefined),
290
+ });
291
+ await tests_1.userEvents.click(tests_1.screen.getByText('Договор №1'));
292
+ (0, vitest_1.expect)(onRowClickSpy).not.toHaveBeenCalled();
293
+ });
294
+ (0, vitest_1.it)('onRowClick вызывается при mode=selection и options.isDisabled=true', async () => {
295
+ const onRowClickSpy = vitest_1.vi.fn();
296
+ const row = {
297
+ ...FIRST_PAGE_ROWS[0],
298
+ options: { isDisabled: true },
299
+ };
300
+ setup({
301
+ rows: [row],
302
+ onRowClick: onRowClickSpy,
303
+ getRowDisabled: () => SELECTION_DISABLED,
304
+ });
305
+ await tests_1.userEvents.click(tests_1.screen.getByText('Договор №1'));
306
+ (0, vitest_1.expect)(onRowClickSpy).toHaveBeenCalledWith(row);
307
+ });
308
+ vitest_1.it.each(INERT_BY_MODE_CASES)('Ячейки строки недоступны=$isInertCell при mode=$mode', ({ mode, isInertCell }) => {
309
+ setup({
310
+ columns: COLUMNS_WITH_ACTION,
311
+ getRowDisabled: (row) => row.id === '1' ? { mode, reason: 'Нет доступа' } : undefined,
312
+ });
313
+ (0, vitest_1.expect)(checkIsInert(tests_1.screen.getByText('Договор №1'))).toBe(isInertCell);
314
+ });
315
+ vitest_1.it.each(INERT_BY_MODE_CASES)('Последняя ячейка недоступна=$isInertLastCell при mode=$mode', ({ mode, isInertLastCell }) => {
316
+ setup({
317
+ columns: COLUMNS_WITH_ACTION,
318
+ getRowDisabled: (row) => row.id === '1' ? { mode, reason: 'Нет доступа' } : undefined,
319
+ });
320
+ (0, vitest_1.expect)(checkIsInert(getActionButton('Договор №1'))).toBe(isInertLastCell);
321
+ });
322
+ (0, vitest_1.it)('Ячейки соседней строки доступны при mode=row', () => {
323
+ setup({
324
+ columns: COLUMNS_WITH_ACTION,
325
+ getRowDisabled: (row) => (row.id === '1' ? ROW_DISABLED : undefined),
326
+ });
327
+ (0, vitest_1.expect)(checkIsInert(tests_1.screen.getByText('Договор №2'))).toBe(false);
328
+ });
329
+ (0, vitest_1.it)('Tooltip строки показывает причину при mode=row', async () => {
330
+ setup({
331
+ getRowDisabled: (row) => (row.id === '1' ? ROW_DISABLED : undefined),
332
+ });
333
+ await tests_1.userEvents.hover(getRowContent('Договор №1'));
334
+ (0, vitest_1.expect)(await tests_1.screen.findByRole('tooltip')).toHaveTextContent(ROW_DISABLED.reason);
335
+ });
336
+ (0, vitest_1.it)('Чекбокс строки с options.isDisabled=true заблокирован, если getRowDisabled её не блокирует', () => {
337
+ setup({
338
+ rows: [{ ...FIRST_PAGE_ROWS[0], options: { isDisabled: true } }],
339
+ getRowDisabled: () => undefined,
340
+ });
341
+ (0, vitest_1.expect)(getRowCheckbox('Договор №1')).toBeDisabled();
342
+ });
343
+ });
344
+ (0, vitest_1.describe)('Блокировка через options без getRowDisabled', () => {
345
+ (0, vitest_1.it)('Чекбокс строки заблокирован при options.isDisabled=true', () => {
346
+ setup({
347
+ rows: [{ ...FIRST_PAGE_ROWS[0], options: { isDisabled: true } }],
348
+ });
349
+ (0, vitest_1.expect)(getRowCheckbox('Договор №1')).toBeDisabled();
350
+ });
351
+ (0, vitest_1.it)('Ячейки строки, кроме последней, недоступны при options.isDisabledLastCell=false', () => {
352
+ setup({
353
+ columns: COLUMNS_WITH_ACTION,
354
+ rows: [
355
+ {
356
+ ...FIRST_PAGE_ROWS[0],
357
+ options: { isDisabled: true, isDisabledLastCell: false },
358
+ },
359
+ ],
360
+ });
361
+ (0, vitest_1.expect)(checkIsInert(tests_1.screen.getByText('Договор №1'))).toBe(true);
362
+ });
363
+ (0, vitest_1.it)('Tooltip строки показывает options.disabledReason', async () => {
364
+ setup({
365
+ rows: [
366
+ {
367
+ ...FIRST_PAGE_ROWS[0],
368
+ options: { isDisabled: true, disabledReason: 'Нет доступа' },
369
+ },
370
+ ],
371
+ });
372
+ await tests_1.userEvents.hover(getRowContent('Договор №1'));
373
+ (0, vitest_1.expect)(await tests_1.screen.findByRole('tooltip')).toHaveTextContent('Нет доступа');
374
+ });
375
+ (0, vitest_1.it)('onSelectRow не вызывается при клике по checkbox строки с options.isDisabled=true', async () => {
376
+ const { onSelectRowSpy } = setup({
377
+ rows: [{ ...FIRST_PAGE_ROWS[0], options: { isDisabled: true } }],
378
+ });
379
+ await tests_1.userEvents.click(getRowCheckbox('Договор №1'));
380
+ (0, vitest_1.expect)(onSelectRowSpy).not.toHaveBeenCalled();
381
+ });
382
+ });
383
+ (0, vitest_1.describe)('Блокировка без причины', () => {
384
+ const WARN_MESSAGE_PREFIX = 'UIKIT. DataGrid: getRowDisabled вернул блокировку без reason для строк: ';
385
+ let consoleWarnSpy;
386
+ (0, vitest_1.beforeEach)(() => {
387
+ consoleWarnSpy = vitest_1.vi.spyOn(console, 'warn').mockImplementation(() => { });
388
+ });
389
+ (0, vitest_1.afterEach)(() => {
390
+ consoleWarnSpy.mockRestore();
391
+ });
392
+ (0, vitest_1.it)('Выводится одно предупреждение со всеми строками без причины', () => {
393
+ setup({ getRowDisabled: () => SELECTION_DISABLED_WITHOUT_REASON });
394
+ (0, vitest_1.expect)(consoleWarnSpy.mock.calls).toEqual([
395
+ [`${WARN_MESSAGE_PREFIX}1, 2`],
396
+ ]);
397
+ });
398
+ (0, vitest_1.it)('Не выводится повторно при новой функции getRowDisabled с тем же результатом', () => {
399
+ const { rerenderGrid } = setup({
400
+ getRowDisabled: () => ROW_DISABLED_WITHOUT_REASON,
401
+ });
402
+ rerenderGrid({ getRowDisabled: () => ROW_DISABLED_WITHOUT_REASON });
403
+ (0, vitest_1.expect)(consoleWarnSpy).toHaveBeenCalledTimes(1);
404
+ });
405
+ (0, vitest_1.it)('Выводится только для строк без причины, появившихся позже', () => {
406
+ const getRowDisabled = () => SELECTION_DISABLED_WITHOUT_REASON;
407
+ const { rerenderGrid } = setup({ getRowDisabled });
408
+ rerenderGrid({
409
+ rows: [...FIRST_PAGE_ROWS, ...SECOND_PAGE_ROWS],
410
+ getRowDisabled,
411
+ });
412
+ (0, vitest_1.expect)(consoleWarnSpy.mock.calls).toEqual([
413
+ [`${WARN_MESSAGE_PREFIX}1, 2`],
414
+ [`${WARN_MESSAGE_PREFIX}3, 4`],
415
+ ]);
416
+ });
417
+ (0, vitest_1.it)('Не выводится для options.isDisabled=true без disabledReason', () => {
418
+ setup({
419
+ rows: [{ ...FIRST_PAGE_ROWS[0], options: { isDisabled: true } }],
420
+ });
421
+ (0, vitest_1.expect)(consoleWarnSpy).not.toHaveBeenCalled();
422
+ });
423
+ (0, vitest_1.it)('Не выводится при mode=selection с reason', () => {
424
+ setup({ getRowDisabled: () => SELECTION_DISABLED });
425
+ (0, vitest_1.expect)(consoleWarnSpy).not.toHaveBeenCalled();
426
+ });
427
+ (0, vitest_1.it)('Tooltip не отображается при наведении на строку с mode=row без причины', async () => {
428
+ setup({
429
+ getRowDisabled: (row) => row.id === '1' ? ROW_DISABLED_WITHOUT_REASON : undefined,
430
+ });
431
+ await tests_1.userEvents.hover(tests_1.screen.getByText('Договор №1'));
432
+ (0, vitest_1.expect)(tests_1.screen.queryByRole('tooltip')).not.toBeInTheDocument();
433
+ });
434
+ });
435
+ (0, vitest_1.describe)('Tooltip причины блокировки выбора', () => {
436
+ const user = tests_1.userEvents.setup({
437
+ advanceTimers: vitest_1.vi.advanceTimersByTime.bind(vitest_1.vi),
438
+ });
439
+ const TOOLTIP_CONTAINER_SELECTOR = `.${Tooltip_1.tooltipClassnames.contentWrapper}`;
440
+ const getCheckboxTooltipContainer = (name) => {
441
+ const container = getRowCheckbox(name).closest(TOOLTIP_CONTAINER_SELECTOR);
442
+ if (!container) {
443
+ throw new Error(`Контейнер tooltip checkbox строки «${name}» не найден`);
444
+ }
445
+ return container;
446
+ };
447
+ const advanceTime = (ms) => (0, react_1.act)(() => {
448
+ vitest_1.vi.advanceTimersByTime(ms);
449
+ });
450
+ const setupSelectionDisabledRow = () => setup({
451
+ getRowDisabled: (row) => row.id === '1' ? SELECTION_DISABLED : undefined,
452
+ });
453
+ // shouldAdvanceTime: асинхронная обёртка RTL ждёт setTimeout и без него зависает
454
+ (0, vitest_1.beforeEach)(() => {
455
+ vitest_1.vi.useFakeTimers({ shouldAdvanceTime: true });
456
+ });
457
+ (0, vitest_1.afterEach)(() => {
458
+ vitest_1.vi.useRealTimers();
459
+ });
460
+ (0, vitest_1.it)('Отображается через 300ms после наведения на checkbox с mode=selection', async () => {
461
+ setupSelectionDisabledRow();
462
+ await user.hover(getCheckboxTooltipContainer('Договор №1'));
463
+ advanceTime(300);
464
+ (0, vitest_1.expect)(tests_1.screen.getByRole('tooltip')).toHaveTextContent(SELECTION_DISABLED.reason);
465
+ });
466
+ (0, vitest_1.it)('Не отображается раньше 300ms после наведения', async () => {
467
+ setupSelectionDisabledRow();
468
+ await user.hover(getCheckboxTooltipContainer('Договор №1'));
469
+ advanceTime(250);
470
+ (0, vitest_1.expect)(tests_1.screen.queryByRole('tooltip')).not.toBeInTheDocument();
471
+ });
472
+ (0, vitest_1.it)('Не отображается, если курсор ушёл с checkbox раньше 300ms', async () => {
473
+ setupSelectionDisabledRow();
474
+ await user.hover(getCheckboxTooltipContainer('Договор №1'));
475
+ advanceTime(150);
476
+ await user.unhover(getCheckboxTooltipContainer('Договор №1'));
477
+ advanceTime(300);
478
+ (0, vitest_1.expect)(tests_1.screen.queryByRole('tooltip')).not.toBeInTheDocument();
479
+ });
480
+ (0, vitest_1.it)('Checkbox строки с mode=row не показывает собственную причину', () => {
481
+ setup({
482
+ getRowDisabled: (row) => (row.id === '1' ? ROW_DISABLED : undefined),
483
+ });
484
+ (0, vitest_1.expect)(getRowCheckbox('Договор №1').closest(TOOLTIP_CONTAINER_SELECTOR)).not.toBeInTheDocument();
485
+ });
486
+ });
487
+ (0, vitest_1.describe)('Вложенные строки', () => {
488
+ (0, vitest_1.it)('Чекбокс вложенной строки заблокирован при mode=selection для неё', () => {
489
+ setup({
490
+ rows: NESTED_ROWS,
491
+ tree: { isInitialExpanded: true },
492
+ getRowDisabled: (row) => row.id === '1-1' ? SELECTION_DISABLED : undefined,
493
+ });
494
+ (0, vitest_1.expect)(getRowCheckbox('Вложенный договор')).toBeDisabled();
495
+ });
496
+ (0, vitest_1.it)('Чекбокс вложенной строки доступен при mode=row у родителя', () => {
497
+ setup({
498
+ rows: NESTED_ROWS,
499
+ tree: { isInitialExpanded: true },
500
+ getRowDisabled: (row) => (row.id === '1' ? ROW_DISABLED : undefined),
501
+ });
502
+ (0, vitest_1.expect)(getRowCheckbox('Вложенный договор')).toBeEnabled();
503
+ });
504
+ (0, vitest_1.it)('Чекбокс вложенной строки заблокирован при variant=subrows и mode=selection', () => {
505
+ setup({
506
+ rows: NESTED_ROWS,
507
+ variant: 'subrows',
508
+ getRowDisabled: (row) => row.id === '1-1' ? SELECTION_DISABLED : undefined,
509
+ });
510
+ (0, vitest_1.expect)(getRowCheckbox('Вложенный договор')).toBeDisabled();
511
+ });
512
+ (0, vitest_1.describe)('mode=row у вложенной строки', () => {
513
+ const setupNestedRowDisabled = () => setup({
514
+ rows: NESTED_ROWS,
515
+ tree: { isInitialExpanded: true },
516
+ getRowDisabled: (row) => row.id === '1-1' ? ROW_DISABLED : undefined,
517
+ });
518
+ (0, vitest_1.it)('Ячейки вложенной строки недоступны', () => {
519
+ setupNestedRowDisabled();
520
+ (0, vitest_1.expect)(checkIsInert(tests_1.screen.getByText('Вложенный договор'))).toBe(true);
521
+ });
522
+ (0, vitest_1.it)('Ячейки родительской строки доступны', () => {
523
+ setupNestedRowDisabled();
524
+ (0, vitest_1.expect)(checkIsInert(tests_1.screen.getByText('Пакет документов'))).toBe(false);
525
+ });
526
+ });
527
+ (0, vitest_1.describe)('options.isDisabled=true у вложенной строки', () => {
528
+ const NESTED_ROWS_WITH_DISABLED_CHILD = [
529
+ {
530
+ ...NESTED_ROWS[0],
531
+ children: [
532
+ {
533
+ id: '1-1',
534
+ name: 'Вложенный договор',
535
+ options: { isDisabled: true },
536
+ },
537
+ ],
538
+ },
539
+ ];
540
+ (0, vitest_1.it)('Чекбокс вложенной строки заблокирован без getRowDisabled', () => {
541
+ setup({
542
+ rows: NESTED_ROWS_WITH_DISABLED_CHILD,
543
+ tree: { isInitialExpanded: true },
544
+ });
545
+ (0, vitest_1.expect)(getRowCheckbox('Вложенный договор')).toBeDisabled();
546
+ });
547
+ (0, vitest_1.it)('Чекбокс вложенной строки заблокирован, если getRowDisabled её не блокирует', () => {
548
+ setup({
549
+ rows: NESTED_ROWS_WITH_DISABLED_CHILD,
550
+ tree: { isInitialExpanded: true },
551
+ getRowDisabled: () => undefined,
552
+ });
553
+ (0, vitest_1.expect)(getRowCheckbox('Вложенный договор')).toBeDisabled();
554
+ });
555
+ (0, vitest_1.it)('Ячейки вложенной строки доступны при mode=selection из getRowDisabled', () => {
556
+ setup({
557
+ rows: NESTED_ROWS_WITH_DISABLED_CHILD,
558
+ tree: { isInitialExpanded: true },
559
+ getRowDisabled: (row) => row.id === '1-1' ? SELECTION_DISABLED : undefined,
560
+ });
561
+ (0, vitest_1.expect)(checkIsInert(tests_1.screen.getByText('Вложенный договор'))).toBe(false);
562
+ });
563
+ });
564
+ });
565
+ };
566
+ exports.testDataGridSelection = testDataGridSelection;
@@ -154,6 +154,23 @@ export type DataGridProps<TData extends Record<string, CellValue> = DataGridRow,
154
154
  * Обработчик выбора строки
155
155
  */
156
156
  onSelectRow?: (row: TData[]) => void;
157
+ /**
158
+ * Возвращает блокировку строки { mode, reason }
159
+ * @example
160
+ * const getRowDisabled = useCallback(
161
+ * (row: Document): DataGridRowDisabled | undefined => {
162
+ * if (row.status === 'Отправлен') {
163
+ * return { mode: 'selection', reason: 'Документ уже отправлен получателю' };
164
+ * }
165
+ *
166
+ * return undefined;
167
+ * },
168
+ * [],
169
+ * );
170
+ *
171
+ * <DataGrid getRowDisabled={getRowDisabled} />
172
+ */
173
+ getRowDisabled?: (row: TData) => DataGridRowDisabled | undefined;
157
174
  /**
158
175
  * @example <DataGrid onSort={({fieldId: 'test', sort: 'asc'}) => console.log('sorted')} />
159
176
  * Обработчик сортировки
@@ -318,14 +335,29 @@ export type DataGridRowOptionColumns<TData extends Record<string, CellValue>> =
318
335
  */
319
336
  renderCell?: RenderCell<TData>;
320
337
  };
338
+ /**
339
+ * Состояние блокировки строки
340
+ */
341
+ export type DataGridRowDisabled = {
342
+ /**
343
+ * Тип блокировки
344
+ */
345
+ mode: 'selection' | 'row' | 'row-except-last-cell';
346
+ /**
347
+ * Причина блокировки
348
+ */
349
+ reason: string;
350
+ };
321
351
  export type DataGridRowOptions<TData extends Record<string, CellValue>> = {
322
352
  /**
323
353
  * Если true, строка будет недоступна для взаимодействия
354
+ * @deprecated Используйте `getRowDisabled` с `mode: 'row'`.
324
355
  */
325
356
  isDisabled?: boolean;
326
357
  /**
327
- * Если true, последняя ячейка не будет блокироваться при `isDisabled=true`
358
+ * Если false, последняя ячейка не блокируется при `isDisabled=true`
328
359
  * @default 'true'
360
+ * @deprecated Используйте `getRowDisabled` с `mode: 'row-except-last-cell'`.
329
361
  */
330
362
  isDisabledLastCell?: boolean;
331
363
  /**
@@ -334,6 +366,7 @@ export type DataGridRowOptions<TData extends Record<string, CellValue>> = {
334
366
  isNotSelectable?: boolean;
335
367
  /**
336
368
  * Причина блокировки строки
369
+ * @deprecated Используйте `reason` в `getRowDisabled`.
337
370
  */
338
371
  disabledReason?: string;
339
372
  /**
@@ -1,7 +1,7 @@
1
1
  import { type ChangeEvent } from 'react';
2
- import type { CellValue, DataGridProps, DataGridRow } from '../types';
2
+ import type { CellValue, DataGridProps, DataGridRow, DataGridRowWithOptions } from '../types';
3
3
  type UseLogicParams<TData extends Record<string, CellValue> = DataGridRow, TSortField extends keyof TData = keyof TData> = DataGridProps<TData, TSortField>;
4
- export declare const useLogic: <TData extends Record<string, unknown> = DataGridRow, TSortField extends keyof TData = keyof TData>({ keyId, columns, rows, variant, tree, subrows, selectedRows, isLoading, isDisabled, mobileDisplayVariant, onSelectRow, isError, onRetry, errorMsg, isHideSelectAll, isHideHeaderIfNoData, sorting, className, onSort, maxHeight, gridViewMode: gridViewModeProp, massActions, }: UseLogicParams<TData, TSortField>) => {
4
+ export declare const useLogic: <TData extends Record<string, unknown> = DataGridRow, TSortField extends keyof TData = keyof TData>({ keyId, columns, rows, variant, tree, subrows, selectedRows, isLoading, isDisabled, getRowDisabled, mobileDisplayVariant, onSelectRow, isError, onRetry, errorMsg, isHideSelectAll, isHideHeaderIfNoData, sorting, className, onSort, maxHeight, gridViewMode: gridViewModeProp, massActions, }: UseLogicParams<TData, TSortField>) => {
5
5
  hasMassActions: boolean;
6
6
  isMassActionsOpen: boolean;
7
7
  dataGridClassName: string | undefined;
@@ -12,7 +12,7 @@ export declare const useLogic: <TData extends Record<string, unknown> = DataGrid
12
12
  expandedLevel?: number | undefined;
13
13
  initialVisibleChildrenCount?: number | undefined;
14
14
  } | undefined;
15
- renderRows: TData[];
15
+ renderRows: DataGridRowWithOptions<TData>[];
16
16
  isAllowHorizontalScroll: boolean;
17
17
  isHideHead: boolean;
18
18
  hasPinnedColumns: boolean;
@@ -59,6 +59,9 @@ export declare const useLogic: <TData extends Record<string, unknown> = DataGrid
59
59
  };
60
60
  bodyProps: {
61
61
  isSelectable: boolean;
62
+ selectedIds: Set<TData[keyof TData]>;
63
+ rowsDisabled: Map<unknown, import("../types").DataGridRowDisabled | undefined>;
64
+ getRowDisabled: ((row: TData) => import("../types").DataGridRowDisabled | undefined) | undefined;
62
65
  onSelectRow: (row: TData) => (event: ChangeEvent<HTMLInputElement>) => void;
63
66
  };
64
67
  mobileDisplayVariant: "list" | "cards";