@rio-cloud/uikit-mcp 1.1.8 → 1.1.10
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/README.md +17 -7
- package/dist/doc-metadata.json +325 -85
- package/dist/docs/components/accentBar.md +110 -116
- package/dist/docs/components/activity.md +1 -1
- package/dist/docs/components/analyticsAnalysisOverlay.md +628 -0
- package/dist/docs/components/animatedNumber.md +2 -2
- package/dist/docs/components/animatedTextReveal.md +53 -55
- package/dist/docs/components/animations.md +22 -22
- package/dist/docs/components/appHeader.md +27 -38
- package/dist/docs/components/appLayout.md +38 -42
- package/dist/docs/components/appNavigationBar.md +1 -1
- package/dist/docs/components/areaCharts.md +57 -63
- package/dist/docs/components/aspectRatioPlaceholder.md +1 -1
- package/dist/docs/components/assetTree.md +200 -167
- package/dist/docs/components/autosuggests.md +1 -1
- package/dist/docs/components/avatar.md +1 -1
- package/dist/docs/components/banner.md +2 -2
- package/dist/docs/components/barCharts.md +531 -417
- package/dist/docs/components/barList.md +9 -9
- package/dist/docs/components/basicMap.md +60 -39
- package/dist/docs/components/bottomSheet.md +2 -2
- package/dist/docs/components/button.md +8 -2
- package/dist/docs/components/buttonToolbar.md +1 -1
- package/dist/docs/components/calendarStripe.md +57 -65
- package/dist/docs/components/card.md +1 -1
- package/dist/docs/components/carousel.md +1 -1
- package/dist/docs/components/chartColors.md +1 -3
- package/dist/docs/components/chartsGettingStarted.md +1 -3
- package/dist/docs/components/chat.md +2 -2
- package/dist/docs/components/checkbox.md +15 -12
- package/dist/docs/components/circularProgress.md +8 -8
- package/dist/docs/components/clearableInput.md +1 -1
- package/dist/docs/components/collapse.md +2 -4
- package/dist/docs/components/composedCharts.md +63 -53
- package/dist/docs/components/contentLoader.md +1 -1
- package/dist/docs/components/dataTabs.md +33 -33
- package/dist/docs/components/datepickers.md +693 -687
- package/dist/docs/components/dayPicker.md +5574 -0
- package/dist/docs/components/dayPickerCalendar.md +5269 -0
- package/dist/docs/components/dialogs.md +17 -19
- package/dist/docs/components/divider.md +1 -1
- package/dist/docs/components/dropdowns.md +3252 -3276
- package/dist/docs/components/editableContent.md +91 -91
- package/dist/docs/components/expander.md +4 -1
- package/dist/docs/components/fade.md +1 -1
- package/dist/docs/components/fadeExpander.md +1 -1
- package/dist/docs/components/fadeUp.md +32 -36
- package/dist/docs/components/feedback.md +1 -1
- package/dist/docs/components/filePickers.md +1 -1
- package/dist/docs/components/formLabel.md +29 -31
- package/dist/docs/components/groupedItemList.md +3 -7
- package/dist/docs/components/htmlTable.md +5074 -0
- package/dist/docs/components/iconList.md +4 -4
- package/dist/docs/components/imagePreloader.md +1 -1
- package/dist/docs/components/labeledElement.md +1 -1
- package/dist/docs/components/licensePlate.md +1 -1
- package/dist/docs/components/lineCharts.md +172 -172
- package/dist/docs/components/listMenu.md +15 -12
- package/dist/docs/components/loadMore.md +4 -2
- package/dist/docs/components/mainNavigation.md +1 -1
- package/dist/docs/components/mapCircle.md +10 -1
- package/dist/docs/components/mapCluster.md +23 -1
- package/dist/docs/components/mapContext.md +12 -4
- package/dist/docs/components/mapDraggableMarker.md +12 -1
- package/dist/docs/components/mapGettingStarted.md +1 -1
- package/dist/docs/components/mapInfoBubble.md +129 -2
- package/dist/docs/components/mapLayerGroup.md +10 -1
- package/dist/docs/components/mapMarker.md +10 -3
- package/dist/docs/components/mapPolygon.md +288 -85
- package/dist/docs/components/mapRoute.md +262 -172
- package/dist/docs/components/mapRouteGenerator.md +1 -1
- package/dist/docs/components/mapSettings.md +23 -1
- package/dist/docs/components/mapUtils.md +1 -1
- package/dist/docs/components/multiselects.md +211 -18
- package/dist/docs/components/noData.md +1 -1
- package/dist/docs/components/notifications.md +2 -2
- package/dist/docs/components/numbercontrol.md +15 -15
- package/dist/docs/components/onboarding.md +1 -1
- package/dist/docs/components/page.md +1 -1
- package/dist/docs/components/pager.md +1 -1
- package/dist/docs/components/pieCharts.md +237 -213
- package/dist/docs/components/popover.md +1 -1
- package/dist/docs/components/position.md +1 -1
- package/dist/docs/components/radialBarCharts.md +446 -400
- package/dist/docs/components/radioCardGroup.md +1 -1
- package/dist/docs/components/radiobutton.md +96 -98
- package/dist/docs/components/releaseNotes.md +1 -1
- package/dist/docs/components/resizer.md +1 -3
- package/dist/docs/components/responsiveColumnStripe.md +1 -3
- package/dist/docs/components/responsiveVideo.md +1 -1
- package/dist/docs/components/rioglyph.md +1 -1
- package/dist/docs/components/rules.md +41 -47
- package/dist/docs/components/saveableInput.md +252 -252
- package/dist/docs/components/selects.md +165 -111
- package/dist/docs/components/sidebar.md +1 -1
- package/dist/docs/components/sliders.md +1 -1
- package/dist/docs/components/smoothScrollbars.md +19 -15
- package/dist/docs/components/spinners.md +1 -1
- package/dist/docs/components/states.md +1 -1
- package/dist/docs/components/statsWidgets.md +1 -1
- package/dist/docs/components/statusBar.md +1 -1
- package/dist/docs/components/stepButton.md +1 -1
- package/dist/docs/components/steppedProgressBars.md +9 -11
- package/dist/docs/components/subNavigation.md +1 -1
- package/dist/docs/components/supportMarker.md +1 -1
- package/dist/docs/components/svgImage.md +1 -1
- package/dist/docs/components/switch.md +3 -1
- package/dist/docs/components/table.md +19584 -0
- package/dist/docs/components/tableControls.md +982 -0
- package/dist/docs/components/tagManager.md +1 -1
- package/dist/docs/components/tags.md +1 -1
- package/dist/docs/components/teaser.md +1 -3
- package/dist/docs/components/textTruncateMiddle.md +1 -1
- package/dist/docs/components/timeline.md +1 -1
- package/dist/docs/components/timepicker.md +1 -1
- package/dist/docs/components/toggleButton.md +3 -1
- package/dist/docs/components/tooltip.md +4 -2
- package/dist/docs/components/tracker.md +1 -1
- package/dist/docs/components/virtualList.md +56 -56
- package/dist/docs/foundations.md +640 -3122
- package/dist/docs/start/changelog.md +53 -3
- package/dist/docs/start/goodtoknow.md +2 -4
- package/dist/docs/start/guidelines/color-combinations.md +1 -1
- package/dist/docs/start/guidelines/custom-css.md +1 -1
- package/dist/docs/start/guidelines/custom-rioglyph.md +1 -1
- package/dist/docs/start/guidelines/formatting.md +1 -3
- package/dist/docs/start/guidelines/iframe.md +17 -19
- package/dist/docs/start/guidelines/obfuscate-data.md +2 -4
- package/dist/docs/start/guidelines/print-css.md +1 -1
- package/dist/docs/start/guidelines/spinner.md +1 -1
- package/dist/docs/start/guidelines/state-in-url.md +1 -1
- package/dist/docs/start/guidelines/supported-browsers.md +1 -1
- package/dist/docs/start/guidelines/writing.md +1 -1
- package/dist/docs/start/howto.md +12 -20
- package/dist/docs/start/intro.md +1 -1
- package/dist/docs/start/responsiveness.md +1 -3
- package/dist/docs/templates/ai-assistant.md +311 -0
- package/dist/docs/templates/common-table.md +814 -0
- package/dist/docs/templates/detail-views.md +846 -0
- package/dist/docs/templates/expandable-details.md +214 -0
- package/dist/docs/templates/feature-cards.md +479 -0
- package/dist/docs/templates/form-summary.md +179 -0
- package/dist/docs/templates/form-toggle.md +329 -0
- package/dist/docs/templates/list-blocks.md +872 -0
- package/dist/docs/templates/loading-progress.md +100 -0
- package/dist/docs/templates/options-panel.md +132 -0
- package/dist/docs/templates/panel-variants.md +137 -0
- package/dist/docs/templates/progress-cards.md +541 -0
- package/dist/docs/templates/progress-success.md +125 -0
- package/dist/docs/templates/settings-form.md +401 -0
- package/dist/docs/templates/stats-blocks.md +1245 -0
- package/dist/docs/templates/table-panel.md +310 -0
- package/dist/docs/templates/usage-cards.md +199 -0
- package/dist/docs/utilities/classNames.md +1 -1
- package/dist/docs/utilities/deviceUtils.md +2 -2
- package/dist/docs/utilities/featureToggles.md +1 -1
- package/dist/docs/utilities/fuelTypeUtils.md +27 -29
- package/dist/docs/utilities/getTrackingAttributes.md +277 -0
- package/dist/docs/utilities/routeUtils.md +2 -2
- package/dist/docs/utilities/useAfterMount.md +1 -1
- package/dist/docs/utilities/useAutoAnimate.md +1 -1
- package/dist/docs/utilities/useAverage.md +1 -1
- package/dist/docs/utilities/useClickOutside.md +1 -1
- package/dist/docs/utilities/useClipboard.md +2 -2
- package/dist/docs/utilities/useCookies.md +1 -1
- package/dist/docs/utilities/useCount.md +1 -1
- package/dist/docs/utilities/useDarkMode.md +5 -4
- package/dist/docs/utilities/useDebugInfo.md +3 -3
- package/dist/docs/utilities/useDraggableElement.md +281 -0
- package/dist/docs/utilities/useEffectOnce.md +1 -1
- package/dist/docs/utilities/useElapsedTime.md +1 -1
- package/dist/docs/utilities/useElementSize.md +1 -1
- package/dist/docs/utilities/useEsc.md +1 -1
- package/dist/docs/utilities/useEvent.md +1 -1
- package/dist/docs/utilities/useFocusTrap.md +1 -1
- package/dist/docs/utilities/useFullscreen.md +1 -1
- package/dist/docs/utilities/useHover.md +1 -1
- package/dist/docs/utilities/useIncomingPostMessages.md +1 -1
- package/dist/docs/utilities/useInterval.md +1 -1
- package/dist/docs/utilities/useIsFocusWithin.md +1 -1
- package/dist/docs/utilities/useKey.md +8 -10
- package/dist/docs/utilities/useLocalStorage.md +1 -1
- package/dist/docs/utilities/useLocationSuggestions.md +1 -1
- package/dist/docs/utilities/useMax.md +1 -1
- package/dist/docs/utilities/useMin.md +1 -1
- package/dist/docs/utilities/useMutationObserver.md +1 -1
- package/dist/docs/utilities/useOnScreen.md +1 -1
- package/dist/docs/utilities/useOnlineStatus.md +1 -1
- package/dist/docs/utilities/usePostMessage.md +2 -2
- package/dist/docs/utilities/usePostMessageSender.md +1 -1
- package/dist/docs/utilities/usePrevious.md +2 -4
- package/dist/docs/utilities/useResizeObserver.md +35 -15
- package/dist/docs/utilities/useRioCookieConsent.md +1 -1
- package/dist/docs/utilities/useScrollPosition.md +3 -6
- package/dist/docs/utilities/useSearch.md +1 -3
- package/dist/docs/utilities/useSearchHighlight.md +1 -1
- package/dist/docs/utilities/useSorting.md +370 -239
- package/dist/docs/utilities/useStateWithValidation.md +1 -1
- package/dist/docs/utilities/useSum.md +1 -1
- package/dist/docs/utilities/useTableExport.md +364 -288
- package/dist/docs/utilities/useTableSelection.md +88 -92
- package/dist/docs/utilities/useTimeout.md +1 -1
- package/dist/docs/utilities/useToggle.md +1 -1
- package/dist/docs/utilities/useUrlState.md +1 -1
- package/dist/docs/utilities/useWindowResize.md +1 -1
- package/dist/index.mjs +2 -8
- package/dist/search-synonyms.json +2 -2
- package/dist/version.json +2 -2
- package/package.json +15 -9
- package/dist/docs/components/tables.md +0 -8
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*Category:* Utilities
|
|
4
4
|
*Section:* Table & data hooks
|
|
5
5
|
*Source:* https://uikit.developers.rio.cloud/#/utilities/useSorting
|
|
6
|
-
*Captured:* 2026-
|
|
6
|
+
*Captured:* 2026-04-20T12:56:07.338Z
|
|
7
7
|
|
|
8
8
|
The useSorting hook provides an easy way to sort any list by a specified key using natural sort order. It offers flexible control over sorting direction and key selection, making it ideal for dynamic sorting use cases.
|
|
9
9
|
|
|
@@ -11,19 +11,38 @@ The useSorting hook provides an easy way to sort any list by a specified key usi
|
|
|
11
11
|
|
|
12
12
|
### Example: Example 1
|
|
13
13
|
|
|
14
|
-
Name
|
|
14
|
+
Name
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
Quantity
|
|
17
|
+
|
|
18
|
+
Box
|
|
19
|
+
|
|
20
|
+
20
|
|
21
|
+
|
|
22
|
+
Container
|
|
23
|
+
|
|
24
|
+
1
|
|
25
|
+
|
|
26
|
+
Crate
|
|
27
|
+
|
|
28
|
+
15
|
|
29
|
+
|
|
30
|
+
Drum
|
|
31
|
+
|
|
32
|
+
12
|
|
33
|
+
|
|
34
|
+
Pallet
|
|
35
|
+
|
|
36
|
+
10
|
|
37
|
+
|
|
38
|
+
Parcel
|
|
39
|
+
|
|
40
|
+
8
|
|
22
41
|
|
|
23
42
|
#### React (tsx)
|
|
24
43
|
|
|
25
44
|
```tsx
|
|
26
|
-
import
|
|
45
|
+
import Table, { TableBody, TableColumn, TableHeader, TableHeaderColumn, TableRow } from '@rio-cloud/rio-uikit/Table';
|
|
27
46
|
import useSorting from '@rio-cloud/rio-uikit/useSorting';
|
|
28
47
|
|
|
29
48
|
type Item = {
|
|
@@ -40,99 +59,123 @@ const items: Item[] = [
|
|
|
40
59
|
{ name: 'Box', quantity: 20 },
|
|
41
60
|
];
|
|
42
61
|
|
|
43
|
-
|
|
44
|
-
const { sortedItems, sortKey, sortDirection, setSortKey,
|
|
62
|
+
const UseSortingExample = () => {
|
|
63
|
+
const { sortedItems, sortKey, sortDirection, setSortKey, setSortDirection } = useSorting(items, 'name');
|
|
45
64
|
|
|
46
|
-
const
|
|
47
|
-
setSortKey(
|
|
48
|
-
|
|
49
|
-
toggleDirection();
|
|
50
|
-
}
|
|
65
|
+
const handleSortChange = (columnKey: string, direction: 'asc' | 'desc') => {
|
|
66
|
+
setSortKey(columnKey as keyof Item);
|
|
67
|
+
setSortDirection(direction);
|
|
51
68
|
};
|
|
52
69
|
|
|
53
70
|
return (
|
|
54
|
-
<
|
|
55
|
-
<
|
|
56
|
-
<
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
<tbody>
|
|
73
|
-
{sortedItems.map(({ name, quantity }) => (
|
|
74
|
-
<tr key={name}>
|
|
75
|
-
<td key={name}>{name}</td>
|
|
76
|
-
<td key={quantity}>{quantity}</td>
|
|
77
|
-
</tr>
|
|
78
|
-
))}
|
|
79
|
-
</tbody>
|
|
80
|
-
</table>
|
|
81
|
-
</div>
|
|
71
|
+
<Table rowKey='name' sortBy={String(sortKey)} sortDirection={sortDirection} onSortChange={handleSortChange}>
|
|
72
|
+
<TableHeader>
|
|
73
|
+
<TableHeaderColumn columnKey='name' sortable>
|
|
74
|
+
Name
|
|
75
|
+
</TableHeaderColumn>
|
|
76
|
+
<TableHeaderColumn columnKey='quantity' sortable>
|
|
77
|
+
Quantity
|
|
78
|
+
</TableHeaderColumn>
|
|
79
|
+
</TableHeader>
|
|
80
|
+
<TableBody>
|
|
81
|
+
{sortedItems.map(({ name, quantity }) => (
|
|
82
|
+
<TableRow key={name} id={name}>
|
|
83
|
+
<TableColumn columnKey='name'>{name}</TableColumn>
|
|
84
|
+
<TableColumn columnKey='quantity'>{quantity}</TableColumn>
|
|
85
|
+
</TableRow>
|
|
86
|
+
))}
|
|
87
|
+
</TableBody>
|
|
88
|
+
</Table>
|
|
82
89
|
);
|
|
83
90
|
};
|
|
91
|
+
|
|
92
|
+
export default UseSortingExample;
|
|
84
93
|
```
|
|
85
94
|
|
|
86
95
|
#### HTML (html)
|
|
87
96
|
|
|
88
97
|
```html
|
|
89
|
-
<div class="table-
|
|
90
|
-
<
|
|
91
|
-
<
|
|
92
|
-
<
|
|
93
|
-
<
|
|
94
|
-
<
|
|
95
|
-
<
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
</
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
<
|
|
123
|
-
<
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
<
|
|
131
|
-
<
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
98
|
+
<div class="table table-view-table border table-rounded table-has-head" role="table" style="--table-columns: minmax(50px, 1fr) minmax(50px, 1fr); --table-areas: "table-col-1 table-col-2"; --table-column-count: 2; --table-sticky-reference-top: var(--table-sticky-offset); --table-width: 908px;" aria-colcount="2">
|
|
99
|
+
<div class="table-head" role="rowgroup">
|
|
100
|
+
<div class="table-head-grid" role="row" style="grid-template-rows: repeat(1, auto);">
|
|
101
|
+
<div class="table-head-cell table-head-cell-sortable table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="name" role="columnheader" aria-colindex="1" aria-rowindex="1" aria-sort="ascending" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
102
|
+
<div class="table-head-cell-content">
|
|
103
|
+
<div class="table-head-cell-content-row">
|
|
104
|
+
<button type="button" class="table-head-button">
|
|
105
|
+
<span class="table-head-button-label">
|
|
106
|
+
<span class="sort-arrows sort-asc">
|
|
107
|
+
</span>
|
|
108
|
+
<span class="table-head-label">Name</span>
|
|
109
|
+
</span>
|
|
110
|
+
</button>
|
|
111
|
+
</div>
|
|
112
|
+
</div>
|
|
113
|
+
</div>
|
|
114
|
+
<div class="table-head-cell table-head-cell-sortable table-align-left table-vertical-align-middle" data-column="quantity" role="columnheader" aria-colindex="2" aria-rowindex="1" aria-sort="none" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
115
|
+
<div class="table-head-cell-content">
|
|
116
|
+
<div class="table-head-cell-content-row">
|
|
117
|
+
<button type="button" class="table-head-button">
|
|
118
|
+
<span class="table-head-button-label">
|
|
119
|
+
<span class="sort-arrows ">
|
|
120
|
+
</span>
|
|
121
|
+
<span class="table-head-label">Quantity</span>
|
|
122
|
+
</span>
|
|
123
|
+
</button>
|
|
124
|
+
</div>
|
|
125
|
+
</div>
|
|
126
|
+
</div>
|
|
127
|
+
</div>
|
|
128
|
+
</div>
|
|
129
|
+
<div class="table-body" role="rowgroup">
|
|
130
|
+
<div id="Box" class="table-row" data-index="0" data-row-id="0" role="row">
|
|
131
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="name" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
132
|
+
<div class="table-cell-content overflow-hidden">Box</div>
|
|
133
|
+
</div>
|
|
134
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="quantity" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
135
|
+
<div class="table-cell-content overflow-hidden">20</div>
|
|
136
|
+
</div>
|
|
137
|
+
</div>
|
|
138
|
+
<div id="Container" class="table-row" data-index="1" data-row-id="1" role="row">
|
|
139
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="name" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
140
|
+
<div class="table-cell-content overflow-hidden">Container</div>
|
|
141
|
+
</div>
|
|
142
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="quantity" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
143
|
+
<div class="table-cell-content overflow-hidden">1</div>
|
|
144
|
+
</div>
|
|
145
|
+
</div>
|
|
146
|
+
<div id="Crate" class="table-row" data-index="2" data-row-id="2" role="row">
|
|
147
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="name" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
148
|
+
<div class="table-cell-content overflow-hidden">Crate</div>
|
|
149
|
+
</div>
|
|
150
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="quantity" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
151
|
+
<div class="table-cell-content overflow-hidden">15</div>
|
|
152
|
+
</div>
|
|
153
|
+
</div>
|
|
154
|
+
<div id="Drum" class="table-row" data-index="3" data-row-id="3" role="row">
|
|
155
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="name" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
156
|
+
<div class="table-cell-content overflow-hidden">Drum</div>
|
|
157
|
+
</div>
|
|
158
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="quantity" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
159
|
+
<div class="table-cell-content overflow-hidden">12</div>
|
|
160
|
+
</div>
|
|
161
|
+
</div>
|
|
162
|
+
<div id="Pallet" class="table-row" data-index="4" data-row-id="4" role="row">
|
|
163
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="name" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
164
|
+
<div class="table-cell-content overflow-hidden">Pallet</div>
|
|
165
|
+
</div>
|
|
166
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="quantity" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
167
|
+
<div class="table-cell-content overflow-hidden">10</div>
|
|
168
|
+
</div>
|
|
169
|
+
</div>
|
|
170
|
+
<div id="Parcel" class="table-row" data-index="5" data-row-id="5" role="row">
|
|
171
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="name" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
172
|
+
<div class="table-cell-content overflow-hidden">Parcel</div>
|
|
173
|
+
</div>
|
|
174
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="quantity" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
175
|
+
<div class="table-cell-content overflow-hidden">8</div>
|
|
176
|
+
</div>
|
|
177
|
+
</div>
|
|
178
|
+
</div>
|
|
136
179
|
</div>
|
|
137
180
|
```
|
|
138
181
|
|
|
@@ -149,21 +192,64 @@ export default () => {
|
|
|
149
192
|
### Example: Example 2
|
|
150
193
|
|
|
151
194
|
Sort by a primary column. Hold shift key to sort by a secondary column
|
|
152
|
-
Category
|
|
195
|
+
Category
|
|
196
|
+
|
|
197
|
+
Name
|
|
198
|
+
|
|
199
|
+
Quantity
|
|
200
|
+
|
|
201
|
+
Shipping
|
|
202
|
+
|
|
203
|
+
Parcel
|
|
204
|
+
|
|
205
|
+
8
|
|
206
|
+
|
|
207
|
+
Shipping
|
|
208
|
+
|
|
209
|
+
Box
|
|
210
|
+
|
|
211
|
+
20
|
|
212
|
+
|
|
213
|
+
Shipping
|
|
214
|
+
|
|
215
|
+
Envelope
|
|
216
|
+
|
|
217
|
+
50
|
|
218
|
+
|
|
219
|
+
Shipping
|
|
220
|
+
|
|
221
|
+
Bag
|
|
222
|
+
|
|
223
|
+
30
|
|
224
|
+
|
|
225
|
+
Storage
|
|
226
|
+
|
|
227
|
+
Pallet
|
|
228
|
+
|
|
229
|
+
10
|
|
230
|
+
|
|
231
|
+
Storage
|
|
232
|
+
|
|
233
|
+
Container
|
|
234
|
+
|
|
235
|
+
1
|
|
153
236
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
Storage
|
|
161
|
-
|
|
237
|
+
Storage
|
|
238
|
+
|
|
239
|
+
Crate
|
|
240
|
+
|
|
241
|
+
15
|
|
242
|
+
|
|
243
|
+
Storage
|
|
244
|
+
|
|
245
|
+
Drum
|
|
246
|
+
|
|
247
|
+
12
|
|
162
248
|
|
|
163
249
|
#### React (tsx)
|
|
164
250
|
|
|
165
251
|
```tsx
|
|
166
|
-
import
|
|
252
|
+
import Table, { TableBody, TableColumn, TableHeader, TableHeaderColumn, TableRow } from '@rio-cloud/rio-uikit/Table';
|
|
167
253
|
import useSorting from '@rio-cloud/rio-uikit/useSorting';
|
|
168
254
|
|
|
169
255
|
type Item = {
|
|
@@ -183,42 +269,38 @@ const items: Item[] = [
|
|
|
183
269
|
{ name: 'Bag', category: 'Shipping', quantity: 30 },
|
|
184
270
|
];
|
|
185
271
|
|
|
186
|
-
|
|
187
|
-
const { sortedItems, sortKey, sortDirection, setSortKey, toggleDirection } = useSorting(
|
|
272
|
+
const UseSortingSecondaryExample = () => {
|
|
273
|
+
const { sortedItems, sortKey, sortDirection, setSortKey, setSortDirection, toggleDirection } = useSorting(
|
|
274
|
+
items,
|
|
275
|
+
'category'
|
|
276
|
+
);
|
|
277
|
+
|
|
278
|
+
const handleSortChange = (
|
|
279
|
+
columnKey: string,
|
|
280
|
+
direction: 'asc' | 'desc',
|
|
281
|
+
event: React.MouseEvent<HTMLButtonElement>
|
|
282
|
+
) => {
|
|
283
|
+
const column = columnKey as keyof Item;
|
|
188
284
|
|
|
189
|
-
const handleSortByColumn = (column: keyof Item, event: React.MouseEvent) => {
|
|
190
285
|
if (event.shiftKey) {
|
|
191
|
-
// Secondary sort
|
|
192
286
|
if (Array.isArray(sortKey) && sortKey[1] === column) {
|
|
193
|
-
// If already secondary, toggle direction
|
|
194
287
|
toggleDirection();
|
|
195
288
|
} else if (Array.isArray(sortKey)) {
|
|
196
|
-
// If already using secondary sort, update secondary key
|
|
197
289
|
setSortKey([sortKey[0], column]);
|
|
290
|
+
setSortDirection(direction);
|
|
198
291
|
} else {
|
|
199
|
-
// If not using secondary sort, add secondary key
|
|
200
292
|
setSortKey([sortKey, column]);
|
|
293
|
+
setSortDirection(direction);
|
|
201
294
|
}
|
|
202
|
-
} else {
|
|
203
|
-
// Primary sort
|
|
204
|
-
if (sortKey === column || (Array.isArray(sortKey) && sortKey[0] === column)) {
|
|
205
|
-
// If already primary, toggle direction
|
|
206
|
-
toggleDirection();
|
|
207
|
-
} else {
|
|
208
|
-
// Set new primary key
|
|
209
|
-
setSortKey(column);
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
};
|
|
213
295
|
|
|
214
|
-
|
|
215
|
-
if (sortKey === column || (Array.isArray(sortKey) && sortKey[0] === column)) {
|
|
216
|
-
return <SortArrows direction={sortDirection} />;
|
|
296
|
+
return;
|
|
217
297
|
}
|
|
218
|
-
|
|
219
|
-
|
|
298
|
+
|
|
299
|
+
if (Array.isArray(sortKey) ? sortKey[0] !== column : sortKey !== column) {
|
|
300
|
+
setSortKey(column);
|
|
220
301
|
}
|
|
221
|
-
|
|
302
|
+
|
|
303
|
+
setSortDirection(direction);
|
|
222
304
|
};
|
|
223
305
|
|
|
224
306
|
return (
|
|
@@ -227,129 +309,178 @@ export default () => {
|
|
|
227
309
|
Sort by a primary column. Hold <kbd className='text-normal'>shift</kbd> key to sort by a secondary
|
|
228
310
|
column
|
|
229
311
|
</p>
|
|
230
|
-
<
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
</
|
|
252
|
-
<
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
{renderSortArrows('quantity')}
|
|
258
|
-
<span>Quantity</span>
|
|
259
|
-
</span>
|
|
260
|
-
</th>
|
|
261
|
-
</tr>
|
|
262
|
-
</thead>
|
|
263
|
-
<tbody>
|
|
264
|
-
{sortedItems.map(item => (
|
|
265
|
-
<tr key={item.name}>
|
|
266
|
-
<td>{item.category}</td>
|
|
267
|
-
<td>{item.name}</td>
|
|
268
|
-
<td>{item.quantity}</td>
|
|
269
|
-
</tr>
|
|
270
|
-
))}
|
|
271
|
-
</tbody>
|
|
272
|
-
</table>
|
|
273
|
-
</div>
|
|
312
|
+
<Table
|
|
313
|
+
rowKey='name'
|
|
314
|
+
sortBy={Array.isArray(sortKey) ? sortKey.map(String) : String(sortKey)}
|
|
315
|
+
sortDirection={sortDirection}
|
|
316
|
+
onSortChange={handleSortChange}
|
|
317
|
+
>
|
|
318
|
+
<TableHeader>
|
|
319
|
+
<TableHeaderColumn columnKey='category' sortable>
|
|
320
|
+
Category
|
|
321
|
+
</TableHeaderColumn>
|
|
322
|
+
<TableHeaderColumn columnKey='name' sortable>
|
|
323
|
+
Name
|
|
324
|
+
</TableHeaderColumn>
|
|
325
|
+
<TableHeaderColumn columnKey='quantity' sortable>
|
|
326
|
+
Quantity
|
|
327
|
+
</TableHeaderColumn>
|
|
328
|
+
</TableHeader>
|
|
329
|
+
<TableBody>
|
|
330
|
+
{sortedItems.map(item => (
|
|
331
|
+
<TableRow key={item.name} id={item.name}>
|
|
332
|
+
<TableColumn columnKey='category'>{item.category}</TableColumn>
|
|
333
|
+
<TableColumn columnKey='name'>{item.name}</TableColumn>
|
|
334
|
+
<TableColumn columnKey='quantity'>{item.quantity}</TableColumn>
|
|
335
|
+
</TableRow>
|
|
336
|
+
))}
|
|
337
|
+
</TableBody>
|
|
338
|
+
</Table>
|
|
274
339
|
</>
|
|
275
340
|
);
|
|
276
341
|
};
|
|
342
|
+
|
|
343
|
+
export default UseSortingSecondaryExample;
|
|
277
344
|
```
|
|
278
345
|
|
|
279
346
|
#### HTML (html)
|
|
280
347
|
|
|
281
348
|
```html
|
|
282
349
|
<p>Sort by a primary column. Hold <kbd class="text-normal">shift</kbd> key to sort by a secondary column</p>
|
|
283
|
-
<div class="table-
|
|
284
|
-
<
|
|
285
|
-
<
|
|
286
|
-
<
|
|
287
|
-
<
|
|
288
|
-
<
|
|
289
|
-
<
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
<
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
<
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
<
|
|
345
|
-
</
|
|
346
|
-
<
|
|
347
|
-
<
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
350
|
+
<div class="table table-view-table border table-rounded table-has-head" role="table" style="--table-columns: minmax(50px, 1fr) minmax(50px, 1fr) minmax(50px, 1fr); --table-areas: "table-col-1 table-col-2 table-col-3"; --table-column-count: 3; --table-sticky-reference-top: var(--table-sticky-offset); --table-width: 908px;" aria-colcount="3">
|
|
351
|
+
<div class="table-head" role="rowgroup">
|
|
352
|
+
<div class="table-head-grid" role="row" style="grid-template-rows: repeat(1, auto);">
|
|
353
|
+
<div class="table-head-cell table-head-cell-sortable table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="category" role="columnheader" aria-colindex="1" aria-rowindex="1" aria-sort="ascending" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
354
|
+
<div class="table-head-cell-content">
|
|
355
|
+
<div class="table-head-cell-content-row">
|
|
356
|
+
<button type="button" class="table-head-button">
|
|
357
|
+
<span class="table-head-button-label">
|
|
358
|
+
<span class="sort-arrows sort-asc">
|
|
359
|
+
</span>
|
|
360
|
+
<span class="table-head-label">Category</span>
|
|
361
|
+
</span>
|
|
362
|
+
</button>
|
|
363
|
+
</div>
|
|
364
|
+
</div>
|
|
365
|
+
</div>
|
|
366
|
+
<div class="table-head-cell table-head-cell-sortable table-head-cell-has-column-divider table-align-left table-vertical-align-middle" data-column="name" role="columnheader" aria-colindex="2" aria-rowindex="1" aria-sort="none" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
367
|
+
<div class="table-head-cell-content">
|
|
368
|
+
<div class="table-head-cell-content-row">
|
|
369
|
+
<button type="button" class="table-head-button">
|
|
370
|
+
<span class="table-head-button-label">
|
|
371
|
+
<span class="sort-arrows ">
|
|
372
|
+
</span>
|
|
373
|
+
<span class="table-head-label">Name</span>
|
|
374
|
+
</span>
|
|
375
|
+
</button>
|
|
376
|
+
</div>
|
|
377
|
+
</div>
|
|
378
|
+
</div>
|
|
379
|
+
<div class="table-head-cell table-head-cell-sortable table-align-left table-vertical-align-middle" data-column="quantity" role="columnheader" aria-colindex="3" aria-rowindex="1" aria-sort="none" style="grid-area: 1 / 3 / span 1 / span 1;">
|
|
380
|
+
<div class="table-head-cell-content">
|
|
381
|
+
<div class="table-head-cell-content-row">
|
|
382
|
+
<button type="button" class="table-head-button">
|
|
383
|
+
<span class="table-head-button-label">
|
|
384
|
+
<span class="sort-arrows ">
|
|
385
|
+
</span>
|
|
386
|
+
<span class="table-head-label">Quantity</span>
|
|
387
|
+
</span>
|
|
388
|
+
</button>
|
|
389
|
+
</div>
|
|
390
|
+
</div>
|
|
391
|
+
</div>
|
|
392
|
+
</div>
|
|
393
|
+
</div>
|
|
394
|
+
<div class="table-body" role="rowgroup">
|
|
395
|
+
<div id="Parcel" class="table-row" data-index="0" data-row-id="0" role="row">
|
|
396
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="category" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
397
|
+
<div class="table-cell-content overflow-hidden">Shipping</div>
|
|
398
|
+
</div>
|
|
399
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="name" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
400
|
+
<div class="table-cell-content overflow-hidden">Parcel</div>
|
|
401
|
+
</div>
|
|
402
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="quantity" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
|
|
403
|
+
<div class="table-cell-content overflow-hidden">8</div>
|
|
404
|
+
</div>
|
|
405
|
+
</div>
|
|
406
|
+
<div id="Box" class="table-row" data-index="1" data-row-id="1" role="row">
|
|
407
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="category" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
408
|
+
<div class="table-cell-content overflow-hidden">Shipping</div>
|
|
409
|
+
</div>
|
|
410
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="name" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
411
|
+
<div class="table-cell-content overflow-hidden">Box</div>
|
|
412
|
+
</div>
|
|
413
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="quantity" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
|
|
414
|
+
<div class="table-cell-content overflow-hidden">20</div>
|
|
415
|
+
</div>
|
|
416
|
+
</div>
|
|
417
|
+
<div id="Envelope" class="table-row" data-index="2" data-row-id="2" role="row">
|
|
418
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="category" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
419
|
+
<div class="table-cell-content overflow-hidden">Shipping</div>
|
|
420
|
+
</div>
|
|
421
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="name" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
422
|
+
<div class="table-cell-content overflow-hidden">Envelope</div>
|
|
423
|
+
</div>
|
|
424
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="quantity" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
|
|
425
|
+
<div class="table-cell-content overflow-hidden">50</div>
|
|
426
|
+
</div>
|
|
427
|
+
</div>
|
|
428
|
+
<div id="Bag" class="table-row" data-index="3" data-row-id="3" role="row">
|
|
429
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="category" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
430
|
+
<div class="table-cell-content overflow-hidden">Shipping</div>
|
|
431
|
+
</div>
|
|
432
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="name" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
433
|
+
<div class="table-cell-content overflow-hidden">Bag</div>
|
|
434
|
+
</div>
|
|
435
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="quantity" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
|
|
436
|
+
<div class="table-cell-content overflow-hidden">30</div>
|
|
437
|
+
</div>
|
|
438
|
+
</div>
|
|
439
|
+
<div id="Pallet" class="table-row" data-index="4" data-row-id="4" role="row">
|
|
440
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="category" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
441
|
+
<div class="table-cell-content overflow-hidden">Storage</div>
|
|
442
|
+
</div>
|
|
443
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="name" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
444
|
+
<div class="table-cell-content overflow-hidden">Pallet</div>
|
|
445
|
+
</div>
|
|
446
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="quantity" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
|
|
447
|
+
<div class="table-cell-content overflow-hidden">10</div>
|
|
448
|
+
</div>
|
|
449
|
+
</div>
|
|
450
|
+
<div id="Container" class="table-row" data-index="5" data-row-id="5" role="row">
|
|
451
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="category" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
452
|
+
<div class="table-cell-content overflow-hidden">Storage</div>
|
|
453
|
+
</div>
|
|
454
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="name" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
455
|
+
<div class="table-cell-content overflow-hidden">Container</div>
|
|
456
|
+
</div>
|
|
457
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="quantity" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
|
|
458
|
+
<div class="table-cell-content overflow-hidden">1</div>
|
|
459
|
+
</div>
|
|
460
|
+
</div>
|
|
461
|
+
<div id="Crate" class="table-row" data-index="6" data-row-id="6" role="row">
|
|
462
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="category" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
463
|
+
<div class="table-cell-content overflow-hidden">Storage</div>
|
|
464
|
+
</div>
|
|
465
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="name" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
466
|
+
<div class="table-cell-content overflow-hidden">Crate</div>
|
|
467
|
+
</div>
|
|
468
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="quantity" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
|
|
469
|
+
<div class="table-cell-content overflow-hidden">15</div>
|
|
470
|
+
</div>
|
|
471
|
+
</div>
|
|
472
|
+
<div id="Drum" class="table-row" data-index="7" data-row-id="7" role="row">
|
|
473
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="category" role="cell" aria-colindex="1" style="grid-area: 1 / 1 / span 1 / span 1;">
|
|
474
|
+
<div class="table-cell-content overflow-hidden">Storage</div>
|
|
475
|
+
</div>
|
|
476
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="name" role="cell" aria-colindex="2" style="grid-area: 1 / 2 / span 1 / span 1;">
|
|
477
|
+
<div class="table-cell-content overflow-hidden">Drum</div>
|
|
478
|
+
</div>
|
|
479
|
+
<div class="table-cell table-align-left table-vertical-align-middle" data-column="quantity" role="cell" aria-colindex="3" style="grid-area: 1 / 3 / span 1 / span 1;">
|
|
480
|
+
<div class="table-cell-content overflow-hidden">12</div>
|
|
481
|
+
</div>
|
|
482
|
+
</div>
|
|
483
|
+
</div>
|
|
353
484
|
</div>
|
|
354
485
|
```
|
|
355
486
|
|