Skip to content

Commit 1487477

Browse files
committed
chore: insert default group at index 0
1 parent c827f9b commit 1487477

File tree

6 files changed

+104
-38
lines changed

6 files changed

+104
-38
lines changed

frontend/app_flowy/lib/plugins/board/presentation/card/board_checkbox_cell.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,6 @@ import 'package:flowy_infra_ui/style_widget/icon_button.dart';
55
import 'package:flutter/material.dart';
66
import 'package:flutter_bloc/flutter_bloc.dart';
77

8-
import 'define.dart';
9-
108
class BoardCheckboxCell extends StatefulWidget {
119
final GridCellControllerBuilder cellControllerBuilder;
1210

frontend/rust-lib/flowy-grid/src/entities/group_entities/configuration.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
2-
use flowy_grid_data_model::revision::{GroupRecordRevision, SelectOptionGroupConfigurationRevision};
2+
use flowy_grid_data_model::revision::{GroupRevision, SelectOptionGroupConfigurationRevision};
33

44
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
55
pub struct UrlGroupConfigurationPB {
@@ -36,10 +36,10 @@ pub struct GroupRecordPB {
3636
visible: bool,
3737
}
3838

39-
impl std::convert::From<GroupRecordRevision> for GroupRecordPB {
40-
fn from(rev: GroupRecordRevision) -> Self {
39+
impl std::convert::From<GroupRevision> for GroupRecordPB {
40+
fn from(rev: GroupRevision) -> Self {
4141
Self {
42-
group_id: rev.group_id,
42+
group_id: rev.id,
4343
visible: rev.visible,
4444
}
4545
}

frontend/rust-lib/flowy-grid/src/services/group/configuration.rs

Lines changed: 40 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,11 @@ use crate::entities::{GroupPB, GroupViewChangesetPB, InsertedGroupPB};
22
use crate::services::group::{default_group_configuration, Group};
33
use flowy_error::{FlowyError, FlowyResult};
44
use flowy_grid_data_model::revision::{
5-
FieldRevision, FieldTypeRevision, GroupConfigurationContentSerde, GroupConfigurationRevision, GroupRecordRevision,
5+
FieldRevision, FieldTypeRevision, GroupConfigurationContentSerde, GroupConfigurationRevision, GroupRevision,
66
};
77
use indexmap::IndexMap;
88
use lib_infra::future::AFFuture;
9+
use std::fmt::Formatter;
910
use std::marker::PhantomData;
1011
use std::sync::Arc;
1112

@@ -25,6 +26,15 @@ pub trait GroupConfigurationWriter: Send + Sync + 'static {
2526
) -> AFFuture<FlowyResult<()>>;
2627
}
2728

29+
impl<T> std::fmt::Display for GenericGroupConfiguration<T> {
30+
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
31+
self.groups_map.iter().for_each(|(_, group)| {
32+
let _ = f.write_fmt(format_args!("Group:{} has {} rows \n", group.id, group.rows.len()));
33+
});
34+
Ok(())
35+
}
36+
}
37+
2838
pub struct GenericGroupConfiguration<C> {
2939
view_id: String,
3040
pub configuration: Arc<GroupConfigurationRevision>,
@@ -84,12 +94,31 @@ where
8494

8595
let group_revs = groups
8696
.iter()
87-
.map(|group| GroupRecordRevision::new(group.id.clone(), group.name.clone()))
88-
.collect();
97+
.map(|group| GroupRevision::new(group.id.clone(), group.name.clone()))
98+
.collect::<Vec<GroupRevision>>();
8999

90100
self.mut_configuration(move |configuration| {
91-
configuration.groups = group_revs;
92-
true
101+
let mut is_changed = false;
102+
for new_group_rev in group_revs {
103+
match configuration
104+
.groups
105+
.iter()
106+
.position(|group_rev| group_rev.id == new_group_rev.id)
107+
{
108+
None => {
109+
configuration.groups.push(new_group_rev);
110+
is_changed = true;
111+
}
112+
Some(pos) => {
113+
let removed_group = configuration.groups.remove(pos);
114+
if removed_group != new_group_rev {
115+
is_changed = true;
116+
}
117+
configuration.groups.insert(pos, new_group_rev);
118+
}
119+
}
120+
}
121+
is_changed
93122
})?;
94123

95124
groups.into_iter().for_each(|group| {
@@ -139,8 +168,8 @@ where
139168
self.groups_map.swap_indices(from_index, to_index);
140169

141170
self.mut_configuration(|configuration| {
142-
let from_index = configuration.groups.iter().position(|group| group.group_id == from_id);
143-
let to_index = configuration.groups.iter().position(|group| group.group_id == to_id);
171+
let from_index = configuration.groups.iter().position(|group| group.id == from_id);
172+
let to_index = configuration.groups.iter().position(|group| group.id == to_id);
144173
if let (Some(from), Some(to)) = (from_index, to_index) {
145174
configuration.groups.swap(from, to);
146175
}
@@ -183,10 +212,10 @@ where
183212
fn mut_configuration_group(
184213
&mut self,
185214
group_id: &str,
186-
mut_groups_fn: impl Fn(&mut GroupRecordRevision),
215+
mut_groups_fn: impl Fn(&mut GroupRevision),
187216
) -> FlowyResult<()> {
188217
self.mut_configuration(|configuration| {
189-
match configuration.groups.iter_mut().find(|group| group.group_id == group_id) {
218+
match configuration.groups.iter_mut().find(|group| group.id == group_id) {
190219
None => false,
191220
Some(group_rev) => {
192221
mut_groups_fn(group_rev);
@@ -209,7 +238,7 @@ where
209238
}
210239
}
211240

212-
fn merge_groups(old_groups: &[GroupRecordRevision], groups: Vec<Group>) -> MergeGroupResult {
241+
fn merge_groups(old_groups: &[GroupRevision], groups: Vec<Group>) -> MergeGroupResult {
213242
let mut merge_result = MergeGroupResult::new();
214243
if old_groups.is_empty() {
215244
merge_result.groups = groups;
@@ -224,7 +253,7 @@ fn merge_groups(old_groups: &[GroupRecordRevision], groups: Vec<Group>) -> Merge
224253

225254
// The group is ordered in old groups. Add them before adding the new groups
226255
for group_rev in old_groups {
227-
if let Some(group) = group_map.remove(&group_rev.group_id) {
256+
if let Some(group) = group_map.remove(&group_rev.id) {
228257
if group.name == group_rev.name {
229258
merge_result.add_group(group);
230259
} else {

frontend/rust-lib/flowy-grid/src/services/group/controller.rs

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -124,33 +124,40 @@ where
124124
}
125125

126126
fn groups(&self) -> Vec<Group> {
127-
self.configuration.clone_groups()
127+
let mut groups = self.configuration.clone_groups();
128+
if self.default_group.is_empty() == false {
129+
groups.insert(0, self.default_group.clone());
130+
}
131+
groups
128132
}
129133

130134
fn get_group(&self, group_id: &str) -> Option<(usize, Group)> {
131135
let group = self.configuration.get_group(group_id)?;
132136
Some((group.0, group.1.clone()))
133137
}
134138

139+
#[tracing::instrument(level = "trace", skip_all, fields(row_count=%row_revs.len(), group_result))]
135140
fn fill_groups(&mut self, row_revs: &[Arc<RowRevision>], field_rev: &FieldRevision) -> FlowyResult<Vec<Group>> {
141+
// let mut ungrouped_rows = vec![];
136142
for row_rev in row_revs {
137143
if let Some(cell_rev) = row_rev.cells.get(&self.field_id) {
138-
let mut group_rows: Vec<GroupRow> = vec![];
144+
let mut grouped_rows: Vec<GroupedRow> = vec![];
139145
let cell_bytes = decode_any_cell_data(cell_rev.data.clone(), field_rev);
140146
let cell_data = cell_bytes.parser::<P>()?;
141147
for group in self.configuration.groups() {
142148
if self.can_group(&group.content, &cell_data) {
143-
group_rows.push(GroupRow {
149+
grouped_rows.push(GroupedRow {
144150
row: row_rev.into(),
145151
group_id: group.id.clone(),
146152
});
147153
}
148154
}
149155

150-
if group_rows.is_empty() {
156+
if grouped_rows.is_empty() {
157+
// ungrouped_rows.push(RowPB::from(row_rev));
151158
self.default_group.add_row(row_rev.into());
152159
} else {
153-
for group_row in group_rows {
160+
for group_row in grouped_rows {
154161
if let Some(group) = self.configuration.get_mut_group(&group_row.group_id) {
155162
group.add_row(group_row.row);
156163
}
@@ -161,13 +168,27 @@ where
161168
}
162169
}
163170

164-
let default_group = self.default_group.clone();
165-
let mut groups: Vec<Group> = self.configuration.clone_groups();
166-
if !default_group.number_of_row() == 0 {
167-
groups.push(default_group);
168-
}
171+
// if !ungrouped_rows.is_empty() {
172+
// let default_group_rev = GroupRevision::default_group(gen_grid_group_id(), format!("No {}", field_rev.name));
173+
// let default_group = Group::new(
174+
// default_group_rev.id.clone(),
175+
// field_rev.id.clone(),
176+
// default_group_rev.name.clone(),
177+
// "".to_owned(),
178+
// );
179+
// }
180+
181+
tracing::Span::current().record(
182+
"group_result",
183+
&format!(
184+
"{}, default_group has {} rows",
185+
self.configuration,
186+
self.default_group.rows.len()
187+
)
188+
.as_str(),
189+
);
169190

170-
Ok(groups)
191+
Ok(self.groups())
171192
}
172193

173194
fn move_group(&mut self, from_group_id: &str, to_group_id: &str) -> FlowyResult<()> {
@@ -222,7 +243,7 @@ where
222243
}
223244
}
224245

225-
struct GroupRow {
246+
struct GroupedRow {
226247
row: RowPB,
227248
group_id: String,
228249
}

frontend/rust-lib/flowy-grid/src/services/group/entities.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,8 @@ impl Group {
5959
pub fn number_of_row(&self) -> usize {
6060
self.rows.len()
6161
}
62+
63+
pub fn is_empty(&self) -> bool {
64+
self.rows.is_empty()
65+
}
6266
}

shared-lib/flowy-grid-data-model/src/revision/group_rev.rs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ pub struct GroupConfigurationRevision {
1414
pub id: String,
1515
pub field_id: String,
1616
pub field_type_rev: FieldTypeRevision,
17-
pub groups: Vec<GroupRecordRevision>,
17+
pub groups: Vec<GroupRevision>,
1818
pub content: String,
1919
}
2020

@@ -106,24 +106,38 @@ impl GroupConfigurationContentSerde for SelectOptionGroupConfigurationRevision {
106106
}
107107
}
108108

109-
#[derive(Clone, Debug, Default, Serialize, Deserialize)]
110-
pub struct GroupRecordRevision {
111-
pub group_id: String,
109+
#[derive(Clone, Debug, Default, Serialize, Deserialize, PartialEq, Eq)]
110+
pub struct GroupRevision {
111+
pub id: String,
112112

113113
#[serde(default)]
114114
pub name: String,
115115

116-
#[serde(default = "DEFAULT_GROUP_RECORD_VISIBILITY")]
116+
#[serde(skip, default = "IS_DEFAULT_GROUP")]
117+
pub is_default: bool,
118+
119+
#[serde(default = "GROUP_REV_VISIBILITY")]
117120
pub visible: bool,
118121
}
119122

120-
const DEFAULT_GROUP_RECORD_VISIBILITY: fn() -> bool = || true;
123+
const GROUP_REV_VISIBILITY: fn() -> bool = || true;
124+
const IS_DEFAULT_GROUP: fn() -> bool = || false;
125+
126+
impl GroupRevision {
127+
pub fn new(id: String, group_name: String) -> Self {
128+
Self {
129+
id,
130+
name: group_name,
131+
is_default: false,
132+
visible: true,
133+
}
134+
}
121135

122-
impl GroupRecordRevision {
123-
pub fn new(group_id: String, group_name: String) -> Self {
136+
pub fn default_group(id: String, group_name: String) -> Self {
124137
Self {
125-
group_id,
138+
id,
126139
name: group_name,
140+
is_default: true,
127141
visible: true,
128142
}
129143
}

0 commit comments

Comments
 (0)