view_handler.rs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. use crate::{
  2. entities::{
  3. trash::Trash,
  4. view::{
  5. CreateViewParams,
  6. CreateViewRequest,
  7. QueryViewRequest,
  8. UpdateViewParams,
  9. UpdateViewRequest,
  10. View,
  11. ViewIdentifier,
  12. ViewIdentifiers,
  13. },
  14. },
  15. errors::WorkspaceError,
  16. services::{TrashCan, ViewController},
  17. };
  18. use flowy_dispatch::prelude::{data_result, Data, DataResult, Unit};
  19. use flowy_document::entities::doc::DocDelta;
  20. use flowy_workspace_infra::entities::share::{ExportData, ExportParams, ExportRequest};
  21. use std::{convert::TryInto, sync::Arc};
  22. pub(crate) async fn create_view_handler(
  23. data: Data<CreateViewRequest>,
  24. controller: Unit<Arc<ViewController>>,
  25. ) -> DataResult<View, WorkspaceError> {
  26. let params: CreateViewParams = data.into_inner().try_into()?;
  27. let view = controller.create_view_from_params(params).await?;
  28. data_result(view)
  29. }
  30. pub(crate) async fn read_view_handler(
  31. data: Data<QueryViewRequest>,
  32. controller: Unit<Arc<ViewController>>,
  33. ) -> DataResult<View, WorkspaceError> {
  34. let params: ViewIdentifier = data.into_inner().try_into()?;
  35. let mut view = controller.read_view(params.clone()).await?;
  36. view.belongings = controller.read_views_belong_to(&params.view_id).await?;
  37. data_result(view)
  38. }
  39. #[tracing::instrument(skip(data, controller), err)]
  40. pub(crate) async fn update_view_handler(
  41. data: Data<UpdateViewRequest>,
  42. controller: Unit<Arc<ViewController>>,
  43. ) -> Result<(), WorkspaceError> {
  44. let params: UpdateViewParams = data.into_inner().try_into()?;
  45. let _ = controller.update_view(params).await?;
  46. Ok(())
  47. }
  48. pub(crate) async fn apply_doc_delta_handler(
  49. data: Data<DocDelta>,
  50. controller: Unit<Arc<ViewController>>,
  51. ) -> DataResult<DocDelta, WorkspaceError> {
  52. // let params: DocDelta = data.into_inner().try_into()?;
  53. let doc = controller.apply_doc_delta(data.into_inner()).await?;
  54. data_result(doc)
  55. }
  56. pub(crate) async fn delete_view_handler(
  57. data: Data<QueryViewRequest>,
  58. controller: Unit<Arc<ViewController>>,
  59. trash_can: Unit<Arc<TrashCan>>,
  60. ) -> Result<(), WorkspaceError> {
  61. let params: ViewIdentifiers = data.into_inner().try_into()?;
  62. for view_id in &params.view_ids {
  63. let _ = controller.close_view(view_id.into()).await;
  64. }
  65. let trash = controller
  66. .read_view_tables(params.view_ids)?
  67. .into_iter()
  68. .map(|view_table| view_table.into())
  69. .collect::<Vec<Trash>>();
  70. let _ = trash_can.add(trash).await?;
  71. Ok(())
  72. }
  73. pub(crate) async fn open_view_handler(
  74. data: Data<QueryViewRequest>,
  75. controller: Unit<Arc<ViewController>>,
  76. ) -> DataResult<DocDelta, WorkspaceError> {
  77. let params: ViewIdentifier = data.into_inner().try_into()?;
  78. let doc = controller.open_view(params.into()).await?;
  79. data_result(doc)
  80. }
  81. pub(crate) async fn close_view_handler(
  82. data: Data<QueryViewRequest>,
  83. controller: Unit<Arc<ViewController>>,
  84. ) -> Result<(), WorkspaceError> {
  85. let params: ViewIdentifier = data.into_inner().try_into()?;
  86. let _ = controller.close_view(params.into()).await?;
  87. Ok(())
  88. }
  89. #[tracing::instrument(skip(data, controller), err)]
  90. pub(crate) async fn duplicate_view_handler(
  91. data: Data<QueryViewRequest>,
  92. controller: Unit<Arc<ViewController>>,
  93. ) -> Result<(), WorkspaceError> {
  94. let params: ViewIdentifier = data.into_inner().try_into()?;
  95. let _ = controller.duplicate_view(params.into()).await?;
  96. Ok(())
  97. }
  98. #[tracing::instrument(skip(data, controller), err)]
  99. pub(crate) async fn export_handler(
  100. data: Data<ExportRequest>,
  101. controller: Unit<Arc<ViewController>>,
  102. ) -> DataResult<ExportData, WorkspaceError> {
  103. let params: ExportParams = data.into_inner().try_into()?;
  104. let data = controller.export_doc(params.into()).await?;
  105. data_result(data)
  106. }