mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
chore: read block rows with filters
This commit is contained in:
@ -9,7 +9,7 @@ use flowy_grid_data_model::entities::{
|
||||
CellChangeset, GridRowsChangeset, IndexRowOrder, Row, RowOrder, UpdatedRowOrder,
|
||||
};
|
||||
use flowy_grid_data_model::revision::{
|
||||
CellRevision, GridBlockRevision, GridBlockRevisionChangeset, RowMetaChangeset, RowRevision,
|
||||
CellRevision, GridBlockMetaRevision, GridBlockMetaRevisionChangeset, RowMetaChangeset, RowRevision,
|
||||
};
|
||||
use flowy_revision::disk::SQLiteGridBlockMetaRevisionPersistence;
|
||||
use flowy_revision::{RevisionManager, RevisionPersistence};
|
||||
@ -30,7 +30,7 @@ impl GridBlockManager {
|
||||
pub(crate) async fn new(
|
||||
grid_id: &str,
|
||||
user: &Arc<dyn GridUser>,
|
||||
block_revs: Vec<Arc<GridBlockRevision>>,
|
||||
block_revs: Vec<Arc<GridBlockMetaRevision>>,
|
||||
persistence: Arc<BlockIndexCache>,
|
||||
) -> FlowyResult<Self> {
|
||||
let editor_map = make_block_meta_editor_map(user, block_revs).await?;
|
||||
@ -86,7 +86,7 @@ impl GridBlockManager {
|
||||
pub(crate) async fn insert_row(
|
||||
&self,
|
||||
rows_by_block_id: HashMap<String, Vec<RowRevision>>,
|
||||
) -> FlowyResult<Vec<GridBlockRevisionChangeset>> {
|
||||
) -> FlowyResult<Vec<GridBlockMetaRevisionChangeset>> {
|
||||
let mut changesets = vec![];
|
||||
for (block_id, row_revs) in rows_by_block_id {
|
||||
let mut inserted_row_orders = vec![];
|
||||
@ -100,7 +100,7 @@ impl GridBlockManager {
|
||||
row_order.index = index;
|
||||
inserted_row_orders.push(row_order);
|
||||
}
|
||||
changesets.push(GridBlockRevisionChangeset::from_row_count(&block_id, row_count));
|
||||
changesets.push(GridBlockMetaRevisionChangeset::from_row_count(&block_id, row_count));
|
||||
|
||||
let _ = self
|
||||
.notify_did_update_block(&block_id, GridRowsChangeset::insert(&block_id, inserted_row_orders))
|
||||
@ -148,7 +148,10 @@ impl GridBlockManager {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub(crate) async fn delete_rows(&self, row_orders: Vec<RowOrder>) -> FlowyResult<Vec<GridBlockRevisionChangeset>> {
|
||||
pub(crate) async fn delete_rows(
|
||||
&self,
|
||||
row_orders: Vec<RowOrder>,
|
||||
) -> FlowyResult<Vec<GridBlockMetaRevisionChangeset>> {
|
||||
let mut changesets = vec![];
|
||||
for block_order in block_from_row_orders(row_orders) {
|
||||
let editor = self.get_editor(&block_order.id).await?;
|
||||
@ -158,7 +161,7 @@ impl GridBlockManager {
|
||||
.map(|row_order| Cow::Owned(row_order.row_id))
|
||||
.collect::<Vec<Cow<String>>>();
|
||||
let row_count = editor.delete_rows(row_ids).await?;
|
||||
let changeset = GridBlockRevisionChangeset::from_row_count(&block_order.id, row_count);
|
||||
let changeset = GridBlockMetaRevisionChangeset::from_row_count(&block_order.id, row_count);
|
||||
changesets.push(changeset);
|
||||
}
|
||||
|
||||
@ -262,7 +265,7 @@ impl GridBlockManager {
|
||||
|
||||
async fn make_block_meta_editor_map(
|
||||
user: &Arc<dyn GridUser>,
|
||||
block_revs: Vec<Arc<GridBlockRevision>>,
|
||||
block_revs: Vec<Arc<GridBlockMetaRevision>>,
|
||||
) -> FlowyResult<DashMap<String, Arc<GridBlockRevisionEditor>>> {
|
||||
let editor_map = DashMap::new();
|
||||
for block_rev in block_revs {
|
||||
|
@ -1,7 +1,7 @@
|
||||
use bytes::Bytes;
|
||||
use flowy_error::{FlowyError, FlowyResult};
|
||||
use flowy_grid_data_model::entities::RowOrder;
|
||||
use flowy_grid_data_model::revision::{CellRevision, GridBlockRevisionData, RowMetaChangeset, RowRevision};
|
||||
use flowy_grid_data_model::revision::{CellRevision, GridBlockRevision, RowMetaChangeset, RowRevision};
|
||||
use flowy_revision::{RevisionCloudService, RevisionCompactor, RevisionManager, RevisionObjectBuilder};
|
||||
use flowy_sync::client_grid::{GridBlockMetaChange, GridBlockRevisionPad};
|
||||
use flowy_sync::entities::revision::Revision;
|
||||
@ -42,7 +42,7 @@ impl GridBlockRevisionEditor {
|
||||
})
|
||||
}
|
||||
|
||||
pub async fn duplicate_block(&self, duplicated_block_id: &str) -> GridBlockRevisionData {
|
||||
pub async fn duplicate_block(&self, duplicated_block_id: &str) -> GridBlockRevision {
|
||||
self.pad.read().await.duplicate_data(duplicated_block_id).await
|
||||
}
|
||||
|
||||
|
@ -46,7 +46,7 @@ impl GridRevisionEditor {
|
||||
let grid_pad = rev_manager.load::<GridPadBuilder>(Some(cloud)).await?;
|
||||
let rev_manager = Arc::new(rev_manager);
|
||||
let grid_pad = Arc::new(RwLock::new(grid_pad));
|
||||
let block_revs = grid_pad.read().await.get_block_revs();
|
||||
let block_revs = grid_pad.read().await.get_block_meta_revs();
|
||||
|
||||
let block_meta_manager = Arc::new(GridBlockManager::new(grid_id, &user, block_revs, persistence).await?);
|
||||
Ok(Arc::new(Self {
|
||||
@ -243,14 +243,14 @@ impl GridRevisionEditor {
|
||||
Ok(field_revs)
|
||||
}
|
||||
|
||||
pub async fn create_block(&self, grid_block: GridBlockRevision) -> FlowyResult<()> {
|
||||
pub async fn create_block(&self, block_meta_rev: GridBlockMetaRevision) -> FlowyResult<()> {
|
||||
let _ = self
|
||||
.modify(|grid_pad| Ok(grid_pad.create_block_rev(grid_block)?))
|
||||
.modify(|grid_pad| Ok(grid_pad.create_block_meta_rev(block_meta_rev)?))
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn update_block(&self, changeset: GridBlockRevisionChangeset) -> FlowyResult<()> {
|
||||
pub async fn update_block(&self, changeset: GridBlockMetaRevisionChangeset) -> FlowyResult<()> {
|
||||
let _ = self
|
||||
.modify(|grid_pad| Ok(grid_pad.update_block_rev(changeset)?))
|
||||
.await?;
|
||||
@ -270,7 +270,7 @@ impl GridRevisionEditor {
|
||||
let row_count = self.block_manager.create_row(&block_id, row_rev, start_row_id).await?;
|
||||
|
||||
// update block row count
|
||||
let changeset = GridBlockRevisionChangeset::from_row_count(&block_id, row_count);
|
||||
let changeset = GridBlockMetaRevisionChangeset::from_row_count(&block_id, row_count);
|
||||
let _ = self.update_block(changeset).await?;
|
||||
Ok(row_order)
|
||||
}
|
||||
@ -408,9 +408,9 @@ impl GridRevisionEditor {
|
||||
make_grid_blocks(block_ids, block_snapshots)
|
||||
}
|
||||
|
||||
pub async fn get_block_metas(&self) -> FlowyResult<Vec<Arc<GridBlockRevision>>> {
|
||||
let grid_blocks = self.grid_pad.read().await.get_block_revs();
|
||||
Ok(grid_blocks)
|
||||
pub async fn get_block_meta_revs(&self) -> FlowyResult<Vec<Arc<GridBlockMetaRevision>>> {
|
||||
let block_meta_revs = self.grid_pad.read().await.get_block_meta_revs();
|
||||
Ok(block_meta_revs)
|
||||
}
|
||||
|
||||
pub async fn delete_rows(&self, row_orders: Vec<RowOrder>) -> FlowyResult<()> {
|
||||
@ -425,7 +425,7 @@ impl GridRevisionEditor {
|
||||
let pad_read_guard = self.grid_pad.read().await;
|
||||
let field_orders = pad_read_guard.get_field_orders();
|
||||
let mut block_orders = vec![];
|
||||
for block_rev in pad_read_guard.get_block_revs() {
|
||||
for block_rev in pad_read_guard.get_block_meta_revs() {
|
||||
let row_orders = self.block_manager.get_row_orders(&block_rev.block_id).await?;
|
||||
let block_order = GridBlock {
|
||||
id: block_rev.block_id.clone(),
|
||||
@ -469,7 +469,7 @@ impl GridRevisionEditor {
|
||||
.grid_pad
|
||||
.read()
|
||||
.await
|
||||
.get_block_revs()
|
||||
.get_block_meta_revs()
|
||||
.iter()
|
||||
.map(|block_rev| block_rev.block_id.clone())
|
||||
.collect::<Vec<String>>(),
|
||||
@ -519,8 +519,8 @@ impl GridRevisionEditor {
|
||||
|
||||
pub async fn duplicate_grid(&self) -> FlowyResult<BuildGridContext> {
|
||||
let grid_pad = self.grid_pad.read().await;
|
||||
let original_blocks = grid_pad.get_block_revs();
|
||||
let (duplicated_fields, duplicated_blocks) = grid_pad.duplicate_grid_meta().await;
|
||||
let original_blocks = grid_pad.get_block_meta_revs();
|
||||
let (duplicated_fields, duplicated_blocks) = grid_pad.duplicate_grid_block_meta().await;
|
||||
|
||||
let mut blocks_meta_data = vec![];
|
||||
if original_blocks.len() == duplicated_blocks.len() {
|
||||
@ -576,7 +576,7 @@ impl GridRevisionEditor {
|
||||
}
|
||||
|
||||
async fn block_id(&self) -> FlowyResult<String> {
|
||||
match self.grid_pad.read().await.get_block_revs().last() {
|
||||
match self.grid_pad.read().await.get_block_meta_revs().last() {
|
||||
None => Err(FlowyError::internal().context("There is no grid block in this grid")),
|
||||
Some(grid_block) => Ok(grid_block.block_id.clone()),
|
||||
}
|
||||
|
@ -220,6 +220,14 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
/// The data is encoded by protobuf or utf8. You should choose the corresponding decode struct to parse it.
|
||||
///
|
||||
/// For example:
|
||||
///
|
||||
/// * Use DateCellData to parse the data when the FieldType is Date.
|
||||
/// * Use URLCellData to parse the data when the FieldType is URL.
|
||||
/// * Use String to parse the data when the FieldType is RichText, Number, or Checkbox.
|
||||
/// * Check out the implementation of CellDataOperation trait for more information.
|
||||
#[derive(Default)]
|
||||
pub struct DecodedCellData {
|
||||
pub data: Vec<u8>,
|
||||
|
@ -1,13 +1,13 @@
|
||||
use crate::grid::script::EditorScript::*;
|
||||
use crate::grid::script::*;
|
||||
use flowy_grid_data_model::revision::{GridBlockRevision, GridBlockRevisionChangeset};
|
||||
use flowy_grid_data_model::revision::{GridBlockMetaRevision, GridBlockMetaRevisionChangeset};
|
||||
|
||||
#[tokio::test]
|
||||
async fn grid_create_block() {
|
||||
let grid_block = GridBlockRevision::new();
|
||||
let block_meta_rev = GridBlockMetaRevision::new();
|
||||
let scripts = vec![
|
||||
AssertBlockCount(1),
|
||||
CreateBlock { block: grid_block },
|
||||
CreateBlock { block: block_meta_rev },
|
||||
AssertBlockCount(2),
|
||||
];
|
||||
GridEditorTest::new().await.run_scripts(scripts).await;
|
||||
@ -15,10 +15,10 @@ async fn grid_create_block() {
|
||||
|
||||
#[tokio::test]
|
||||
async fn grid_update_block() {
|
||||
let grid_block = GridBlockRevision::new();
|
||||
let mut cloned_grid_block = grid_block.clone();
|
||||
let changeset = GridBlockRevisionChangeset {
|
||||
block_id: grid_block.block_id.clone(),
|
||||
let block_meta_rev = GridBlockMetaRevision::new();
|
||||
let mut cloned_grid_block = block_meta_rev.clone();
|
||||
let changeset = GridBlockMetaRevisionChangeset {
|
||||
block_id: block_meta_rev.block_id.clone(),
|
||||
start_row_index: Some(2),
|
||||
row_count: Some(10),
|
||||
};
|
||||
@ -28,7 +28,7 @@ async fn grid_update_block() {
|
||||
|
||||
let scripts = vec![
|
||||
AssertBlockCount(1),
|
||||
CreateBlock { block: grid_block },
|
||||
CreateBlock { block: block_meta_rev },
|
||||
UpdateBlock { changeset },
|
||||
AssertBlockCount(2),
|
||||
AssertBlockEqual {
|
||||
|
@ -31,10 +31,10 @@ pub enum EditorScript {
|
||||
field_rev: FieldRevision,
|
||||
},
|
||||
CreateBlock {
|
||||
block: GridBlockRevision,
|
||||
block: GridBlockMetaRevision,
|
||||
},
|
||||
UpdateBlock {
|
||||
changeset: GridBlockRevisionChangeset,
|
||||
changeset: GridBlockMetaRevisionChangeset,
|
||||
},
|
||||
AssertBlockCount(usize),
|
||||
AssertBlock {
|
||||
@ -44,7 +44,7 @@ pub enum EditorScript {
|
||||
},
|
||||
AssertBlockEqual {
|
||||
block_index: usize,
|
||||
block: GridBlockRevision,
|
||||
block: GridBlockMetaRevision,
|
||||
},
|
||||
CreateEmptyRow,
|
||||
CreateRow {
|
||||
@ -87,7 +87,7 @@ pub struct GridEditorTest {
|
||||
pub grid_id: String,
|
||||
pub editor: Arc<GridRevisionEditor>,
|
||||
pub field_revs: Vec<FieldRevision>,
|
||||
pub grid_block_revs: Vec<GridBlockRevision>,
|
||||
pub grid_block_revs: Vec<GridBlockMetaRevision>,
|
||||
pub row_revs: Vec<Arc<RowRevision>>,
|
||||
pub field_count: usize,
|
||||
|
||||
@ -103,7 +103,7 @@ impl GridEditorTest {
|
||||
let test = ViewTest::new_grid_view(&sdk, view_data.to_vec()).await;
|
||||
let editor = sdk.grid_manager.open_grid(&test.view.id).await.unwrap();
|
||||
let field_revs = editor.get_field_revs::<FieldOrder>(None).await.unwrap();
|
||||
let grid_blocks = editor.get_block_metas().await.unwrap();
|
||||
let grid_blocks = editor.get_block_meta_revs().await.unwrap();
|
||||
let row_revs = editor.grid_block_snapshots(None).await.unwrap().pop().unwrap().row_revs;
|
||||
assert_eq!(row_revs.len(), 3);
|
||||
assert_eq!(grid_blocks.len(), 1);
|
||||
@ -172,13 +172,13 @@ impl GridEditorTest {
|
||||
}
|
||||
EditorScript::CreateBlock { block } => {
|
||||
self.editor.create_block(block).await.unwrap();
|
||||
self.grid_block_revs = self.editor.get_block_metas().await.unwrap();
|
||||
self.grid_block_revs = self.editor.get_block_meta_revs().await.unwrap();
|
||||
}
|
||||
EditorScript::UpdateBlock { changeset: change } => {
|
||||
self.editor.update_block(change).await.unwrap();
|
||||
}
|
||||
EditorScript::AssertBlockCount(count) => {
|
||||
assert_eq!(self.editor.get_block_metas().await.unwrap().len(), count);
|
||||
assert_eq!(self.editor.get_block_meta_revs().await.unwrap().len(), count);
|
||||
}
|
||||
EditorScript::AssertBlock {
|
||||
block_index,
|
||||
@ -189,7 +189,7 @@ impl GridEditorTest {
|
||||
assert_eq!(self.grid_block_revs[block_index].start_row_index, start_row_index);
|
||||
}
|
||||
EditorScript::AssertBlockEqual { block_index, block } => {
|
||||
let blocks = self.editor.get_block_metas().await.unwrap();
|
||||
let blocks = self.editor.get_block_meta_revs().await.unwrap();
|
||||
let compared_block = blocks[block_index].clone();
|
||||
assert_eq!(compared_block, block);
|
||||
}
|
||||
@ -197,7 +197,7 @@ impl GridEditorTest {
|
||||
let row_order = self.editor.create_row(None).await.unwrap();
|
||||
self.row_order_by_row_id.insert(row_order.row_id.clone(), row_order);
|
||||
self.row_revs = self.get_row_revs().await;
|
||||
self.grid_block_revs = self.editor.get_block_metas().await.unwrap();
|
||||
self.grid_block_revs = self.editor.get_block_meta_revs().await.unwrap();
|
||||
}
|
||||
EditorScript::CreateRow { payload: context } => {
|
||||
let row_orders = self.editor.insert_rows(vec![context]).await.unwrap();
|
||||
@ -205,7 +205,7 @@ impl GridEditorTest {
|
||||
self.row_order_by_row_id.insert(row_order.row_id.clone(), row_order);
|
||||
}
|
||||
self.row_revs = self.get_row_revs().await;
|
||||
self.grid_block_revs = self.editor.get_block_metas().await.unwrap();
|
||||
self.grid_block_revs = self.editor.get_block_meta_revs().await.unwrap();
|
||||
}
|
||||
EditorScript::UpdateRow { changeset: change } => self.editor.update_row(change).await.unwrap(),
|
||||
EditorScript::DeleteRows { row_ids } => {
|
||||
@ -216,7 +216,7 @@ impl GridEditorTest {
|
||||
|
||||
self.editor.delete_rows(row_orders).await.unwrap();
|
||||
self.row_revs = self.get_row_revs().await;
|
||||
self.grid_block_revs = self.editor.get_block_metas().await.unwrap();
|
||||
self.grid_block_revs = self.editor.get_block_meta_revs().await.unwrap();
|
||||
}
|
||||
EditorScript::AssertRow { expected_row } => {
|
||||
let row = &*self
|
||||
|
Reference in New Issue
Block a user