util.rs 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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("Name")
  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. // date
  42. let date_type_option = DateTypeOptionBuilder::default();
  43. let date_field = FieldBuilder::new(date_type_option)
  44. .name("Date")
  45. .visibility(true)
  46. .build();
  47. let date_field_id = date_field.id.clone();
  48. let timestamp = timestamp();
  49. grid_builder.add_field(date_field);
  50. // single select
  51. let in_progress_option = SelectOptionPB::new("In progress");
  52. let not_started_option = SelectOptionPB::new("Not started");
  53. let done_option = SelectOptionPB::new("Done");
  54. let single_select_type_option = SingleSelectTypeOptionBuilder::default()
  55. .add_option(not_started_option.clone())
  56. .add_option(in_progress_option)
  57. .add_option(done_option);
  58. let single_select_field = FieldBuilder::new(single_select_type_option)
  59. .name("Status")
  60. .visibility(true)
  61. .build();
  62. let single_select_field_id = single_select_field.id.clone();
  63. grid_builder.add_field(single_select_field);
  64. // MultiSelect
  65. let apple_option = SelectOptionPB::new("Apple");
  66. let banana_option = SelectOptionPB::new("Banana");
  67. let pear_option = SelectOptionPB::new("Pear");
  68. let multi_select_type_option = MultiSelectTypeOptionBuilder::default()
  69. .add_option(banana_option.clone())
  70. .add_option(apple_option.clone())
  71. .add_option(pear_option);
  72. let multi_select_field = FieldBuilder::new(multi_select_type_option)
  73. .name("Fruit")
  74. .visibility(true)
  75. .build();
  76. let multi_select_field_id = multi_select_field.id.clone();
  77. grid_builder.add_field(multi_select_field);
  78. // Number
  79. let number_type_option = NumberTypeOptionBuilder::default().set_format(NumberFormat::USD);
  80. let number_field = FieldBuilder::new(number_type_option)
  81. .name("Price")
  82. .visibility(true)
  83. .build();
  84. let number_field_id = number_field.id.clone();
  85. grid_builder.add_field(number_field);
  86. // Checkbox
  87. let checkbox_type_option = CheckboxTypeOptionBuilder::default();
  88. let checkbox_field = FieldBuilder::new(checkbox_type_option).name("Reimbursement").build();
  89. let checkbox_field_id = checkbox_field.id.clone();
  90. grid_builder.add_field(checkbox_field);
  91. // Url
  92. let url_type_option = URLTypeOptionBuilder::default();
  93. let url_field = FieldBuilder::new(url_type_option).name("Shop Link").build();
  94. let url_field_id = url_field.id.clone();
  95. grid_builder.add_field(url_field);
  96. // Insert rows
  97. for i in 0..10 {
  98. // insert single select
  99. let mut row_builder = RowRevisionBuilder::new(grid_builder.block_id(), grid_builder.field_revs());
  100. row_builder.insert_select_option_cell(&single_select_field_id, not_started_option.id.clone());
  101. // insert multi select
  102. row_builder.insert_select_option_cell(&multi_select_field_id, apple_option.id.clone());
  103. row_builder.insert_select_option_cell(&multi_select_field_id, banana_option.id.clone());
  104. // insert text
  105. row_builder.insert_text_cell(&text_field_id, format!("Card {}", i));
  106. // insert date
  107. row_builder.insert_date_cell(&date_field_id, timestamp);
  108. // number
  109. row_builder.insert_number_cell(&number_field_id, i);
  110. // checkbox
  111. row_builder.insert_checkbox_cell(&checkbox_field_id, i % 2 == 0);
  112. // url
  113. row_builder.insert_url_cell(&url_field_id, "https://appflowy.io".to_string());
  114. let row = row_builder.build();
  115. grid_builder.add_row(row);
  116. }
  117. grid_builder.build()
  118. }