Lucas.Xu 2202326278
feat: integrate new editor (#2536)
* feat: update editor

* feat: integrate new editor

* feat: integrate the document2 into folder2

* feat: integrate the new editor

* chore: cargo fix

* chore: active document feature for flowy-error

* feat: convert the editor action to collab action

* feat: migrate the grid and board

* feat: migrate the callout block

* feat: migrate the divider

* chore: migrate the callout and math equation

* feat: migrate the code block

* feat: add shift + enter command in code block

* feat: support tab and shift+tab in code block

* fix: cursor error after inserting divider

* feat: migrate the grid and board

* feat: migrate the emoji picker

* feat: migrate openai

* feat: integrate floating toolbar

* feat: migrate the smart editor

* feat: migrate the cover

* feat: add option block action

* chore: implement block selection and delete option

* feat: support background color

* feat: dismiss color picker afer setting color

* feat: migrate the cover block

* feat: resize the font

* chore: cutomsize the padding

* chore: wrap the option button with ignore widget

* feat: customize the heading style

* chore: optimize the divider line height

* fix: the option button can't dismiss

* ci: rust test

* chore: flutter analyze

* fix: code block selection

* fix: dismiss the emoji picker after selecting one

* chore: optimize the transaction adapter

* fix: can't save the new content

* feat: show export page when some errors happen

* feat: implement get_view_data for document

---------

Co-authored-by: nathan <nathan@appflowy.io>
2023-05-16 14:58:24 +08:00

59 lines
1.7 KiB
Rust

use std::{
ops::{Deref, DerefMut},
sync::Arc,
};
use collab::core::collab::MutexCollab;
use collab_document::{blocks::DocumentData, document::Document as InnerDocument};
use parking_lot::Mutex;
use flowy_error::FlowyResult;
/// This struct wrap the document::Document
#[derive(Clone)]
pub struct Document(Arc<Mutex<InnerDocument>>);
impl Document {
/// Creates and returns a new Document object.
/// # Arguments
/// * `collab` - the identifier of the collaboration instance
///
/// # Returns
/// * `Result<Document, FlowyError>` - a Result containing either a new Document object or an Error if the document creation failed
pub fn new(collab: Arc<MutexCollab>) -> FlowyResult<Self> {
InnerDocument::create(collab)
.map(|inner| Self(Arc::new(Mutex::new(inner))))
.map_err(|err| err.into())
}
/// Creates and returns a new Document object with initial data.
/// # Arguments
/// * `collab` - the identifier of the collaboration instance
/// * `data` - the initial data to include in the document
///
/// # Returns
/// * `Result<Document, FlowyError>` - a Result containing either a new Document object or an Error if the document creation failed
pub fn create_with_data(collab: Arc<MutexCollab>, data: DocumentData) -> FlowyResult<Self> {
InnerDocument::create_with_data(collab, data)
.map(|inner| Self(Arc::new(Mutex::new(inner))))
.map_err(|err| err.into())
}
}
unsafe impl Sync for Document {}
unsafe impl Send for Document {}
impl Deref for Document {
type Target = Arc<Mutex<InnerDocument>>;
fn deref(&self) -> &Self::Target {
&self.0
}
}
impl DerefMut for Document {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.0
}
}