I'm trying to get sort model from ag-grid-react ponent using getSortModel() but I'm getting getSortModel is not a function
my code
onSortChanged={useCallback(e => console.log(e.api.getSortModel(), 'im from sort'))}
"@ag-grid-munity/react": "27.3.0", "@ag-grid-enterprise/all-modules": "27.3.0",
I'm trying to get sort model from ag-grid-react ponent using getSortModel() but I'm getting getSortModel is not a function
my code
onSortChanged={useCallback(e => console.log(e.api.getSortModel(), 'im from sort'))}
"@ag-grid-munity/react": "27.3.0", "@ag-grid-enterprise/all-modules": "27.3.0",
Share Improve this question edited Jun 16, 2022 at 2:39 KARTHIKEYAN.A asked Jun 16, 2022 at 2:30 KARTHIKEYAN.AKARTHIKEYAN.A 20.1k10 gold badges136 silver badges149 bronze badges 1- check this answer – Usama Commented Jun 16, 2022 at 13:10
3 Answers
Reset to default 10After spend some time found params.api.getSortModel()
is deprecated after version 24.0.0.
Using Column state for get Sort model and set Sort model in the following way
getSortModel:
const onSortChanged = useCallback(() => {
const value = gridParams.columnApi.getColumnState().find(s => s.sort != null)
if (value) {
setSortModel([ value ])
} else {
setSortModel([])
}
}, [ gridParams, setSortModel ])
setSortModel:
useEffect(() => {
if (sortModel.length > 0) {
const curretSortModel = gridParams.columnApi.getColumnState()
const mergeSortModel = curretSortModel.map(o1 => sortModel.find(o2 => o2.colId === o1.colId) || o1)
gridParams.columnApi.setColumnState(mergeSortModel)
}
}, [gridParams, sortModel]
we are setting gridParems using onGridReady() method
const [ gridParams, setGridParams ] = useState()
const onGridReady = useCallback(params => {
setGridParams(params)
}, [])
<Grid
onGridReady={onGridReady} // using this we are setting gridParams
rowData={dataset}
floatingFilter
sideBar={GRID_SIDE_BAR}
onSelectionChanged={getSelectedRowData}
enableSelect={true}
onFilterChanged={onFilterChanged}
onSortChanged={onSortChanged}
rowSelection={'multiple'}
licenseKey={'test'}
getRowId={getRowNodeId}
onColumnVisible={onColumnVisible}
onColumnResized={onColumnResized}
onColumnMoved={onColumnMoved}
columnDefs={mappedColDefs}
defaultColDef={defaultColDef}
cacheQuickFilter={true}
frameworkComponents={{
customLoadingOverlay: () => <Paper><Typography>Please wait while your requests are loading...</Typography></Paper>,
customNoRowsOverlay: () => <Paper><Typography>No requests found</Typography></Paper>
}}
loadingOverlayComponent={'customLoadingOverlay'}
noRowsOverlayComponent={'customNoRowsOverlay'}
/>
As per this plunkr, you can retrieve and apply sort with the following example: https://plnkr.co/edit/?open=index.jsx&preview
const sortByAthleteDesc = useCallback(() => {
gridRef.current.columnApi.applyColumnState({
state: [{ colId: 'athlete', sort: 'desc' }],
defaultState: { sort: null },
});
}, []);
const saveSort = useCallback(() => {
var colState = gridRef.current.columnApi.getColumnState();
var sortState = colState
.filter(function (s) {
return s.sort != null;
})
.map(function (s) {
return { colId: s.colId, sort: s.sort, sortIndex: s.sortIndex };
});
savedSort = sortState;
console.log('saved sort', sortState);
}, []);
For Vue JS :
const onSortChanged = () => {
window.colState = gridApi.value.getColumnState();
let newSortedState = window.colState
.filter(function (s) {
return s.sort != null;
})
.map(function (s) {
return { colId: s.colId, sort: s.sort, sortIndex: s.sortIndex };
});
console.log('column state saved', newSortedState);
};
Template:
<ag-grid-vue
:gridOptions="gridOptions"
:columnDefs="props?.columns"
:icons="icons"
:rowHeight="props?.rowHeight"
style="height: 500px"
:enableRangeSelection="false"
:rowSelection="'multiple'"
:rowMultiSelectWithClick="false"
class="ag-theme-quartz"
:paginationPageSizeSelector="[3, 5, 10, 15, 25, 50]"
:sideBar="sideBar"
@grid-ready="handleGridReady"
@selection-changed="handleSelectionChange"
:defaultColDef="props?.defaultColDef"
@sortChanged="onSortChanged"
:rowModelType="rowModelType"
:pagination="true"
:paginationPageSize="paginationPageSize"
@filter-changed="onFilterChanged"
/>