setting_builder.rs 2.6 KB

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