It is also possible to use different renderers for different rows in the same column. To configure this set
cellRendererSelector to a function that returns alternative values for cellRenderer and cellRendererParams.
In this example, we define the two components in dashAgGridComponentFunctions.js in the assets folder
This will register the components and make them available to use in the grid.
var dagcomponentfuncs = (window.dashAgGridComponentFunctions = window.dashAgGridComponentFunctions || {}); dagcomponentfuncs.MoodRenderer = function (props) { const imgForMood = 'https://www.ag-grid.com/example-assets/smileys/' + (props.value === 'Happy' ? 'happy.png' : 'sad.png') return React.createElement( 'img', {src: imgForMood, width: "20px"}, ); } dagcomponentfuncs.GenderRenderer = function (props) { const image = this.props.value === 'Male' ? 'male.png' : 'female.png'; const imageSource = `https://www.ag-grid.com/example-assets/genders/${image}`; return React.createElement( 'img', {src: imageSource, width: "20px"}, ); } Then we define the function to use with the cellRendererSelector in the dashAgGridFunctions.js folder.
var dagfuncs = window.dashAgGridFunctions = window.dashAgGridFunctions || {}; dagfuncs.moodOrGender = function (params) { var dagcomponentfuncs = window.dashAgGridComponentFunctions const moodDetails = { component: dagcomponentfuncs.MoodRenderer, }; const genderDetails = { component: dagcomponentfuncs.GenderRenderer, params: { values: ['Male', 'Female'] }, }; if (params.data) { if (params.data.type === 'gender') return genderDetails; else if (params.data.type === 'mood') return moodDetails; } return undefined; } from dash import Dash, dcc, html import dash_ag_grid as dag app = Dash() rowData=[ { 'value': 14, 'type': 'age' }, { 'value': 'Female', 'type': 'gender' }, { 'value': 'Happy', 'type': 'mood' }, { 'value': 21, 'type': 'age' }, { 'value': 'Male', 'type': 'gender' }, { 'value': 'Sad', 'type': 'mood' }, ] columnDefs= [ { 'field': 'value' }, { 'headerName': 'Rendered Value', 'field': 'value', 'cellRendererSelector': {'function': 'moodOrGender(params)'} }, { 'field': 'type' }, ] defaultColDef={'flex': 1} grid = dag.AgGrid( id="many-components-example", rowData=rowData, columnDefs=columnDefs, defaultColDef=defaultColDef, columnSize="sizeToFit", ) app.layout = html.Div( [ dcc.Markdown("This grid demonstrates one column with different renderer components in different rows."), grid ], style={"margin": 20}, ) if __name__ == "__main__": app.run(debug=True) """ ---------------------- // Place the following in the dashAgGridComponents.js file in the assets folder dagcomponentfuncs.MoodRenderer = function (props) { const imgForMood = 'https://www.ag-grid.com/example-assets/smileys/' + (props.value === 'Happy' ? 'happy.png' : 'sad.png') return React.createElement( 'img', {src: imgForMood, width: "20px"}, ); } dagcomponentfuncs.GenderRenderer = function (props) { const image = this.props.value === 'Male' ? 'male.png' : 'female.png'; const imageSource = `https://www.ag-grid.com/example-assets/genders/${image}`; return React.createElement( 'img', {src: imageSource, width: "20px"}, ); } ----------------------------------------- // Place the following in the dashAgGridFunctions.js file in the assets folder var dagfuncs = window.dashAgGridFunctions = window.dashAgGridFunctions || {}; dagfuncs.moodOrGender = function (params) { var dagcomponentfuncs = window.dashAgGridComponentFunctions const moodDetails = { component: dagcomponentfuncs.MoodRenderer, }; const genderDetails = { component: dagcomponentfuncs.GenderRenderer, params: { values: ['Male', 'Female'] }, }; if (params.data) { if (params.data.type === 'gender') return genderDetails; else if (params.data.type === 'mood') return moodDetails; } return undefined; } """ This grid demonstrates one column with different renderer components in different rows.