grid_view.rs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. use crate::revision::{FilterConfiguration, GroupConfiguration};
  2. use nanoid::nanoid;
  3. use serde::{Deserialize, Serialize};
  4. use serde_repr::*;
  5. #[allow(dead_code)]
  6. pub fn gen_grid_view_id() -> String {
  7. nanoid!(6)
  8. }
  9. #[derive(Debug, PartialEq, Eq, Hash, Clone, Serialize_repr, Deserialize_repr)]
  10. #[repr(u8)]
  11. pub enum LayoutRevision {
  12. Table = 0,
  13. Board = 1,
  14. }
  15. impl ToString for LayoutRevision {
  16. fn to_string(&self) -> String {
  17. let layout_rev = self.clone() as u8;
  18. layout_rev.to_string()
  19. }
  20. }
  21. impl std::default::Default for LayoutRevision {
  22. fn default() -> Self {
  23. LayoutRevision::Table
  24. }
  25. }
  26. #[derive(Debug, Clone, Default, Serialize, Deserialize)]
  27. pub struct GridViewRevision {
  28. pub view_id: String,
  29. pub grid_id: String,
  30. pub layout: LayoutRevision,
  31. #[serde(default)]
  32. pub filters: FilterConfiguration,
  33. #[serde(default)]
  34. pub groups: GroupConfiguration,
  35. // // For the moment, we just use the order returned from the GridRevision
  36. // #[allow(dead_code)]
  37. // #[serde(skip, rename = "rows")]
  38. // pub row_orders: Vec<RowOrderRevision>,
  39. }
  40. impl GridViewRevision {
  41. pub fn new(grid_id: String, view_id: String) -> Self {
  42. GridViewRevision {
  43. view_id,
  44. grid_id,
  45. layout: Default::default(),
  46. filters: Default::default(),
  47. groups: Default::default(),
  48. // row_orders: vec![],
  49. }
  50. }
  51. }
  52. #[derive(Debug, Clone, Default, Serialize, Deserialize)]
  53. pub struct RowOrderRevision {
  54. pub row_id: String,
  55. }
  56. #[cfg(test)]
  57. mod tests {
  58. use crate::revision::GridViewRevision;
  59. #[test]
  60. fn grid_view_revision_serde_test() {
  61. let grid_view_revision = GridViewRevision {
  62. view_id: "1".to_string(),
  63. grid_id: "1".to_string(),
  64. layout: Default::default(),
  65. filters: Default::default(),
  66. groups: Default::default(),
  67. };
  68. let s = serde_json::to_string(&grid_view_revision).unwrap();
  69. assert_eq!(
  70. s,
  71. r#"{"view_id":"1","grid_id":"1","layout":0,"filters":[],"groups":[]}"#
  72. );
  73. }
  74. }