template.rs 4.1 KB

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