mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
95f8b2e9a4
* chore: create redo/undo bridge * chore: update test * chore: review update * chore: review update * chore: react redo/undo * chore: review update * chore: add test * chore: review update * chore: generate document id * chore: update undo/redo * chore: update cargo lock
59 lines
1.6 KiB
Rust
59 lines
1.6 KiB
Rust
use flowy_document2::entities::*;
|
|
use flowy_test::document_event::OpenDocumentData;
|
|
use nanoid::nanoid;
|
|
use std::collections::HashMap;
|
|
|
|
pub fn gen_id() -> String {
|
|
nanoid!(10)
|
|
}
|
|
|
|
pub struct ParseDocumentData {
|
|
pub doc_id: String,
|
|
pub page_id: String,
|
|
pub blocks: HashMap<String, BlockPB>,
|
|
pub children_map: HashMap<String, ChildrenPB>,
|
|
pub first_block_id: String,
|
|
}
|
|
pub fn parse_document_data(document: OpenDocumentData) -> ParseDocumentData {
|
|
let doc_id = document.id.clone();
|
|
let data = document.data;
|
|
let page_id = data.page_id;
|
|
let blocks = data.blocks;
|
|
let children_map = data.meta.children_map;
|
|
let page_block = blocks.get(&page_id).unwrap();
|
|
let children_id = page_block.children_id.clone();
|
|
let children = children_map.get(&children_id).unwrap();
|
|
let block_id = children.children.get(0).unwrap().to_string();
|
|
ParseDocumentData {
|
|
doc_id,
|
|
page_id,
|
|
blocks,
|
|
children_map,
|
|
first_block_id: block_id,
|
|
}
|
|
}
|
|
|
|
pub fn gen_insert_block_action(document: OpenDocumentData) -> BlockActionPB {
|
|
let parse_data = parse_document_data(document);
|
|
let first_block_id = parse_data.first_block_id;
|
|
let block = parse_data.blocks.get(&first_block_id).unwrap();
|
|
let page_id = parse_data.page_id;
|
|
let data = block.data.clone();
|
|
let new_block_id = gen_id();
|
|
let new_block = BlockPB {
|
|
id: new_block_id.clone(),
|
|
ty: block.ty.clone(),
|
|
data,
|
|
parent_id: page_id.clone(),
|
|
children_id: gen_id(),
|
|
};
|
|
BlockActionPB {
|
|
action: BlockActionTypePB::Insert,
|
|
payload: BlockActionPayloadPB {
|
|
block: new_block,
|
|
prev_id: Some(first_block_id),
|
|
parent_id: Some(page_id),
|
|
},
|
|
}
|
|
}
|