diff --git a/frontend/app_flowy/lib/workspace/domain/page_stack/page_stack.dart b/frontend/app_flowy/lib/workspace/domain/page_stack/page_stack.dart index 8c908d1a9a..bdb57cdf5c 100644 --- a/frontend/app_flowy/lib/workspace/domain/page_stack/page_stack.dart +++ b/frontend/app_flowy/lib/workspace/domain/page_stack/page_stack.dart @@ -19,7 +19,8 @@ abstract class NavigationItem { enum HomeStackType { blank, - doc, + document, + kanban, trash, } diff --git a/frontend/app_flowy/lib/workspace/domain/view_ext.dart b/frontend/app_flowy/lib/workspace/domain/view_ext.dart index 6950061820..fedbb55342 100644 --- a/frontend/app_flowy/lib/workspace/domain/view_ext.dart +++ b/frontend/app_flowy/lib/workspace/domain/view_ext.dart @@ -6,10 +6,10 @@ import 'package:flowy_sdk/protobuf/flowy-folder-data-model/view.pb.dart'; extension ToHomeStackContext on View { HomeStackContext stackContext() { switch (viewType) { - case ViewType.Blank: - return BlankStackContext(); - case ViewType.Doc: - return DocStackContext(view: this); + case ViewType.QuillDocument: + return DocumentStackContext(view: this); + case ViewType.Kanban: + return DocumentStackContext(view: this); default: return BlankStackContext(); } @@ -19,10 +19,10 @@ extension ToHomeStackContext on View { extension ToHomeStackType on View { HomeStackType stackType() { switch (viewType) { - case ViewType.Blank: - return HomeStackType.blank; - case ViewType.Doc: - return HomeStackType.doc; + case ViewType.QuillDocument: + return HomeStackType.document; + case ViewType.Kanban: + return HomeStackType.kanban; default: return HomeStackType.blank; } diff --git a/frontend/app_flowy/lib/workspace/presentation/stack_page/doc/doc_stack_page.dart b/frontend/app_flowy/lib/workspace/presentation/stack_page/doc/doc_stack_page.dart index c6d7d5c275..22ba839ed3 100644 --- a/frontend/app_flowy/lib/workspace/presentation/stack_page/doc/doc_stack_page.dart +++ b/frontend/app_flowy/lib/workspace/presentation/stack_page/doc/doc_stack_page.dart @@ -24,12 +24,12 @@ import 'package:provider/provider.dart'; import 'document_page.dart'; -class DocStackContext extends HomeStackContext { +class DocumentStackContext extends HomeStackContext { View _view; late ViewListener _listener; final ValueNotifier _isUpdated = ValueNotifier(0); - DocStackContext({required View view, Key? key}) : _view = view { + DocumentStackContext({required View view, Key? key}) : _view = view { _listener = getIt(param1: view); _listener.updatedNotifier.addPublishListener((result) { result.fold( diff --git a/shared-lib/flowy-folder-data-model/src/entities/view.rs b/shared-lib/flowy-folder-data-model/src/entities/view.rs index b86be30b11..c4fd818595 100644 --- a/shared-lib/flowy-folder-data-model/src/entities/view.rs +++ b/shared-lib/flowy-folder-data-model/src/entities/view.rs @@ -8,6 +8,8 @@ use crate::{ }, }; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; +use serde::de::Unexpected; +use serde::{de, de::Visitor, Deserializer}; use serde::{Deserialize, Serialize}; use std::convert::TryInto; @@ -62,7 +64,7 @@ impl std::convert::From for Trash { } } -#[derive(Eq, PartialEq, Debug, ProtoBuf_Enum, Clone, Serialize, Deserialize)] +#[derive(Eq, PartialEq, Debug, ProtoBuf_Enum, Clone, Serialize)] pub enum ViewType { Blank = 0, QuillDocument = 1, @@ -71,7 +73,7 @@ pub enum ViewType { impl std::default::Default for ViewType { fn default() -> Self { - ViewType::Blank + ViewType::QuillDocument } } @@ -277,3 +279,45 @@ impl TryInto for UpdateViewPayload { }) } } + +impl<'de> Deserialize<'de> for ViewType { + fn deserialize(deserializer: D) -> Result>::Error> + where + D: Deserializer<'de>, + { + struct ViewTypeVisitor(); + + impl<'de> Visitor<'de> for ViewTypeVisitor { + type Value = ViewType; + fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result { + formatter.write_str("QuillDocument, Kanban, Blank") + } + + fn visit_str(self, s: &str) -> Result + where + E: de::Error, + { + let mut view_type = None; + match s { + "Doc" => { + view_type = Some(ViewType::QuillDocument); + } + "QuillDocument" => { + view_type = Some(ViewType::QuillDocument); + } + "Kanban" => { + view_type = Some(ViewType::Kanban); + } + "Blank" => { + view_type = Some(ViewType::Blank); + } + unknown => { + return Err(de::Error::invalid_value(Unexpected::Str(unknown), &self)); + } + } + Ok(view_type.unwrap()) + } + } + deserializer.deserialize_any(ViewTypeVisitor()) + } +}