util.rs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. use crate::entities::FieldType;
  2. use crate::services::field::*;
  3. use crate::services::row::RowRevisionBuilder;
  4. use flowy_grid_data_model::revision::BuildGridContext;
  5. use flowy_sync::client_grid::GridBuilder;
  6. use lib_infra::util::timestamp;
  7. pub fn make_default_grid() -> BuildGridContext {
  8. let mut grid_builder = GridBuilder::new();
  9. // text
  10. let text_field = FieldBuilder::new(RichTextTypeOptionBuilder::default())
  11. .name("Name")
  12. .visibility(true)
  13. .primary(true)
  14. .build();
  15. grid_builder.add_field(text_field);
  16. // single select
  17. let single_select = SingleSelectTypeOptionBuilder::default();
  18. let single_select_field = FieldBuilder::new(single_select).name("Type").visibility(true).build();
  19. grid_builder.add_field(single_select_field);
  20. // checkbox
  21. let checkbox_field = FieldBuilder::from_field_type(&FieldType::Checkbox)
  22. .name("Done")
  23. .visibility(true)
  24. .build();
  25. grid_builder.add_field(checkbox_field);
  26. grid_builder.add_empty_row();
  27. grid_builder.add_empty_row();
  28. grid_builder.add_empty_row();
  29. grid_builder.build()
  30. }
  31. pub fn make_default_board() -> BuildGridContext {
  32. let mut grid_builder = GridBuilder::new();
  33. // text
  34. let text_field = FieldBuilder::new(RichTextTypeOptionBuilder::default())
  35. .name("Description")
  36. .visibility(true)
  37. .primary(true)
  38. .build();
  39. let text_field_id = text_field.id.clone();
  40. grid_builder.add_field(text_field);
  41. // single select
  42. let to_do_option = SelectOptionPB::with_color("To Do", SelectOptionColorPB::Purple);
  43. let doing_option = SelectOptionPB::with_color("Doing", SelectOptionColorPB::Orange);
  44. let done_option = SelectOptionPB::with_color("Done", SelectOptionColorPB::Yellow);
  45. let single_select_type_option = SingleSelectTypeOptionBuilder::default()
  46. .add_option(to_do_option.clone())
  47. .add_option(doing_option.clone())
  48. .add_option(done_option.clone());
  49. let single_select_field = FieldBuilder::new(single_select_type_option)
  50. .name("Status")
  51. .visibility(true)
  52. .build();
  53. let single_select_field_id = single_select_field.id.clone();
  54. grid_builder.add_field(single_select_field);
  55. // MultiSelect
  56. let work_option = SelectOptionPB::with_color("Work", SelectOptionColorPB::Aqua);
  57. let travel_option = SelectOptionPB::with_color("Travel", SelectOptionColorPB::Green);
  58. let fun_option = SelectOptionPB::with_color("Fun", SelectOptionColorPB::Lime);
  59. let health_option = SelectOptionPB::with_color("Health", SelectOptionColorPB::Pink);
  60. let multi_select_type_option = MultiSelectTypeOptionBuilder::default()
  61. .add_option(travel_option.clone())
  62. .add_option(work_option.clone())
  63. .add_option(fun_option.clone())
  64. .add_option(health_option.clone());
  65. let multi_select_field = FieldBuilder::new(multi_select_type_option)
  66. .name("Tags")
  67. .visibility(true)
  68. .build();
  69. let multi_select_field_id = multi_select_field.id.clone();
  70. grid_builder.add_field(multi_select_field);
  71. for i in 0..3 {
  72. let mut row_builder = RowRevisionBuilder::new(grid_builder.block_id(), grid_builder.field_revs());
  73. row_builder.insert_select_option_cell(&single_select_field_id, to_do_option.id.clone());
  74. match i {
  75. 0 => {
  76. row_builder.insert_text_cell(&text_field_id, "Update AppFlowy Website".to_string());
  77. row_builder.insert_select_option_cell(&multi_select_field_id, work_option.id.clone());
  78. }
  79. 1 => {
  80. row_builder.insert_text_cell(&text_field_id, "Learn French".to_string());
  81. let mut options = SelectOptionIds::new();
  82. options.push(fun_option.id.clone());
  83. options.push(travel_option.id.clone());
  84. row_builder.insert_select_option_cell(&multi_select_field_id, options.to_string());
  85. }
  86. 2 => {
  87. row_builder.insert_text_cell(&text_field_id, "Exercise 4x/week".to_string());
  88. row_builder.insert_select_option_cell(&multi_select_field_id, fun_option.id.clone());
  89. }
  90. _ => {}
  91. }
  92. let row = row_builder.build();
  93. grid_builder.add_row(row);
  94. }
  95. for i in 0..3 {
  96. let mut row_builder = RowRevisionBuilder::new(grid_builder.block_id(), grid_builder.field_revs());
  97. row_builder.insert_select_option_cell(&single_select_field_id, doing_option.id.clone());
  98. match i {
  99. 0 => {
  100. row_builder.insert_text_cell(&text_field_id, "Learn how to swim".to_string());
  101. row_builder.insert_select_option_cell(&multi_select_field_id, fun_option.id.clone());
  102. }
  103. 1 => {
  104. row_builder.insert_text_cell(&text_field_id, "Meditate 10 mins each day".to_string());
  105. row_builder.insert_select_option_cell(&multi_select_field_id, health_option.id.clone());
  106. }
  107. 2 => {
  108. row_builder.insert_text_cell(&text_field_id, "Write atomic essays ".to_string());
  109. let mut options = SelectOptionIds::new();
  110. options.push(fun_option.id.clone());
  111. options.push(work_option.id.clone());
  112. row_builder.insert_select_option_cell(&multi_select_field_id, options.to_string());
  113. }
  114. _ => {}
  115. }
  116. let row = row_builder.build();
  117. grid_builder.add_row(row);
  118. }
  119. for i in 0..2 {
  120. let mut row_builder = RowRevisionBuilder::new(grid_builder.block_id(), grid_builder.field_revs());
  121. row_builder.insert_select_option_cell(&single_select_field_id, done_option.id.clone());
  122. match i {
  123. 0 => {
  124. row_builder.insert_text_cell(&text_field_id, "Publish an article".to_string());
  125. row_builder.insert_select_option_cell(&multi_select_field_id, work_option.id.clone());
  126. }
  127. 1 => {
  128. row_builder.insert_text_cell(&text_field_id, "Visit Chicago".to_string());
  129. let mut options = SelectOptionIds::new();
  130. options.push(travel_option.id.clone());
  131. options.push(fun_option.id.clone());
  132. row_builder.insert_select_option_cell(&multi_select_field_id, options.to_string());
  133. }
  134. _ => {}
  135. }
  136. let row = row_builder.build();
  137. grid_builder.add_row(row);
  138. }
  139. grid_builder.build()
  140. }
  141. #[allow(dead_code)]
  142. pub fn make_default_board2() -> BuildGridContext {
  143. let mut grid_builder = GridBuilder::new();
  144. // text
  145. let text_field = FieldBuilder::new(RichTextTypeOptionBuilder::default())
  146. .name("Name")
  147. .visibility(true)
  148. .primary(true)
  149. .build();
  150. let text_field_id = text_field.id.clone();
  151. grid_builder.add_field(text_field);
  152. // date
  153. let date_type_option = DateTypeOptionBuilder::default();
  154. let date_field = FieldBuilder::new(date_type_option)
  155. .name("Date")
  156. .visibility(true)
  157. .build();
  158. let date_field_id = date_field.id.clone();
  159. let timestamp = timestamp();
  160. grid_builder.add_field(date_field);
  161. // single select
  162. let in_progress_option = SelectOptionPB::new("In progress");
  163. let not_started_option = SelectOptionPB::new("Not started");
  164. let done_option = SelectOptionPB::new("Done");
  165. let single_select_type_option = SingleSelectTypeOptionBuilder::default()
  166. .add_option(not_started_option.clone())
  167. .add_option(in_progress_option)
  168. .add_option(done_option);
  169. let single_select_field = FieldBuilder::new(single_select_type_option)
  170. .name("Status")
  171. .visibility(true)
  172. .build();
  173. let single_select_field_id = single_select_field.id.clone();
  174. grid_builder.add_field(single_select_field);
  175. // MultiSelect
  176. let apple_option = SelectOptionPB::new("Apple");
  177. let banana_option = SelectOptionPB::new("Banana");
  178. let pear_option = SelectOptionPB::new("Pear");
  179. let multi_select_type_option = MultiSelectTypeOptionBuilder::default()
  180. .add_option(banana_option.clone())
  181. .add_option(apple_option.clone())
  182. .add_option(pear_option);
  183. let multi_select_field = FieldBuilder::new(multi_select_type_option)
  184. .name("Fruit")
  185. .visibility(true)
  186. .build();
  187. let multi_select_field_id = multi_select_field.id.clone();
  188. grid_builder.add_field(multi_select_field);
  189. // Number
  190. let number_type_option = NumberTypeOptionBuilder::default().set_format(NumberFormat::USD);
  191. let number_field = FieldBuilder::new(number_type_option)
  192. .name("Price")
  193. .visibility(true)
  194. .build();
  195. let number_field_id = number_field.id.clone();
  196. grid_builder.add_field(number_field);
  197. // Checkbox
  198. let checkbox_type_option = CheckboxTypeOptionBuilder::default();
  199. let checkbox_field = FieldBuilder::new(checkbox_type_option).name("Reimbursement").build();
  200. let checkbox_field_id = checkbox_field.id.clone();
  201. grid_builder.add_field(checkbox_field);
  202. // Url
  203. let url_type_option = URLTypeOptionBuilder::default();
  204. let url_field = FieldBuilder::new(url_type_option).name("Shop Link").build();
  205. let url_field_id = url_field.id.clone();
  206. grid_builder.add_field(url_field);
  207. // Insert rows
  208. for i in 0..10 {
  209. // insert single select
  210. let mut row_builder = RowRevisionBuilder::new(grid_builder.block_id(), grid_builder.field_revs());
  211. row_builder.insert_select_option_cell(&single_select_field_id, not_started_option.id.clone());
  212. // insert multi select
  213. row_builder.insert_select_option_cell(&multi_select_field_id, apple_option.id.clone());
  214. row_builder.insert_select_option_cell(&multi_select_field_id, banana_option.id.clone());
  215. // insert text
  216. row_builder.insert_text_cell(&text_field_id, format!("Card {}", i));
  217. // insert date
  218. row_builder.insert_date_cell(&date_field_id, timestamp);
  219. // number
  220. row_builder.insert_number_cell(&number_field_id, i);
  221. // checkbox
  222. row_builder.insert_checkbox_cell(&checkbox_field_id, i % 2 == 0);
  223. // url
  224. row_builder.insert_url_cell(&url_field_id, "https://appflowy.io".to_string());
  225. let row = row_builder.build();
  226. grid_builder.add_row(row);
  227. }
  228. grid_builder.build()
  229. }