Sorting does not work on groups in AGgrid

Hello everyone!

I have a problem - I need the sorting in columns to work on groups. It doesn’t matter how - I’ll figure out the principle myself, but the sorting should move the groups as needed. For example - by maximum/minimum values in the group. But the sorting only works within its own group. What should I do or what will the comparator look like for this? I’m reading the doc and can’t find a solution

import dash_ag_grid as dag
from dash import Dash, html
import pandas as pd

app = Dash(__name__)

data = [
    {
        "building": "Main Base",
        "unit": "Builder",
        "regeneration_speed": 2.5,
        "regeneration_value": 10,
        "regeneration_per_second": 4,
        "hp": 500,
        "magic_defense": 15,
        "physical_defense": 20,
        "heal_value": 0,
        "melee_damage_value": 5,
        "ranged_damage_value": 0,
        "damage_type": "physical",
    },
    {
        "building": "Main Base",
        "unit": "Engineer",
        "regeneration_speed": 1.8,
        "regeneration_value": 15,
        "regeneration_per_second": 8.33,
        "hp": 400,
        "magic_defense": 25,
        "physical_defense": 15,
        "heal_value": 10,
        "melee_damage_value": 8,
        "ranged_damage_value": 0,
        "damage_type": "hybrid",
    },
    {
        "building": "Barracks",
        "unit": "Soldier",
        "regeneration_speed": 1.8,
        "regeneration_value": 8,
        "regeneration_per_second": 4.44,
        "hp": 650,
        "magic_defense": 10,
        "physical_defense": 25,
        "heal_value": 0,
        "melee_damage_value": 15,
        "ranged_damage_value": 12,
        "damage_type": "physical",
    },
    {
        "building": "Barracks",
        "unit": "Archer",
        "regeneration_speed": 2.0,
        "regeneration_value": 5,
        "regeneration_per_second": 2.5,
        "hp": 450,
        "magic_defense": 15,
        "physical_defense": 15,
        "heal_value": 0,
        "melee_damage_value": 3,
        "ranged_damage_value": 20,
        "damage_type": "physical",
    },
    {
        "building": "Barracks",
        "unit": "Medic",
        "regeneration_speed": 3.0,
        "regeneration_value": 12,
        "regeneration_per_second": 4,
        "hp": 350,
        "magic_defense": 20,
        "physical_defense": 10,
        "heal_value": 25,
        "melee_damage_value": 2,
        "ranged_damage_value": 0,
        "damage_type": "magical",
    },
    {
        "building": "Magic Tower",
        "unit": "Mage",
        "regeneration_speed": 2.2,
        "regeneration_value": 20,
        "regeneration_per_second": 9.09,
        "hp": 300,
        "magic_defense": 30,
        "physical_defense": 5,
        "heal_value": 15,
        "melee_damage_value": 3,
        "ranged_damage_value": 25,
        "damage_type": "magical",
    },
    {
        "building": "Magic Tower",
        "unit": "Elementalist",
        "regeneration_speed": 1.5,
        "regeneration_value": 18,
        "regeneration_per_second": 12,
        "hp": 400,
        "magic_defense": 25,
        "physical_defense": 10,
        "heal_value": 5,
        "melee_damage_value": 10,
        "ranged_damage_value": 18,
        "damage_type": "hybrid",
    }
]

df = pd.DataFrame(data)

columnDefs = [
    {
        "field": "building",
        "rowGroup": True,
        "hide": True,
        "sortable": True,
        "cellRenderer": "agGroupCellRenderer",
    },
    {
        "headerName": "Building/Unit",
        "field": "unit",
        "cellRenderer": "agGroupCellRenderer",
        "sortable": False,
    },
    {
        "headerName": "Durability",
        "marryChildren": False,
        "children": [
            {
                "headerName": "Regeneration",
                "marryChildren": False,
                "children": [
                    {"headerName": "Speed", "field": "regeneration_speed", "sortable": True},
                    {"headerName": "Value", "field": "regeneration_value", "sortable": True},
                    {"headerName": "Value/sec", "field": "regeneration_per_second", "sortable": True},
                ],
            },
            {
                "headerName": "Resilience",
                "marryChildren": False,
                "children": [
                    {"headerName": "HP", "field": "hp", "sortable": True},
                    {"headerName": "Magic Defense", "field": "magic_defense", "sortable": True},
                    {"headerName": "Physical Defense", "field": "physical_defense", "sortable": True},
                ],
            },
        ],
    },
    {
        "headerName": "Damage",
        "marryChildren": False,
        "children": [
            {
                "headerName": "Heal",
                "marryChildren": False,
                "children": [
                    {"headerName": "Value", "field": "heal_value", "sortable": True},
                ],
            },
            {
                "headerName": "Melee",
                "marryChildren": False,
                "children": [
                    {"headerName": "Value", "field": "melee_damage_value", "sortable": True},
                ],
            },
            {
                "headerName": "Ranged",
                "marryChildren": False,
                "children": [
                    {"headerName": "Value", "field": "ranged_damage_value", "sortable": True},
                ],
            },
            {
                "headerName": "Damage Type",
                "marryChildren": False,
                "children": [
                    {"headerName": "Type", "field": "damage_type", "sortable": True},
                ],
            },
        ],
    },
]

defaultColDef = {
    "resizable": True,
    "sortable": True,
    "filter": True,
    "flex": 1,
}

dashGridOptions = {
    "groupDefaultExpanded": 1,
    "animateRows": True,

    "groupMaintainOrder": False,
    "sortingOrder": ["desc", "asc", None],

    "groupDisplayType": "groupRows",
    "groupRemoveSingleChildren": True,
    "groupRemoveLowestSingleChildren": True,
    "suppressMenuHide": True,
    "accentedSort": False,
    "groupHideOpenParents": False,


}

app.layout = html.Div(
    [
        dag.AgGrid(
            id="grouped-grid",
            columnDefs=columnDefs,
            rowData=df.to_dict("records"),
            defaultColDef=defaultColDef,
            enableEnterpriseModules=True,
            dashGridOptions=dashGridOptions,
            style={"height": "600px", "width": "100%"},
        )
    ]
)

if __name__ == "__main__":
    app.run(debug=True)

Hi @sagin_prod

Have you tried the custom row group sorting, using the comparitor in autoGroupColumnDef ?

Yes. Don`t work