mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
chore: add documentation for flowy_grid crate
This commit is contained in:
parent
45397935cf
commit
00785022e8
@ -4,6 +4,14 @@ use flowy_grid_data_model::parser::NotEmptyStr;
|
|||||||
use flowy_grid_data_model::revision::RowRevision;
|
use flowy_grid_data_model::revision::RowRevision;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
|
|
||||||
|
/// [GridBlockPB] contains list of rows. The row here does not contain any data, just the id
|
||||||
|
/// of the row. Check out [GridRowPB] for more details.
|
||||||
|
///
|
||||||
|
///
|
||||||
|
/// A grid can have many rows. Rows are therefore grouped into Blocks in order to make
|
||||||
|
/// things more efficient.
|
||||||
|
/// |
|
||||||
#[derive(Debug, Clone, Default, ProtoBuf)]
|
#[derive(Debug, Clone, Default, ProtoBuf)]
|
||||||
pub struct GridBlockPB {
|
pub struct GridBlockPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
@ -22,6 +30,7 @@ impl GridBlockPB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// [GridRowPB] describes the row belongs to which block and the metadata of the row.
|
||||||
#[derive(Debug, Default, Clone, ProtoBuf)]
|
#[derive(Debug, Default, Clone, ProtoBuf)]
|
||||||
pub struct GridRowPB {
|
pub struct GridRowPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
@ -81,6 +90,8 @@ impl std::convert::From<Vec<GridRowPB>> for RepeatedRowPB {
|
|||||||
Self { items }
|
Self { items }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// [RepeatedGridBlockPB] contains list of [GridBlockPB]
|
||||||
#[derive(Debug, Default, ProtoBuf)]
|
#[derive(Debug, Default, ProtoBuf)]
|
||||||
pub struct RepeatedGridBlockPB {
|
pub struct RepeatedGridBlockPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
@ -194,6 +205,8 @@ impl GridBlockChangesetPB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// [QueryGridBlocksPayloadPB] is used to query the data of the block that belongs to the grid whose
|
||||||
|
/// id is grid_id.
|
||||||
#[derive(ProtoBuf, Default)]
|
#[derive(ProtoBuf, Default)]
|
||||||
pub struct QueryGridBlocksPayloadPB {
|
pub struct QueryGridBlocksPayloadPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
|
@ -121,6 +121,7 @@ impl std::convert::From<Vec<GridCellPB>> for RepeatedCellPB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///
|
||||||
#[derive(Debug, Clone, Default, ProtoBuf)]
|
#[derive(Debug, Clone, Default, ProtoBuf)]
|
||||||
pub struct CellChangesetPB {
|
pub struct CellChangesetPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
|
@ -8,6 +8,8 @@ use std::sync::Arc;
|
|||||||
|
|
||||||
use strum_macros::{Display, EnumCount as EnumCountMacro, EnumIter, EnumString};
|
use strum_macros::{Display, EnumCount as EnumCountMacro, EnumIter, EnumString};
|
||||||
|
|
||||||
|
|
||||||
|
/// [GridFieldPB] defines the field's attributes. Such as the name, field_type, and width. etc.
|
||||||
#[derive(Debug, Clone, Default, ProtoBuf)]
|
#[derive(Debug, Clone, Default, ProtoBuf)]
|
||||||
pub struct GridFieldPB {
|
pub struct GridFieldPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
@ -56,6 +58,8 @@ impl std::convert::From<Arc<FieldRevision>> for GridFieldPB {
|
|||||||
GridFieldPB::from(field_rev)
|
GridFieldPB::from(field_rev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// [GridFieldIdPB] id of the [Field]
|
||||||
#[derive(Debug, Clone, Default, ProtoBuf)]
|
#[derive(Debug, Clone, Default, ProtoBuf)]
|
||||||
pub struct GridFieldIdPB {
|
pub struct GridFieldIdPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
@ -262,6 +266,13 @@ impl TryInto<GridFieldTypeOptionIdParams> for GridFieldTypeOptionIdPB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Certain field types have user-defined options such as color, date format, number format,
|
||||||
|
/// or a list of values for a multi-select list. These options are defined within a specialization
|
||||||
|
/// of the FieldTypeOption class.
|
||||||
|
///
|
||||||
|
/// You could check [this](https://appflowy.gitbook.io/docs/essential-documentation/contribute-to-appflowy/architecture/frontend/grid#fieldtype)
|
||||||
|
/// for more information.
|
||||||
|
///
|
||||||
#[derive(Debug, Default, ProtoBuf)]
|
#[derive(Debug, Default, ProtoBuf)]
|
||||||
pub struct FieldTypeOptionDataPB {
|
pub struct FieldTypeOptionDataPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
@ -274,6 +285,8 @@ pub struct FieldTypeOptionDataPB {
|
|||||||
pub type_option_data: Vec<u8>,
|
pub type_option_data: Vec<u8>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// Collection of the [GridFieldPB]
|
||||||
#[derive(Debug, Default, ProtoBuf)]
|
#[derive(Debug, Default, ProtoBuf)]
|
||||||
pub struct RepeatedGridFieldPB {
|
pub struct RepeatedGridFieldPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
@ -369,6 +382,7 @@ impl TryInto<InsertFieldParams> for InsertFieldPayloadPB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// [UpdateFieldTypeOptionPayloadPB] is used to update the type option data.
|
||||||
#[derive(ProtoBuf, Default)]
|
#[derive(ProtoBuf, Default)]
|
||||||
pub struct UpdateFieldTypeOptionPayloadPB {
|
pub struct UpdateFieldTypeOptionPayloadPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
@ -377,6 +391,7 @@ pub struct UpdateFieldTypeOptionPayloadPB {
|
|||||||
#[pb(index = 2)]
|
#[pb(index = 2)]
|
||||||
pub field_id: String,
|
pub field_id: String,
|
||||||
|
|
||||||
|
/// Check out the [FieldTypeOptionDataPB] for more details.
|
||||||
#[pb(index = 3)]
|
#[pb(index = 3)]
|
||||||
pub type_option_data: Vec<u8>,
|
pub type_option_data: Vec<u8>,
|
||||||
}
|
}
|
||||||
@ -429,6 +444,12 @@ impl TryInto<QueryFieldParams> for QueryFieldPayloadPB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// [FieldChangesetPayloadPB] is used to modify the corresponding field. It defines which property of
|
||||||
|
/// the field can be modified.
|
||||||
|
///
|
||||||
|
/// Pass in None if you don't want to modify a property
|
||||||
|
/// Pass in Some(Value) if you want to modify a property
|
||||||
|
///
|
||||||
#[derive(Debug, Clone, Default, ProtoBuf)]
|
#[derive(Debug, Clone, Default, ProtoBuf)]
|
||||||
pub struct FieldChangesetPayloadPB {
|
pub struct FieldChangesetPayloadPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
|
@ -2,6 +2,8 @@ use crate::entities::{GridBlockPB, GridFieldIdPB};
|
|||||||
use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
|
use flowy_derive::{ProtoBuf, ProtoBuf_Enum};
|
||||||
use flowy_error::ErrorCode;
|
use flowy_error::ErrorCode;
|
||||||
use flowy_grid_data_model::parser::NotEmptyStr;
|
use flowy_grid_data_model::parser::NotEmptyStr;
|
||||||
|
|
||||||
|
/// [GridPB] describes how many fields and blocks the grid has
|
||||||
#[derive(Debug, Clone, Default, ProtoBuf)]
|
#[derive(Debug, Clone, Default, ProtoBuf)]
|
||||||
pub struct GridPB {
|
pub struct GridPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
|
@ -12,6 +12,8 @@ use std::convert::TryInto;
|
|||||||
use strum::IntoEnumIterator;
|
use strum::IntoEnumIterator;
|
||||||
use strum_macros::EnumIter;
|
use strum_macros::EnumIter;
|
||||||
|
|
||||||
|
|
||||||
|
/// [GridSettingPB] defines the setting options for the grid. Such as the filter, group, and sort.
|
||||||
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
|
#[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)]
|
||||||
pub struct GridSettingPB {
|
pub struct GridSettingPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
|
@ -42,63 +42,136 @@ pub fn create(grid_manager: Arc<GridManager>) -> Module {
|
|||||||
module
|
module
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// [GridEvent] defines events that are used to interact with the Grid. You could check [this](https://appflowy.gitbook.io/docs/essential-documentation/contribute-to-appflowy/architecture/backend/protobuf)
|
||||||
|
/// out, it includes how to use these annotations: input, output, etc.
|
||||||
#[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)]
|
#[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)]
|
||||||
#[event_err = "FlowyError"]
|
#[event_err = "FlowyError"]
|
||||||
pub enum GridEvent {
|
pub enum GridEvent {
|
||||||
|
/// [GetGrid] event is used to get the [GridPB]
|
||||||
|
///
|
||||||
|
/// The event handler accepts [GridIdPB] and return [GridPB] if there is no errors.
|
||||||
|
///
|
||||||
#[event(input = "GridIdPB", output = "GridPB")]
|
#[event(input = "GridIdPB", output = "GridPB")]
|
||||||
GetGrid = 0,
|
GetGrid = 0,
|
||||||
|
|
||||||
|
/// [GetGridBlocks] event is used to get the grid's block.
|
||||||
|
///
|
||||||
|
/// The event handler accepts [QueryGridBlocksPayloadPB] and return [RepeatedGridBlockPB]
|
||||||
|
/// if there is no errors.
|
||||||
#[event(input = "QueryGridBlocksPayloadPB", output = "RepeatedGridBlockPB")]
|
#[event(input = "QueryGridBlocksPayloadPB", output = "RepeatedGridBlockPB")]
|
||||||
GetGridBlocks = 1,
|
GetGridBlocks = 1,
|
||||||
|
|
||||||
|
/// [GetGridSetting] event is used to get the grid's setting.
|
||||||
|
///
|
||||||
|
/// The event handler accepts [GridIdPB] and return [GridSettingPB]
|
||||||
|
/// if there is no errors.
|
||||||
#[event(input = "GridIdPB", output = "GridSettingPB")]
|
#[event(input = "GridIdPB", output = "GridSettingPB")]
|
||||||
GetGridSetting = 2,
|
GetGridSetting = 2,
|
||||||
|
|
||||||
|
/// [UpdateGridSetting] event is used to update the grid's setting.
|
||||||
|
///
|
||||||
|
/// The event handler accepts [GridIdPB] and return errors if failed to modify the grid's setting.
|
||||||
#[event(input = "GridIdPB", input = "GridSettingChangesetPayloadPB")]
|
#[event(input = "GridIdPB", input = "GridSettingChangesetPayloadPB")]
|
||||||
UpdateGridSetting = 3,
|
UpdateGridSetting = 3,
|
||||||
|
|
||||||
|
/// [GetFields] event is used to get the grid's setting.
|
||||||
|
///
|
||||||
|
/// The event handler accepts [QueryFieldPayloadPB] and return [RepeatedGridFieldPB]
|
||||||
|
/// if there is no errors.
|
||||||
#[event(input = "QueryFieldPayloadPB", output = "RepeatedGridFieldPB")]
|
#[event(input = "QueryFieldPayloadPB", output = "RepeatedGridFieldPB")]
|
||||||
GetFields = 10,
|
GetFields = 10,
|
||||||
|
|
||||||
|
/// [UpdateField] event is used to update the field attributes.
|
||||||
|
///
|
||||||
|
/// The event handler accepts [FieldChangesetPayloadPB] and return errors if failed to modify the
|
||||||
|
/// field.
|
||||||
#[event(input = "FieldChangesetPayloadPB")]
|
#[event(input = "FieldChangesetPayloadPB")]
|
||||||
UpdateField = 11,
|
UpdateField = 11,
|
||||||
|
|
||||||
|
|
||||||
|
/// [UpdateFieldTypeOption] event is used to update the field's type option data. Certain field
|
||||||
|
/// types have user-defined options such as color, date format, number format, or a list of values
|
||||||
|
/// for a multi-select list. These options are defined within a specialization of the
|
||||||
|
/// FieldTypeOption class.
|
||||||
|
///
|
||||||
|
/// Check out [this](https://appflowy.gitbook.io/docs/essential-documentation/contribute-to-appflowy/architecture/frontend/grid#fieldtype)
|
||||||
|
/// for more information.
|
||||||
|
///
|
||||||
|
/// The event handler accepts [UpdateFieldTypeOptionPayloadPB] and return errors if failed to modify the
|
||||||
|
/// field.
|
||||||
#[event(input = "UpdateFieldTypeOptionPayloadPB")]
|
#[event(input = "UpdateFieldTypeOptionPayloadPB")]
|
||||||
UpdateFieldTypeOption = 12,
|
UpdateFieldTypeOption = 12,
|
||||||
|
|
||||||
|
/// [InsertField] event is used to insert a new field. If the field is already exists, the event
|
||||||
|
/// handler will replace the value with the new field value.
|
||||||
#[event(input = "InsertFieldPayloadPB")]
|
#[event(input = "InsertFieldPayloadPB")]
|
||||||
InsertField = 13,
|
InsertField = 13,
|
||||||
|
|
||||||
|
/// [DeleteField] event is used to delete a new field. [DeleteFieldPayloadPB] is the context that
|
||||||
|
/// is used to delete the field from the Grid.
|
||||||
#[event(input = "DeleteFieldPayloadPB")]
|
#[event(input = "DeleteFieldPayloadPB")]
|
||||||
DeleteField = 14,
|
DeleteField = 14,
|
||||||
|
|
||||||
|
/// [SwitchToField] event is used to update the current field's type.
|
||||||
|
/// It will insert a new FieldTypeOptionData if the new FieldType doesn't exist before, otherwise
|
||||||
|
/// reuse the existing FieldTypeOptionData. You could check the [GridRevisionPad] for more details.
|
||||||
#[event(input = "EditFieldPayloadPB", output = "FieldTypeOptionDataPB")]
|
#[event(input = "EditFieldPayloadPB", output = "FieldTypeOptionDataPB")]
|
||||||
SwitchToField = 20,
|
SwitchToField = 20,
|
||||||
|
|
||||||
|
/// [DuplicateField] event is used to duplicate the field. The duplicated field data is kind of
|
||||||
|
/// deep copy of the target field. The passed in [DuplicateFieldPayloadPB] is the context that is
|
||||||
|
/// used to duplicate the field.
|
||||||
|
///
|
||||||
|
/// Return errors if failed to duplicate the field.
|
||||||
|
///
|
||||||
#[event(input = "DuplicateFieldPayloadPB")]
|
#[event(input = "DuplicateFieldPayloadPB")]
|
||||||
DuplicateField = 21,
|
DuplicateField = 21,
|
||||||
|
|
||||||
|
/// [MoveItem] event is used to move the item. For the moment, the item has two types defined in
|
||||||
|
/// the [MoveItemTypePB].
|
||||||
#[event(input = "MoveItemPayloadPB")]
|
#[event(input = "MoveItemPayloadPB")]
|
||||||
MoveItem = 22,
|
MoveItem = 22,
|
||||||
|
|
||||||
|
/// [GetFieldTypeOption] event is used to get the FieldTypeOption data for the specific field type.
|
||||||
|
///
|
||||||
|
/// Check out the [FieldTypeOptionDataPB] for more details. If the [FieldTypeOptionData] does exist
|
||||||
|
/// for the target type, the [TypeOptionBuilder] will create the default data for that type.
|
||||||
|
///
|
||||||
|
/// Return the [FieldTypeOptionDataPB] if there is no errors.
|
||||||
#[event(input = "GridFieldTypeOptionIdPB", output = "FieldTypeOptionDataPB")]
|
#[event(input = "GridFieldTypeOptionIdPB", output = "FieldTypeOptionDataPB")]
|
||||||
GetFieldTypeOption = 23,
|
GetFieldTypeOption = 23,
|
||||||
|
|
||||||
|
/// [CreateFieldTypeOption] event is used to create a new FieldTypeOptionData.
|
||||||
#[event(input = "CreateFieldPayloadPB", output = "FieldTypeOptionDataPB")]
|
#[event(input = "CreateFieldPayloadPB", output = "FieldTypeOptionDataPB")]
|
||||||
CreateFieldTypeOption = 24,
|
CreateFieldTypeOption = 24,
|
||||||
|
|
||||||
|
/// [NewSelectOption] event is used to create a new select option. Return the [SelectOptionPB] if
|
||||||
|
/// there is no errors.
|
||||||
#[event(input = "CreateSelectOptionPayloadPB", output = "SelectOptionPB")]
|
#[event(input = "CreateSelectOptionPayloadPB", output = "SelectOptionPB")]
|
||||||
NewSelectOption = 30,
|
NewSelectOption = 30,
|
||||||
|
|
||||||
|
/// [GetSelectOptionCellData] event is used to get the select option data for cell editing.
|
||||||
|
/// [GridCellIdPB] locate which cell data that will be read from. The return value, [SelectOptionCellDataPB]
|
||||||
|
/// contains the available options and the currently selected options.
|
||||||
#[event(input = "GridCellIdPB", output = "SelectOptionCellDataPB")]
|
#[event(input = "GridCellIdPB", output = "SelectOptionCellDataPB")]
|
||||||
GetSelectOptionCellData = 31,
|
GetSelectOptionCellData = 31,
|
||||||
|
|
||||||
|
/// [UpdateSelectOption] event is used to update the FieldTypeOptionData that its field_type is
|
||||||
|
/// FieldType::SingleSelect or FieldType::MultiSelect.
|
||||||
|
///
|
||||||
|
/// This event may trigger the GridNotification::DidUpdateCell event.
|
||||||
|
/// For example, the [SelectOptionChangesetPayloadPB] carries a change that update the name of
|
||||||
|
/// the option.
|
||||||
|
///
|
||||||
#[event(input = "SelectOptionChangesetPayloadPB")]
|
#[event(input = "SelectOptionChangesetPayloadPB")]
|
||||||
UpdateSelectOption = 32,
|
UpdateSelectOption = 32,
|
||||||
|
|
||||||
#[event(input = "CreateRowPayloadPB", output = "GridRowPB")]
|
#[event(input = "CreateRowPayloadPB", output = "GridRowPB")]
|
||||||
CreateRow = 50,
|
CreateRow = 50,
|
||||||
|
|
||||||
|
/// [GetRow] event is used to get the row data,[GridRowPB]. [OptionalRowPB] is a wrapper that enables
|
||||||
|
/// to return a nullable row data.
|
||||||
#[event(input = "GridRowIdPB", output = "OptionalRowPB")]
|
#[event(input = "GridRowIdPB", output = "OptionalRowPB")]
|
||||||
GetRow = 51,
|
GetRow = 51,
|
||||||
|
|
||||||
@ -111,12 +184,28 @@ pub enum GridEvent {
|
|||||||
#[event(input = "GridCellIdPB", output = "GridCellPB")]
|
#[event(input = "GridCellIdPB", output = "GridCellPB")]
|
||||||
GetCell = 70,
|
GetCell = 70,
|
||||||
|
|
||||||
|
/// [UpdateCell] event is used to update the cell content. The passed in data, [CellChangesetPB],
|
||||||
|
/// carries the changes that will be applied to the cell content by calling `update_cell` function.
|
||||||
|
///
|
||||||
|
/// The 'content' property of the [CellChangesetPB] is String type. It can be used directly if the
|
||||||
|
/// cell use string data. For example, the TextCell or NumberCell.
|
||||||
|
///
|
||||||
|
/// But,it can be treated as a generic type, because we can use [serde] to deserialize the string
|
||||||
|
/// into a specific data type.For the moment, the 'content' will be deserialized to concrete type
|
||||||
|
/// when the FieldType is SingleSelect, DateTime, and MultiSelect. We will discuss the details
|
||||||
|
/// in [UpdateSelectOptionCell] and [UpdateDateCell] event.
|
||||||
#[event(input = "CellChangesetPB")]
|
#[event(input = "CellChangesetPB")]
|
||||||
UpdateCell = 71,
|
UpdateCell = 71,
|
||||||
|
|
||||||
|
/// [UpdateSelectOptionCell] event is used to update the select option cell data. [SelectOptionCellChangesetPayloadPB]
|
||||||
|
/// contains options that will be deleted or inserted. It can be cast to [CellChangesetPB] that
|
||||||
|
/// will be used by the `update_cell` function.
|
||||||
#[event(input = "SelectOptionCellChangesetPayloadPB")]
|
#[event(input = "SelectOptionCellChangesetPayloadPB")]
|
||||||
UpdateSelectOptionCell = 72,
|
UpdateSelectOptionCell = 72,
|
||||||
|
|
||||||
|
/// [UpdateDateCell] event is used to update the date cell data. [DateChangesetPayloadPB]
|
||||||
|
/// contains the date and the time string. It can be cast to [CellChangesetPB] that
|
||||||
|
/// will be used by the `update_cell` function.
|
||||||
#[event(input = "DateChangesetPayloadPB")]
|
#[event(input = "DateChangesetPayloadPB")]
|
||||||
UpdateDateCell = 80,
|
UpdateDateCell = 80,
|
||||||
}
|
}
|
||||||
|
@ -11,6 +11,8 @@ use serde::{Deserialize, Serialize};
|
|||||||
|
|
||||||
pub const SELECTION_IDS_SEPARATOR: &str = ",";
|
pub const SELECTION_IDS_SEPARATOR: &str = ",";
|
||||||
|
|
||||||
|
|
||||||
|
/// [SelectOptionPB] represents an option for the single select, and multiple select.
|
||||||
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, ProtoBuf)]
|
#[derive(Clone, Debug, Default, PartialEq, Eq, Serialize, Deserialize, ProtoBuf)]
|
||||||
pub struct SelectOptionPB {
|
pub struct SelectOptionPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
@ -322,15 +324,24 @@ impl SelectOptionCellChangeset {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// [SelectOptionCellDataPB] contains a list of user's selected options and a list of all the options
|
||||||
|
/// that the cell can use.
|
||||||
#[derive(Clone, Debug, Default, Serialize, Deserialize, ProtoBuf)]
|
#[derive(Clone, Debug, Default, Serialize, Deserialize, ProtoBuf)]
|
||||||
pub struct SelectOptionCellDataPB {
|
pub struct SelectOptionCellDataPB {
|
||||||
|
|
||||||
|
/// The available options that the cell can use.
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
pub options: Vec<SelectOptionPB>,
|
pub options: Vec<SelectOptionPB>,
|
||||||
|
|
||||||
|
/// The selected options for the cell.
|
||||||
#[pb(index = 2)]
|
#[pb(index = 2)]
|
||||||
pub select_options: Vec<SelectOptionPB>,
|
pub select_options: Vec<SelectOptionPB>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// [SelectOptionChangesetPayloadPB] describes the changes of the FieldTypeOptionData. For the moment,
|
||||||
|
/// it is used by [MultiSelectTypeOptionPB] and [SingleSelectTypeOptionPB].
|
||||||
#[derive(Clone, Debug, Default, ProtoBuf)]
|
#[derive(Clone, Debug, Default, ProtoBuf)]
|
||||||
pub struct SelectOptionChangesetPayloadPB {
|
pub struct SelectOptionChangesetPayloadPB {
|
||||||
#[pb(index = 1)]
|
#[pb(index = 1)]
|
||||||
|
@ -103,7 +103,6 @@ impl GridRevisionEditor {
|
|||||||
.modify(|grid| {
|
.modify(|grid| {
|
||||||
let builder = type_option_builder_from_bytes(type_option_data, &field.field_type);
|
let builder = type_option_builder_from_bytes(type_option_data, &field.field_type);
|
||||||
let field_rev = FieldBuilder::from_field(field, builder).build();
|
let field_rev = FieldBuilder::from_field(field, builder).build();
|
||||||
|
|
||||||
Ok(grid.create_field_rev(field_rev, start_field_id)?)
|
Ok(grid.create_field_rev(field_rev, start_field_id)?)
|
||||||
})
|
})
|
||||||
.await?;
|
.await?;
|
||||||
|
@ -123,7 +123,9 @@ pub struct FieldRevision {
|
|||||||
/// type_options contains key/value pairs
|
/// type_options contains key/value pairs
|
||||||
/// key: id of the FieldType
|
/// key: id of the FieldType
|
||||||
/// value: type option data that can be parsed into specified TypeOptionStruct.
|
/// value: type option data that can be parsed into specified TypeOptionStruct.
|
||||||
|
///
|
||||||
/// For example, CheckboxTypeOption, MultiSelectTypeOption etc.
|
/// For example, CheckboxTypeOption, MultiSelectTypeOption etc.
|
||||||
|
///
|
||||||
#[serde(with = "indexmap::serde_seq")]
|
#[serde(with = "indexmap::serde_seq")]
|
||||||
pub type_options: IndexMap<String, String>,
|
pub type_options: IndexMap<String, String>,
|
||||||
|
|
||||||
@ -185,15 +187,20 @@ impl FieldRevision {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The macro, [impl_type_option] will implement the [TypeOptionDataEntry] for the type that
|
||||||
|
/// supports serde trait and TryInto<Bytes> trait.
|
||||||
pub trait TypeOptionDataEntry {
|
pub trait TypeOptionDataEntry {
|
||||||
fn json_str(&self) -> String;
|
fn json_str(&self) -> String;
|
||||||
fn protobuf_bytes(&self) -> Bytes;
|
fn protobuf_bytes(&self) -> Bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// The macro, [impl_type_option] will implement the [TypeOptionDataDeserializer] for the type that
|
||||||
|
/// supports serde trait and TryFrom<Bytes> trait.
|
||||||
pub trait TypeOptionDataDeserializer {
|
pub trait TypeOptionDataDeserializer {
|
||||||
fn from_json_str(s: &str) -> Self;
|
fn from_json_str(s: &str) -> Self;
|
||||||
fn from_protobuf_bytes(bytes: Bytes) -> Self;
|
fn from_protobuf_bytes(bytes: Bytes) -> Self;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type FieldId = String;
|
pub type FieldId = String;
|
||||||
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
|
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
pub struct RowRevision {
|
pub struct RowRevision {
|
||||||
|
Loading…
Reference in New Issue
Block a user