board_mock_data.rs 10 KB

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