grid_mock_data.rs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331
  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::default_field_settings_by_layout;
  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, NumberFormat, NumberTypeOption,
  9. SelectOption, SelectOptionColor, SingleSelectTypeOption, TimeFormat,
  10. };
  11. use crate::database::database_editor::TestRowBuilder;
  12. use crate::database::mock_data::{COMPLETED, FACEBOOK, GOOGLE, PAUSED, PLANNED, TWITTER};
  13. pub fn make_test_grid() -> DatabaseData {
  14. let mut fields = vec![];
  15. let mut rows = vec![];
  16. let field_settings = default_field_settings_by_layout(DatabaseLayout::Grid);
  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 mut type_option = NumberTypeOption::default();
  31. type_option.set_format(NumberFormat::USD);
  32. let number_field = FieldBuilder::new(field_type.clone(), type_option)
  33. .name("Price")
  34. .visibility(true)
  35. .build();
  36. fields.push(number_field);
  37. },
  38. FieldType::DateTime | FieldType::LastEditedTime | FieldType::CreatedTime => {
  39. // Date
  40. let date_type_option = DateTypeOption {
  41. date_format: DateFormat::US,
  42. time_format: TimeFormat::TwentyFourHour,
  43. timezone_id: "Etc/UTC".to_owned(),
  44. field_type: field_type.clone(),
  45. };
  46. let name = match field_type {
  47. FieldType::DateTime => "Time",
  48. FieldType::LastEditedTime => "Updated At",
  49. FieldType::CreatedTime => "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 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. for i in 0..7 {
  117. let mut row_builder = TestRowBuilder::new(gen_row_id(), &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. FieldType::DateTime | FieldType::LastEditedTime | FieldType::CreatedTime => {
  125. row_builder.insert_date_cell("1647251762", None, None, &field_type)
  126. },
  127. FieldType::MultiSelect => row_builder
  128. .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(0)]),
  129. FieldType::Checkbox => row_builder.insert_checkbox_cell("true"),
  130. FieldType::URL => {
  131. row_builder.insert_url_cell("AppFlowy website - https://www.appflowy.io")
  132. },
  133. FieldType::Checklist => {
  134. row_builder.insert_checklist_cell(vec!["First thing".to_string()])
  135. },
  136. _ => "".to_owned(),
  137. };
  138. }
  139. },
  140. 1 => {
  141. for field_type in FieldType::iter() {
  142. match field_type {
  143. FieldType::RichText => row_builder.insert_text_cell(""),
  144. FieldType::Number => row_builder.insert_number_cell("2"),
  145. FieldType::DateTime | FieldType::LastEditedTime | FieldType::CreatedTime => {
  146. row_builder.insert_date_cell("1647251762", None, None, &field_type)
  147. },
  148. FieldType::MultiSelect => row_builder
  149. .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(1)]),
  150. FieldType::Checkbox => row_builder.insert_checkbox_cell("true"),
  151. _ => "".to_owned(),
  152. };
  153. }
  154. },
  155. 2 => {
  156. for field_type in FieldType::iter() {
  157. match field_type {
  158. FieldType::RichText => row_builder.insert_text_cell("C"),
  159. FieldType::Number => row_builder.insert_number_cell("3"),
  160. FieldType::DateTime | FieldType::LastEditedTime | FieldType::CreatedTime => {
  161. row_builder.insert_date_cell("1647251762", None, None, &field_type)
  162. },
  163. FieldType::SingleSelect => {
  164. row_builder.insert_single_select_cell(|mut options| options.remove(0))
  165. },
  166. FieldType::MultiSelect => row_builder.insert_multi_select_cell(|mut options| {
  167. vec![options.remove(1), options.remove(0), options.remove(0)]
  168. }),
  169. FieldType::Checkbox => row_builder.insert_checkbox_cell("false"),
  170. _ => "".to_owned(),
  171. };
  172. }
  173. },
  174. 3 => {
  175. for field_type in FieldType::iter() {
  176. match field_type {
  177. FieldType::RichText => row_builder.insert_text_cell("DA"),
  178. FieldType::Number => row_builder.insert_number_cell("14"),
  179. FieldType::DateTime | FieldType::LastEditedTime | FieldType::CreatedTime => {
  180. row_builder.insert_date_cell("1668704685", None, None, &field_type)
  181. },
  182. FieldType::SingleSelect => {
  183. row_builder.insert_single_select_cell(|mut options| options.remove(0))
  184. },
  185. FieldType::Checkbox => row_builder.insert_checkbox_cell("false"),
  186. _ => "".to_owned(),
  187. };
  188. }
  189. },
  190. 4 => {
  191. for field_type in FieldType::iter() {
  192. match field_type {
  193. FieldType::RichText => row_builder.insert_text_cell("AE"),
  194. FieldType::Number => row_builder.insert_number_cell(""),
  195. FieldType::DateTime | FieldType::LastEditedTime | FieldType::CreatedTime => {
  196. row_builder.insert_date_cell("1668359085", None, None, &field_type)
  197. },
  198. FieldType::SingleSelect => {
  199. row_builder.insert_single_select_cell(|mut options| options.remove(1))
  200. },
  201. FieldType::MultiSelect => row_builder
  202. .insert_multi_select_cell(|mut options| vec![options.remove(1), options.remove(1)]),
  203. FieldType::Checkbox => row_builder.insert_checkbox_cell("false"),
  204. _ => "".to_owned(),
  205. };
  206. }
  207. },
  208. 5 => {
  209. for field_type in FieldType::iter() {
  210. match field_type {
  211. FieldType::RichText => row_builder.insert_text_cell("AE"),
  212. FieldType::Number => row_builder.insert_number_cell("5"),
  213. FieldType::DateTime | FieldType::LastEditedTime | FieldType::CreatedTime => {
  214. row_builder.insert_date_cell("1671938394", None, None, &field_type)
  215. },
  216. FieldType::SingleSelect => {
  217. row_builder.insert_single_select_cell(|mut options| options.remove(1))
  218. },
  219. FieldType::MultiSelect => {
  220. row_builder.insert_multi_select_cell(|mut options| vec![options.remove(1)])
  221. },
  222. FieldType::Checkbox => row_builder.insert_checkbox_cell("true"),
  223. _ => "".to_owned(),
  224. };
  225. }
  226. },
  227. 6 => {
  228. row_builder.insert_text_cell("CB");
  229. },
  230. _ => {},
  231. }
  232. let row = row_builder.build();
  233. rows.push(row);
  234. }
  235. let view = DatabaseView {
  236. id: gen_database_id(),
  237. database_id: gen_database_view_id(),
  238. name: "".to_string(),
  239. layout: DatabaseLayout::Grid,
  240. field_settings,
  241. ..Default::default()
  242. };
  243. DatabaseData { view, fields, rows }
  244. }
  245. pub fn make_no_date_test_grid() -> DatabaseData {
  246. let mut fields = vec![];
  247. let mut rows = vec![];
  248. let field_settings = default_field_settings_by_layout(DatabaseLayout::Grid);
  249. // Iterate through the FieldType to create the corresponding Field.
  250. for field_type in FieldType::iter() {
  251. match field_type {
  252. FieldType::RichText => {
  253. let text_field = FieldBuilder::from_field_type(field_type.clone())
  254. .name("Name")
  255. .visibility(true)
  256. .primary(true)
  257. .build();
  258. fields.push(text_field);
  259. },
  260. FieldType::Number => {
  261. // Number
  262. let mut type_option = NumberTypeOption::default();
  263. type_option.set_format(NumberFormat::USD);
  264. let number_field = FieldBuilder::new(field_type.clone(), type_option)
  265. .name("Price")
  266. .visibility(true)
  267. .build();
  268. fields.push(number_field);
  269. },
  270. _ => {},
  271. }
  272. }
  273. for i in 0..3 {
  274. let mut row_builder = TestRowBuilder::new(gen_row_id(), &fields);
  275. match i {
  276. 0 => {
  277. for field_type in FieldType::iter() {
  278. match field_type {
  279. FieldType::RichText => row_builder.insert_text_cell("A"),
  280. FieldType::Number => row_builder.insert_number_cell("1"),
  281. _ => "".to_owned(),
  282. };
  283. }
  284. },
  285. 1 => {
  286. for field_type in FieldType::iter() {
  287. match field_type {
  288. FieldType::RichText => row_builder.insert_text_cell(""),
  289. FieldType::Number => row_builder.insert_number_cell("2"),
  290. _ => "".to_owned(),
  291. };
  292. }
  293. },
  294. 2 => {
  295. for field_type in FieldType::iter() {
  296. match field_type {
  297. FieldType::RichText => row_builder.insert_text_cell("C"),
  298. FieldType::Number => row_builder.insert_number_cell("3"),
  299. _ => "".to_owned(),
  300. };
  301. }
  302. },
  303. _ => {},
  304. }
  305. let row = row_builder.build();
  306. rows.push(row);
  307. }
  308. let view = DatabaseView {
  309. id: gen_database_view_id(),
  310. database_id: gen_database_id(),
  311. name: "".to_string(),
  312. layout: DatabaseLayout::Grid,
  313. field_settings,
  314. ..Default::default()
  315. };
  316. DatabaseData { view, fields, rows }
  317. }