grid_mock_data.rs 9.4 KB

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