Search code examples
javascriptreactjssortingag-gridag-grid-react

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",


Solution

  • 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'}
    />