diff --git a/frontend/rust-lib/flowy-database/src/manager.rs b/frontend/rust-lib/flowy-database/src/manager.rs index f4b30de956..26236c563b 100644 --- a/frontend/rust-lib/flowy-database/src/manager.rs +++ b/frontend/rust-lib/flowy-database/src/manager.rs @@ -411,14 +411,20 @@ pub async fn create_new_database( // Create database view tracing::trace!("Create new database view: {}", view_id); - let mut database_view_rev = if database_view_data.is_empty() { - DatabaseViewRevision::new(database_id, view_id.to_owned(), true, name, layout.into()) + let database_view = if database_view_data.is_empty() { + let mut database_view = + DatabaseViewRevision::new(database_id, view_id.to_owned(), true, name, layout.into()); + database_view.layout_settings = layout_setting; + database_view } else { - DatabaseViewRevision::from_json(database_view_data)? + let mut database_view = DatabaseViewRevision::from_json(database_view_data)?; + database_view.database_id = database_id; + // Replace the view id with the new one. This logic will be removed in the future. + database_view.view_id = view_id.to_owned(); + database_view }; - database_view_rev.layout_settings = layout_setting; - let database_view_ops = make_database_view_operations(&database_view_rev); + let database_view_ops = make_database_view_operations(&database_view); let database_view_bytes = database_view_ops.json_bytes(); let revision = Revision::initial_revision(view_id, database_view_bytes); database_manager diff --git a/frontend/rust-lib/flowy-database/src/services/database/database_editor.rs b/frontend/rust-lib/flowy-database/src/services/database/database_editor.rs index b0ca679bdd..84f5c26bf1 100644 --- a/frontend/rust-lib/flowy-database/src/services/database/database_editor.rs +++ b/frontend/rust-lib/flowy-database/src/services/database/database_editor.rs @@ -888,12 +888,10 @@ impl DatabaseEditor { Ok(()) } - pub async fn duplicate_database(&self, _view_id: &str) -> FlowyResult { + pub async fn duplicate_database(&self, view_id: &str) -> FlowyResult { let database_pad = self.database_pad.read().await; - // let database_view_data = self - // .database_views - // .duplicate_database_view_setting(view_id) - // .await?; + let database_view_data = self.database_views.duplicate_database_view(view_id).await?; + let original_blocks = database_pad.get_block_meta_revs(); let (duplicated_fields, duplicated_blocks) = database_pad.duplicate_database_block_meta().await; @@ -922,7 +920,7 @@ impl DatabaseEditor { block_metas: duplicated_blocks, blocks: blocks_meta_data, layout_setting: Default::default(), - database_view_data: "".to_string(), + database_view_data, }) } diff --git a/frontend/rust-lib/flowy-database/src/services/database_view/editor.rs b/frontend/rust-lib/flowy-database/src/services/database_view/editor.rs index 1d5449bd27..dc970ff826 100644 --- a/frontend/rust-lib/flowy-database/src/services/database_view/editor.rs +++ b/frontend/rust-lib/flowy-database/src/services/database_view/editor.rs @@ -238,7 +238,7 @@ impl DatabaseViewEditor { self.filter_controller.filter_row_revs(rows).await; } - pub async fn v_duplicate_view_setting(&self) -> FlowyResult { + pub async fn v_duplicate_database_view(&self) -> FlowyResult { let json_str = self.pad.read().await.json_str()?; Ok(json_str) } diff --git a/frontend/rust-lib/flowy-database/src/services/database_view/editor_manager.rs b/frontend/rust-lib/flowy-database/src/services/database_view/editor_manager.rs index 993b5835e3..cab88649fe 100644 --- a/frontend/rust-lib/flowy-database/src/services/database_view/editor_manager.rs +++ b/frontend/rust-lib/flowy-database/src/services/database_view/editor_manager.rs @@ -101,9 +101,9 @@ impl DatabaseViews { Ok(row_revs) } - pub async fn duplicate_database_view_setting(&self, view_id: &str) -> FlowyResult { + pub async fn duplicate_database_view(&self, view_id: &str) -> FlowyResult { let editor = self.get_view_editor(view_id).await?; - let view_data = editor.v_duplicate_view_setting().await?; + let view_data = editor.v_duplicate_database_view().await?; Ok(view_data) } diff --git a/frontend/rust-lib/flowy-database/src/services/persistence/migration/database_view_migration.rs b/frontend/rust-lib/flowy-database/src/services/persistence/migration/database_view_migration.rs index 5479a34649..1124795185 100644 --- a/frontend/rust-lib/flowy-database/src/services/persistence/migration/database_view_migration.rs +++ b/frontend/rust-lib/flowy-database/src/services/persistence/migration/database_view_migration.rs @@ -20,10 +20,10 @@ use lib_infra::util::md5; use revision_model::Revision; use std::sync::Arc; -const DATABASE_VIEW_MIGRATE: &str = "database_view_migrate"; +const DATABASE_VIEW_MIGRATE_1: &str = "database_view_migrate_v1"; pub fn is_database_view_migrated(user_id: &str) -> bool { - let key = md5(format!("{}{}", user_id, DATABASE_VIEW_MIGRATE)); + let key = md5(format!("{}{}", user_id, DATABASE_VIEW_MIGRATE_1)); KV::get_bool(&key) } @@ -107,7 +107,7 @@ pub(crate) async fn migrate_database_view( let _ = database_refs.bind(&database_id, &database_view_id, true, &database.name); } - let key = md5(format!("{}{}", user_id, DATABASE_VIEW_MIGRATE)); + let key = md5(format!("{}{}", user_id, DATABASE_VIEW_MIGRATE_1)); KV::set_bool(&key, true); Ok(()) } diff --git a/shared-lib/database-model/src/view_rev.rs b/shared-lib/database-model/src/view_rev.rs index f2df22a605..8a723c3e37 100644 --- a/shared-lib/database-model/src/view_rev.rs +++ b/shared-lib/database-model/src/view_rev.rs @@ -37,7 +37,6 @@ pub struct DatabaseViewRevision { #[serde(rename = "grid_id")] pub database_id: String, - #[serde(skip_serializing_if = "String::is_empty")] #[serde(default)] pub name: String, @@ -47,7 +46,6 @@ pub struct DatabaseViewRevision { pub layout: LayoutRevision, #[serde(default)] - #[serde(skip_serializing_if = "LayoutSetting::is_empty")] pub layout_settings: LayoutSetting, #[serde(default)] @@ -124,28 +122,3 @@ impl std::ops::DerefMut for LayoutSetting { pub struct RowOrderRevision { pub row_id: String, } - -#[cfg(test)] -mod tests { - use crate::DatabaseViewRevision; - - #[test] - fn grid_view_revision_serde_test() { - let grid_view_revision = DatabaseViewRevision { - view_id: "1".to_string(), - database_id: "1".to_string(), - name: "".to_string(), - is_base: true, - layout: Default::default(), - layout_settings: Default::default(), - filters: Default::default(), - groups: Default::default(), - sorts: Default::default(), - }; - let s = serde_json::to_string(&grid_view_revision).unwrap(); - assert_eq!( - s, - r#"{"view_id":"1","grid_id":"1","is_base":true,"layout":0,"filters":[],"groups":[],"sorts":[]}"# - ); - } -}