mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
feat: support moving view across sections (#5015)
This commit is contained in:
@ -475,6 +475,15 @@ pub struct UpdateRecentViewPayloadPB {
|
||||
pub add_in_recent: bool,
|
||||
}
|
||||
|
||||
#[derive(Default, ProtoBuf)]
|
||||
pub struct UpdateViewVisibilityStatusPayloadPB {
|
||||
#[pb(index = 1)]
|
||||
pub view_ids: Vec<String>,
|
||||
|
||||
#[pb(index = 2)]
|
||||
pub is_public: bool,
|
||||
}
|
||||
|
||||
// impl<'de> Deserialize<'de> for ViewDataType {
|
||||
// fn deserialize<D>(deserializer: D) -> Result<Self, <D as Deserializer<'de>>::Error>
|
||||
// where
|
||||
|
@ -363,3 +363,14 @@ pub(crate) async fn reload_workspace_handler(
|
||||
folder.reload_workspace().await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "debug", skip(data, folder), err)]
|
||||
pub(crate) async fn update_view_visibility_status_handler(
|
||||
data: AFPluginData<UpdateViewVisibilityStatusPayloadPB>,
|
||||
folder: AFPluginState<Weak<FolderManager>>,
|
||||
) -> Result<(), FlowyError> {
|
||||
let folder = upgrade_folder(folder)?;
|
||||
let params = data.into_inner();
|
||||
folder.set_views_visibility(params.view_ids, params.is_public);
|
||||
Ok(())
|
||||
}
|
||||
|
@ -40,6 +40,7 @@ pub fn init(folder: Weak<FolderManager>) -> AFPlugin {
|
||||
.event(FolderEvent::ReloadWorkspace, reload_workspace_handler)
|
||||
.event(FolderEvent::ReadPrivateViews, read_private_views_handler)
|
||||
.event(FolderEvent::ReadCurrentWorkspaceViews, get_current_workspace_views_handler)
|
||||
.event(FolderEvent::UpdateViewVisibilityStatus, update_view_visibility_status_handler)
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)]
|
||||
@ -166,4 +167,7 @@ pub enum FolderEvent {
|
||||
/// Only the first level of child views are included.
|
||||
#[event(output = "RepeatedViewPB")]
|
||||
ReadCurrentWorkspaceViews = 40,
|
||||
|
||||
#[event(input = "UpdateViewVisibilityStatusPayloadPB")]
|
||||
UpdateViewVisibilityStatus = 41,
|
||||
}
|
||||
|
@ -1120,6 +1120,19 @@ impl FolderManager {
|
||||
&self.cloud_service
|
||||
}
|
||||
|
||||
pub fn set_views_visibility(&self, view_ids: Vec<String>, is_public: bool) {
|
||||
self.with_folder(
|
||||
|| (),
|
||||
|folder| {
|
||||
if is_public {
|
||||
folder.delete_private_view_ids(view_ids);
|
||||
} else {
|
||||
folder.add_private_view_ids(view_ids);
|
||||
}
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
fn get_sections(&self, section_type: Section) -> Vec<SectionItem> {
|
||||
self.with_folder(Vec::new, |folder| {
|
||||
let trash_ids = folder
|
||||
|
Reference in New Issue
Block a user