board_mock_data.rs 10 KB

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