field_operation.rs 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. use crate::services::field::{MultiSelectTypeOptionPB, SingleSelectTypeOptionPB};
  2. use crate::services::grid_editor::GridRevisionEditor;
  3. use flowy_error::FlowyResult;
  4. use flowy_grid_data_model::revision::{TypeOptionDataDeserializer, TypeOptionDataFormat};
  5. use std::sync::Arc;
  6. pub async fn edit_field_type_option<T>(
  7. field_id: &str,
  8. editor: Arc<GridRevisionEditor>,
  9. action: impl FnOnce(&mut T),
  10. ) -> FlowyResult<()>
  11. where
  12. T: TypeOptionDataDeserializer + TypeOptionDataFormat,
  13. {
  14. let get_type_option = async {
  15. let field_rev = editor.get_field_rev(field_id).await?;
  16. field_rev.get_type_option::<T>(field_rev.ty)
  17. };
  18. if let Some(mut type_option) = get_type_option.await {
  19. action(&mut type_option);
  20. let bytes = type_option.protobuf_bytes().to_vec();
  21. let _ = editor
  22. .update_field_type_option(&editor.grid_id, field_id, bytes)
  23. .await?;
  24. }
  25. Ok(())
  26. }
  27. pub async fn edit_single_select_type_option(
  28. field_id: &str,
  29. editor: Arc<GridRevisionEditor>,
  30. action: impl FnOnce(&mut SingleSelectTypeOptionPB),
  31. ) -> FlowyResult<()> {
  32. edit_field_type_option(field_id, editor, action).await
  33. }
  34. pub async fn edit_multi_select_type_option(
  35. field_id: &str,
  36. editor: Arc<GridRevisionEditor>,
  37. action: impl FnOnce(&mut MultiSelectTypeOptionPB),
  38. ) -> FlowyResult<()> {
  39. edit_field_type_option(field_id, editor, action).await
  40. }