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)