event_handler.rs 3.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. use crate::manager::GridManager;
  2. use flowy_error::FlowyError;
  3. use flowy_grid_data_model::entities::{
  4. CellMetaChangeset, CreateRowPayload, Field, Grid, GridId, QueryFieldPayload, QueryGridBlocksPayload,
  5. QueryRowPayload, RepeatedField, RepeatedGridBlock, RepeatedRow, Row,
  6. };
  7. use flowy_grid_data_model::parser::{CreateRowParams, QueryFieldParams, QueryGridBlocksParams, QueryRowParams};
  8. use lib_dispatch::prelude::{data_result, AppData, Data, DataResult};
  9. use std::sync::Arc;
  10. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  11. pub(crate) async fn get_grid_data_handler(
  12. data: Data<GridId>,
  13. manager: AppData<Arc<GridManager>>,
  14. ) -> DataResult<Grid, FlowyError> {
  15. let grid_id: GridId = data.into_inner();
  16. let editor = manager.open_grid(grid_id).await?;
  17. let grid = editor.grid_data().await?;
  18. data_result(grid)
  19. }
  20. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  21. pub(crate) async fn get_grid_blocks_handler(
  22. data: Data<QueryGridBlocksPayload>,
  23. manager: AppData<Arc<GridManager>>,
  24. ) -> DataResult<RepeatedGridBlock, FlowyError> {
  25. let params: QueryGridBlocksParams = data.into_inner().try_into()?;
  26. let editor = manager.get_grid_editor(&params.grid_id)?;
  27. let block_ids = params
  28. .block_orders
  29. .into_iter()
  30. .map(|block| block.block_id)
  31. .collect::<Vec<String>>();
  32. let repeated_grid_block = editor.get_blocks(Some(block_ids)).await?;
  33. data_result(repeated_grid_block)
  34. }
  35. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  36. pub(crate) async fn get_row_handler(
  37. data: Data<QueryRowPayload>,
  38. manager: AppData<Arc<GridManager>>,
  39. ) -> DataResult<Row, FlowyError> {
  40. let params: QueryRowParams = data.into_inner().try_into()?;
  41. let editor = manager.get_grid_editor(&params.grid_id)?;
  42. match editor.get_row(&params.block_id, &params.row_id).await? {
  43. None => Err(FlowyError::record_not_found().context("Can not find the row")),
  44. Some(row) => data_result(row),
  45. }
  46. }
  47. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  48. pub(crate) async fn get_fields_handler(
  49. data: Data<QueryFieldPayload>,
  50. manager: AppData<Arc<GridManager>>,
  51. ) -> DataResult<RepeatedField, FlowyError> {
  52. let params: QueryFieldParams = data.into_inner().try_into()?;
  53. let editor = manager.get_grid_editor(&params.grid_id)?;
  54. let field_metas = editor.get_field_metas(Some(params.field_orders)).await?;
  55. let repeated_field: RepeatedField = field_metas.into_iter().map(Field::from).collect::<Vec<_>>().into();
  56. data_result(repeated_field)
  57. }
  58. #[tracing::instrument(level = "debug", skip(data, manager), err)]
  59. pub(crate) async fn create_row_handler(
  60. data: Data<CreateRowPayload>,
  61. manager: AppData<Arc<GridManager>>,
  62. ) -> Result<(), FlowyError> {
  63. let params: CreateRowParams = data.into_inner().try_into()?;
  64. let editor = manager.get_grid_editor(params.grid_id.as_ref())?;
  65. let _ = editor.create_row(params.start_row_id).await?;
  66. Ok(())
  67. }
  68. #[tracing::instrument(level = "debug", skip_all, err)]
  69. pub(crate) async fn update_cell_handler(
  70. data: Data<CellMetaChangeset>,
  71. manager: AppData<Arc<GridManager>>,
  72. ) -> Result<(), FlowyError> {
  73. let changeset: CellMetaChangeset = data.into_inner();
  74. let editor = manager.get_grid_editor(&changeset.grid_id)?;
  75. let _ = editor.update_cell(changeset).await?;
  76. Ok(())
  77. }