template.rs 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. use collab_database::database::{gen_database_id, gen_row_id};
  2. use collab_database::rows::CreateRowParams;
  3. use collab_database::views::{CreateDatabaseParams, DatabaseLayout, LayoutSettings};
  4. use crate::entities::FieldType;
  5. use crate::services::cell::{insert_select_option_cell, insert_text_cell};
  6. use crate::services::field::{
  7. FieldBuilder, SelectOption, SelectOptionColor, SingleSelectTypeOption,
  8. };
  9. use crate::services::field_settings::DatabaseFieldSettingsMapBuilder;
  10. use crate::services::setting::CalendarLayoutSetting;
  11. pub fn make_default_grid(view_id: &str, name: &str) -> CreateDatabaseParams {
  12. let text_field = FieldBuilder::from_field_type(FieldType::RichText)
  13. .name("Name")
  14. .visibility(true)
  15. .primary(true)
  16. .build();
  17. let single_select = FieldBuilder::from_field_type(FieldType::SingleSelect)
  18. .name("Type")
  19. .visibility(true)
  20. .build();
  21. let checkbox_field = FieldBuilder::from_field_type(FieldType::Checkbox)
  22. .name("Done")
  23. .visibility(true)
  24. .build();
  25. let fields = vec![text_field, single_select, checkbox_field];
  26. let field_settings =
  27. DatabaseFieldSettingsMapBuilder::new(fields.clone(), DatabaseLayout::Grid).build();
  28. CreateDatabaseParams {
  29. database_id: gen_database_id(),
  30. view_id: view_id.to_string(),
  31. name: name.to_string(),
  32. layout: DatabaseLayout::Grid,
  33. layout_settings: Default::default(),
  34. filters: vec![],
  35. groups: vec![],
  36. sorts: vec![],
  37. created_rows: vec![
  38. CreateRowParams::new(gen_row_id()),
  39. CreateRowParams::new(gen_row_id()),
  40. CreateRowParams::new(gen_row_id()),
  41. ],
  42. fields,
  43. field_settings,
  44. }
  45. }
  46. pub fn make_default_board(view_id: &str, name: &str) -> CreateDatabaseParams {
  47. // text
  48. let text_field = FieldBuilder::from_field_type(FieldType::RichText)
  49. .name("Description")
  50. .visibility(true)
  51. .primary(true)
  52. .build();
  53. let text_field_id = text_field.id.clone();
  54. // single select
  55. let to_do_option = SelectOption::with_color("To Do", SelectOptionColor::Purple);
  56. let doing_option = SelectOption::with_color("Doing", SelectOptionColor::Orange);
  57. let done_option = SelectOption::with_color("Done", SelectOptionColor::Yellow);
  58. let mut single_select_type_option = SingleSelectTypeOption::default();
  59. single_select_type_option
  60. .options
  61. .extend(vec![to_do_option.clone(), doing_option, done_option]);
  62. let single_select = FieldBuilder::new(FieldType::SingleSelect, single_select_type_option)
  63. .name("Status")
  64. .visibility(true)
  65. .build();
  66. let single_select_field_id = single_select.id.clone();
  67. let mut rows = vec![];
  68. for i in 0..3 {
  69. let mut row = CreateRowParams::new(gen_row_id());
  70. row.cells.insert(
  71. single_select_field_id.clone(),
  72. insert_select_option_cell(vec![to_do_option.id.clone()], &single_select),
  73. );
  74. row.cells.insert(
  75. text_field_id.clone(),
  76. insert_text_cell(format!("Card {}", i + 1), &text_field),
  77. );
  78. rows.push(row);
  79. }
  80. let fields = vec![text_field, single_select];
  81. let field_settings =
  82. DatabaseFieldSettingsMapBuilder::new(fields.clone(), DatabaseLayout::Board).build();
  83. CreateDatabaseParams {
  84. database_id: gen_database_id(),
  85. view_id: view_id.to_string(),
  86. name: name.to_string(),
  87. layout: DatabaseLayout::Board,
  88. layout_settings: Default::default(),
  89. filters: vec![],
  90. groups: vec![],
  91. sorts: vec![],
  92. created_rows: rows,
  93. fields,
  94. field_settings,
  95. }
  96. }
  97. pub fn make_default_calendar(view_id: &str, name: &str) -> CreateDatabaseParams {
  98. // text
  99. let text_field = FieldBuilder::from_field_type(FieldType::RichText)
  100. .name("Title")
  101. .visibility(true)
  102. .primary(true)
  103. .build();
  104. // date
  105. let date_field = FieldBuilder::from_field_type(FieldType::DateTime)
  106. .name("Date")
  107. .visibility(true)
  108. .build();
  109. let date_field_id = date_field.id.clone();
  110. // multi select
  111. let multi_select_field = FieldBuilder::from_field_type(FieldType::MultiSelect)
  112. .name("Tags")
  113. .visibility(true)
  114. .build();
  115. let fields = vec![text_field, date_field, multi_select_field];
  116. let field_settings =
  117. DatabaseFieldSettingsMapBuilder::new(fields.clone(), DatabaseLayout::Calendar).build();
  118. let mut layout_settings = LayoutSettings::default();
  119. layout_settings.insert(
  120. DatabaseLayout::Calendar,
  121. CalendarLayoutSetting::new(date_field_id).into(),
  122. );
  123. CreateDatabaseParams {
  124. database_id: gen_database_id(),
  125. view_id: view_id.to_string(),
  126. name: name.to_string(),
  127. layout: DatabaseLayout::Calendar,
  128. layout_settings,
  129. filters: vec![],
  130. groups: vec![],
  131. sorts: vec![],
  132. created_rows: vec![],
  133. fields,
  134. field_settings,
  135. }
  136. }