Skip to content

Commit eccd085

Browse files
authored
[WC-1767] Support Selection helper in DG2 (#498)
2 parents 0c06a90 + 6fcf035 commit eccd085

File tree

18 files changed

+86
-50
lines changed

18 files changed

+86
-50
lines changed

packages/modules/data-widgets/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "data-widgets",
33
"moduleName": "Data Widgets",
4-
"version": "2.7.1",
4+
"version": "2.7.2",
55
"license": "Apache-2.0",
66
"copyright": "© Mendix Technology BV 2023. All rights reserved.",
77
"private": true,

packages/pluggableWidgets/datagrid-web/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66

77
## [Unreleased]
88

9+
### Added
10+
11+
- It is now possible to add Selection helper widget into the header section of Data Grid 2.
12+
913
## [2.7.0] - 2023-03-29
1014

1115
### Added

packages/pluggableWidgets/datagrid-web/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "datagrid-web",
33
"widgetName": "Datagrid",
4-
"version": "2.7.0",
4+
"version": "2.7.1",
55
"description": "",
66
"copyright": "© Mendix Technology BV 2023. All rights reserved.",
77
"private": true,

packages/pluggableWidgets/datagrid-web/src/Datagrid.editorConfig.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -210,7 +210,7 @@ export const getPreview = (
210210
)
211211
)
212212
);
213-
const titleHeader = rowLayout({
213+
const gridTitle = rowLayout({
214214
columnSize: "fixed",
215215
backgroundColor: modeColor("#3B5C8F", "#DAEFFB"),
216216
borders: true,
@@ -220,7 +220,7 @@ export const getPreview = (
220220
padding: 4
221221
})(text({ fontColor: modeColor("#6DB1FE", "#2074C8") })("Data grid 2"))
222222
);
223-
const headerFilters = rowLayout({
223+
const gridHeaderWidgets = rowLayout({
224224
columnSize: "fixed",
225225
borders: true
226226
})(
@@ -230,7 +230,7 @@ export const getPreview = (
230230
)(values.filtersPlaceholder)
231231
);
232232

233-
const headers = rowLayout({
233+
const columnHeaders = rowLayout({
234234
columnSize: "fixed"
235235
})(
236236
...columnProps.map(column => {
@@ -274,7 +274,7 @@ export const getPreview = (
274274
: content;
275275
})
276276
);
277-
const footer =
277+
const customEmptyMessageWidgets =
278278
values.showEmptyPlaceholder === "custom"
279279
? [
280280
rowLayout({
@@ -290,12 +290,12 @@ export const getPreview = (
290290
: [];
291291

292292
return container()(
293-
titleHeader,
293+
gridTitle,
294294
...(canHideDataSourceHeader ? [datasource(values.datasource)()] : []),
295-
headerFilters,
296-
headers,
295+
gridHeaderWidgets,
296+
columnHeaders,
297297
...Array.from({ length: 5 }).map(() => columns),
298-
...footer
298+
...customEmptyMessageWidgets
299299
);
300300
};
301301

packages/pluggableWidgets/datagrid-web/src/Datagrid.editorPreview.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ export function preview(props: DatagridPreviewProps): ReactElement {
121121
[columns]
122122
)}
123123
hasMoreItems={false}
124-
headerFilters={
124+
gridHeaderWidgets={
125125
<props.filtersPlaceholder.renderer caption="Place widgets like filter widget(s) and action button(s) here">
126126
<div />
127127
</props.filtersPlaceholder.renderer>

packages/pluggableWidgets/datagrid-web/src/Datagrid.tsx

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ import {
1010
useFilterContext,
1111
useMultipleFiltering
1212
} from "@mendix/pluggable-widgets-commons/components/web";
13-
import { isAvailable, useSelectionHelper } from "@mendix/pluggable-widgets-commons";
13+
import {
14+
getGlobalSelectionContext,
15+
isAvailable,
16+
useCreateSelectionContextValue,
17+
useSelectionHelper
18+
} from "@mendix/pluggable-widgets-commons";
1419
import { extractFilters } from "./features/filters";
1520
import { useCellRenderer } from "./features/cell";
1621
import { getColumnAssociationProps, isSortable } from "./features/column";
@@ -29,6 +34,7 @@ export default function Datagrid(props: DatagridContainerProps): ReactElement {
2934
const [filtered, setFiltered] = useState(false);
3035
const multipleFilteringState = useMultipleFiltering();
3136
const { FilterContext } = useFilterContext();
37+
const SelectionContext = getGlobalSelectionContext();
3238
const cellRenderer = useCellRenderer({ columns: props.columns, onClick: props.onClick });
3339

3440
useEffect(() => {
@@ -120,6 +126,8 @@ export default function Datagrid(props: DatagridContainerProps): ReactElement {
120126
const selectActionProps = useOnSelectProps(selection);
121127
const { selectionStatus, selectionMethod } = selectionSettings(props, selection);
122128

129+
const selectionContextValue = useCreateSelectionContextValue(selection);
130+
123131
return (
124132
<Table
125133
selectionStatus={selectionStatus}
@@ -169,10 +177,9 @@ export default function Datagrid(props: DatagridContainerProps): ReactElement {
169177
},
170178
[FilterContext, customFiltersState, props.columns]
171179
)}
172-
filtersTitle={props.filterSectionTitle?.value}
173180
hasMoreItems={props.datasource.hasMoreItems ?? false}
174181
headerWrapperRenderer={useCallback((_columnIndex: number, header: ReactElement) => header, [])}
175-
headerFilters={useMemo(
182+
gridHeaderWidgets={useMemo(
176183
() => (
177184
<FilterContext.Provider
178185
value={{
@@ -188,11 +195,14 @@ export default function Datagrid(props: DatagridContainerProps): ReactElement {
188195
multipleInitialFilters
189196
}}
190197
>
191-
{props.filtersPlaceholder}
198+
<SelectionContext.Provider value={selectionContextValue}>
199+
{props.filtersPlaceholder}
200+
</SelectionContext.Provider>
192201
</FilterContext.Provider>
193202
),
194203
[FilterContext, filterList, multipleInitialFilters, props.filtersPlaceholder, multipleFilteringState]
195204
)}
205+
gridHeaderTitle={props.filterSectionTitle?.value}
196206
id={id.current}
197207
numberOfItems={props.datasource.totalCount}
198208
page={currentPage}

packages/pluggableWidgets/datagrid-web/src/components/Table.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,9 @@ export interface TableProps<T extends ObjectItem> {
5252
data: T[];
5353
emptyPlaceholderRenderer?: (renderWrapper: (children: ReactNode) => ReactElement) => ReactElement;
5454
filterRenderer: (renderWrapper: (children: ReactNode) => ReactElement, columnIndex: number) => ReactElement;
55-
filtersTitle?: string;
55+
gridHeaderWidgets?: ReactNode;
56+
gridHeaderTitle?: string;
5657
hasMoreItems: boolean;
57-
headerFilters?: ReactNode;
5858
headerWrapperRenderer: (columnIndex: number, header: ReactElement) => ReactElement;
5959
id?: string;
6060
numberOfItems?: number;
@@ -107,9 +107,9 @@ export function Table<T extends ObjectItem>(props: TableProps<T>): ReactElement
107107
data,
108108
emptyPlaceholderRenderer,
109109
filterRenderer: filterRendererProp,
110-
filtersTitle,
110+
gridHeaderWidgets,
111+
gridHeaderTitle,
111112
hasMoreItems,
112-
headerFilters,
113113
headerWrapperRenderer,
114114
id,
115115
numberOfItems,
@@ -279,9 +279,9 @@ export function Table<T extends ObjectItem>(props: TableProps<T>): ReactElement
279279
<div className="table-header" role="rowgroup">
280280
{(pagingPosition === "top" || pagingPosition === "both") && pagination}
281281
</div>
282-
{headerFilters && (
283-
<div className="header-filters" role="rowgroup" aria-label={filtersTitle}>
284-
{headerFilters}
282+
{gridHeaderWidgets && (
283+
<div className="header-filters" role="rowgroup" aria-label={gridHeaderTitle}>
284+
{gridHeaderWidgets}
285285
</div>
286286
)}
287287
<InfiniteBody

packages/pluggableWidgets/datagrid-web/src/components/__tests__/Table.spec.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,12 +159,12 @@ describe("Table", () => {
159159
const component = render(
160160
<Table
161161
{...mockTableProps()}
162-
headerFilters={
162+
gridHeaderWidgets={
163163
<div className="my-custom-filters">
164164
<span />
165165
</div>
166166
}
167-
filtersTitle="filter title"
167+
gridHeaderTitle="filter title"
168168
/>
169169
);
170170

packages/pluggableWidgets/datagrid-web/src/package.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="utf-8" ?>
22
<package xmlns="http://www.mendix.com/package/1.0/">
3-
<clientModule name="Datagrid" version="2.7.0" xmlns="http://www.mendix.com/clientModule/1.0/">
3+
<clientModule name="Datagrid" version="2.7.1" xmlns="http://www.mendix.com/clientModule/1.0/">
44
<widgetFiles>
55
<widgetFile path="Datagrid.xml" />
66
</widgetFiles>

packages/pluggableWidgets/gallery-web/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66

77
## [Unreleased]
88

9+
### Changed
10+
11+
- Minor changes in the internal structure of the widget.
12+
913
## [1.3.0] - 2023-03-29
1014

1115
### Added

0 commit comments

Comments
 (0)