grid_view.rs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. use crate::{FilterConfiguration, GroupConfiguration, SortConfiguration};
  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. Grid = 0,
  13. Board = 1,
  14. Calendar = 2,
  15. }
  16. impl ToString for LayoutRevision {
  17. fn to_string(&self) -> String {
  18. let layout_rev = self.clone() as u8;
  19. layout_rev.to_string()
  20. }
  21. }
  22. impl std::default::Default for LayoutRevision {
  23. fn default() -> Self {
  24. LayoutRevision::Grid
  25. }
  26. }
  27. #[derive(Debug, Clone, Default, Serialize, Deserialize)]
  28. pub struct DatabaseViewRevision {
  29. pub view_id: String,
  30. pub grid_id: String,
  31. pub layout: LayoutRevision,
  32. #[serde(default)]
  33. pub filters: FilterConfiguration,
  34. #[serde(default)]
  35. pub groups: GroupConfiguration,
  36. #[serde(default)]
  37. pub sorts: SortConfiguration,
  38. }
  39. impl DatabaseViewRevision {
  40. pub fn new(grid_id: String, view_id: String, layout: LayoutRevision) -> Self {
  41. DatabaseViewRevision {
  42. view_id,
  43. grid_id,
  44. layout,
  45. filters: Default::default(),
  46. groups: Default::default(),
  47. sorts: Default::default(),
  48. }
  49. }
  50. pub fn from_json(json: String) -> Result<Self, serde_json::Error> {
  51. serde_json::from_str(&json)
  52. }
  53. }
  54. #[derive(Debug, Clone, Default, Serialize, Deserialize)]
  55. pub struct RowOrderRevision {
  56. pub row_id: String,
  57. }
  58. #[cfg(test)]
  59. mod tests {
  60. use crate::DatabaseViewRevision;
  61. #[test]
  62. fn grid_view_revision_serde_test() {
  63. let grid_view_revision = DatabaseViewRevision {
  64. view_id: "1".to_string(),
  65. grid_id: "1".to_string(),
  66. layout: Default::default(),
  67. filters: Default::default(),
  68. groups: Default::default(),
  69. sorts: 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":[],"sorts":[]}"#
  75. );
  76. }
  77. }