feat: update view properties

This commit is contained in:
appflowy
2022-02-28 16:00:43 +08:00
parent 23ccfa54b5
commit 74831964a6
17 changed files with 225 additions and 175 deletions

View File

@ -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![])?;

View File

@ -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
}
}
}

View File

@ -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, &params.view_id, delta_data).into();
let _ = self
.block_manager
.reset_with_revisions(&params.view_id, repeated_revision)
.await?;
let _ = self.create_view(&params.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(),
};

View File

@ -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) => {