grid_view.rs 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. use crate::{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, layout: LayoutRevision) -> Self {
  42. GridViewRevision {
  43. view_id,
  44. grid_id,
  45. layout,
  46. filters: Default::default(),
  47. groups: Default::default(),
  48. // row_orders: vec![],
  49. }
  50. }
  51. pub fn from_json(json: String) -> Result<Self, serde_json::Error> {
  52. serde_json::from_str(&json)
  53. }
  54. }
  55. #[derive(Debug, Clone, Default, Serialize, Deserialize)]
  56. pub struct RowOrderRevision {
  57. pub row_id: String,
  58. }
  59. #[cfg(test)]
  60. mod tests {
  61. use crate::GridViewRevision;
  62. #[test]
  63. fn grid_view_revision_serde_test() {
  64. let grid_view_revision = GridViewRevision {
  65. view_id: "1".to_string(),
  66. grid_id: "1".to_string(),
  67. layout: Default::default(),
  68. filters: Default::default(),
  69. groups: Default::default(),
  70. };
  71. let s = serde_json::to_string(&grid_view_revision).unwrap();
  72. assert_eq!(
  73. s,
  74. r#"{"view_id":"1","grid_id":"1","layout":0,"filters":[],"groups":[]}"#
  75. );
  76. }
  77. }