Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🆕 feat(Cascader): support binding value for List<TItemValue> type #2340

Merged
merged 2 commits into from
Mar 4, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions docs/Masa.Blazor.Docs/Examples/components/cascaders/BindList.razor
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
<MCascader @bind-Value="_value"
Items="_items"
ItemText="u => u.Label"
ItemValue="u => u.Value"
ItemChildren="u => u.Children"
PersistentHint
Hint="@("bind-Value is: [" + string.Join(", ", _value ?? []) + "]")">
</MCascader>

@code {

private record Item(string Value, string Label, List<Item> Children);

private List<string>? _value;

private readonly List<Item> _items =
[
new Item("1", "湖北", [
new Item("11", "武汉", [
new Item("111", "武昌区", [
new Item("1111", "黄鹤楼街道", []),
new Item("1112", "白沙洲街道", [])
]),
new Item("112", "洪山区", [])
]),
new Item("12", "黄石", []),
new Item("13", "宜昌", [])
]),

new Item("2", "浙江", [
new Item("21", "杭州", []),
new Item("22", "温州", []),
new Item("23", "义乌", []),
new Item("24", "宁波", [])
]),

new Item("3", "上海", [
new Item("31", "徐汇区", []),
new Item("32", "黄浦区", []),
new Item("33", "浦东新区", []),
new Item("34", "崇明区", [])
]),

new Item("4", "北京", [
new Item("41", "朝阳", []),
new Item("42", "东城", []),
new Item("43", "西城", [])
]),

new Item("5", "江苏", [
new Item("51", "南京", [
new Item("511", "鼓楼区", []),
new Item("512", "玄武区", [])
]),
new Item("52", "苏州", []),
new Item("53", "无锡", []),
new Item("54", "扬州", [])
])
];

}
133 changes: 45 additions & 88 deletions docs/Masa.Blazor.Docs/Examples/components/cascaders/Delimiter.razor
Original file line number Diff line number Diff line change
Expand Up @@ -8,96 +8,53 @@

@code {

public class CascaderNode
{
public string Value { get; set; }
public string Label { get; set; }
public List<CascaderNode> Children { get; set; }
}
private record Item(string Value, string Label, List<Item> Children);

private string _value;

private List<CascaderNode> _items = new List<CascaderNode>()
{
new CascaderNode()
{
Value = "1",
Label = "湖北",
Children = new List<CascaderNode>()
{
new CascaderNode
{
Value = "11", Label = "武汉", Children = new List<CascaderNode>()
{
new CascaderNode
{
Value = "111", Label = "武昌区", Children = new List<CascaderNode>()
{
new CascaderNode { Value = "1111", Label = "黄鹤楼街道" },
new CascaderNode { Value = "1112", Label = "白沙洲街道" }
}
},
new CascaderNode { Value = "112", Label = "洪山区" }
}
},
new CascaderNode { Value = "12", Label = "黄石" },
new CascaderNode { Value = "13", Label = "宜昌" }
}
},
new CascaderNode()
{
Value = "2",
Label = "浙江",
Children = new List<CascaderNode>()
{
new CascaderNode { Value = "21", Label = "杭州" },
new CascaderNode { Value = "22", Label = "温州" },
new CascaderNode { Value = "23", Label = "义乌" },
new CascaderNode { Value = "24", Label = "宁波" }
}
},
new CascaderNode()
{
Value = "3",
Label = "上海",
Children = new List<CascaderNode>()
{
new CascaderNode { Value = "31", Label = "徐汇区" },
new CascaderNode { Value = "32", Label = "黄浦区" },
new CascaderNode { Value = "33", Label = "浦东新区" },
new CascaderNode { Value = "34", Label = "崇明区" }
}
},
new CascaderNode()
{
Value = "4",
Label = "北京",
Children = new List<CascaderNode>()
{
new CascaderNode { Value = "41", Label = "朝阳" },
new CascaderNode { Value = "42", Label = "东城" },
new CascaderNode { Value = "43", Label = "西城" }
}
},
new CascaderNode()
{
Value = "5",
Label = "江苏",
Children = new List<CascaderNode>()
{
new CascaderNode
{
Value = "51", Label = "南京", Children = new List<CascaderNode>()
{
new CascaderNode { Value = "511", Label = "鼓楼区" },
new CascaderNode { Value = "512", Label = "玄武区" }
}
},
new CascaderNode { Value = "52", Label = "苏州" },
new CascaderNode { Value = "53", Label = "无锡" },
new CascaderNode { Value = "54", Label = "扬州" }
}
}
};
private readonly List<Item> _items =
[
new Item("1", "湖北", [
new Item("11", "武汉", [
new Item("111", "武昌区", [
new Item("1111", "黄鹤楼街道", []),
new Item("1112", "白沙洲街道", [])
]),
new Item("112", "洪山区", [])
]),
new Item("12", "黄石", []),
new Item("13", "宜昌", [])
]),

new Item("2", "浙江", [
new Item("21", "杭州", []),
new Item("22", "温州", []),
new Item("23", "义乌", []),
new Item("24", "宁波", [])
]),

new Item("3", "上海", [
new Item("31", "徐汇区", []),
new Item("32", "黄浦区", []),
new Item("33", "浦东新区", []),
new Item("34", "崇明区", [])
]),

new Item("4", "北京", [
new Item("41", "朝阳", []),
new Item("42", "东城", []),
new Item("43", "西城", [])
]),

new Item("5", "江苏", [
new Item("51", "南京", [
new Item("511", "鼓楼区", []),
new Item("512", "玄武区", [])
]),
new Item("52", "苏州", []),
new Item("53", "无锡", []),
new Item("54", "扬州", [])
])
];

}
100 changes: 41 additions & 59 deletions docs/Masa.Blazor.Docs/Examples/components/cascaders/LoadChildren.razor
Original file line number Diff line number Diff line change
@@ -1,78 +1,60 @@
<MCascader @bind-Value="_vaule"
<MCascader @bind-Value="_value"
Items="_items"
ItemText="u => u.Label"
ItemValue="u => u.Value"
ItemValue="u => u.Id"
ItemChildren="u => u.Children"
LoadChildren="FetchChildrenAsync">
</MCascader>

@code {
public class BCascaderNode
{
public int Value { get; set; }
public string Label { get; set; }
public List<BCascaderNode> Children { get; set; } = new();
}

public class Item
private List<Item> _allItems =
[
new Item(3, "WuHan", 1, 2),
new Item(4, "WuChang District", 3, 3),
new Item(5, "HuangShi District", 1, 1)
];

private List<Province> _items =
[
new Province(id: 1, label: "HuBei"),
new Province(id: 2, label: "ZheJiang")
];

private int _value;

private async Task FetchChildrenAsync(Province node)
{
public int Id { get; set; }
public string Description { get; set; }
public int ParentId { get; set; }
public int Level { get; set; }
}
await Task.Delay(1000);

private List<Item> _allItems = new()
{
new Item
{
Id = 3,
Description = "武汉",
ParentId = 1,
Level = 2
},
new Item
{
Id = 4,
Description = "武昌区",
ParentId = 3,
Level = 3
},
new Item
var children = _allItems.Where(item => item.ParentId == node.Id)
.Select(item => new Province
{
Id = 5,
Description = "黄石",
ParentId = 1,
Level = 1
}
};
Id = item.Id,
Label = item.Label,
Children = item.Level < 3 ? new() : null //We only load children which count equal 0
}).ToList();

private List<BCascaderNode> _items = new List<BCascaderNode>
node.Children = children.Any() ? children.ToList() : null; //Set to null so we will not load any more
}

private class Province
{
new BCascaderNode
{
Value=1,
Label="湖北"
},
new BCascaderNode
public Province()
{
Value=2,
Label="浙江"
}
};

private int _vaule;
public Province(int id, string? label)
{
Id = id;
Label = label;
}

public async Task FetchChildrenAsync(BCascaderNode node)
{
await Task.Delay(1000);
var children = _allItems.Where(item => item.ParentId == node.Value)
.Select(item => new BCascaderNode
{
Value = item.Id,
Label = item.Description,
Children = item.Level < 3 ? new() : null//We only load children which count equal 0
});
node.Children = children.Any() ? children.ToList() : null;//Set to null so we will not load any more
public int Id { get; set; }
public string? Label { get; set; }
public List<Province>? Children { get; set; } = new();
}

public record Item(int Id, string Label, int ParentId, int Level);

}
Loading
Loading