Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

ag-grid-react: getSortModel is not a function

I'm trying to get sort model from ag-grid-react component 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-community/react": "27.3.0", "@ag-grid-enterprise/all-modules": "27.3.0",

like image 803
KARTHIKEYAN.A Avatar asked Jun 15 '26 22:06

KARTHIKEYAN.A


2 Answers

After 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'}
/>
like image 192
KARTHIKEYAN.A Avatar answered Jun 18 '26 10:06

KARTHIKEYAN.A


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);
  }, []);
like image 32
Alex Hladun Avatar answered Jun 18 '26 12:06

Alex Hladun



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!