setting_builder.rs 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. use crate::entities::{
  2. GridLayout, GridLayoutPB, GridSettingPB, RepeatedGridConfigurationFilterPB, RepeatedGridGroupConfigurationPB,
  3. RepeatedGridSortPB,
  4. };
  5. use flowy_grid_data_model::revision::{FieldRevision, SettingRevision};
  6. use flowy_sync::entities::grid::{CreateFilterParams, DeleteFilterParams, GridSettingChangesetParams};
  7. use std::collections::HashMap;
  8. use std::sync::Arc;
  9. pub struct GridSettingChangesetBuilder {
  10. params: GridSettingChangesetParams,
  11. }
  12. impl GridSettingChangesetBuilder {
  13. pub fn new(grid_id: &str, layout_type: &GridLayout) -> Self {
  14. let params = GridSettingChangesetParams {
  15. grid_id: grid_id.to_string(),
  16. layout_type: layout_type.clone().into(),
  17. insert_filter: None,
  18. delete_filter: None,
  19. insert_group: None,
  20. delete_group: None,
  21. insert_sort: None,
  22. delete_sort: None,
  23. };
  24. Self { params }
  25. }
  26. pub fn insert_filter(mut self, params: CreateFilterParams) -> Self {
  27. self.params.insert_filter = Some(params);
  28. self
  29. }
  30. pub fn delete_filter(mut self, params: DeleteFilterParams) -> Self {
  31. self.params.delete_filter = Some(params);
  32. self
  33. }
  34. pub fn build(self) -> GridSettingChangesetParams {
  35. self.params
  36. }
  37. }
  38. pub fn make_grid_setting(grid_setting_rev: &SettingRevision, field_revs: &[Arc<FieldRevision>]) -> GridSettingPB {
  39. let current_layout_type: GridLayout = grid_setting_rev.layout.clone().into();
  40. let filters_by_field_id = grid_setting_rev
  41. .get_all_filters(field_revs)
  42. .map(|filters_by_field_id| {
  43. filters_by_field_id
  44. .into_iter()
  45. .map(|(k, v)| (k, v.into()))
  46. .collect::<HashMap<String, RepeatedGridConfigurationFilterPB>>()
  47. })
  48. .unwrap_or_default();
  49. let groups_by_field_id = grid_setting_rev
  50. .get_all_groups(field_revs)
  51. .map(|groups_by_field_id| {
  52. groups_by_field_id
  53. .into_iter()
  54. .map(|(k, v)| (k, v.into()))
  55. .collect::<HashMap<String, RepeatedGridGroupConfigurationPB>>()
  56. })
  57. .unwrap_or_default();
  58. let sorts_by_field_id = grid_setting_rev
  59. .get_all_sort()
  60. .map(|sorts_by_field_id| {
  61. sorts_by_field_id
  62. .into_iter()
  63. .map(|(k, v)| (k, v.into()))
  64. .collect::<HashMap<String, RepeatedGridSortPB>>()
  65. })
  66. .unwrap_or_default();
  67. GridSettingPB {
  68. layouts: GridLayoutPB::all(),
  69. current_layout_type,
  70. filter_configuration_by_field_id: filters_by_field_id,
  71. group_configuration_by_field_id: groups_by_field_id,
  72. sorts_by_field_id,
  73. }
  74. }