grid_mock_data.rs 12 KB

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