pne-ui 4.3.0-rc.7 → 4.3.0-rc.8

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 (68) hide show
  1. package/README.md +144 -0
  2. package/cjs/component/search-ui/SearchUI.d.ts +23 -15
  3. package/cjs/component/search-ui/SearchUI.js +221 -9
  4. package/cjs/component/search-ui/SearchUI.js.map +1 -1
  5. package/cjs/component/search-ui/SearchUITableSelection.d.ts +68 -0
  6. package/cjs/component/search-ui/SearchUITableSelection.js +30 -0
  7. package/cjs/component/search-ui/SearchUITableSelection.js.map +1 -0
  8. package/cjs/component/table/AbstractTable.js +26 -13
  9. package/cjs/component/table/AbstractTable.js.map +1 -1
  10. package/cjs/component/table/PneTablePaginationActions.js +41 -9
  11. package/cjs/component/table/PneTablePaginationActions.js.map +1 -1
  12. package/cjs/component/table/PneTableSelectionCell.d.ts +21 -0
  13. package/cjs/component/table/PneTableSelectionCell.js +44 -0
  14. package/cjs/component/table/PneTableSelectionCell.js.map +1 -0
  15. package/cjs/component/table/PneTableSelectionControls.d.ts +12 -0
  16. package/cjs/component/table/PneTableSelectionControls.js +46 -0
  17. package/cjs/component/table/PneTableSelectionControls.js.map +1 -0
  18. package/cjs/component/table/PneTableSelectionHeaderCell.d.ts +15 -0
  19. package/cjs/component/table/PneTableSelectionHeaderCell.js +48 -0
  20. package/cjs/component/table/PneTableSelectionHeaderCell.js.map +1 -0
  21. package/cjs/component/table/PneTableToolbar.d.ts +26 -0
  22. package/cjs/component/table/PneTableToolbar.js +126 -0
  23. package/cjs/component/table/PneTableToolbar.js.map +1 -0
  24. package/cjs/component/table/tableSelection.d.ts +26 -0
  25. package/cjs/component/table/tableSelection.js +173 -0
  26. package/cjs/component/table/tableSelection.js.map +1 -0
  27. package/cjs/component/table/useTableSelection.d.ts +46 -0
  28. package/cjs/component/table/useTableSelection.js +178 -0
  29. package/cjs/component/table/useTableSelection.js.map +1 -0
  30. package/cjs/exports/search.d.ts +2 -1
  31. package/cjs/exports/search.js.map +1 -1
  32. package/cjs/exports/table.d.ts +11 -0
  33. package/cjs/exports/table.js +20 -1
  34. package/cjs/exports/table.js.map +1 -1
  35. package/esm/component/search-ui/SearchUI.d.ts +23 -15
  36. package/esm/component/search-ui/SearchUI.js +223 -11
  37. package/esm/component/search-ui/SearchUI.js.map +1 -1
  38. package/esm/component/search-ui/SearchUITableSelection.d.ts +68 -0
  39. package/esm/component/search-ui/SearchUITableSelection.js +26 -0
  40. package/esm/component/search-ui/SearchUITableSelection.js.map +1 -0
  41. package/esm/component/table/AbstractTable.js +26 -13
  42. package/esm/component/table/AbstractTable.js.map +1 -1
  43. package/esm/component/table/PneTablePaginationActions.js +41 -9
  44. package/esm/component/table/PneTablePaginationActions.js.map +1 -1
  45. package/esm/component/table/PneTableSelectionCell.d.ts +21 -0
  46. package/esm/component/table/PneTableSelectionCell.js +40 -0
  47. package/esm/component/table/PneTableSelectionCell.js.map +1 -0
  48. package/esm/component/table/PneTableSelectionControls.d.ts +12 -0
  49. package/esm/component/table/PneTableSelectionControls.js +43 -0
  50. package/esm/component/table/PneTableSelectionControls.js.map +1 -0
  51. package/esm/component/table/PneTableSelectionHeaderCell.d.ts +15 -0
  52. package/esm/component/table/PneTableSelectionHeaderCell.js +45 -0
  53. package/esm/component/table/PneTableSelectionHeaderCell.js.map +1 -0
  54. package/esm/component/table/PneTableToolbar.d.ts +26 -0
  55. package/esm/component/table/PneTableToolbar.js +121 -0
  56. package/esm/component/table/PneTableToolbar.js.map +1 -0
  57. package/esm/component/table/tableSelection.d.ts +26 -0
  58. package/esm/component/table/tableSelection.js +162 -0
  59. package/esm/component/table/tableSelection.js.map +1 -0
  60. package/esm/component/table/useTableSelection.d.ts +46 -0
  61. package/esm/component/table/useTableSelection.js +176 -0
  62. package/esm/component/table/useTableSelection.js.map +1 -0
  63. package/esm/exports/search.d.ts +2 -1
  64. package/esm/exports/search.js.map +1 -1
  65. package/esm/exports/table.d.ts +11 -0
  66. package/esm/exports/table.js +6 -0
  67. package/esm/exports/table.js.map +1 -1
  68. package/package.json +1 -1
package/README.md CHANGED
@@ -96,6 +96,146 @@ DOM-позиции или пользовательских/секретных д
96
96
  - пустой результат: существующая строка `data-autotest="empty-state"`;
97
97
  - disabled/checked/selected состояния: только нативные DOM/ARIA-свойства, без test-only копий.
98
98
 
99
+ #### Выбор строк
100
+
101
+ `useTableSelection` хранит выбор в одной из двух взаимоисключающих форм:
102
+
103
+ - `explicit` — явно выбранные стабильные ID;
104
+ - `allMatching` — все selectable-строки текущей применённой выдачи, кроме `excludedIds`.
105
+
106
+ Header checkbox управляет только загруженной страницей. Выбор всей выдачи является отдельным действием:
107
+ consumer получает точное число selectable-результатов от своего API и передаёт его в
108
+ `selectAllMatching(matchingCount)`. `matchingCount`, `excludedIds`, `isRowSelectable` и backend query обязаны
109
+ описывать один и тот же applied-result scope. Сериализацию `Set` и domain request выполняйте только на границе
110
+ приложения.
111
+
112
+ ```tsx
113
+ const selection = useTableSelection({
114
+ rows: orders,
115
+ getRowId: order => order.id,
116
+ maxSelected: 20_000,
117
+ scopeKey: appliedSearchFingerprint,
118
+ })
119
+
120
+ <PneTable<Order>
121
+ autoTestId="orders"
122
+ tableAriaLabel="Orders"
123
+ data={orders}
124
+ createTableHeader={() => <PneTableRow>
125
+ <PneTableSelectionHeaderCell
126
+ aria-label="Select current page"
127
+ state={selection.pageState}
128
+ disabled={selection.interactionDisabled || selection.pageSelectableCount === 0}
129
+ onChange={selection.setPageSelected}
130
+ />
131
+ {/* business headers */}
132
+ </PneTableRow>}
133
+ createRow={order => <PneTableRow
134
+ key={order.id}
135
+ selected={selection.isRowSelected(order)}
136
+ aria-selected={selection.isRowSelected(order)}
137
+ >
138
+ <PneTableSelectionCell
139
+ aria-label={`Select order ${order.id}`}
140
+ checked={selection.isRowSelected(order)}
141
+ disabled={selection.interactionDisabled || !selection.isRowSelectable(order)}
142
+ onChange={checked => selection.setRowSelected(order, checked)}
143
+ />
144
+ {/* business cells */}
145
+ </PneTableRow>}
146
+ toolbar={<PneTableToolbar
147
+ aria-label="Table controls"
148
+ contextual={<PneTableSelectionControls
149
+ summary={`${selection.selectedCount} selected`}
150
+ actions={consumerOwnedBulkActions}
151
+ status={consumerOwnedLimitWarning}
152
+ />}
153
+ persistent={optionalViewSelector}
154
+ />}
155
+ /* остальные props */
156
+ />
157
+ ```
158
+
159
+ `maxSelected` отклоняет всю row/page/all-matching операцию атомарно: возвращённый
160
+ `TableSelectionUpdate.limitExceeded` равен `true`, а модель не меняется. Смена primitive `scopeKey` очищает
161
+ выбор; pagination, sort и refresh не должны входить в этот ключ. В controlled-режиме consumer обязан принять
162
+ scope-reset и вернуть canonical empty-модель `{mode: 'explicit', selectedIds: new Set()}`.
163
+
164
+ `PneTableToolbar` объединяет contextual selection controls и persistent View controls в существующей верхней
165
+ полосе таблицы. Он измеряет фактическое содержимое и сохраняет DOM/keyboard-порядок Selection → View →
166
+ Pagination при переходе на несколько строк, включая поддерживаемую ширину viewport 360px.
167
+
168
+ #### Выбор строк в SearchUI
169
+
170
+ `SearchUI.tableSelection` добавляет тот же controller к consumer-owned header/row factories и автоматически
171
+ связывает его scope с применёнными критериями поиска. Draft-фильтры manual search, page, page size, sort и
172
+ value-equivalent refresh сохраняют выбор. Новые применённые критерии очищают его. При настроенных Views в scope
173
+ по умолчанию входит фактически выбранный View; `preserveAcrossViews` включайте только для Views с одинаковой
174
+ семантикой строк и совместимыми ID.
175
+
176
+ ```tsx
177
+ <SearchUI<Order, OrderViewId, number>
178
+ /* search props */
179
+ tableSelection={{
180
+ selection,
181
+ onSelectionChange: setSelection,
182
+ getRowId: order => order.id,
183
+ maxSelected: knownClientLimit,
184
+ resolveAllMatchingCount: async ({appliedSearchCriteria, viewId}) => {
185
+ const summary = await getSelectionSummary(appliedSearchCriteria, viewId)
186
+ if (summary.limitExceeded) {
187
+ showConsumerOwnedLimitWarning(summary.selectionLimit)
188
+ throw new Error('Selection limit exceeded')
189
+ }
190
+ return summary.matchingCount
191
+ },
192
+ renderControls: ({selection: controller}) => (
193
+ <PneTableSelectionControls
194
+ summary={`${controller.selectedCount} selected`}
195
+ actions={<button
196
+ disabled={controller.interactionDisabled}
197
+ onClick={() => controller.selectAllMatchingResults?.().catch(handleSelectionError)}
198
+ >
199
+ Select all results
200
+ </button>}
201
+ status={controller.selectingAllMatching ? 'Selecting…' : selectionStatus}
202
+ />
203
+ ),
204
+ toolbarAriaLabel: 'Order table controls',
205
+ }}
206
+ createTableHeader={(params, context) => {
207
+ const controller = context?.selection
208
+ if (!controller) throw new Error('Table selection context is required')
209
+ return <>{/* explicit selection cell + headers */}</>
210
+ }}
211
+ createTableRow={(row, index, data, setData, context) => {
212
+ const controller = context?.selection
213
+ if (!controller) throw new Error('Table selection context is required')
214
+ return <>{/* explicit selection cell + business cells */}</>
215
+ }}
216
+ />
217
+ ```
218
+
219
+ Factory context optional только для source compatibility с прежними прямыми вызовами фабрик; сам `SearchUI`
220
+ всегда передаёт context, а `selection` присутствует при настроенном `tableSelection`. Selection-aware consumer
221
+ всё равно должен сделать явный guard/assertion, чтобы его callback оставался корректным вне вызова из `SearchUI`.
222
+
223
+ `resolveAllMatchingCount` получает snapshot применённых критериев и resolved View. На один SearchUI допускается
224
+ один in-flight запрос: повторный вызов возвращает тот же Promise, controller временно блокирует selection, а
225
+ ответ применяется только к той же occurrence scope. Старые ответы после `A → B → A`, unmount, смены
226
+ `maxSelected` или consumer `disabled` игнорируются. Активная ошибка возвращается caller-коду, после чего controller
227
+ снова доступен. Same-scope refresh/pagination/sort не отменяют запрос. Уже начатый запрос детерминированно
228
+ завершается тем resolver, с которым он был запущен: замена callback действует со следующего запроса, а удаление
229
+ resolver отменяет pending work.
230
+
231
+ Если backend возвращает typed summary, consumer должен обработать server `limitExceeded` до возврата count.
232
+ `maxSelected` — синхронный client-side guard, а не замена повторной серверной проверке при batch operation.
233
+
234
+ Selection не записывается в SearchUI retention/profile/browser storage. Uncontrolled selection исчезает при
235
+ remount. В controlled-режиме lifetime принадлежит consumer: если state намеренно расположен выше размонтируемого
236
+ экрана, consumer сам должен очистить его при navigation/remount. Строковое представление applied scope остаётся
237
+ в памяти библиотеки и не выводится в DOM/storage.
238
+
99
239
  ### SearchUI и SearchUIFilters
100
240
 
101
241
  Передавайте стабильный несекретный `autoTestId` как Selenium scope поискового интерфейса. Если prop не задан,
@@ -267,6 +407,10 @@ assertEquals("true", enabled.getAttribute("aria-pressed"));
267
407
  |---|---|---|
268
408
  | Верхняя пагинация | `[data-autotest="pagination"][data-autotest-value="top"]` | Native button `disabled`; `current-page` внутри |
269
409
  | Нижняя пагинация | `[data-autotest="pagination"][data-autotest-value="bottom"]` | Native button `disabled`; `current-page` внутри |
410
+ | Общая полоса контролов | `[data-autotest="table-control-bar"]` | `data-autotest-value="inline|stacked"` |
411
+ | Выбор текущей страницы | `input[data-autotest="page-selection"]` | Native `checked`, `disabled`, `aria-checked="mixed"` |
412
+ | Выбор строки | `input[data-autotest="row-selection"]` | Native `checked`, `disabled`; consumer может задать `autoTestId`/`autoTestValue` |
413
+ | Selection summary/actions/status | `[data-autotest="selection-summary"]`, `[data-autotest="selection-actions"]`, `[data-autotest="selection-status"]` | Summary является polite live status |
270
414
  | Пустой результат | `[data-autotest="empty-state"]` | Наличие существующей empty row |
271
415
  | Загрузка | Semantic `table` | `aria-busy="true|false"` |
272
416
  | Активная сортировка | `th[aria-sort="ascending"], th[aria-sort="descending"]` | Значение `aria-sort` |
@@ -2,8 +2,9 @@ import React, { Dispatch, SetStateAction } from 'react';
2
2
  import { SearchUIFiltersConfig } from './filters/SearchUIFilters';
3
3
  import { CriterionTypeEnum, ExactCriterionSearchLabelEnum, SearchCriteria, SearchUIConditions } from './filters/types';
4
4
  import { GetPagedOrderedSortedListRequest, Order } from '../../common';
5
- import { PneTableViewOption, PneTableViewSelectorProps, TableCreateHeaderType } from '../..';
5
+ import { PneTableViewOption, PneTableViewSelectorProps, ITableCreateHeaderParams, TableRowId } from '../..';
6
6
  import { UseTableParams } from '../table/useTable';
7
+ import { SearchUITableFactoryContext, SearchUITableSelectionConfig } from './SearchUITableSelection';
7
8
  /**
8
9
  * Параметры запроса поиска, отправляемые в обработчик данных таблицы.
9
10
  * Тип формируется на основе SearchCriteria без служебного флага `initialized`
@@ -14,7 +15,7 @@ export type SearchParams = Omit<SearchCriteria & GetPagedOrderedSortedListReques
14
15
  * Свойства компонента {@link SearchUI}.
15
16
  * @template D Тип строки данных, возвращаемых запросом поиска и отображаемых в таблице.
16
17
  */
17
- type SearchUICommonProps<D extends object> = {
18
+ type SearchUICommonProps<D extends object, TViewId extends string, TKey extends TableRowId> = {
18
19
  /**
19
20
  * Stable non-secret Selenium scope shared by the filters and results table.
20
21
  * Defaults to settingsContextName; set it explicitly when multiple instances may render together.
@@ -56,20 +57,27 @@ type SearchUICommonProps<D extends object> = {
56
57
  * Конфигурация виджета фильтров.
57
58
  */
58
59
  config?: SearchUIFiltersConfig;
60
+ /** Optional transient selection controller for the current applied result set. */
61
+ tableSelection?: SearchUITableSelectionConfig<D, TKey, TViewId>;
59
62
  };
60
63
  export type SearchUIDataSource<D extends object> = (searchParams: SearchParams) => Promise<D[]>;
61
- export type SearchUITableRowFactory<D extends object> = (rowData: D, index: number, data: D[], setData: Dispatch<SetStateAction<D[]>>) => React.ReactElement;
64
+ export type SearchUITableHeaderFactory<D extends object, TKey extends TableRowId = TableRowId, TViewId extends string = string> = (headerParams: ITableCreateHeaderParams,
65
+ /** Optional so previously exported factories remain directly callable with one argument. */
66
+ context?: SearchUITableFactoryContext<D, TKey, TViewId>) => React.ReactElement;
67
+ export type SearchUITableRowFactory<D extends object, TKey extends TableRowId = TableRowId, TViewId extends string = string> = (rowData: D, index: number, data: D[], setData: Dispatch<SetStateAction<D[]>>,
68
+ /** Optional so previously exported factories remain directly callable with four arguments. */
69
+ context?: SearchUITableFactoryContext<D, TKey, TViewId>) => React.ReactElement;
62
70
  export type SearchUIViewSort = 'preserve' | {
63
71
  sortColumnIndex: number;
64
72
  sortAsc: boolean;
65
73
  };
66
- export type SearchUIView<D extends object, TViewId extends string = string> = PneTableViewOption<TViewId> & {
74
+ export type SearchUIView<D extends object, TViewId extends string = string, TKey extends TableRowId = TableRowId> = PneTableViewOption<TViewId> & {
67
75
  /** Data source used only while this view is selected. */
68
76
  searchData: SearchUIDataSource<D>;
69
77
  /** Header rendered only while this view is selected. */
70
- createTableHeader: TableCreateHeaderType;
78
+ createTableHeader: SearchUITableHeaderFactory<D, TKey, TViewId>;
71
79
  /** Row renderer used only while this view is selected. */
72
- createTableRow: SearchUITableRowFactory<D>;
80
+ createTableRow: SearchUITableRowFactory<D, TKey, TViewId>;
73
81
  /** Optional consumer-owned actions rendered while this view is selected. */
74
82
  actions?: React.ReactNode;
75
83
  /** Defaults to the common safe sort; preserving another view's sort must be explicit. */
@@ -83,34 +91,34 @@ type SearchUIViewsAccessibleName = {
83
91
  'aria-labelledby': string;
84
92
  };
85
93
  type SearchUIViewsBaseConfig<TViewId extends string> = Omit<PneTableViewSelectorProps<TViewId>, 'actions' | 'aria-label' | 'aria-labelledby' | 'views'>;
86
- export type SearchUIViewsConfig<D extends object, TViewId extends string = string> = SearchUIViewsBaseConfig<TViewId> & SearchUIViewsAccessibleName & {
87
- views: readonly SearchUIView<D, TViewId>[];
94
+ export type SearchUIViewsConfig<D extends object, TViewId extends string = string, TKey extends TableRowId = TableRowId> = SearchUIViewsBaseConfig<TViewId> & SearchUIViewsAccessibleName & {
95
+ views: readonly SearchUIView<D, TViewId, TKey>[];
88
96
  /** Optional compatibility/layout wrapper around the library-owned selector. */
89
97
  renderViewSelector?: (selector: React.ReactElement) => React.ReactNode;
90
98
  };
91
- type SearchUILegacyTableProps<D extends object> = {
99
+ type SearchUILegacyTableProps<D extends object, TViewId extends string, TKey extends TableRowId> = {
92
100
  tableViews?: never;
93
101
  /** Function that loads rows for the current search and table state. */
94
102
  searchData: SearchUIDataSource<D>;
95
103
  /** Table header factory. */
96
- createTableHeader: TableCreateHeaderType;
104
+ createTableHeader: SearchUITableHeaderFactory<D, TKey, TViewId>;
97
105
  /** Table row factory. */
98
- createTableRow: SearchUITableRowFactory<D>;
106
+ createTableRow: SearchUITableRowFactory<D, TKey, TViewId>;
99
107
  };
100
- type SearchUIViewTableProps<D extends object, TViewId extends string> = {
108
+ type SearchUIViewTableProps<D extends object, TViewId extends string, TKey extends TableRowId> = {
101
109
  /** Controlled generic table-view configuration. */
102
- tableViews: SearchUIViewsConfig<D, TViewId>;
110
+ tableViews: SearchUIViewsConfig<D, TViewId, TKey>;
103
111
  searchData?: never;
104
112
  createTableHeader?: never;
105
113
  createTableRow?: never;
106
114
  };
107
- export type SearchUIProps<D extends object, TViewId extends string = string> = SearchUICommonProps<D> & (SearchUILegacyTableProps<D> | SearchUIViewTableProps<D, TViewId>);
115
+ export type SearchUIProps<D extends object, TViewId extends string = string, TKey extends TableRowId = TableRowId> = SearchUICommonProps<D, TViewId, TKey> & (SearchUILegacyTableProps<D, TViewId, TKey> | SearchUIViewTableProps<D, TViewId, TKey>);
108
116
  /**
109
117
  * Высокоуровневый компонент поискового UI, объединяющий фильтры и таблицу с результатами.
110
118
  * @template D Тип строки данных, отображаемых в таблице.
111
119
  * @param props Свойства компонента.
112
120
  */
113
- export declare const SearchUI: <D extends object, TViewId extends string = string>(props: SearchUIProps<D, TViewId>) => React.ReactElement;
121
+ export declare const SearchUI: <D extends object, TViewId extends string = string, TKey extends TableRowId = TableRowId>(props: SearchUIProps<D, TViewId, TKey>) => React.ReactElement;
114
122
  /**
115
123
  * Преобразует внутреннее состояние фильтров и таблицы в параметры запроса для загрузки данных.
116
124
  * @param searchCriteria Текущее состояние критериев поиска.
@@ -8,6 +8,10 @@ const material_1 = require("@mui/material");
8
8
  const __1 = require("../..");
9
9
  const store_1 = require("./filters/state/store");
10
10
  const SearchUIFiltersStoreProvider_1 = require("./filters/state/SearchUIFiltersStoreProvider");
11
+ const SearchUITableSelection_1 = require("./SearchUITableSelection");
12
+ const useSearchUISelectionLayoutEffect = typeof window === 'undefined'
13
+ ? react_1.useEffect
14
+ : react_1.useLayoutEffect;
11
15
  /**
12
16
  * Высокоуровневый компонент поискового UI, объединяющий фильтры и таблицу с результатами.
13
17
  * @template D Тип строки данных, отображаемых в таблице.
@@ -19,7 +23,7 @@ const SearchUI = (props) => {
19
23
  };
20
24
  exports.SearchUI = SearchUI;
21
25
  const SearchUIContent = (props) => {
22
- const { autoTestId = props.settingsContextName, settingsContextName, possibleCriteria, predefinedCriteria, exactSearchLabels, initialSearchConditions, searchConditions, tableParams, dataUseState, config, } = props;
26
+ const { autoTestId = props.settingsContextName, settingsContextName, possibleCriteria, predefinedCriteria, exactSearchLabels, initialSearchConditions, searchConditions, tableParams, dataUseState, config, tableSelection, } = props;
23
27
  const resolvedTable = resolveSearchUITable(props);
24
28
  const searchCriteria = (0, store_1.useSearchUIFiltersStore)(store => store.appliedSearchCriteria);
25
29
  const filtersSettingsContextName = (0, store_1.useSearchUIFiltersStore)(store => store.settingsContextName);
@@ -73,17 +77,225 @@ const SearchUIContent = (props) => {
73
77
  const tableViewSelector = props.tableViews
74
78
  ? createTableViewSelector(props.tableViews, resolvedTable.viewId, resolvedTable.actions, autoTestId)
75
79
  : undefined;
80
+ const renderTable = (selection, toolbar) => {
81
+ const factoryContext = {
82
+ appliedSearchCriteria: searchCriteria,
83
+ selection,
84
+ viewId: resolvedTable.viewId,
85
+ };
86
+ return react_1.default.createElement(__1.PneTable, { autoTestId: autoTestId, data: data, createTableHeader: headerParams => resolvedTable.createTableHeader(headerParams, factoryContext), sortOptions: {
87
+ order,
88
+ setOrder,
89
+ sortIndex,
90
+ setSortIndex,
91
+ onSortChange,
92
+ }, createRow: (item, index, arr) => resolvedTable.createTableRow(item, index, arr, setData, factoryContext), paginator: paginator, loading: loading, loadingKey: resolvedTable.viewId, toolbar: toolbar });
93
+ };
94
+ const table = tableSelection
95
+ ? react_1.default.createElement(SearchUISelectableTable, { appliedSearchCriteria: searchCriteria, config: tableSelection, data: data, loading: loading, persistentControls: tableViewSelector, renderTable: renderTable, viewId: resolvedTable.viewId })
96
+ : renderTable(undefined, tableViewSelector);
76
97
  return react_1.default.createElement(react_1.default.Fragment, null,
77
98
  react_1.default.createElement(SearchUIFilters_1.SearchUIFiltersContent, { autoTestId: autoTestId, settingsContextName: settingsContextName, possibleCriteria: possibleCriteria, predefinedCriteria: predefinedCriteria, exactSearchLabels: exactSearchLabels, initialSearchConditions: initialSearchConditions, searchConditions: searchConditions, onFiltersUpdate: ignoreAppliedSearchCriteria, config: config, searchLoading: loading }),
78
99
  react_1.default.createElement(material_1.Divider, null),
79
- react_1.default.createElement(material_1.Box, { sx: tableBoxSx },
80
- react_1.default.createElement(__1.PneTable, { autoTestId: autoTestId, data: data, createTableHeader: resolvedTable.createTableHeader, sortOptions: {
81
- order,
82
- setOrder,
83
- sortIndex,
84
- setSortIndex,
85
- onSortChange,
86
- }, createRow: (item, index, arr) => resolvedTable.createTableRow(item, index, arr, setData), paginator: paginator, loading: loading, loadingKey: resolvedTable.viewId, toolbar: tableViewSelector })));
100
+ react_1.default.createElement(material_1.Box, { sx: tableBoxSx }, table));
101
+ };
102
+ const SearchUISelectableTable = (props) => {
103
+ const { appliedSearchCriteria, config, data, loading, persistentControls, renderTable, viewId, } = props;
104
+ const scopeKey = (0, SearchUITableSelection_1.createSearchUITableSelectionScopeKey)(appliedSearchCriteria, viewId, config.preserveAcrossViews ?? false);
105
+ const scope = (0, react_1.useMemo)(() => ({
106
+ appliedSearchCriteria,
107
+ scopeKey,
108
+ viewId,
109
+ }), [appliedSearchCriteria, scopeKey, viewId]);
110
+ const [selectingAllMatching, setSelectingAllMatching] = (0, react_1.useState)(false);
111
+ const requestSequenceRef = (0, react_1.useRef)(0);
112
+ const requestPendingRef = (0, react_1.useRef)(false);
113
+ const requestPromiseRef = (0, react_1.useRef)(null);
114
+ const mountedRef = (0, react_1.useRef)(false);
115
+ const previousScopeKeyRef = (0, react_1.useRef)(scopeKey);
116
+ const previousMaxSelectedRef = (0, react_1.useRef)(config.maxSelected);
117
+ const previousConfiguredDisabledRef = (0, react_1.useRef)(config.disabled ?? false);
118
+ const previousResolverEnabledRef = (0, react_1.useRef)(config.resolveAllMatchingCount !== undefined);
119
+ const resolverRef = (0, react_1.useRef)(config.resolveAllMatchingCount);
120
+ const scopeOccurrenceRef = (0, react_1.useRef)(0);
121
+ const [scopeOccurrence, setScopeOccurrence] = (0, react_1.useState)(0);
122
+ const allMatchingAllowedRef = (0, react_1.useRef)(appliedSearchCriteria !== null && !config.disabled);
123
+ const selectionInteractionsAllowedRef = (0, react_1.useRef)(appliedSearchCriteria !== null && !config.disabled && !loading);
124
+ useSearchUISelectionLayoutEffect(() => {
125
+ mountedRef.current = true;
126
+ return () => {
127
+ mountedRef.current = false;
128
+ requestSequenceRef.current += 1;
129
+ requestPendingRef.current = false;
130
+ requestPromiseRef.current = null;
131
+ };
132
+ }, []);
133
+ useSearchUISelectionLayoutEffect(() => {
134
+ allMatchingAllowedRef.current = appliedSearchCriteria !== null && !config.disabled;
135
+ selectionInteractionsAllowedRef.current = allMatchingAllowedRef.current && !loading;
136
+ resolverRef.current = config.resolveAllMatchingCount;
137
+ }, [appliedSearchCriteria, config.disabled, config.resolveAllMatchingCount, loading]);
138
+ useSearchUISelectionLayoutEffect(() => {
139
+ if (Object.is(previousScopeKeyRef.current, scopeKey)) {
140
+ return;
141
+ }
142
+ previousScopeKeyRef.current = scopeKey;
143
+ const nextScopeOccurrence = scopeOccurrenceRef.current + 1;
144
+ scopeOccurrenceRef.current = nextScopeOccurrence;
145
+ setScopeOccurrence(nextScopeOccurrence);
146
+ requestSequenceRef.current += 1;
147
+ requestPendingRef.current = false;
148
+ requestPromiseRef.current = null;
149
+ setSelectingAllMatching(false);
150
+ }, [scopeKey]);
151
+ useSearchUISelectionLayoutEffect(() => {
152
+ const configuredDisabled = config.disabled ?? false;
153
+ const maxSelectedChanged = !Object.is(previousMaxSelectedRef.current, config.maxSelected);
154
+ const becameDisabled = configuredDisabled && !previousConfiguredDisabledRef.current;
155
+ const resolverEnabled = config.resolveAllMatchingCount !== undefined;
156
+ const resolverRemoved = previousResolverEnabledRef.current && !resolverEnabled;
157
+ previousMaxSelectedRef.current = config.maxSelected;
158
+ previousConfiguredDisabledRef.current = configuredDisabled;
159
+ previousResolverEnabledRef.current = resolverEnabled;
160
+ if (!maxSelectedChanged && !becameDisabled && !resolverRemoved) {
161
+ return;
162
+ }
163
+ requestSequenceRef.current += 1;
164
+ requestPendingRef.current = false;
165
+ requestPromiseRef.current = null;
166
+ setSelectingAllMatching(false);
167
+ }, [config.disabled, config.maxSelected, config.resolveAllMatchingCount]);
168
+ const selectionParams = createSearchUITableSelectionParams(config, data, scopeKey, appliedSearchCriteria === null);
169
+ const tableSelection = (0, __1.useTableSelection)(selectionParams);
170
+ const tableSelectionRef = (0, react_1.useRef)(tableSelection);
171
+ useSearchUISelectionLayoutEffect(() => {
172
+ tableSelectionRef.current = tableSelection;
173
+ }, [tableSelection]);
174
+ const createBlockedUpdate = (0, react_1.useCallback)(() => ({
175
+ selection: tableSelectionRef.current.selection,
176
+ changed: false,
177
+ limitExceeded: false,
178
+ }), []);
179
+ const selectAllMatchingResults = (0, react_1.useCallback)(() => {
180
+ const resolver = resolverRef.current;
181
+ const currentSelection = tableSelectionRef.current;
182
+ if (!mountedRef.current
183
+ || scopeOccurrenceRef.current !== scopeOccurrence
184
+ || !resolver
185
+ || !selectionInteractionsAllowedRef.current) {
186
+ return Promise.resolve(createBlockedUpdate());
187
+ }
188
+ if (requestPendingRef.current && requestPromiseRef.current) {
189
+ return requestPromiseRef.current;
190
+ }
191
+ if (currentSelection.interactionDisabled) {
192
+ return Promise.resolve(createBlockedUpdate());
193
+ }
194
+ const requestSequence = requestSequenceRef.current + 1;
195
+ requestSequenceRef.current = requestSequence;
196
+ requestPendingRef.current = true;
197
+ setSelectingAllMatching(true);
198
+ const requestScope = scope;
199
+ const runRequest = async () => {
200
+ try {
201
+ await Promise.resolve();
202
+ if (!mountedRef.current
203
+ || requestSequenceRef.current !== requestSequence
204
+ || !allMatchingAllowedRef.current
205
+ || !resolverRef.current) {
206
+ return createBlockedUpdate();
207
+ }
208
+ const matchingCount = await resolver(requestScope);
209
+ if (!mountedRef.current
210
+ || requestSequenceRef.current !== requestSequence
211
+ || !allMatchingAllowedRef.current
212
+ || !resolverRef.current) {
213
+ return createBlockedUpdate();
214
+ }
215
+ return tableSelectionRef.current.selectAllMatching(matchingCount);
216
+ }
217
+ catch (error) {
218
+ if (!mountedRef.current || requestSequenceRef.current !== requestSequence) {
219
+ return createBlockedUpdate();
220
+ }
221
+ throw error;
222
+ }
223
+ finally {
224
+ if (mountedRef.current && requestSequenceRef.current === requestSequence) {
225
+ requestPendingRef.current = false;
226
+ requestPromiseRef.current = null;
227
+ setSelectingAllMatching(false);
228
+ }
229
+ }
230
+ };
231
+ const requestPromise = runRequest();
232
+ requestPromiseRef.current = requestPromise;
233
+ return requestPromise;
234
+ }, [createBlockedUpdate, scope, scopeOccurrence]);
235
+ const selection = {
236
+ ...tableSelection,
237
+ clear: () => !mountedRef.current
238
+ || requestPendingRef.current
239
+ || scopeOccurrenceRef.current !== scopeOccurrence
240
+ || !selectionInteractionsAllowedRef.current
241
+ ? createBlockedUpdate()
242
+ : tableSelectionRef.current.clear(),
243
+ interactionDisabled: tableSelection.interactionDisabled || loading || selectingAllMatching,
244
+ selectAllMatching: matchingCount => !mountedRef.current
245
+ || requestPendingRef.current
246
+ || scopeOccurrenceRef.current !== scopeOccurrence
247
+ || !selectionInteractionsAllowedRef.current
248
+ ? createBlockedUpdate()
249
+ : tableSelectionRef.current.selectAllMatching(matchingCount),
250
+ setPageSelected: selected => !mountedRef.current
251
+ || requestPendingRef.current
252
+ || scopeOccurrenceRef.current !== scopeOccurrence
253
+ || !selectionInteractionsAllowedRef.current
254
+ ? createBlockedUpdate()
255
+ : tableSelectionRef.current.setPageSelected(selected),
256
+ setRowSelected: (row, selected) => !mountedRef.current
257
+ || requestPendingRef.current
258
+ || scopeOccurrenceRef.current !== scopeOccurrence
259
+ || !selectionInteractionsAllowedRef.current
260
+ ? createBlockedUpdate()
261
+ : tableSelectionRef.current.setRowSelected(row, selected),
262
+ scope,
263
+ selectingAllMatching,
264
+ selectAllMatchingResults: config.resolveAllMatchingCount
265
+ ? selectAllMatchingResults
266
+ : undefined,
267
+ };
268
+ const contextualControls = config.renderControls({
269
+ appliedSearchCriteria,
270
+ selection,
271
+ viewId,
272
+ });
273
+ const toolbar = config.toolbarAriaLabel !== undefined
274
+ ? react_1.default.createElement(__1.PneTableToolbar, { "aria-label": config.toolbarAriaLabel, contextual: contextualControls, persistent: persistentControls })
275
+ : react_1.default.createElement(__1.PneTableToolbar, { "aria-labelledby": config.toolbarAriaLabelledBy, contextual: contextualControls, persistent: persistentControls });
276
+ return renderTable(selection, toolbar);
277
+ };
278
+ const createSearchUITableSelectionParams = (config, rows, scopeKey, interactionsUnavailable) => {
279
+ const common = {
280
+ disabled: config.disabled || interactionsUnavailable,
281
+ getRowId: config.getRowId,
282
+ isRowSelectable: config.isRowSelectable,
283
+ maxSelected: config.maxSelected,
284
+ rows,
285
+ scopeKey,
286
+ };
287
+ if (config.selection !== undefined) {
288
+ return {
289
+ ...common,
290
+ onSelectionChange: config.onSelectionChange,
291
+ selection: config.selection,
292
+ };
293
+ }
294
+ return {
295
+ ...common,
296
+ defaultSelection: config.defaultSelection,
297
+ onSelectionChange: config.onSelectionChange,
298
+ };
87
299
  };
88
300
  const resolveSearchUITable = (props) => {
89
301
  if (!props.tableViews) {
@@ -1 +1 @@
1
- {"version":3,"file":"SearchUI.js","sourceRoot":"","sources":["../../../src/component/search-ui/SearchUI.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SearchUI.js","sourceRoot":"","sources":["../../../src/component/search-ui/SearchUI.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import type React from 'react';
2
+ import type { TableRowId, TableSelectionModel, TableSelectionUpdate } from '../table/tableSelection';
3
+ import type { TableSelectionChangeDetails, UseTableSelectionResult } from '../table/useTableSelection';
4
+ import type { SearchCriteria } from './filters/types';
5
+ export type SearchUITableSelectionScopeContext<TViewId extends string = string> = {
6
+ /** Criteria that produced the currently applied result set; draft filters are intentionally excluded. */
7
+ appliedSearchCriteria: Readonly<SearchCriteria> | null;
8
+ /** Active table View, when SearchUI is configured with views. */
9
+ viewId?: TViewId;
10
+ };
11
+ export type SearchUITableSelectionScope<TViewId extends string = string> = SearchUITableSelectionScopeContext<TViewId> & {
12
+ /** Canonical in-memory identity used to reject stale selection work. */
13
+ scopeKey: string;
14
+ };
15
+ export type SearchUITableSelectionController<D extends object, TKey extends TableRowId = TableRowId, TViewId extends string = string> = UseTableSelectionResult<D, TKey> & {
16
+ scope: SearchUITableSelectionScope<TViewId>;
17
+ /** True while SearchUI is resolving the selectable all-results count. */
18
+ selectingAllMatching: boolean;
19
+ /** Present only when resolveAllMatchingCount is configured. */
20
+ selectAllMatchingResults?: () => Promise<TableSelectionUpdate<TKey>>;
21
+ };
22
+ export type SearchUITableFactoryContext<D extends object, TKey extends TableRowId = TableRowId, TViewId extends string = string> = SearchUITableSelectionScopeContext<TViewId> & {
23
+ /** Present only when SearchUI table selection is configured. */
24
+ selection?: SearchUITableSelectionController<D, TKey, TViewId>;
25
+ };
26
+ export type SearchUITableSelectionRenderContext<D extends object, TKey extends TableRowId = TableRowId, TViewId extends string = string> = SearchUITableSelectionScopeContext<TViewId> & {
27
+ selection: SearchUITableSelectionController<D, TKey, TViewId>;
28
+ };
29
+ type SearchUITableSelectionToolbarAccessibleName = {
30
+ toolbarAriaLabel: string;
31
+ toolbarAriaLabelledBy?: never;
32
+ } | {
33
+ toolbarAriaLabel?: never;
34
+ toolbarAriaLabelledBy: string;
35
+ };
36
+ type SearchUITableSelectionBaseConfig<D extends object, TKey extends TableRowId, TViewId extends string> = SearchUITableSelectionToolbarAccessibleName & {
37
+ getRowId: (row: D) => TKey;
38
+ isRowSelectable?: (row: D) => boolean;
39
+ maxSelected?: number;
40
+ disabled?: boolean;
41
+ /**
42
+ * By default a View change starts a new selection scope. Enable only when
43
+ * every View represents the same rows with compatible stable IDs.
44
+ */
45
+ preserveAcrossViews?: boolean;
46
+ /**
47
+ * Resolve the selectable count for the applied result scope. SearchUI keeps
48
+ * the request transient and applies the result only while that scope is current.
49
+ * An in-flight request keeps the resolver active when it started; replacing
50
+ * the callback affects the next request, while removing it cancels pending work.
51
+ */
52
+ resolveAllMatchingCount?: (scope: SearchUITableSelectionScope<TViewId>) => Promise<number>;
53
+ /** Consumer-owned, localized summary, status, and bulk actions. */
54
+ renderControls: (context: SearchUITableSelectionRenderContext<D, TKey, TViewId>) => React.ReactNode;
55
+ };
56
+ type SearchUIControlledTableSelectionConfig<TKey extends TableRowId> = {
57
+ selection: TableSelectionModel<TKey>;
58
+ defaultSelection?: never;
59
+ onSelectionChange: (selection: TableSelectionModel<TKey>, details: TableSelectionChangeDetails) => void;
60
+ };
61
+ type SearchUIUncontrolledTableSelectionConfig<TKey extends TableRowId> = {
62
+ selection?: never;
63
+ defaultSelection?: TableSelectionModel<TKey>;
64
+ onSelectionChange?: (selection: TableSelectionModel<TKey>, details: TableSelectionChangeDetails) => void;
65
+ };
66
+ export type SearchUITableSelectionConfig<D extends object, TKey extends TableRowId = TableRowId, TViewId extends string = string> = SearchUITableSelectionBaseConfig<D, TKey, TViewId> & (SearchUIControlledTableSelectionConfig<TKey> | SearchUIUncontrolledTableSelectionConfig<TKey>);
67
+ export declare const createSearchUITableSelectionScopeKey: (appliedSearchCriteria: Readonly<SearchCriteria> | null, viewId: string | undefined, preserveAcrossViews: boolean) => string;
68
+ export {};