ab share rules, use user/group name rather than level (#7443)

Signed-off-by: 21pages <pages21@163.com>
This commit is contained in:
21pages 2024-03-21 07:23:08 +08:00 committed by GitHub
parent 0540e2cf6c
commit 4e060203ad
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 48 additions and 44 deletions

View File

@ -238,17 +238,6 @@ enum ShareRule {
} }
} }
enum ShareLevel {
user(1),
group(2),
team(3);
const ShareLevel(this.value);
final int value;
static String teamName = translate('Everyone');
}
class AbProfile { class AbProfile {
String guid; String guid;
String name; String name;
@ -279,17 +268,39 @@ class AbTag {
class AbRulePayload { class AbRulePayload {
String guid; String guid;
int level; String? user;
String name;
int rule;
String? group; String? group;
int rule;
AbRulePayload(this.guid, this.level, this.name, this.rule, {this.group}); AbRulePayload(
this.guid,
this.user,
this.group,
this.rule,
);
AbRulePayload.fromJson(Map<String, dynamic> json) AbRulePayload.fromJson(Map<String, dynamic> json)
: guid = json['guid'] ?? '', : guid = json['guid'] ?? '',
level = json['level'] ?? 0, user = json['user'],
name = json['name'] ?? '', group = json['group'],
rule = json['rule'] ?? 0, rule = json['rule'] ?? 0;
group = json['group'];
static String buildName(String? user, String? group) {
if (user != null && group != null) {
return '-';
}
if (user != null) {
return user;
}
if (group != null) {
return group;
}
return teamName;
}
String getName() {
return buildName(user, group);
}
static String teamName = translate('Everyone');
} }

View File

@ -1029,13 +1029,12 @@ class __RuleTreeState extends State<_RuleTree> {
if (!match(user)) { if (!match(user)) {
continue; continue;
} }
final userRuleIndex = rules.indexWhere( final userRuleIndex = rules.indexWhere((e) => e.user == user);
(e) => e.level == ShareLevel.user.value && e.name == user);
if (userRuleIndex < 0) { if (userRuleIndex < 0) {
if (!onlyShowExisting) { if (!onlyShowExisting) {
userNodes.add(TreeNode( userNodes.add(TreeNode(
content: _buildEmptyNodeContent( content:
ShareLevel.user, user, totalWidth, indent * 2), _buildEmptyNodeContent(user, null, totalWidth, indent * 2),
key: ValueKey(keyIndex++), key: ValueKey(keyIndex++),
children: [])); children: []));
} }
@ -1052,8 +1051,7 @@ class __RuleTreeState extends State<_RuleTree> {
List<TreeNode> groupNodes = []; List<TreeNode> groupNodes = [];
map.forEach((group, users) { map.forEach((group, users) {
final groupRuleIndex = rules.indexWhere( final groupRuleIndex = rules.indexWhere((e) => e.group == group);
(e) => e.level == ShareLevel.group.value && e.name == group);
final children = buildUserNodes(users); final children = buildUserNodes(users);
if (!match(group) && children.isEmpty) { if (!match(group) && children.isEmpty) {
return; return;
@ -1061,8 +1059,7 @@ class __RuleTreeState extends State<_RuleTree> {
if (groupRuleIndex < 0) { if (groupRuleIndex < 0) {
if (!onlyShowExisting || children.isNotEmpty) { if (!onlyShowExisting || children.isNotEmpty) {
groupNodes.add(TreeNode( groupNodes.add(TreeNode(
content: _buildEmptyNodeContent( content: _buildEmptyNodeContent(null, group, totalWidth, indent),
ShareLevel.group, group, totalWidth, indent),
key: ValueKey(keyIndex++), key: ValueKey(keyIndex++),
children: children)); children: children));
} }
@ -1077,15 +1074,14 @@ class __RuleTreeState extends State<_RuleTree> {
List<TreeNode> totalNodes = []; List<TreeNode> totalNodes = [];
final teamRuleIndex = final teamRuleIndex =
rules.indexWhere((e) => e.level == ShareLevel.team.value); rules.indexWhere((e) => e.user == null && e.group == null);
if (!match(ShareLevel.teamName) && groupNodes.isEmpty) { if (!match(AbRulePayload.teamName) && groupNodes.isEmpty) {
return []; return [];
} }
if (teamRuleIndex < 0) { if (teamRuleIndex < 0) {
if (!onlyShowExisting || groupNodes.isNotEmpty) { if (!onlyShowExisting || groupNodes.isNotEmpty) {
totalNodes.add(TreeNode( totalNodes.add(TreeNode(
content: _buildEmptyNodeContent( content: _buildEmptyNodeContent(null, null, totalWidth, 0),
ShareLevel.team, ShareLevel.teamName, totalWidth, 0),
key: ValueKey(keyIndex++), key: ValueKey(keyIndex++),
children: groupNodes)); children: groupNodes));
} }
@ -1093,10 +1089,7 @@ class __RuleTreeState extends State<_RuleTree> {
final rule = rules[teamRuleIndex]; final rule = rules[teamRuleIndex];
totalNodes.add(TreeNode( totalNodes.add(TreeNode(
content: _buildRuleNodeContent( content: _buildRuleNodeContent(
AbRulePayload( AbRulePayload(rule.guid, null, null, rule.rule), totalWidth, 0),
rule.guid, rule.level, ShareLevel.teamName, rule.rule),
totalWidth,
0),
key: ValueKey(keyIndex++), key: ValueKey(keyIndex++),
children: groupNodes)); children: groupNodes));
} }
@ -1170,7 +1163,8 @@ class __RuleTreeState extends State<_RuleTree> {
} }
Widget _buildEmptyNodeContent( Widget _buildEmptyNodeContent(
ShareLevel level, String name, double totalWidth, double indent) { String? user, String? group, double totalWidth, double indent) {
String name = AbRulePayload.buildName(user, group);
return SizedBox( return SizedBox(
width: totalWidth - indent, width: totalWidth - indent,
child: Row( child: Row(
@ -1191,8 +1185,7 @@ class __RuleTreeState extends State<_RuleTree> {
setState(() { setState(() {
isInProgress = true; isInProgress = true;
}); });
final errMsg = final errMsg = await gFFI.abModel.addRule(user, group, rule);
await gFFI.abModel.addRule(name, level.value, rule);
setState(() { setState(() {
isInProgress = false; isInProgress = false;
}); });
@ -1217,7 +1210,7 @@ class __RuleTreeState extends State<_RuleTree> {
width: totalWidth - indent, width: totalWidth - indent,
child: Row( child: Row(
children: [ children: [
SizedBox(width: col1Width - indent, child: _text(rule.name)), SizedBox(width: col1Width - indent, child: _text(rule.getName())),
SizedBox( SizedBox(
width: col2Width, child: _text(ShareRule.shortDesc(rule.rule))), width: col2Width, child: _text(ShareRule.shortDesc(rule.rule))),
const Spacer(), const Spacer(),
@ -1248,7 +1241,7 @@ class __RuleTreeState extends State<_RuleTree> {
text: "Invalid rule: ${rule.rule}"); text: "Invalid rule: ${rule.rule}");
return; return;
} }
_addOrUpdateRuleDialog(onSubmit, rule.rule, rule.name); _addOrUpdateRuleDialog(onSubmit, rule.rule, rule.getName());
}, },
), ),
_iconButton( _iconButton(

View File

@ -402,7 +402,7 @@ class AbModel {
return []; return [];
} }
Future<String?> addRule(String name, int level, int rule) async { Future<String?> addRule(String? user, String? group, int rule) async {
try { try {
final abGuid = current.sharedProfile()?.guid; final abGuid = current.sharedProfile()?.guid;
if (abGuid == null) { if (abGuid == null) {
@ -412,9 +412,9 @@ class AbModel {
var headers = getHttpHeaders(); var headers = getHttpHeaders();
headers['Content-Type'] = "application/json"; headers['Content-Type'] = "application/json";
final body = jsonEncode({ final body = jsonEncode({
'ab': abGuid, 'guid': abGuid,
'name': name, 'user': user,
'level': level, 'group': group,
'rule': rule, 'rule': rule,
}); });
final resp = final resp =