AppFlowy/frontend/rust-lib/flowy-database2/src/entities/position_entities.rs
Richard Shiue 4e6643eca8
refactor: order object position and field service (#4118)
* refactor: create OrderObjectPositionPB

* refactor: use ObjectOrderPosition for creating rows

* refactor: field backend service

* refactor: use field_id for reordering fields

* style: reorder dependencies

* fix: changes on tauri

* feat: insert row above

* chore: don't pass group_id while duplicating a row
2023-12-11 11:19:20 +08:00

90 lines
2.2 KiB
Rust

use collab_database::views::OrderObjectPosition;
use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
use flowy_error::ErrorCode;
use crate::entities::parser::NotEmptyStr;
#[derive(Debug, Default, ProtoBuf)]
pub struct OrderObjectPositionPB {
#[pb(index = 1)]
pub position: OrderObjectPositionTypePB,
#[pb(index = 2, one_of)]
pub object_id: Option<String>,
}
impl OrderObjectPositionPB {
pub fn start() -> Self {
Self {
position: OrderObjectPositionTypePB::Start,
object_id: None,
}
}
pub fn end() -> Self {
Self {
position: OrderObjectPositionTypePB::End,
object_id: None,
}
}
pub fn before(object_id: String) -> Self {
Self {
position: OrderObjectPositionTypePB::Before,
object_id: Some(object_id),
}
}
pub fn after(object_id: String) -> Self {
Self {
position: OrderObjectPositionTypePB::After,
object_id: Some(object_id),
}
}
}
#[derive(Debug, Default, ProtoBuf_Enum)]
#[repr(u8)]
pub enum OrderObjectPositionTypePB {
#[default]
End = 0,
Start = 1,
Before = 2,
After = 3,
}
impl TryFrom<OrderObjectPositionPB> for OrderObjectPosition {
type Error = ErrorCode;
fn try_from(value: OrderObjectPositionPB) -> Result<Self, Self::Error> {
match value.position {
OrderObjectPositionTypePB::Start => {
if value.object_id.is_some() {
return Err(ErrorCode::InvalidParams);
}
Ok(OrderObjectPosition::Start)
},
OrderObjectPositionTypePB::End => {
if value.object_id.is_some() {
return Err(ErrorCode::InvalidParams);
}
Ok(OrderObjectPosition::End)
},
OrderObjectPositionTypePB::Before => {
let field_id = value.object_id.ok_or(ErrorCode::InvalidParams)?;
let field_id = NotEmptyStr::parse(field_id)
.map_err(|_| ErrorCode::InvalidParams)?
.0;
Ok(OrderObjectPosition::Before(field_id))
},
OrderObjectPositionTypePB::After => {
let field_id = value.object_id.ok_or(ErrorCode::InvalidParams)?;
let field_id = NotEmptyStr::parse(field_id)
.map_err(|_| ErrorCode::InvalidParams)?
.0;
Ok(OrderObjectPosition::After(field_id))
},
}
}
}