From 50586b1ea7ce6331f7e1b737900d24f16011f72e Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Wed, 27 Nov 2024 18:46:09 +0800 Subject: [PATCH] fix: filter database that is in trash --- src/biz/collab/ops.rs | 30 ++++++++++++++++++------------ tests/workspace/workspace_crud.rs | 10 +++++----- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/src/biz/collab/ops.rs b/src/biz/collab/ops.rs index 26b1d74e..a4639782 100644 --- a/src/biz/collab/ops.rs +++ b/src/biz/collab/ops.rs @@ -447,20 +447,26 @@ pub async fn list_database( ) .await?; + let trash = folder + .get_all_trash_sections() + .into_iter() + .map(|s| s.id) + .collect::>(); + let mut af_databases = Vec::with_capacity(db_metas.len()); for db_meta in db_metas { let id = db_meta.database_id; - let views: Vec = db_meta - .linked_views - .into_iter() - .map(|view_id| { - folder - .get_view(&view_id) - .map(|view| to_dto_folder_view_miminal(&view)) - .unwrap_or_default() - }) - .collect(); - af_databases.push(AFDatabase { id, views }); + let mut views: Vec = Vec::new(); + for linked_view_id in db_meta.linked_views { + if !trash.contains(&linked_view_id) { + if let Some(folder_view) = folder.get_view(&linked_view_id) { + views.push(to_dto_folder_view_miminal(&folder_view)); + }; + } + } + if !views.is_empty() { + af_databases.push(AFDatabase { id, views }); + } } Ok(af_databases) @@ -822,7 +828,7 @@ fn type_options_serde( match field_type { FieldType::SingleSelect | FieldType::MultiSelect | FieldType::Media => { if let yrs::Any::String(arc_str) = value { - if let Ok(serde_value) = serde_json::from_str::(&arc_str) { + if let Ok(serde_value) = serde_json::from_str::(arc_str) { result.insert(key.clone(), serde_value); } } diff --git a/tests/workspace/workspace_crud.rs b/tests/workspace/workspace_crud.rs index c094a7a8..822bc85b 100644 --- a/tests/workspace/workspace_crud.rs +++ b/tests/workspace/workspace_crud.rs @@ -35,8 +35,8 @@ async fn workspace_list_database() { .unwrap(); // convert to hashset to check for equeality - let actual = db_fields.sort_by(|a, b| a.id.cmp(&b.id)); - let expected = vec![ + db_fields.sort_by(|a, b| a.id.cmp(&b.id)); + let mut expected = vec![ AFDatabaseField { id: "wdX8DG".to_string(), name: "Multiselect".to_string(), @@ -118,9 +118,9 @@ async fn workspace_list_database() { }, is_primary: false, }, - ] - .sort_by(|a, b| a.id.cmp(&b.id)); - assert_eq!(actual, expected, "{:#?}", db_fields); + ]; + expected.sort_by(|a, b| a.id.cmp(&b.id)); + assert_eq!(db_fields, expected, "{:#?}", db_fields); } { let db_row_ids = c