Trigger onPageSizeChange action when table page size changes (#2737)
This commit is contained in:
parent
c9b3059498
commit
e34a98833c
|
|
@ -18,6 +18,7 @@ export enum EventType {
|
|||
ON_PAGE_LOAD = "ON_PAGE_LOAD",
|
||||
ON_PREV_PAGE = "ON_PREV_PAGE",
|
||||
ON_NEXT_PAGE = "ON_NEXT_PAGE",
|
||||
ON_PAGE_SIZE_CHANGE = "ON_PAGE_SIZE_CHANGE",
|
||||
ON_ERROR = "ON_ERROR",
|
||||
ON_SUCCESS = "ON_SUCCESS",
|
||||
ON_ROW_SELECTED = "ON_ROW_SELECTED",
|
||||
|
|
|
|||
|
|
@ -281,6 +281,14 @@ const PropertyPaneConfigResponse: PropertyPaneConfigsResponse["data"] = {
|
|||
},
|
||||
{
|
||||
id: "7.2.4",
|
||||
helpText: "Triggers an action when a table page size is changed",
|
||||
propertyName: "onPageSizeChange",
|
||||
label: "onPageSizeChange",
|
||||
controlType: "ACTION_SELECTOR",
|
||||
isJSConvertible: true,
|
||||
},
|
||||
{
|
||||
id: "7.2.5",
|
||||
propertyName: "onSearchTextChanged",
|
||||
label: "onSearchTextChanged",
|
||||
controlType: "ACTION_SELECTOR",
|
||||
|
|
|
|||
|
|
@ -90,13 +90,13 @@ class TableWidget extends BaseWidget<TableWidgetProps, WidgetState> {
|
|||
searchText: VALIDATION_TYPES.TEXT,
|
||||
defaultSearchText: VALIDATION_TYPES.TEXT,
|
||||
defaultSelectedRow: VALIDATION_TYPES.DEFAULT_SELECTED_ROW,
|
||||
pageSize: VALIDATION_TYPES.NUMBER,
|
||||
};
|
||||
}
|
||||
|
||||
static getMetaPropertiesMap(): Record<string, any> {
|
||||
return {
|
||||
pageNo: 1,
|
||||
pageSize: undefined,
|
||||
selectedRowIndex: undefined,
|
||||
selectedRowIndices: undefined,
|
||||
searchText: undefined,
|
||||
|
|
@ -120,12 +120,50 @@ class TableWidget extends BaseWidget<TableWidgetProps, WidgetState> {
|
|||
onRowSelected: true,
|
||||
onPageChange: true,
|
||||
onSearchTextChanged: true,
|
||||
onPageSizeChange: true,
|
||||
columnActions: true,
|
||||
};
|
||||
}
|
||||
|
||||
static getDerivedPropertiesMap() {
|
||||
return {
|
||||
pageSize: `{{function() {
|
||||
const TABLE_SIZES = {
|
||||
${CompactModeTypes.DEFAULT}: {
|
||||
COLUMN_HEADER_HEIGHT: 38,
|
||||
TABLE_HEADER_HEIGHT: 42,
|
||||
ROW_HEIGHT: 40,
|
||||
ROW_FONT_SIZE: 14,
|
||||
},
|
||||
${CompactModeTypes.SHORT}: {
|
||||
COLUMN_HEADER_HEIGHT: 38,
|
||||
TABLE_HEADER_HEIGHT: 42,
|
||||
ROW_HEIGHT: 20,
|
||||
ROW_FONT_SIZE: 12,
|
||||
},
|
||||
${CompactModeTypes.TALL}: {
|
||||
COLUMN_HEADER_HEIGHT: 38,
|
||||
TABLE_HEADER_HEIGHT: 42,
|
||||
ROW_HEIGHT: 60,
|
||||
ROW_FONT_SIZE: 18,
|
||||
},
|
||||
};
|
||||
const compactMode = this.compactMode || "${CompactModeTypes.DEFAULT}";
|
||||
const componentHeight = (this.bottomRow - this.topRow) * this.parentRowSpace;
|
||||
const tableSizes = TABLE_SIZES[compactMode];
|
||||
let pageSize= Math.floor((componentHeight - tableSizes.TABLE_HEADER_HEIGHT - tableSizes.COLUMN_HEADER_HEIGHT) / tableSizes.ROW_HEIGHT);
|
||||
if (
|
||||
componentHeight -
|
||||
(tableSizes.TABLE_HEADER_HEIGHT +
|
||||
tableSizes.COLUMN_HEADER_HEIGHT +
|
||||
tableSizes.ROW_HEIGHT * pageSize) >
|
||||
0
|
||||
) {
|
||||
pageSize += 1;
|
||||
}
|
||||
return pageSize;
|
||||
}()
|
||||
}}`,
|
||||
triggerRowSelection: "{{!!this.onRowSelected}}",
|
||||
};
|
||||
}
|
||||
|
|
@ -505,6 +543,14 @@ class TableWidget extends BaseWidget<TableWidgetProps, WidgetState> {
|
|||
);
|
||||
}
|
||||
}
|
||||
if (this.props.pageSize !== prevProps.pageSize) {
|
||||
super.executeAction({
|
||||
dynamicString: this.props.onPageSizeChange,
|
||||
event: {
|
||||
type: EventType.ON_PAGE_SIZE_CHANGE,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
getSelectedRowIndexes = (selectedRowIndices: string) => {
|
||||
|
|
@ -514,7 +560,12 @@ class TableWidget extends BaseWidget<TableWidgetProps, WidgetState> {
|
|||
};
|
||||
|
||||
getPageView() {
|
||||
const { tableData, hiddenColumns, filteredTableData } = this.props;
|
||||
const {
|
||||
tableData,
|
||||
hiddenColumns,
|
||||
filteredTableData,
|
||||
pageSize,
|
||||
} = this.props;
|
||||
const computedSelectedRowIndices = Array.isArray(
|
||||
this.props.selectedRowIndices,
|
||||
)
|
||||
|
|
@ -536,28 +587,6 @@ class TableWidget extends BaseWidget<TableWidgetProps, WidgetState> {
|
|||
this.props.updateWidgetMetaProperty("pageNo", pageNo);
|
||||
}
|
||||
const { componentWidth, componentHeight } = this.getComponentDimensions();
|
||||
const tableSizes =
|
||||
TABLE_SIZES[this.props.compactMode || CompactModeTypes.DEFAULT];
|
||||
let pageSize = Math.floor(
|
||||
(componentHeight -
|
||||
tableSizes.TABLE_HEADER_HEIGHT -
|
||||
tableSizes.COLUMN_HEADER_HEIGHT) /
|
||||
tableSizes.ROW_HEIGHT,
|
||||
);
|
||||
|
||||
if (
|
||||
componentHeight -
|
||||
(tableSizes.TABLE_HEADER_HEIGHT +
|
||||
tableSizes.COLUMN_HEADER_HEIGHT +
|
||||
tableSizes.ROW_HEIGHT * pageSize) >
|
||||
0
|
||||
)
|
||||
pageSize += 1;
|
||||
|
||||
if (pageSize !== this.props.pageSize) {
|
||||
this.props.updateWidgetMetaProperty("pageSize", pageSize);
|
||||
}
|
||||
|
||||
return (
|
||||
<Suspense fallback={<Skeleton />}>
|
||||
<ReactTableComponent
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user