@axinom/mosaic-ui 0.48.0-rc.2 → 0.48.0-rc.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Explorer/Explorer.d.ts.map +1 -1
- package/dist/components/Explorer/useDataProvider.d.ts +1 -0
- package/dist/components/Explorer/useDataProvider.d.ts.map +1 -1
- package/dist/components/List/List.d.ts +3 -1
- package/dist/components/List/List.d.ts.map +1 -1
- package/dist/index.es.js +1 -1
- package/dist/index.es.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
- package/src/components/Explorer/Explorer.tsx +3 -1
- package/src/components/Explorer/useDataProvider.tsx +2 -0
- package/src/components/List/List.tsx +24 -9
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@axinom/mosaic-ui",
|
|
3
|
-
"version": "0.48.0-rc.
|
|
3
|
+
"version": "0.48.0-rc.3",
|
|
4
4
|
"description": "UI components for building Axinom Mosaic applications",
|
|
5
5
|
"author": "Axinom",
|
|
6
6
|
"license": "PROPRIETARY",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"build-storybook": "storybook build"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@axinom/mosaic-core": "^0.4.21-rc.
|
|
35
|
+
"@axinom/mosaic-core": "^0.4.21-rc.3",
|
|
36
36
|
"@faker-js/faker": "^7.4.0",
|
|
37
37
|
"@popperjs/core": "^2.11.8",
|
|
38
38
|
"clsx": "^1.1.0",
|
|
@@ -105,5 +105,5 @@
|
|
|
105
105
|
"publishConfig": {
|
|
106
106
|
"access": "public"
|
|
107
107
|
},
|
|
108
|
-
"gitHead": "
|
|
108
|
+
"gitHead": "5cad90cce8fa23b98b1fe0f0e4154b420f8542f4"
|
|
109
109
|
}
|
|
@@ -195,7 +195,7 @@ export const Explorer = React.forwardRef(function Explorer<T extends Data>(
|
|
|
195
195
|
dataProvider,
|
|
196
196
|
loadingTriggerOffset,
|
|
197
197
|
|
|
198
|
-
enableSelectAll,
|
|
198
|
+
enableSelectAll = true,
|
|
199
199
|
modalMode = false,
|
|
200
200
|
className = '',
|
|
201
201
|
|
|
@@ -254,6 +254,7 @@ export const Explorer = React.forwardRef(function Explorer<T extends Data>(
|
|
|
254
254
|
data,
|
|
255
255
|
isLoading,
|
|
256
256
|
resultCount,
|
|
257
|
+
hasMoreData,
|
|
257
258
|
onReloadData,
|
|
258
259
|
onRequestMoreData,
|
|
259
260
|
onFiltersChange,
|
|
@@ -463,6 +464,7 @@ export const Explorer = React.forwardRef(function Explorer<T extends Data>(
|
|
|
463
464
|
showActionButton={Boolean(generateItemLink) || Boolean(onItemClicked)} // or hard code to `true`?
|
|
464
465
|
selectionMode={mode}
|
|
465
466
|
enableSelectAll={enableSelectAll}
|
|
467
|
+
enableSelectAllDeselect={enableSelectAll && !hasMoreData}
|
|
466
468
|
loadingTriggerOffset={loadingTriggerOffset}
|
|
467
469
|
defaultSortOrder={sortOrder}
|
|
468
470
|
generateItemLink={generateItemLink}
|
|
@@ -22,6 +22,7 @@ import { StationMessage } from './useStationMessage';
|
|
|
22
22
|
interface DataProviderReturnType<T> {
|
|
23
23
|
readonly isLoading: boolean;
|
|
24
24
|
readonly resultCount: ResultCounts;
|
|
25
|
+
readonly hasMoreData: boolean;
|
|
25
26
|
readonly onReloadData: () => void;
|
|
26
27
|
readonly onSortChanged: (sort: SortData<T>) => void;
|
|
27
28
|
readonly onFiltersChange: (filters: FilterValues<T>) => void;
|
|
@@ -184,6 +185,7 @@ export function useDataProvider<T extends Data>({
|
|
|
184
185
|
onFiltersChange,
|
|
185
186
|
onRequestMoreData,
|
|
186
187
|
data,
|
|
188
|
+
hasMoreData: hasMoreData.current,
|
|
187
189
|
} as const;
|
|
188
190
|
}
|
|
189
191
|
|
|
@@ -71,8 +71,10 @@ export interface ListProps<T extends Data> {
|
|
|
71
71
|
* If 'Multi' is selected, a checkbox will be rendered for the header and each row of data
|
|
72
72
|
*/
|
|
73
73
|
selectionMode?: ListSelectMode;
|
|
74
|
-
/** In multiselect mode, whether the Select All button will be displayed. When Select All button is clicked the onItemClicked button will return
|
|
74
|
+
/** In multiselect mode, whether the Select All button will be displayed. When Select All button is clicked the onItemClicked button will return SELECT_ALL instead of an array of items. (default: true) */
|
|
75
75
|
enableSelectAll?: boolean;
|
|
76
|
+
/** Sets whether deselection should be allowed in multiselect mode when select all is enabled. This would allow the user to deselect items after select all checkbox is checked. Once an item is deselected, the list will switch to a SINGLE_ITEMS selection mode. */
|
|
77
|
+
enableSelectAllDeselect?: boolean;
|
|
76
78
|
/**
|
|
77
79
|
* Defines whether an action button will be rendered (default: true)
|
|
78
80
|
* Will not render if selectMode is not 'None'
|
|
@@ -131,6 +133,7 @@ const ListRenderer = <T extends Data>(
|
|
|
131
133
|
defaultSortOrder,
|
|
132
134
|
selectionMode = ListSelectMode.None,
|
|
133
135
|
enableSelectAll = true,
|
|
136
|
+
enableSelectAllDeselect = false,
|
|
134
137
|
onItemClicked = noop,
|
|
135
138
|
onItemSelected = noop,
|
|
136
139
|
onRequestMoreData = noop,
|
|
@@ -172,13 +175,20 @@ const ListRenderer = <T extends Data>(
|
|
|
172
175
|
const itemSelectionHandler = useCallback(
|
|
173
176
|
(items: ListItem<T>[]) => {
|
|
174
177
|
const selectedData: T[] = items.map(({ data }) => data);
|
|
178
|
+
if (enableSelectAllDeselect) {
|
|
179
|
+
if (items.length === listItems.length) {
|
|
180
|
+
isAllItemsChecked.current = true;
|
|
181
|
+
} else {
|
|
182
|
+
isAllItemsChecked.current = false;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
175
185
|
onItemSelected &&
|
|
176
186
|
onItemSelected({
|
|
177
187
|
mode: 'SINGLE_ITEMS',
|
|
178
188
|
items: selectedData,
|
|
179
189
|
});
|
|
180
190
|
},
|
|
181
|
-
[onItemSelected],
|
|
191
|
+
[enableSelectAllDeselect, listItems.length, onItemSelected],
|
|
182
192
|
);
|
|
183
193
|
|
|
184
194
|
const headerCheckboxHandler = useCallback(
|
|
@@ -206,12 +216,15 @@ const ListRenderer = <T extends Data>(
|
|
|
206
216
|
[onItemSelected],
|
|
207
217
|
);
|
|
208
218
|
|
|
209
|
-
const itemSelectedHandler = (
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
219
|
+
const itemSelectedHandler = useCallback(
|
|
220
|
+
(selected: boolean, index: number): void => {
|
|
221
|
+
const items = [...listItems];
|
|
222
|
+
items[index].selected = selected;
|
|
223
|
+
setListItems(items);
|
|
224
|
+
itemSelectionHandler(items.filter((item) => item.selected === true));
|
|
225
|
+
},
|
|
226
|
+
[itemSelectionHandler, listItems],
|
|
227
|
+
);
|
|
215
228
|
|
|
216
229
|
const onTriggeredHandler = (): void => {
|
|
217
230
|
if (!isLoading && !isError) {
|
|
@@ -277,7 +290,9 @@ const ListRenderer = <T extends Data>(
|
|
|
277
290
|
itemSelected={item.selected}
|
|
278
291
|
isTrigger={isTrigger<T>(index, listItems, loadingTriggerOffset)}
|
|
279
292
|
isRowDisabled={
|
|
280
|
-
isAllItemsChecked.current &&
|
|
293
|
+
isAllItemsChecked.current &&
|
|
294
|
+
!enableSelectAllDeselect &&
|
|
295
|
+
selectionMode === ListSelectMode.Multi
|
|
281
296
|
}
|
|
282
297
|
columnSizes={columnSizes}
|
|
283
298
|
columnGap={columnGap}
|