board_mock_data.rs 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. use collab_database::database::{gen_database_id, gen_database_view_id, gen_row_id, DatabaseData};
  2. use collab_database::views::{DatabaseLayout, DatabaseView};
  3. use flowy_database2::services::field_settings::DatabaseFieldSettingsMapBuilder;
  4. use strum::IntoEnumIterator;
  5. use flowy_database2::entities::FieldType;
  6. use flowy_database2::services::field::checklist_type_option::ChecklistTypeOption;
  7. use flowy_database2::services::field::{
  8. DateFormat, DateTypeOption, FieldBuilder, MultiSelectTypeOption, SelectOption, SelectOptionColor,
  9. SingleSelectTypeOption, TimeFormat, TimestampTypeOption,
  10. };
  11. use crate::database::database_editor::TestRowBuilder;
  12. use crate::database::mock_data::{COMPLETED, FACEBOOK, GOOGLE, PAUSED, PLANNED, TWITTER};
  13. // Kanban board unit test mock data
  14. pub fn make_test_board() -> DatabaseData {
  15. let mut fields = vec![];
  16. let mut rows = vec![];
  17. // Iterate through the FieldType to create the corresponding Field.
  18. for field_type in FieldType::iter() {
  19. match field_type {
  20. FieldType::RichText => {
  21. let text_field = FieldBuilder::from_field_type(field_type.clone())
  22. .name("Name")
  23. .visibility(true)
  24. .primary(true)
  25. .build();
  26. fields.push(text_field);
  27. },
  28. FieldType::Number => {
  29. // Number
  30. let number_field = FieldBuilder::from_field_type(field_type.clone())
  31. .name("Price")
  32. .visibility(true)
  33. .build();
  34. fields.push(number_field);
  35. },
  36. FieldType::DateTime => {
  37. // Date
  38. let date_type_option = DateTypeOption {
  39. date_format: DateFormat::US,
  40. time_format: TimeFormat::TwentyFourHour,
  41. timezone_id: "Etc/UTC".to_owned(),
  42. };
  43. let name = "Time";
  44. let date_field = FieldBuilder::new(field_type.clone(), date_type_option)
  45. .name(name)
  46. .visibility(true)
  47. .build();
  48. fields.push(date_field);
  49. },
  50. FieldType::LastEditedTime | FieldType::CreatedTime => {
  51. // LastEditedTime and CreatedTime
  52. let date_type_option = TimestampTypeOption {
  53. date_format: DateFormat::US,
  54. time_format: TimeFormat::TwentyFourHour,
  55. include_time: true,
  56. field_type: field_type.clone(),
  57. };
  58. let name = match field_type {
  59. FieldType::LastEditedTime => "Last Modified",
  60. FieldType::CreatedTime => "Created At",
  61. _ => "",
  62. };
  63. let date_field = FieldBuilder::new(field_type.clone(), date_type_option)
  64. .name(name)
  65. .visibility(true)
  66. .build();
  67. fields.push(date_field);
  68. },
  69. FieldType::SingleSelect => {
  70. // Single Select
  71. let option1 = SelectOption::with_color(COMPLETED, SelectOptionColor::Purple);
  72. let option2 = SelectOption::with_color(PLANNED, SelectOptionColor::Orange);
  73. let option3 = SelectOption::with_color(PAUSED, SelectOptionColor::Yellow);
  74. let mut single_select_type_option = SingleSelectTypeOption::default();
  75. single_select_type_option
  76. .options
  77. .extend(vec![option1, option2, option3]);
  78. let single_select_field = FieldBuilder::new(field_type.clone(), single_select_type_option)
  79. .name("Status")
  80. .visibility(true)
  81. .build();
  82. fields.push(single_select_field);
  83. },
  84. FieldType::MultiSelect => {
  85. // MultiSelect
  86. let option1 = SelectOption::with_color(GOOGLE, SelectOptionColor::Purple);
  87. let option2 = SelectOption::with_color(FACEBOOK, SelectOptionColor::Orange);
  88. let option3 = SelectOption::with_color(TWITTER, SelectOptionColor::Yellow);
  89. let mut type_option = MultiSelectTypeOption::default();
  90. type_option.options.extend(vec![option1, option2, option3]);
  91. let multi_select_field = FieldBuilder::new(field_type.clone(), type_option)
  92. .name("Platform")
  93. .visibility(true)
  94. .build();
  95. fields.push(multi_select_field);
  96. },
  97. FieldType::Checkbox => {
  98. // Checkbox
  99. let checkbox_field = FieldBuilder::from_field_type(field_type.clone())
  100. .name("is urgent")
  101. .visibility(true)
  102. .build();
  103. fields.push(checkbox_field);
  104. },
  105. FieldType::URL => {
  106. // URL
  107. let url = FieldBuilder::from_field_type(field_type.clone())
  108. .name("link")
  109. .visibility(true)
  110. .build();
  111. fields.push(url);
  112. },
  113. FieldType::Checklist => {
  114. // let option1 = SelectOption::with_color(FIRST_THING, SelectOptionColor::Purple);
  115. // let option2 = SelectOption::with_color(SECOND_THING, SelectOptionColor::Orange);
  116. // let option3 = SelectOption::with_color(THIRD_THING, SelectOptionColor::Yellow);
  117. let type_option = ChecklistTypeOption::default();
  118. // type_option.options.extend(vec![option1, option2, option3]);
  119. let checklist_field = FieldBuilder::new(field_type.clone(), type_option)
  120. .name("TODO")
  121. .visibility(true)
  122. .build();
  123. fields.push(checklist_field);
  124. },
  125. }
  126. }
  127. let field_settings =
  128. DatabaseFieldSettingsMapBuilder::new(fields.clone(), DatabaseLayout::Board).build();
  129. // We have many assumptions base on the number of the rows, so do not change the number of the loop.
  130. for i in 0..5 {
  131. let mut row_builder = TestRowBuilder::new(gen_row_id(), &fields);
  132. match i {
  133. 0 => {
  134. for field_type in FieldType::iter() {
  135. match field_type {
  136. FieldType::RichText => row_builder.insert_text_cell("A"),
  137. FieldType::Number => row_builder.insert_number_cell("1"),
  138. // 1647251762 => Mar 14,2022
  139. FieldType::DateTime => {
  140. row_builder.insert_date_cell(1647251762, None, None, &field_type)
  141. },
  142. FieldType::SingleSelect => {
  143. row_builder.insert_single_select_cell(|mut options| options.remove(0))
  144. },
  145. FieldType::MultiSelect => row_builder
  146. .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(0)]),
  147. FieldType::Checkbox => row_builder.insert_checkbox_cell("true"),
  148. FieldType::URL => row_builder.insert_url_cell("https://appflowy.io"),
  149. _ => "".to_owned(),
  150. };
  151. }
  152. },
  153. 1 => {
  154. for field_type in FieldType::iter() {
  155. match field_type {
  156. FieldType::RichText => row_builder.insert_text_cell("B"),
  157. FieldType::Number => row_builder.insert_number_cell("2"),
  158. // 1647251762 => Mar 14,2022
  159. FieldType::DateTime => {
  160. row_builder.insert_date_cell(1647251762, None, None, &field_type)
  161. },
  162. FieldType::SingleSelect => {
  163. row_builder.insert_single_select_cell(|mut options| options.remove(0))
  164. },
  165. FieldType::MultiSelect => row_builder
  166. .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(0)]),
  167. FieldType::Checkbox => row_builder.insert_checkbox_cell("true"),
  168. _ => "".to_owned(),
  169. };
  170. }
  171. },
  172. 2 => {
  173. for field_type in FieldType::iter() {
  174. match field_type {
  175. FieldType::RichText => row_builder.insert_text_cell("C"),
  176. FieldType::Number => row_builder.insert_number_cell("3"),
  177. // 1647251762 => Mar 14,2022
  178. FieldType::DateTime => {
  179. row_builder.insert_date_cell(1647251762, None, None, &field_type)
  180. },
  181. FieldType::SingleSelect => {
  182. row_builder.insert_single_select_cell(|mut options| options.remove(1))
  183. },
  184. FieldType::MultiSelect => {
  185. row_builder.insert_multi_select_cell(|mut options| vec![options.remove(0)])
  186. },
  187. FieldType::Checkbox => row_builder.insert_checkbox_cell("false"),
  188. FieldType::URL => {
  189. row_builder.insert_url_cell("https://github.com/AppFlowy-IO/AppFlowy")
  190. },
  191. _ => "".to_owned(),
  192. };
  193. }
  194. },
  195. 3 => {
  196. for field_type in FieldType::iter() {
  197. match field_type {
  198. FieldType::RichText => row_builder.insert_text_cell("DA"),
  199. FieldType::Number => row_builder.insert_number_cell("4"),
  200. FieldType::DateTime => {
  201. row_builder.insert_date_cell(1668704685, None, None, &field_type)
  202. },
  203. FieldType::SingleSelect => {
  204. row_builder.insert_single_select_cell(|mut options| options.remove(1))
  205. },
  206. FieldType::Checkbox => row_builder.insert_checkbox_cell("false"),
  207. FieldType::URL => row_builder.insert_url_cell("https://appflowy.io"),
  208. _ => "".to_owned(),
  209. };
  210. }
  211. },
  212. 4 => {
  213. for field_type in FieldType::iter() {
  214. match field_type {
  215. FieldType::RichText => row_builder.insert_text_cell("AE"),
  216. FieldType::Number => row_builder.insert_number_cell(""),
  217. FieldType::DateTime => {
  218. row_builder.insert_date_cell(1668359085, None, None, &field_type)
  219. },
  220. FieldType::SingleSelect => {
  221. row_builder.insert_single_select_cell(|mut options| options.remove(2))
  222. },
  223. FieldType::Checkbox => row_builder.insert_checkbox_cell("false"),
  224. _ => "".to_owned(),
  225. };
  226. }
  227. },
  228. _ => {},
  229. }
  230. let row = row_builder.build();
  231. rows.push(row);
  232. }
  233. let view = DatabaseView {
  234. id: gen_database_view_id(),
  235. database_id: gen_database_id(),
  236. name: "".to_string(),
  237. layout: DatabaseLayout::Board,
  238. layout_settings: Default::default(),
  239. filters: vec![],
  240. group_settings: vec![],
  241. sorts: vec![],
  242. row_orders: vec![],
  243. field_orders: vec![],
  244. created_at: 0,
  245. modified_at: 0,
  246. field_settings,
  247. };
  248. DatabaseData { view, fields, rows }
  249. }