util.rs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. use collab_database::fields::Field;
  2. use flowy_database2::entities::{CreateFieldParams, FieldType};
  3. use flowy_database2::services::field::{
  4. type_option_to_pb, DateCellChangeset, DateFormat, DateTypeOption, FieldBuilder,
  5. RichTextTypeOption, SelectOption, SingleSelectTypeOption, TimeFormat,
  6. };
  7. pub fn create_text_field(grid_id: &str) -> (CreateFieldParams, Field) {
  8. let field_type = FieldType::RichText;
  9. let type_option = RichTextTypeOption::default();
  10. let text_field = FieldBuilder::new(field_type.clone(), type_option.clone())
  11. .name("Name")
  12. .visibility(true)
  13. .primary(true)
  14. .build();
  15. let type_option_data = type_option_to_pb(type_option.into(), &field_type).to_vec();
  16. let params = CreateFieldParams {
  17. view_id: grid_id.to_owned(),
  18. field_type,
  19. type_option_data: Some(type_option_data),
  20. };
  21. (params, text_field)
  22. }
  23. pub fn create_single_select_field(grid_id: &str) -> (CreateFieldParams, Field) {
  24. let field_type = FieldType::SingleSelect;
  25. let mut type_option = SingleSelectTypeOption::default();
  26. type_option.options.push(SelectOption::new("Done"));
  27. type_option.options.push(SelectOption::new("Progress"));
  28. let single_select_field = FieldBuilder::new(field_type.clone(), type_option.clone())
  29. .name("Name")
  30. .visibility(true)
  31. .build();
  32. let type_option_data = type_option_to_pb(type_option.into(), &field_type).to_vec();
  33. let params = CreateFieldParams {
  34. view_id: grid_id.to_owned(),
  35. field_type,
  36. type_option_data: Some(type_option_data),
  37. };
  38. (params, single_select_field)
  39. }
  40. pub fn create_date_field(grid_id: &str, field_type: FieldType) -> (CreateFieldParams, Field) {
  41. let date_type_option = DateTypeOption {
  42. date_format: DateFormat::US,
  43. time_format: TimeFormat::TwentyFourHour,
  44. field_type: field_type.clone(),
  45. };
  46. let field: Field = match field_type {
  47. FieldType::DateTime => FieldBuilder::new(field_type.clone(), date_type_option.clone())
  48. .name("Date")
  49. .visibility(true)
  50. .build(),
  51. FieldType::UpdatedAt => FieldBuilder::new(field_type.clone(), date_type_option.clone())
  52. .name("Updated At")
  53. .visibility(true)
  54. .build(),
  55. FieldType::CreatedAt => FieldBuilder::new(field_type.clone(), date_type_option.clone())
  56. .name("Created At")
  57. .visibility(true)
  58. .build(),
  59. _ => panic!("Unsupported group field type"),
  60. };
  61. let type_option_data = type_option_to_pb(date_type_option.into(), &field_type).to_vec();
  62. let params = CreateFieldParams {
  63. view_id: grid_id.to_owned(),
  64. field_type,
  65. type_option_data: Some(type_option_data),
  66. };
  67. (params, field)
  68. }
  69. // The grid will contains all existing field types and there are three empty rows in this grid.
  70. pub fn make_date_cell_string(s: &str) -> String {
  71. serde_json::to_string(&DateCellChangeset {
  72. date: Some(s.to_string()),
  73. time: None,
  74. include_time: Some(false),
  75. timezone_id: None,
  76. })
  77. .unwrap()
  78. }