setting_entities.rs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. use crate::entities::parser::NotEmptyStr;
  2. use crate::entities::{
  3. CreateFilterParams, CreateFilterPayloadPB, DeleteFilterParams, DeleteFilterPayloadPB, DeleteGroupParams,
  4. DeleteGroupPayloadPB, InsertGroupParams, InsertGroupPayloadPB, RepeatedFilterPB, RepeatedGridGroupConfigurationPB,
  5. };
  6. use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
  7. use flowy_error::ErrorCode;
  8. use grid_rev_model::LayoutRevision;
  9. use std::convert::TryInto;
  10. use strum::IntoEnumIterator;
  11. use strum_macros::EnumIter;
  12. /// [GridSettingPB] defines the setting options for the grid. Such as the filter, group, and sort.
  13. #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
  14. pub struct GridSettingPB {
  15. #[pb(index = 1)]
  16. pub layouts: Vec<GridLayoutPB>,
  17. #[pb(index = 2)]
  18. pub layout_type: GridLayout,
  19. #[pb(index = 3)]
  20. pub filter_configurations: RepeatedFilterPB,
  21. #[pb(index = 4)]
  22. pub group_configurations: RepeatedGridGroupConfigurationPB,
  23. }
  24. #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
  25. pub struct GridLayoutPB {
  26. #[pb(index = 1)]
  27. ty: GridLayout,
  28. }
  29. impl GridLayoutPB {
  30. pub fn all() -> Vec<GridLayoutPB> {
  31. let mut layouts = vec![];
  32. for layout_ty in GridLayout::iter() {
  33. layouts.push(GridLayoutPB { ty: layout_ty })
  34. }
  35. layouts
  36. }
  37. }
  38. #[derive(Debug, Clone, PartialEq, Eq, ProtoBuf_Enum, EnumIter)]
  39. #[repr(u8)]
  40. pub enum GridLayout {
  41. Table = 0,
  42. Board = 1,
  43. }
  44. impl std::default::Default for GridLayout {
  45. fn default() -> Self {
  46. GridLayout::Table
  47. }
  48. }
  49. impl std::convert::From<LayoutRevision> for GridLayout {
  50. fn from(rev: LayoutRevision) -> Self {
  51. match rev {
  52. LayoutRevision::Table => GridLayout::Table,
  53. LayoutRevision::Board => GridLayout::Board,
  54. }
  55. }
  56. }
  57. impl std::convert::From<GridLayout> for LayoutRevision {
  58. fn from(layout: GridLayout) -> Self {
  59. match layout {
  60. GridLayout::Table => LayoutRevision::Table,
  61. GridLayout::Board => LayoutRevision::Board,
  62. }
  63. }
  64. }
  65. #[derive(Default, ProtoBuf)]
  66. pub struct GridSettingChangesetPB {
  67. #[pb(index = 1)]
  68. pub grid_id: String,
  69. #[pb(index = 2)]
  70. pub layout_type: GridLayout,
  71. #[pb(index = 3, one_of)]
  72. pub insert_filter: Option<CreateFilterPayloadPB>,
  73. #[pb(index = 4, one_of)]
  74. pub delete_filter: Option<DeleteFilterPayloadPB>,
  75. #[pb(index = 5, one_of)]
  76. pub insert_group: Option<InsertGroupPayloadPB>,
  77. #[pb(index = 6, one_of)]
  78. pub delete_group: Option<DeleteGroupPayloadPB>,
  79. }
  80. impl TryInto<GridSettingChangesetParams> for GridSettingChangesetPB {
  81. type Error = ErrorCode;
  82. fn try_into(self) -> Result<GridSettingChangesetParams, Self::Error> {
  83. let view_id = NotEmptyStr::parse(self.grid_id)
  84. .map_err(|_| ErrorCode::ViewIdInvalid)?
  85. .0;
  86. let insert_filter = match self.insert_filter {
  87. None => None,
  88. Some(payload) => Some(payload.try_into()?),
  89. };
  90. let delete_filter = match self.delete_filter {
  91. None => None,
  92. Some(payload) => Some(payload.try_into()?),
  93. };
  94. let insert_group = match self.insert_group {
  95. Some(payload) => Some(payload.try_into()?),
  96. None => None,
  97. };
  98. let delete_group = match self.delete_group {
  99. Some(payload) => Some(payload.try_into()?),
  100. None => None,
  101. };
  102. Ok(GridSettingChangesetParams {
  103. grid_id: view_id,
  104. layout_type: self.layout_type.into(),
  105. insert_filter,
  106. delete_filter,
  107. insert_group,
  108. delete_group,
  109. })
  110. }
  111. }
  112. pub struct GridSettingChangesetParams {
  113. pub grid_id: String,
  114. pub layout_type: LayoutRevision,
  115. pub insert_filter: Option<CreateFilterParams>,
  116. pub delete_filter: Option<DeleteFilterParams>,
  117. pub insert_group: Option<InsertGroupParams>,
  118. pub delete_group: Option<DeleteGroupParams>,
  119. }
  120. impl GridSettingChangesetParams {
  121. pub fn is_filter_changed(&self) -> bool {
  122. self.insert_filter.is_some() || self.delete_filter.is_some()
  123. }
  124. }