chore: add get type option data handler

This commit is contained in:
appflowy
2022-05-09 13:23:03 +08:00
parent cb0a86893b
commit 13cb7eeb24
19 changed files with 399 additions and 70 deletions

View File

@ -128,6 +128,22 @@ pub(crate) async fn get_field_context_handler(
data_result(edit_context)
}
#[tracing::instrument(level = "debug", skip(data, manager), err)]
pub(crate) async fn get_field_type_option_data_handler(
data: Data<GetEditFieldContextPayload>,
manager: AppData<Arc<GridManager>>,
) -> DataResult<FieldTypeOptionData, FlowyError> {
let params = data.into_inner();
let editor = manager.get_grid_editor(&params.grid_id)?;
let field_meta = get_or_create_field_meta(params.field_id, &params.field_type, editor).await?;
let type_option_data = get_type_option_data(&field_meta, &field_meta.field_type).await?;
data_result(FieldTypeOptionData {
field_id: field_meta.id.clone(),
type_option_data,
})
}
#[tracing::instrument(level = "debug", skip(data, manager), err)]
pub(crate) async fn move_item_handler(
data: Data<MoveItemPayload>,
@ -147,12 +163,7 @@ async fn make_field_edit_context(
field_meta: Option<FieldMeta>,
) -> FlowyResult<EditFieldContext> {
let field_meta = field_meta.unwrap_or(get_or_create_field_meta(field_id, &field_type, editor).await?);
let s = field_meta
.get_type_option_str(None)
.unwrap_or_else(|| default_type_option_builder_from_type(&field_type).entry().json_str());
let builder = type_option_builder_from_json_str(&s, &field_meta.field_type);
let type_option_data = builder.entry().protobuf_bytes().to_vec();
let type_option_data = get_type_option_data(&field_meta, &field_type).await?;
let field: Field = field_meta.into();
Ok(EditFieldContext {
grid_id: grid_id.to_string(),
@ -161,6 +172,16 @@ async fn make_field_edit_context(
})
}
async fn get_type_option_data(field_meta: &FieldMeta, field_type: &FieldType) -> FlowyResult<Vec<u8>> {
let s = field_meta
.get_type_option_str(&field_type)
.unwrap_or_else(|| default_type_option_builder_from_type(&field_type).entry().json_str());
let builder = type_option_builder_from_json_str(&s, &field_meta.field_type);
let type_option_data = builder.entry().protobuf_bytes().to_vec();
Ok(type_option_data)
}
async fn get_or_create_field_meta(
field_id: Option<String>,
field_type: &FieldType,
@ -221,7 +242,7 @@ pub(crate) async fn create_row_handler(
Ok(())
}
#[tracing::instrument(level = "debug", skip_all, err)]
// #[tracing::instrument(level = "debug", skip_all, err)]
pub(crate) async fn get_cell_handler(
data: Data<CellIdentifierPayload>,
manager: AppData<Arc<GridManager>>,

View File

@ -19,6 +19,7 @@ pub fn create(grid_manager: Arc<GridManager>) -> Module {
.event(GridEvent::DuplicateField, duplicate_field_handler)
.event(GridEvent::GetEditFieldContext, get_field_context_handler)
.event(GridEvent::MoveItem, move_item_handler)
.event(GridEvent::GetFieldTypeOption, get_field_type_option_data_handler)
// Row
.event(GridEvent::CreateRow, create_row_handler)
.event(GridEvent::GetRow, get_row_handler)
@ -69,6 +70,9 @@ pub enum GridEvent {
#[event(input = "MoveItemPayload")]
MoveItem = 17,
#[event(input = "GetEditFieldContextPayload", output = "FieldTypeOptionData")]
GetFieldTypeOption = 18,
#[event(input = "CreateSelectOptionPayload", output = "SelectOption")]
NewSelectOption = 30,

View File

@ -35,6 +35,7 @@ pub enum GridEvent {
DuplicateField = 15,
GetEditFieldContext = 16,
MoveItem = 17,
GetFieldTypeOption = 18,
NewSelectOption = 30,
GetSelectOptionContext = 31,
UpdateSelectOption = 32,
@ -64,6 +65,7 @@ impl ::protobuf::ProtobufEnum for GridEvent {
15 => ::std::option::Option::Some(GridEvent::DuplicateField),
16 => ::std::option::Option::Some(GridEvent::GetEditFieldContext),
17 => ::std::option::Option::Some(GridEvent::MoveItem),
18 => ::std::option::Option::Some(GridEvent::GetFieldTypeOption),
30 => ::std::option::Option::Some(GridEvent::NewSelectOption),
31 => ::std::option::Option::Some(GridEvent::GetSelectOptionContext),
32 => ::std::option::Option::Some(GridEvent::UpdateSelectOption),
@ -90,6 +92,7 @@ impl ::protobuf::ProtobufEnum for GridEvent {
GridEvent::DuplicateField,
GridEvent::GetEditFieldContext,
GridEvent::MoveItem,
GridEvent::GetFieldTypeOption,
GridEvent::NewSelectOption,
GridEvent::GetSelectOptionContext,
GridEvent::UpdateSelectOption,
@ -128,16 +131,17 @@ impl ::protobuf::reflect::ProtobufValue for GridEvent {
}
static file_descriptor_proto_data: &'static [u8] = b"\
\n\x0fevent_map.proto*\xfd\x02\n\tGridEvent\x12\x0f\n\x0bGetGridData\x10\
\n\x0fevent_map.proto*\x95\x03\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\x0bInsertField\x10\x0c\x12\x0f\n\x0bDe\
leteField\x10\r\x12\x11\n\rSwitchToField\x10\x0e\x12\x12\n\x0eDuplicateF\
ield\x10\x0f\x12\x17\n\x13GetEditFieldContext\x10\x10\x12\x0c\n\x08MoveI\
tem\x10\x11\x12\x13\n\x0fNewSelectOption\x10\x1e\x12\x1a\n\x16GetSelectO\
ptionContext\x10\x1f\x12\x16\n\x12UpdateSelectOption\x10\x20\x12\r\n\tCr\
eateRow\x102\x12\n\n\x06GetRow\x103\x12\r\n\tDeleteRow\x104\x12\x10\n\
\x0cDuplicateRow\x105\x12\x0b\n\x07GetCell\x10F\x12\x0e\n\nUpdateCell\
\x10G\x12\x1a\n\x16UpdateCellSelectOption\x10Hb\x06proto3\
tem\x10\x11\x12\x16\n\x12GetFieldTypeOption\x10\x12\x12\x13\n\x0fNewSele\
ctOption\x10\x1e\x12\x1a\n\x16GetSelectOptionContext\x10\x1f\x12\x16\n\
\x12UpdateSelectOption\x10\x20\x12\r\n\tCreateRow\x102\x12\n\n\x06GetRow\
\x103\x12\r\n\tDeleteRow\x104\x12\x10\n\x0cDuplicateRow\x105\x12\x0b\n\
\x07GetCell\x10F\x12\x0e\n\nUpdateCell\x10G\x12\x1a\n\x16UpdateCellSelec\
tOption\x10Hb\x06proto3\
";
static file_descriptor_proto_lazy: ::protobuf::rt::LazyV2<::protobuf::descriptor::FileDescriptorProto> = ::protobuf::rt::LazyV2::INIT;

View File

@ -11,6 +11,7 @@ enum GridEvent {
DuplicateField = 15;
GetEditFieldContext = 16;
MoveItem = 17;
GetFieldTypeOption = 18;
NewSelectOption = 30;
GetSelectOptionContext = 31;
UpdateSelectOption = 32;

View File

@ -121,7 +121,6 @@ pub fn apply_cell_data_changeset<T: Into<CellDataChangeset>>(
// Ok(s)
// }
#[tracing::instrument(level = "trace", skip(field_meta, data), fields(content))]
pub fn decode_cell_data(data: String, field_meta: &FieldMeta, field_type: &FieldType) -> Option<String> {
let s = match field_type {
FieldType::RichText => field_meta

View File

@ -36,7 +36,6 @@ pub fn make_cell_by_field_id(
Some((field_id, cell))
}
#[allow(dead_code)]
pub fn make_cell(field_id: &str, field_meta: &FieldMeta, row_meta: &RowMeta) -> Option<Cell> {
let cell_meta = row_meta.cells.get(field_id)?.clone();
let content = decode_cell_data(cell_meta.data, field_meta, &field_meta.field_type)?;