From 5b38dbb972558058158436337f8df6ad16e9bb7a Mon Sep 17 00:00:00 2001 From: khorshuheng Date: Mon, 10 Feb 2025 14:28:26 +0800 Subject: [PATCH] feat: add is_locked properties to view --- collab-folder/src/folder.rs | 1 + collab-folder/src/hierarchy_builder.rs | 3 +++ collab-folder/src/view.rs | 13 +++++++++++++ collab-folder/src/workspace.rs | 1 + collab-folder/tests/folder_test/util.rs | 1 + 5 files changed, 19 insertions(+) diff --git a/collab-folder/src/folder.rs b/collab-folder/src/folder.rs index c5d66b2cc..ed17459fe 100644 --- a/collab-folder/src/folder.rs +++ b/collab-folder/src/folder.rs @@ -863,6 +863,7 @@ mod tests { created_by: None, last_edited_time: current_time, last_edited_by: None, + is_locked: None, extra: Some(serde_json::to_string(&SpaceInfo::default()).unwrap()), }; let space_view_id = space_view.id.clone(); diff --git a/collab-folder/src/hierarchy_builder.rs b/collab-folder/src/hierarchy_builder.rs index 0ee6dd0be..ab88ea16e 100644 --- a/collab-folder/src/hierarchy_builder.rs +++ b/collab-folder/src/hierarchy_builder.rs @@ -116,6 +116,7 @@ pub struct NestedChildViewBuilder { children: Vec, is_favorite: bool, icon: Option, + is_locked: Option, extra: Option, } @@ -133,6 +134,7 @@ impl NestedChildViewBuilder { children: vec![], is_favorite: false, icon: None, + is_locked: None, extra: None, } } @@ -219,6 +221,7 @@ impl NestedChildViewBuilder { .collect(), ), last_edited_by: Some(self.uid), + is_locked: self.is_locked, extra: self.extra, }; ParentChildViews { diff --git a/collab-folder/src/view.rs b/collab-folder/src/view.rs index d0c39d314..46e3b0300 100644 --- a/collab-folder/src/view.rs +++ b/collab-folder/src/view.rs @@ -28,6 +28,7 @@ const VIEW_CREATED_BY: &str = "created_by"; const VIEW_ICON: &str = "icon"; const VIEW_LAST_EDITED_TIME: &str = "last_edited_time"; const VIEW_LAST_EDITED_BY: &str = "last_edited_by"; +const VIEW_IS_LOCKED: &str = "is_locked"; const VIEW_EXTRA: &str = "extra"; // const VIEW_LAST_VIEWED_TIME: &str = "last_viewed_time"; @@ -454,6 +455,7 @@ pub(crate) fn view_from_map_ref( .get_with_txn(txn, VIEW_LAST_EDITED_TIME) .unwrap_or(timestamp()); let last_edited_by = map_ref.get_with_txn(txn, VIEW_LAST_EDITED_BY); + let is_locked = map_ref.get_with_txn(txn, VIEW_IS_LOCKED); let extra = map_ref.get_with_txn(txn, VIEW_EXTRA); Some(View { @@ -468,6 +470,7 @@ pub(crate) fn view_from_map_ref( created_by, last_edited_time, last_edited_by, + is_locked, extra, }) } @@ -586,6 +589,13 @@ impl<'a, 'b, 'c> ViewUpdate<'a, 'b, 'c> { self } + pub fn set_is_locked(self, is_locked: Option) -> Self { + if let Some(is_locked) = is_locked { + self.map_ref.insert(self.txn, VIEW_IS_LOCKED, is_locked); + } + self + } + pub fn set_private(self, is_private: bool) -> Self { if let Some(private_section) = self.section_map.section_op(self.txn, Section::Private) { if is_private { @@ -679,6 +689,7 @@ pub struct View { pub created_by: Option, // user id pub last_edited_time: i64, pub last_edited_by: Option, // user id + pub is_locked: Option, /// this value used to store the extra data with JSON format /// for document: /// - cover: { type: "", value: "" } @@ -713,6 +724,7 @@ impl View { created_by, last_edited_time: 0, last_edited_by: None, + is_locked: None, extra: None, } } @@ -730,6 +742,7 @@ impl View { created_by: uid, last_edited_time: 0, last_edited_by: None, + is_locked: None, extra: None, } } diff --git a/collab-folder/src/workspace.rs b/collab-folder/src/workspace.rs index f1dd4c260..25e378243 100644 --- a/collab-folder/src/workspace.rs +++ b/collab-folder/src/workspace.rs @@ -56,6 +56,7 @@ impl From for View { created_by: value.created_by, last_edited_time: value.last_edited_time, last_edited_by: value.last_edited_by, + is_locked: None, extra: None, } } diff --git a/collab-folder/tests/folder_test/util.rs b/collab-folder/tests/folder_test/util.rs index e676d57ee..7eb8dddf6 100644 --- a/collab-folder/tests/folder_test/util.rs +++ b/collab-folder/tests/folder_test/util.rs @@ -148,6 +148,7 @@ pub fn make_test_view(view_id: &str, parent_view_id: &str, belongings: Vec