grid_mock_data.rs 12 KB

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