diff --git a/frontend/rust-lib/event-integration-test/src/folder_event.rs b/frontend/rust-lib/event-integration-test/src/folder_event.rs index 9d0b756f29..3dec76f806 100644 --- a/frontend/rust-lib/event-integration-test/src/folder_event.rs +++ b/frontend/rust-lib/event-integration-test/src/folder_event.rs @@ -174,9 +174,15 @@ impl EventIntegrationTest { folder.get_folder_data(&workspace_id).clone().unwrap() } - pub async fn get_publish_payload(&self, view_id: &str) -> Vec { + pub async fn get_publish_payload( + &self, + view_id: &str, + include_children: Option, + ) -> Vec { let manager = self.folder_manager.clone(); - let payload = manager.get_batch_publish_payload(view_id, None).await; + let payload = manager + .get_batch_publish_payload(view_id, None, include_children) + .await; if payload.is_err() { panic!("Get publish payload failed") diff --git a/frontend/rust-lib/event-integration-test/tests/folder/local_test/view_publish_test.rs b/frontend/rust-lib/event-integration-test/tests/folder/local_test/view_publish_test.rs index 97546514ea..6e6e6fa9cb 100644 --- a/frontend/rust-lib/event-integration-test/tests/folder/local_test/view_publish_test.rs +++ b/frontend/rust-lib/event-integration-test/tests/folder/local_test/view_publish_test.rs @@ -126,12 +126,12 @@ async fn single_document_get_publish_view_payload_test() { let name = "Orphan View"; create_single_document(&test, view_id, name).await; let view = test.get_view(view_id).await; - let payload = test.get_publish_payload(view_id).await; + let payload = test.get_publish_payload(view_id, Some(true)).await; let expect_payload = mock_single_document_view_publish_payload( &test, &view, - format!("{}_{}", "Orphan_View", view_id), + format!("{}-{}", "Orphan-View", view_id), ) .await; @@ -145,15 +145,48 @@ async fn nested_document_get_publish_view_payload_test() { let view_id = "20240521"; create_nested_document(&test, view_id, name).await; let view = test.get_view(view_id).await; - let payload = test.get_publish_payload(view_id).await; + let payload = test.get_publish_payload(view_id, Some(true)).await; let expect_payload = mock_nested_document_view_publish_payload( &test, &view, - format!("{}_{}", "Orphan_View", view_id), + format!("{}-{}", "Orphan-View", view_id), ) .await; assert_eq!(payload.len(), 2); assert_eq!(payload, expect_payload); } + +#[tokio::test] +async fn no_children_publish_view_payload_test() { + let test = EventIntegrationTest::new_anon().await; + let name = "Orphan View"; + let view_id = "20240521"; + create_nested_document(&test, view_id, name).await; + let view = test.get_view(view_id).await; + let payload = test.get_publish_payload(view_id, Some(false)).await; + + let data = mock_single_document_view_publish_payload( + &test, + &view, + format!("{}-{}", "Orphan-View", view_id), + ) + .await + .iter() + .map(|p| p.data.clone()) + .collect::>(); + let meta = mock_nested_document_view_publish_payload( + &test, + &view, + format!("{}-{}", "Orphan-View", view_id), + ) + .await + .iter() + .map(|p| p.meta.clone()) + .collect::>(); + + assert_eq!(payload.len(), 1); + assert_eq!(&payload[0].data, &data[0]); + assert_eq!(&payload[0].meta, &meta[0]); +} diff --git a/frontend/rust-lib/flowy-folder/src/manager.rs b/frontend/rust-lib/flowy-folder/src/manager.rs index 6b25c684cb..14c3dd7fc6 100644 --- a/frontend/rust-lib/flowy-folder/src/manager.rs +++ b/frontend/rust-lib/flowy-folder/src/manager.rs @@ -3,7 +3,7 @@ use crate::entities::{ view_pb_with_child_views, view_pb_without_child_views, view_pb_without_child_views_from_arc, CreateViewParams, CreateWorkspaceParams, DeletedViewPB, DuplicateViewParams, FolderSnapshotPB, MoveNestedViewParams, RepeatedTrashPB, RepeatedViewIdPB, RepeatedViewPB, UpdateViewParams, - ViewPB, ViewSectionPB, WorkspacePB, WorkspaceSettingPB, ViewLayoutPB + ViewLayoutPB, ViewPB, ViewSectionPB, WorkspacePB, WorkspaceSettingPB, }; use crate::manager_observer::{ notify_child_views_changed, notify_did_update_workspace, notify_parent_view_did_change, @@ -23,7 +23,7 @@ use collab_entity::CollabType; use collab_folder::error::FolderError; use collab_folder::{ Folder, FolderNotify, Section, SectionItem, TrashInfo, UserId, View, ViewLayout, ViewUpdate, - Workspace + Workspace, }; use collab_integrate::collab_builder::{AppFlowyCollabBuilder, CollabBuilderConfig}; use collab_integrate::CollabKVDB; @@ -959,7 +959,7 @@ impl FolderManager { // Get the view payload and its child views recursively let payload = self - .get_batch_publish_payload(view_id, publish_name) + .get_batch_publish_payload(view_id, publish_name, Some(false)) .await?; let workspace_id = self.user.workspace_id()?; @@ -1018,6 +1018,7 @@ impl FolderManager { &self, view_id: &str, publish_name: Option, + include_children: Option, ) -> FlowyResult> { let mut stack = vec![view_id.to_string()]; let mut payloads = Vec::new(); @@ -1050,9 +1051,11 @@ impl FolderManager { payloads.push(payload); } - // Add the child views to the stack - for child in &view.child_views { - stack.push(child.id.clone()); + if include_children.unwrap_or(false) { + // Add the child views to the stack + for child in &view.child_views { + stack.push(child.id.clone()); + } } }