Skip to content

Commit e66b3b0

Browse files
committed
fix: duplicate board
1 parent fa0a485 commit e66b3b0

File tree

13 files changed

+55
-17
lines changed

13 files changed

+55
-17
lines changed

frontend/rust-lib/flowy-folder/src/manager.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -260,7 +260,7 @@ pub trait ViewDataProcessor {
260260

261261
fn close_container(&self, view_id: &str) -> FutureResult<(), FlowyError>;
262262

263-
fn get_delta_data(&self, view_id: &str) -> FutureResult<Bytes, FlowyError>;
263+
fn get_view_data(&self, view_id: &str) -> FutureResult<Bytes, FlowyError>;
264264

265265
fn create_default_view(
266266
&self,

frontend/rust-lib/flowy-folder/src/services/view/controller.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,11 +61,13 @@ impl ViewController {
6161
let processor = self.get_data_processor(params.data_type.clone())?;
6262
let user_id = self.user.user_id()?;
6363
if params.view_content_data.is_empty() {
64+
tracing::trace!("Create view with build-in data");
6465
let view_data = processor
6566
.create_default_view(&user_id, &params.view_id, params.layout.clone())
6667
.await?;
6768
params.view_content_data = view_data.to_vec();
6869
} else {
70+
tracing::trace!("Create view with view data");
6971
let delta_data = processor
7072
.create_view_from_delta_data(
7173
&user_id,
@@ -231,15 +233,15 @@ impl ViewController {
231233
.await?;
232234

233235
let processor = self.get_data_processor(view_rev.data_type.clone())?;
234-
let delta_bytes = processor.get_delta_data(view_id).await?;
236+
let view_data = processor.get_view_data(view_id).await?;
235237
let duplicate_params = CreateViewParams {
236238
belong_to_id: view_rev.app_id.clone(),
237239
name: format!("{} (copy)", &view_rev.name),
238240
desc: view_rev.desc,
239241
thumbnail: view_rev.thumbnail,
240242
data_type: view_rev.data_type.into(),
241243
layout: view_rev.layout.into(),
242-
view_content_data: delta_bytes.to_vec(),
244+
view_content_data: view_data.to_vec(),
243245
view_id: gen_view_id(),
244246
};
245247

frontend/rust-lib/flowy-grid/src/dart_notification.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,3 @@ impl std::convert::From<GridNotification> for i32 {
3333
pub fn send_dart_notification(id: &str, ty: GridNotification) -> DartNotifyBuilder {
3434
DartNotifyBuilder::new(id, ty, OBSERVABLE_CATEGORY)
3535
}
36-

frontend/rust-lib/flowy-grid/src/manager.rs

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,14 @@ pub async fn make_grid_view_data(
183183
grid_manager: Arc<GridManager>,
184184
build_context: BuildGridContext,
185185
) -> FlowyResult<Bytes> {
186-
for block_meta_data in &build_context.blocks {
186+
let BuildGridContext {
187+
field_revs,
188+
block_metas,
189+
blocks,
190+
grid_view_revision_data,
191+
} = build_context;
192+
193+
for block_meta_data in &blocks {
187194
let block_id = &block_meta_data.block_id;
188195
// Indexing the block's rows
189196
block_meta_data.rows.iter().for_each(|row| {
@@ -200,7 +207,7 @@ pub async fn make_grid_view_data(
200207

201208
// Will replace the grid_id with the value returned by the gen_grid_id()
202209
let grid_id = view_id.to_owned();
203-
let grid_rev = GridRevision::from_build_context(&grid_id, build_context);
210+
let grid_rev = GridRevision::from_build_context(&grid_id, field_revs, block_metas);
204211

205212
// Create grid
206213
let grid_rev_delta = make_grid_delta(&grid_rev);
@@ -210,7 +217,11 @@ pub async fn make_grid_view_data(
210217
let _ = grid_manager.create_grid(&grid_id, repeated_revision).await?;
211218

212219
// Create grid view
213-
let grid_view = GridViewRevision::new(grid_id, view_id.to_owned(), layout.into());
220+
let grid_view = if grid_view_revision_data.is_empty() {
221+
GridViewRevision::new(grid_id, view_id.to_owned(), layout.into())
222+
} else {
223+
GridViewRevision::from_json(grid_view_revision_data)?
224+
};
214225
let grid_view_delta = make_grid_view_delta(&grid_view);
215226
let grid_view_delta_bytes = grid_view_delta.json_bytes();
216227
let repeated_revision: RepeatedRevision =

frontend/rust-lib/flowy-grid/src/services/grid_editor.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -673,6 +673,7 @@ impl GridRevisionEditor {
673673

674674
pub async fn duplicate_grid(&self) -> FlowyResult<BuildGridContext> {
675675
let grid_pad = self.grid_pad.read().await;
676+
let grid_view_revision_data = self.view_manager.duplicate_grid_view().await?;
676677
let original_blocks = grid_pad.get_block_meta_revs();
677678
let (duplicated_fields, duplicated_blocks) = grid_pad.duplicate_grid_block_meta().await;
678679

@@ -698,6 +699,7 @@ impl GridRevisionEditor {
698699
field_revs: duplicated_fields.into_iter().map(Arc::new).collect(),
699700
block_metas: duplicated_blocks,
700701
blocks: blocks_meta_data,
702+
grid_view_revision_data,
701703
})
702704
}
703705

frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,11 @@ impl GridViewRevisionEditor {
7474
})
7575
}
7676

77+
pub(crate) async fn duplicate_view_data(&self) -> FlowyResult<String> {
78+
let json_str = self.pad.read().await.json_str()?;
79+
Ok(json_str)
80+
}
81+
7782
pub(crate) async fn will_create_row(&self, row_rev: &mut RowRevision, params: &CreateRowParams) {
7883
if params.group_id.is_none() {
7984
return;

frontend/rust-lib/flowy-grid/src/services/grid_view_manager.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,12 @@ impl GridViewManager {
5656
})
5757
}
5858

59+
pub(crate) async fn duplicate_grid_view(&self) -> FlowyResult<String> {
60+
let editor = self.get_default_view_editor().await?;
61+
let view_data = editor.duplicate_view_data().await?;
62+
Ok(view_data)
63+
}
64+
5965
/// When the row was created, we may need to modify the [RowRevision] according to the [CreateRowParams].
6066
pub(crate) async fn will_create_row(&self, row_rev: &mut RowRevision, params: &CreateRowParams) {
6167
for view_editor in self.view_editors.iter() {

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
use crate::entities::{ GroupChangesetPB, GroupViewChangesetPB, InsertedRowPB, RowPB};
2-
use crate::services::cell::{decode_any_cell_data, CellBytesParser,};
1+
use crate::entities::{GroupChangesetPB, GroupViewChangesetPB, InsertedRowPB, RowPB};
2+
use crate::services::cell::{decode_any_cell_data, CellBytesParser};
33
use crate::services::group::action::GroupAction;
44
use crate::services::group::configuration::GroupContext;
55
use crate::services::group::entities::Group;
66
use flowy_error::FlowyResult;
7-
use flowy_grid_data_model::revision::{ FieldRevision, GroupConfigurationContentSerde, GroupRevision, RowChangeset, RowRevision, TypeOptionDataDeserializer};
7+
use flowy_grid_data_model::revision::{
8+
FieldRevision, GroupConfigurationContentSerde, GroupRevision, RowChangeset, RowRevision, TypeOptionDataDeserializer,
9+
};
810
use std::marker::PhantomData;
911
use std::sync::Arc;
1012

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ impl GroupAction for CheckboxGroupController {
8080
fn move_row(&mut self, _cell_data: &Self::CellDataType, mut context: MoveGroupRowContext) -> Vec<GroupChangesetPB> {
8181
let mut group_changeset = vec![];
8282
self.group_ctx.iter_mut_all_groups(|group| {
83-
if let Some(changeset) = move_group_row(group, &mut context) {
83+
if let Some(changeset) = move_group_row(group, &mut context) {
8484
group_changeset.push(changeset);
8585
}
8686
});

frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/single_select_controller.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ impl GroupAction for SingleSelectGroupController {
4949
fn move_row(&mut self, _cell_data: &Self::CellDataType, mut context: MoveGroupRowContext) -> Vec<GroupChangesetPB> {
5050
let mut group_changeset = vec![];
5151
self.group_ctx.iter_mut_all_groups(|group| {
52-
if let Some(changeset) = move_group_row(group, &mut context) {
52+
if let Some(changeset) = move_group_row(group, &mut context) {
5353
group_changeset.push(changeset);
5454
}
5555
});

0 commit comments

Comments
 (0)