utils.rs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. use flowy_document2::entities::*;
  2. use flowy_test::document_event::OpenDocumentData;
  3. use nanoid::nanoid;
  4. use std::collections::HashMap;
  5. pub fn gen_id() -> String {
  6. nanoid!(10)
  7. }
  8. pub struct ParseDocumentData {
  9. pub doc_id: String,
  10. pub page_id: String,
  11. pub blocks: HashMap<String, BlockPB>,
  12. pub children_map: HashMap<String, ChildrenPB>,
  13. pub first_block_id: String,
  14. }
  15. pub fn parse_document_data(document: OpenDocumentData) -> ParseDocumentData {
  16. let doc_id = document.id.clone();
  17. let data = document.data;
  18. let page_id = data.page_id;
  19. let blocks = data.blocks;
  20. let children_map = data.meta.children_map;
  21. let page_block = blocks.get(&page_id).unwrap();
  22. let children_id = page_block.children_id.clone();
  23. let children = children_map.get(&children_id).unwrap();
  24. let block_id = children.children.get(0).unwrap().to_string();
  25. ParseDocumentData {
  26. doc_id,
  27. page_id,
  28. blocks,
  29. children_map,
  30. first_block_id: block_id,
  31. }
  32. }
  33. pub fn gen_insert_block_action(document: OpenDocumentData) -> BlockActionPB {
  34. let parse_data = parse_document_data(document);
  35. let first_block_id = parse_data.first_block_id;
  36. let block = parse_data.blocks.get(&first_block_id).unwrap();
  37. let page_id = parse_data.page_id;
  38. let data = block.data.clone();
  39. let new_block_id = gen_id();
  40. let new_block = BlockPB {
  41. id: new_block_id,
  42. ty: block.ty.clone(),
  43. data,
  44. parent_id: page_id.clone(),
  45. children_id: gen_id(),
  46. };
  47. BlockActionPB {
  48. action: BlockActionTypePB::Insert,
  49. payload: BlockActionPayloadPB {
  50. block: new_block,
  51. prev_id: Some(first_block_id),
  52. parent_id: Some(page_id),
  53. },
  54. }
  55. }