mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2024-08-30 18:12:39 +00:00
feat: update view properties
This commit is contained in:
@ -8,6 +8,7 @@ use lazy_static::lazy_static;
|
||||
use flowy_collaboration::{client_folder::FolderPad, entities::ws_data::ServerRevisionWSData};
|
||||
use flowy_document::BlockManager;
|
||||
|
||||
use flowy_collaboration::entities::revision::{RepeatedRevision, Revision};
|
||||
use std::{collections::HashMap, convert::TryInto, fmt::Formatter, sync::Arc};
|
||||
use tokio::sync::RwLock as TokioRwLock;
|
||||
|
||||
@ -201,9 +202,10 @@ impl DefaultFolderBuilder {
|
||||
initial_delta().to_json()
|
||||
};
|
||||
view_controller.set_latest_view(view);
|
||||
let _ = view_controller
|
||||
.create_view_document_content(&view.id, view_data)
|
||||
.await?;
|
||||
let delta_data = Bytes::from(view_data);
|
||||
let repeated_revision: RepeatedRevision =
|
||||
Revision::initial_revision(user_id, &view.id, delta_data).into();
|
||||
let _ = view_controller.create_view(&view.id, repeated_revision).await?;
|
||||
}
|
||||
}
|
||||
let folder = FolderPad::new(vec![workspace.clone()], vec![])?;
|
||||
|
@ -127,9 +127,8 @@ pub(crate) struct ViewTable {
|
||||
impl ViewTable {
|
||||
pub fn new(view: View) -> Self {
|
||||
let view_type = match view.view_type {
|
||||
ViewType::Kanban => ViewTableType::Kanban,
|
||||
ViewType::QuillDocument => ViewTableType::QuillDocument,
|
||||
ViewType::Blank => ViewTableType::QuillDocument,
|
||||
ViewType::RichText => ViewTableType::RichText,
|
||||
ViewType::PlainText => ViewTableType::Text,
|
||||
};
|
||||
|
||||
ViewTable {
|
||||
@ -151,8 +150,8 @@ impl ViewTable {
|
||||
impl std::convert::From<ViewTable> for View {
|
||||
fn from(table: ViewTable) -> Self {
|
||||
let view_type = match table.view_type {
|
||||
ViewTableType::QuillDocument => ViewType::QuillDocument,
|
||||
ViewTableType::Kanban => ViewType::Kanban,
|
||||
ViewTableType::RichText => ViewType::RichText,
|
||||
ViewTableType::Text => ViewType::PlainText,
|
||||
};
|
||||
|
||||
View {
|
||||
@ -217,24 +216,24 @@ impl ViewChangeset {
|
||||
#[repr(i32)]
|
||||
#[sql_type = "Integer"]
|
||||
pub enum ViewTableType {
|
||||
QuillDocument = 0,
|
||||
Kanban = 1,
|
||||
RichText = 0,
|
||||
Text = 1,
|
||||
}
|
||||
|
||||
impl std::default::Default for ViewTableType {
|
||||
fn default() -> Self {
|
||||
ViewTableType::QuillDocument
|
||||
ViewTableType::RichText
|
||||
}
|
||||
}
|
||||
|
||||
impl std::convert::From<i32> for ViewTableType {
|
||||
fn from(value: i32) -> Self {
|
||||
match value {
|
||||
0 => ViewTableType::QuillDocument,
|
||||
1 => ViewTableType::Kanban,
|
||||
0 => ViewTableType::RichText,
|
||||
1 => ViewTableType::Text,
|
||||
o => {
|
||||
log::error!("Unsupported view type {}, fallback to ViewType::Docs", o);
|
||||
ViewTableType::QuillDocument
|
||||
ViewTableType::Text
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,6 +24,7 @@ use crate::{
|
||||
use flowy_database::kv::KV;
|
||||
use flowy_document::BlockManager;
|
||||
use flowy_folder_data_model::entities::share::{ExportData, ExportParams};
|
||||
use flowy_folder_data_model::entities::view::ViewType;
|
||||
use lib_infra::uuid_string;
|
||||
|
||||
const LATEST_VIEW_ID: &str = "latest_view_id";
|
||||
@ -61,43 +62,33 @@ impl ViewController {
|
||||
|
||||
#[tracing::instrument(level = "trace", skip(self, params), fields(name = %params.name), err)]
|
||||
pub(crate) async fn create_view_from_params(&self, params: CreateViewParams) -> Result<View, FlowyError> {
|
||||
let view_data = if params.view_data.is_empty() {
|
||||
let view_data = if params.ext.is_empty() {
|
||||
initial_delta_string()
|
||||
} else {
|
||||
params.view_data.clone()
|
||||
params.ext.clone()
|
||||
};
|
||||
|
||||
let delta_data = Bytes::from(view_data);
|
||||
let user_id = self.user.user_id()?;
|
||||
let repeated_revision: RepeatedRevision =
|
||||
Revision::initial_revision(&user_id, ¶ms.view_id, delta_data).into();
|
||||
let _ = self
|
||||
.block_manager
|
||||
.reset_with_revisions(¶ms.view_id, repeated_revision)
|
||||
.await?;
|
||||
let _ = self.create_view(¶ms.view_id, repeated_revision).await?;
|
||||
let view = self.create_view_on_server(params).await?;
|
||||
let _ = self.create_view_on_local(view.clone()).await?;
|
||||
|
||||
Ok(view)
|
||||
}
|
||||
|
||||
#[tracing::instrument(level = "debug", skip(self, view_id, view_data), err)]
|
||||
pub(crate) async fn create_view_document_content(
|
||||
#[tracing::instrument(level = "debug", skip(self, view_id, view_type, repeated_revision), err)]
|
||||
pub(crate) async fn create_view(
|
||||
&self,
|
||||
view_id: &str,
|
||||
view_data: String,
|
||||
repeated_revision: RepeatedRevision,
|
||||
view_type: ViewType,
|
||||
) -> Result<(), FlowyError> {
|
||||
if view_data.is_empty() {
|
||||
if repeated_revision.is_empty() {
|
||||
return Err(FlowyError::internal().context("The content of the view should not be empty"));
|
||||
}
|
||||
|
||||
let delta_data = Bytes::from(view_data);
|
||||
let user_id = self.user.user_id()?;
|
||||
let repeated_revision: RepeatedRevision = Revision::initial_revision(&user_id, view_id, delta_data).into();
|
||||
let _ = self
|
||||
.block_manager
|
||||
.reset_with_revisions(view_id, repeated_revision)
|
||||
.await?;
|
||||
let _ = self.block_manager.create_block(view_id, repeated_revision).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
@ -185,7 +176,7 @@ impl ViewController {
|
||||
desc: view.desc.clone(),
|
||||
thumbnail: "".to_owned(),
|
||||
view_type: view.view_type.clone(),
|
||||
view_data: document_json,
|
||||
ext: document_json,
|
||||
view_id: uuid_string(),
|
||||
};
|
||||
|
||||
|
@ -68,14 +68,7 @@ impl FolderTest {
|
||||
let _ = sdk.init_user().await;
|
||||
let mut workspace = create_workspace(&sdk, "FolderWorkspace", "Folder test workspace").await;
|
||||
let mut app = create_app(&sdk, &workspace.id, "Folder App", "Folder test app").await;
|
||||
let view = create_view(
|
||||
&sdk,
|
||||
&app.id,
|
||||
"Folder View",
|
||||
"Folder test view",
|
||||
ViewType::QuillDocument,
|
||||
)
|
||||
.await;
|
||||
let view = create_view(&sdk, &app.id, "Folder View", "Folder test view", ViewType::RichText).await;
|
||||
app.belongings = RepeatedView {
|
||||
items: vec![view.clone()],
|
||||
};
|
||||
@ -153,7 +146,7 @@ impl FolderTest {
|
||||
}
|
||||
|
||||
FolderScript::CreateView { name, desc } => {
|
||||
let view = create_view(sdk, &self.app.id, &name, &desc, ViewType::QuillDocument).await;
|
||||
let view = create_view(sdk, &self.app.id, &name, &desc, ViewType::RichText).await;
|
||||
self.view = view;
|
||||
}
|
||||
FolderScript::AssertView(view) => {
|
||||
|
Reference in New Issue
Block a user