event_handler.rs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. use crate::manager::GridManager;
  2. use crate::services::field::{type_option_data_from_str, SelectOption};
  3. use crate::services::grid_editor::ClientGridEditor;
  4. use flowy_error::{FlowyError, FlowyResult};
  5. use flowy_grid_data_model::entities::*;
  6. use lib_dispatch::prelude::{data_result, AppData, Data, DataResult};
  7. use std::sync::Arc;
  8. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  9. pub(crate) async fn get_grid_data_handler(
  10. data: Data<GridId>,
  11. manager: AppData<Arc<GridManager>>,
  12. ) -> DataResult<Grid, FlowyError> {
  13. let grid_id: GridId = data.into_inner();
  14. let editor = manager.open_grid(grid_id).await?;
  15. let grid = editor.grid_data().await?;
  16. data_result(grid)
  17. }
  18. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  19. pub(crate) async fn get_grid_blocks_handler(
  20. data: Data<QueryGridBlocksPayload>,
  21. manager: AppData<Arc<GridManager>>,
  22. ) -> DataResult<RepeatedGridBlock, FlowyError> {
  23. let params: QueryGridBlocksParams = data.into_inner().try_into()?;
  24. let editor = manager.get_grid_editor(&params.grid_id)?;
  25. let block_ids = params
  26. .block_orders
  27. .into_iter()
  28. .map(|block| block.block_id)
  29. .collect::<Vec<String>>();
  30. let repeated_grid_block = editor.get_blocks(Some(block_ids)).await?;
  31. data_result(repeated_grid_block)
  32. }
  33. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  34. pub(crate) async fn get_fields_handler(
  35. data: Data<QueryFieldPayload>,
  36. manager: AppData<Arc<GridManager>>,
  37. ) -> DataResult<RepeatedField, FlowyError> {
  38. let params: QueryFieldParams = data.into_inner().try_into()?;
  39. let editor = manager.get_grid_editor(&params.grid_id)?;
  40. let field_metas = editor.get_field_metas(Some(params.field_orders)).await?;
  41. let repeated_field: RepeatedField = field_metas.into_iter().map(Field::from).collect::<Vec<_>>().into();
  42. data_result(repeated_field)
  43. }
  44. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  45. pub(crate) async fn update_field_handler(
  46. data: Data<FieldChangesetPayload>,
  47. manager: AppData<Arc<GridManager>>,
  48. ) -> Result<(), FlowyError> {
  49. let changeset: FieldChangesetParams = data.into_inner().try_into()?;
  50. let editor = manager.get_grid_editor(&changeset.grid_id)?;
  51. let _ = editor.update_field(changeset).await?;
  52. Ok(())
  53. }
  54. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  55. pub(crate) async fn create_field_handler(
  56. data: Data<CreateFieldPayload>,
  57. manager: AppData<Arc<GridManager>>,
  58. ) -> Result<(), FlowyError> {
  59. let params: CreateFieldParams = data.into_inner().try_into()?;
  60. let editor = manager.get_grid_editor(&params.grid_id)?;
  61. let _ = editor.create_field(params).await?;
  62. Ok(())
  63. }
  64. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  65. pub(crate) async fn delete_field_handler(
  66. data: Data<FieldIdentifierPayload>,
  67. manager: AppData<Arc<GridManager>>,
  68. ) -> Result<(), FlowyError> {
  69. let params: FieldIdentifierParams = data.into_inner().try_into()?;
  70. let editor = manager.get_grid_editor(&params.grid_id)?;
  71. let _ = editor.delete_field(&params.field_id).await?;
  72. Ok(())
  73. }
  74. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  75. pub(crate) async fn duplicate_field_handler(
  76. data: Data<FieldIdentifierPayload>,
  77. manager: AppData<Arc<GridManager>>,
  78. ) -> Result<(), FlowyError> {
  79. let params: FieldIdentifierParams = data.into_inner().try_into()?;
  80. let editor = manager.get_grid_editor(&params.grid_id)?;
  81. let _ = editor.duplicate_field(&params.field_id).await?;
  82. Ok(())
  83. }
  84. #[tracing::instrument(level = "debug", skip(data), err)]
  85. pub(crate) async fn create_select_option_handler(
  86. data: Data<CreateSelectOptionPayload>,
  87. ) -> DataResult<SelectOption, FlowyError> {
  88. let params: CreateSelectOptionParams = data.into_inner().try_into()?;
  89. data_result(SelectOption::new(&params.option_name))
  90. }
  91. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  92. pub(crate) async fn edit_edit_field_context_handler(
  93. data: Data<GetEditFieldContextParams>,
  94. manager: AppData<Arc<GridManager>>,
  95. ) -> DataResult<EditFieldContext, FlowyError> {
  96. let params: GetEditFieldContextParams = data.into_inner();
  97. let editor = manager.get_grid_editor(&params.grid_id)?;
  98. let mut field_meta = get_or_create_field_meta(&params, editor).await?;
  99. let type_option_data = type_option_data_from_str(&field_meta.type_option_json, &field_meta.field_type);
  100. let field: Field = field_meta.into();
  101. let edit_context = EditFieldContext {
  102. grid_id: params.grid_id,
  103. grid_field: field,
  104. type_option_data,
  105. };
  106. data_result(edit_context)
  107. }
  108. async fn get_or_create_field_meta(
  109. params: &GetEditFieldContextParams,
  110. editor: Arc<ClientGridEditor>,
  111. ) -> FlowyResult<FieldMeta> {
  112. if params.field_id.is_some() {
  113. if let Some(field_meta) = editor.get_field(params.field_id.as_ref().unwrap()).await? {
  114. return Ok(field_meta);
  115. }
  116. }
  117. editor.default_field_meta(&params.field_type).await
  118. }
  119. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  120. pub(crate) async fn get_row_handler(
  121. data: Data<QueryRowPayload>,
  122. manager: AppData<Arc<GridManager>>,
  123. ) -> DataResult<Row, FlowyError> {
  124. let params: QueryRowParams = data.into_inner().try_into()?;
  125. let editor = manager.get_grid_editor(&params.grid_id)?;
  126. match editor.get_row(&params.block_id, &params.row_id).await? {
  127. None => Err(FlowyError::record_not_found().context("Can not find the row")),
  128. Some(row) => data_result(row),
  129. }
  130. }
  131. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  132. pub(crate) async fn create_row_handler(
  133. data: Data<CreateRowPayload>,
  134. manager: AppData<Arc<GridManager>>,
  135. ) -> Result<(), FlowyError> {
  136. let params: CreateRowParams = data.into_inner().try_into()?;
  137. let editor = manager.get_grid_editor(params.grid_id.as_ref())?;
  138. let _ = editor.create_row(params.start_row_id).await?;
  139. Ok(())
  140. }
  141. #[tracing::instrument(level = "debug", skip_all, err)]
  142. pub(crate) async fn update_cell_handler(
  143. data: Data<CellMetaChangeset>,
  144. manager: AppData<Arc<GridManager>>,
  145. ) -> Result<(), FlowyError> {
  146. let changeset: CellMetaChangeset = data.into_inner();
  147. let editor = manager.get_grid_editor(&changeset.grid_id)?;
  148. let _ = editor.update_cell(changeset).await?;
  149. Ok(())
  150. }