chore: delete field

This commit is contained in:
appflowy
2022-03-27 09:35:10 +08:00
parent b65b4796d2
commit c7bba01fe5
28 changed files with 540 additions and 397 deletions

View File

@ -1,14 +1,7 @@
use crate::manager::GridManager;
use crate::services::field::type_option_data_from_str;
use flowy_error::FlowyError;
use flowy_grid_data_model::entities::{
CellMetaChangeset, CreateEditFieldContextParams, CreateFieldPayload, CreateRowPayload, EditFieldContext, Field,
FieldChangeset, Grid, GridId, QueryFieldPayload, QueryGridBlocksPayload, QueryRowPayload, RepeatedField,
RepeatedGridBlock, Row,
};
use flowy_grid_data_model::parser::{
CreateFieldParams, CreateRowParams, QueryFieldParams, QueryGridBlocksParams, QueryRowParams,
};
use flowy_grid_data_model::entities::*;
use lib_dispatch::prelude::{data_result, AppData, Data, DataResult};
use std::sync::Arc;
@ -53,10 +46,10 @@ pub(crate) async fn get_fields_handler(
#[tracing::instrument(level = "debug", skip(data, manager), err)]
pub(crate) async fn update_field_handler(
data: Data<FieldChangeset>,
data: Data<FieldChangesetPayload>,
manager: AppData<Arc<GridManager>>,
) -> Result<(), FlowyError> {
let changeset: FieldChangeset = data.into_inner();
let changeset: FieldChangesetParams = data.into_inner().try_into()?;
let editor = manager.get_grid_editor(&changeset.grid_id)?;
let _ = editor.update_field(changeset).await?;
Ok(())
@ -73,6 +66,17 @@ pub(crate) async fn create_field_handler(
Ok(())
}
#[tracing::instrument(level = "debug", skip(data, manager), err)]
pub(crate) async fn delete_field_handler(
data: Data<FieldOrder>,
manager: AppData<Arc<GridManager>>,
) -> Result<(), FlowyError> {
let field_order: FieldOrder = data.into_inner();
let editor = manager.get_grid_editor(&params.grid_id)?;
let _ = editor.delete_field(&field_order.field_id).await?;
Ok(())
}
#[tracing::instrument(level = "debug", skip(data, manager), err)]
pub(crate) async fn create_edit_field_context_handler(
data: Data<CreateEditFieldContextParams>,

View File

@ -13,6 +13,7 @@ pub fn create(grid_manager: Arc<GridManager>) -> Module {
.event(GridEvent::GetFields, get_fields_handler)
.event(GridEvent::UpdateField, update_field_handler)
.event(GridEvent::CreateField, create_field_handler)
.event(GridEvent::DeleteField, create_field_handler)
.event(GridEvent::CreateEditFieldContext, create_edit_field_context_handler)
.event(GridEvent::CreateRow, create_row_handler)
.event(GridEvent::GetRow, get_row_handler)
@ -39,8 +40,11 @@ pub enum GridEvent {
#[event(input = "CreateFieldPayload")]
CreateField = 12,
#[event(input = "FieldOrder")]
DeleteField = 13,
#[event(input = "CreateEditFieldContextParams", output = "EditFieldContext")]
CreateEditFieldContext = 13,
CreateEditFieldContext = 14,
#[event(input = "CreateRowPayload", output = "Row")]
CreateRow = 21,

View File

@ -30,7 +30,8 @@ pub enum GridEvent {
GetFields = 10,
UpdateField = 11,
CreateField = 12,
CreateEditFieldContext = 13,
DeleteField = 13,
CreateEditFieldContext = 14,
CreateRow = 21,
GetRow = 22,
UpdateCell = 30,
@ -48,7 +49,8 @@ impl ::protobuf::ProtobufEnum for GridEvent {
10 => ::std::option::Option::Some(GridEvent::GetFields),
11 => ::std::option::Option::Some(GridEvent::UpdateField),
12 => ::std::option::Option::Some(GridEvent::CreateField),
13 => ::std::option::Option::Some(GridEvent::CreateEditFieldContext),
13 => ::std::option::Option::Some(GridEvent::DeleteField),
14 => ::std::option::Option::Some(GridEvent::CreateEditFieldContext),
21 => ::std::option::Option::Some(GridEvent::CreateRow),
22 => ::std::option::Option::Some(GridEvent::GetRow),
30 => ::std::option::Option::Some(GridEvent::UpdateCell),
@ -63,6 +65,7 @@ impl ::protobuf::ProtobufEnum for GridEvent {
GridEvent::GetFields,
GridEvent::UpdateField,
GridEvent::CreateField,
GridEvent::DeleteField,
GridEvent::CreateEditFieldContext,
GridEvent::CreateRow,
GridEvent::GetRow,
@ -95,11 +98,12 @@ impl ::protobuf::reflect::ProtobufValue for GridEvent {
}
static file_descriptor_proto_data: &'static [u8] = b"\
\n\x0fevent_map.proto*\xa7\x01\n\tGridEvent\x12\x0f\n\x0bGetGridData\x10\
\n\x0fevent_map.proto*\xb8\x01\n\tGridEvent\x12\x0f\n\x0bGetGridData\x10\
\0\x12\x11\n\rGetGridBlocks\x10\x01\x12\r\n\tGetFields\x10\n\x12\x0f\n\
\x0bUpdateField\x10\x0b\x12\x0f\n\x0bCreateField\x10\x0c\x12\x1a\n\x16Cr\
eateEditFieldContext\x10\r\x12\r\n\tCreateRow\x10\x15\x12\n\n\x06GetRow\
\x10\x16\x12\x0e\n\nUpdateCell\x10\x1eb\x06proto3\
\x0bUpdateField\x10\x0b\x12\x0f\n\x0bCreateField\x10\x0c\x12\x0f\n\x0bDe\
leteField\x10\r\x12\x1a\n\x16CreateEditFieldContext\x10\x0e\x12\r\n\tCre\
ateRow\x10\x15\x12\n\n\x06GetRow\x10\x16\x12\x0e\n\nUpdateCell\x10\x1eb\
\x06proto3\
";
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

View File

@ -6,7 +6,8 @@ enum GridEvent {
GetFields = 10;
UpdateField = 11;
CreateField = 12;
CreateEditFieldContext = 13;
DeleteField = 13;
CreateEditFieldContext = 14;
CreateRow = 21;
GetRow = 22;
UpdateCell = 30;

View File

@ -4,9 +4,8 @@ use crate::services::block_meta_editor::GridBlockMetaEditorManager;
use crate::services::field::{type_option_json_str_from_bytes, FieldBuilder};
use crate::services::row::*;
use bytes::Bytes;
use flowy_error::{FlowyError, FlowyResult};
use flowy_error::{ErrorCode, FlowyError, FlowyResult};
use flowy_grid_data_model::entities::*;
use flowy_grid_data_model::parser::CreateFieldParams;
use flowy_revision::{RevisionCloudService, RevisionCompactor, RevisionManager, RevisionObjectBuilder};
use flowy_sync::client_grid::{GridChangeset, GridMetaPad};
use flowy_sync::entities::revision::Revision;
@ -87,8 +86,20 @@ impl ClientGridEditor {
self.pad.read().await.contain_field(field_id)
}
pub async fn update_field(&self, change: FieldChangeset) -> FlowyResult<()> {
let _ = self.modify(|grid| Ok(grid.update_field(change)?)).await?;
pub async fn update_field(&self, mut params: FieldChangesetParams) -> FlowyResult<()> {
if let Some(type_option_data) = params.type_option_data {
match self.pad.read().await.get_field(&params.field_id) {
None => return Err(ErrorCode::FieldDoesNotExist.into()),
Some(field_meta) => {
// The type_option_data is serialized by protobuf. But the type_option_data should be
// serialized by utf-8 encoding. So we must transform the data here.
let type_option_json = type_option_json_str_from_bytes(type_option_data, &field_meta.field_type);
params.type_option_data = Some(type_option_json.as_bytes().to_vec());
}
}
}
let _ = self.modify(|grid| Ok(grid.update_field(params)?)).await?;
let _ = self.notify_did_update_fields().await?;
Ok(())
}

View File

@ -64,7 +64,7 @@ async fn grid_update_field_with_empty_change() {
frozen: None,
visibility: None,
width: None,
type_options: None,
type_option_data: None,
};
let scripts = vec![
@ -95,7 +95,7 @@ async fn grid_update_field() {
frozen: Some(true),
visibility: None,
width: Some(1000),
type_options: Some(single_select_type_options.clone().into()),
type_option_data: Some(single_select_type_options.clone().into()),
};
cloned_field.frozen = true;