grid_mock_data.rs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  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 strum::IntoEnumIterator;
  4. use flowy_database2::entities::FieldType;
  5. use flowy_database2::services::field::checklist_type_option::ChecklistTypeOption;
  6. use flowy_database2::services::field::{
  7. DateFormat, DateTypeOption, FieldBuilder, MultiSelectTypeOption, NumberFormat, NumberTypeOption,
  8. SelectOption, SelectOptionColor, SingleSelectTypeOption, TimeFormat,
  9. };
  10. use crate::database::database_editor::TestRowBuilder;
  11. use crate::database::mock_data::{COMPLETED, FACEBOOK, GOOGLE, PAUSED, PLANNED, TWITTER};
  12. pub fn make_test_grid() -> DatabaseData {
  13. let mut fields = vec![];
  14. let mut rows = vec![];
  15. // Iterate through the FieldType to create the corresponding Field.
  16. for field_type in FieldType::iter() {
  17. match field_type {
  18. FieldType::RichText => {
  19. let text_field = FieldBuilder::from_field_type(field_type.clone())
  20. .name("Name")
  21. .visibility(true)
  22. .primary(true)
  23. .build();
  24. fields.push(text_field);
  25. },
  26. FieldType::Number => {
  27. // Number
  28. let mut type_option = NumberTypeOption::default();
  29. type_option.set_format(NumberFormat::USD);
  30. let number_field = FieldBuilder::new(field_type.clone(), type_option)
  31. .name("Price")
  32. .visibility(true)
  33. .build();
  34. fields.push(number_field);
  35. },
  36. FieldType::DateTime | FieldType::LastEditedTime | FieldType::CreatedTime => {
  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. field_type: field_type.clone(),
  43. };
  44. let name = match field_type {
  45. FieldType::DateTime => "Time",
  46. FieldType::LastEditedTime => "Updated At",
  47. FieldType::CreatedTime => "Created At",
  48. _ => "",
  49. };
  50. let date_field = FieldBuilder::new(field_type.clone(), date_type_option)
  51. .name(name)
  52. .visibility(true)
  53. .build();
  54. fields.push(date_field);
  55. },
  56. FieldType::SingleSelect => {
  57. // Single Select
  58. let option1 = SelectOption::with_color(COMPLETED, SelectOptionColor::Purple);
  59. let option2 = SelectOption::with_color(PLANNED, SelectOptionColor::Orange);
  60. let option3 = SelectOption::with_color(PAUSED, SelectOptionColor::Yellow);
  61. let mut single_select_type_option = SingleSelectTypeOption::default();
  62. single_select_type_option
  63. .options
  64. .extend(vec![option1, option2, option3]);
  65. let single_select_field = FieldBuilder::new(field_type.clone(), single_select_type_option)
  66. .name("Status")
  67. .visibility(true)
  68. .build();
  69. fields.push(single_select_field);
  70. },
  71. FieldType::MultiSelect => {
  72. // MultiSelect
  73. let option1 = SelectOption::with_color(GOOGLE, SelectOptionColor::Purple);
  74. let option2 = SelectOption::with_color(FACEBOOK, SelectOptionColor::Orange);
  75. let option3 = SelectOption::with_color(TWITTER, SelectOptionColor::Yellow);
  76. let mut type_option = MultiSelectTypeOption::default();
  77. type_option.options.extend(vec![option1, option2, option3]);
  78. let multi_select_field = FieldBuilder::new(field_type.clone(), type_option)
  79. .name("Platform")
  80. .visibility(true)
  81. .build();
  82. fields.push(multi_select_field);
  83. },
  84. FieldType::Checkbox => {
  85. // Checkbox
  86. let checkbox_field = FieldBuilder::from_field_type(field_type.clone())
  87. .name("is urgent")
  88. .visibility(true)
  89. .build();
  90. fields.push(checkbox_field);
  91. },
  92. FieldType::URL => {
  93. // URL
  94. let url = FieldBuilder::from_field_type(field_type.clone())
  95. .name("link")
  96. .visibility(true)
  97. .build();
  98. fields.push(url);
  99. },
  100. FieldType::Checklist => {
  101. // let option1 = SelectOption::with_color(FIRST_THING, SelectOptionColor::Purple);
  102. // let option2 = SelectOption::with_color(SECOND_THING, SelectOptionColor::Orange);
  103. // let option3 = SelectOption::with_color(THIRD_THING, SelectOptionColor::Yellow);
  104. let type_option = ChecklistTypeOption::default();
  105. // type_option.options.extend(vec![option1, option2, option3]);
  106. let checklist_field = FieldBuilder::new(field_type.clone(), type_option)
  107. .name("TODO")
  108. .visibility(true)
  109. .build();
  110. fields.push(checklist_field);
  111. },
  112. }
  113. }
  114. for i in 0..7 {
  115. let mut row_builder = TestRowBuilder::new(gen_row_id(), &fields);
  116. match i {
  117. 0 => {
  118. for field_type in FieldType::iter() {
  119. match field_type {
  120. FieldType::RichText => row_builder.insert_text_cell("A"),
  121. FieldType::Number => row_builder.insert_number_cell("1"),
  122. FieldType::DateTime | FieldType::LastEditedTime | FieldType::CreatedTime => {
  123. row_builder.insert_date_cell("1647251762", None, None, &field_type)
  124. },
  125. FieldType::MultiSelect => row_builder
  126. .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(0)]),
  127. FieldType::Checkbox => row_builder.insert_checkbox_cell("true"),
  128. FieldType::URL => {
  129. row_builder.insert_url_cell("AppFlowy website - https://www.appflowy.io")
  130. },
  131. FieldType::Checklist => {
  132. row_builder.insert_checklist_cell(vec!["First thing".to_string()])
  133. },
  134. _ => "".to_owned(),
  135. };
  136. }
  137. },
  138. 1 => {
  139. for field_type in FieldType::iter() {
  140. match field_type {
  141. FieldType::RichText => row_builder.insert_text_cell(""),
  142. FieldType::Number => row_builder.insert_number_cell("2"),
  143. FieldType::DateTime | FieldType::LastEditedTime | FieldType::CreatedTime => {
  144. row_builder.insert_date_cell("1647251762", None, None, &field_type)
  145. },
  146. FieldType::MultiSelect => row_builder
  147. .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(1)]),
  148. FieldType::Checkbox => row_builder.insert_checkbox_cell("true"),
  149. _ => "".to_owned(),
  150. };
  151. }
  152. },
  153. 2 => {
  154. for field_type in FieldType::iter() {
  155. match field_type {
  156. FieldType::RichText => row_builder.insert_text_cell("C"),
  157. FieldType::Number => row_builder.insert_number_cell("3"),
  158. FieldType::DateTime | FieldType::LastEditedTime | FieldType::CreatedTime => {
  159. row_builder.insert_date_cell("1647251762", None, None, &field_type)
  160. },
  161. FieldType::SingleSelect => {
  162. row_builder.insert_single_select_cell(|mut options| options.remove(0))
  163. },
  164. FieldType::MultiSelect => row_builder.insert_multi_select_cell(|mut options| {
  165. vec![options.remove(1), options.remove(0), options.remove(0)]
  166. }),
  167. FieldType::Checkbox => row_builder.insert_checkbox_cell("false"),
  168. _ => "".to_owned(),
  169. };
  170. }
  171. },
  172. 3 => {
  173. for field_type in FieldType::iter() {
  174. match field_type {
  175. FieldType::RichText => row_builder.insert_text_cell("DA"),
  176. FieldType::Number => row_builder.insert_number_cell("14"),
  177. FieldType::DateTime | FieldType::LastEditedTime | FieldType::CreatedTime => {
  178. row_builder.insert_date_cell("1668704685", None, None, &field_type)
  179. },
  180. FieldType::SingleSelect => {
  181. row_builder.insert_single_select_cell(|mut options| options.remove(0))
  182. },
  183. FieldType::Checkbox => row_builder.insert_checkbox_cell("false"),
  184. _ => "".to_owned(),
  185. };
  186. }
  187. },
  188. 4 => {
  189. for field_type in FieldType::iter() {
  190. match field_type {
  191. FieldType::RichText => row_builder.insert_text_cell("AE"),
  192. FieldType::Number => row_builder.insert_number_cell(""),
  193. FieldType::DateTime | FieldType::LastEditedTime | FieldType::CreatedTime => {
  194. row_builder.insert_date_cell("1668359085", None, None, &field_type)
  195. },
  196. FieldType::SingleSelect => {
  197. row_builder.insert_single_select_cell(|mut options| options.remove(1))
  198. },
  199. FieldType::MultiSelect => row_builder
  200. .insert_multi_select_cell(|mut options| vec![options.remove(1), options.remove(1)]),
  201. FieldType::Checkbox => row_builder.insert_checkbox_cell("false"),
  202. _ => "".to_owned(),
  203. };
  204. }
  205. },
  206. 5 => {
  207. for field_type in FieldType::iter() {
  208. match field_type {
  209. FieldType::RichText => row_builder.insert_text_cell("AE"),
  210. FieldType::Number => row_builder.insert_number_cell("5"),
  211. FieldType::DateTime | FieldType::LastEditedTime | FieldType::CreatedTime => {
  212. row_builder.insert_date_cell("1671938394", None, None, &field_type)
  213. },
  214. FieldType::SingleSelect => {
  215. row_builder.insert_single_select_cell(|mut options| options.remove(1))
  216. },
  217. FieldType::MultiSelect => {
  218. row_builder.insert_multi_select_cell(|mut options| vec![options.remove(1)])
  219. },
  220. FieldType::Checkbox => row_builder.insert_checkbox_cell("true"),
  221. _ => "".to_owned(),
  222. };
  223. }
  224. },
  225. 6 => {
  226. row_builder.insert_text_cell("CB");
  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::Grid,
  238. ..Default::default()
  239. };
  240. DatabaseData { view, fields, rows }
  241. }
  242. pub fn make_no_date_test_grid() -> DatabaseData {
  243. let mut fields = vec![];
  244. let mut rows = vec![];
  245. // Iterate through the FieldType to create the corresponding Field.
  246. for field_type in FieldType::iter() {
  247. match field_type {
  248. FieldType::RichText => {
  249. let text_field = FieldBuilder::from_field_type(field_type.clone())
  250. .name("Name")
  251. .visibility(true)
  252. .primary(true)
  253. .build();
  254. fields.push(text_field);
  255. },
  256. FieldType::Number => {
  257. // Number
  258. let mut type_option = NumberTypeOption::default();
  259. type_option.set_format(NumberFormat::USD);
  260. let number_field = FieldBuilder::new(field_type.clone(), type_option)
  261. .name("Price")
  262. .visibility(true)
  263. .build();
  264. fields.push(number_field);
  265. },
  266. _ => {},
  267. }
  268. }
  269. for i in 0..3 {
  270. let mut row_builder = TestRowBuilder::new(gen_row_id(), &fields);
  271. match i {
  272. 0 => {
  273. for field_type in FieldType::iter() {
  274. match field_type {
  275. FieldType::RichText => row_builder.insert_text_cell("A"),
  276. FieldType::Number => row_builder.insert_number_cell("1"),
  277. _ => "".to_owned(),
  278. };
  279. }
  280. },
  281. 1 => {
  282. for field_type in FieldType::iter() {
  283. match field_type {
  284. FieldType::RichText => row_builder.insert_text_cell(""),
  285. FieldType::Number => row_builder.insert_number_cell("2"),
  286. _ => "".to_owned(),
  287. };
  288. }
  289. },
  290. 2 => {
  291. for field_type in FieldType::iter() {
  292. match field_type {
  293. FieldType::RichText => row_builder.insert_text_cell("C"),
  294. FieldType::Number => row_builder.insert_number_cell("3"),
  295. _ => "".to_owned(),
  296. };
  297. }
  298. },
  299. _ => {},
  300. }
  301. let row = row_builder.build();
  302. rows.push(row);
  303. }
  304. let view = DatabaseView {
  305. id: gen_database_view_id(),
  306. database_id: gen_database_id(),
  307. name: "".to_string(),
  308. layout: DatabaseLayout::Grid,
  309. ..Default::default()
  310. };
  311. DatabaseData { view, fields, rows }
  312. }