user_default.rs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. use crate::entities::{view_pb_with_child_views, WorkspacePB};
  2. use crate::view_ext::{gen_view_id, ViewDataProcessorMap};
  3. use chrono::Utc;
  4. use collab_folder::core::{Belonging, Belongings, FolderData, View, ViewLayout, Workspace};
  5. use flowy_document::editor::initial_read_me;
  6. use nanoid::nanoid;
  7. use std::collections::HashMap;
  8. pub struct DefaultFolderBuilder();
  9. impl DefaultFolderBuilder {
  10. pub async fn build(
  11. uid: i64,
  12. view_processors: &ViewDataProcessorMap,
  13. ) -> (FolderData, WorkspacePB) {
  14. let time = Utc::now().timestamp();
  15. let workspace_id = gen_workspace_id();
  16. let view_id = gen_view_id();
  17. let child_view_id = gen_view_id();
  18. let child_view_layout = ViewLayout::Document;
  19. let child_view = View {
  20. id: child_view_id.clone(),
  21. bid: view_id.clone(),
  22. name: "Read me".to_string(),
  23. desc: "".to_string(),
  24. belongings: Default::default(),
  25. created_at: time,
  26. layout: child_view_layout.clone(),
  27. database_id: None,
  28. };
  29. // create the document
  30. let data = initial_read_me().into_bytes();
  31. let processor = view_processors.get(&child_view_layout).unwrap();
  32. processor
  33. .create_view_with_custom_data(
  34. uid,
  35. &child_view.id,
  36. &child_view.name,
  37. data,
  38. child_view_layout.clone(),
  39. HashMap::default(),
  40. )
  41. .await
  42. .unwrap();
  43. let view = View {
  44. id: view_id,
  45. bid: workspace_id.clone(),
  46. name: "⭐️ Getting started".to_string(),
  47. desc: "".to_string(),
  48. belongings: Belongings::new(vec![Belonging {
  49. id: child_view.id.clone(),
  50. name: child_view.name.clone(),
  51. }]),
  52. created_at: time,
  53. layout: ViewLayout::Document,
  54. database_id: None,
  55. };
  56. let workspace = Workspace {
  57. id: workspace_id,
  58. name: "Workspace".to_string(),
  59. belongings: Belongings::new(vec![Belonging {
  60. id: view.id.clone(),
  61. name: view.name.clone(),
  62. }]),
  63. created_at: time,
  64. };
  65. let workspace_pb = workspace_pb_from_workspace(&workspace, &view, &child_view);
  66. (
  67. FolderData {
  68. current_workspace: workspace.id.clone(),
  69. current_view: child_view_id,
  70. workspaces: vec![workspace],
  71. views: vec![view, child_view],
  72. },
  73. workspace_pb,
  74. )
  75. }
  76. }
  77. pub fn gen_workspace_id() -> String {
  78. nanoid!(10)
  79. }
  80. fn workspace_pb_from_workspace(
  81. workspace: &Workspace,
  82. view: &View,
  83. child_view: &View,
  84. ) -> WorkspacePB {
  85. let view_pb = view_pb_with_child_views(view.clone(), vec![child_view.clone()]);
  86. WorkspacePB {
  87. id: workspace.id.clone(),
  88. name: workspace.name.clone(),
  89. views: vec![view_pb],
  90. create_time: workspace.created_at,
  91. }
  92. }