From 15ff2efcc21ec5f95c8c47d584ef8c5e3bb22e92 Mon Sep 17 00:00:00 2001 From: "Lucas.Xu" Date: Fri, 2 Sep 2022 10:17:36 +0800 Subject: [PATCH 01/17] Fix analysis issues (#966) * chore: rename Selectable to SelectableMixin * chore: add platforms to pubspec.yaml --- .../example/lib/plugin/image_node_widget.dart | 5 +++-- .../example/lib/plugin/network_image_node_widget.dart | 2 +- .../example/lib/plugin/youtube_link_node_widget.dart | 2 +- .../appflowy_editor/lib/src/document/node_iterator.dart | 1 - .../appflowy_editor/lib/src/document/text_delta.dart | 1 - .../appflowy_editor/lib/src/extensions/node_extensions.dart | 3 ++- .../lib/src/render/image/image_node_widget.dart | 3 ++- .../lib/src/render/rich_text/bulleted_list_text.dart | 6 +++--- .../lib/src/render/rich_text/checkbox_text.dart | 6 +++--- .../lib/src/render/rich_text/default_selectable.dart | 2 +- .../lib/src/render/rich_text/flowy_rich_text.dart | 2 +- .../lib/src/render/rich_text/heading_text.dart | 6 +++--- .../lib/src/render/rich_text/number_list_text.dart | 6 +++--- .../lib/src/render/rich_text/quoted_text.dart | 6 +++--- .../appflowy_editor/lib/src/render/rich_text/rich_text.dart | 6 +++--- .../lib/src/render/selection/selectable.dart | 6 +++--- .../appflowy_editor/lib/src/service/selection_service.dart | 2 +- frontend/app_flowy/packages/appflowy_editor/pubspec.yaml | 5 +++++ 18 files changed, 38 insertions(+), 32 deletions(-) diff --git a/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/image_node_widget.dart b/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/image_node_widget.dart index c535bc6295..d76ce8d6a2 100644 --- a/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/image_node_widget.dart +++ b/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/image_node_widget.dart @@ -11,7 +11,7 @@ import 'package:flutter/material.dart'; /// 2. create a class extends [NodeWidgetBuilder] /// 3. override the function `Widget build(NodeWidgetContext context)` /// and return a widget to render. The returned widget should be -/// a StatefulWidget and mixin with [Selectable]. +/// a StatefulWidget and mixin with [SelectableMixin]. /// /// 4. override the getter `nodeValidator` /// to verify the data structure in [Node]. @@ -50,7 +50,8 @@ class ImageNodeWidget extends StatefulWidget { State createState() => _ImageNodeWidgetState(); } -class _ImageNodeWidgetState extends State with Selectable { +class _ImageNodeWidgetState extends State + with SelectableMixin { bool isHovered = false; Node get node => widget.node; EditorState get editorState => widget.editorState; diff --git a/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/network_image_node_widget.dart b/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/network_image_node_widget.dart index 84d2e72918..395fc175f4 100644 --- a/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/network_image_node_widget.dart +++ b/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/network_image_node_widget.dart @@ -31,7 +31,7 @@ class _NetworkImageNodeWidget extends StatefulWidget { } class __NetworkImageNodeWidgetState extends State<_NetworkImageNodeWidget> - with Selectable { + with SelectableMixin { RenderBox get _renderBox => context.findRenderObject() as RenderBox; @override diff --git a/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/youtube_link_node_widget.dart b/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/youtube_link_node_widget.dart index 27bbe922e3..3923c60c45 100644 --- a/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/youtube_link_node_widget.dart +++ b/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/youtube_link_node_widget.dart @@ -33,7 +33,7 @@ class LinkNodeWidget extends StatefulWidget { } class _YouTubeLinkNodeWidgetState extends State - with Selectable { + with SelectableMixin { Node get node => widget.node; EditorState get editorState => widget.editorState; String get src => widget.node.attributes['youtube_link'] as String; diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/document/node_iterator.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/document/node_iterator.dart index 9c666bdfea..ccae0f43d1 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/document/node_iterator.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/document/node_iterator.dart @@ -1,7 +1,6 @@ import 'package:appflowy_editor/src/document/node.dart'; import './state_tree.dart'; -import './node.dart'; /// [NodeIterator] is used to traverse the nodes in visual order. class NodeIterator implements Iterator { diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/document/text_delta.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/document/text_delta.dart index 2e6fa82437..fef58ed08c 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/document/text_delta.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/document/text_delta.dart @@ -4,7 +4,6 @@ import 'dart:math'; import 'package:appflowy_editor/src/document/attributes.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; -import './attributes.dart'; // constant number: 2^53 - 1 const int _maxInt = 9007199254740991; diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/extensions/node_extensions.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/extensions/node_extensions.dart index 5df8665a6b..dffca3eaf0 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/extensions/node_extensions.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/extensions/node_extensions.dart @@ -10,7 +10,8 @@ extension NodeExtensions on Node { key?.currentContext?.findRenderObject()?.unwrapOrNull(); BuildContext? get context => key?.currentContext; - Selectable? get selectable => key?.currentState?.unwrapOrNull(); + SelectableMixin? get selectable => + key?.currentState?.unwrapOrNull(); bool inSelection(Selection selection) { if (selection.start.path <= selection.end.path) { diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/image/image_node_widget.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/image/image_node_widget.dart index a65df11541..c720231f6e 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/image/image_node_widget.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/image/image_node_widget.dart @@ -32,7 +32,8 @@ class ImageNodeWidget extends StatefulWidget { State createState() => _ImageNodeWidgetState(); } -class _ImageNodeWidgetState extends State with Selectable { +class _ImageNodeWidgetState extends State + with SelectableMixin { final _imageKey = GlobalKey(); double? _imageWidth; diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/bulleted_list_text.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/bulleted_list_text.dart index 7f0f0363f8..58c86e7670 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/bulleted_list_text.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/bulleted_list_text.dart @@ -42,7 +42,7 @@ class BulletedListTextNodeWidget extends StatefulWidget { // customize class _BulletedListTextNodeWidgetState extends State - with Selectable, DefaultSelectable { + with SelectableMixin, DefaultSelectable { @override final iconKey = GlobalKey(); @@ -51,8 +51,8 @@ class _BulletedListTextNodeWidgetState extends State final _iconRightPadding = 5.0; @override - Selectable get forward => - _richTextKey.currentState as Selectable; + SelectableMixin get forward => + _richTextKey.currentState as SelectableMixin; @override Widget build(BuildContext context) { diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/checkbox_text.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/checkbox_text.dart index ed6748a43e..d6458304d6 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/checkbox_text.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/checkbox_text.dart @@ -40,7 +40,7 @@ class CheckboxNodeWidget extends StatefulWidget { } class _CheckboxNodeWidgetState extends State - with Selectable, DefaultSelectable { + with SelectableMixin, DefaultSelectable { @override final iconKey = GlobalKey(); @@ -49,8 +49,8 @@ class _CheckboxNodeWidgetState extends State final _iconRightPadding = 5.0; @override - Selectable get forward => - _richTextKey.currentState as Selectable; + SelectableMixin get forward => + _richTextKey.currentState as SelectableMixin; @override Widget build(BuildContext context) { diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/default_selectable.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/default_selectable.dart index c477478deb..fd86f84831 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/default_selectable.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/default_selectable.dart @@ -4,7 +4,7 @@ import 'package:appflowy_editor/src/render/selection/selectable.dart'; import 'package:flutter/material.dart'; mixin DefaultSelectable { - Selectable get forward; + SelectableMixin get forward; GlobalKey? get iconKey; diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/flowy_rich_text.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/flowy_rich_text.dart index 9d1b7f119e..9292c1e5cd 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/flowy_rich_text.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/flowy_rich_text.dart @@ -42,7 +42,7 @@ class FlowyRichText extends StatefulWidget { State createState() => _FlowyRichTextState(); } -class _FlowyRichTextState extends State with Selectable { +class _FlowyRichTextState extends State with SelectableMixin { var _textKey = GlobalKey(); final _placeholderTextKey = GlobalKey(); diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/heading_text.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/heading_text.dart index 93defaae8e..d58030ef15 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/heading_text.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/heading_text.dart @@ -39,7 +39,7 @@ class HeadingTextNodeWidget extends StatefulWidget { // customize class _HeadingTextNodeWidgetState extends State - with Selectable, DefaultSelectable { + with SelectableMixin, DefaultSelectable { @override GlobalKey? get iconKey => null; @@ -47,8 +47,8 @@ class _HeadingTextNodeWidgetState extends State final _topPadding = 5.0; @override - Selectable get forward => - _richTextKey.currentState as Selectable; + SelectableMixin get forward => + _richTextKey.currentState as SelectableMixin; @override Offset get baseOffset { diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/number_list_text.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/number_list_text.dart index 36cf91bdce..36d3d93ed9 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/number_list_text.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/number_list_text.dart @@ -42,7 +42,7 @@ class NumberListTextNodeWidget extends StatefulWidget { // customize class _NumberListTextNodeWidgetState extends State - with Selectable, DefaultSelectable { + with SelectableMixin, DefaultSelectable { @override final iconKey = GlobalKey(); @@ -51,8 +51,8 @@ class _NumberListTextNodeWidgetState extends State final _iconRightPadding = 5.0; @override - Selectable get forward => - _richTextKey.currentState as Selectable; + SelectableMixin get forward => + _richTextKey.currentState as SelectableMixin; @override Widget build(BuildContext context) { diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/quoted_text.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/quoted_text.dart index 9c2366d1cb..9e36acfad0 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/quoted_text.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/quoted_text.dart @@ -41,7 +41,7 @@ class QuotedTextNodeWidget extends StatefulWidget { // customize class _QuotedTextNodeWidgetState extends State - with Selectable, DefaultSelectable { + with SelectableMixin, DefaultSelectable { @override final iconKey = GlobalKey(); @@ -50,8 +50,8 @@ class _QuotedTextNodeWidgetState extends State final _iconRightPadding = 5.0; @override - Selectable get forward => - _richTextKey.currentState as Selectable; + SelectableMixin get forward => + _richTextKey.currentState as SelectableMixin; @override Widget build(BuildContext context) { diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/rich_text.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/rich_text.dart index b9a3e2f314..a00e1d7c14 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/rich_text.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/rich_text.dart @@ -40,15 +40,15 @@ class RichTextNodeWidget extends StatefulWidget { // customize class _RichTextNodeWidgetState extends State - with Selectable, DefaultSelectable { + with SelectableMixin, DefaultSelectable { @override GlobalKey? get iconKey => null; final _richTextKey = GlobalKey(debugLabel: 'rich_text'); @override - Selectable get forward => - _richTextKey.currentState as Selectable; + SelectableMixin get forward => + _richTextKey.currentState as SelectableMixin; @override Widget build(BuildContext context) { diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/selection/selectable.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/selection/selectable.dart index 434b4b67b1..372dbd7067 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/render/selection/selectable.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/render/selection/selectable.dart @@ -2,12 +2,12 @@ import 'package:appflowy_editor/src/document/position.dart'; import 'package:appflowy_editor/src/document/selection.dart'; import 'package:flutter/material.dart'; -/// [Selectable] is used for the editor to calculate the position +/// [SelectableMixin] is used for the editor to calculate the position /// and size of the selection. /// -/// The widget returned by NodeWidgetBuilder must be with [Selectable], +/// The widget returned by NodeWidgetBuilder must be with [SelectableMixin], /// otherwise the [AppFlowySelectionService] will not work properly. -mixin Selectable on State { +mixin SelectableMixin on State { /// Returns the [Selection] surrounded by start and end /// in current widget. /// diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/service/selection_service.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/service/selection_service.dart index ca442f4ff9..ef3b501a5b 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/service/selection_service.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/service/selection_service.dart @@ -510,7 +510,7 @@ class _AppFlowySelectionState extends State editorState.service.scrollService?.enable(); } - Rect _transformRectToGlobal(Selectable selectable, Rect r) { + Rect _transformRectToGlobal(SelectableMixin selectable, Rect r) { final Offset topLeft = selectable.localToGlobal(Offset(r.left, r.top)); return Rect.fromLTWH(topLeft.dx, topLeft.dy, r.width, r.height); } diff --git a/frontend/app_flowy/packages/appflowy_editor/pubspec.yaml b/frontend/app_flowy/packages/appflowy_editor/pubspec.yaml index 295a45ad8c..107ba54dba 100644 --- a/frontend/app_flowy/packages/appflowy_editor/pubspec.yaml +++ b/frontend/app_flowy/packages/appflowy_editor/pubspec.yaml @@ -3,6 +3,11 @@ description: A highly customizable rich-text editor for Flutter version: 0.0.3 homepage: https://github.com/AppFlowy-IO/AppFlowy +platforms: + linux: + macos: + windows: + environment: sdk: ">=2.17.0 <3.0.0" flutter: ">=1.17.0" From 54a6b863ebbaeaf93d90a76249f9e2171374ecab Mon Sep 17 00:00:00 2001 From: "Lucas.Xu" Date: Fri, 2 Sep 2022 10:32:13 +0800 Subject: [PATCH 02/17] chore: fix analysis issue on flutter 3.3.0 --- .../packages/appflowy_editor/lib/src/document/position.dart | 4 +--- .../appflowy_editor/lib/src/document/text_delta.dart | 3 +-- .../appflowy_editor/test/legacy/flowy_editor_test.dart | 5 ++--- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/document/position.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/document/position.dart index a87064d85a..cea065fdea 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/document/position.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/document/position.dart @@ -1,5 +1,3 @@ -import 'package:flutter/material.dart'; - import './path.dart'; class Position { @@ -21,7 +19,7 @@ class Position { @override int get hashCode { - final pathHash = hashList(path); + final pathHash = Object.hashAll(path); return Object.hash(pathHash, offset); } diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/src/document/text_delta.dart b/frontend/app_flowy/packages/appflowy_editor/lib/src/document/text_delta.dart index fef58ed08c..3ca877cc98 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/src/document/text_delta.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/src/document/text_delta.dart @@ -3,7 +3,6 @@ import 'dart:math'; import 'package:appflowy_editor/src/document/attributes.dart'; import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; // constant number: 2^53 - 1 const int _maxInt = 9007199254740991; @@ -462,7 +461,7 @@ class Delta extends Iterable { @override int get hashCode { - return hashList(_operations); + return Object.hashAll(_operations); } /// Returned an inverted delta that has the opposite effect of against a base document delta. diff --git a/frontend/app_flowy/packages/appflowy_editor/test/legacy/flowy_editor_test.dart b/frontend/app_flowy/packages/appflowy_editor/test/legacy/flowy_editor_test.dart index ab37cfec0c..df586b3ac0 100644 --- a/frontend/app_flowy/packages/appflowy_editor/test/legacy/flowy_editor_test.dart +++ b/frontend/app_flowy/packages/appflowy_editor/test/legacy/flowy_editor_test.dart @@ -1,7 +1,6 @@ import 'package:appflowy_editor/src/document/path.dart'; import 'package:appflowy_editor/src/document/position.dart'; import 'package:appflowy_editor/src/document/selection.dart'; -import 'package:flutter/material.dart'; import 'package:flutter_test/flutter_test.dart'; void main() { @@ -75,7 +74,7 @@ void main() { final path2 = [1]; expect(pathEquals(path1, path2), true); - expect(hashList(path1), hashList(path2)); + expect(Object.hashAll(path1), Object.hashAll(path2)); }); test('test path utils 2', () { @@ -83,7 +82,7 @@ void main() { final path2 = [2]; expect(pathEquals(path1, path2), false); - expect(hashList(path1) != hashList(path2), true); + expect(Object.hashAll(path1) != Object.hashAll(path2), true); }); test('test position comparator', () { From 110dc8c239749c8cd9503de230bb99b9b0552ca0 Mon Sep 17 00:00:00 2001 From: "Lucas.Xu" Date: Fri, 2 Sep 2022 11:08:09 +0800 Subject: [PATCH 03/17] chore: upgrade the editor example gif --- .../packages/appflowy_editor/README.md | 2 +- .../images/appflowy-editor-example.gif | Bin 0 -> 1021817 bytes 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 frontend/app_flowy/packages/appflowy_editor/documentation/images/appflowy-editor-example.gif diff --git a/frontend/app_flowy/packages/appflowy_editor/README.md b/frontend/app_flowy/packages/appflowy_editor/README.md index e450a5a7c1..718c108d5a 100644 --- a/frontend/app_flowy/packages/appflowy_editor/README.md +++ b/frontend/app_flowy/packages/appflowy_editor/README.md @@ -21,7 +21,7 @@ and the Flutter guide for

- +
## Key Features diff --git a/frontend/app_flowy/packages/appflowy_editor/documentation/images/appflowy-editor-example.gif b/frontend/app_flowy/packages/appflowy_editor/documentation/images/appflowy-editor-example.gif new file mode 100644 index 0000000000000000000000000000000000000000..a84956205213b17db300f5f317c391375200948c GIT binary patch literal 1021817 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%0DXqX0ZK0c2H^c68rvVOOsKn? z@duw139zgu>(hN%|MGaytgWW#>*MQ*lhFeS7r$}jW`CoW*u@9IYfIlTmksz97K_gGHMW5{Sz3s zj*vY)#huh!Wd!*crJOf0h1!@(;F!+Ro#wYn^0o8d&M%|rw9ghJad-@wHL=f$YD zMNIx;9CdMNc9EjC^iY2(EpSOOVJRbFDYQbJySgzV~;i_ms;BrZz=*vKn zvbN>qt!13OP_6Y!ec(#t^OfedmDV3CZPb+xzTaJHzkAO8u4Y{6fBt)*?f0NQP(Ji~ zNKKB%^Y^gzpW9ua3J~T7;m_!gKTdZ*NdTr=3S;&2&rfS{5iku>8@v@Fn+cejN;3UA97>^Lnk&H-LmOi1B1>(U)=CVA`X+J+)3%P`S-&Kn z{nsPpFE*Eil^a{evu6Y!F;q`ux~4JB09wp;%jotQVQKm<0{t7>O}*pq z)v0ZwEU3kkzMn!r;K}d~z*uMRJdgzq4(+@l(7#`&`&hnnZ%r5}h54{f%iJ@3B5d71 z*_GUc-vEI=6Bxd9&;lY>hB!)o=z+8c-Uj}9BN51ZQ$Tc-}&P7XWxkGj;4 zdTt!`K04~pJ{o908k{<^q}nlzP9H@x9S=($-@kJF<@T}bmE&*i$Ky=L->0^xvX5u7 z|IQ^IFWlJrb%nb0abxZg!|y37OFMP*Hg)~u@pi@E#q5)#e~RrVATPaXLI|9JkDP8W zLyBNHr546%I7^OUJ8RvOZaAlvaOy%JjLT?VJ6TxoIr*v4f^OQ`>uq6NSO0Gcs{i~# z02Rhe(B;S=atLeRy_(#=%Zm{09ZqdSrz*zbNQb?=#C?j~_IL8G_Gh&vW+8KNQqz|IW|%&(tINt{>c6{!(_M@A>t^e<NNF%A{zF04VbZkfo=_E;$BD=T~X*-0qRS zc*=Xe>LULmn2a_)Qm9&6Fp(^yBmBgnT1O;1Oh#9PwRCFxkuh z4F!$*Zz-spp(e-wGX)i{Gybm>H2fdNSx{$cdG#_O*wTBUZj3CvE^lrdDO_)EpQy=B zHcPH^z2=l1u3&MqsG#1$t>TS>rF+9dz2)sS4C>!mJpcbfq4xG@e1_W5G)uWP*D#ghnqJ4E*$+B-s$Sw{=2=K@4EFg;8TLxQf9`aXV!jJ^PhnF zpXT*DPY0LWTUJe4|EAeel zqSt&w%T{vsTA1JZ)0myNQ@c-7*MIF%bED^dk~hC~@6rYgm9{R?mgCNwzt7{pCEpsY z4ByKBLw)>Viw0Eg-@o72*N33v|N3p>w1}vqqhotr?dt04`}gnX<`<6l_uAUpR;Nb) z&mfoo|6BjJ6`)b5{r|xv9gP@Xo$7pT(3z{7I&Z6mK?xG*lB~sQ+9Vw%LxIwpMn8L> z0>N!tO)}2!o+nEMCc%SLQXY-v{bm(I`}R%&AKXw}NOCN`P!xUuO9j z{KNHf<_>P65%blfN4%k8syzsb;roX|(Xx2r)`N{zbA1%SOV2MiRWH0tmv#Fw*i`fD zV~$2FpI&qA(&yr%Q>iGFtF5>_=2Ska>n$5f;GAfF}6HMaBFP?>S zt`FxCP~0Q9n^=dANCY=3MNorhooE}b#>e_1GWor>0P+;7_PN!Gd|2n>E6tn>gi9aJ zSVSt4YKe)sH$^i9K0xQ|Lm~Fj{Al>I;-Of&Yrd9=>VYHt{I+zo@hloKqEF$D5xDWE zETT9P5wkh-^OmIt*Zf86khgs(R1(f0>!CoeGm`zDl#5Leqj8rX=P8SC2~38#WVHWu z!w}j(E6BBg8o8mIM_|vP?eF-aUAZB?`gQpv(GH7ouo!DCq>$IRqp#x5jIP0BEL+K| zN?6sv#mW)7-jHfYS;s|mIwQ>0=EEJiKR!d}!rbeFlrx3+&kl(hK=`FGMom1=VzXYO zlqsu(QM-v(S|`=-3|oc14Mbwzd?*RQFwYdMSpcu4r1|$;&z|7<73lAUk`=S`hQ2D%r-Tdw3zTkxiV#eJcz(UJ zn>wldOCE?mRf&^la8xi3?t(G6QyM;YH5f3#3i>0NF7u~&X#Ge~Dpl4fuzF zPCpC55ipWhqNlMzPL-m}Pq})}w-}J_gc0W~S;;JVa$7kp{*~&K!z)rL;Di$Ic*E=H zfPEE`k_b5j**phj^&Bg4d;P~98XW?8fuk_$d zz>@C`D>Fyu`{nCs-;Nfg4p~+y53e5<#2w~OuY;|E=!}6VCi=Y7@6cg-R6#61|3F{l zd&hY*J%GeUet=47=0qN*XR>%Vc5#*@T{L$5I-Qh1SX zq!Cm#{LDtKfn|UGY0)kTK@|rb_318F%q&?Xa1fX6b_2@rDLhiUQ@~L}TLLr9A2RYA zXGVCD-!cCt6l8#Nkm$#<`jiDb1Sj|}8ZZj=N6K^0d+Rjfz!#%iUAbWxA1mz{`j9T~ zV^<2QYKm|NRi&x6iQ6z5o>vh82zolY2;X1iRvcv`pc8LRT^uK@KBaKxUcsICUpv2# zgNbn7GlVD2YB$zW&_Uo!cW3R0KEi;M3^}eN>oouDU5K+C1y?f%g`Y}>@!=k4eDy~~ zA(Dk8-W0(7gbbCrLX@HmL?S28JNrxvQ&_4*RTjXr8i+zb;9S^q&3O$@{e3`W6C9wo zo=+U-Xnt1ckpg)t#9yL>jgXl);SnPdA4CJc=6_q3%yP@>2bQ5 zTK=a1+6+PV1{IYM7$J*oqlC!(CK3{a$73p~A)H!1rlI-r=?JeCaRaP$l{8ZUu};ekQUyyP1t+f;g|aTD@NtfwLxM&4>!o6%mRK z#TMuSMa)8}aPS`jJkLOFu?FYRubpTu8cscEXooIUaB>FaC}YFGf-42?k6xOFEwYC` zG(mAoa*|vJh8r2MSURRnK5R4!?%2OdLs68Uj6yw5QYd|n&02Q!b|BYA*B8cFoi>

7t*LwihqF`xJ_hq2p5O2-Y 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

-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%0DR51mK7M%*bx@g%fn6H>P9 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�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

vzM>hb5aOx&}&a$ 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

At>7UOgY5na1c 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 Rk`uOf29)I&VK9is{{h Date: Thu, 1 Sep 2022 09:03:33 +0800 Subject: [PATCH 04/17] chore: support switch to multi select field --- .../flowy-grid/src/services/grid_editor.rs | 4 + .../src/services/grid_view_editor.rs | 84 +++++++++++++------ .../src/services/group/group_service.rs | 68 +++++++++++++++ .../flowy-grid/src/services/group/mod.rs | 1 + .../tests/grid/group_test/script.rs | 23 ++++- .../flowy-grid/tests/grid/group_test/test.rs | 9 ++ 6 files changed, 164 insertions(+), 25 deletions(-) diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs index 9ae7918955..176915fe1c 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs @@ -207,6 +207,10 @@ impl GridRevisionEditor { Ok(()) } + pub async fn group_field(&self, field_id: &str) -> FlowyResult<()> { + todo!() + } + pub async fn switch_to_field_type(&self, field_id: &str, field_type: &FieldType) -> FlowyResult<()> { // let block_ids = self // .get_block_metas() diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs index 688a844707..f598f5bb0b 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs @@ -6,7 +6,9 @@ use crate::entities::{ }; use crate::services::grid_editor_task::GridServiceTaskScheduler; use crate::services::grid_view_manager::{GridViewFieldDelegate, GridViewRowDelegate}; -use crate::services::group::{GroupConfigurationReader, GroupConfigurationWriter, GroupService}; +use crate::services::group::{ + make_group_controller, GroupConfigurationReader, GroupConfigurationWriter, GroupController, GroupService, +}; use flowy_error::{FlowyError, FlowyResult}; use flowy_grid_data_model::revision::{ gen_grid_filter_id, FieldRevision, FieldTypeRevision, FilterConfigurationRevision, GroupConfigurationRevision, @@ -17,6 +19,7 @@ use flowy_sync::client_grid::{GridViewRevisionChangeset, GridViewRevisionPad}; use flowy_sync::entities::revision::Revision; use lib_infra::future::{wrap_future, AFFuture, FutureResult}; use std::collections::HashMap; +use std::future::Future; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; @@ -30,9 +33,8 @@ pub struct GridViewRevisionEditor { rev_manager: Arc, field_delegate: Arc, row_delegate: Arc, - group_service: Arc>, + group_controller: Arc>>, scheduler: Arc, - did_load_group: AtomicBool, } impl GridViewRevisionEditor { @@ -53,15 +55,25 @@ impl GridViewRevisionEditor { let pad = Arc::new(RwLock::new(view_revision_pad)); let rev_manager = Arc::new(rev_manager); + // Load group let configuration_reader = GroupConfigurationReaderImpl(pad.clone()); let configuration_writer = GroupConfigurationWriterImpl { user_id: user_id.to_owned(), rev_manager: rev_manager.clone(), view_pad: pad.clone(), }; - let group_service = GroupService::new(view_id.clone(), configuration_reader, configuration_writer).await; + let field_revs = field_delegate.get_field_revs().await; + let row_revs = row_delegate.gv_row_revs().await; + let group_controller = make_group_controller( + view_id.clone(), + field_revs, + row_revs, + configuration_reader, + configuration_writer, + ) + .await?; + let user_id = user_id.to_owned(); - let did_load_group = AtomicBool::new(false); Ok(Self { pad, user_id, @@ -70,8 +82,7 @@ impl GridViewRevisionEditor { scheduler, field_delegate, row_delegate, - group_service: Arc::new(RwLock::new(group_service)), - did_load_group, + group_controller: Arc::new(RwLock::new(group_controller)), }) } @@ -112,33 +123,58 @@ impl GridViewRevisionEditor { pub(crate) async fn did_delete_row(&self, row_rev: &RowRevision) { // Send the group notification if the current view has groups; - if let Some(changesets) = self - .group_service - .write() - .await - .did_delete_row(row_rev, |field_id| self.field_delegate.get_field_rev(&field_id)) - .await - { + let group_field_id = self.group_controller.read().await.field_id().to_owned(); + let field_rev = self.field_delegate.get_field_rev(&group_field_id).await; + field_rev.and_then(|field_rev| { + if let Some(changesets) = self + .group_controller + .write() + .await + .did_delete_row(row_rev, &field_rev) + .await + { + for changeset in changesets { + self.notify_did_update_group(changeset).await; + } + } + None + }); + } + + pub(crate) async fn did_update_row(&self, row_rev: &RowRevision) { + let changeset = self + .mut_group_controller(|group_controller, field_rev| async { + group_controller.did_update_row(row_rev, &field_rev).await + }) + .await?; + + if let Some(changeset) = changeset { for changeset in changesets { self.notify_did_update_group(changeset).await; } } } - pub(crate) async fn did_update_row(&self, row_rev: &RowRevision) { - if let Some(changesets) = self - .group_service - .write() - .await - .did_update_row(row_rev, |field_id| self.field_delegate.get_field_rev(&field_id)) - .await - { - for changeset in changesets { - self.notify_did_update_group(changeset).await; + async fn mut_group_controller(&self, f: F) -> Option + where + F: FnOnce(&mut Box, Arc) -> O, + O: Future> + Send + Sync + 'static, + { + let group_field_id = self.group_controller.read().await.field_id().to_owned(); + match self.field_delegate.get_field_rev(&group_field_id).await { + None => None, + Some(field_rev) => { + let mut write_guard = self.group_controller.write().await; + Some(f(&mut write_guard, field_rev).await) } } } + async fn get_group_field_rev(&self) -> Option> { + let group_field_id = self.group_controller.read().await.field_id().to_owned(); + self.field_delegate.get_field_rev(&group_field_id).await + } + pub(crate) async fn move_group_row( &self, row_rev: &RowRevision, diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_service.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_service.rs index c7d67f65d6..8cdae4c359 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_service.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/group_service.rs @@ -241,6 +241,74 @@ impl GroupService { } } +#[tracing::instrument(level = "trace", skip_all, err)] +pub async fn make_group_controller( + view_id: String, + field_revs: Vec>, + row_revs: Vec>, + configuration_reader: R, + configuration_writer: W, +) -> FlowyResult> +where + R: GroupConfigurationReader, + W: GroupConfigurationWriter, +{ + let field_rev = find_group_field(&field_revs)?; + let field_type: FieldType = field_rev.ty.into(); + let mut group_controller: Box; + match field_type { + FieldType::RichText => { + // let generator = GroupGenerator::::from_configuration(configuration); + panic!() + } + FieldType::Number => { + // let generator = GroupGenerator::::from_configuration(configuration); + panic!() + } + FieldType::DateTime => { + // let generator = GroupGenerator::::from_configuration(configuration); + panic!() + } + FieldType::SingleSelect => { + let configuration = SelectOptionGroupConfiguration::new( + view_id, + field_rev.clone(), + configuration_reader, + configuration_writer, + ) + .await?; + let controller = SingleSelectGroupController::new(&field_rev, configuration).await?; + group_controller = Box::new(controller); + } + FieldType::MultiSelect => { + let configuration = SelectOptionGroupConfiguration::new( + view_id, + field_rev.clone(), + configuration_reader, + configuration_writer, + ) + .await?; + let controller = MultiSelectGroupController::new(&field_rev, configuration).await?; + group_controller = Box::new(controller); + } + FieldType::Checkbox => { + let configuration = + CheckboxGroupConfiguration::new(view_id, field_rev.clone(), configuration_reader, configuration_writer) + .await?; + let controller = CheckboxGroupController::new(&field_rev, configuration).await?; + group_controller = Box::new(controller); + } + FieldType::URL => { + // let generator = GroupGenerator::::from_configuration(configuration); + panic!() + } + } + + let _ = group_controller.fill_groups(&row_revs, &field_rev)?; + + Ok(group_controller) +} + fn find_group_field(field_revs: &[Arc]) -> Option> { let field_rev = field_revs .iter() diff --git a/frontend/rust-lib/flowy-grid/src/services/group/mod.rs b/frontend/rust-lib/flowy-grid/src/services/group/mod.rs index 2bc979c28d..35c443f06b 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/mod.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/mod.rs @@ -6,6 +6,7 @@ mod entities; mod group_service; pub(crate) use configuration::*; +pub(crate) use controller::*; pub(crate) use controller_impls::*; pub(crate) use entities::*; pub(crate) use group_service::*; diff --git a/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs b/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs index 6afeda6d4b..e779844d46 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs @@ -3,7 +3,8 @@ use flowy_grid::entities::{ CreateRowParams, FieldChangesetParams, FieldType, GridLayout, GroupPB, MoveGroupParams, MoveGroupRowParams, RowPB, }; use flowy_grid::services::cell::{delete_select_option_cell, insert_select_option_cell}; -use flowy_grid_data_model::revision::RowChangeset; +use flowy_grid_data_model::revision::{FieldRevision, RowChangeset}; +use std::sync::Arc; use std::time::Duration; use tokio::time::interval; @@ -47,6 +48,9 @@ pub enum GroupScript { UpdateField { changeset: FieldChangesetParams, }, + GroupField { + field_id: String, + }, } pub struct GridGroupTest { @@ -179,6 +183,9 @@ impl GridGroupTest { let mut interval = interval(Duration::from_millis(130)); interval.tick().await; } + GroupScript::GroupField { field_id } => { + self.editor.group_field(&field_id).await.unwrap(); + } } } @@ -191,6 +198,20 @@ impl GridGroupTest { let groups = self.group_at_index(group_index).await; groups.rows.get(row_index).unwrap().clone() } + + pub async fn get_multi_select_field(&self) -> Arc { + let field = self + .inner + .field_revs + .iter() + .find(|field_rev| { + let field_type: FieldType = field_rev.ty.into(); + field_type.is_multi_select() + }) + .unwrap() + .clone(); + return field; + } } impl std::ops::Deref for GridGroupTest { diff --git a/frontend/rust-lib/flowy-grid/tests/grid/group_test/test.rs b/frontend/rust-lib/flowy-grid/tests/grid/group_test/test.rs index a52a088f51..297527b905 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/group_test/test.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/group_test/test.rs @@ -390,3 +390,12 @@ async fn group_update_field_test() { ]; test.run_scripts(scripts).await; } + +#[tokio::test] +async fn group_multi_select_field_test() { + let mut test = GridGroupTest::new().await; + let multi_select_field = test.get_multi_select_field().await; + + let scripts = vec![]; + test.run_scripts(scripts).await; +} From f192f89ebb098822089b4e0dc350ee180533d2d1 Mon Sep 17 00:00:00 2001 From: appflowy Date: Thu, 1 Sep 2022 20:41:15 +0800 Subject: [PATCH 05/17] chore: refactor group gen process --- .../assets/images/grid/setting/group.svg | 7 + .../app_flowy/assets/translations/en.json | 3 +- .../toolbar/board_setting_bloc.dart | 1 + .../presentation/toolbar/board_setting.dart | 10 + .../widgets/toolbar/grid_group.dart | 27 ++ .../src/entities/group_entities/group.rs | 4 + .../group_entities/group_changeset.rs | 3 + .../src/services/grid_view_editor.rs | 171 ++++----- .../src/services/group/configuration.rs | 208 +++++----- .../src/services/group/controller.rs | 38 +- .../controller_impls/checkbox_controller.rs | 36 +- .../controller_impls/default_controller.rs | 80 ++++ .../services/group/controller_impls/mod.rs | 2 + .../multi_select_controller.rs | 28 +- .../single_select_controller.rs | 28 +- .../select_option_controller/util.rs | 30 +- .../flowy-grid/src/services/group/entities.rs | 8 +- .../src/services/group/group_service.rs | 361 ------------------ .../src/services/group/group_util.rs | 113 ++++++ .../flowy-grid/src/services/group/mod.rs | 4 +- .../flowy-grid/tests/grid/group_test/test.rs | 16 +- .../src/revision/group_rev.rs | 38 +- 22 files changed, 554 insertions(+), 662 deletions(-) create mode 100644 frontend/app_flowy/assets/images/grid/setting/group.svg create mode 100644 frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart create mode 100644 frontend/rust-lib/flowy-grid/src/services/group/controller_impls/default_controller.rs delete mode 100644 frontend/rust-lib/flowy-grid/src/services/group/group_service.rs create mode 100644 frontend/rust-lib/flowy-grid/src/services/group/group_util.rs diff --git a/frontend/app_flowy/assets/images/grid/setting/group.svg b/frontend/app_flowy/assets/images/grid/setting/group.svg new file mode 100644 index 0000000000..f0a6dff4f9 --- /dev/null +++ b/frontend/app_flowy/assets/images/grid/setting/group.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/frontend/app_flowy/assets/translations/en.json b/frontend/app_flowy/assets/translations/en.json index 953e5b02bb..3990a5acc4 100644 --- a/frontend/app_flowy/assets/translations/en.json +++ b/frontend/app_flowy/assets/translations/en.json @@ -160,7 +160,8 @@ "settings": { "filter": "Filter", "sortBy": "Sort by", - "Properties": "Properties" + "Properties": "Properties", + "group": "Group" }, "field": { "hide": "Hide", diff --git a/frontend/app_flowy/lib/plugins/board/application/toolbar/board_setting_bloc.dart b/frontend/app_flowy/lib/plugins/board/application/toolbar/board_setting_bloc.dart index 480b3a4768..97185c5efe 100644 --- a/frontend/app_flowy/lib/plugins/board/application/toolbar/board_setting_bloc.dart +++ b/frontend/app_flowy/lib/plugins/board/application/toolbar/board_setting_bloc.dart @@ -43,4 +43,5 @@ class BoardSettingState with _$BoardSettingState { enum BoardSettingAction { properties, + groups, } diff --git a/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart b/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart index 76ab265a90..962ea28e15 100644 --- a/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart +++ b/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart @@ -95,6 +95,12 @@ class BoardSettingList extends StatelessWidget { fieldCache: settingContext.fieldCache) .show(context); break; + case BoardSettingAction.groups: + GridPropertyList( + gridId: settingContext.viewId, + fieldCache: settingContext.fieldCache) + .show(context); + break; } }, ); @@ -156,6 +162,8 @@ extension _GridSettingExtension on BoardSettingAction { switch (this) { case BoardSettingAction.properties: return 'grid/setting/properties'; + case BoardSettingAction.groups: + return 'grid/setting/group'; } } @@ -163,6 +171,8 @@ extension _GridSettingExtension on BoardSettingAction { switch (this) { case BoardSettingAction.properties: return LocaleKeys.grid_settings_Properties.tr(); + case BoardSettingAction.groups: + return LocaleKeys.grid_settings_group.tr(); } } } diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart new file mode 100644 index 0000000000..5ef4ed7f11 --- /dev/null +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart @@ -0,0 +1,27 @@ +import 'package:flowy_infra/theme.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class GridGroupList extends StatelessWidget { + const GridGroupList({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container(); + } +} + +class _GridGroupCell extends StatelessWidget { + const _GridGroupCell({Key? key}) : super(key: key); + + @override + Widget build(BuildContext context) { + final theme = context.watch(); + + // final checkmark = field.visibility + // ? svgWidget('home/show', color: theme.iconColor) + // : svgWidget('home/hide', color: theme.iconColor); + + return Container(); + } +} diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/group.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/group.rs index 002cb73c6d..3ed53080ef 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/group.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/group_entities/group.rs @@ -91,6 +91,9 @@ pub struct GroupPB { #[pb(index = 5)] pub is_default: bool, + + #[pb(index = 6)] + pub is_visible: bool, } impl std::convert::From for GroupPB { @@ -101,6 +104,7 @@ impl std::convert::From for GroupPB { desc: group.name, rows: group.rows, is_default: group.is_default, + is_visible: group.is_visible, } } } diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs index 21f39775f6..3d37a6ffa4 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs @@ -133,6 +133,9 @@ pub struct GroupViewChangesetPB { #[pb(index = 2)] pub inserted_groups: Vec, + #[pb(index = 2)] + pub new_groups: Vec, + #[pb(index = 3)] pub deleted_groups: Vec, diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs index f598f5bb0b..bfe752ec12 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs @@ -7,7 +7,7 @@ use crate::entities::{ use crate::services::grid_editor_task::GridServiceTaskScheduler; use crate::services::grid_view_manager::{GridViewFieldDelegate, GridViewRowDelegate}; use crate::services::group::{ - make_group_controller, GroupConfigurationReader, GroupConfigurationWriter, GroupController, GroupService, + make_group_controller, GroupConfigurationReader, GroupConfigurationWriter, GroupController, MoveGroupRowContext, }; use flowy_error::{FlowyError, FlowyResult}; use flowy_grid_data_model::revision::{ @@ -20,8 +20,6 @@ use flowy_sync::entities::revision::Revision; use lib_infra::future::{wrap_future, AFFuture, FutureResult}; use std::collections::HashMap; use std::future::Future; - -use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; use tokio::sync::RwLock; @@ -87,18 +85,16 @@ impl GridViewRevisionEditor { } pub(crate) async fn will_create_row(&self, row_rev: &mut RowRevision, params: &CreateRowParams) { - match params.group_id.as_ref() { - None => {} - Some(group_id) => { - self.group_service - .write() - .await - .will_create_row(row_rev, group_id, |field_id| { - self.field_delegate.get_field_rev(&field_id) - }) - .await; - } + if params.group_id.is_none() { + return; } + let group_id = params.group_id.as_ref().unwrap(); + let _ = self + .mut_group_controller(|group_controller, field_rev| { + group_controller.will_create_row(row_rev, &field_rev, group_id); + Ok(()) + }) + .await; } pub(crate) async fn did_create_row(&self, row_pb: &RowPB, params: &CreateRowParams) { @@ -123,58 +119,29 @@ impl GridViewRevisionEditor { pub(crate) async fn did_delete_row(&self, row_rev: &RowRevision) { // Send the group notification if the current view has groups; - let group_field_id = self.group_controller.read().await.field_id().to_owned(); - let field_rev = self.field_delegate.get_field_rev(&group_field_id).await; - field_rev.and_then(|field_rev| { - if let Some(changesets) = self - .group_controller - .write() - .await - .did_delete_row(row_rev, &field_rev) - .await - { - for changeset in changesets { - self.notify_did_update_group(changeset).await; - } - } - None - }); - } + let changesets = self + .mut_group_controller(|group_controller, field_rev| group_controller.did_delete_row(row_rev, &field_rev)) + .await; - pub(crate) async fn did_update_row(&self, row_rev: &RowRevision) { - let changeset = self - .mut_group_controller(|group_controller, field_rev| async { - group_controller.did_update_row(row_rev, &field_rev).await - }) - .await?; - - if let Some(changeset) = changeset { + if let Some(changesets) = changesets { for changeset in changesets { self.notify_did_update_group(changeset).await; } } } - async fn mut_group_controller(&self, f: F) -> Option - where - F: FnOnce(&mut Box, Arc) -> O, - O: Future> + Send + Sync + 'static, - { - let group_field_id = self.group_controller.read().await.field_id().to_owned(); - match self.field_delegate.get_field_rev(&group_field_id).await { - None => None, - Some(field_rev) => { - let mut write_guard = self.group_controller.write().await; - Some(f(&mut write_guard, field_rev).await) + pub(crate) async fn did_update_row(&self, row_rev: &RowRevision) { + let changesets = self + .mut_group_controller(|group_controller, field_rev| group_controller.did_update_row(row_rev, &field_rev)) + .await; + + if let Some(changesets) = changesets { + for changeset in changesets { + self.notify_did_update_group(changeset).await; } } } - async fn get_group_field_rev(&self) -> Option> { - let group_field_id = self.group_controller.read().await.field_id().to_owned(); - self.field_delegate.get_field_rev(&group_field_id).await - } - pub(crate) async fn move_group_row( &self, row_rev: &RowRevision, @@ -182,54 +149,38 @@ impl GridViewRevisionEditor { to_group_id: &str, to_row_id: Option, ) -> Vec { - match self - .group_service - .write() - .await - .move_group_row(row_rev, row_changeset, to_group_id, to_row_id, |field_id| { - self.field_delegate.get_field_rev(&field_id) + let changesets = self + .mut_group_controller(|group_controller, field_rev| { + let move_row_context = MoveGroupRowContext { + row_rev, + row_changeset, + field_rev: field_rev.as_ref(), + to_group_id, + to_row_id, + }; + + let changesets = group_controller.move_group_row(move_row_context)?; + Ok(changesets) }) - .await - { - None => vec![], - Some(changesets) => changesets, - } + .await; + + changesets.unwrap_or_default() } /// Only call once after grid view editor initialized #[tracing::instrument(level = "trace", skip(self))] pub(crate) async fn load_groups(&self) -> FlowyResult> { - let groups = if !self.did_load_group.load(Ordering::SeqCst) { - self.did_load_group.store(true, Ordering::SeqCst); - let field_revs = self.field_delegate.get_field_revs().await; - let row_revs = self.row_delegate.gv_row_revs().await; - - match self - .group_service - .write() - .await - .load_groups(&field_revs, row_revs) - .await - { - None => vec![], - Some(groups) => groups, - } - } else { - self.group_service.read().await.groups().await - }; - + let groups = self.group_controller.read().await.groups(); tracing::trace!("Number of groups: {}", groups.len()); Ok(groups.into_iter().map(GroupPB::from).collect()) } pub(crate) async fn move_group(&self, params: MoveGroupParams) -> FlowyResult<()> { let _ = self - .group_service + .group_controller .write() .await - .move_group(¶ms.from_group_id, ¶ms.to_group_id) - .await?; - - match self.group_service.read().await.get_group(¶ms.from_group_id).await { + .move_group(¶ms.from_group_id, ¶ms.to_group_id)?; + match self.group_controller.read().await.get_group(¶ms.from_group_id) { None => {} Some((index, group)) => { let inserted_group = InsertedGroupPB { @@ -242,6 +193,7 @@ impl GridViewRevisionEditor { inserted_groups: vec![inserted_group], deleted_groups: vec![params.from_group_id.clone()], update_groups: vec![], + new_groups: vec![], }; self.notify_did_update_view(changeset).await; @@ -296,7 +248,7 @@ impl GridViewRevisionEditor { #[tracing::instrument(level = "trace", skip_all, err)] pub(crate) async fn did_update_field(&self, field_id: &str) -> FlowyResult<()> { if let Some(field_rev) = self.field_delegate.get_field_rev(field_id).await { - match self.group_service.write().await.did_update_field(&field_rev).await? { + match self.group_controller.write().await.did_update_field(&field_rev)? { None => {} Some(changeset) => { self.notify_did_update_view(changeset).await; @@ -331,6 +283,36 @@ impl GridViewRevisionEditor { } Ok(()) } + + async fn mut_group_controller(&self, f: F) -> Option + where + F: FnOnce(&mut Box, Arc) -> FlowyResult, + { + let group_field_id = self.group_controller.read().await.field_id().to_owned(); + match self.field_delegate.get_field_rev(&group_field_id).await { + None => None, + Some(field_rev) => { + let mut write_guard = self.group_controller.write().await; + f(&mut write_guard, field_rev).ok() + } + } + } + + #[allow(dead_code)] + async fn async_mut_group_controller(&self, f: F) -> Option + where + F: FnOnce(Arc>>, Arc) -> O, + O: Future> + Sync + 'static, + { + let group_field_id = self.group_controller.read().await.field_id().to_owned(); + match self.field_delegate.get_field_rev(&group_field_id).await { + None => None, + Some(field_rev) => { + let _write_guard = self.group_controller.write().await; + f(self.group_controller.clone(), field_rev).await.ok() + } + } + } } async fn apply_change( @@ -371,10 +353,7 @@ impl RevisionObjectBuilder for GridViewRevisionPadBuilder { struct GroupConfigurationReaderImpl(Arc>); impl GroupConfigurationReader for GroupConfigurationReaderImpl { - fn get_group_configuration( - &self, - field_rev: Arc, - ) -> AFFuture>> { + fn get_configuration(&self, field_rev: Arc) -> AFFuture>> { let view_pad = self.0.clone(); wrap_future(async move { let mut groups = view_pad.read().await.groups.get_objects(&field_rev.id, &field_rev.ty)?; @@ -395,7 +374,7 @@ struct GroupConfigurationWriterImpl { } impl GroupConfigurationWriter for GroupConfigurationWriterImpl { - fn save_group_configuration( + fn save_configuration( &self, field_id: &str, field_type: FieldTypeRevision, diff --git a/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs b/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs index 3fb5cefaa3..fba6adf7df 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs @@ -1,24 +1,22 @@ use crate::entities::{GroupPB, GroupViewChangesetPB, InsertedGroupPB}; -use crate::services::group::{default_group_configuration, Group}; +use crate::services::group::{default_group_configuration, GeneratedGroup, Group}; use flowy_error::{FlowyError, FlowyResult}; use flowy_grid_data_model::revision::{ FieldRevision, FieldTypeRevision, GroupConfigurationContentSerde, GroupConfigurationRevision, GroupRevision, }; use indexmap::IndexMap; use lib_infra::future::AFFuture; +use std::collections::HashMap; use std::fmt::Formatter; use std::marker::PhantomData; use std::sync::Arc; pub trait GroupConfigurationReader: Send + Sync + 'static { - fn get_group_configuration( - &self, - field_rev: Arc, - ) -> AFFuture>>; + fn get_configuration(&self, field_rev: Arc) -> AFFuture>>; } pub trait GroupConfigurationWriter: Send + Sync + 'static { - fn save_group_configuration( + fn save_configuration( &self, field_id: &str, field_type: FieldTypeRevision, @@ -26,7 +24,7 @@ pub trait GroupConfigurationWriter: Send + Sync + 'static { ) -> AFFuture>; } -impl std::fmt::Display for GenericGroupConfiguration { +impl std::fmt::Display for GroupContext { fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { self.groups_map.iter().for_each(|(_, group)| { let _ = f.write_fmt(format_args!("Group:{} has {} rows \n", group.id, group.rows.len())); @@ -39,7 +37,7 @@ impl std::fmt::Display for GenericGroupConfiguration { } } -pub struct GenericGroupConfiguration { +pub struct GroupContext { view_id: String, pub configuration: Arc, configuration_content: PhantomData, @@ -50,7 +48,7 @@ pub struct GenericGroupConfiguration { writer: Arc, } -impl GenericGroupConfiguration +impl GroupContext where C: GroupConfigurationContentSerde, { @@ -67,16 +65,17 @@ where field_id: field_rev.id.clone(), name: format!("No {}", field_rev.name), is_default: true, + is_visible: true, rows: vec![], - content: "".to_string(), + filter_content: "".to_string(), }; - let configuration = match reader.get_group_configuration(field_rev.clone()).await { + let configuration = match reader.get_configuration(field_rev.clone()).await { None => { - let default_group_configuration = default_group_configuration(&field_rev); + let default_configuration = default_group_configuration(&field_rev); writer - .save_group_configuration(&field_rev.id, field_rev.ty, default_group_configuration.clone()) + .save_configuration(&field_rev.id, field_rev.ty, default_configuration.clone()) .await?; - Arc::new(default_group_configuration) + Arc::new(default_configuration) } Some(configuration) => configuration, }; @@ -134,47 +133,100 @@ where } } - pub(crate) fn merge_groups(&mut self, groups: Vec) -> FlowyResult> { + pub(crate) fn init_group_revs( + &mut self, + generated_groups: Vec, + ) -> FlowyResult> { + let mut new_groups = vec![]; + let mut filter_content_map = HashMap::new(); + generated_groups.into_iter().for_each(|generate_group| { + filter_content_map.insert(generate_group.group_rev.id.clone(), generate_group.filter_content); + new_groups.push(generate_group.group_rev); + }); + let MergeGroupResult { - groups, - inserted_groups, - updated_groups, - } = merge_groups(&self.configuration.groups, groups); + mut all_group_revs, + new_group_revs, + updated_group_revs: _, + deleted_group_revs, + } = merge_groups(&self.configuration.groups, new_groups); - let group_revs = groups + let deleted_group_ids = deleted_group_revs .iter() - .map(|group| GroupRevision::new(group.id.clone(), group.name.clone())) - .collect::>(); + .map(|group_rev| group_rev.id) + .collect::>(); - self.mut_configuration(move |configuration| { + self.mut_configuration(|configuration| { let mut is_changed = false; - for new_group_rev in group_revs { + if !deleted_group_ids.is_empty() { + configuration + .groups + .retain(|group| !deleted_group_ids.contains(&group.id)); + is_changed = true; + } + + for mut group_rev in &mut all_group_revs { match configuration .groups .iter() - .position(|group_rev| group_rev.id == new_group_rev.id) + .position(|old_group_rev| old_group_rev.id == group_rev.id) { None => { - configuration.groups.push(new_group_rev); + configuration.groups.push(group_rev.clone()); is_changed = true; } Some(pos) => { - let removed_group = configuration.groups.remove(pos); - if removed_group != new_group_rev { + let mut old_group = configuration.groups.remove(pos); + // Update the group configuration base on the GroupRevision + group_rev.visible = old_group.visible; + + // Take the GroupRevision if the name has changed + if is_group_changed(&group_rev, &old_group) { + old_group.name = group_rev.name.clone(); is_changed = true; + configuration.groups.insert(pos, old_group); } - configuration.groups.insert(pos, new_group_rev); } } } is_changed })?; - groups.into_iter().for_each(|group| { - self.groups_map.insert(group.id.clone(), group); + debug_assert_eq!(filter_content_map.len(), all_group_revs.len()); + all_group_revs.into_iter().for_each(|group_rev| { + if let Some(filter_content) = filter_content_map.get(&group_rev.id) { + let group = Group::new( + group_rev.id, + self.field_rev.id.clone(), + group_rev.name, + filter_content.clone(), + ); + self.groups_map.insert(group.id.clone(), group); + } }); - let changeset = make_group_view_changeset(self.view_id.clone(), inserted_groups, updated_groups); + let new_groups = new_group_revs + .into_iter() + .map(|group_rev| { + if let Some(filter_content) = filter_content_map.get(&group_rev.id) { + let group = Group::new( + group_rev.id, + self.field_rev.id.clone(), + group_rev.name, + filter_content.clone(), + ); + GroupPB::from(group) + } + }) + .collect(); + + let changeset = GroupViewChangesetPB { + view_id, + new_groups, + deleted_groups: deleted_group_ids, + update_groups: vec![], + inserted_groups: vec![], + }; tracing::trace!("Group changeset: {:?}", changeset); if changeset.is_empty() { Ok(None) @@ -221,10 +273,7 @@ where let field_id = self.field_rev.id.clone(); let field_type = self.field_rev.ty; tokio::spawn(async move { - match writer - .save_group_configuration(&field_id, field_type, configuration) - .await - { + match writer.save_configuration(&field_id, field_type, configuration).await { Ok(_) => {} Err(e) => { tracing::error!("Save group configuration failed: {}", e); @@ -260,82 +309,63 @@ where } } -fn merge_groups(old_groups: &[GroupRevision], groups: Vec) -> MergeGroupResult { +fn merge_groups(old_groups: &[GroupRevision], new_groups: Vec) -> MergeGroupResult { let mut merge_result = MergeGroupResult::new(); if old_groups.is_empty() { - merge_result.groups = groups; + merge_result.all_group_revs = new_groups; return merge_result; } // group_map is a helper map is used to filter out the new groups. - let mut group_map: IndexMap = IndexMap::new(); - groups.into_iter().for_each(|group| { - group_map.insert(group.id.clone(), group); + let mut new_group_map: IndexMap = IndexMap::new(); + new_groups.into_iter().for_each(|group_rev| { + new_group_map.insert(group_rev.id.clone(), group_rev); }); // The group is ordered in old groups. Add them before adding the new groups - for group_rev in old_groups { - if let Some(group) = group_map.remove(&group_rev.id) { - if group.name == group_rev.name { - merge_result.add_group(group); - } else { - merge_result.add_updated_group(group); + for old in old_groups { + if let Some(new) = new_group_map.remove(&old.id) { + merge_result.all_group_revs.push(new.clone()); + if is_group_changed(&new, old) { + merge_result.updated_group_revs.push(new); } + } else { + merge_result.deleted_group_revs.push(old.clone()); } } // Find out the new groups - group_map - .into_values() - .enumerate() - .for_each(|(index, group)| merge_result.add_insert_group(index, group)); - + let new_groups = new_group_map.into_values(); + for (_, group) in new_groups.into_iter().enumerate() { + merge_result.all_group_revs.push(group.clone()); + merge_result.new_group_revs.push(group); + } merge_result } +fn is_group_changed(new: &GroupRevision, old: &GroupRevision) -> bool { + if new.name != old.name { + return true; + } + + false +} + struct MergeGroupResult { - groups: Vec, - inserted_groups: Vec, - updated_groups: Vec, + // Contains the new groups and the updated groups + all_group_revs: Vec, + new_group_revs: Vec, + updated_group_revs: Vec, + deleted_group_revs: Vec, } impl MergeGroupResult { fn new() -> Self { Self { - groups: vec![], - inserted_groups: vec![], - updated_groups: vec![], + all_group_revs: vec![], + new_group_revs: vec![], + updated_group_revs: vec![], + deleted_group_revs: vec![], } } - - fn add_updated_group(&mut self, group: Group) { - self.groups.push(group.clone()); - self.updated_groups.push(group); - } - - fn add_group(&mut self, group: Group) { - self.groups.push(group); - } - - fn add_insert_group(&mut self, index: usize, group: Group) { - self.groups.push(group.clone()); - let inserted_group = InsertedGroupPB { - group: GroupPB::from(group), - index: index as i32, - }; - self.inserted_groups.push(inserted_group); - } -} - -fn make_group_view_changeset( - view_id: String, - inserted_groups: Vec, - updated_group: Vec, -) -> GroupViewChangesetPB { - GroupViewChangesetPB { - view_id, - inserted_groups, - deleted_groups: vec![], - update_groups: updated_group.into_iter().map(GroupPB::from).collect(), - } } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller.rs index 62647d44b8..5bcff652a4 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller.rs @@ -1,11 +1,11 @@ use crate::entities::{GroupChangesetPB, GroupViewChangesetPB, InsertedRowPB, RowPB}; use crate::services::cell::{decode_any_cell_data, CellBytesParser}; use crate::services::group::action::GroupAction; -use crate::services::group::configuration::GenericGroupConfiguration; +use crate::services::group::configuration::GroupContext; use crate::services::group::entities::Group; use flowy_error::FlowyResult; use flowy_grid_data_model::revision::{ - FieldRevision, GroupConfigurationContentSerde, RowChangeset, RowRevision, TypeOptionDataDeserializer, + FieldRevision, GroupConfigurationContentSerde, GroupRevision, RowChangeset, RowRevision, TypeOptionDataDeserializer, }; use std::marker::PhantomData; @@ -19,14 +19,19 @@ pub trait GroupController: GroupControllerSharedOperation + Send + Sync { } pub trait GroupGenerator { - type ConfigurationType; + type Context; type TypeOptionType; fn generate_groups( field_id: &str, - configuration: &Self::ConfigurationType, + group_ctx: &Self::Context, type_option: &Option, - ) -> Vec; + ) -> Vec; +} + +pub struct GeneratedGroup { + pub group_rev: GroupRevision, + pub filter_content: String, } pub struct MoveGroupRowContext<'a> { @@ -43,7 +48,7 @@ pub trait GroupControllerSharedOperation: Send + Sync { fn field_id(&self) -> &str; fn groups(&self) -> Vec; fn get_group(&self, group_id: &str) -> Option<(usize, Group)>; - fn fill_groups(&mut self, row_revs: &[Arc], field_rev: &FieldRevision) -> FlowyResult>; + fn fill_groups(&mut self, row_revs: &[Arc], field_rev: &FieldRevision) -> FlowyResult<()>; fn move_group(&mut self, from_group_id: &str, to_group_id: &str) -> FlowyResult<()>; fn did_update_row( &mut self, @@ -69,7 +74,7 @@ pub trait GroupControllerSharedOperation: Send + Sync { pub struct GenericGroupController { pub field_id: String, pub type_option: Option, - pub configuration: GenericGroupConfiguration, + pub configuration: GroupContext, group_action_phantom: PhantomData, cell_parser_phantom: PhantomData

, } @@ -78,16 +83,13 @@ impl GenericGroupController where C: GroupConfigurationContentSerde, T: TypeOptionDataDeserializer, - G: GroupGenerator, TypeOptionType = T>, + G: GroupGenerator, TypeOptionType = T>, { - pub async fn new( - field_rev: &Arc, - mut configuration: GenericGroupConfiguration, - ) -> FlowyResult { + pub async fn new(field_rev: &Arc, mut configuration: GroupContext) -> FlowyResult { let field_type_rev = field_rev.ty; let type_option = field_rev.get_type_option_entry::(field_type_rev); let groups = G::generate_groups(&field_rev.id, &configuration, &type_option); - let _ = configuration.merge_groups(groups)?; + let _ = configuration.init_group_revs(groups)?; Ok(Self { field_id: field_rev.id.clone(), @@ -171,7 +173,7 @@ where P: CellBytesParser, C: GroupConfigurationContentSerde, T: TypeOptionDataDeserializer, - G: GroupGenerator, TypeOptionType = T>, + G: GroupGenerator, TypeOptionType = T>, Self: GroupAction, { @@ -189,14 +191,14 @@ where } #[tracing::instrument(level = "trace", skip_all, fields(row_count=%row_revs.len(), group_result))] - fn fill_groups(&mut self, row_revs: &[Arc], field_rev: &FieldRevision) -> FlowyResult> { + fn fill_groups(&mut self, row_revs: &[Arc], field_rev: &FieldRevision) -> FlowyResult<()> { for row_rev in row_revs { if let Some(cell_rev) = row_rev.cells.get(&self.field_id) { let mut grouped_rows: Vec = vec![]; let cell_bytes = decode_any_cell_data(cell_rev.data.clone(), field_rev); let cell_data = cell_bytes.parser::

()?; for group in self.configuration.concrete_groups() { - if self.can_group(&group.content, &cell_data) { + if self.can_group(&group.filter_content, &cell_data) { grouped_rows.push(GroupedRow { row: row_rev.into(), group_id: group.id.clone(), @@ -219,7 +221,7 @@ where } tracing::Span::current().record("group_result", &format!("{},", self.configuration,).as_str()); - Ok(self.groups()) + Ok(()) } fn move_group(&mut self, from_group_id: &str, to_group_id: &str) -> FlowyResult<()> { @@ -274,7 +276,7 @@ where let field_type_rev = field_rev.ty; let type_option = field_rev.get_type_option_entry::(field_type_rev); let groups = G::generate_groups(&field_rev.id, &self.configuration, &type_option); - let changeset = self.configuration.merge_groups(groups)?; + let changeset = self.configuration.init_group_revs(groups)?; Ok(changeset) } } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/checkbox_controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/checkbox_controller.rs index 4c06ba63ce..cfae74ecc3 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/checkbox_controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/checkbox_controller.rs @@ -1,13 +1,14 @@ use crate::entities::GroupChangesetPB; use crate::services::field::{CheckboxCellData, CheckboxCellDataParser, CheckboxTypeOptionPB, CHECK, UNCHECK}; use crate::services::group::action::GroupAction; -use crate::services::group::configuration::GenericGroupConfiguration; +use crate::services::group::configuration::GroupContext; use crate::services::group::controller::{ GenericGroupController, GroupController, GroupGenerator, MoveGroupRowContext, }; use crate::services::group::entities::Group; -use flowy_grid_data_model::revision::{CheckboxGroupConfigurationRevision, FieldRevision, RowRevision}; +use crate::services::group::GeneratedGroup; +use flowy_grid_data_model::revision::{CheckboxGroupConfigurationRevision, FieldRevision, GroupRevision, RowRevision}; pub type CheckboxGroupController = GenericGroupController< CheckboxGroupConfigurationRevision, @@ -16,7 +17,7 @@ pub type CheckboxGroupController = GenericGroupController< CheckboxCellDataParser, >; -pub type CheckboxGroupConfiguration = GenericGroupConfiguration; +pub type CheckboxGroupContext = GroupContext; impl GroupAction for CheckboxGroupController { type CellDataType = CheckboxCellData; @@ -49,26 +50,23 @@ impl GroupController for CheckboxGroupController { pub struct CheckboxGroupGenerator(); impl GroupGenerator for CheckboxGroupGenerator { - type ConfigurationType = CheckboxGroupConfiguration; + type Context = CheckboxGroupContext; type TypeOptionType = CheckboxTypeOptionPB; fn generate_groups( field_id: &str, - _configuration: &Self::ConfigurationType, - _type_option: &Option, - ) -> Vec { - let check_group = Group::new( - "true".to_string(), - field_id.to_owned(), - "".to_string(), - CHECK.to_string(), - ); - let uncheck_group = Group::new( - "false".to_string(), - field_id.to_owned(), - "".to_string(), - UNCHECK.to_string(), - ); + group_ctx: &Self::Context, + type_option: &Option, + ) -> Vec { + let check_group = GeneratedGroup { + group_rev: GroupRevision::new("true".to_string(), CHECK.to_string()), + filter_content: "".to_string(), + }; + + let uncheck_group = GeneratedGroup { + group_rev: GroupRevision::new("false".to_string(), UNCHECK.to_string()), + filter_content: "".to_string(), + }; vec![check_group, uncheck_group] } } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/default_controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/default_controller.rs new file mode 100644 index 0000000000..ff934118ca --- /dev/null +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/default_controller.rs @@ -0,0 +1,80 @@ +use crate::entities::{GroupChangesetPB, GroupViewChangesetPB, RowPB}; +use crate::services::group::{Group, GroupController, GroupControllerSharedOperation, MoveGroupRowContext}; +use flowy_error::FlowyResult; +use flowy_grid_data_model::revision::{FieldRevision, RowRevision}; +use std::sync::Arc; + +pub struct DefaultGroupController { + pub field_id: String, + pub group: Group, +} + +const DEFAULT_GROUP_CONTROLLER: &str = "DefaultGroupController"; + +impl DefaultGroupController { + pub fn new(field_rev: &Arc) -> Self { + let group = Group::new( + DEFAULT_GROUP_CONTROLLER.to_owned(), + field_rev.id.clone(), + "Oops".to_owned(), + "".to_owned(), + ); + Self { + field_id: field_rev.id.clone(), + group, + } + } +} + +impl GroupControllerSharedOperation for DefaultGroupController { + fn field_id(&self) -> &str { + &self.field_id + } + + fn groups(&self) -> Vec { + vec![self.group.clone()] + } + + fn get_group(&self, group_id: &str) -> Option<(usize, Group)> { + Some((0, self.group.clone())) + } + + fn fill_groups(&mut self, row_revs: &[Arc], field_rev: &FieldRevision) -> FlowyResult<()> { + row_revs.iter().for_each(|row_rev| { + self.group.add_row(RowPB::from(row_rev)); + }); + Ok(()) + } + + fn move_group(&mut self, from_group_id: &str, to_group_id: &str) -> FlowyResult<()> { + Ok(()) + } + + fn did_update_row( + &mut self, + row_rev: &RowRevision, + field_rev: &FieldRevision, + ) -> FlowyResult> { + todo!() + } + + fn did_delete_row( + &mut self, + row_rev: &RowRevision, + field_rev: &FieldRevision, + ) -> FlowyResult> { + todo!() + } + + fn move_group_row(&mut self, context: MoveGroupRowContext) -> FlowyResult> { + todo!() + } + + fn did_update_field(&mut self, field_rev: &FieldRevision) -> FlowyResult> { + Ok(None) + } +} + +impl GroupController for DefaultGroupController { + fn will_create_row(&mut self, row_rev: &mut RowRevision, field_rev: &FieldRevision, group_id: &str) {} +} diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/mod.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/mod.rs index 974f311a48..512be761e9 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/mod.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/mod.rs @@ -1,5 +1,7 @@ mod checkbox_controller; +mod default_controller; mod select_option_controller; pub use checkbox_controller::*; +pub use default_controller::*; pub use select_option_controller::*; diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/multi_select_controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/multi_select_controller.rs index fe90e1b462..678c53b28d 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/multi_select_controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/multi_select_controller.rs @@ -8,7 +8,10 @@ use crate::services::group::controller::{ }; use crate::services::group::controller_impls::select_option_controller::util::*; use crate::services::group::entities::Group; -use flowy_grid_data_model::revision::{FieldRevision, RowRevision, SelectOptionGroupConfigurationRevision}; +use crate::services::group::GeneratedGroup; +use flowy_grid_data_model::revision::{ + FieldRevision, GroupRevision, RowRevision, SelectOptionGroupConfigurationRevision, +}; // MultiSelect pub type MultiSelectGroupController = GenericGroupController< @@ -28,7 +31,7 @@ impl GroupAction for MultiSelectGroupController { fn add_row_if_match(&mut self, row_rev: &RowRevision, cell_data: &Self::CellDataType) -> Vec { let mut changesets = vec![]; self.configuration.iter_mut_groups(|group| { - if let Some(changeset) = add_row(group, cell_data, row_rev) { + if let Some(changeset) = add_select_option_row(group, cell_data, row_rev) { changesets.push(changeset); } }); @@ -38,7 +41,7 @@ impl GroupAction for MultiSelectGroupController { fn remove_row_if_match(&mut self, row_rev: &RowRevision, cell_data: &Self::CellDataType) -> Vec { let mut changesets = vec![]; self.configuration.iter_mut_groups(|group| { - if let Some(changeset) = remove_row(group, cell_data, row_rev) { + if let Some(changeset) = remove_select_option_row(group, cell_data, row_rev) { changesets.push(changeset); } }); @@ -70,27 +73,16 @@ impl GroupController for MultiSelectGroupController { pub struct MultiSelectGroupGenerator(); impl GroupGenerator for MultiSelectGroupGenerator { - type ConfigurationType = SelectOptionGroupConfiguration; + type Context = SelectOptionGroupContext; type TypeOptionType = MultiSelectTypeOptionPB; fn generate_groups( field_id: &str, - _configuration: &Self::ConfigurationType, + group_ctx: &Self::Context, type_option: &Option, - ) -> Vec { + ) -> Vec { match type_option { None => vec![], - Some(type_option) => type_option - .options - .iter() - .map(|option| { - Group::new( - option.id.clone(), - field_id.to_owned(), - option.name.clone(), - option.id.clone(), - ) - }) - .collect(), + Some(type_option) => generate_select_option_groups(field_id, group_ctx, &type_option.options), } } } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/single_select_controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/single_select_controller.rs index d774ab083f..b2bffed4ec 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/single_select_controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/single_select_controller.rs @@ -9,7 +9,10 @@ use crate::services::group::controller::{ use crate::services::group::controller_impls::select_option_controller::util::*; use crate::services::group::entities::Group; -use flowy_grid_data_model::revision::{FieldRevision, RowRevision, SelectOptionGroupConfigurationRevision}; +use crate::services::group::GeneratedGroup; +use flowy_grid_data_model::revision::{ + FieldRevision, GroupRevision, RowRevision, SelectOptionGroupConfigurationRevision, +}; // SingleSelect pub type SingleSelectGroupController = GenericGroupController< @@ -28,7 +31,7 @@ impl GroupAction for SingleSelectGroupController { fn add_row_if_match(&mut self, row_rev: &RowRevision, cell_data: &Self::CellDataType) -> Vec { let mut changesets = vec![]; self.configuration.iter_mut_groups(|group| { - if let Some(changeset) = add_row(group, cell_data, row_rev) { + if let Some(changeset) = add_select_option_row(group, cell_data, row_rev) { changesets.push(changeset); } }); @@ -38,7 +41,7 @@ impl GroupAction for SingleSelectGroupController { fn remove_row_if_match(&mut self, row_rev: &RowRevision, cell_data: &Self::CellDataType) -> Vec { let mut changesets = vec![]; self.configuration.iter_mut_groups(|group| { - if let Some(changeset) = remove_row(group, cell_data, row_rev) { + if let Some(changeset) = remove_select_option_row(group, cell_data, row_rev) { changesets.push(changeset); } }); @@ -72,27 +75,16 @@ impl GroupController for SingleSelectGroupController { pub struct SingleSelectGroupGenerator(); impl GroupGenerator for SingleSelectGroupGenerator { - type ConfigurationType = SelectOptionGroupConfiguration; + type Context = SelectOptionGroupContext; type TypeOptionType = SingleSelectTypeOptionPB; fn generate_groups( field_id: &str, - _configuration: &Self::ConfigurationType, + group_ctx: &Self::Context, type_option: &Option, - ) -> Vec { + ) -> Vec { match type_option { None => vec![], - Some(type_option) => type_option - .options - .iter() - .map(|option| { - Group::new( - option.id.clone(), - field_id.to_owned(), - option.name.clone(), - option.id.clone(), - ) - }) - .collect(), + Some(type_option) => generate_select_option_groups(field_id, group_ctx, &type_option.options), } } } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/util.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/util.rs index 39f581d97d..c60eec49a5 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/util.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/util.rs @@ -1,15 +1,15 @@ use crate::entities::{GroupChangesetPB, InsertedRowPB, RowPB}; use crate::services::cell::insert_select_option_cell; -use crate::services::field::SelectOptionCellDataPB; -use crate::services::group::configuration::GenericGroupConfiguration; -use crate::services::group::Group; +use crate::services::field::{SelectOptionCellDataPB, SelectOptionPB}; +use crate::services::group::configuration::GroupContext; +use crate::services::group::{GeneratedGroup, Group}; use crate::services::group::controller::MoveGroupRowContext; -use flowy_grid_data_model::revision::{RowRevision, SelectOptionGroupConfigurationRevision}; +use flowy_grid_data_model::revision::{GroupRevision, RowRevision, SelectOptionGroupConfigurationRevision}; -pub type SelectOptionGroupConfiguration = GenericGroupConfiguration; +pub type SelectOptionGroupContext = GroupContext; -pub fn add_row( +pub fn add_select_option_row( group: &mut Group, cell_data: &SelectOptionCellDataPB, row_rev: &RowRevision, @@ -42,7 +42,7 @@ pub fn add_row( } } -pub fn remove_row( +pub fn remove_select_option_row( group: &mut Group, cell_data: &SelectOptionCellDataPB, row_rev: &RowRevision, @@ -125,3 +125,19 @@ pub fn move_select_option_row( Some(changeset) } } + +pub fn generate_select_option_groups( + field_id: &str, + group_ctx: &SelectOptionGroupContext, + options: &[SelectOptionPB], +) -> Vec { + let groups = options + .iter() + .map(|option| GeneratedGroup { + group_rev: GroupRevision::new(option.id.clone(), option.name.clone()), + filter_content: option.id.clone(), + }) + .collect(); + + groups +} diff --git a/frontend/rust-lib/flowy-grid/src/services/group/entities.rs b/frontend/rust-lib/flowy-grid/src/services/group/entities.rs index 9afe7f54e9..c4687859f3 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/entities.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/entities.rs @@ -6,21 +6,23 @@ pub struct Group { pub field_id: String, pub name: String, pub is_default: bool, + pub is_visible: bool, pub(crate) rows: Vec, /// [content] is used to determine which group the cell belongs to. - pub content: String, + pub filter_content: String, } impl Group { - pub fn new(id: String, field_id: String, name: String, content: String) -> Self { + pub fn new(id: String, field_id: String, name: String, filter_content: String) -> Self { Self { id, field_id, is_default: false, + is_visible: true, name, rows: vec![], - content, + filter_content, } } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_service.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_service.rs deleted file mode 100644 index 8cdae4c359..0000000000 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_service.rs +++ /dev/null @@ -1,361 +0,0 @@ -use crate::entities::{FieldType, GroupChangesetPB, GroupViewChangesetPB}; -use crate::services::group::configuration::GroupConfigurationReader; -use crate::services::group::controller::{GroupController, MoveGroupRowContext}; -use crate::services::group::{ - CheckboxGroupConfiguration, CheckboxGroupController, Group, GroupConfigurationWriter, MultiSelectGroupController, - SelectOptionGroupConfiguration, SingleSelectGroupController, -}; -use flowy_error::FlowyResult; -use flowy_grid_data_model::revision::{ - CheckboxGroupConfigurationRevision, DateGroupConfigurationRevision, FieldRevision, GroupConfigurationRevision, - NumberGroupConfigurationRevision, RowChangeset, RowRevision, SelectOptionGroupConfigurationRevision, - TextGroupConfigurationRevision, UrlGroupConfigurationRevision, -}; -use std::future::Future; -use std::sync::Arc; - -pub(crate) struct GroupService { - view_id: String, - configuration_reader: Arc, - configuration_writer: Arc, - group_controller: Option>, -} - -impl GroupService { - pub(crate) async fn new(view_id: String, configuration_reader: R, configuration_writer: W) -> Self - where - R: GroupConfigurationReader, - W: GroupConfigurationWriter, - { - Self { - view_id, - configuration_reader: Arc::new(configuration_reader), - configuration_writer: Arc::new(configuration_writer), - group_controller: None, - } - } - - pub(crate) async fn groups(&self) -> Vec { - self.group_controller - .as_ref() - .map(|group_controller| group_controller.groups()) - .unwrap_or_default() - } - - pub(crate) async fn get_group(&self, group_id: &str) -> Option<(usize, Group)> { - self.group_controller - .as_ref() - .and_then(|group_controller| group_controller.get_group(group_id)) - } - - pub(crate) async fn load_groups( - &mut self, - field_revs: &[Arc], - row_revs: Vec>, - ) -> Option> { - let field_rev = find_group_field(field_revs)?; - let field_type: FieldType = field_rev.ty.into(); - - let mut group_controller = self.make_group_controller(&field_type, &field_rev).await.ok()??; - let groups = match group_controller.fill_groups(&row_revs, &field_rev) { - Ok(groups) => groups, - Err(e) => { - tracing::error!("Fill groups failed:{:?}", e); - vec![] - } - }; - self.group_controller = Some(group_controller); - Some(groups) - } - - pub(crate) async fn will_create_row(&mut self, row_rev: &mut RowRevision, group_id: &str, get_field_fn: F) - where - F: FnOnce(String) -> O, - O: Future>> + Send + Sync + 'static, - { - if let Some(group_controller) = self.group_controller.as_mut() { - let field_id = group_controller.field_id().to_owned(); - match get_field_fn(field_id).await { - None => {} - Some(field_rev) => { - group_controller.will_create_row(row_rev, &field_rev, group_id); - } - } - } - } - - pub(crate) async fn did_delete_row( - &mut self, - row_rev: &RowRevision, - get_field_fn: F, - ) -> Option> - where - F: FnOnce(String) -> O, - O: Future>> + Send + Sync + 'static, - { - let group_controller = self.group_controller.as_mut()?; - let field_id = group_controller.field_id().to_owned(); - let field_rev = get_field_fn(field_id).await?; - - match group_controller.did_delete_row(row_rev, &field_rev) { - Ok(changesets) => Some(changesets), - Err(e) => { - tracing::error!("Delete group data failed, {:?}", e); - None - } - } - } - - pub(crate) async fn move_group_row( - &mut self, - row_rev: &RowRevision, - row_changeset: &mut RowChangeset, - to_group_id: &str, - to_row_id: Option, - get_field_fn: F, - ) -> Option> - where - F: FnOnce(String) -> O, - O: Future>> + Send + Sync + 'static, - { - let group_controller = self.group_controller.as_mut()?; - let field_id = group_controller.field_id().to_owned(); - let field_rev = get_field_fn(field_id).await?; - let move_row_context = MoveGroupRowContext { - row_rev, - row_changeset, - field_rev: field_rev.as_ref(), - to_group_id, - to_row_id, - }; - - match group_controller.move_group_row(move_row_context) { - Ok(changesets) => Some(changesets), - Err(e) => { - tracing::error!("Move group data failed, {:?}", e); - None - } - } - } - - #[tracing::instrument(level = "trace", skip_all)] - pub(crate) async fn did_update_row( - &mut self, - row_rev: &RowRevision, - get_field_fn: F, - ) -> Option> - where - F: FnOnce(String) -> O, - O: Future>> + Send + Sync + 'static, - { - let group_controller = self.group_controller.as_mut()?; - let field_id = group_controller.field_id().to_owned(); - let field_rev = get_field_fn(field_id).await?; - - match group_controller.did_update_row(row_rev, &field_rev) { - Ok(changeset) => Some(changeset), - Err(e) => { - tracing::error!("Update group data failed, {:?}", e); - None - } - } - } - - #[tracing::instrument(level = "trace", skip_all)] - pub(crate) async fn move_group(&mut self, from_group_id: &str, to_group_id: &str) -> FlowyResult<()> { - match self.group_controller.as_mut() { - None => Ok(()), - Some(group_controller) => { - let _ = group_controller.move_group(from_group_id, to_group_id)?; - Ok(()) - } - } - } - - #[tracing::instrument(level = "trace", name = "group_did_update_field", skip(self, field_rev), err)] - pub(crate) async fn did_update_field( - &mut self, - field_rev: &FieldRevision, - ) -> FlowyResult> { - match self.group_controller.as_mut() { - None => Ok(None), - Some(group_controller) => group_controller.did_update_field(field_rev), - } - } - - #[tracing::instrument(level = "trace", skip(self, field_rev), err)] - async fn make_group_controller( - &self, - field_type: &FieldType, - field_rev: &Arc, - ) -> FlowyResult>> { - let mut group_controller: Option> = None; - match field_type { - FieldType::RichText => { - // let generator = GroupGenerator::::from_configuration(configuration); - } - FieldType::Number => { - // let generator = GroupGenerator::::from_configuration(configuration); - } - FieldType::DateTime => { - // let generator = GroupGenerator::::from_configuration(configuration); - } - FieldType::SingleSelect => { - let configuration = SelectOptionGroupConfiguration::new( - self.view_id.clone(), - field_rev.clone(), - self.configuration_reader.clone(), - self.configuration_writer.clone(), - ) - .await?; - let controller = SingleSelectGroupController::new(field_rev, configuration).await?; - group_controller = Some(Box::new(controller)); - } - FieldType::MultiSelect => { - let configuration = SelectOptionGroupConfiguration::new( - self.view_id.clone(), - field_rev.clone(), - self.configuration_reader.clone(), - self.configuration_writer.clone(), - ) - .await?; - let controller = MultiSelectGroupController::new(field_rev, configuration).await?; - group_controller = Some(Box::new(controller)); - } - FieldType::Checkbox => { - let configuration = CheckboxGroupConfiguration::new( - self.view_id.clone(), - field_rev.clone(), - self.configuration_reader.clone(), - self.configuration_writer.clone(), - ) - .await?; - let controller = CheckboxGroupController::new(field_rev, configuration).await?; - group_controller = Some(Box::new(controller)); - } - FieldType::URL => { - // let generator = GroupGenerator::::from_configuration(configuration); - } - } - Ok(group_controller) - } -} - -#[tracing::instrument(level = "trace", skip_all, err)] -pub async fn make_group_controller( - view_id: String, - field_revs: Vec>, - row_revs: Vec>, - configuration_reader: R, - configuration_writer: W, -) -> FlowyResult> -where - R: GroupConfigurationReader, - W: GroupConfigurationWriter, -{ - let field_rev = find_group_field(&field_revs)?; - let field_type: FieldType = field_rev.ty.into(); - let mut group_controller: Box; - match field_type { - FieldType::RichText => { - // let generator = GroupGenerator::::from_configuration(configuration); - panic!() - } - FieldType::Number => { - // let generator = GroupGenerator::::from_configuration(configuration); - panic!() - } - FieldType::DateTime => { - // let generator = GroupGenerator::::from_configuration(configuration); - panic!() - } - FieldType::SingleSelect => { - let configuration = SelectOptionGroupConfiguration::new( - view_id, - field_rev.clone(), - configuration_reader, - configuration_writer, - ) - .await?; - let controller = SingleSelectGroupController::new(&field_rev, configuration).await?; - group_controller = Box::new(controller); - } - FieldType::MultiSelect => { - let configuration = SelectOptionGroupConfiguration::new( - view_id, - field_rev.clone(), - configuration_reader, - configuration_writer, - ) - .await?; - let controller = MultiSelectGroupController::new(&field_rev, configuration).await?; - group_controller = Box::new(controller); - } - FieldType::Checkbox => { - let configuration = - CheckboxGroupConfiguration::new(view_id, field_rev.clone(), configuration_reader, configuration_writer) - .await?; - let controller = CheckboxGroupController::new(&field_rev, configuration).await?; - group_controller = Box::new(controller); - } - FieldType::URL => { - // let generator = GroupGenerator::::from_configuration(configuration); - panic!() - } - } - - let _ = group_controller.fill_groups(&row_revs, &field_rev)?; - - Ok(group_controller) -} - -fn find_group_field(field_revs: &[Arc]) -> Option> { - let field_rev = field_revs - .iter() - .find(|field_rev| { - let field_type: FieldType = field_rev.ty.into(); - field_type.can_be_group() - }) - .cloned(); - field_rev -} - -pub fn default_group_configuration(field_rev: &FieldRevision) -> GroupConfigurationRevision { - let field_id = field_rev.id.clone(); - let field_type_rev = field_rev.ty; - let field_type: FieldType = field_rev.ty.into(); - match field_type { - FieldType::RichText => { - GroupConfigurationRevision::new(field_id, field_type_rev, TextGroupConfigurationRevision::default()) - .unwrap() - } - FieldType::Number => { - GroupConfigurationRevision::new(field_id, field_type_rev, NumberGroupConfigurationRevision::default()) - .unwrap() - } - FieldType::DateTime => { - GroupConfigurationRevision::new(field_id, field_type_rev, DateGroupConfigurationRevision::default()) - .unwrap() - } - - FieldType::SingleSelect => GroupConfigurationRevision::new( - field_id, - field_type_rev, - SelectOptionGroupConfigurationRevision::default(), - ) - .unwrap(), - FieldType::MultiSelect => GroupConfigurationRevision::new( - field_id, - field_type_rev, - SelectOptionGroupConfigurationRevision::default(), - ) - .unwrap(), - FieldType::Checkbox => { - GroupConfigurationRevision::new(field_id, field_type_rev, CheckboxGroupConfigurationRevision::default()) - .unwrap() - } - FieldType::URL => { - GroupConfigurationRevision::new(field_id, field_type_rev, UrlGroupConfigurationRevision::default()).unwrap() - } - } -} diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_util.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_util.rs new file mode 100644 index 0000000000..1e2ea0f9d6 --- /dev/null +++ b/frontend/rust-lib/flowy-grid/src/services/group/group_util.rs @@ -0,0 +1,113 @@ +use crate::entities::FieldType; +use crate::services::group::configuration::GroupConfigurationReader; +use crate::services::group::controller::GroupController; +use crate::services::group::{ + CheckboxGroupContext, CheckboxGroupController, DefaultGroupController, GroupConfigurationWriter, + MultiSelectGroupController, SelectOptionGroupContext, SingleSelectGroupController, +}; +use flowy_error::FlowyResult; +use flowy_grid_data_model::revision::{ + CheckboxGroupConfigurationRevision, DateGroupConfigurationRevision, FieldRevision, GroupConfigurationRevision, + NumberGroupConfigurationRevision, RowRevision, SelectOptionGroupConfigurationRevision, + TextGroupConfigurationRevision, UrlGroupConfigurationRevision, +}; +use std::sync::Arc; + +#[tracing::instrument(level = "trace", skip_all, err)] +pub async fn make_group_controller( + view_id: String, + field_revs: Vec>, + row_revs: Vec>, + configuration_reader: R, + configuration_writer: W, +) -> FlowyResult> +where + R: GroupConfigurationReader, + W: GroupConfigurationWriter, +{ + let field_rev = find_group_field(&field_revs).unwrap(); + let field_type: FieldType = field_rev.ty.into(); + let mut group_controller: Box; + let configuration_reader = Arc::new(configuration_reader); + let configuration_writer = Arc::new(configuration_writer); + match field_type { + FieldType::SingleSelect => { + let configuration = + SelectOptionGroupContext::new(view_id, field_rev.clone(), configuration_reader, configuration_writer) + .await?; + let controller = SingleSelectGroupController::new(&field_rev, configuration).await?; + group_controller = Box::new(controller); + } + FieldType::MultiSelect => { + let configuration = + SelectOptionGroupContext::new(view_id, field_rev.clone(), configuration_reader, configuration_writer) + .await?; + let controller = MultiSelectGroupController::new(&field_rev, configuration).await?; + group_controller = Box::new(controller); + } + FieldType::Checkbox => { + let configuration = + CheckboxGroupContext::new(view_id, field_rev.clone(), configuration_reader, configuration_writer) + .await?; + let controller = CheckboxGroupController::new(&field_rev, configuration).await?; + group_controller = Box::new(controller); + } + _ => { + group_controller = Box::new(DefaultGroupController::new(&field_rev)); + } + } + + let _ = group_controller.fill_groups(&row_revs, &field_rev)?; + Ok(group_controller) +} + +fn find_group_field(field_revs: &[Arc]) -> Option> { + let field_rev = field_revs + .iter() + .find(|field_rev| { + let field_type: FieldType = field_rev.ty.into(); + field_type.can_be_group() + }) + .cloned(); + field_rev +} + +pub fn default_group_configuration(field_rev: &FieldRevision) -> GroupConfigurationRevision { + let field_id = field_rev.id.clone(); + let field_type_rev = field_rev.ty; + let field_type: FieldType = field_rev.ty.into(); + match field_type { + FieldType::RichText => { + GroupConfigurationRevision::new(field_id, field_type_rev, TextGroupConfigurationRevision::default()) + .unwrap() + } + FieldType::Number => { + GroupConfigurationRevision::new(field_id, field_type_rev, NumberGroupConfigurationRevision::default()) + .unwrap() + } + FieldType::DateTime => { + GroupConfigurationRevision::new(field_id, field_type_rev, DateGroupConfigurationRevision::default()) + .unwrap() + } + + FieldType::SingleSelect => GroupConfigurationRevision::new( + field_id, + field_type_rev, + SelectOptionGroupConfigurationRevision::default(), + ) + .unwrap(), + FieldType::MultiSelect => GroupConfigurationRevision::new( + field_id, + field_type_rev, + SelectOptionGroupConfigurationRevision::default(), + ) + .unwrap(), + FieldType::Checkbox => { + GroupConfigurationRevision::new(field_id, field_type_rev, CheckboxGroupConfigurationRevision::default()) + .unwrap() + } + FieldType::URL => { + GroupConfigurationRevision::new(field_id, field_type_rev, UrlGroupConfigurationRevision::default()).unwrap() + } + } +} diff --git a/frontend/rust-lib/flowy-grid/src/services/group/mod.rs b/frontend/rust-lib/flowy-grid/src/services/group/mod.rs index 35c443f06b..b73ac511b6 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/mod.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/mod.rs @@ -3,10 +3,10 @@ mod configuration; mod controller; mod controller_impls; mod entities; -mod group_service; +mod group_util; pub(crate) use configuration::*; pub(crate) use controller::*; pub(crate) use controller_impls::*; pub(crate) use entities::*; -pub(crate) use group_service::*; +pub(crate) use group_util::*; diff --git a/frontend/rust-lib/flowy-grid/tests/grid/group_test/test.rs b/frontend/rust-lib/flowy-grid/tests/grid/group_test/test.rs index 297527b905..760f39b2ac 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/group_test/test.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/group_test/test.rs @@ -391,11 +391,11 @@ async fn group_update_field_test() { test.run_scripts(scripts).await; } -#[tokio::test] -async fn group_multi_select_field_test() { - let mut test = GridGroupTest::new().await; - let multi_select_field = test.get_multi_select_field().await; - - let scripts = vec![]; - test.run_scripts(scripts).await; -} +// #[tokio::test] +// async fn group_multi_select_field_test() { +// let mut test = GridGroupTest::new().await; +// let multi_select_field = test.get_multi_select_field().await; +// +// let scripts = vec![]; +// test.run_scripts(scripts).await; +// } diff --git a/shared-lib/flowy-grid-data-model/src/revision/group_rev.rs b/shared-lib/flowy-grid-data-model/src/revision/group_rev.rs index 04b571fd76..e942de59c9 100644 --- a/shared-lib/flowy-grid-data-model/src/revision/group_rev.rs +++ b/shared-lib/flowy-grid-data-model/src/revision/group_rev.rs @@ -4,9 +4,8 @@ use serde_json::Error; use serde_repr::*; pub trait GroupConfigurationContentSerde: Sized + Send + Sync { - fn from_configuration_content(s: &str) -> Result; - - fn to_configuration_content(&self) -> Result; + fn from_json(s: &str) -> Result; + fn to_json(&self) -> Result; } #[derive(Debug, Clone, Serialize, Deserialize, Default)] @@ -15,6 +14,7 @@ pub struct GroupConfigurationRevision { pub field_id: String, pub field_type_rev: FieldTypeRevision, pub groups: Vec, + // This content is serde in Json format pub content: String, } @@ -23,7 +23,7 @@ impl GroupConfigurationRevision { where T: GroupConfigurationContentSerde, { - let content = content.to_configuration_content()?; + let content = content.to_json()?; Ok(Self { id: gen_grid_group_id(), field_id, @@ -40,10 +40,10 @@ pub struct TextGroupConfigurationRevision { } impl GroupConfigurationContentSerde for TextGroupConfigurationRevision { - fn from_configuration_content(s: &str) -> Result { + fn from_json(s: &str) -> Result { serde_json::from_str(s) } - fn to_configuration_content(&self) -> Result { + fn to_json(&self) -> Result { serde_json::to_string(self) } } @@ -54,10 +54,10 @@ pub struct NumberGroupConfigurationRevision { } impl GroupConfigurationContentSerde for NumberGroupConfigurationRevision { - fn from_configuration_content(s: &str) -> Result { + fn from_json(s: &str) -> Result { serde_json::from_str(s) } - fn to_configuration_content(&self) -> Result { + fn to_json(&self) -> Result { serde_json::to_string(self) } } @@ -68,10 +68,10 @@ pub struct UrlGroupConfigurationRevision { } impl GroupConfigurationContentSerde for UrlGroupConfigurationRevision { - fn from_configuration_content(s: &str) -> Result { + fn from_json(s: &str) -> Result { serde_json::from_str(s) } - fn to_configuration_content(&self) -> Result { + fn to_json(&self) -> Result { serde_json::to_string(self) } } @@ -82,11 +82,11 @@ pub struct CheckboxGroupConfigurationRevision { } impl GroupConfigurationContentSerde for CheckboxGroupConfigurationRevision { - fn from_configuration_content(s: &str) -> Result { + fn from_json(s: &str) -> Result { serde_json::from_str(s) } - fn to_configuration_content(&self) -> Result { + fn to_json(&self) -> Result { serde_json::to_string(self) } } @@ -97,11 +97,11 @@ pub struct SelectOptionGroupConfigurationRevision { } impl GroupConfigurationContentSerde for SelectOptionGroupConfigurationRevision { - fn from_configuration_content(s: &str) -> Result { + fn from_json(s: &str) -> Result { serde_json::from_str(s) } - fn to_configuration_content(&self) -> Result { + fn to_json(&self) -> Result { serde_json::to_string(self) } } @@ -113,22 +113,17 @@ pub struct GroupRevision { #[serde(default)] pub name: String, - #[serde(skip, default = "IS_DEFAULT_GROUP")] - pub is_default: bool, - #[serde(default = "GROUP_REV_VISIBILITY")] pub visible: bool, } const GROUP_REV_VISIBILITY: fn() -> bool = || true; -const IS_DEFAULT_GROUP: fn() -> bool = || false; impl GroupRevision { pub fn new(id: String, group_name: String) -> Self { Self { id, name: group_name, - is_default: false, visible: true, } } @@ -137,7 +132,6 @@ impl GroupRevision { Self { id, name: group_name, - is_default: true, visible: true, } } @@ -150,10 +144,10 @@ pub struct DateGroupConfigurationRevision { } impl GroupConfigurationContentSerde for DateGroupConfigurationRevision { - fn from_configuration_content(s: &str) -> Result { + fn from_json(s: &str) -> Result { serde_json::from_str(s) } - fn to_configuration_content(&self) -> Result { + fn to_json(&self) -> Result { serde_json::to_string(self) } } From e75d8f22c8e9cb179ece02a1e20b89d4eee065e7 Mon Sep 17 00:00:00 2001 From: appflowy Date: Fri, 2 Sep 2022 09:49:26 +0800 Subject: [PATCH 06/17] chore: add edit field type option helper --- .../group_entities/group_changeset.rs | 6 +-- .../rust-lib/flowy-grid/src/event_handler.rs | 12 +++-- frontend/rust-lib/flowy-grid/src/macros.rs | 6 +-- .../src/services/cell/cell_operation.rs | 14 +++--- .../src/services/field/field_builder.rs | 6 +-- .../src/services/field/field_operation.rs | 47 +++++++++++++++++++ .../flowy-grid/src/services/field/mod.rs | 2 + .../checkbox_type_option.rs | 4 +- .../date_type_option/date_type_option.rs | 4 +- .../number_type_option/number_type_option.rs | 4 +- .../multi_select_type_option.rs | 4 +- .../selection_type_option/select_option.rs | 4 +- .../single_select_type_option.rs | 4 +- .../text_type_option/text_type_option.rs | 4 +- .../url_type_option/url_type_option.rs | 4 +- .../src/services/filter/filter_service.rs | 14 +++--- .../flowy-grid/src/services/grid_editor.rs | 10 +++- .../src/services/group/configuration.rs | 29 ++++++------ .../src/services/group/controller.rs | 4 +- .../tests/grid/block_test/script.rs | 2 +- .../flowy-grid/tests/grid/field_test/test.rs | 4 +- .../flowy-grid/tests/grid/field_test/util.rs | 4 +- .../flowy-grid/tests/grid/grid_test.rs | 2 +- .../tests/grid/group_test/script.rs | 23 +++++++++ .../rust-lib/flowy-grid/tests/grid/script.rs | 2 +- .../src/revision/grid_rev.rs | 10 ++-- .../src/revision/group_rev.rs | 4 ++ 27 files changed, 158 insertions(+), 75 deletions(-) create mode 100644 frontend/rust-lib/flowy-grid/src/services/field/field_operation.rs diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs index 3d37a6ffa4..fd49709cf3 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs @@ -133,13 +133,13 @@ pub struct GroupViewChangesetPB { #[pb(index = 2)] pub inserted_groups: Vec, - #[pb(index = 2)] + #[pb(index = 3)] pub new_groups: Vec, - #[pb(index = 3)] + #[pb(index = 4)] pub deleted_groups: Vec, - #[pb(index = 4)] + #[pb(index = 5)] pub update_groups: Vec, } diff --git a/frontend/rust-lib/flowy-grid/src/event_handler.rs b/frontend/rust-lib/flowy-grid/src/event_handler.rs index 4b525c233f..8a04b2ea30 100644 --- a/frontend/rust-lib/flowy-grid/src/event_handler.rs +++ b/frontend/rust-lib/flowy-grid/src/event_handler.rs @@ -203,12 +203,14 @@ pub(crate) async fn move_field_handler( /// The FieldMeta contains multiple data, each of them belongs to a specific FieldType. async fn get_type_option_data(field_rev: &FieldRevision, field_type: &FieldType) -> FlowyResult> { - let s = field_rev - .get_type_option_str(field_type) - .unwrap_or_else(|| default_type_option_builder_from_type(field_type).entry().json_str()); + let s = field_rev.get_type_option_str(field_type).unwrap_or_else(|| { + default_type_option_builder_from_type(field_type) + .data_format() + .json_str() + }); let field_type: FieldType = field_rev.ty.into(); let builder = type_option_builder_from_json_str(&s, &field_type); - let type_option_data = builder.entry().protobuf_bytes().to_vec(); + let type_option_data = builder.data_format().protobuf_bytes().to_vec(); Ok(type_option_data) } @@ -337,7 +339,7 @@ pub(crate) async fn update_select_option_handler( type_option.delete_option(option); } - mut_field_rev.insert_type_option_entry(&*type_option); + mut_field_rev.insert_type_option(&*type_option); let _ = editor.replace_field(field_rev).await?; if let Some(cell_content_changeset) = cell_content_changeset { diff --git a/frontend/rust-lib/flowy-grid/src/macros.rs b/frontend/rust-lib/flowy-grid/src/macros.rs index aee8ca2b68..bee2e95e21 100644 --- a/frontend/rust-lib/flowy-grid/src/macros.rs +++ b/frontend/rust-lib/flowy-grid/src/macros.rs @@ -30,7 +30,7 @@ macro_rules! impl_type_option { ($target: ident, $field_type:expr) => { impl std::convert::From<&FieldRevision> for $target { fn from(field_rev: &FieldRevision) -> $target { - match field_rev.get_type_option_entry::<$target>($field_type.into()) { + match field_rev.get_type_option::<$target>($field_type.into()) { None => $target::default(), Some(target) => target, } @@ -39,7 +39,7 @@ macro_rules! impl_type_option { impl std::convert::From<&std::sync::Arc> for $target { fn from(field_rev: &std::sync::Arc) -> $target { - match field_rev.get_type_option_entry::<$target>($field_type.into()) { + match field_rev.get_type_option::<$target>($field_type.into()) { None => $target::default(), Some(target) => target, } @@ -52,7 +52,7 @@ macro_rules! impl_type_option { } } - impl TypeOptionDataEntry for $target { + impl TypeOptionDataFormat for $target { fn json_str(&self) -> String { match serde_json::to_string(&self) { Ok(s) => s, diff --git a/frontend/rust-lib/flowy-grid/src/services/cell/cell_operation.rs b/frontend/rust-lib/flowy-grid/src/services/cell/cell_operation.rs index ecff3b951b..17c52dd3a2 100644 --- a/frontend/rust-lib/flowy-grid/src/services/cell/cell_operation.rs +++ b/frontend/rust-lib/flowy-grid/src/services/cell/cell_operation.rs @@ -101,25 +101,25 @@ pub fn try_decode_cell_data( let field_type: FieldTypeRevision = t_field_type.into(); let data = match t_field_type { FieldType::RichText => field_rev - .get_type_option_entry::(field_type)? + .get_type_option::(field_type)? .decode_cell_data(cell_data.into(), s_field_type, field_rev), FieldType::Number => field_rev - .get_type_option_entry::(field_type)? + .get_type_option::(field_type)? .decode_cell_data(cell_data.into(), s_field_type, field_rev), FieldType::DateTime => field_rev - .get_type_option_entry::(field_type)? + .get_type_option::(field_type)? .decode_cell_data(cell_data.into(), s_field_type, field_rev), FieldType::SingleSelect => field_rev - .get_type_option_entry::(field_type)? + .get_type_option::(field_type)? .decode_cell_data(cell_data.into(), s_field_type, field_rev), FieldType::MultiSelect => field_rev - .get_type_option_entry::(field_type)? + .get_type_option::(field_type)? .decode_cell_data(cell_data.into(), s_field_type, field_rev), FieldType::Checkbox => field_rev - .get_type_option_entry::(field_type)? + .get_type_option::(field_type)? .decode_cell_data(cell_data.into(), s_field_type, field_rev), FieldType::URL => field_rev - .get_type_option_entry::(field_type)? + .get_type_option::(field_type)? .decode_cell_data(cell_data.into(), s_field_type, field_rev), }; Some(data) diff --git a/frontend/rust-lib/flowy-grid/src/services/field/field_builder.rs b/frontend/rust-lib/flowy-grid/src/services/field/field_builder.rs index 0242a5ca43..4a1d57c28f 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/field_builder.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/field_builder.rs @@ -1,7 +1,7 @@ use crate::entities::{FieldPB, FieldType}; use crate::services::field::type_options::*; use bytes::Bytes; -use flowy_grid_data_model::revision::{FieldRevision, TypeOptionDataEntry}; +use flowy_grid_data_model::revision::{FieldRevision, TypeOptionDataFormat}; use indexmap::IndexMap; pub struct FieldBuilder { @@ -78,14 +78,14 @@ impl FieldBuilder { pub fn build(self) -> FieldRevision { let mut field_rev = self.field_rev; - field_rev.insert_type_option_entry(self.type_option_builder.entry()); + field_rev.insert_type_option(self.type_option_builder.data_format()); field_rev } } pub trait TypeOptionBuilder { fn field_type(&self) -> FieldType; - fn entry(&self) -> &dyn TypeOptionDataEntry; + fn data_format(&self) -> &dyn TypeOptionDataFormat; } pub fn default_type_option_builder_from_type(field_type: &FieldType) -> Box { diff --git a/frontend/rust-lib/flowy-grid/src/services/field/field_operation.rs b/frontend/rust-lib/flowy-grid/src/services/field/field_operation.rs new file mode 100644 index 0000000000..7ee127b382 --- /dev/null +++ b/frontend/rust-lib/flowy-grid/src/services/field/field_operation.rs @@ -0,0 +1,47 @@ +use crate::entities::{FieldChangesetParams, FieldType}; +use crate::services::field::{select_option_operation, SelectOptionPB}; +use crate::services::grid_editor::GridRevisionEditor; +use flowy_error::FlowyResult; +use flowy_grid_data_model::revision::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataFormat}; +use std::sync::Arc; + +pub async fn edit_field( + field_id: &str, + editor: Arc, + action: impl FnOnce(&mut T) -> bool, +) -> FlowyResult<()> +where + T: TypeOptionDataDeserializer + TypeOptionDataFormat, +{ + let get_type_option = async { + let field_rev = editor.get_field_rev(field_id).await?; + field_rev.get_type_option::(field_rev.ty) + }; + + if let Some(mut type_option) = get_type_option.await { + if action(&mut type_option) { + let changeset = FieldChangesetParams { ..Default::default() }; + let _ = editor.update_field(changeset).await?; + } + } + + Ok(()) +} + +pub fn insert_single_select_option(field_rev: &mut FieldRevision, options: Vec) -> FlowyResult<()> { + if options.is_empty() { + return Ok(()); + } + let mut type_option = select_option_operation(field_rev)?; + options.into_iter().for_each(|option| type_option.insert_option(option)); + Ok(()) +} + +pub fn insert_multi_select_option(field_rev: &mut FieldRevision, options: Vec) -> FlowyResult<()> { + if options.is_empty() { + return Ok(()); + } + let mut type_option = select_option_operation(field_rev)?; + options.into_iter().for_each(|option| type_option.insert_option(option)); + Ok(()) +} diff --git a/frontend/rust-lib/flowy-grid/src/services/field/mod.rs b/frontend/rust-lib/flowy-grid/src/services/field/mod.rs index c1b689fbf4..5e8a461541 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/mod.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/mod.rs @@ -1,5 +1,7 @@ mod field_builder; +mod field_operation; pub(crate) mod type_options; pub use field_builder::*; +pub use field_operation::*; pub use type_options::*; diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/checkbox_type_option/checkbox_type_option.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/checkbox_type_option/checkbox_type_option.rs index cf668fcc1e..fbb1ba64e8 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/checkbox_type_option/checkbox_type_option.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/checkbox_type_option/checkbox_type_option.rs @@ -5,7 +5,7 @@ use crate::services::field::{BoxTypeOptionBuilder, CheckboxCellData, TypeOptionB use bytes::Bytes; use flowy_derive::ProtoBuf; use flowy_error::{FlowyError, FlowyResult}; -use flowy_grid_data_model::revision::{CellRevision, FieldRevision, TypeOptionDataDeserializer, TypeOptionDataEntry}; +use flowy_grid_data_model::revision::{CellRevision, FieldRevision, TypeOptionDataDeserializer, TypeOptionDataFormat}; use serde::{Deserialize, Serialize}; use std::str::FromStr; @@ -26,7 +26,7 @@ impl TypeOptionBuilder for CheckboxTypeOptionBuilder { FieldType::Checkbox } - fn entry(&self) -> &dyn TypeOptionDataEntry { + fn data_format(&self) -> &dyn TypeOptionDataFormat { &self.0 } } diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_type_option.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_type_option.rs index 729ae1958a..e4ac22f299 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_type_option.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/date_type_option/date_type_option.rs @@ -9,7 +9,7 @@ use chrono::format::strftime::StrftimeItems; use chrono::{NaiveDateTime, Timelike}; use flowy_derive::ProtoBuf; use flowy_error::{ErrorCode, FlowyError, FlowyResult}; -use flowy_grid_data_model::revision::{CellRevision, FieldRevision, TypeOptionDataDeserializer, TypeOptionDataEntry}; +use flowy_grid_data_model::revision::{CellRevision, FieldRevision, TypeOptionDataDeserializer, TypeOptionDataFormat}; use serde::{Deserialize, Serialize}; // Date @@ -189,7 +189,7 @@ impl TypeOptionBuilder for DateTypeOptionBuilder { FieldType::DateTime } - fn entry(&self) -> &dyn TypeOptionDataEntry { + fn data_format(&self) -> &dyn TypeOptionDataFormat { &self.0 } } diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/number_type_option/number_type_option.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/number_type_option/number_type_option.rs index cdb1118385..fe4ddcf5fa 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/number_type_option/number_type_option.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/number_type_option/number_type_option.rs @@ -6,7 +6,7 @@ use crate::services::field::{BoxTypeOptionBuilder, NumberCellData, TypeOptionBui use bytes::Bytes; use flowy_derive::ProtoBuf; use flowy_error::{FlowyError, FlowyResult}; -use flowy_grid_data_model::revision::{CellRevision, FieldRevision, TypeOptionDataDeserializer, TypeOptionDataEntry}; +use flowy_grid_data_model::revision::{CellRevision, FieldRevision, TypeOptionDataDeserializer, TypeOptionDataFormat}; use rust_decimal::Decimal; @@ -45,7 +45,7 @@ impl TypeOptionBuilder for NumberTypeOptionBuilder { FieldType::Number } - fn entry(&self) -> &dyn TypeOptionDataEntry { + fn data_format(&self) -> &dyn TypeOptionDataFormat { &self.0 } } diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/multi_select_type_option.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/multi_select_type_option.rs index 75f654507d..967a65e60e 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/multi_select_type_option.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/multi_select_type_option.rs @@ -9,7 +9,7 @@ use crate::services::field::{ use bytes::Bytes; use flowy_derive::ProtoBuf; use flowy_error::{FlowyError, FlowyResult}; -use flowy_grid_data_model::revision::{CellRevision, FieldRevision, TypeOptionDataDeserializer, TypeOptionDataEntry}; +use flowy_grid_data_model::revision::{CellRevision, FieldRevision, TypeOptionDataDeserializer, TypeOptionDataFormat}; use serde::{Deserialize, Serialize}; // Multiple select @@ -108,7 +108,7 @@ impl TypeOptionBuilder for MultiSelectTypeOptionBuilder { FieldType::MultiSelect } - fn entry(&self) -> &dyn TypeOptionDataEntry { + fn data_format(&self) -> &dyn TypeOptionDataFormat { &self.0 } } diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/select_option.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/select_option.rs index dcec7772a7..ff579f8172 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/select_option.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/select_option.rs @@ -5,7 +5,7 @@ use bytes::Bytes; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use flowy_error::{internal_error, ErrorCode, FlowyResult}; use flowy_grid_data_model::parser::NotEmptyStr; -use flowy_grid_data_model::revision::{FieldRevision, TypeOptionDataEntry}; +use flowy_grid_data_model::revision::{FieldRevision, TypeOptionDataFormat}; use nanoid::nanoid; use serde::{Deserialize, Serialize}; @@ -75,7 +75,7 @@ pub fn make_selected_select_options( } } -pub trait SelectOptionOperation: TypeOptionDataEntry + Send + Sync { +pub trait SelectOptionOperation: TypeOptionDataFormat + Send + Sync { fn insert_option(&mut self, new_option: SelectOptionPB) { let options = self.mut_options(); if let Some(index) = options diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/single_select_type_option.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/single_select_type_option.rs index 287d0c3217..23d3c02b69 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/single_select_type_option.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/selection_type_option/single_select_type_option.rs @@ -9,7 +9,7 @@ use crate::services::field::{BoxTypeOptionBuilder, TypeOptionBuilder}; use bytes::Bytes; use flowy_derive::ProtoBuf; use flowy_error::{FlowyError, FlowyResult}; -use flowy_grid_data_model::revision::{CellRevision, FieldRevision, TypeOptionDataDeserializer, TypeOptionDataEntry}; +use flowy_grid_data_model::revision::{CellRevision, FieldRevision, TypeOptionDataDeserializer, TypeOptionDataFormat}; use serde::{Deserialize, Serialize}; // Single select @@ -91,7 +91,7 @@ impl TypeOptionBuilder for SingleSelectTypeOptionBuilder { FieldType::SingleSelect } - fn entry(&self) -> &dyn TypeOptionDataEntry { + fn data_format(&self) -> &dyn TypeOptionDataFormat { &self.0 } } diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/text_type_option/text_type_option.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/text_type_option/text_type_option.rs index 6c50ce8da3..33c1f7eb9e 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/text_type_option/text_type_option.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/text_type_option/text_type_option.rs @@ -8,7 +8,7 @@ use crate::services::field::{BoxTypeOptionBuilder, TypeOptionBuilder}; use bytes::Bytes; use flowy_derive::ProtoBuf; use flowy_error::{FlowyError, FlowyResult}; -use flowy_grid_data_model::revision::{CellRevision, FieldRevision, TypeOptionDataDeserializer, TypeOptionDataEntry}; +use flowy_grid_data_model::revision::{CellRevision, FieldRevision, TypeOptionDataDeserializer, TypeOptionDataFormat}; use serde::{Deserialize, Serialize}; #[derive(Default)] @@ -21,7 +21,7 @@ impl TypeOptionBuilder for RichTextTypeOptionBuilder { FieldType::RichText } - fn entry(&self) -> &dyn TypeOptionDataEntry { + fn data_format(&self) -> &dyn TypeOptionDataFormat { &self.0 } } diff --git a/frontend/rust-lib/flowy-grid/src/services/field/type_options/url_type_option/url_type_option.rs b/frontend/rust-lib/flowy-grid/src/services/field/type_options/url_type_option/url_type_option.rs index adbc91b4f0..d34dfc12d3 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/type_options/url_type_option/url_type_option.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/type_options/url_type_option/url_type_option.rs @@ -6,7 +6,7 @@ use bytes::Bytes; use fancy_regex::Regex; use flowy_derive::ProtoBuf; use flowy_error::{FlowyError, FlowyResult}; -use flowy_grid_data_model::revision::{CellRevision, FieldRevision, TypeOptionDataDeserializer, TypeOptionDataEntry}; +use flowy_grid_data_model::revision::{CellRevision, FieldRevision, TypeOptionDataDeserializer, TypeOptionDataFormat}; use lazy_static::lazy_static; use serde::{Deserialize, Serialize}; @@ -20,7 +20,7 @@ impl TypeOptionBuilder for URLTypeOptionBuilder { FieldType::URL } - fn entry(&self) -> &dyn TypeOptionDataEntry { + fn data_format(&self) -> &dyn TypeOptionDataFormat { &self.0 } } diff --git a/frontend/rust-lib/flowy-grid/src/services/filter/filter_service.rs b/frontend/rust-lib/flowy-grid/src/services/filter/filter_service.rs index 8335a36fb2..173dc8ffea 100644 --- a/frontend/rust-lib/flowy-grid/src/services/filter/filter_service.rs +++ b/frontend/rust-lib/flowy-grid/src/services/filter/filter_service.rs @@ -188,7 +188,7 @@ fn filter_cell( FieldType::RichText => filter_cache.text_filter.get(&filter_id).and_then(|filter| { Some( field_rev - .get_type_option_entry::(field_type_rev)? + .get_type_option::(field_type_rev)? .apply_filter(any_cell_data, filter.value()) .ok(), ) @@ -196,7 +196,7 @@ fn filter_cell( FieldType::Number => filter_cache.number_filter.get(&filter_id).and_then(|filter| { Some( field_rev - .get_type_option_entry::(field_type_rev)? + .get_type_option::(field_type_rev)? .apply_filter(any_cell_data, filter.value()) .ok(), ) @@ -204,7 +204,7 @@ fn filter_cell( FieldType::DateTime => filter_cache.date_filter.get(&filter_id).and_then(|filter| { Some( field_rev - .get_type_option_entry::(field_type_rev)? + .get_type_option::(field_type_rev)? .apply_filter(any_cell_data, filter.value()) .ok(), ) @@ -212,7 +212,7 @@ fn filter_cell( FieldType::SingleSelect => filter_cache.select_option_filter.get(&filter_id).and_then(|filter| { Some( field_rev - .get_type_option_entry::(field_type_rev)? + .get_type_option::(field_type_rev)? .apply_filter(any_cell_data, filter.value()) .ok(), ) @@ -220,7 +220,7 @@ fn filter_cell( FieldType::MultiSelect => filter_cache.select_option_filter.get(&filter_id).and_then(|filter| { Some( field_rev - .get_type_option_entry::(field_type_rev)? + .get_type_option::(field_type_rev)? .apply_filter(any_cell_data, filter.value()) .ok(), ) @@ -228,7 +228,7 @@ fn filter_cell( FieldType::Checkbox => filter_cache.checkbox_filter.get(&filter_id).and_then(|filter| { Some( field_rev - .get_type_option_entry::(field_type_rev)? + .get_type_option::(field_type_rev)? .apply_filter(any_cell_data, filter.value()) .ok(), ) @@ -236,7 +236,7 @@ fn filter_cell( FieldType::URL => filter_cache.url_filter.get(&filter_id).and_then(|filter| { Some( field_rev - .get_type_option_entry::(field_type_rev)? + .get_type_option::(field_type_rev)? .apply_filter(any_cell_data, filter.value()) .ok(), ) diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs index 176915fe1c..11e8cb139f 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs @@ -179,6 +179,10 @@ impl GridRevisionEditor { None => Err(ErrorCode::FieldDoesNotExist.into()), Some(field_type) => { let _ = self.update_field_rev(params, field_type).await?; + match self.view_manager.did_update_field(&field_id).await { + Ok(_) => {} + Err(e) => tracing::error!("View manager update field failed: {:?}", e), + } let _ = self.notify_did_update_grid_field(&field_id).await?; Ok(()) } @@ -225,7 +229,9 @@ impl GridRevisionEditor { let type_option_json_builder = |field_type: &FieldTypeRevision| -> String { let field_type: FieldType = field_type.into(); - return default_type_option_builder_from_type(&field_type).entry().json_str(); + return default_type_option_builder_from_type(&field_type) + .data_format() + .json_str(); }; let _ = self @@ -828,7 +834,7 @@ impl JsonDeserializer for TypeOptionJsonDeserializer { fn deserialize(&self, type_option_data: Vec) -> CollaborateResult { // The type_option_data sent from Dart is serialized by protobuf. let builder = type_option_builder_from_bytes(type_option_data, &self.0); - let json = builder.entry().json_str(); + let json = builder.data_format().json_str(); tracing::trace!("Deserialize type option data to: {}", json); Ok(json) } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs b/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs index fba6adf7df..da849103a6 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs @@ -152,7 +152,7 @@ where } = merge_groups(&self.configuration.groups, new_groups); let deleted_group_ids = deleted_group_revs - .iter() + .into_iter() .map(|group_rev| group_rev.id) .collect::>(); @@ -165,7 +165,7 @@ where is_changed = true; } - for mut group_rev in &mut all_group_revs { + for group_rev in &mut all_group_revs { match configuration .groups .iter() @@ -177,8 +177,7 @@ where } Some(pos) => { let mut old_group = configuration.groups.remove(pos); - // Update the group configuration base on the GroupRevision - group_rev.visible = old_group.visible; + group_rev.update_with_other(&old_group); // Take the GroupRevision if the name has changed if is_group_changed(&group_rev, &old_group) { @@ -192,6 +191,7 @@ where is_changed })?; + // The len of the filter_content_map should equal to the len of the all_group_revs debug_assert_eq!(filter_content_map.len(), all_group_revs.len()); all_group_revs.into_iter().for_each(|group_rev| { if let Some(filter_content) = filter_content_map.get(&group_rev.id) { @@ -207,21 +207,20 @@ where let new_groups = new_group_revs .into_iter() - .map(|group_rev| { - if let Some(filter_content) = filter_content_map.get(&group_rev.id) { - let group = Group::new( - group_rev.id, - self.field_rev.id.clone(), - group_rev.name, - filter_content.clone(), - ); - GroupPB::from(group) - } + .flat_map(|group_rev| { + let filter_content = filter_content_map.get(&group_rev.id)?; + let group = Group::new( + group_rev.id, + self.field_rev.id.clone(), + group_rev.name, + filter_content.clone(), + ); + Some(GroupPB::from(group)) }) .collect(); let changeset = GroupViewChangesetPB { - view_id, + view_id: self.view_id.clone(), new_groups, deleted_groups: deleted_group_ids, update_groups: vec![], diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller.rs index 5bcff652a4..f0504c23ef 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller.rs @@ -87,7 +87,7 @@ where { pub async fn new(field_rev: &Arc, mut configuration: GroupContext) -> FlowyResult { let field_type_rev = field_rev.ty; - let type_option = field_rev.get_type_option_entry::(field_type_rev); + let type_option = field_rev.get_type_option::(field_type_rev); let groups = G::generate_groups(&field_rev.id, &configuration, &type_option); let _ = configuration.init_group_revs(groups)?; @@ -274,7 +274,7 @@ where fn did_update_field(&mut self, field_rev: &FieldRevision) -> FlowyResult> { let field_type_rev = field_rev.ty; - let type_option = field_rev.get_type_option_entry::(field_type_rev); + let type_option = field_rev.get_type_option::(field_type_rev); let groups = G::generate_groups(&field_rev.id, &self.configuration, &type_option); let changeset = self.configuration.init_group_revs(groups)?; Ok(changeset) diff --git a/frontend/rust-lib/flowy-grid/tests/grid/block_test/script.rs b/frontend/rust-lib/flowy-grid/tests/grid/block_test/script.rs index 3aa22cc488..df0c105e39 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/block_test/script.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/block_test/script.rs @@ -176,7 +176,7 @@ impl GridRowTest { FieldType::Number => { let field_rev = self.editor.get_field_rev(&cell_id.field_id).await.unwrap(); let number_type_option = field_rev - .get_type_option_entry::(FieldType::Number.into()) + .get_type_option::(FieldType::Number.into()) .unwrap(); let cell_data = self .editor diff --git a/frontend/rust-lib/flowy-grid/tests/grid/field_test/test.rs b/frontend/rust-lib/flowy-grid/tests/grid/field_test/test.rs index 3e255d3662..7dfd76a1a4 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/field_test/test.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/field_test/test.rs @@ -4,7 +4,7 @@ use crate::grid::field_test::util::*; use flowy_grid::entities::FieldChangesetParams; use flowy_grid::services::field::selection_type_option::SelectOptionPB; use flowy_grid::services::field::SingleSelectTypeOptionPB; -use flowy_grid_data_model::revision::TypeOptionDataEntry; +use flowy_grid_data_model::revision::TypeOptionDataFormat; #[tokio::test] async fn grid_create_field() { @@ -86,7 +86,7 @@ async fn grid_update_field() { let mut expected_field_rev = single_select_field.clone(); expected_field_rev.frozen = true; expected_field_rev.width = 1000; - expected_field_rev.insert_type_option_entry(&single_select_type_option); + expected_field_rev.insert_type_option(&single_select_type_option); let scripts = vec![ CreateField { params }, diff --git a/frontend/rust-lib/flowy-grid/tests/grid/field_test/util.rs b/frontend/rust-lib/flowy-grid/tests/grid/field_test/util.rs index fa2f003baa..e8cbf2b813 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/field_test/util.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/field_test/util.rs @@ -12,7 +12,7 @@ pub fn create_text_field(grid_id: &str) -> (InsertFieldParams, FieldRevision) { let cloned_field_rev = field_rev.clone(); let type_option_data = field_rev - .get_type_option_entry::(field_rev.ty) + .get_type_option::(field_rev.ty) .unwrap() .protobuf_bytes() .to_vec(); @@ -45,7 +45,7 @@ pub fn create_single_select_field(grid_id: &str) -> (InsertFieldParams, FieldRev let field_rev = FieldBuilder::new(single_select).name("Name").visibility(true).build(); let cloned_field_rev = field_rev.clone(); let type_option_data = field_rev - .get_type_option_entry::(field_rev.ty) + .get_type_option::(field_rev.ty) .unwrap() .protobuf_bytes() .to_vec(); diff --git a/frontend/rust-lib/flowy-grid/tests/grid/grid_test.rs b/frontend/rust-lib/flowy-grid/tests/grid/grid_test.rs index 11866b7d1c..42e4e860e0 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/grid_test.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/grid_test.rs @@ -8,7 +8,7 @@ use flowy_grid::services::field::{ use flowy_grid::services::row::{decode_cell_data_from_type_option_cell_data, CreateRowMetaBuilder}; use flowy_grid_data_model::entities::{ CellChangeset, FieldChangesetParams, FieldType, GridBlockInfoChangeset, GridBlockMetaSnapshot, RowMetaChangeset, - TypeOptionDataEntry, + TypeOptionDataFormat, }; #[tokio::test] diff --git a/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs b/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs index e779844d46..c2f3388c3d 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs @@ -3,6 +3,7 @@ use flowy_grid::entities::{ CreateRowParams, FieldChangesetParams, FieldType, GridLayout, GroupPB, MoveGroupParams, MoveGroupRowParams, RowPB, }; use flowy_grid::services::cell::{delete_select_option_cell, insert_select_option_cell}; +use flowy_grid::services::field::{select_option_operation, SelectOptionOperation}; use flowy_grid_data_model::revision::{FieldRevision, RowChangeset}; use std::sync::Arc; use std::time::Duration; @@ -212,6 +213,28 @@ impl GridGroupTest { .clone(); return field; } + + pub async fn get_single_select_field(&self) -> Arc { + self.inner + .field_revs + .iter() + .find(|field_rev| { + let field_type: FieldType = field_rev.ty.into(); + field_type.is_single_select() + }) + .unwrap() + .clone() + } + + pub async fn edit_single_select_type_option(&self, f: impl FnOnce(Box)) { + let single_select = self.get_single_select_field().await; + let mut field_rev = self.editor.get_field_rev(&single_select.id).await.unwrap(); + let mut_field_rev = Arc::make_mut(&mut field_rev); + let mut type_option = select_option_operation(mut_field_rev)?; + f(type_option); + mut_field_rev.insert_type_option(&*type_option); + let _ = self.editor.replace_field(field_rev).await?; + } } impl std::ops::Deref for GridGroupTest { diff --git a/frontend/rust-lib/flowy-grid/tests/grid/script.rs b/frontend/rust-lib/flowy-grid/tests/grid/script.rs index c9ea583a14..eb65e2a7c8 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/script.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/script.rs @@ -5,7 +5,7 @@ use flowy_grid::services::row::CreateRowMetaPayload; use flowy_grid_data_model::entities::{ BuildGridContext, CellChangeset, Field, FieldChangesetParams, FieldMeta, FieldOrder, FieldType, GridBlockInfoChangeset, GridBlockMetaSnapshot, InsertFieldParams, RowMeta, RowMetaChangeset, RowOrder, - TypeOptionDataEntry, + TypeOptionDataFormat, }; use flowy_revision::REVISION_WRITE_INTERVAL_IN_MILLIS; use flowy_sync::client_grid::GridBuilder; diff --git a/shared-lib/flowy-grid-data-model/src/revision/grid_rev.rs b/shared-lib/flowy-grid-data-model/src/revision/grid_rev.rs index fedac5c591..90187d9b7b 100644 --- a/shared-lib/flowy-grid-data-model/src/revision/grid_rev.rs +++ b/shared-lib/flowy-grid-data-model/src/revision/grid_rev.rs @@ -143,15 +143,15 @@ impl FieldRevision { } } - pub fn insert_type_option_entry(&mut self, entry: &T) + pub fn insert_type_option(&mut self, type_option: &T) where - T: TypeOptionDataEntry + ?Sized, + T: TypeOptionDataFormat + ?Sized, { let id = self.ty.to_string(); - self.type_options.insert(id, entry.json_str()); + self.type_options.insert(id, type_option.json_str()); } - pub fn get_type_option_entry(&self, field_type_rev: FieldTypeRevision) -> Option { + pub fn get_type_option(&self, field_type_rev: FieldTypeRevision) -> Option { let id = field_type_rev.to_string(); // TODO: cache the deserialized type option self.type_options.get(&id).map(|s| T::from_json_str(s)) @@ -171,7 +171,7 @@ impl FieldRevision { /// The macro [impl_type_option] will implement the [TypeOptionDataEntry] for the type that /// supports the serde trait and the TryInto trait. -pub trait TypeOptionDataEntry { +pub trait TypeOptionDataFormat { fn json_str(&self) -> String; fn protobuf_bytes(&self) -> Bytes; } diff --git a/shared-lib/flowy-grid-data-model/src/revision/group_rev.rs b/shared-lib/flowy-grid-data-model/src/revision/group_rev.rs index e942de59c9..0aded0d3c7 100644 --- a/shared-lib/flowy-grid-data-model/src/revision/group_rev.rs +++ b/shared-lib/flowy-grid-data-model/src/revision/group_rev.rs @@ -135,6 +135,10 @@ impl GroupRevision { visible: true, } } + + pub fn update_with_other(&mut self, other: &GroupRevision) { + self.visible = other.visible + } } #[derive(Default, Serialize, Deserialize)] From 9a01f90aeec342f1df26845aef7a31bc2a3674c3 Mon Sep 17 00:00:00 2001 From: Eric Phillips <55208878+egp415@users.noreply.github.com> Date: Fri, 2 Sep 2022 00:18:57 -0700 Subject: [PATCH 07/17] doc: Editorial updates to the ReadMe for AppFlowyEditor (#900) docs: Editorial updates to the ReadMe for AppFlowyEditor --- .../packages/appflowy_editor/README.md | 61 +++++++++------- .../documentation/customizing.md | 67 +++++++++--------- .../appflowy_editor/documentation/testing.md | 69 ++++++++++++------- 3 files changed, 115 insertions(+), 82 deletions(-) diff --git a/frontend/app_flowy/packages/appflowy_editor/README.md b/frontend/app_flowy/packages/appflowy_editor/README.md index 718c108d5a..21df5f247a 100644 --- a/frontend/app_flowy/packages/appflowy_editor/README.md +++ b/frontend/app_flowy/packages/appflowy_editor/README.md @@ -26,21 +26,27 @@ and the Flutter guide for ## Key Features -* Allow you to build rich, intuitive editors -* Design and modify it your way by customizing components, shortcut events, and many more coming soon including menu options and themes -* [Test-covered](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/documentation/testing.md) and maintained by AppFlowy's core team along with a community of more than 1,000 builders +* Build rich, intuitive editors +* Design and modify an ever expanding list of customizable features including + * components (such as form input controls, numbered lists, and rich text widgets) + * shortcut events + * menu options (**coming soon!**) + * themes (**coming soon!**) +* [Test-coverage](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/documentation/testing.md) and on-going maintenance by AppFlowy's core team and community of more than 1,000 builders +## Getting Started -## Getting started +Add the AppFlowy editor [Flutter package](https://docs.flutter.dev/development/packages-and-plugins/using-packages) to your environment. ```shell flutter pub add appflowy_editor flutter pub get ``` -## How to use +## Creating Your First Editor + +Start by creating a new empty AppFlowyEditor object. -Let's create a new AppFlowyEditor object ```dart final editorState = EditorState.empty(); // an empty state final editor = AppFlowyEditor( @@ -50,7 +56,8 @@ final editor = AppFlowyEditor( ); ``` -You can also create an editor from a JSON file +You can also create an editor from a JSON object in order to configure your initial state. + ```dart final json = ...; final editorState = EditorState(StateTree.fromJson(data)); @@ -61,37 +68,43 @@ final editor = AppFlowyEditor( ); ``` -To get a sense for how you might use it, run this example: +To get a sense for how the AppFlowy Editor works, run our example: + ```shell git clone https://github.com/AppFlowy-IO/AppFlowy.git cd frontend/app_flowy/packages/appflowy_editor/example flutter run ``` +## Customizing Your Editor -## How to customize -### Customize a component -Please refer to [customizing a component](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/documentation/customizing.md#customize-a-component) for more details. +### Customizing Components +Please refer to our documentation on customizing AppFlowy for a detailed discussion about [customizing components](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/documentation/customizing.md#customize-a-component). -### Customize a shortcut event -Please refer to [customizing a shortcut event](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/documentation/customizing.md#customize-a-shortcut-event) for more details. +Below are some examples of component customizations: -## More Examples -* Customize a component - * [Checkbox Text](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/checkbox_text.dart) shows you how to extend new styles based on existing rich text components - * [Image](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/network_image_node_widget.dart) teaches you how to extend a new node and render it - * And more examples on [rich-text plugins](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text) -* Customize a shortcut event - * [BIUS](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/lib/src/service/internal_key_event_handlers/update_text_style_by_command_x_handler.dart) shows you how to make text bold/italic/underline/strikethrough through shortcut keys - * [Paste HTML](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/lib/src/service/internal_key_event_handlers/copy_paste_handler.dart) gives you an idea on how to handle pasted styles through shortcut keys - * Need more examples? Check out [Internal key event handlers](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/lib/src/service/internal_key_event_handlers) + * [Checkbox Text](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text/checkbox_text.dart) demonstrates how to extend new styles based on existing rich text components + * [Image](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/network_image_node_widget.dart) demonstrates how to extend a new node and render it + * See further examples of [rich-text plugins](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/lib/src/render/rich_text) + +### Customizing Shortcut Events + +Please refer to our documentation on customizing AppFlowy for a detailed discussion about [customizing shortcut events](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/documentation/customizing.md#customize-a-shortcut-event). + +Below are some examples of shortcut event customizations: + + * [BIUS](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/lib/src/service/internal_key_event_handlers/update_text_style_by_command_x_handler.dart) demonstrates how to make text bold/italic/underline/strikethrough through shortcut keys + * [Paste HTML](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/lib/src/service/internal_key_event_handlers/copy_paste_handler.dart) gives you an idea on how to handle pasted styles through shortcut keys + * Need more examples? Check out [Internal key event handlers](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/lib/src/service/internal_key_event_handlers) ## Glossary Please refer to the API documentation. ## Contributing -Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated. Please look at [CONTRIBUTING.md](https://appflowy.gitbook.io/docs/essential-documentation/contribute-to-appflowy/contributing-to-appflowy) for details. +Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are greatly appreciated. + +Please look at [CONTRIBUTING.md](https://appflowy.gitbook.io/docs/essential-documentation/contribute-to-appflowy/contributing-to-appflowy) for details. ## License -Distributed under the AGPLv3 License. See LICENSE for more information. +Distributed under the AGPLv3 License. See [LICENSE](https://github.com/AppFlowy-IO/AppFlowy-Docs/blob/main/LICENSE) for more information. diff --git a/frontend/app_flowy/packages/appflowy_editor/documentation/customizing.md b/frontend/app_flowy/packages/appflowy_editor/documentation/customizing.md index 85fa195c96..ed0f257ad0 100644 --- a/frontend/app_flowy/packages/appflowy_editor/documentation/customizing.md +++ b/frontend/app_flowy/packages/appflowy_editor/documentation/customizing.md @@ -1,12 +1,12 @@ -# How to customize ... +# Customizing Editor Features -## Customize a shortcut event +## Customizing a Shortcut Event We will use a simple example to illustrate how to quickly add a shortcut event. -For example, typing `_xxx_` will be converted into _xxx_. +In this example, text that starts and ends with an underscore ( \_ ) character will be rendered in italics for emphasis. So typing `_xxx_` will automatically be converted into _xxx_. -Let's start with a blank document. +Let's start with a blank document: ```dart @override @@ -27,7 +27,7 @@ At this point, nothing magic will happen after typing `_xxx_`. ![Before](./images/customizing_a_shortcut_event_before.gif) -Next, we will create a function to handle an underscore input. +To implement our shortcut event we will create a function to handle an underscore input. ```dart import 'package:appflowy_editor/appflowy_editor.dart'; @@ -35,23 +35,25 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; FlowyKeyEventHandler underscoreToItalicHandler = (editorState, event) { - // Since we only need to handler the input of `underscore`. - // All inputs except `underscore` will be ignored directly. + // Since we only need to handle the input of an 'underscore' character, + // all inputs except `underscore` will be ignored immediately. if (event.logicalKey != LogicalKeyboardKey.underscore) { return KeyEventResult.ignored; } }; ``` -Then, we need to determine if the currently selected node is `TextNode` and the selection is collapsed. +Then, we need to determine if the currently selected node is a `TextNode` and if the selection is collapsed. + +If so, we will continue. ```dart // ... FlowyKeyEventHandler underscoreToItalicHandler = (editorState, event) { // ... - // Obtaining the selection and selected nodes of the current document through `selectionService`. - // And determine whether the selection is collapsed and whether the selected node is a text node. + // Obtain the selection and selected nodes of the current document through the 'selectionService' + // to determine whether the selection is collapsed and whether the selected node is a text node. final selectionService = editorState.service.selectionService; final selection = selectionService.currentSelection.value; final textNodes = selectionService.currentSelectedNodes.whereType(); @@ -60,11 +62,11 @@ FlowyKeyEventHandler underscoreToItalicHandler = (editorState, event) { } ``` -Now, we start dealing with underscore. +Now, we deal with handling the underscore. Look for the position of the previous underscore and -1. return, if not found. -2. if found, the text wrapped in between two underscores will be displayed in italic. +1. if one is _not_ found, return without doing anything. +2. if one is found, the text enclosed within the two underscores will be formatted to display in italics. ```dart // ... @@ -73,14 +75,14 @@ FlowyKeyEventHandler underscoreToItalicHandler = (editorState, event) { final textNode = textNodes.first; final text = textNode.toRawString(); - // Determine if `underscore` already exists in the text node + // Determine if an 'underscore' already exists in the text node final previousUnderscore = text.indexOf('_'); if (previousUnderscore == -1) { return KeyEventResult.ignored; } - // Delete the previous `underscore`, - // update the style of the text surrounded by two underscores to `italic`, + // Delete the previous 'underscore', + // update the style of the text surrounded by the two underscores to 'italic', // and update the cursor position. TransactionBuilder(editorState) ..deleteText(textNode, previousUnderscore, 1) @@ -99,7 +101,7 @@ FlowyKeyEventHandler underscoreToItalicHandler = (editorState, event) { }; ``` -So far, the 'underscore handler' function is done and the only task left is to inject it into the AppFlowyEditor. +Now our 'underscore handler' function is done and the only task left is to inject it into the AppFlowyEditor. ```dart @override @@ -120,14 +122,15 @@ Widget build(BuildContext context) { ![After](./images/customizing_a_shortcut_event_after.gif) -[Complete code example]() +Check out the [complete code](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/underscore_to_italic_key_event_handler.dart) file of this example. -## Customize a component -We will use a simple example to showcase how to quickly add a custom component. -For example, we want to render an image from the network. +## Customizing a Component +We will use a simple example to show how to quickly add a custom component. -To start with, let's create an empty document by running commands as follows: +In this example we will render an image from the network. + +Let's start with a blank document: ```dart @override @@ -144,9 +147,9 @@ Widget build(BuildContext context) { } ``` -Next, we choose a unique string for your custom node's type. We use `network_image` in this case. And we add `network_image_src` to the `attributes` to describe the link of the image. +Next, we will choose a unique string for your custom node's type. -> For the definition of the [Node](), please refer to this [link](). +We'll use `network_image` in this case. And we add `network_image_src` to the `attributes` to describe the link of the image. ```JSON { @@ -157,9 +160,9 @@ Next, we choose a unique string for your custom node's type. We use `network_ima } ``` -Then, we create a class that inherits [NodeWidgetBuilder](). As shown in the autoprompt, we need to implement two functions: +Then, we create a class that inherits [NodeWidgetBuilder](../lib/src/service/render_plugin_service.dart). As shown in the autoprompt, we need to implement two functions: 1. one returns a widget -2. the other verifies the correctness of the [Node](). +2. the other verifies the correctness of the [Node](../lib/src/document/node.dart). ```dart @@ -179,9 +182,7 @@ class NetworkImageNodeWidgetBuilder extends NodeWidgetBuilder { Now, let's implement a simple image widget based on `Image`. -**It is important to note that the `State` of the returned `Widget` must be with [Selectable]().** - -> For the definition of the [Selectable](), please refer to this [link](). +Note that the `State` object that is returned by the `Widget` must implement [Selectable](../lib/src/render/selection/selectable.dart) using the `with` keyword. ```dart class _NetworkImageNodeWidget extends StatefulWidget { @@ -236,7 +237,7 @@ class __NetworkImageNodeWidgetState extends State<_NetworkImageNodeWidget> } ``` -Finally, we return `_NetworkImageNodeWidget` in the `build` function of `NetworkImageNodeWidgetBuilder` and register `NetworkImageNodeWidgetBuilder` into `AppFlowyEditor`. +Finally, we return `_NetworkImageNodeWidget` in the `build` function of `NetworkImageNodeWidgetBuilder`... ```dart class NetworkImageNodeWidgetBuilder extends NodeWidgetBuilder { @@ -256,6 +257,8 @@ class NetworkImageNodeWidgetBuilder extends NodeWidgetBuilder { } ``` +... and register `NetworkImageNodeWidgetBuilder` in the `AppFlowyEditor`. + ```dart final editorState = EditorState( document: StateTree.empty() @@ -281,6 +284,6 @@ return AppFlowyEditor( ); ``` -![](./images/customizing_a_component.gif) +![Whew!](./images/customizing_a_component.gif) -[Here you can check out the complete code file of this example]() +Check out the [complete code](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/example/lib/plugin/network_image_node_widget.dart) file of this example. diff --git a/frontend/app_flowy/packages/appflowy_editor/documentation/testing.md b/frontend/app_flowy/packages/appflowy_editor/documentation/testing.md index 25d918c4b5..d51583a9c5 100644 --- a/frontend/app_flowy/packages/appflowy_editor/documentation/testing.md +++ b/frontend/app_flowy/packages/appflowy_editor/documentation/testing.md @@ -1,24 +1,33 @@ # Testing -> The directory structure of test files is consistent with the code files, making it easy for us to map a file with the corresponding test and check if the test is updated +The directory structure of test files mirrors that of the code files, making it easy for us to map a file with the corresponding test and check if the test is updated. -## Testing Functions +For an overview of testing best practices in Flutter applications, please refer to Flutter's [introduction to widget testing](https://docs.flutter.dev/cookbook/testing/widget/introduction) as well as their [introduction to unit testing](https://docs.flutter.dev/cookbook/testing/unit/introduction). +There you will learn how to do such things as such as simulate a click as well as leverage the `test` and `expect` functions. + +## Testing Basic Editor Functions + +The example code below shows how to construct a document that will be used in our testing. -**Construct a document for testing** ```dart const text = 'Welcome to Appflowy 😁'; -// Get the instance of editor. +// Get the instance of the editor. final editor = tester.editor; -// Insert empty text node. + +// Insert an empty text node. editor.insertEmptyTextNode(); -// Insert text node with string. + +// Insert a text node with the text string we defined earlier. editor.insertTextNode(text); -// Insert text node with heading style. + +// Insert the same text, but with the heading style. editor.insertTextNode(text, attributes: { StyleKey.subtype: StyleKey.heading, StyleKey.heading: StyleKey.h1, }); -// Insert text node with bulleted list style and bold style. + +// Insert our text with the bulleted list style and the bold style. +// If you want to modify the style of the inserted text, you need to use the Delta parameter. editor.insertTextNode( '', attributes: { @@ -30,66 +39,76 @@ editor.insertTextNode( ); ``` -**The `startTesting` function must be called before testing**. +The `startTesting` function of the editor must be called before you begin your test. + ```dart await editor.startTesting(); ``` -**Get the number of nodes in the document** +Get the number of nodes in the document. + ```dart final length = editor.documentLength; print(length); ``` -**Get the node of a defined path** +Get the node of a defined path. In this case we are getting the first node of the document which is the text "Welcome to Appflowy 😁". + ```dart final firstTextNode = editor.nodeAtPath([0]) as TextNode; ``` -**Update selection** +Update the [Selection](https://github.com/AppFlowy-IO/AppFlowy/blob/main/frontend/app_flowy/packages/appflowy_editor/lib/src/document/selection.dart) so that our text "Welcome to Appflowy 😁" is selected. We will start our selection from the beginning of the string. + ```dart await editor.updateSelection( Selection.single(path: firstTextNode.path, startOffset: 0), ); ``` -**Get the selection** +Get the current selection. + ```dart final selection = editor.documentSelection; print(selection); ``` -**Simulate shortcut event inputs** +Next we will simulate the input of a shortcut key being pressed that will select all the text. + ```dart -// Command + A. +// Meta + A. await editor.pressLogicKey(LogicalKeyboardKey.keyA, isMetaPressed: true); -// Command + shift + S. +// Meta + shift + S. await editor.pressLogicKey( - LogicalKeyboardKey.keyS, - isMetaPressed: true, + LogicalKeyboardKey.keyS, + isMetaPressed: true, isShiftPressed: true, ); ``` -**Simulate a text input** +We will then simulate text input. + ```dart // Insert 'Hello World' at the beginning of the first node. editor.insertText(firstTextNode, 'Hello World', 0); ``` -**Get information about the text node** +Once the text has been added, we can get information about the text node. + ```dart -// Get plain text. +// Get the text of the first text node as plain text final textAfterInserted = firstTextNode.toRawString(); print(textAfterInserted); -// Get attributes. +// Get the attributes of the text node final attributes = firstTextNode.attributes; print(attributes); ``` -## Example -For example, we are going to test `select_all_handler.dart` +## A Complete Code Example +In the example code below we are going to test `select_all_handler.dart` by inserting 100 lines of text that read "Welcome to Appflowy 😁" and then simulating the "selectAll" shortcut key being pressed. + +Afterwards, we will `expect` that the current selection of the editor is equal to the selection of all the lines that were generated. ```dart import 'package:appflowy_editor/appflowy_editor.dart'; @@ -124,5 +143,3 @@ void main() async { }); } ``` - -For more information about testing, such as simulating a click, please refer to [An introduction to widget testing](https://docs.flutter.dev/cookbook/testing/widget/introduction) From 454c7b61c96b81b1337bc2d33d355adf75abff4f Mon Sep 17 00:00:00 2001 From: "Lucas.Xu" Date: Fri, 2 Sep 2022 15:23:10 +0800 Subject: [PATCH 08/17] chore: fix link error in readme --- frontend/app_flowy/packages/appflowy_editor/README.md | 2 +- .../app_flowy/packages/appflowy_editor/lib/appflowy_editor.dart | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/frontend/app_flowy/packages/appflowy_editor/README.md b/frontend/app_flowy/packages/appflowy_editor/README.md index 21df5f247a..1ccbf55878 100644 --- a/frontend/app_flowy/packages/appflowy_editor/README.md +++ b/frontend/app_flowy/packages/appflowy_editor/README.md @@ -21,7 +21,7 @@ and the Flutter guide for

- +
## Key Features diff --git a/frontend/app_flowy/packages/appflowy_editor/lib/appflowy_editor.dart b/frontend/app_flowy/packages/appflowy_editor/lib/appflowy_editor.dart index 12b3a29252..a77f3fe7eb 100644 --- a/frontend/app_flowy/packages/appflowy_editor/lib/appflowy_editor.dart +++ b/frontend/app_flowy/packages/appflowy_editor/lib/appflowy_editor.dart @@ -20,5 +20,6 @@ export 'src/service/render_plugin_service.dart'; export 'src/service/service.dart'; export 'src/service/selection_service.dart'; export 'src/service/scroll_service.dart'; +export 'src/service/toolbar_service.dart'; export 'src/service/keyboard_service.dart'; export 'src/service/input_service.dart'; From fa22c63ac1ff681d30e68c661421ffe2b2daccaf Mon Sep 17 00:00:00 2001 From: "Lucas.Xu" Date: Fri, 2 Sep 2022 16:58:05 +0800 Subject: [PATCH 09/17] feat: support codecov (#970) * feat: support codecov --- .github/workflows/flowy_editor_test.yml | 10 +++++++++- frontend/app_flowy/packages/appflowy_editor/README.md | 6 ++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/.github/workflows/flowy_editor_test.yml b/.github/workflows/flowy_editor_test.yml index 1459a47518..4c957f5c95 100644 --- a/.github/workflows/flowy_editor_test.yml +++ b/.github/workflows/flowy_editor_test.yml @@ -37,4 +37,12 @@ jobs: working-directory: frontend/app_flowy/packages/appflowy_editor run: | flutter pub get - flutter test + flutter test --coverage + + - uses: codecov/codecov-action@v3 + with: + name: appflowy_editor + env_vars: ${{ matrix.os }} + fail_ci_if_error: true + verbose: true + diff --git a/frontend/app_flowy/packages/appflowy_editor/README.md b/frontend/app_flowy/packages/appflowy_editor/README.md index 1ccbf55878..9f26c075fd 100644 --- a/frontend/app_flowy/packages/appflowy_editor/README.md +++ b/frontend/app_flowy/packages/appflowy_editor/README.md @@ -20,6 +20,12 @@ and the Flutter guide for
Twitter

+

+ + + +

+
From 118891923fce73aedc1bf1c99b404cd4c13da08a Mon Sep 17 00:00:00 2001 From: "Lucas.Xu" Date: Fri, 2 Sep 2022 21:19:55 +0800 Subject: [PATCH 10/17] chore: appflowy_editor 0.0.4 --- .github/workflows/flowy_editor_test.yml | 4 ++-- frontend/app_flowy/packages/appflowy_editor/CHANGELOG.md | 5 +++++ frontend/app_flowy/packages/appflowy_editor/pubspec.yaml | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/flowy_editor_test.yml b/.github/workflows/flowy_editor_test.yml index 4c957f5c95..450f72e61d 100644 --- a/.github/workflows/flowy_editor_test.yml +++ b/.github/workflows/flowy_editor_test.yml @@ -5,13 +5,13 @@ on: branches: - "main" paths: - - "frontend/app_flowy/packages/appflowy_editor" + - "frontend/app_flowy/packages/appflowy_editor/**" pull_request: branches: - "main" paths: - - "frontend/app_flowy/packages/appflowy_editor" + - "frontend/app_flowy/packages/appflowy_editor/**" env: CARGO_TERM_COLOR: always diff --git a/frontend/app_flowy/packages/appflowy_editor/CHANGELOG.md b/frontend/app_flowy/packages/appflowy_editor/CHANGELOG.md index 2d76371553..9745bbc3ae 100644 --- a/frontend/app_flowy/packages/appflowy_editor/CHANGELOG.md +++ b/frontend/app_flowy/packages/appflowy_editor/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.0.4 +* Support more shortcut events. +* Fix some bugs. +* Update the documentation. + ## 0.0.3 * Support insert image. * Support insert link. diff --git a/frontend/app_flowy/packages/appflowy_editor/pubspec.yaml b/frontend/app_flowy/packages/appflowy_editor/pubspec.yaml index 107ba54dba..17f75aea6a 100644 --- a/frontend/app_flowy/packages/appflowy_editor/pubspec.yaml +++ b/frontend/app_flowy/packages/appflowy_editor/pubspec.yaml @@ -1,6 +1,6 @@ name: appflowy_editor description: A highly customizable rich-text editor for Flutter -version: 0.0.3 +version: 0.0.4 homepage: https://github.com/AppFlowy-IO/AppFlowy platforms: From bb7cddc7f7b07a6b9ac3affb06b6ef4e125fa7c0 Mon Sep 17 00:00:00 2001 From: appflowy Date: Fri, 2 Sep 2022 21:34:00 +0800 Subject: [PATCH 11/17] chore: reload group when group by new field --- .../plugins/board/application/board_bloc.dart | 44 +++++--- .../application/board_data_controller.dart | 42 ++++--- .../board/application/board_listener.dart | 32 ++++-- .../lib/src/widgets/board_data.dart | 5 + .../flowy-grid/src/dart_notification.rs | 1 + .../group_entities/group_changeset.rs | 5 +- .../src/services/field/field_operation.rs | 44 ++++---- .../flowy-grid/src/services/grid_editor.rs | 3 +- .../src/services/grid_view_editor.rs | 105 ++++++++++++++---- .../src/services/grid_view_manager.rs | 6 + .../src/services/group/configuration.rs | 21 ++-- .../src/services/group/controller.rs | 31 +++--- .../controller_impls/checkbox_controller.rs | 7 +- .../controller_impls/default_controller.rs | 20 ++-- .../multi_select_controller.rs | 14 +-- .../single_select_controller.rs | 12 +- .../select_option_controller/util.rs | 4 +- .../src/services/group/group_util.rs | 7 +- .../flowy-grid/tests/grid/grid_editor.rs | 7 ++ .../tests/grid/group_test/script.rs | 41 +++---- .../flowy-grid/tests/grid/group_test/test.rs | 58 ++++++---- .../src/revision/grid_setting_rev.rs | 10 +- .../src/client_grid/view_revision_pad.rs | 10 +- .../src/core/document/document_operation.rs | 2 +- shared-lib/lib-ot/src/core/document/mod.rs | 1 + shared-lib/lib-ot/tests/main.rs | 30 ++--- 26 files changed, 353 insertions(+), 209 deletions(-) diff --git a/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart b/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart index 6913b07023..d4ffebd117 100644 --- a/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart +++ b/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart @@ -110,9 +110,11 @@ class BoardBloc extends Bloc { emit(state.copyWith(noneOrError: some(error))); }, didReceiveGroups: (List groups) { - emit(state.copyWith( - groupIds: groups.map((group) => group.groupId).toList(), - )); + emit( + state.copyWith( + groupIds: groups.map((group) => group.groupId).toList(), + ), + ); }, ); }, @@ -154,6 +156,23 @@ class BoardBloc extends Bloc { } void initializeGroups(List groups) { + for (var controller in groupControllers.values) { + controller.dispose(); + } + groupControllers.clear(); + boardController.clear(); + + // + List columns = groups.map((group) { + return AFBoardColumnData( + id: group.groupId, + name: group.desc, + items: _buildRows(group), + customData: group, + ); + }).toList(); + boardController.addColumns(columns); + for (final group in groups) { final delegate = GroupControllerDelegateImpl( controller: boardController, @@ -184,16 +203,6 @@ class BoardBloc extends Bloc { } }, didLoadGroups: (groups) { - List columns = groups.map((group) { - return AFBoardColumnData( - id: group.groupId, - name: group.desc, - items: _buildRows(group), - customData: group, - ); - }).toList(); - - boardController.addColumns(columns); initializeGroups(groups); add(BoardEvent.didReceiveGroups(groups)); }, @@ -204,18 +213,19 @@ class BoardBloc extends Bloc { // }, onUpdatedGroup: (updatedGroups) { - // for (final group in updatedGroups) { final columnController = boardController.getColumnController(group.groupId); - if (columnController != null) { - columnController.updateColumnName(group.desc); - } + columnController?.updateColumnName(group.desc); } }, onError: (err) { Log.error(err); }, + onResetGroups: (groups) { + initializeGroups(groups); + add(BoardEvent.didReceiveGroups(groups)); + }, ); } diff --git a/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart b/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart index 4ab45c64b7..c78621b0a3 100644 --- a/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart +++ b/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart @@ -18,6 +18,7 @@ typedef DidLoadGroups = void Function(List); typedef OnUpdatedGroup = void Function(List); typedef OnDeletedGroup = void Function(List); typedef OnInsertedGroup = void Function(List); +typedef OnResetGroups = void Function(List); typedef OnRowsChanged = void Function( List, @@ -65,6 +66,7 @@ class BoardDataController { required OnUpdatedGroup onUpdatedGroup, required OnDeletedGroup onDeletedGroup, required OnInsertedGroup onInsertedGroup, + required OnResetGroups onResetGroups, required OnError? onError, }) { _onGridChanged = onGridChanged; @@ -77,24 +79,32 @@ class BoardDataController { _onFieldsChanged?.call(UnmodifiableListView(fields)); }); - _listener.start(onBoardChanged: (result) { - result.fold( - (changeset) { - if (changeset.updateGroups.isNotEmpty) { - onUpdatedGroup.call(changeset.updateGroups); - } + _listener.start( + onBoardChanged: (result) { + result.fold( + (changeset) { + if (changeset.updateGroups.isNotEmpty) { + onUpdatedGroup.call(changeset.updateGroups); + } - if (changeset.insertedGroups.isNotEmpty) { - onInsertedGroup.call(changeset.insertedGroups); - } + if (changeset.insertedGroups.isNotEmpty) { + onInsertedGroup.call(changeset.insertedGroups); + } - if (changeset.deletedGroups.isNotEmpty) { - onDeletedGroup.call(changeset.deletedGroups); - } - }, - (e) => _onError?.call(e), - ); - }); + if (changeset.deletedGroups.isNotEmpty) { + onDeletedGroup.call(changeset.deletedGroups); + } + }, + (e) => _onError?.call(e), + ); + }, + onGroupByNewField: (result) { + result.fold( + (groups) => onResetGroups(groups), + (e) => _onError?.call(e), + ); + }, + ); } Future> loadData() async { diff --git a/frontend/app_flowy/lib/plugins/board/application/board_listener.dart b/frontend/app_flowy/lib/plugins/board/application/board_listener.dart index a953a993cc..9f8662fc5b 100644 --- a/frontend/app_flowy/lib/plugins/board/application/board_listener.dart +++ b/frontend/app_flowy/lib/plugins/board/application/board_listener.dart @@ -5,20 +5,26 @@ import 'package:flowy_infra/notifier.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/dart_notification.pb.dart'; import 'package:dartz/dartz.dart'; +import 'package:flowy_sdk/protobuf/flowy-grid/group.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/group_changeset.pb.dart'; -typedef UpdateBoardNotifiedValue = Either; +typedef GroupUpdateValue = Either; +typedef GroupByNewFieldValue = Either, FlowyError>; class BoardListener { final String viewId; - PublishNotifier? _groupNotifier = PublishNotifier(); + PublishNotifier? _groupUpdateNotifier = PublishNotifier(); + PublishNotifier? _groupByNewFieldNotifier = + PublishNotifier(); GridNotificationListener? _listener; BoardListener(this.viewId); void start({ - required void Function(UpdateBoardNotifiedValue) onBoardChanged, + required void Function(GroupUpdateValue) onBoardChanged, + required void Function(GroupByNewFieldValue) onGroupByNewField, }) { - _groupNotifier?.addPublishListener(onBoardChanged); + _groupUpdateNotifier?.addPublishListener(onBoardChanged); + _groupByNewFieldNotifier?.addPublishListener(onGroupByNewField); _listener = GridNotificationListener( objectId: viewId, handler: _handler, @@ -32,9 +38,16 @@ class BoardListener { switch (ty) { case GridNotification.DidUpdateGroupView: result.fold( - (payload) => _groupNotifier?.value = + (payload) => _groupUpdateNotifier?.value = left(GroupViewChangesetPB.fromBuffer(payload)), - (error) => _groupNotifier?.value = right(error), + (error) => _groupUpdateNotifier?.value = right(error), + ); + break; + case GridNotification.DidGroupByNewField: + result.fold( + (payload) => _groupByNewFieldNotifier?.value = + left(GroupViewChangesetPB.fromBuffer(payload).newGroups), + (error) => _groupByNewFieldNotifier?.value = right(error), ); break; default: @@ -44,7 +57,10 @@ class BoardListener { Future stop() async { await _listener?.stop(); - _groupNotifier?.dispose(); - _groupNotifier = null; + _groupUpdateNotifier?.dispose(); + _groupUpdateNotifier = null; + + _groupByNewFieldNotifier?.dispose(); + _groupByNewFieldNotifier = null; } } diff --git a/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_data.dart b/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_data.dart index 75282d183c..4c20161691 100644 --- a/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_data.dart +++ b/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_data.dart @@ -89,6 +89,11 @@ class AFBoardDataController extends ChangeNotifier if (columnIds.isNotEmpty && notify) notifyListeners(); } + void clear() { + _columnDatas.clear(); + notifyListeners(); + } + AFBoardColumnDataController? getColumnController(String columnId) { final columnController = _columnControllers[columnId]; if (columnController == null) { diff --git a/frontend/rust-lib/flowy-grid/src/dart_notification.rs b/frontend/rust-lib/flowy-grid/src/dart_notification.rs index a0030c6773..ca0f0aa681 100644 --- a/frontend/rust-lib/flowy-grid/src/dart_notification.rs +++ b/frontend/rust-lib/flowy-grid/src/dart_notification.rs @@ -13,6 +13,7 @@ pub enum GridNotification { DidUpdateField = 50, DidUpdateGroupView = 60, DidUpdateGroup = 61, + DidGroupByNewField = 62, } impl std::default::Default for GridNotification { diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs index fd49709cf3..63b883d570 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/group_entities/group_changeset.rs @@ -145,7 +145,10 @@ pub struct GroupViewChangesetPB { impl GroupViewChangesetPB { pub fn is_empty(&self) -> bool { - self.inserted_groups.is_empty() && self.deleted_groups.is_empty() && self.update_groups.is_empty() + self.new_groups.is_empty() + && self.inserted_groups.is_empty() + && self.deleted_groups.is_empty() + && self.update_groups.is_empty() } } diff --git a/frontend/rust-lib/flowy-grid/src/services/field/field_operation.rs b/frontend/rust-lib/flowy-grid/src/services/field/field_operation.rs index 7ee127b382..3a2ce89c21 100644 --- a/frontend/rust-lib/flowy-grid/src/services/field/field_operation.rs +++ b/frontend/rust-lib/flowy-grid/src/services/field/field_operation.rs @@ -1,14 +1,13 @@ -use crate::entities::{FieldChangesetParams, FieldType}; -use crate::services::field::{select_option_operation, SelectOptionPB}; +use crate::services::field::{MultiSelectTypeOptionPB, SingleSelectTypeOptionPB}; use crate::services::grid_editor::GridRevisionEditor; use flowy_error::FlowyResult; -use flowy_grid_data_model::revision::{FieldRevision, TypeOptionDataDeserializer, TypeOptionDataFormat}; +use flowy_grid_data_model::revision::{TypeOptionDataDeserializer, TypeOptionDataFormat}; use std::sync::Arc; -pub async fn edit_field( +pub async fn edit_field_type_option( field_id: &str, editor: Arc, - action: impl FnOnce(&mut T) -> bool, + action: impl FnOnce(&mut T), ) -> FlowyResult<()> where T: TypeOptionDataDeserializer + TypeOptionDataFormat, @@ -19,29 +18,28 @@ where }; if let Some(mut type_option) = get_type_option.await { - if action(&mut type_option) { - let changeset = FieldChangesetParams { ..Default::default() }; - let _ = editor.update_field(changeset).await?; - } + action(&mut type_option); + let bytes = type_option.protobuf_bytes().to_vec(); + let _ = editor + .update_field_type_option(&editor.grid_id, field_id, bytes) + .await?; } Ok(()) } -pub fn insert_single_select_option(field_rev: &mut FieldRevision, options: Vec) -> FlowyResult<()> { - if options.is_empty() { - return Ok(()); - } - let mut type_option = select_option_operation(field_rev)?; - options.into_iter().for_each(|option| type_option.insert_option(option)); - Ok(()) +pub async fn edit_single_select_type_option( + field_id: &str, + editor: Arc, + action: impl FnOnce(&mut SingleSelectTypeOptionPB), +) -> FlowyResult<()> { + edit_field_type_option(field_id, editor, action).await } -pub fn insert_multi_select_option(field_rev: &mut FieldRevision, options: Vec) -> FlowyResult<()> { - if options.is_empty() { - return Ok(()); - } - let mut type_option = select_option_operation(field_rev)?; - options.into_iter().for_each(|option| type_option.insert_option(option)); - Ok(()) +pub async fn edit_multi_select_type_option( + field_id: &str, + editor: Arc, + action: impl FnOnce(&mut MultiSelectTypeOptionPB), +) -> FlowyResult<()> { + edit_field_type_option(field_id, editor, action).await } diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs index 11e8cb139f..5b8d4e0d91 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs @@ -212,7 +212,8 @@ impl GridRevisionEditor { } pub async fn group_field(&self, field_id: &str) -> FlowyResult<()> { - todo!() + let _ = self.view_manager.group_by_field(field_id).await?; + Ok(()) } pub async fn switch_to_field_type(&self, field_id: &str, field_type: &FieldType) -> FlowyResult<()> { diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs index bfe752ec12..70db181f59 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs @@ -7,7 +7,8 @@ use crate::entities::{ use crate::services::grid_editor_task::GridServiceTaskScheduler; use crate::services::grid_view_manager::{GridViewFieldDelegate, GridViewRowDelegate}; use crate::services::group::{ - make_group_controller, GroupConfigurationReader, GroupConfigurationWriter, GroupController, MoveGroupRowContext, + find_group_field, make_group_controller, GroupConfigurationReader, GroupConfigurationWriter, GroupController, + MoveGroupRowContext, }; use flowy_error::{FlowyError, FlowyResult}; use flowy_grid_data_model::revision::{ @@ -34,7 +35,6 @@ pub struct GridViewRevisionEditor { group_controller: Arc>>, scheduler: Arc, } - impl GridViewRevisionEditor { #[tracing::instrument(level = "trace", skip_all, err)] pub(crate) async fn new( @@ -52,25 +52,15 @@ impl GridViewRevisionEditor { let view_revision_pad = rev_manager.load::(Some(cloud)).await?; let pad = Arc::new(RwLock::new(view_revision_pad)); let rev_manager = Arc::new(rev_manager); - - // Load group - let configuration_reader = GroupConfigurationReaderImpl(pad.clone()); - let configuration_writer = GroupConfigurationWriterImpl { - user_id: user_id.to_owned(), - rev_manager: rev_manager.clone(), - view_pad: pad.clone(), - }; - let field_revs = field_delegate.get_field_revs().await; - let row_revs = row_delegate.gv_row_revs().await; - let group_controller = make_group_controller( + let group_controller = new_group_controller( + user_id.to_owned(), view_id.clone(), - field_revs, - row_revs, - configuration_reader, - configuration_writer, + pad.clone(), + rev_manager.clone(), + field_delegate.clone(), + row_delegate.clone(), ) .await?; - let user_id = user_id.to_owned(); Ok(Self { pad, @@ -258,6 +248,37 @@ impl GridViewRevisionEditor { Ok(()) } + pub(crate) async fn group_by_field(&self, field_id: &str) -> FlowyResult<()> { + if let Some(field_rev) = self.field_delegate.get_field_rev(field_id).await { + let new_group_controller = new_group_controller_with_field_rev( + self.user_id.clone(), + self.view_id.clone(), + self.pad.clone(), + self.rev_manager.clone(), + field_rev, + self.row_delegate.clone(), + ) + .await?; + + let new_groups = new_group_controller.groups().into_iter().map(GroupPB::from).collect(); + + *self.group_controller.write().await = new_group_controller; + let changeset = GroupViewChangesetPB { + view_id: self.view_id.clone(), + new_groups, + ..Default::default() + }; + + debug_assert!(!changeset.is_empty()); + if !changeset.is_empty() { + send_dart_notification(&changeset.view_id, GridNotification::DidGroupByNewField) + .payload(changeset) + .send(); + } + } + Ok(()) + } + pub async fn notify_did_update_group(&self, changeset: GroupChangesetPB) { send_dart_notification(&changeset.group_id, GridNotification::DidUpdateGroup) .payload(changeset) @@ -314,6 +335,48 @@ impl GridViewRevisionEditor { } } } +async fn new_group_controller( + user_id: String, + view_id: String, + pad: Arc>, + rev_manager: Arc, + field_delegate: Arc, + row_delegate: Arc, +) -> FlowyResult> { + let configuration_reader = GroupConfigurationReaderImpl(pad.clone()); + let field_revs = field_delegate.get_field_revs().await; + // Read the group field or find a new group field + let field_rev = configuration_reader + .get_configuration() + .await + .and_then(|configuration| { + field_revs + .iter() + .find(|field_rev| field_rev.id == configuration.field_id) + .cloned() + }) + .unwrap_or_else(|| find_group_field(&field_revs).unwrap()); + + new_group_controller_with_field_rev(user_id, view_id, pad, rev_manager, field_rev, row_delegate).await +} + +async fn new_group_controller_with_field_rev( + user_id: String, + view_id: String, + pad: Arc>, + rev_manager: Arc, + field_rev: Arc, + row_delegate: Arc, +) -> FlowyResult> { + let configuration_reader = GroupConfigurationReaderImpl(pad.clone()); + let configuration_writer = GroupConfigurationWriterImpl { + user_id, + rev_manager, + view_pad: pad, + }; + let row_revs = row_delegate.gv_row_revs().await; + make_group_controller(view_id, field_rev, row_revs, configuration_reader, configuration_writer).await +} async fn apply_change( user_id: &str, @@ -353,10 +416,10 @@ impl RevisionObjectBuilder for GridViewRevisionPadBuilder { struct GroupConfigurationReaderImpl(Arc>); impl GroupConfigurationReader for GroupConfigurationReaderImpl { - fn get_configuration(&self, field_rev: Arc) -> AFFuture>> { + fn get_configuration(&self) -> AFFuture>> { let view_pad = self.0.clone(); wrap_future(async move { - let mut groups = view_pad.read().await.groups.get_objects(&field_rev.id, &field_rev.ty)?; + let mut groups = view_pad.read().await.get_all_groups(); if groups.is_empty() { None } else { @@ -411,7 +474,7 @@ pub fn make_grid_setting(view_pad: &GridViewRevisionPad, field_revs: &[Arc FlowyResult<()> { + let view_editor = self.get_default_view_editor().await?; + let _ = view_editor.group_by_field(field_id).await?; + Ok(()) + } + pub(crate) async fn did_update_cell(&self, row_id: &str, _field_id: &str) { self.did_update_row(row_id).await } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs b/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs index da849103a6..196f619290 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs @@ -1,4 +1,4 @@ -use crate::entities::{GroupPB, GroupViewChangesetPB, InsertedGroupPB}; +use crate::entities::{GroupPB, GroupViewChangesetPB}; use crate::services::group::{default_group_configuration, GeneratedGroup, Group}; use flowy_error::{FlowyError, FlowyResult}; use flowy_grid_data_model::revision::{ @@ -12,7 +12,7 @@ use std::marker::PhantomData; use std::sync::Arc; pub trait GroupConfigurationReader: Send + Sync + 'static { - fn get_configuration(&self, field_rev: Arc) -> AFFuture>>; + fn get_configuration(&self) -> AFFuture>>; } pub trait GroupConfigurationWriter: Send + Sync + 'static { @@ -38,8 +38,8 @@ impl std::fmt::Display for GroupContext { } pub struct GroupContext { - view_id: String, - pub configuration: Arc, + pub view_id: String, + configuration: Arc, configuration_content: PhantomData, field_rev: Arc, groups_map: IndexMap, @@ -69,7 +69,7 @@ where rows: vec![], filter_content: "".to_string(), }; - let configuration = match reader.get_configuration(field_rev.clone()).await { + let configuration = match reader.get_configuration().await { None => { let default_configuration = default_group_configuration(&field_rev); writer @@ -133,9 +133,10 @@ where } } - pub(crate) fn init_group_revs( + pub(crate) fn init_groups( &mut self, generated_groups: Vec, + reset: bool, ) -> FlowyResult> { let mut new_groups = vec![]; let mut filter_content_map = HashMap::new(); @@ -149,7 +150,11 @@ where new_group_revs, updated_group_revs: _, deleted_group_revs, - } = merge_groups(&self.configuration.groups, new_groups); + } = if reset { + merge_groups(&[], new_groups) + } else { + merge_groups(&self.configuration.groups, new_groups) + }; let deleted_group_ids = deleted_group_revs .into_iter() @@ -180,7 +185,7 @@ where group_rev.update_with_other(&old_group); // Take the GroupRevision if the name has changed - if is_group_changed(&group_rev, &old_group) { + if is_group_changed(group_rev, &old_group) { old_group.name = group_rev.name.clone(); is_changed = true; configuration.groups.insert(pos, old_group); diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller.rs index f0504c23ef..d2784f0e77 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller.rs @@ -74,7 +74,7 @@ pub trait GroupControllerSharedOperation: Send + Sync { pub struct GenericGroupController { pub field_id: String, pub type_option: Option, - pub configuration: GroupContext, + pub group_ctx: GroupContext, group_action_phantom: PhantomData, cell_parser_phantom: PhantomData

, } @@ -89,12 +89,12 @@ where let field_type_rev = field_rev.ty; let type_option = field_rev.get_type_option::(field_type_rev); let groups = G::generate_groups(&field_rev.id, &configuration, &type_option); - let _ = configuration.init_group_revs(groups)?; + let _ = configuration.init_groups(groups, false)?; Ok(Self { field_id: field_rev.id.clone(), type_option, - configuration, + group_ctx: configuration, group_action_phantom: PhantomData, cell_parser_phantom: PhantomData, }) @@ -107,7 +107,7 @@ where row_rev: &RowRevision, other_group_changesets: &[GroupChangesetPB], ) -> GroupChangesetPB { - let default_group = self.configuration.get_mut_default_group(); + let default_group = self.group_ctx.get_mut_default_group(); // [other_group_inserted_row] contains all the inserted rows except the default group. let other_group_inserted_row = other_group_changesets @@ -182,11 +182,11 @@ where } fn groups(&self) -> Vec { - self.configuration.clone_groups() + self.group_ctx.clone_groups() } fn get_group(&self, group_id: &str) -> Option<(usize, Group)> { - let group = self.configuration.get_group(group_id)?; + let group = self.group_ctx.get_group(group_id)?; Some((group.0, group.1.clone())) } @@ -197,7 +197,7 @@ where let mut grouped_rows: Vec = vec![]; let cell_bytes = decode_any_cell_data(cell_rev.data.clone(), field_rev); let cell_data = cell_bytes.parser::

()?; - for group in self.configuration.concrete_groups() { + for group in self.group_ctx.concrete_groups() { if self.can_group(&group.filter_content, &cell_data) { grouped_rows.push(GroupedRow { row: row_rev.into(), @@ -207,25 +207,25 @@ where } if grouped_rows.is_empty() { - self.configuration.get_mut_default_group().add_row(row_rev.into()); + self.group_ctx.get_mut_default_group().add_row(row_rev.into()); } else { for group_row in grouped_rows { - if let Some(group) = self.configuration.get_mut_group(&group_row.group_id) { + if let Some(group) = self.group_ctx.get_mut_group(&group_row.group_id) { group.add_row(group_row.row); } } } } else { - self.configuration.get_mut_default_group().add_row(row_rev.into()); + self.group_ctx.get_mut_default_group().add_row(row_rev.into()); } } - tracing::Span::current().record("group_result", &format!("{},", self.configuration,).as_str()); + tracing::Span::current().record("group_result", &format!("{},", self.group_ctx,).as_str()); Ok(()) } fn move_group(&mut self, from_group_id: &str, to_group_id: &str) -> FlowyResult<()> { - self.configuration.move_group(from_group_id, to_group_id) + self.group_ctx.move_group(from_group_id, to_group_id) } fn did_update_row( @@ -273,10 +273,9 @@ where } fn did_update_field(&mut self, field_rev: &FieldRevision) -> FlowyResult> { - let field_type_rev = field_rev.ty; - let type_option = field_rev.get_type_option::(field_type_rev); - let groups = G::generate_groups(&field_rev.id, &self.configuration, &type_option); - let changeset = self.configuration.init_group_revs(groups)?; + let type_option = field_rev.get_type_option::(field_rev.ty); + let groups = G::generate_groups(&field_rev.id, &self.group_ctx, &type_option); + let changeset = self.group_ctx.init_groups(groups, false)?; Ok(changeset) } } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/checkbox_controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/checkbox_controller.rs index cfae74ecc3..02ff4cb503 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/checkbox_controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/checkbox_controller.rs @@ -5,7 +5,6 @@ use crate::services::group::configuration::GroupContext; use crate::services::group::controller::{ GenericGroupController, GroupController, GroupGenerator, MoveGroupRowContext, }; -use crate::services::group::entities::Group; use crate::services::group::GeneratedGroup; use flowy_grid_data_model::revision::{CheckboxGroupConfigurationRevision, FieldRevision, GroupRevision, RowRevision}; @@ -54,9 +53,9 @@ impl GroupGenerator for CheckboxGroupGenerator { type TypeOptionType = CheckboxTypeOptionPB; fn generate_groups( - field_id: &str, - group_ctx: &Self::Context, - type_option: &Option, + _field_id: &str, + _group_ctx: &Self::Context, + _type_option: &Option, ) -> Vec { let check_group = GeneratedGroup { group_rev: GroupRevision::new("true".to_string(), CHECK.to_string()), diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/default_controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/default_controller.rs index ff934118ca..4ce5523404 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/default_controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/default_controller.rs @@ -35,46 +35,46 @@ impl GroupControllerSharedOperation for DefaultGroupController { vec![self.group.clone()] } - fn get_group(&self, group_id: &str) -> Option<(usize, Group)> { + fn get_group(&self, _group_id: &str) -> Option<(usize, Group)> { Some((0, self.group.clone())) } - fn fill_groups(&mut self, row_revs: &[Arc], field_rev: &FieldRevision) -> FlowyResult<()> { + fn fill_groups(&mut self, row_revs: &[Arc], _field_rev: &FieldRevision) -> FlowyResult<()> { row_revs.iter().for_each(|row_rev| { self.group.add_row(RowPB::from(row_rev)); }); Ok(()) } - fn move_group(&mut self, from_group_id: &str, to_group_id: &str) -> FlowyResult<()> { + fn move_group(&mut self, _from_group_id: &str, _to_group_id: &str) -> FlowyResult<()> { Ok(()) } fn did_update_row( &mut self, - row_rev: &RowRevision, - field_rev: &FieldRevision, + _row_rev: &RowRevision, + _field_rev: &FieldRevision, ) -> FlowyResult> { todo!() } fn did_delete_row( &mut self, - row_rev: &RowRevision, - field_rev: &FieldRevision, + _row_rev: &RowRevision, + _field_rev: &FieldRevision, ) -> FlowyResult> { todo!() } - fn move_group_row(&mut self, context: MoveGroupRowContext) -> FlowyResult> { + fn move_group_row(&mut self, _context: MoveGroupRowContext) -> FlowyResult> { todo!() } - fn did_update_field(&mut self, field_rev: &FieldRevision) -> FlowyResult> { + fn did_update_field(&mut self, _field_rev: &FieldRevision) -> FlowyResult> { Ok(None) } } impl GroupController for DefaultGroupController { - fn will_create_row(&mut self, row_rev: &mut RowRevision, field_rev: &FieldRevision, group_id: &str) {} + fn will_create_row(&mut self, _row_rev: &mut RowRevision, _field_rev: &FieldRevision, _group_id: &str) {} } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/multi_select_controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/multi_select_controller.rs index 678c53b28d..026843bbcc 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/multi_select_controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/multi_select_controller.rs @@ -7,11 +7,9 @@ use crate::services::group::controller::{ GenericGroupController, GroupController, GroupGenerator, MoveGroupRowContext, }; use crate::services::group::controller_impls::select_option_controller::util::*; -use crate::services::group::entities::Group; + use crate::services::group::GeneratedGroup; -use flowy_grid_data_model::revision::{ - FieldRevision, GroupRevision, RowRevision, SelectOptionGroupConfigurationRevision, -}; +use flowy_grid_data_model::revision::{FieldRevision, RowRevision, SelectOptionGroupConfigurationRevision}; // MultiSelect pub type MultiSelectGroupController = GenericGroupController< @@ -30,7 +28,7 @@ impl GroupAction for MultiSelectGroupController { fn add_row_if_match(&mut self, row_rev: &RowRevision, cell_data: &Self::CellDataType) -> Vec { let mut changesets = vec![]; - self.configuration.iter_mut_groups(|group| { + self.group_ctx.iter_mut_groups(|group| { if let Some(changeset) = add_select_option_row(group, cell_data, row_rev) { changesets.push(changeset); } @@ -40,7 +38,7 @@ impl GroupAction for MultiSelectGroupController { fn remove_row_if_match(&mut self, row_rev: &RowRevision, cell_data: &Self::CellDataType) -> Vec { let mut changesets = vec![]; - self.configuration.iter_mut_groups(|group| { + self.group_ctx.iter_mut_groups(|group| { if let Some(changeset) = remove_select_option_row(group, cell_data, row_rev) { changesets.push(changeset); } @@ -50,7 +48,7 @@ impl GroupAction for MultiSelectGroupController { fn move_row(&mut self, cell_data: &Self::CellDataType, mut context: MoveGroupRowContext) -> Vec { let mut group_changeset = vec![]; - self.configuration.iter_mut_groups(|group| { + self.group_ctx.iter_mut_groups(|group| { if let Some(changeset) = move_select_option_row(group, cell_data, &mut context) { group_changeset.push(changeset); } @@ -61,7 +59,7 @@ impl GroupAction for MultiSelectGroupController { impl GroupController for MultiSelectGroupController { fn will_create_row(&mut self, row_rev: &mut RowRevision, field_rev: &FieldRevision, group_id: &str) { - match self.configuration.get_group(group_id) { + match self.group_ctx.get_group(group_id) { None => tracing::warn!("Can not find the group: {}", group_id), Some((_, group)) => { let cell_rev = insert_select_option_cell(group.id.clone(), field_rev); diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/single_select_controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/single_select_controller.rs index b2bffed4ec..96b686efe3 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/single_select_controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/single_select_controller.rs @@ -10,9 +10,7 @@ use crate::services::group::controller_impls::select_option_controller::util::*; use crate::services::group::entities::Group; use crate::services::group::GeneratedGroup; -use flowy_grid_data_model::revision::{ - FieldRevision, GroupRevision, RowRevision, SelectOptionGroupConfigurationRevision, -}; +use flowy_grid_data_model::revision::{FieldRevision, RowRevision, SelectOptionGroupConfigurationRevision}; // SingleSelect pub type SingleSelectGroupController = GenericGroupController< @@ -30,7 +28,7 @@ impl GroupAction for SingleSelectGroupController { fn add_row_if_match(&mut self, row_rev: &RowRevision, cell_data: &Self::CellDataType) -> Vec { let mut changesets = vec![]; - self.configuration.iter_mut_groups(|group| { + self.group_ctx.iter_mut_groups(|group| { if let Some(changeset) = add_select_option_row(group, cell_data, row_rev) { changesets.push(changeset); } @@ -40,7 +38,7 @@ impl GroupAction for SingleSelectGroupController { fn remove_row_if_match(&mut self, row_rev: &RowRevision, cell_data: &Self::CellDataType) -> Vec { let mut changesets = vec![]; - self.configuration.iter_mut_groups(|group| { + self.group_ctx.iter_mut_groups(|group| { if let Some(changeset) = remove_select_option_row(group, cell_data, row_rev) { changesets.push(changeset); } @@ -50,7 +48,7 @@ impl GroupAction for SingleSelectGroupController { fn move_row(&mut self, cell_data: &Self::CellDataType, mut context: MoveGroupRowContext) -> Vec { let mut group_changeset = vec![]; - self.configuration.iter_mut_groups(|group| { + self.group_ctx.iter_mut_groups(|group| { if let Some(changeset) = move_select_option_row(group, cell_data, &mut context) { group_changeset.push(changeset); } @@ -61,7 +59,7 @@ impl GroupAction for SingleSelectGroupController { impl GroupController for SingleSelectGroupController { fn will_create_row(&mut self, row_rev: &mut RowRevision, field_rev: &FieldRevision, group_id: &str) { - let group: Option<&mut Group> = self.configuration.get_mut_group(group_id); + let group: Option<&mut Group> = self.group_ctx.get_mut_group(group_id); match group { None => {} Some(group) => { diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/util.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/util.rs index c60eec49a5..494cd41197 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/util.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/select_option_controller/util.rs @@ -127,8 +127,8 @@ pub fn move_select_option_row( } pub fn generate_select_option_groups( - field_id: &str, - group_ctx: &SelectOptionGroupContext, + _field_id: &str, + _group_ctx: &SelectOptionGroupContext, options: &[SelectOptionPB], ) -> Vec { let groups = options diff --git a/frontend/rust-lib/flowy-grid/src/services/group/group_util.rs b/frontend/rust-lib/flowy-grid/src/services/group/group_util.rs index 1e2ea0f9d6..50d93396d7 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/group_util.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/group_util.rs @@ -16,7 +16,7 @@ use std::sync::Arc; #[tracing::instrument(level = "trace", skip_all, err)] pub async fn make_group_controller( view_id: String, - field_revs: Vec>, + field_rev: Arc, row_revs: Vec>, configuration_reader: R, configuration_writer: W, @@ -25,11 +25,12 @@ where R: GroupConfigurationReader, W: GroupConfigurationWriter, { - let field_rev = find_group_field(&field_revs).unwrap(); let field_type: FieldType = field_rev.ty.into(); + let mut group_controller: Box; let configuration_reader = Arc::new(configuration_reader); let configuration_writer = Arc::new(configuration_writer); + match field_type { FieldType::SingleSelect => { let configuration = @@ -61,7 +62,7 @@ where Ok(group_controller) } -fn find_group_field(field_revs: &[Arc]) -> Option> { +pub fn find_group_field(field_revs: &[Arc]) -> Option> { let field_rev = field_revs .iter() .find(|field_rev| { diff --git a/frontend/rust-lib/flowy-grid/tests/grid/grid_editor.rs b/frontend/rust-lib/flowy-grid/tests/grid/grid_editor.rs index 78cfc17b26..0325f6f008 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/grid_editor.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/grid_editor.rs @@ -195,6 +195,8 @@ fn make_test_grid() -> BuildGridContext { FieldType::SingleSelect => { row_builder.insert_single_select_cell(|mut options| options.remove(0)) } + FieldType::MultiSelect => row_builder + .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(0)]), FieldType::Checkbox => row_builder.insert_checkbox_cell("true"), _ => "".to_owned(), }; @@ -209,6 +211,8 @@ fn make_test_grid() -> BuildGridContext { FieldType::SingleSelect => { row_builder.insert_single_select_cell(|mut options| options.remove(0)) } + FieldType::MultiSelect => row_builder + .insert_multi_select_cell(|mut options| vec![options.remove(0), options.remove(0)]), FieldType::Checkbox => row_builder.insert_checkbox_cell("true"), _ => "".to_owned(), }; @@ -223,6 +227,9 @@ fn make_test_grid() -> BuildGridContext { FieldType::SingleSelect => { row_builder.insert_single_select_cell(|mut options| options.remove(1)) } + FieldType::MultiSelect => { + row_builder.insert_multi_select_cell(|mut options| vec![options.remove(0)]) + } FieldType::Checkbox => row_builder.insert_checkbox_cell("false"), _ => "".to_owned(), }; diff --git a/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs b/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs index c2f3388c3d..373eabdc88 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs @@ -1,13 +1,13 @@ use crate::grid::grid_editor::GridEditorTest; use flowy_grid::entities::{ - CreateRowParams, FieldChangesetParams, FieldType, GridLayout, GroupPB, MoveGroupParams, MoveGroupRowParams, RowPB, + CreateRowParams, FieldType, GridLayout, GroupPB, MoveGroupParams, MoveGroupRowParams, RowPB, }; use flowy_grid::services::cell::{delete_select_option_cell, insert_select_option_cell}; -use flowy_grid::services::field::{select_option_operation, SelectOptionOperation}; +use flowy_grid::services::field::{ + edit_single_select_type_option, SelectOptionOperation, SelectOptionPB, SingleSelectTypeOptionPB, +}; use flowy_grid_data_model::revision::{FieldRevision, RowChangeset}; use std::sync::Arc; -use std::time::Duration; -use tokio::time::interval; pub enum GroupScript { AssertGroupRowCount { @@ -46,10 +46,10 @@ pub enum GroupScript { from_group_index: usize, to_group_index: usize, }, - UpdateField { - changeset: FieldChangesetParams, + UpdateSingleSelectOption { + inserted_options: Vec, }, - GroupField { + GroupByField { field_id: String, }, } @@ -179,12 +179,15 @@ impl GridGroupTest { assert_eq!(group.group_id, group_pb.group_id); assert_eq!(group.desc, group_pb.desc); } - GroupScript::UpdateField { changeset } => { - self.editor.update_field(changeset).await.unwrap(); - let mut interval = interval(Duration::from_millis(130)); - interval.tick().await; + GroupScript::UpdateSingleSelectOption { inserted_options } => { + self.edit_single_select_type_option(|type_option| { + for inserted_option in inserted_options { + type_option.insert_option(inserted_option); + } + }) + .await; } - GroupScript::GroupField { field_id } => { + GroupScript::GroupByField { field_id } => { self.editor.group_field(&field_id).await.unwrap(); } } @@ -200,6 +203,7 @@ impl GridGroupTest { groups.rows.get(row_index).unwrap().clone() } + #[allow(dead_code)] pub async fn get_multi_select_field(&self) -> Arc { let field = self .inner @@ -211,7 +215,7 @@ impl GridGroupTest { }) .unwrap() .clone(); - return field; + field } pub async fn get_single_select_field(&self) -> Arc { @@ -226,14 +230,11 @@ impl GridGroupTest { .clone() } - pub async fn edit_single_select_type_option(&self, f: impl FnOnce(Box)) { + pub async fn edit_single_select_type_option(&self, action: impl FnOnce(&mut SingleSelectTypeOptionPB)) { let single_select = self.get_single_select_field().await; - let mut field_rev = self.editor.get_field_rev(&single_select.id).await.unwrap(); - let mut_field_rev = Arc::make_mut(&mut field_rev); - let mut type_option = select_option_operation(mut_field_rev)?; - f(type_option); - mut_field_rev.insert_type_option(&*type_option); - let _ = self.editor.replace_field(field_rev).await?; + edit_single_select_type_option(&single_select.id, self.editor.clone(), action) + .await + .unwrap(); } } diff --git a/frontend/rust-lib/flowy-grid/tests/grid/group_test/test.rs b/frontend/rust-lib/flowy-grid/tests/grid/group_test/test.rs index 760f39b2ac..5926f8c022 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/group_test/test.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/group_test/test.rs @@ -1,6 +1,7 @@ use crate::grid::group_test::script::GridGroupTest; use crate::grid::group_test::script::GroupScript::*; -use flowy_grid::entities::FieldChangesetParams; + +use flowy_grid::services::field::SelectOptionPB; #[tokio::test] async fn group_init_test() { @@ -370,32 +371,41 @@ async fn group_move_group_test() { } #[tokio::test] -async fn group_update_field_test() { +async fn group_insert_single_select_option_test() { let mut test = GridGroupTest::new().await; - let group = test.group_at_index(0).await; - let changeset = FieldChangesetParams { - field_id: group.field_id.clone(), - grid_id: test.grid_id.clone(), - name: Some("ABC".to_string()), - ..Default::default() - }; - - // group.desc = "ABC".to_string(); + let new_option_name = "New option"; let scripts = vec![ - UpdateField { changeset }, - AssertGroup { - group_index: 0, - expected_group: group, + AssertGroupCount(4), + UpdateSingleSelectOption { + inserted_options: vec![SelectOptionPB::new(new_option_name)], }, + AssertGroupCount(5), + ]; + test.run_scripts(scripts).await; + + // the group at index 4 is the default_group, so the new insert group will be the + // index 3. + let group_3 = test.group_at_index(3).await; + assert_eq!(group_3.desc, new_option_name); +} + +#[tokio::test] +async fn group_group_by_other_field() { + let mut test = GridGroupTest::new().await; + let multi_select_field = test.get_multi_select_field().await; + let scripts = vec![ + GroupByField { + field_id: multi_select_field.id.clone(), + }, + AssertGroupRowCount { + group_index: 0, + row_count: 3, + }, + AssertGroupRowCount { + group_index: 1, + row_count: 2, + }, + AssertGroupCount(4), ]; test.run_scripts(scripts).await; } - -// #[tokio::test] -// async fn group_multi_select_field_test() { -// let mut test = GridGroupTest::new().await; -// let multi_select_field = test.get_multi_select_field().await; -// -// let scripts = vec![]; -// test.run_scripts(scripts).await; -// } diff --git a/shared-lib/flowy-grid-data-model/src/revision/grid_setting_rev.rs b/shared-lib/flowy-grid-data-model/src/revision/grid_setting_rev.rs index 1f52ae93e2..996b5abcba 100644 --- a/shared-lib/flowy-grid-data-model/src/revision/grid_setting_rev.rs +++ b/shared-lib/flowy-grid-data-model/src/revision/grid_setting_rev.rs @@ -60,7 +60,7 @@ where .cloned() } - pub fn get_all_objects(&self, field_revs: &[Arc]) -> Option>>> { + pub fn get_objects_by_field_revs(&self, field_revs: &[Arc]) -> Option>>> { // Get the objects according to the FieldType, so we need iterate the field_revs. let objects_by_field_id = field_revs .iter() @@ -76,6 +76,10 @@ where Some(objects_by_field_id) } + pub fn get_all_objects(&self) -> Vec> { + self.inner.values().map(|map| map.all_objects()).flatten().collect() + } + /// add object to the end of the list pub fn add_object(&mut self, field_id: &str, field_type: &FieldTypeRevision, object: T) { let object_rev_map = self @@ -111,6 +115,10 @@ where pub fn new() -> Self { ObjectIndexMap::default() } + + pub fn all_objects(&self) -> Vec> { + self.object_by_field_type.values().cloned().flatten().collect() + } } impl std::ops::Deref for ObjectIndexMap diff --git a/shared-lib/flowy-sync/src/client_grid/view_revision_pad.rs b/shared-lib/flowy-sync/src/client_grid/view_revision_pad.rs index ddc9c6e05a..e836834265 100644 --- a/shared-lib/flowy-sync/src/client_grid/view_revision_pad.rs +++ b/shared-lib/flowy-sync/src/client_grid/view_revision_pad.rs @@ -48,8 +48,12 @@ impl GridViewRevisionPad { Self::from_delta(delta) } - pub fn get_all_groups(&self, field_revs: &[Arc]) -> Option { - self.groups.get_all_objects(field_revs) + pub fn get_groups_by_field_revs(&self, field_revs: &[Arc]) -> Option { + self.groups.get_objects_by_field_revs(field_revs) + } + + pub fn get_all_groups(&self) -> Vec> { + self.groups.get_all_objects() } #[tracing::instrument(level = "trace", skip_all, err)] @@ -111,7 +115,7 @@ impl GridViewRevisionPad { } pub fn get_all_filters(&self, field_revs: &[Arc]) -> Option { - self.filters.get_all_objects(field_revs) + self.filters.get_objects_by_field_revs(field_revs) } pub fn get_filters( diff --git a/shared-lib/lib-ot/src/core/document/document_operation.rs b/shared-lib/lib-ot/src/core/document/document_operation.rs index 4d9d3617eb..29bfdcc04f 100644 --- a/shared-lib/lib-ot/src/core/document/document_operation.rs +++ b/shared-lib/lib-ot/src/core/document/document_operation.rs @@ -178,7 +178,7 @@ mod tests { node_type: "text".into(), attributes: NodeAttributes::new(), delta: None, - children: vec![Box::new(NodeSubTree::new("text".into()))], + children: vec![Box::new(NodeSubTree::new("text"))], })], }; let result = serde_json::to_string(&insert).unwrap(); diff --git a/shared-lib/lib-ot/src/core/document/mod.rs b/shared-lib/lib-ot/src/core/document/mod.rs index b019cb0f71..2dde3ef3e9 100644 --- a/shared-lib/lib-ot/src/core/document/mod.rs +++ b/shared-lib/lib-ot/src/core/document/mod.rs @@ -1,3 +1,4 @@ +#![allow(clippy::module_inception)] mod attributes; mod document; mod document_operation; diff --git a/shared-lib/lib-ot/tests/main.rs b/shared-lib/lib-ot/tests/main.rs index 31e7748b3a..ae7080656e 100644 --- a/shared-lib/lib-ot/tests/main.rs +++ b/shared-lib/lib-ot/tests/main.rs @@ -13,7 +13,7 @@ fn test_documents() { let mut document = DocumentTree::new(); let transaction = { let mut tb = TransactionBuilder::new(&document); - tb.insert_nodes_at_path(&vec![0].into(), &vec![Box::new(NodeSubTree::new("text"))]); + tb.insert_nodes_at_path(&vec![0].into(), &[Box::new(NodeSubTree::new("text"))]); tb.finalize() }; document.apply(transaction).unwrap(); @@ -47,16 +47,16 @@ fn test_inserts_nodes() { let mut document = DocumentTree::new(); let transaction = { let mut tb = TransactionBuilder::new(&document); - tb.insert_nodes_at_path(&vec![0].into(), &vec![Box::new(NodeSubTree::new("text"))]); - tb.insert_nodes_at_path(&vec![1].into(), &vec![Box::new(NodeSubTree::new("text"))]); - tb.insert_nodes_at_path(&vec![2].into(), &vec![Box::new(NodeSubTree::new("text"))]); + tb.insert_nodes_at_path(&vec![0].into(), &[Box::new(NodeSubTree::new("text"))]); + tb.insert_nodes_at_path(&vec![1].into(), &[Box::new(NodeSubTree::new("text"))]); + tb.insert_nodes_at_path(&vec![2].into(), &[Box::new(NodeSubTree::new("text"))]); tb.finalize() }; document.apply(transaction).unwrap(); let transaction = { let mut tb = TransactionBuilder::new(&document); - tb.insert_nodes_at_path(&vec![1].into(), &vec![Box::new(NodeSubTree::new("text"))]); + tb.insert_nodes_at_path(&vec![1].into(), &[Box::new(NodeSubTree::new("text"))]); tb.finalize() }; document.apply(transaction).unwrap(); @@ -69,11 +69,11 @@ fn test_inserts_subtrees() { let mut tb = TransactionBuilder::new(&document); tb.insert_nodes_at_path( &vec![0].into(), - &vec![Box::new(NodeSubTree { + &[Box::new(NodeSubTree { node_type: "text".into(), attributes: NodeAttributes::new(), delta: None, - children: vec![Box::new(NodeSubTree::new("image".into()))], + children: vec![Box::new(NodeSubTree::new("image"))], })], ); tb.finalize() @@ -90,9 +90,9 @@ fn test_update_nodes() { let mut document = DocumentTree::new(); let transaction = { let mut tb = TransactionBuilder::new(&document); - tb.insert_nodes_at_path(&vec![0].into(), &vec![Box::new(NodeSubTree::new("text"))]); - tb.insert_nodes_at_path(&vec![1].into(), &vec![Box::new(NodeSubTree::new("text"))]); - tb.insert_nodes_at_path(&vec![2].into(), &vec![Box::new(NodeSubTree::new("text"))]); + tb.insert_nodes_at_path(&vec![0].into(), &[Box::new(NodeSubTree::new("text"))]); + tb.insert_nodes_at_path(&vec![1].into(), &[Box::new(NodeSubTree::new("text"))]); + tb.insert_nodes_at_path(&vec![2].into(), &[Box::new(NodeSubTree::new("text"))]); tb.finalize() }; document.apply(transaction).unwrap(); @@ -115,9 +115,9 @@ fn test_delete_nodes() { let mut document = DocumentTree::new(); let transaction = { let mut tb = TransactionBuilder::new(&document); - tb.insert_nodes_at_path(&vec![0].into(), &vec![Box::new(NodeSubTree::new("text"))]); - tb.insert_nodes_at_path(&vec![1].into(), &vec![Box::new(NodeSubTree::new("text"))]); - tb.insert_nodes_at_path(&vec![2].into(), &vec![Box::new(NodeSubTree::new("text"))]); + tb.insert_nodes_at_path(&vec![0].into(), &[Box::new(NodeSubTree::new("text"))]); + tb.insert_nodes_at_path(&vec![1].into(), &[Box::new(NodeSubTree::new("text"))]); + tb.insert_nodes_at_path(&vec![2].into(), &[Box::new(NodeSubTree::new("text"))]); tb.finalize() }; document.apply(transaction).unwrap(); @@ -138,8 +138,8 @@ fn test_errors() { let mut document = DocumentTree::new(); let transaction = { let mut tb = TransactionBuilder::new(&document); - tb.insert_nodes_at_path(&vec![0].into(), &vec![Box::new(NodeSubTree::new("text"))]); - tb.insert_nodes_at_path(&vec![100].into(), &vec![Box::new(NodeSubTree::new("text"))]); + tb.insert_nodes_at_path(&vec![0].into(), &[Box::new(NodeSubTree::new("text"))]); + tb.insert_nodes_at_path(&vec![100].into(), &[Box::new(NodeSubTree::new("text"))]); tb.finalize() }; let result = document.apply(transaction); From d2c118ad0266989fa4fd8387d6ae53b1ac08d828 Mon Sep 17 00:00:00 2001 From: "Lucas.Xu" Date: Fri, 2 Sep 2022 21:40:28 +0800 Subject: [PATCH 12/17] chore: set paths in github actions to reduce the ci time --- .github/workflows/dart_lint.yml | 11 +++++++++-- .github/workflows/dart_test.yml | 5 ++++- .github/workflows/rust_lint.yml | 14 +++++++++++--- .github/workflows/rust_test.yml | 15 +++++++++++---- 4 files changed, 35 insertions(+), 10 deletions(-) diff --git a/.github/workflows/dart_lint.yml b/.github/workflows/dart_lint.yml index 251848fb31..30f65cc752 100644 --- a/.github/workflows/dart_lint.yml +++ b/.github/workflows/dart_lint.yml @@ -7,9 +7,16 @@ name: Flutter lint on: push: - branches: [main] + branches: + - "main" + paths: + - "frontend/app_flowy/**" + pull_request: - branches: [main] + branches: + - "main" + paths: + - "frontend/app_flowy/**" env: CARGO_TERM_COLOR: always diff --git a/.github/workflows/dart_test.yml b/.github/workflows/dart_test.yml index 33cbeb1a3a..9171fb6dea 100644 --- a/.github/workflows/dart_test.yml +++ b/.github/workflows/dart_test.yml @@ -4,11 +4,14 @@ on: push: branches: - "main" + paths: + - "frontend/app_flowy/**" pull_request: branches: - "main" - - "feat/flowy_editor" + paths: + - "frontend/app_flowy/**" env: CARGO_TERM_COLOR: always diff --git a/.github/workflows/rust_lint.yml b/.github/workflows/rust_lint.yml index 471654083c..435b1388f2 100644 --- a/.github/workflows/rust_lint.yml +++ b/.github/workflows/rust_lint.yml @@ -2,10 +2,18 @@ name: Rust lint on: push: - branches: [ main ] - pull_request: - branches: [ main ] + branches: + - "main" + paths: + - "frontend/rust-lib/**" + - "shared-lib/**" + pull_request: + branches: + - "main" + paths: + - "frontend/rust-lib/**" + - "shared-lib/**" env: CARGO_TERM_COLOR: always diff --git a/.github/workflows/rust_test.yml b/.github/workflows/rust_test.yml index 30b1f15576..4fb2a2ec0a 100644 --- a/.github/workflows/rust_test.yml +++ b/.github/workflows/rust_test.yml @@ -2,11 +2,18 @@ name: Unit test(Rust) on: push: - branches: - - 'main' + branches: + - "main" + paths: + - "frontend/rust-lib/**" + - "shared-lib/**" + pull_request: - branches: - - 'main' + branches: + - "main" + paths: + - "frontend/rust-lib/**" + - "shared-lib/**" env: CARGO_TERM_COLOR: always From e73f1438f7abd3ea8d512ecf034ae187c027c5cc Mon Sep 17 00:00:00 2001 From: appflowy Date: Fri, 2 Sep 2022 22:13:38 +0800 Subject: [PATCH 13/17] chore: config switch group field UI --- .../presentation/toolbar/board_setting.dart | 5 +-- .../widgets/toolbar/grid_group.dart | 31 +++++++++++++++++-- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart b/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart index 962ea28e15..d981bd6006 100644 --- a/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart +++ b/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart @@ -2,6 +2,7 @@ import 'package:app_flowy/generated/locale_keys.g.dart'; import 'package:app_flowy/plugins/board/application/toolbar/board_setting_bloc.dart'; import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; import 'package:app_flowy/plugins/grid/presentation/layout/sizes.dart'; +import 'package:app_flowy/plugins/grid/presentation/widgets/toolbar/grid_group.dart'; import 'package:app_flowy/plugins/grid/presentation/widgets/toolbar/grid_property.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flowy_infra/image.dart'; @@ -96,8 +97,8 @@ class BoardSettingList extends StatelessWidget { .show(context); break; case BoardSettingAction.groups: - GridPropertyList( - gridId: settingContext.viewId, + GridGroupList( + viewId: settingContext.viewId, fieldCache: settingContext.fieldCache) .show(context); break; diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart index 5ef4ed7f11..6894cc3df1 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart @@ -1,18 +1,33 @@ +import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/presentation/widgets/header/field_type_extension.dart'; +import 'package:flowy_infra/image.dart'; import 'package:flowy_infra/theme.dart'; +import 'package:flowy_infra_ui/style_widget/button.dart'; +import 'package:flowy_infra_ui/style_widget/text.dart'; +import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class GridGroupList extends StatelessWidget { - const GridGroupList({Key? key}) : super(key: key); + final String viewId; + final GridFieldCache fieldCache; + const GridGroupList({ + required this.viewId, + required this.fieldCache, + Key? key, + }) : super(key: key); @override Widget build(BuildContext context) { return Container(); } + + void show(BuildContext context) {} } class _GridGroupCell extends StatelessWidget { - const _GridGroupCell({Key? key}) : super(key: key); + final FieldPB field; + const _GridGroupCell({required this.field, Key? key}) : super(key: key); @override Widget build(BuildContext context) { @@ -22,6 +37,16 @@ class _GridGroupCell extends StatelessWidget { // ? svgWidget('home/show', color: theme.iconColor) // : svgWidget('home/hide', color: theme.iconColor); - return Container(); + // Padding( + // padding: const EdgeInsets.only(right: 6), + // child: svgWidget("grid/checkmark"), + // ), + + return FlowyButton( + text: FlowyText.medium(field.name, fontSize: 12), + hoverColor: theme.hover, + leftIcon: svgWidget(field.fieldType.iconName(), color: theme.iconColor), + onTap: () {}, + ); } } From b3e5bb00ace27ef38cbd4366c0ef2fd342430202 Mon Sep 17 00:00:00 2001 From: appflowy Date: Fri, 2 Sep 2022 22:13:38 +0800 Subject: [PATCH 14/17] chore: config switch group field UI --- .../grid/application/setting/group_bloc.dart | 87 +++++++++++++++++++ .../widgets/toolbar/grid_group.dart | 38 +++++++- .../src/entities/setting_entities.rs | 2 +- .../src/services/grid_view_editor.rs | 12 +-- 4 files changed, 130 insertions(+), 9 deletions(-) create mode 100644 frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart diff --git a/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart new file mode 100644 index 0000000000..80ab7f91f2 --- /dev/null +++ b/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart @@ -0,0 +1,87 @@ +import 'package:app_flowy/plugins/grid/application/field/field_service.dart'; +import 'package:flowy_sdk/log.dart'; +import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'dart:async'; + +import '../field/field_cache.dart'; + +part 'group_bloc.freezed.dart'; + +class GridGroupBloc extends Bloc { + final GridFieldCache _fieldCache; + Function(List)? _onFieldsFn; + + GridGroupBloc({required String gridId, required GridFieldCache fieldCache}) + : _fieldCache = fieldCache, + super(GridGroupState.initial(gridId, fieldCache.fields)) { + on( + (event, emit) async { + await event.map( + initial: (_Initial value) { + _startListening(); + }, + setFieldVisibility: (_SetFieldVisibility value) async { + final fieldService = + FieldService(gridId: gridId, fieldId: value.fieldId); + final result = + await fieldService.updateField(visibility: value.visibility); + result.fold( + (l) => null, + (err) => Log.error(err), + ); + }, + didReceiveFieldUpdate: (_DidReceiveFieldUpdate value) { + emit(state.copyWith(fields: value.fields)); + }, + moveField: (_MoveField value) { + // + }, + ); + }, + ); + } + + @override + Future close() async { + if (_onFieldsFn != null) { + _fieldCache.removeListener(onFieldsListener: _onFieldsFn!); + _onFieldsFn = null; + } + return super.close(); + } + + void _startListening() { + _onFieldsFn = (fields) => add(GridGroupEvent.didReceiveFieldUpdate(fields)); + _fieldCache.addListener( + onFields: _onFieldsFn, + listenWhen: () => !isClosed, + ); + } +} + +@freezed +class GridGroupEvent with _$GridGroupEvent { + const factory GridGroupEvent.initial() = _Initial; + const factory GridGroupEvent.setFieldVisibility( + String fieldId, bool visibility) = _SetFieldVisibility; + const factory GridGroupEvent.didReceiveFieldUpdate(List fields) = + _DidReceiveFieldUpdate; + const factory GridGroupEvent.moveField(int fromIndex, int toIndex) = + _MoveField; +} + +@freezed +class GridGroupState with _$GridGroupState { + const factory GridGroupState({ + required String gridId, + required List fields, + }) = _GridGroupState; + + factory GridGroupState.initial(String gridId, List fields) => + GridGroupState( + gridId: gridId, + fields: fields, + ); +} diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart index 6894cc3df1..291413f096 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart @@ -1,12 +1,22 @@ import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +<<<<<<< HEAD +======= +import 'package:app_flowy/plugins/grid/presentation/layout/sizes.dart'; +>>>>>>> 0e1004785 (chore: config switch group field UI) import 'package:app_flowy/plugins/grid/presentation/widgets/header/field_type_extension.dart'; import 'package:flowy_infra/image.dart'; import 'package:flowy_infra/theme.dart'; import 'package:flowy_infra_ui/style_widget/button.dart'; import 'package:flowy_infra_ui/style_widget/text.dart'; +<<<<<<< HEAD +======= +import 'package:flowy_infra_ui/widget/spacing.dart'; +>>>>>>> 0e1004785 (chore: config switch group field UI) import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; +import 'package:app_flowy/plugins/grid/application/setting/group_bloc.dart'; + +import 'package:flutter_bloc/flutter_bloc.dart'; class GridGroupList extends StatelessWidget { final String viewId; @@ -19,7 +29,31 @@ class GridGroupList extends StatelessWidget { @override Widget build(BuildContext context) { - return Container(); + return BlocProvider( + create: (context) => GridGroupBloc(gridId: viewId, fieldCache: fieldCache) + ..add(const GridGroupEvent.initial()), + child: BlocBuilder( + builder: (context, state) { + final cells = state.fields.map((field) { + return _GridGroupCell( + field: field, + key: ValueKey(field.id), + ); + }).toList(); + + return ListView.separated( + shrinkWrap: true, + itemCount: cells.length, + itemBuilder: (BuildContext context, int index) { + return cells[index]; + }, + separatorBuilder: (BuildContext context, int index) { + return VSpace(GridSize.typeOptionSeparatorHeight); + }, + ); + }, + ), + ); } void show(BuildContext context) {} diff --git a/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs b/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs index 9c02a2c692..e0397a2673 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs @@ -25,7 +25,7 @@ pub struct GridSettingPB { pub filter_configuration_by_field_id: HashMap, #[pb(index = 4)] - pub group_configuration_by_field_id: HashMap, + pub group_configurations: RepeatedGridGroupConfigurationPB, } #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs index 70db181f59..b97e680f3a 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs @@ -464,7 +464,7 @@ impl GroupConfigurationWriter for GroupConfigurationWriterImpl { pub fn make_grid_setting(view_pad: &GridViewRevisionPad, field_revs: &[Arc]) -> GridSettingPB { let current_layout_type: GridLayout = view_pad.layout.clone().into(); - let filters_by_field_id = view_pad + let filter_configuration_by_field_id = view_pad .get_all_filters(field_revs) .map(|filters_by_field_id| { filters_by_field_id @@ -473,21 +473,21 @@ pub fn make_grid_setting(view_pad: &GridViewRevisionPad, field_revs: &[Arc>() }) .unwrap_or_default(); - let groups_by_field_id = view_pad + let group_configurations = view_pad .get_groups_by_field_revs(field_revs) .map(|groups_by_field_id| { groups_by_field_id .into_iter() - .map(|(k, v)| (k, v.into())) - .collect::>() + .map(|(_, v)| v.into()) + .collect::() }) .unwrap_or_default(); GridSettingPB { layouts: GridLayoutPB::all(), current_layout_type, - filter_configuration_by_field_id: filters_by_field_id, - group_configuration_by_field_id: groups_by_field_id, + filter_configuration_by_field_id, + group_configurations, } } From f57ba8b9a82c70def50b5eed5b211c22b9e21090 Mon Sep 17 00:00:00 2001 From: appflowy Date: Sat, 3 Sep 2022 16:47:58 +0800 Subject: [PATCH 15/17] chore: read setting --- ...text_builder.dart => cell_controller.dart} | 0 .../cell/cell_service/cell_service.dart | 2 +- .../grid/application/field/field_cache.dart | 6 +- .../grid/application/setting/group_bloc.dart | 14 ++++- .../setting/setting_controller.dart | 58 +++++++++++++++++++ .../application/setting/setting_listener.dart | 47 +++++++++++++++ .../application/setting/setting_service.dart | 16 +++++ .../widgets/toolbar/grid_group.dart | 12 ++-- .../flowy-grid/src/dart_notification.rs | 1 + .../src/entities/filter_entities/util.rs | 16 ++--- .../src/entities/setting_entities.rs | 6 +- .../flowy-grid/src/services/grid_editor.rs | 2 +- .../src/services/grid_view_editor.rs | 37 +++++++----- .../src/services/grid_view_manager.rs | 4 +- .../flowy-grid/tests/grid/grid_editor.rs | 2 +- 15 files changed, 178 insertions(+), 45 deletions(-) rename frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/{context_builder.dart => cell_controller.dart} (100%) create mode 100644 frontend/app_flowy/lib/plugins/grid/application/setting/setting_controller.dart create mode 100644 frontend/app_flowy/lib/plugins/grid/application/setting/setting_listener.dart create mode 100644 frontend/app_flowy/lib/plugins/grid/application/setting/setting_service.dart diff --git a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/context_builder.dart b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_controller.dart similarity index 100% rename from frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/context_builder.dart rename to frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_controller.dart diff --git a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_service.dart b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_service.dart index 48e82cc906..eb64543167 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_service.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_service.dart @@ -21,7 +21,7 @@ import '../../field/type_option/type_option_context.dart'; import 'cell_field_notifier.dart'; part 'cell_service.freezed.dart'; part 'cell_data_loader.dart'; -part 'context_builder.dart'; +part 'cell_controller.dart'; part 'cell_cache.dart'; part 'cell_data_persistence.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/field_cache.dart b/frontend/app_flowy/lib/plugins/grid/application/field/field_cache.dart index e521f097ee..b83c261626 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/field_cache.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/field_cache.dart @@ -52,9 +52,6 @@ class GridFieldCache { _fieldNotifier = null; } - UnmodifiableListView get unmodifiableFields => - UnmodifiableListView(_fieldNotifier?.fields ?? []); - List get fields => [..._fieldNotifier?.fields ?? []]; set fields(List fields) { @@ -158,7 +155,8 @@ class GridRowFieldNotifierImpl extends IGridRowFieldNotifier { GridRowFieldNotifierImpl(GridFieldCache cache) : _cache = cache; @override - UnmodifiableListView get fields => _cache.unmodifiableFields; + UnmodifiableListView get fields => + UnmodifiableListView(_cache.fields); @override void onRowFieldsChanged(VoidCallback callback) { diff --git a/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart index 80ab7f91f2..691371bd8a 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart @@ -6,16 +6,19 @@ import 'package:freezed_annotation/freezed_annotation.dart'; import 'dart:async'; import '../field/field_cache.dart'; +import 'setting_controller.dart'; part 'group_bloc.freezed.dart'; class GridGroupBloc extends Bloc { final GridFieldCache _fieldCache; + final SettingController _settingController; Function(List)? _onFieldsFn; - GridGroupBloc({required String gridId, required GridFieldCache fieldCache}) + GridGroupBloc({required String viewId, required GridFieldCache fieldCache}) : _fieldCache = fieldCache, - super(GridGroupState.initial(gridId, fieldCache.fields)) { + _settingController = SettingController(viewId: viewId), + super(GridGroupState.initial(viewId, fieldCache.fields)) { on( (event, emit) async { await event.map( @@ -24,7 +27,7 @@ class GridGroupBloc extends Bloc { }, setFieldVisibility: (_SetFieldVisibility value) async { final fieldService = - FieldService(gridId: gridId, fieldId: value.fieldId); + FieldService(gridId: viewId, fieldId: value.fieldId); final result = await fieldService.updateField(visibility: value.visibility); result.fold( @@ -58,6 +61,11 @@ class GridGroupBloc extends Bloc { onFields: _onFieldsFn, listenWhen: () => !isClosed, ); + + _settingController.startListeing( + onSettingUpdated: (setting) {}, + onError: (err) {}, + ); } } diff --git a/frontend/app_flowy/lib/plugins/grid/application/setting/setting_controller.dart b/frontend/app_flowy/lib/plugins/grid/application/setting/setting_controller.dart new file mode 100644 index 0000000000..721e5d35f1 --- /dev/null +++ b/frontend/app_flowy/lib/plugins/grid/application/setting/setting_controller.dart @@ -0,0 +1,58 @@ +import 'package:app_flowy/plugins/grid/application/setting/setting_service.dart'; +import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-grid/setting_entities.pb.dart'; +import 'setting_listener.dart'; + +typedef OnError = void Function(FlowyError); +typedef OnSettingUpdated = void Function(GridSettingPB); + +class SettingController { + final String viewId; + final SettingFFIService _ffiService; + final SettingListener _listener; + OnSettingUpdated? _onSettingUpdated; + OnError? _onError; + GridSettingPB? _setting; + GridSettingPB? get setting => _setting; + + SettingController({ + required this.viewId, + }) : _ffiService = SettingFFIService(viewId: viewId), + _listener = SettingListener(gridId: viewId) { + // Load setting + _ffiService.getSetting().then((result) { + result.fold( + (newSetting) => updateSetting(newSetting), + (err) => _onError?.call(err), + ); + }); + + // Listen on the seting changes + _listener.start(onSettingUpdated: (result) { + result.fold( + (newSetting) => updateSetting(newSetting), + (err) => _onError?.call(err), + ); + }); + } + + void startListeing({ + required OnSettingUpdated onSettingUpdated, + required OnError onError, + }) { + assert(_onSettingUpdated == null, 'Should call once'); + _onSettingUpdated = onSettingUpdated; + _onError = onError; + } + + void updateSetting(GridSettingPB newSetting) { + _setting = newSetting; + _onSettingUpdated?.call(newSetting); + } + + void dispose() { + _onSettingUpdated = null; + _onError = null; + _listener.stop(); + } +} diff --git a/frontend/app_flowy/lib/plugins/grid/application/setting/setting_listener.dart b/frontend/app_flowy/lib/plugins/grid/application/setting/setting_listener.dart new file mode 100644 index 0000000000..00de48ca78 --- /dev/null +++ b/frontend/app_flowy/lib/plugins/grid/application/setting/setting_listener.dart @@ -0,0 +1,47 @@ +import 'dart:typed_data'; + +import 'package:app_flowy/core/grid_notification.dart'; +import 'package:dartz/dartz.dart'; +import 'package:flowy_infra/notifier.dart'; +import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-grid/dart_notification.pbserver.dart'; +import 'package:flowy_sdk/protobuf/flowy-grid/setting_entities.pb.dart'; + +typedef UpdateSettingNotifiedValue = Either; + +class SettingListener { + final String gridId; + GridNotificationListener? _listener; + PublishNotifier? _updateSettingNotifier = + PublishNotifier(); + + SettingListener({required this.gridId}); + + void start({ + required void Function(UpdateSettingNotifiedValue) onSettingUpdated, + }) { + _updateSettingNotifier?.addPublishListener(onSettingUpdated); + _listener = GridNotificationListener(objectId: gridId, handler: _handler); + } + + void _handler(GridNotification ty, Either result) { + switch (ty) { + case GridNotification.DidUpdateGridSetting: + result.fold( + (payload) => _updateSettingNotifier?.value = left( + GridSettingPB.fromBuffer(payload), + ), + (error) => _updateSettingNotifier?.value = right(error), + ); + break; + default: + break; + } + } + + Future stop() async { + await _listener?.stop(); + _updateSettingNotifier?.dispose(); + _updateSettingNotifier = null; + } +} diff --git a/frontend/app_flowy/lib/plugins/grid/application/setting/setting_service.dart b/frontend/app_flowy/lib/plugins/grid/application/setting/setting_service.dart new file mode 100644 index 0000000000..8d3774ec1c --- /dev/null +++ b/frontend/app_flowy/lib/plugins/grid/application/setting/setting_service.dart @@ -0,0 +1,16 @@ +import 'package:dartz/dartz.dart'; +import 'package:flowy_sdk/dispatch/dispatch.dart'; +import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-grid/grid_entities.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-grid/setting_entities.pb.dart'; + +class SettingFFIService { + final String viewId; + + const SettingFFIService({required this.viewId}); + + Future> getSetting() { + final payload = GridIdPB.create()..value = viewId; + return GridEventGetGridSetting(payload).send(); + } +} diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart index 291413f096..770e16e2bf 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart @@ -1,17 +1,11 @@ import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; -<<<<<<< HEAD -======= import 'package:app_flowy/plugins/grid/presentation/layout/sizes.dart'; ->>>>>>> 0e1004785 (chore: config switch group field UI) import 'package:app_flowy/plugins/grid/presentation/widgets/header/field_type_extension.dart'; import 'package:flowy_infra/image.dart'; import 'package:flowy_infra/theme.dart'; import 'package:flowy_infra_ui/style_widget/button.dart'; import 'package:flowy_infra_ui/style_widget/text.dart'; -<<<<<<< HEAD -======= import 'package:flowy_infra_ui/widget/spacing.dart'; ->>>>>>> 0e1004785 (chore: config switch group field UI) import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flutter/material.dart'; import 'package:app_flowy/plugins/grid/application/setting/group_bloc.dart'; @@ -30,8 +24,10 @@ class GridGroupList extends StatelessWidget { @override Widget build(BuildContext context) { return BlocProvider( - create: (context) => GridGroupBloc(gridId: viewId, fieldCache: fieldCache) - ..add(const GridGroupEvent.initial()), + create: (context) => GridGroupBloc( + viewId: viewId, + fieldCache: fieldCache, + )..add(const GridGroupEvent.initial()), child: BlocBuilder( builder: (context, state) { final cells = state.fields.map((field) { diff --git a/frontend/rust-lib/flowy-grid/src/dart_notification.rs b/frontend/rust-lib/flowy-grid/src/dart_notification.rs index ca0f0aa681..8d7ec2ba36 100644 --- a/frontend/rust-lib/flowy-grid/src/dart_notification.rs +++ b/frontend/rust-lib/flowy-grid/src/dart_notification.rs @@ -14,6 +14,7 @@ pub enum GridNotification { DidUpdateGroupView = 60, DidUpdateGroup = 61, DidGroupByNewField = 62, + DidUpdateGridSetting = 70, } impl std::default::Default for GridNotification { diff --git a/frontend/rust-lib/flowy-grid/src/entities/filter_entities/util.rs b/frontend/rust-lib/flowy-grid/src/entities/filter_entities/util.rs index 7dff00bf56..f8588944e7 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/filter_entities/util.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/filter_entities/util.rs @@ -10,33 +10,33 @@ use std::convert::TryInto; use std::sync::Arc; #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] -pub struct GridFilterConfiguration { +pub struct GridFilterConfigurationPB { #[pb(index = 1)] pub id: String, } #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] -pub struct RepeatedGridConfigurationFilterPB { +pub struct RepeatedGridFilterConfigurationPB { #[pb(index = 1)] - pub items: Vec, + pub items: Vec, } -impl std::convert::From<&FilterConfigurationRevision> for GridFilterConfiguration { +impl std::convert::From<&FilterConfigurationRevision> for GridFilterConfigurationPB { fn from(rev: &FilterConfigurationRevision) -> Self { Self { id: rev.id.clone() } } } -impl std::convert::From>> for RepeatedGridConfigurationFilterPB { +impl std::convert::From>> for RepeatedGridFilterConfigurationPB { fn from(revs: Vec>) -> Self { - RepeatedGridConfigurationFilterPB { + RepeatedGridFilterConfigurationPB { items: revs.into_iter().map(|rev| rev.as_ref().into()).collect(), } } } -impl std::convert::From> for RepeatedGridConfigurationFilterPB { - fn from(items: Vec) -> Self { +impl std::convert::From> for RepeatedGridFilterConfigurationPB { + fn from(items: Vec) -> Self { Self { items } } } diff --git a/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs b/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs index e0397a2673..47efc11861 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs @@ -1,6 +1,6 @@ use crate::entities::{ CreatGroupParams, CreateFilterParams, CreateGridFilterPayloadPB, CreateGridGroupPayloadPB, DeleteFilterParams, - DeleteFilterPayloadPB, DeleteGroupParams, DeleteGroupPayloadPB, RepeatedGridConfigurationFilterPB, + DeleteFilterPayloadPB, DeleteGroupParams, DeleteGroupPayloadPB, RepeatedGridFilterConfigurationPB, RepeatedGridGroupConfigurationPB, }; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; @@ -19,10 +19,10 @@ pub struct GridSettingPB { pub layouts: Vec, #[pb(index = 2)] - pub current_layout_type: GridLayout, + pub layout_type: GridLayout, #[pb(index = 3)] - pub filter_configuration_by_field_id: HashMap, + pub filter_configurations: RepeatedGridFilterConfigurationPB, #[pb(index = 4)] pub group_configurations: RepeatedGridGroupConfigurationPB, diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs index 5b8d4e0d91..2f72f48d33 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs @@ -532,7 +532,7 @@ impl GridRevisionEditor { self.view_manager.get_setting().await } - pub async fn get_grid_filter(&self) -> FlowyResult> { + pub async fn get_grid_filter(&self) -> FlowyResult> { self.view_manager.get_filters().await } diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs index b97e680f3a..71d2fb372a 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs @@ -1,8 +1,8 @@ use crate::dart_notification::{send_dart_notification, GridNotification}; use crate::entities::{ - CreateFilterParams, CreateRowParams, DeleteFilterParams, GridFilterConfiguration, GridLayout, GridLayoutPB, - GridSettingPB, GroupChangesetPB, GroupPB, GroupViewChangesetPB, InsertedGroupPB, InsertedRowPB, MoveGroupParams, - RepeatedGridConfigurationFilterPB, RepeatedGridGroupConfigurationPB, RowPB, + CreateFilterParams, CreateRowParams, DeleteFilterParams, GridFilterConfigurationPB, GridGroupConfigurationPB, + GridLayout, GridLayoutPB, GridSettingPB, GroupChangesetPB, GroupPB, GroupViewChangesetPB, InsertedGroupPB, + InsertedRowPB, MoveGroupParams, RepeatedGridFilterConfigurationPB, RepeatedGridGroupConfigurationPB, RowPB, }; use crate::services::grid_editor_task::GridServiceTaskScheduler; use crate::services::grid_view_manager::{GridViewFieldDelegate, GridViewRowDelegate}; @@ -198,14 +198,14 @@ impl GridViewRevisionEditor { grid_setting } - pub(crate) async fn get_filters(&self) -> Vec { + pub(crate) async fn get_filters(&self) -> Vec { let field_revs = self.field_delegate.get_field_revs().await; match self.pad.read().await.get_all_filters(&field_revs) { None => vec![], Some(filters) => filters .into_values() .flatten() - .map(|filter| GridFilterConfiguration::from(filter.as_ref())) + .map(|filter| GridFilterConfigurationPB::from(filter.as_ref())) .collect(), } } @@ -463,31 +463,40 @@ impl GroupConfigurationWriter for GroupConfigurationWriterImpl { } pub fn make_grid_setting(view_pad: &GridViewRevisionPad, field_revs: &[Arc]) -> GridSettingPB { - let current_layout_type: GridLayout = view_pad.layout.clone().into(); - let filter_configuration_by_field_id = view_pad + let layout_type: GridLayout = view_pad.layout.clone().into(); + let filter_configurations = view_pad .get_all_filters(field_revs) .map(|filters_by_field_id| { filters_by_field_id .into_iter() - .map(|(k, v)| (k, v.into())) - .collect::>() + .map(|(_, v)| { + let repeated_filter: RepeatedGridFilterConfigurationPB = v.into(); + repeated_filter.items + }) + .flatten() + .collect::>() }) .unwrap_or_default(); + let group_configurations = view_pad .get_groups_by_field_revs(field_revs) .map(|groups_by_field_id| { groups_by_field_id .into_iter() - .map(|(_, v)| v.into()) - .collect::() + .map(|(_, v)| { + let repeated_group: RepeatedGridGroupConfigurationPB = v.into(); + repeated_group.items + }) + .flatten() + .collect::>() }) .unwrap_or_default(); GridSettingPB { layouts: GridLayoutPB::all(), - current_layout_type, - filter_configuration_by_field_id, - group_configurations, + layout_type, + filter_configurations: filter_configurations.into(), + group_configurations: group_configurations.into(), } } diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_view_manager.rs b/frontend/rust-lib/flowy-grid/src/services/grid_view_manager.rs index 61216cc88b..460be37a44 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_view_manager.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_view_manager.rs @@ -1,5 +1,5 @@ use crate::entities::{ - CreateFilterParams, CreateRowParams, DeleteFilterParams, GridFilterConfiguration, GridSettingPB, MoveGroupParams, + CreateFilterParams, CreateRowParams, DeleteFilterParams, GridFilterConfigurationPB, GridSettingPB, MoveGroupParams, RepeatedGridGroupPB, RowPB, }; use crate::manager::GridUser; @@ -105,7 +105,7 @@ impl GridViewManager { Ok(view_editor.get_setting().await) } - pub(crate) async fn get_filters(&self) -> FlowyResult> { + pub(crate) async fn get_filters(&self) -> FlowyResult> { let view_editor = self.get_default_view_editor().await?; Ok(view_editor.get_filters().await) } diff --git a/frontend/rust-lib/flowy-grid/tests/grid/grid_editor.rs b/frontend/rust-lib/flowy-grid/tests/grid/grid_editor.rs index 0325f6f008..2bbf5874aa 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/grid_editor.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/grid_editor.rs @@ -85,7 +85,7 @@ impl GridEditorTest { .row_revs } - pub async fn grid_filters(&self) -> Vec { + pub async fn grid_filters(&self) -> Vec { self.editor.get_grid_filter().await.unwrap() } From 54d6f3709e38ff378431f8733bfcecdd112a796c Mon Sep 17 00:00:00 2001 From: appflowy Date: Sat, 3 Sep 2022 17:16:48 +0800 Subject: [PATCH 16/17] chore: replace FieldPB with GridField --- .../plugins/board/application/board_bloc.dart | 3 +- .../application/board_data_controller.dart | 45 ++--- .../card/board_date_cell_bloc.dart | 10 +- .../board/application/card/card_bloc.dart | 10 +- .../card/card_data_controller.dart | 8 +- .../board/presentation/board_page.dart | 16 +- .../presentation/toolbar/board_setting.dart | 10 +- .../presentation/toolbar/board_toolbar.dart | 4 +- .../grid/application/block/block_cache.dart | 4 +- .../cell/cell_service/cell_controller.dart | 25 +-- .../cell/cell_service/cell_service.dart | 8 +- .../grid/application/cell/date_cal_bloc.dart | 2 +- .../grid/application/cell/date_cell_bloc.dart | 10 +- .../cell/select_option_service.dart | 2 +- .../grid/application/field/field_cache.dart | 165 +++++++++++++----- .../grid/application/field/field_service.dart | 2 + .../type_option/type_option_context.dart | 1 + .../type_option_data_controller.dart | 7 +- .../plugins/grid/application/grid_bloc.dart | 10 +- .../application/grid_data_controller.dart | 29 +-- .../grid/application/grid_header_bloc.dart | 19 +- .../grid/application/row/row_bloc.dart | 20 ++- .../grid/application/row/row_cache.dart | 7 +- .../application/row/row_data_controller.dart | 8 +- .../grid/application/setting/group_bloc.dart | 29 +-- .../application/setting/property_bloc.dart | 32 ++-- .../setting/setting_controller.dart | 1 + .../plugins/grid/presentation/grid_page.dart | 21 ++- .../grid/presentation/layout/layout.dart | 4 +- .../widgets/header/field_cell.dart | 1 + .../widgets/header/grid_header.dart | 8 +- .../widgets/header/type_option/builder.dart | 10 +- .../presentation/widgets/row/grid_row.dart | 4 +- .../presentation/widgets/row/row_detail.dart | 6 +- .../widgets/toolbar/grid_group.dart | 21 +-- .../widgets/toolbar/grid_property.dart | 32 ++-- .../widgets/toolbar/grid_setting.dart | 6 +- .../widgets/toolbar/grid_toolbar.dart | 6 +- .../app_flowy/lib/startup/deps_resolver.dart | 10 +- 39 files changed, 338 insertions(+), 278 deletions(-) diff --git a/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart b/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart index d4ffebd117..b78bc86661 100644 --- a/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart +++ b/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart @@ -25,7 +25,8 @@ class BoardBloc extends Bloc { final MoveRowFFIService _rowService; LinkedHashMap groupControllers = LinkedHashMap(); - GridFieldCache get fieldCache => _gridDataController.fieldCache; + GridFieldController get fieldController => + _gridDataController.fieldController; String get gridId => _gridDataController.gridId; BoardBloc({required ViewPB view}) diff --git a/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart b/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart index c78621b0a3..5435db2c3a 100644 --- a/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart +++ b/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart @@ -12,7 +12,7 @@ import 'package:flowy_sdk/protobuf/flowy-grid/protobuf.dart'; import 'board_listener.dart'; -typedef OnFieldsChanged = void Function(UnmodifiableListView); +typedef OnFieldsChanged = void Function(UnmodifiableListView); typedef OnGridChanged = void Function(GridPB); typedef DidLoadGroups = void Function(List); typedef OnUpdatedGroup = void Function(List); @@ -29,7 +29,7 @@ typedef OnError = void Function(FlowyError); class BoardDataController { final String gridId; final GridFFIService _gridFFIService; - final GridFieldCache fieldCache; + final GridFieldController fieldController; final BoardListener _listener; // key: the block id @@ -56,7 +56,7 @@ class BoardDataController { // ignore: prefer_collection_literals _blocks = LinkedHashMap(), _gridFFIService = GridFFIService(gridId: view.id), - fieldCache = GridFieldCache(gridId: view.id); + fieldController = GridFieldController(gridId: view.id); void addListener({ required OnGridChanged onGridChanged, @@ -75,7 +75,7 @@ class BoardDataController { _onRowsChanged = onRowsChanged; _onError = onError; - fieldCache.addListener(onFields: (fields) { + fieldController.addListener(onFields: (fields) { _onFieldsChanged?.call(UnmodifiableListView(fields)); }); @@ -113,16 +113,15 @@ class BoardDataController { () => result.fold( (grid) async { _onGridChanged?.call(grid); - - return await _loadFields(grid).then((result) { - return result.fold( - (l) { - _loadGroups(grid.blocks); - return left(l); - }, - (err) => right(err), - ); - }); + return await fieldController.loadFields(fieldIds: grid.fields).then( + (result) => result.fold( + (l) { + _loadGroups(grid.blocks); + return left(l); + }, + (err) => right(err), + ), + ); }, (err) => right(err), ), @@ -136,33 +135,19 @@ class BoardDataController { Future dispose() async { await _gridFFIService.closeGrid(); - await fieldCache.dispose(); + await fieldController.dispose(); for (final blockCache in _blocks.values) { blockCache.dispose(); } } - Future> _loadFields(GridPB grid) async { - final result = await _gridFFIService.getFields(fieldIds: grid.fields); - return Future( - () => result.fold( - (fields) { - fieldCache.fields = fields.items; - _onFieldsChanged?.call(UnmodifiableListView(fieldCache.fields)); - return left(unit); - }, - (err) => right(err), - ), - ); - } - Future _loadGroups(List blocks) async { for (final block in blocks) { final cache = GridBlockCache( gridId: gridId, block: block, - fieldCache: fieldCache, + fieldController: fieldController, ); cache.addListener(onRowsChanged: (reason) { diff --git a/frontend/app_flowy/lib/plugins/board/application/card/board_date_cell_bloc.dart b/frontend/app_flowy/lib/plugins/board/application/card/board_date_cell_bloc.dart index b1110f45cc..dd1f77a9d1 100644 --- a/frontend/app_flowy/lib/plugins/board/application/card/board_date_cell_bloc.dart +++ b/frontend/app_flowy/lib/plugins/board/application/card/board_date_cell_bloc.dart @@ -1,6 +1,6 @@ import 'package:app_flowy/plugins/grid/application/cell/cell_service/cell_service.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/date_type_option_entities.pb.dart'; -import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'dart:async'; @@ -20,8 +20,6 @@ class BoardDateCellBloc extends Bloc { emit(state.copyWith( data: cellData, dateStr: _dateStrFromCellData(cellData))); }, - didReceiveFieldUpdate: (FieldPB value) => - emit(state.copyWith(field: value)), ); }, ); @@ -53,8 +51,6 @@ class BoardDateCellEvent with _$BoardDateCellEvent { const factory BoardDateCellEvent.initial() = _InitialCell; const factory BoardDateCellEvent.didReceiveCellUpdate(DateCellDataPB? data) = _DidReceiveCellUpdate; - const factory BoardDateCellEvent.didReceiveFieldUpdate(FieldPB field) = - _DidReceiveFieldUpdate; } @freezed @@ -62,14 +58,14 @@ class BoardDateCellState with _$BoardDateCellState { const factory BoardDateCellState({ required DateCellDataPB? data, required String dateStr, - required FieldPB field, + required GridFieldContext fieldContext, }) = _BoardDateCellState; factory BoardDateCellState.initial(GridDateCellController context) { final cellData = context.getCellData(); return BoardDateCellState( - field: context.field, + fieldContext: context.fieldContext, data: cellData, dateStr: _dateStrFromCellData(cellData), ); diff --git a/frontend/app_flowy/lib/plugins/board/application/card/card_bloc.dart b/frontend/app_flowy/lib/plugins/board/application/card/card_bloc.dart index ad30d2b250..e4dccbf0df 100644 --- a/frontend/app_flowy/lib/plugins/board/application/card/card_bloc.dart +++ b/frontend/app_flowy/lib/plugins/board/application/card/card_bloc.dart @@ -59,7 +59,7 @@ class BoardCardBloc extends Bloc { return RowInfo( gridId: _rowService.gridId, fields: UnmodifiableListView( - state.cells.map((cell) => cell.identifier.field).toList(), + state.cells.map((cell) => cell.identifier.fieldContext).toList(), ), rowPB: state.rowPB, ); @@ -120,9 +120,9 @@ class BoardCellEquatable extends Equatable { @override List get props => [ - identifier.field.id, - identifier.field.fieldType, - identifier.field.visibility, - identifier.field.width, + identifier.fieldContext.id, + identifier.fieldContext.fieldType, + identifier.fieldContext.visibility, + identifier.fieldContext.width, ]; } diff --git a/frontend/app_flowy/lib/plugins/board/application/card/card_data_controller.dart b/frontend/app_flowy/lib/plugins/board/application/card/card_data_controller.dart index f362fdf0e6..377b0dae50 100644 --- a/frontend/app_flowy/lib/plugins/board/application/card/card_data_controller.dart +++ b/frontend/app_flowy/lib/plugins/board/application/card/card_data_controller.dart @@ -10,15 +10,15 @@ typedef OnCardChanged = void Function(GridCellMap, RowsChangedReason); class CardDataController extends BoardCellBuilderDelegate { final RowPB rowPB; - final GridFieldCache _fieldCache; + final GridFieldController _fieldController; final GridRowCache _rowCache; final List _onCardChangedListeners = []; CardDataController({ required this.rowPB, - required GridFieldCache fieldCache, + required GridFieldController fieldController, required GridRowCache rowCache, - }) : _fieldCache = fieldCache, + }) : _fieldController = fieldController, _rowCache = rowCache; GridCellMap loadData() { @@ -41,7 +41,7 @@ class CardDataController extends BoardCellBuilderDelegate { @override GridCellFieldNotifier buildFieldNotifier() { return GridCellFieldNotifier( - notifier: GridCellFieldNotifierImpl(_fieldCache)); + notifier: GridCellFieldNotifierImpl(_fieldController)); } @override diff --git a/frontend/app_flowy/lib/plugins/board/presentation/board_page.dart b/frontend/app_flowy/lib/plugins/board/presentation/board_page.dart index 0b043a2ba7..f52237ad49 100644 --- a/frontend/app_flowy/lib/plugins/board/presentation/board_page.dart +++ b/frontend/app_flowy/lib/plugins/board/presentation/board_page.dart @@ -222,10 +222,10 @@ class _BoardContentState extends State { /// Return placeholder widget if the rowCache is null. if (rowCache == null) return SizedBox(key: ObjectKey(columnItem)); - final fieldCache = context.read().fieldCache; + final fieldController = context.read().fieldController; final gridId = context.read().gridId; final cardController = CardDataController( - fieldCache: fieldCache, + fieldController: fieldController, rowCache: rowCache, rowPB: rowPB, ); @@ -252,7 +252,7 @@ class _BoardContentState extends State { dataController: cardController, openCard: (context) => _openCard( gridId, - fieldCache, + fieldController, rowPB, rowCache, context, @@ -271,17 +271,17 @@ class _BoardContentState extends State { ); } - void _openCard(String gridId, GridFieldCache fieldCache, RowPB rowPB, - GridRowCache rowCache, BuildContext context) { + void _openCard(String gridId, GridFieldController fieldController, + RowPB rowPB, GridRowCache rowCache, BuildContext context) { final rowInfo = RowInfo( gridId: gridId, - fields: UnmodifiableListView(fieldCache.fields), + fields: UnmodifiableListView(fieldController.fieldContexts), rowPB: rowPB, ); final dataController = GridRowDataController( rowInfo: rowInfo, - fieldCache: fieldCache, + fieldController: fieldController, rowCache: rowCache, ); @@ -302,7 +302,7 @@ class _ToolbarBlocAdaptor extends StatelessWidget { final bloc = context.read(); final toolbarContext = BoardToolbarContext( viewId: bloc.gridId, - fieldCache: bloc.fieldCache, + fieldController: bloc.fieldController, ); return BoardToolbar(toolbarContext: toolbarContext); diff --git a/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart b/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart index d981bd6006..a270f50951 100644 --- a/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart +++ b/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart @@ -19,16 +19,16 @@ import 'board_toolbar.dart'; class BoardSettingContext { final String viewId; - final GridFieldCache fieldCache; + final GridFieldController fieldController; BoardSettingContext({ required this.viewId, - required this.fieldCache, + required this.fieldController, }); factory BoardSettingContext.from(BoardToolbarContext toolbarContext) => BoardSettingContext( viewId: toolbarContext.viewId, - fieldCache: toolbarContext.fieldCache, + fieldController: toolbarContext.fieldController, ); } @@ -93,13 +93,13 @@ class BoardSettingList extends StatelessWidget { case BoardSettingAction.properties: GridPropertyList( gridId: settingContext.viewId, - fieldCache: settingContext.fieldCache) + fieldController: settingContext.fieldController) .show(context); break; case BoardSettingAction.groups: GridGroupList( viewId: settingContext.viewId, - fieldCache: settingContext.fieldCache) + fieldController: settingContext.fieldController) .show(context); break; } diff --git a/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_toolbar.dart b/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_toolbar.dart index fae27851a9..bf8d2e3443 100644 --- a/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_toolbar.dart +++ b/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_toolbar.dart @@ -9,11 +9,11 @@ import 'board_setting.dart'; class BoardToolbarContext { final String viewId; - final GridFieldCache fieldCache; + final GridFieldController fieldController; BoardToolbarContext({ required this.viewId, - required this.fieldCache, + required this.fieldController, }); } diff --git a/frontend/app_flowy/lib/plugins/grid/application/block/block_cache.dart b/frontend/app_flowy/lib/plugins/grid/application/block/block_cache.dart index b639700b5f..35ed334cee 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/block/block_cache.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/block/block_cache.dart @@ -19,12 +19,12 @@ class GridBlockCache { GridBlockCache({ required this.gridId, required this.block, - required GridFieldCache fieldCache, + required GridFieldController fieldController, }) { _rowCache = GridRowCache( gridId: gridId, block: block, - notifier: GridRowFieldNotifierImpl(fieldCache), + notifier: GridRowFieldNotifierImpl(fieldController), ); _listener = GridBlockListener(blockId: block.id); diff --git a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_controller.dart b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_controller.dart index d716133d05..29fb521976 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_controller.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_controller.dart @@ -148,10 +148,10 @@ class IGridCellController extends Equatable { _cellDataLoader = cellDataLoader, _cellDataPersistence = cellDataPersistence, _fieldNotifier = fieldNotifier, - _fieldService = - FieldService(gridId: cellId.gridId, fieldId: cellId.field.id), - _cacheKey = - GridCellCacheKey(rowId: cellId.rowId, fieldId: cellId.field.id); + _fieldService = FieldService( + gridId: cellId.gridId, fieldId: cellId.fieldContext.id), + _cacheKey = GridCellCacheKey( + rowId: cellId.rowId, fieldId: cellId.fieldContext.id); IGridCellController clone() { return IGridCellController( @@ -166,11 +166,11 @@ class IGridCellController extends Equatable { String get rowId => cellId.rowId; - String get fieldId => cellId.field.id; + String get fieldId => cellId.fieldContext.id; - FieldPB get field => cellId.field; + GridFieldContext get fieldContext => cellId.fieldContext; - FieldType get fieldType => cellId.field.fieldType; + FieldType get fieldType => cellId.fieldContext.fieldType; VoidCallback? startListening( {required void Function(T?) onCellChanged, @@ -182,7 +182,8 @@ class IGridCellController extends Equatable { isListening = true; _cellDataNotifier = ValueNotifier(_cellsCache.get(_cacheKey)); - _cellListener = CellListener(rowId: cellId.rowId, fieldId: cellId.field.id); + _cellListener = + CellListener(rowId: cellId.rowId, fieldId: cellId.fieldContext.id); /// 1.Listen on user edit event and load the new cell data if needed. /// For example: @@ -308,14 +309,14 @@ class IGridCellController extends Equatable { @override List get props => - [_cellsCache.get(_cacheKey) ?? "", cellId.rowId + cellId.field.id]; + [_cellsCache.get(_cacheKey) ?? "", cellId.rowId + cellId.fieldContext.id]; } class GridCellFieldNotifierImpl extends IGridCellFieldNotifier { - final GridFieldCache _cache; - FieldChangesetCallback? _onChangesetFn; + final GridFieldController _cache; + OnChangeset? _onChangesetFn; - GridCellFieldNotifierImpl(GridFieldCache cache) : _cache = cache; + GridCellFieldNotifierImpl(GridFieldController cache) : _cache = cache; @override void onCellDispose() { diff --git a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_service.dart b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_service.dart index eb64543167..360df60b4e 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_service.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_service.dart @@ -60,17 +60,17 @@ class GridCellIdentifier with _$GridCellIdentifier { const factory GridCellIdentifier({ required String gridId, required String rowId, - required FieldPB field, + required GridFieldContext fieldContext, }) = _GridCellIdentifier; // ignore: unused_element const GridCellIdentifier._(); - String get fieldId => field.id; + String get fieldId => fieldContext.id; - FieldType get fieldType => field.fieldType; + FieldType get fieldType => fieldContext.fieldType; ValueKey key() { - return ValueKey("$rowId$fieldId${field.fieldType}"); + return ValueKey("$rowId$fieldId${fieldContext.fieldType}"); } } diff --git a/frontend/app_flowy/lib/plugins/grid/application/cell/date_cal_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/cell/date_cal_bloc.dart index a7124b7a3d..6fb8e7e5b0 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/cell/date_cal_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/cell/date_cal_bloc.dart @@ -176,7 +176,7 @@ class DateCalBloc extends Bloc { final result = await FieldService.updateFieldTypeOption( gridId: cellController.gridId, - fieldId: cellController.field.id, + fieldId: cellController.fieldContext.id, typeOptionData: newDateTypeOption.writeToBuffer(), ); diff --git a/frontend/app_flowy/lib/plugins/grid/application/cell/date_cell_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/cell/date_cell_bloc.dart index 4d453eca25..ae840e9e54 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/cell/date_cell_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/cell/date_cell_bloc.dart @@ -1,5 +1,5 @@ +import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/date_type_option_entities.pb.dart'; -import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'dart:async'; @@ -20,8 +20,6 @@ class DateCellBloc extends Bloc { emit(state.copyWith( data: cellData, dateStr: _dateStrFromCellData(cellData))); }, - didReceiveFieldUpdate: (FieldPB value) => - emit(state.copyWith(field: value)), ); }, ); @@ -53,8 +51,6 @@ class DateCellEvent with _$DateCellEvent { const factory DateCellEvent.initial() = _InitialCell; const factory DateCellEvent.didReceiveCellUpdate(DateCellDataPB? data) = _DidReceiveCellUpdate; - const factory DateCellEvent.didReceiveFieldUpdate(FieldPB field) = - _DidReceiveFieldUpdate; } @freezed @@ -62,14 +58,14 @@ class DateCellState with _$DateCellState { const factory DateCellState({ required DateCellDataPB? data, required String dateStr, - required FieldPB field, + required GridFieldContext fieldContext, }) = _DateCellState; factory DateCellState.initial(GridDateCellController context) { final cellData = context.getCellData(); return DateCellState( - field: context.field, + fieldContext: context.fieldContext, data: cellData, dateStr: _dateStrFromCellData(cellData), ); diff --git a/frontend/app_flowy/lib/plugins/grid/application/cell/select_option_service.dart b/frontend/app_flowy/lib/plugins/grid/application/cell/select_option_service.dart index 44d4bdd4be..7d5be30eda 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/cell/select_option_service.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/cell/select_option_service.dart @@ -11,7 +11,7 @@ class SelectOptionService { SelectOptionService({required this.cellId}); String get gridId => cellId.gridId; - String get fieldId => cellId.field.id; + String get fieldId => cellId.fieldContext.id; String get rowId => cellId.rowId; Future> create({required String name}) { diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/field_cache.dart b/frontend/app_flowy/lib/plugins/grid/application/field/field_cache.dart index b83c261626..da12afff97 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/field_cache.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/field_cache.dart @@ -1,36 +1,47 @@ import 'dart:collection'; - import 'package:app_flowy/plugins/grid/application/field/grid_listener.dart'; +import 'package:app_flowy/plugins/grid/application/grid_service.dart'; +import 'package:app_flowy/plugins/grid/application/setting/setting_listener.dart'; +import 'package:dartz/dartz.dart'; import 'package:flowy_sdk/log.dart'; +import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flutter/foundation.dart'; - import '../row/row_cache.dart'; -class FieldsNotifier extends ChangeNotifier { - List _fields = []; +class _GridFieldNotifier extends ChangeNotifier { + List _fieldContexts = []; - set fields(List fields) { - _fields = fields; + set fieldContexts(List fieldContexts) { + _fieldContexts = fieldContexts; notifyListeners(); } - List get fields => _fields; + void notify() { + notifyListeners(); + } + + List get fieldContexts => _fieldContexts; } -typedef FieldChangesetCallback = void Function(FieldChangesetPB); -typedef FieldsCallback = void Function(List); +typedef OnChangeset = void Function(FieldChangesetPB); +typedef OnReceiveFields = void Function(List); -class GridFieldCache { +class GridFieldController { final String gridId; final GridFieldsListener _fieldListener; - FieldsNotifier? _fieldNotifier = FieldsNotifier(); - final Map _fieldsCallbackMap = {}; - final Map - _changesetCallbackMap = {}; + final SettingListener _settingListener; + final Map _fieldCallbackMap = {}; + final Map _changesetCallbackMap = {}; - GridFieldCache({required this.gridId}) - : _fieldListener = GridFieldsListener(gridId: gridId) { + _GridFieldNotifier? _fieldNotifier = _GridFieldNotifier(); + final GridFFIService _gridFFIService; + + GridFieldController({required this.gridId}) + : _fieldListener = GridFieldsListener(gridId: gridId), + _gridFFIService = GridFFIService(gridId: gridId), + _settingListener = SettingListener(gridId: gridId) { + //Listen on field's changes _fieldListener.start(onFieldsChanged: (result) { result.fold( (changeset) { @@ -44,6 +55,28 @@ class GridFieldCache { (err) => Log.error(err), ); }); + + //Listen on setting changes + _settingListener.start(onSettingUpdated: (result) { + result.fold( + (setting) { + final List groupFieldIds = setting.groupConfigurations.items + .map((item) => item.groupFieldId) + .toList(); + bool isChanged = false; + if (_fieldNotifier != null) { + for (var field in _fieldNotifier!.fieldContexts) { + if (groupFieldIds.contains(field.id)) { + field._isGroupField = true; + isChanged = true; + } + } + if (isChanged) _fieldNotifier?.notify(); + } + }, + (r) => Log.error(r), + ); + }); } Future dispose() async { @@ -52,49 +85,62 @@ class GridFieldCache { _fieldNotifier = null; } - List get fields => [..._fieldNotifier?.fields ?? []]; + List get fieldContexts => + [..._fieldNotifier?.fieldContexts ?? []]; - set fields(List fields) { - _fieldNotifier?.fields = [...fields]; + Future> loadFields( + {required List fieldIds}) async { + final result = await _gridFFIService.getFields(fieldIds: fieldIds); + return Future( + () => result.fold( + (newFields) { + _fieldNotifier?.fieldContexts = newFields.items + .map((field) => GridFieldContext(field: field)) + .toList(); + return left(unit); + }, + (err) => right(err), + ), + ); } void addListener({ - FieldsCallback? onFields, - FieldChangesetCallback? onChangeset, + OnReceiveFields? onFields, + OnChangeset? onChangeset, bool Function()? listenWhen, }) { if (onChangeset != null) { - fn(c) { + callback(c) { if (listenWhen != null && listenWhen() == false) { return; } onChangeset(c); } - _changesetCallbackMap[onChangeset] = fn; + _changesetCallbackMap[onChangeset] = callback; } if (onFields != null) { - fn() { + callback() { if (listenWhen != null && listenWhen() == false) { return; } - onFields(fields); + onFields(fieldContexts); } - _fieldsCallbackMap[onFields] = fn; - _fieldNotifier?.addListener(fn); + _fieldCallbackMap[onFields] = callback; + _fieldNotifier?.addListener(callback); } } void removeListener({ - FieldsCallback? onFieldsListener, - FieldChangesetCallback? onChangesetListener, + OnReceiveFields? onFieldsListener, + OnChangeset? onChangesetListener, }) { if (onFieldsListener != null) { - final fn = _fieldsCallbackMap.remove(onFieldsListener); - if (fn != null) { - _fieldNotifier?.removeListener(fn); + final callback = _fieldCallbackMap.remove(onFieldsListener); + if (callback != null) { + _fieldNotifier?.removeListener(callback); } } @@ -107,56 +153,58 @@ class GridFieldCache { if (deletedFields.isEmpty) { return; } - final List newFields = fields; + final List newFields = fieldContexts; final Map deletedFieldMap = { for (var fieldOrder in deletedFields) fieldOrder.fieldId: fieldOrder }; newFields.retainWhere((field) => (deletedFieldMap[field.id] == null)); - _fieldNotifier?.fields = newFields; + _fieldNotifier?.fieldContexts = newFields; } void _insertFields(List insertedFields) { if (insertedFields.isEmpty) { return; } - final List newFields = fields; + final List newFields = fieldContexts; for (final indexField in insertedFields) { + final gridField = GridFieldContext(field: indexField.field_1); if (newFields.length > indexField.index) { - newFields.insert(indexField.index, indexField.field_1); + newFields.insert(indexField.index, gridField); } else { - newFields.add(indexField.field_1); + newFields.add(gridField); } } - _fieldNotifier?.fields = newFields; + _fieldNotifier?.fieldContexts = newFields; } void _updateFields(List updatedFields) { if (updatedFields.isEmpty) { return; } - final List newFields = fields; + final List newFields = fieldContexts; for (final updatedField in updatedFields) { final index = newFields.indexWhere((field) => field.id == updatedField.id); if (index != -1) { newFields.removeAt(index); - newFields.insert(index, updatedField); + final gridField = GridFieldContext(field: updatedField); + newFields.insert(index, gridField); } } - _fieldNotifier?.fields = newFields; + _fieldNotifier?.fieldContexts = newFields; } } class GridRowFieldNotifierImpl extends IGridRowFieldNotifier { - final GridFieldCache _cache; - FieldChangesetCallback? _onChangesetFn; - FieldsCallback? _onFieldFn; - GridRowFieldNotifierImpl(GridFieldCache cache) : _cache = cache; + final GridFieldController _cache; + OnChangeset? _onChangesetFn; + OnReceiveFields? _onFieldFn; + GridRowFieldNotifierImpl(GridFieldController cache) : _cache = cache; @override - UnmodifiableListView get fields => - UnmodifiableListView(_cache.fields); + UnmodifiableListView get fields => + UnmodifiableListView(_cache.fieldContexts); @override void onRowFieldsChanged(VoidCallback callback) { @@ -188,3 +236,26 @@ class GridRowFieldNotifierImpl extends IGridRowFieldNotifier { } } } + +class GridFieldContext { + final FieldPB _field; + bool _isGroupField = false; + + String get id => _field.id; + + FieldType get fieldType => _field.fieldType; + + bool get visibility => _field.visibility; + + double get width => _field.width.toDouble(); + + bool get isPrimary => _field.isPrimary; + + String get name => _field.name; + + FieldPB get field => _field; + + bool get isGroupField => _isGroupField; + + GridFieldContext({required FieldPB field}) : _field = field; +} diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/field_service.dart b/frontend/app_flowy/lib/plugins/grid/application/field/field_service.dart index 816f32fe16..5466a8de08 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/field_service.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/field_service.dart @@ -5,6 +5,8 @@ import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/grid_entities.pb.dart'; import 'package:flutter/foundation.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; + +import 'field_cache.dart'; part 'field_service.freezed.dart'; /// FieldService consists of lots of event functions. We define the events in the backend(Rust), diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart b/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart index 632e333911..192c4f86f0 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart @@ -1,3 +1,4 @@ +import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; import 'package:flowy_sdk/dispatch/dispatch.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/checkbox_type_option.pb.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_data_controller.dart b/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_data_controller.dart index 66f4c35c20..6f757be71d 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_data_controller.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_data_controller.dart @@ -1,3 +1,4 @@ +import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; import 'package:flowy_infra/notifier.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; @@ -17,12 +18,12 @@ class TypeOptionDataController { TypeOptionDataController({ required this.gridId, required this.loader, - FieldPB? field, + GridFieldContext? fieldContext, }) { - if (field != null) { + if (fieldContext != null) { _data = FieldTypeOptionDataPB.create() ..gridId = gridId - ..field_2 = field; + ..field_2 = fieldContext.field; } } diff --git a/frontend/app_flowy/lib/plugins/grid/application/grid_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/grid_bloc.dart index 74f23a1b3e..139b08251e 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/grid_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/grid_bloc.dart @@ -7,6 +7,7 @@ import 'package:flowy_sdk/protobuf/flowy-grid/protobuf.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'block/block_cache.dart'; +import 'field/field_cache.dart'; import 'grid_data_controller.dart'; import 'row/row_cache.dart'; import 'dart:collection'; @@ -101,7 +102,7 @@ class GridEvent with _$GridEvent { RowsChangedReason listState, ) = _DidReceiveRowUpdate; const factory GridEvent.didReceiveFieldUpdate( - UnmodifiableListView fields, + UnmodifiableListView fields, ) = _DidReceiveFieldUpdate; const factory GridEvent.didReceiveGridUpdate( @@ -138,9 +139,9 @@ class GridLoadingState with _$GridLoadingState { } class GridFieldEquatable extends Equatable { - final UnmodifiableListView _fields; + final UnmodifiableListView _fields; const GridFieldEquatable( - UnmodifiableListView fields, + UnmodifiableListView fields, ) : _fields = fields; @override @@ -157,5 +158,6 @@ class GridFieldEquatable extends Equatable { ]; } - UnmodifiableListView get value => UnmodifiableListView(_fields); + UnmodifiableListView get value => + UnmodifiableListView(_fields); } diff --git a/frontend/app_flowy/lib/plugins/grid/application/grid_data_controller.dart b/frontend/app_flowy/lib/plugins/grid/application/grid_data_controller.dart index 55733b9b7b..6caf699641 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/grid_data_controller.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/grid_data_controller.dart @@ -4,7 +4,6 @@ import 'package:flowy_sdk/log.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-folder/view.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/block_entities.pb.dart'; -import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/grid_entities.pb.dart'; import 'dart:async'; import 'package:dartz/dartz.dart'; @@ -13,7 +12,7 @@ import 'field/field_cache.dart'; import 'prelude.dart'; import 'row/row_cache.dart'; -typedef OnFieldsChanged = void Function(UnmodifiableListView); +typedef OnFieldsChanged = void Function(UnmodifiableListView); typedef OnGridChanged = void Function(GridPB); typedef OnRowsChanged = void Function( @@ -25,7 +24,7 @@ typedef ListenOnRowChangedCondition = bool Function(); class GridDataController { final String gridId; final GridFFIService _gridFFIService; - final GridFieldCache fieldCache; + final GridFieldController fieldController; // key: the block id final LinkedHashMap _blocks; @@ -49,7 +48,7 @@ class GridDataController { // ignore: prefer_collection_literals _blocks = LinkedHashMap(), _gridFFIService = GridFFIService(gridId: view.id), - fieldCache = GridFieldCache(gridId: view.id); + fieldController = GridFieldController(gridId: view.id); void addListener({ required OnGridChanged onGridChanged, @@ -60,7 +59,7 @@ class GridDataController { _onRowChanged = onRowsChanged; _onFieldsChanged = onFieldsChanged; - fieldCache.addListener(onFields: (fields) { + fieldController.addListener(onFields: (fields) { _onFieldsChanged?.call(UnmodifiableListView(fields)); }); } @@ -72,7 +71,7 @@ class GridDataController { (grid) async { _initialBlocks(grid.blocks); _onGridChanged?.call(grid); - return await _loadFields(grid); + return await fieldController.loadFields(fieldIds: grid.fields); }, (err) => right(err), ), @@ -85,7 +84,7 @@ class GridDataController { Future dispose() async { await _gridFFIService.closeGrid(); - await fieldCache.dispose(); + await fieldController.dispose(); for (final blockCache in _blocks.values) { blockCache.dispose(); @@ -102,7 +101,7 @@ class GridDataController { final cache = GridBlockCache( gridId: gridId, block: block, - fieldCache: fieldCache, + fieldController: fieldController, ); cache.addListener( @@ -114,18 +113,4 @@ class GridDataController { _blocks[block.id] = cache; } } - - Future> _loadFields(GridPB grid) async { - final result = await _gridFFIService.getFields(fieldIds: grid.fields); - return Future( - () => result.fold( - (fields) { - fieldCache.fields = fields.items; - _onFieldsChanged?.call(UnmodifiableListView(fieldCache.fields)); - return left(unit); - }, - (err) => right(err), - ), - ); - } } diff --git a/frontend/app_flowy/lib/plugins/grid/application/grid_header_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/grid_header_bloc.dart index 125bd8d652..b7e1ade527 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/grid_header_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/grid_header_bloc.dart @@ -4,19 +4,18 @@ import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'dart:async'; - import 'field/field_cache.dart'; part 'grid_header_bloc.freezed.dart'; class GridHeaderBloc extends Bloc { - final GridFieldCache fieldCache; + final GridFieldController fieldController; final String gridId; GridHeaderBloc({ required this.gridId, - required this.fieldCache, - }) : super(GridHeaderState.initial(fieldCache.fields)) { + required this.fieldController, + }) : super(GridHeaderState.initial(fieldController.fieldContexts)) { on( (event, emit) async { await event.map( @@ -36,7 +35,7 @@ class GridHeaderBloc extends Bloc { Future _moveField( _MoveField value, Emitter emit) async { - final fields = List.from(state.fields); + final fields = List.from(state.fields); fields.insert(value.toIndex, fields.removeAt(value.fromIndex)); emit(state.copyWith(fields: fields)); @@ -49,7 +48,7 @@ class GridHeaderBloc extends Bloc { } Future _startListening() async { - fieldCache.addListener( + fieldController.addListener( onFields: (fields) => add(GridHeaderEvent.didReceiveFieldUpdate(fields)), listenWhen: () => !isClosed, ); @@ -64,18 +63,18 @@ class GridHeaderBloc extends Bloc { @freezed class GridHeaderEvent with _$GridHeaderEvent { const factory GridHeaderEvent.initial() = _InitialHeader; - const factory GridHeaderEvent.didReceiveFieldUpdate(List fields) = - _DidReceiveFieldUpdate; + const factory GridHeaderEvent.didReceiveFieldUpdate( + List fields) = _DidReceiveFieldUpdate; const factory GridHeaderEvent.moveField( FieldPB field, int fromIndex, int toIndex) = _MoveField; } @freezed class GridHeaderState with _$GridHeaderState { - const factory GridHeaderState({required List fields}) = + const factory GridHeaderState({required List fields}) = _GridHeaderState; - factory GridHeaderState.initial(List fields) { + factory GridHeaderState.initial(List fields) { // final List newFields = List.from(fields); // newFields.retainWhere((field) => field.visibility); return GridHeaderState(fields: fields); diff --git a/frontend/app_flowy/lib/plugins/grid/application/row/row_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/row/row_bloc.dart index bea25d8008..c5676616b3 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/row/row_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/row/row_bloc.dart @@ -1,7 +1,7 @@ import 'dart:collection'; import 'package:app_flowy/plugins/grid/application/cell/cell_service/cell_service.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; import 'package:equatable/equatable.dart'; -import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'dart:async'; @@ -35,7 +35,7 @@ class RowBloc extends Bloc { }, didReceiveCells: (_DidReceiveCells value) async { final cells = value.gridCellMap.values - .map((e) => GridCellEquatable(e.field)) + .map((e) => GridCellEquatable(e.fieldContext)) .toList(); emit(state.copyWith( gridCellMap: value.gridCellMap, @@ -87,21 +87,23 @@ class RowState with _$RowState { rowInfo: rowInfo, gridCellMap: cellDataMap, cells: UnmodifiableListView( - cellDataMap.values.map((e) => GridCellEquatable(e.field)).toList(), + cellDataMap.values + .map((e) => GridCellEquatable(e.fieldContext)) + .toList(), ), ); } class GridCellEquatable extends Equatable { - final FieldPB _field; + final GridFieldContext _fieldContext; - const GridCellEquatable(FieldPB field) : _field = field; + const GridCellEquatable(GridFieldContext field) : _fieldContext = field; @override List get props => [ - _field.id, - _field.fieldType, - _field.visibility, - _field.width, + _fieldContext.id, + _fieldContext.fieldType, + _fieldContext.visibility, + _fieldContext.width, ]; } diff --git a/frontend/app_flowy/lib/plugins/grid/application/row/row_cache.dart b/frontend/app_flowy/lib/plugins/grid/application/row/row_cache.dart index 618d73cbc1..d1e8eaa1bf 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/row/row_cache.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/row/row_cache.dart @@ -1,5 +1,6 @@ import 'dart:collection'; import 'package:app_flowy/plugins/grid/application/cell/cell_service/cell_service.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; import 'package:flowy_sdk/dispatch/dispatch.dart'; import 'package:flowy_sdk/log.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/block_entities.pb.dart'; @@ -12,7 +13,7 @@ part 'row_cache.freezed.dart'; typedef RowUpdateCallback = void Function(); abstract class IGridRowFieldNotifier { - UnmodifiableListView get fields; + UnmodifiableListView get fields; void onRowFieldsChanged(VoidCallback callback); void onRowFieldChanged(void Function(FieldPB) callback); void onRowDispose(); @@ -217,7 +218,7 @@ class GridRowCache { cellDataMap[field.id] = GridCellIdentifier( rowId: rowId, gridId: gridId, - field: field, + fieldContext: field, ); } } @@ -284,7 +285,7 @@ class _RowChangesetNotifier extends ChangeNotifier { class RowInfo with _$RowInfo { const factory RowInfo({ required String gridId, - required UnmodifiableListView fields, + required UnmodifiableListView fields, required RowPB rowPB, }) = _RowInfo; } diff --git a/frontend/app_flowy/lib/plugins/grid/application/row/row_data_controller.dart b/frontend/app_flowy/lib/plugins/grid/application/row/row_data_controller.dart index b4618b397a..5ed0f24965 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/row/row_data_controller.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/row/row_data_controller.dart @@ -10,14 +10,14 @@ typedef OnRowChanged = void Function(GridCellMap, RowsChangedReason); class GridRowDataController extends GridCellBuilderDelegate { final RowInfo rowInfo; final List _onRowChangedListeners = []; - final GridFieldCache _fieldCache; + final GridFieldController _fieldController; final GridRowCache _rowCache; GridRowDataController({ required this.rowInfo, - required GridFieldCache fieldCache, + required GridFieldController fieldController, required GridRowCache rowCache, - }) : _fieldCache = fieldCache, + }) : _fieldController = fieldController, _rowCache = rowCache; GridCellMap loadData() { @@ -41,7 +41,7 @@ class GridRowDataController extends GridCellBuilderDelegate { @override GridCellFieldNotifier buildFieldNotifier() { return GridCellFieldNotifier( - notifier: GridCellFieldNotifierImpl(_fieldCache)); + notifier: GridCellFieldNotifierImpl(_fieldController)); } @override diff --git a/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart index 691371bd8a..b960a2c2f0 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart @@ -1,6 +1,5 @@ import 'package:app_flowy/plugins/grid/application/field/field_service.dart'; import 'package:flowy_sdk/log.dart'; -import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'dart:async'; @@ -11,14 +10,15 @@ import 'setting_controller.dart'; part 'group_bloc.freezed.dart'; class GridGroupBloc extends Bloc { - final GridFieldCache _fieldCache; + final GridFieldController _fieldController; final SettingController _settingController; - Function(List)? _onFieldsFn; + Function(List)? _onFieldsFn; - GridGroupBloc({required String viewId, required GridFieldCache fieldCache}) - : _fieldCache = fieldCache, + GridGroupBloc( + {required String viewId, required GridFieldController fieldController}) + : _fieldController = fieldController, _settingController = SettingController(viewId: viewId), - super(GridGroupState.initial(viewId, fieldCache.fields)) { + super(GridGroupState.initial(viewId, fieldController.fieldContexts)) { on( (event, emit) async { await event.map( @@ -36,7 +36,7 @@ class GridGroupBloc extends Bloc { ); }, didReceiveFieldUpdate: (_DidReceiveFieldUpdate value) { - emit(state.copyWith(fields: value.fields)); + emit(state.copyWith(fieldContexts: value.fields)); }, moveField: (_MoveField value) { // @@ -49,7 +49,7 @@ class GridGroupBloc extends Bloc { @override Future close() async { if (_onFieldsFn != null) { - _fieldCache.removeListener(onFieldsListener: _onFieldsFn!); + _fieldController.removeListener(onFieldsListener: _onFieldsFn!); _onFieldsFn = null; } return super.close(); @@ -57,7 +57,7 @@ class GridGroupBloc extends Bloc { void _startListening() { _onFieldsFn = (fields) => add(GridGroupEvent.didReceiveFieldUpdate(fields)); - _fieldCache.addListener( + _fieldController.addListener( onFields: _onFieldsFn, listenWhen: () => !isClosed, ); @@ -74,8 +74,8 @@ class GridGroupEvent with _$GridGroupEvent { const factory GridGroupEvent.initial() = _Initial; const factory GridGroupEvent.setFieldVisibility( String fieldId, bool visibility) = _SetFieldVisibility; - const factory GridGroupEvent.didReceiveFieldUpdate(List fields) = - _DidReceiveFieldUpdate; + const factory GridGroupEvent.didReceiveFieldUpdate( + List fields) = _DidReceiveFieldUpdate; const factory GridGroupEvent.moveField(int fromIndex, int toIndex) = _MoveField; } @@ -84,12 +84,13 @@ class GridGroupEvent with _$GridGroupEvent { class GridGroupState with _$GridGroupState { const factory GridGroupState({ required String gridId, - required List fields, + required List fieldContexts, }) = _GridGroupState; - factory GridGroupState.initial(String gridId, List fields) => + factory GridGroupState.initial( + String gridId, List fieldContexts) => GridGroupState( gridId: gridId, - fields: fields, + fieldContexts: fieldContexts, ); } diff --git a/frontend/app_flowy/lib/plugins/grid/application/setting/property_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/setting/property_bloc.dart index fc0c2b4b12..2e268aff84 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/setting/property_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/setting/property_bloc.dart @@ -1,6 +1,5 @@ import 'package:app_flowy/plugins/grid/application/field/field_service.dart'; import 'package:flowy_sdk/log.dart'; -import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'dart:async'; @@ -10,12 +9,14 @@ import '../field/field_cache.dart'; part 'property_bloc.freezed.dart'; class GridPropertyBloc extends Bloc { - final GridFieldCache _fieldCache; - Function(List)? _onFieldsFn; + final GridFieldController _fieldController; + Function(List)? _onFieldsFn; - GridPropertyBloc({required String gridId, required GridFieldCache fieldCache}) - : _fieldCache = fieldCache, - super(GridPropertyState.initial(gridId, fieldCache.fields)) { + GridPropertyBloc( + {required String gridId, required GridFieldController fieldController}) + : _fieldController = fieldController, + super( + GridPropertyState.initial(gridId, fieldController.fieldContexts)) { on( (event, emit) async { await event.map( @@ -33,7 +34,7 @@ class GridPropertyBloc extends Bloc { ); }, didReceiveFieldUpdate: (_DidReceiveFieldUpdate value) { - emit(state.copyWith(fields: value.fields)); + emit(state.copyWith(fieldContexts: value.fields)); }, moveField: (_MoveField value) { // @@ -46,7 +47,7 @@ class GridPropertyBloc extends Bloc { @override Future close() async { if (_onFieldsFn != null) { - _fieldCache.removeListener(onFieldsListener: _onFieldsFn!); + _fieldController.removeListener(onFieldsListener: _onFieldsFn!); _onFieldsFn = null; } return super.close(); @@ -55,7 +56,7 @@ class GridPropertyBloc extends Bloc { void _startListening() { _onFieldsFn = (fields) => add(GridPropertyEvent.didReceiveFieldUpdate(fields)); - _fieldCache.addListener( + _fieldController.addListener( onFields: _onFieldsFn, listenWhen: () => !isClosed, ); @@ -67,8 +68,8 @@ class GridPropertyEvent with _$GridPropertyEvent { const factory GridPropertyEvent.initial() = _Initial; const factory GridPropertyEvent.setFieldVisibility( String fieldId, bool visibility) = _SetFieldVisibility; - const factory GridPropertyEvent.didReceiveFieldUpdate(List fields) = - _DidReceiveFieldUpdate; + const factory GridPropertyEvent.didReceiveFieldUpdate( + List fields) = _DidReceiveFieldUpdate; const factory GridPropertyEvent.moveField(int fromIndex, int toIndex) = _MoveField; } @@ -77,12 +78,15 @@ class GridPropertyEvent with _$GridPropertyEvent { class GridPropertyState with _$GridPropertyState { const factory GridPropertyState({ required String gridId, - required List fields, + required List fieldContexts, }) = _GridPropertyState; - factory GridPropertyState.initial(String gridId, List fields) => + factory GridPropertyState.initial( + String gridId, + List fieldContexts, + ) => GridPropertyState( gridId: gridId, - fields: fields, + fieldContexts: fieldContexts, ); } diff --git a/frontend/app_flowy/lib/plugins/grid/application/setting/setting_controller.dart b/frontend/app_flowy/lib/plugins/grid/application/setting/setting_controller.dart index 721e5d35f1..795adc4622 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/setting/setting_controller.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/setting/setting_controller.dart @@ -41,6 +41,7 @@ class SettingController { required OnError onError, }) { assert(_onSettingUpdated == null, 'Should call once'); + assert(_onError == null, 'Should call once'); _onSettingUpdated = onSettingUpdated; _onError = onError; } diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/grid_page.dart b/frontend/app_flowy/lib/plugins/grid/presentation/grid_page.dart index 2c6c1e2180..e8d251c04f 100755 --- a/frontend/app_flowy/lib/plugins/grid/presentation/grid_page.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/grid_page.dart @@ -157,10 +157,11 @@ class _FlowyGridState extends State { } Widget _gridHeader(BuildContext context, String gridId) { - final fieldCache = context.read().dataController.fieldCache; + final fieldController = + context.read().dataController.fieldController; return GridHeaderSliverAdaptor( gridId: gridId, - fieldCache: fieldCache, + fieldController: fieldController, anchorScrollController: headerScrollController, ); } @@ -173,10 +174,11 @@ class _GridToolbarAdaptor extends StatelessWidget { Widget build(BuildContext context) { return BlocSelector( selector: (state) { - final fieldCache = context.read().dataController.fieldCache; + final fieldController = + context.read().dataController.fieldController; return GridToolbarContext( gridId: state.gridId, - fieldCache: fieldCache, + fieldController: fieldController, ); }, builder: (context, toolbarContext) { @@ -247,10 +249,11 @@ class _GridRowsState extends State<_GridRows> { /// Return placeholder widget if the rowCache is null. if (rowCache == null) return const SizedBox(); - final fieldCache = context.read().dataController.fieldCache; + final fieldController = + context.read().dataController.fieldController; final dataController = GridRowDataController( rowInfo: rowInfo, - fieldCache: fieldCache, + fieldController: fieldController, rowCache: rowCache, ); @@ -264,7 +267,7 @@ class _GridRowsState extends State<_GridRows> { _openRowDetailPage( context, rowInfo, - fieldCache, + fieldController, rowCache, cellBuilder, ); @@ -277,13 +280,13 @@ class _GridRowsState extends State<_GridRows> { void _openRowDetailPage( BuildContext context, RowInfo rowInfo, - GridFieldCache fieldCache, + GridFieldController fieldController, GridRowCache rowCache, GridCellBuilder cellBuilder, ) { final dataController = GridRowDataController( rowInfo: rowInfo, - fieldCache: fieldCache, + fieldController: fieldController, rowCache: rowCache, ); diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/layout/layout.dart b/frontend/app_flowy/lib/plugins/grid/presentation/layout/layout.dart index e47b47a267..5d09200b33 100755 --- a/frontend/app_flowy/lib/plugins/grid/presentation/layout/layout.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/layout/layout.dart @@ -1,8 +1,8 @@ -import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; import 'sizes.dart'; class GridLayout { - static double headerWidth(List fields) { + static double headerWidth(List fields) { if (fields.isEmpty) return 0; final fieldsWidth = fields diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/field_cell.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/field_cell.dart index c1de0eca31..fd5f087c40 100755 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/field_cell.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/field_cell.dart @@ -1,3 +1,4 @@ +import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; import 'package:app_flowy/plugins/grid/application/field/field_cell_bloc.dart'; import 'package:app_flowy/plugins/grid/application/field/field_service.dart'; import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/grid_header.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/grid_header.dart index c5bdb448c3..fd0a0c2863 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/grid_header.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/grid_header.dart @@ -18,11 +18,11 @@ import 'field_cell.dart'; class GridHeaderSliverAdaptor extends StatefulWidget { final String gridId; - final GridFieldCache fieldCache; + final GridFieldController fieldController; final ScrollController anchorScrollController; const GridHeaderSliverAdaptor({ required this.gridId, - required this.fieldCache, + required this.fieldController, required this.anchorScrollController, Key? key, }) : super(key: key); @@ -38,7 +38,7 @@ class _GridHeaderSliverAdaptorState extends State { return BlocProvider( create: (context) { final bloc = getIt( - param1: widget.gridId, param2: widget.fieldCache); + param1: widget.gridId, param2: widget.fieldController); bloc.add(const GridHeaderEvent.initial()); return bloc; }, @@ -84,7 +84,7 @@ class _GridHeaderState extends State<_GridHeader> { final cells = state.fields .where((field) => field.visibility) .map((field) => - GridFieldCellContext(gridId: widget.gridId, field: field)) + GridFieldCellContext(gridId: widget.gridId, field: field.field)) .map((ctx) => GridFieldCell(ctx, key: ValueKey(ctx.field.id))) .toList(); diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/type_option/builder.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/type_option/builder.dart index 2ea19eb1e8..bce95edb96 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/type_option/builder.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/type_option/builder.dart @@ -1,5 +1,6 @@ import 'dart:typed_data'; +import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart'; import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_data_controller.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/checkbox_type_option.pb.dart'; @@ -129,17 +130,18 @@ TypeOptionWidgetBuilder makeTypeOptionWidgetBuilder({ TypeOptionContext makeTypeOptionContext({ required String gridId, - required FieldPB field, + required GridFieldContext fieldContext, }) { - final loader = FieldTypeOptionLoader(gridId: gridId, field: field); + final loader = + FieldTypeOptionLoader(gridId: gridId, field: fieldContext.field); final dataController = TypeOptionDataController( gridId: gridId, loader: loader, - field: field, + fieldContext: fieldContext, ); return makeTypeOptionContextWithDataController( gridId: gridId, - fieldType: field.fieldType, + fieldType: fieldContext.fieldType, dataController: dataController, ); } diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/grid_row.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/grid_row.dart index 55ec7b9832..621f53cf1a 100755 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/grid_row.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/grid_row.dart @@ -189,13 +189,13 @@ class RowContent extends StatelessWidget { final GridCellWidget child = builder.build(cellId); return CellContainer( - width: cellId.field.width.toDouble(), + width: cellId.fieldContext.width.toDouble(), rowStateNotifier: Provider.of(context, listen: false), accessoryBuilder: (buildContext) { final builder = child.accessoryBuilder; List accessories = []; - if (cellId.field.isPrimary) { + if (cellId.fieldContext.isPrimary) { accessories.add(PrimaryCellAccessory( onTapCallback: onExpand, isCellEditing: buildContext.isCellEditing, diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/row_detail.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/row_detail.dart index 58e9b2808c..1fbe1bfb84 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/row_detail.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/row_detail.dart @@ -215,7 +215,7 @@ class _RowDetailCell extends StatelessWidget { SizedBox( width: 150, child: FieldCellButton( - field: cellId.field, + field: cellId.fieldContext.fieldContext, onTap: () => _showFieldEditor(context), ), ), @@ -230,10 +230,10 @@ class _RowDetailCell extends StatelessWidget { void _showFieldEditor(BuildContext context) { FieldEditor( gridId: cellId.gridId, - fieldName: cellId.field.name, + fieldName: cellId.fieldContext.name, typeOptionLoader: FieldTypeOptionLoader( gridId: cellId.gridId, - field: cellId.field, + field: cellId.fieldContext.fieldContext, ), ).show(context); } diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart index 770e16e2bf..3550c1274c 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart @@ -6,7 +6,6 @@ import 'package:flowy_infra/theme.dart'; import 'package:flowy_infra_ui/style_widget/button.dart'; import 'package:flowy_infra_ui/style_widget/text.dart'; import 'package:flowy_infra_ui/widget/spacing.dart'; -import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flutter/material.dart'; import 'package:app_flowy/plugins/grid/application/setting/group_bloc.dart'; @@ -14,10 +13,10 @@ import 'package:flutter_bloc/flutter_bloc.dart'; class GridGroupList extends StatelessWidget { final String viewId; - final GridFieldCache fieldCache; + final GridFieldController fieldController; const GridGroupList({ required this.viewId, - required this.fieldCache, + required this.fieldController, Key? key, }) : super(key: key); @@ -26,13 +25,13 @@ class GridGroupList extends StatelessWidget { return BlocProvider( create: (context) => GridGroupBloc( viewId: viewId, - fieldCache: fieldCache, + fieldController: fieldController, )..add(const GridGroupEvent.initial()), child: BlocBuilder( builder: (context, state) { - final cells = state.fields.map((field) { + final cells = state.fieldContexts.map((field) { return _GridGroupCell( - field: field, + fieldContext: field, key: ValueKey(field.id), ); }).toList(); @@ -56,8 +55,9 @@ class GridGroupList extends StatelessWidget { } class _GridGroupCell extends StatelessWidget { - final FieldPB field; - const _GridGroupCell({required this.field, Key? key}) : super(key: key); + final GridFieldContext fieldContext; + const _GridGroupCell({required this.fieldContext, Key? key}) + : super(key: key); @override Widget build(BuildContext context) { @@ -73,9 +73,10 @@ class _GridGroupCell extends StatelessWidget { // ), return FlowyButton( - text: FlowyText.medium(field.name, fontSize: 12), + text: FlowyText.medium(fieldContext.name, fontSize: 12), hoverColor: theme.hover, - leftIcon: svgWidget(field.fieldType.iconName(), color: theme.iconColor), + leftIcon: + svgWidget(fieldContext.fieldType.iconName(), color: theme.iconColor), onTap: () {}, ); } diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart index 08ba3dcd08..e57ff26bcb 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart @@ -9,7 +9,6 @@ import 'package:flowy_infra_ui/style_widget/button.dart'; import 'package:flowy_infra_ui/style_widget/icon_button.dart'; import 'package:flowy_infra_ui/style_widget/text.dart'; import 'package:flowy_infra_ui/widget/spacing.dart'; -import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:styled_widget/styled_widget.dart'; @@ -20,10 +19,10 @@ import '../header/field_editor.dart'; class GridPropertyList extends StatelessWidget with FlowyOverlayDelegate { final String gridId; - final GridFieldCache fieldCache; + final GridFieldController fieldController; const GridPropertyList({ required this.gridId, - required this.fieldCache, + required this.fieldController, Key? key, }) : super(key: key); @@ -45,13 +44,13 @@ class GridPropertyList extends StatelessWidget with FlowyOverlayDelegate { Widget build(BuildContext context) { return BlocProvider( create: (context) => - getIt(param1: gridId, param2: fieldCache) + getIt(param1: gridId, param2: fieldController) ..add(const GridPropertyEvent.initial()), child: BlocBuilder( builder: (context, state) { - final cells = state.fields.map((field) { + final cells = state.fieldContexts.map((field) { return _GridPropertyCell( - gridId: gridId, field: field, key: ValueKey(field.id)); + gridId: gridId, fieldContext: field, key: ValueKey(field.id)); }).toList(); return ListView.separated( @@ -78,16 +77,17 @@ class GridPropertyList extends StatelessWidget with FlowyOverlayDelegate { } class _GridPropertyCell extends StatelessWidget { - final FieldPB field; + final GridFieldContext fieldContext; final String gridId; - const _GridPropertyCell({required this.gridId, required this.field, Key? key}) + const _GridPropertyCell( + {required this.gridId, required this.fieldContext, Key? key}) : super(key: key); @override Widget build(BuildContext context) { final theme = context.watch(); - final checkmark = field.visibility + final checkmark = fieldContext.visibility ? svgWidget('home/show', color: theme.iconColor) : svgWidget('home/hide', color: theme.iconColor); @@ -105,7 +105,7 @@ class _GridPropertyCell extends StatelessWidget { onPressed: () { context.read().add( GridPropertyEvent.setFieldVisibility( - field.id, !field.visibility)); + fieldContext.id, !fieldContext.visibility)); }, icon: checkmark.padding(all: 6), ) @@ -115,14 +115,18 @@ class _GridPropertyCell extends StatelessWidget { FlowyButton _editFieldButton(AppTheme theme, BuildContext context) { return FlowyButton( - text: FlowyText.medium(field.name, fontSize: 12), + text: FlowyText.medium(fieldContext.name, fontSize: 12), hoverColor: theme.hover, - leftIcon: svgWidget(field.fieldType.iconName(), color: theme.iconColor), + leftIcon: + svgWidget(fieldContext.fieldType.iconName(), color: theme.iconColor), onTap: () { FieldEditor( gridId: gridId, - fieldName: field.name, - typeOptionLoader: FieldTypeOptionLoader(gridId: gridId, field: field), + fieldName: fieldContext.name, + typeOptionLoader: FieldTypeOptionLoader( + gridId: gridId, + field: fieldContext.field, + ), ).show(context, anchorDirection: AnchorDirection.bottomRight); }, ); diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_setting.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_setting.dart index 289d84141f..4bbcd66fe2 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_setting.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_setting.dart @@ -17,11 +17,11 @@ import 'grid_property.dart'; class GridSettingContext { final String gridId; - final GridFieldCache fieldCache; + final GridFieldController fieldController; GridSettingContext({ required this.gridId, - required this.fieldCache, + required this.fieldController, }); } @@ -44,7 +44,7 @@ class GridSettingList extends StatelessWidget { case GridSettingAction.properties: GridPropertyList( gridId: settingContext.gridId, - fieldCache: settingContext.fieldCache) + fieldController: settingContext.fieldController) .show(context); break; } diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_toolbar.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_toolbar.dart index 4ced06bf99..56c6947430 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_toolbar.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_toolbar.dart @@ -11,10 +11,10 @@ import 'grid_setting.dart'; class GridToolbarContext { final String gridId; - final GridFieldCache fieldCache; + final GridFieldController fieldController; GridToolbarContext({ required this.gridId, - required this.fieldCache, + required this.fieldController, }); } @@ -26,7 +26,7 @@ class GridToolbar extends StatelessWidget { Widget build(BuildContext context) { final settingContext = GridSettingContext( gridId: toolbarContext.gridId, - fieldCache: toolbarContext.fieldCache, + fieldController: toolbarContext.fieldController, ); return SizedBox( height: 40, diff --git a/frontend/app_flowy/lib/startup/deps_resolver.dart b/frontend/app_flowy/lib/startup/deps_resolver.dart index be3c617943..cd73c3fbbc 100644 --- a/frontend/app_flowy/lib/startup/deps_resolver.dart +++ b/frontend/app_flowy/lib/startup/deps_resolver.dart @@ -154,10 +154,10 @@ void _resolveGridDeps(GetIt getIt) { (view, _) => GridBloc(view: view), ); - getIt.registerFactoryParam( - (gridId, fieldCache) => GridHeaderBloc( + getIt.registerFactoryParam( + (gridId, fieldController) => GridHeaderBloc( gridId: gridId, - fieldCache: fieldCache, + fieldController: fieldController, ), ); @@ -200,7 +200,7 @@ void _resolveGridDeps(GetIt getIt) { ), ); - getIt.registerFactoryParam( - (gridId, cache) => GridPropertyBloc(gridId: gridId, fieldCache: cache), + getIt.registerFactoryParam( + (gridId, cache) => GridPropertyBloc(gridId: gridId, fieldController: cache), ); } From 4f8e012d543e9aa3f144a7a862054882889fe51a Mon Sep 17 00:00:00 2001 From: appflowy Date: Sun, 4 Sep 2022 15:33:07 +0800 Subject: [PATCH 17/17] chore: fix bugs when switch group field --- .../plugins/board/application/board_bloc.dart | 8 ++- .../application/board_data_controller.dart | 2 +- .../card/board_date_cell_bloc.dart | 2 +- .../card/card_data_controller.dart | 2 +- .../board/presentation/board_page.dart | 6 +- .../presentation/toolbar/board_setting.dart | 2 +- .../presentation/toolbar/board_toolbar.dart | 2 +- .../grid/application/block/block_cache.dart | 2 +- .../cell/cell_service/cell_service.dart | 2 +- .../grid/application/cell/date_cell_bloc.dart | 2 +- ...field_cache.dart => field_controller.dart} | 56 +++++++++++----- .../grid/application/field/field_service.dart | 1 - .../type_option/type_option_context.dart | 1 - .../type_option_data_controller.dart | 2 +- .../plugins/grid/application/grid_bloc.dart | 2 +- .../application/grid_data_controller.dart | 2 +- .../grid/application/grid_header_bloc.dart | 2 +- .../grid/application/row/row_bloc.dart | 2 +- .../grid/application/row/row_cache.dart | 2 +- .../application/row/row_data_controller.dart | 2 +- .../grid/application/setting/group_bloc.dart | 52 ++++++-------- .../application/setting/property_bloc.dart | 2 +- .../application/setting/setting_service.dart | 16 +++++ .../plugins/grid/presentation/grid_page.dart | 2 +- .../grid/presentation/layout/layout.dart | 2 +- .../widgets/header/field_cell.dart | 1 - .../widgets/header/grid_header.dart | 2 +- .../widgets/header/type_option/builder.dart | 2 +- .../presentation/widgets/row/row_detail.dart | 4 +- .../widgets/toolbar/grid_group.dart | 67 +++++++++++++------ .../widgets/toolbar/grid_property.dart | 2 +- .../widgets/toolbar/grid_setting.dart | 2 +- .../widgets/toolbar/grid_toolbar.dart | 2 +- .../app_flowy/lib/startup/deps_resolver.dart | 2 +- .../lib/src/widgets/board_data.dart | 1 + .../src/entities/filter_entities/util.rs | 12 ++-- .../src/entities/group_entities/group.rs | 10 +-- .../src/entities/setting_entities.rs | 15 ++--- .../rust-lib/flowy-grid/src/event_handler.rs | 26 +++++++ frontend/rust-lib/flowy-grid/src/event_map.rs | 9 ++- .../flowy-grid/src/services/grid_editor.rs | 14 +++- .../src/services/grid_view_editor.rs | 54 ++++++++++++--- .../src/services/grid_view_manager.rs | 22 ++++-- .../src/services/group/configuration.rs | 4 +- .../src/services/group/controller.rs | 2 +- .../controller_impls/default_controller.rs | 2 +- .../src/services/setting/setting_builder.rs | 4 +- .../tests/grid/filter_test/script.rs | 8 +-- .../grid/filter_test/text_filter_test.rs | 10 +-- .../tests/grid/group_test/script.rs | 2 +- .../src/client_grid/view_revision_pad.rs | 4 +- 51 files changed, 297 insertions(+), 162 deletions(-) rename frontend/app_flowy/lib/plugins/grid/application/field/{field_cache.dart => field_controller.dart} (86%) diff --git a/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart b/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart index b78bc86661..26dd15038a 100644 --- a/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart +++ b/frontend/app_flowy/lib/plugins/board/application/board_bloc.dart @@ -1,6 +1,6 @@ import 'dart:async'; import 'package:app_flowy/plugins/grid/application/block/block_cache.dart'; -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:app_flowy/plugins/grid/application/row/row_cache.dart'; import 'package:app_flowy/plugins/grid/application/row/row_service.dart'; import 'package:appflowy_board/appflowy_board.dart'; @@ -204,16 +204,20 @@ class BoardBloc extends Bloc { } }, didLoadGroups: (groups) { + if (isClosed) return; initializeGroups(groups); add(BoardEvent.didReceiveGroups(groups)); }, onDeletedGroup: (groupIds) { + if (isClosed) return; // }, onInsertedGroup: (insertedGroups) { + if (isClosed) return; // }, onUpdatedGroup: (updatedGroups) { + if (isClosed) return; for (final group in updatedGroups) { final columnController = boardController.getColumnController(group.groupId); @@ -224,6 +228,8 @@ class BoardBloc extends Bloc { Log.error(err); }, onResetGroups: (groups) { + if (isClosed) return; + initializeGroups(groups); add(BoardEvent.didReceiveGroups(groups)); }, diff --git a/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart b/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart index 5435db2c3a..923bb4ef8c 100644 --- a/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart +++ b/frontend/app_flowy/lib/plugins/board/application/board_data_controller.dart @@ -1,7 +1,7 @@ import 'dart:collection'; import 'package:app_flowy/plugins/grid/application/block/block_cache.dart'; -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:app_flowy/plugins/grid/application/grid_service.dart'; import 'package:app_flowy/plugins/grid/application/row/row_cache.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; diff --git a/frontend/app_flowy/lib/plugins/board/application/card/board_date_cell_bloc.dart b/frontend/app_flowy/lib/plugins/board/application/card/board_date_cell_bloc.dart index dd1f77a9d1..a19d7b64a8 100644 --- a/frontend/app_flowy/lib/plugins/board/application/card/board_date_cell_bloc.dart +++ b/frontend/app_flowy/lib/plugins/board/application/card/board_date_cell_bloc.dart @@ -1,5 +1,5 @@ import 'package:app_flowy/plugins/grid/application/cell/cell_service/cell_service.dart'; -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/date_type_option_entities.pb.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; diff --git a/frontend/app_flowy/lib/plugins/board/application/card/card_data_controller.dart b/frontend/app_flowy/lib/plugins/board/application/card/card_data_controller.dart index 377b0dae50..0e7cf6c153 100644 --- a/frontend/app_flowy/lib/plugins/board/application/card/card_data_controller.dart +++ b/frontend/app_flowy/lib/plugins/board/application/card/card_data_controller.dart @@ -1,7 +1,7 @@ import 'package:app_flowy/plugins/board/presentation/card/card_cell_builder.dart'; import 'package:app_flowy/plugins/grid/application/cell/cell_service/cell_service.dart'; import 'package:app_flowy/plugins/grid/application/cell/cell_service/cell_field_notifier.dart'; -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:app_flowy/plugins/grid/application/row/row_cache.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/block_entities.pb.dart'; import 'package:flutter/foundation.dart'; diff --git a/frontend/app_flowy/lib/plugins/board/presentation/board_page.dart b/frontend/app_flowy/lib/plugins/board/presentation/board_page.dart index f52237ad49..d6c5dca609 100644 --- a/frontend/app_flowy/lib/plugins/board/presentation/board_page.dart +++ b/frontend/app_flowy/lib/plugins/board/presentation/board_page.dart @@ -5,7 +5,7 @@ import 'dart:collection'; import 'package:app_flowy/generated/locale_keys.g.dart'; import 'package:app_flowy/plugins/board/application/card/card_data_controller.dart'; import 'package:app_flowy/plugins/grid/application/row/row_cache.dart'; -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:app_flowy/plugins/grid/application/row/row_data_controller.dart'; import 'package:app_flowy/plugins/grid/presentation/widgets/cell/cell_builder.dart'; import 'package:app_flowy/plugins/grid/presentation/widgets/row/row_detail.dart'; @@ -82,8 +82,7 @@ class _BoardContentState extends State { return BlocListener( listener: (context, state) => _handleEditState(state, context), child: BlocBuilder( - buildWhen: (previous, current) => - previous.groupIds.length != current.groupIds.length, + buildWhen: (previous, current) => previous.groupIds != current.groupIds, builder: (context, state) { final theme = context.read(); return Container( @@ -95,6 +94,7 @@ class _BoardContentState extends State { const _ToolbarBlocAdaptor(), Expanded( child: AFBoard( + key: UniqueKey(), scrollManager: scrollManager, scrollController: scrollController, dataController: context.read().boardController, diff --git a/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart b/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart index a270f50951..86beac6830 100644 --- a/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart +++ b/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_setting.dart @@ -1,6 +1,6 @@ import 'package:app_flowy/generated/locale_keys.g.dart'; import 'package:app_flowy/plugins/board/application/toolbar/board_setting_bloc.dart'; -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:app_flowy/plugins/grid/presentation/layout/sizes.dart'; import 'package:app_flowy/plugins/grid/presentation/widgets/toolbar/grid_group.dart'; import 'package:app_flowy/plugins/grid/presentation/widgets/toolbar/grid_property.dart'; diff --git a/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_toolbar.dart b/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_toolbar.dart index bf8d2e3443..8bc4dcb0c7 100644 --- a/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_toolbar.dart +++ b/frontend/app_flowy/lib/plugins/board/presentation/toolbar/board_toolbar.dart @@ -1,4 +1,4 @@ -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:flowy_infra/image.dart'; import 'package:flowy_infra/theme.dart'; import 'package:flowy_infra_ui/style_widget/icon_button.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/block/block_cache.dart b/frontend/app_flowy/lib/plugins/grid/application/block/block_cache.dart index 35ed334cee..b39226f0be 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/block/block_cache.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/block/block_cache.dart @@ -2,7 +2,7 @@ import 'dart:async'; import 'package:flowy_sdk/log.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/block_entities.pb.dart'; -import '../field/field_cache.dart'; +import '../field/field_controller.dart'; import '../row/row_cache.dart'; import 'block_listener.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_service.dart b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_service.dart index 360df60b4e..b0fbee15cd 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_service.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/cell/cell_service/cell_service.dart @@ -16,7 +16,7 @@ import 'package:app_flowy/plugins/grid/application/cell/cell_listener.dart'; import 'package:app_flowy/plugins/grid/application/field/field_service.dart'; import 'dart:convert' show utf8; -import '../../field/field_cache.dart'; +import '../../field/field_controller.dart'; import '../../field/type_option/type_option_context.dart'; import 'cell_field_notifier.dart'; part 'cell_service.freezed.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/cell/date_cell_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/cell/date_cell_bloc.dart index ae840e9e54..e44e15a2fa 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/cell/date_cell_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/cell/date_cell_bloc.dart @@ -1,4 +1,4 @@ -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/date_type_option_entities.pb.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/field_cache.dart b/frontend/app_flowy/lib/plugins/grid/application/field/field_controller.dart similarity index 86% rename from frontend/app_flowy/lib/plugins/grid/application/field/field_cache.dart rename to frontend/app_flowy/lib/plugins/grid/application/field/field_controller.dart index da12afff97..e9bda8eef5 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/field_cache.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/field_controller.dart @@ -2,10 +2,12 @@ import 'dart:collection'; import 'package:app_flowy/plugins/grid/application/field/grid_listener.dart'; import 'package:app_flowy/plugins/grid/application/grid_service.dart'; import 'package:app_flowy/plugins/grid/application/setting/setting_listener.dart'; +import 'package:app_flowy/plugins/grid/application/setting/setting_service.dart'; import 'package:dartz/dartz.dart'; import 'package:flowy_sdk/log.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-grid/setting_entities.pb.dart'; import 'package:flutter/foundation.dart'; import '../row/row_cache.dart'; @@ -35,11 +37,17 @@ class GridFieldController { final Map _changesetCallbackMap = {}; _GridFieldNotifier? _fieldNotifier = _GridFieldNotifier(); + List _groupFieldIds = []; final GridFFIService _gridFFIService; + final SettingFFIService _settingFFIService; + + List get fieldContexts => + [..._fieldNotifier?.fieldContexts ?? []]; GridFieldController({required this.gridId}) : _fieldListener = GridFieldsListener(gridId: gridId), _gridFFIService = GridFFIService(gridId: gridId), + _settingFFIService = SettingFFIService(viewId: gridId), _settingListener = SettingListener(gridId: gridId) { //Listen on field's changes _fieldListener.start(onFieldsChanged: (result) { @@ -59,24 +67,38 @@ class GridFieldController { //Listen on setting changes _settingListener.start(onSettingUpdated: (result) { result.fold( - (setting) { - final List groupFieldIds = setting.groupConfigurations.items - .map((item) => item.groupFieldId) - .toList(); - bool isChanged = false; - if (_fieldNotifier != null) { - for (var field in _fieldNotifier!.fieldContexts) { - if (groupFieldIds.contains(field.id)) { - field._isGroupField = true; - isChanged = true; - } - } - if (isChanged) _fieldNotifier?.notify(); - } - }, + (setting) => _updateFieldsWhenSettingChanged(setting), (r) => Log.error(r), ); }); + + _settingFFIService.getSetting().then((result) { + result.fold( + (setting) => _updateFieldsWhenSettingChanged(setting), + (err) => Log.error(err), + ); + }); + } + + void _updateFieldsWhenSettingChanged(GridSettingPB setting) { + _groupFieldIds = setting.groupConfigurations.items + .map((item) => item.groupFieldId) + .toList(); + + _updateFieldContexts(); + } + + void _updateFieldContexts() { + if (_fieldNotifier != null) { + for (var field in _fieldNotifier!.fieldContexts) { + if (_groupFieldIds.contains(field.id)) { + field._isGroupField = true; + } else { + field._isGroupField = false; + } + } + _fieldNotifier?.notify(); + } } Future dispose() async { @@ -85,9 +107,6 @@ class GridFieldController { _fieldNotifier = null; } - List get fieldContexts => - [..._fieldNotifier?.fieldContexts ?? []]; - Future> loadFields( {required List fieldIds}) async { final result = await _gridFFIService.getFields(fieldIds: fieldIds); @@ -97,6 +116,7 @@ class GridFieldController { _fieldNotifier?.fieldContexts = newFields.items .map((field) => GridFieldContext(field: field)) .toList(); + _updateFieldContexts(); return left(unit); }, (err) => right(err), diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/field_service.dart b/frontend/app_flowy/lib/plugins/grid/application/field/field_service.dart index 5466a8de08..28676d62c1 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/field_service.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/field_service.dart @@ -6,7 +6,6 @@ import 'package:flowy_sdk/protobuf/flowy-grid/grid_entities.pb.dart'; import 'package:flutter/foundation.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; -import 'field_cache.dart'; part 'field_service.freezed.dart'; /// FieldService consists of lots of event functions. We define the events in the backend(Rust), diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart b/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart index 192c4f86f0..632e333911 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_context.dart @@ -1,4 +1,3 @@ -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; import 'package:flowy_sdk/dispatch/dispatch.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/checkbox_type_option.pb.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_data_controller.dart b/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_data_controller.dart index 6f757be71d..65bd057ac5 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_data_controller.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/field/type_option/type_option_data_controller.dart @@ -1,4 +1,4 @@ -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:flowy_infra/notifier.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/grid_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/grid_bloc.dart index 139b08251e..0aceab8ccf 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/grid_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/grid_bloc.dart @@ -7,7 +7,7 @@ import 'package:flowy_sdk/protobuf/flowy-grid/protobuf.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'block/block_cache.dart'; -import 'field/field_cache.dart'; +import 'field/field_controller.dart'; import 'grid_data_controller.dart'; import 'row/row_cache.dart'; import 'dart:collection'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/grid_data_controller.dart b/frontend/app_flowy/lib/plugins/grid/application/grid_data_controller.dart index 6caf699641..a8e1a27c39 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/grid_data_controller.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/grid_data_controller.dart @@ -8,7 +8,7 @@ import 'package:flowy_sdk/protobuf/flowy-grid/grid_entities.pb.dart'; import 'dart:async'; import 'package:dartz/dartz.dart'; import 'block/block_cache.dart'; -import 'field/field_cache.dart'; +import 'field/field_controller.dart'; import 'prelude.dart'; import 'row/row_cache.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/grid_header_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/grid_header_bloc.dart index b7e1ade527..c6c9b1fa5b 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/grid_header_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/grid_header_bloc.dart @@ -4,7 +4,7 @@ import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'dart:async'; -import 'field/field_cache.dart'; +import 'field/field_controller.dart'; part 'grid_header_bloc.freezed.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/row/row_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/row/row_bloc.dart index c5676616b3..5e14c2e445 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/row/row_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/row/row_bloc.dart @@ -1,6 +1,6 @@ import 'dart:collection'; import 'package:app_flowy/plugins/grid/application/cell/cell_service/cell_service.dart'; -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/row/row_cache.dart b/frontend/app_flowy/lib/plugins/grid/application/row/row_cache.dart index d1e8eaa1bf..6e25742974 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/row/row_cache.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/row/row_cache.dart @@ -1,6 +1,6 @@ import 'dart:collection'; import 'package:app_flowy/plugins/grid/application/cell/cell_service/cell_service.dart'; -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:flowy_sdk/dispatch/dispatch.dart'; import 'package:flowy_sdk/log.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/block_entities.pb.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/row/row_data_controller.dart b/frontend/app_flowy/lib/plugins/grid/application/row/row_data_controller.dart index 5ed0f24965..e5fc6161bb 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/row/row_data_controller.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/row/row_data_controller.dart @@ -2,7 +2,7 @@ import 'package:app_flowy/plugins/grid/application/cell/cell_service/cell_field_ import 'package:flutter/material.dart'; import '../../presentation/widgets/cell/cell_builder.dart'; import '../cell/cell_service/cell_service.dart'; -import '../field/field_cache.dart'; +import '../field/field_controller.dart'; import 'row_cache.dart'; typedef OnRowChanged = void Function(GridCellMap, RowsChangedReason); diff --git a/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart index b960a2c2f0..8b58d5ea0c 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/setting/group_bloc.dart @@ -1,46 +1,38 @@ -import 'package:app_flowy/plugins/grid/application/field/field_service.dart'; -import 'package:flowy_sdk/log.dart'; +import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'dart:async'; -import '../field/field_cache.dart'; -import 'setting_controller.dart'; +import '../field/field_controller.dart'; +import 'setting_service.dart'; part 'group_bloc.freezed.dart'; class GridGroupBloc extends Bloc { final GridFieldController _fieldController; - final SettingController _settingController; + final SettingFFIService _settingFFIService; Function(List)? _onFieldsFn; GridGroupBloc( {required String viewId, required GridFieldController fieldController}) : _fieldController = fieldController, - _settingController = SettingController(viewId: viewId), + _settingFFIService = SettingFFIService(viewId: viewId), super(GridGroupState.initial(viewId, fieldController.fieldContexts)) { on( (event, emit) async { - await event.map( - initial: (_Initial value) { + event.when( + initial: () { _startListening(); }, - setFieldVisibility: (_SetFieldVisibility value) async { - final fieldService = - FieldService(gridId: viewId, fieldId: value.fieldId); - final result = - await fieldService.updateField(visibility: value.visibility); - result.fold( - (l) => null, - (err) => Log.error(err), + didReceiveFieldUpdate: (fieldContexts) { + emit(state.copyWith(fieldContexts: fieldContexts)); + }, + setGroupByField: (String fieldId, FieldType fieldType) { + _settingFFIService.groupByField( + fieldId: fieldId, + fieldType: fieldType, ); }, - didReceiveFieldUpdate: (_DidReceiveFieldUpdate value) { - emit(state.copyWith(fieldContexts: value.fields)); - }, - moveField: (_MoveField value) { - // - }, ); }, ); @@ -56,28 +48,24 @@ class GridGroupBloc extends Bloc { } void _startListening() { - _onFieldsFn = (fields) => add(GridGroupEvent.didReceiveFieldUpdate(fields)); + _onFieldsFn = (fieldContexts) => + add(GridGroupEvent.didReceiveFieldUpdate(fieldContexts)); _fieldController.addListener( onFields: _onFieldsFn, listenWhen: () => !isClosed, ); - - _settingController.startListeing( - onSettingUpdated: (setting) {}, - onError: (err) {}, - ); } } @freezed class GridGroupEvent with _$GridGroupEvent { const factory GridGroupEvent.initial() = _Initial; - const factory GridGroupEvent.setFieldVisibility( - String fieldId, bool visibility) = _SetFieldVisibility; + const factory GridGroupEvent.setGroupByField( + String fieldId, + FieldType fieldType, + ) = _GroupByField; const factory GridGroupEvent.didReceiveFieldUpdate( List fields) = _DidReceiveFieldUpdate; - const factory GridGroupEvent.moveField(int fromIndex, int toIndex) = - _MoveField; } @freezed diff --git a/frontend/app_flowy/lib/plugins/grid/application/setting/property_bloc.dart b/frontend/app_flowy/lib/plugins/grid/application/setting/property_bloc.dart index 2e268aff84..c54f16ae12 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/setting/property_bloc.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/setting/property_bloc.dart @@ -4,7 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'dart:async'; -import '../field/field_cache.dart'; +import '../field/field_controller.dart'; part 'property_bloc.freezed.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/application/setting/setting_service.dart b/frontend/app_flowy/lib/plugins/grid/application/setting/setting_service.dart index 8d3774ec1c..b050809bb5 100644 --- a/frontend/app_flowy/lib/plugins/grid/application/setting/setting_service.dart +++ b/frontend/app_flowy/lib/plugins/grid/application/setting/setting_service.dart @@ -1,7 +1,9 @@ import 'package:dartz/dartz.dart'; import 'package:flowy_sdk/dispatch/dispatch.dart'; import 'package:flowy_sdk/protobuf/flowy-error/errors.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-grid/field_entities.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/grid_entities.pb.dart'; +import 'package:flowy_sdk/protobuf/flowy-grid/group.pb.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/setting_entities.pb.dart'; class SettingFFIService { @@ -13,4 +15,18 @@ class SettingFFIService { final payload = GridIdPB.create()..value = viewId; return GridEventGetGridSetting(payload).send(); } + + Future> groupByField({ + required String fieldId, + required FieldType fieldType, + }) { + final insertGroupPayload = InsertGroupPayloadPB.create() + ..fieldId = fieldId + ..fieldType = fieldType; + final payload = GridSettingChangesetPayloadPB.create() + ..gridId = viewId + ..insertGroup = insertGroupPayload; + + return GridEventUpdateGridSetting(payload).send(); + } } diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/grid_page.dart b/frontend/app_flowy/lib/plugins/grid/presentation/grid_page.dart index e8d251c04f..be9d2fe4e3 100755 --- a/frontend/app_flowy/lib/plugins/grid/presentation/grid_page.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/grid_page.dart @@ -1,4 +1,4 @@ -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:app_flowy/plugins/grid/application/row/row_data_controller.dart'; import 'package:app_flowy/startup/startup.dart'; import 'package:app_flowy/plugins/grid/application/grid_bloc.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/layout/layout.dart b/frontend/app_flowy/lib/plugins/grid/presentation/layout/layout.dart index 5d09200b33..72b1eb643d 100755 --- a/frontend/app_flowy/lib/plugins/grid/presentation/layout/layout.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/layout/layout.dart @@ -1,4 +1,4 @@ -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'sizes.dart'; class GridLayout { diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/field_cell.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/field_cell.dart index fd5f087c40..c1de0eca31 100755 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/field_cell.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/field_cell.dart @@ -1,4 +1,3 @@ -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; import 'package:app_flowy/plugins/grid/application/field/field_cell_bloc.dart'; import 'package:app_flowy/plugins/grid/application/field/field_service.dart'; import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/grid_header.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/grid_header.dart index fd0a0c2863..05c1faec08 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/grid_header.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/grid_header.dart @@ -1,5 +1,5 @@ import 'package:app_flowy/generated/locale_keys.g.dart'; -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart'; import 'package:app_flowy/startup/startup.dart'; import 'package:app_flowy/plugins/grid/application/prelude.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/type_option/builder.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/type_option/builder.dart index bce95edb96..cfa2f9291f 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/type_option/builder.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/header/type_option/builder.dart @@ -1,6 +1,6 @@ import 'dart:typed_data'; -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_context.dart'; import 'package:app_flowy/plugins/grid/application/field/type_option/type_option_data_controller.dart'; import 'package:flowy_sdk/protobuf/flowy-grid/checkbox_type_option.pb.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/row_detail.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/row_detail.dart index 1fbe1bfb84..266be35a36 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/row_detail.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/row/row_detail.dart @@ -215,7 +215,7 @@ class _RowDetailCell extends StatelessWidget { SizedBox( width: 150, child: FieldCellButton( - field: cellId.fieldContext.fieldContext, + field: cellId.fieldContext.field, onTap: () => _showFieldEditor(context), ), ), @@ -233,7 +233,7 @@ class _RowDetailCell extends StatelessWidget { fieldName: cellId.fieldContext.name, typeOptionLoader: FieldTypeOptionLoader( gridId: cellId.gridId, - field: cellId.fieldContext.fieldContext, + field: cellId.fieldContext.field, ), ).show(context); } diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart index 3550c1274c..0a82eef4bb 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_group.dart @@ -1,8 +1,9 @@ -import 'package:app_flowy/plugins/grid/application/field/field_cache.dart'; +import 'package:app_flowy/plugins/grid/application/field/field_controller.dart'; import 'package:app_flowy/plugins/grid/presentation/layout/sizes.dart'; import 'package:app_flowy/plugins/grid/presentation/widgets/header/field_type_extension.dart'; import 'package:flowy_infra/image.dart'; import 'package:flowy_infra/theme.dart'; +import 'package:flowy_infra_ui/flowy_infra_ui.dart'; import 'package:flowy_infra_ui/style_widget/button.dart'; import 'package:flowy_infra_ui/style_widget/text.dart'; import 'package:flowy_infra_ui/widget/spacing.dart'; @@ -29,10 +30,10 @@ class GridGroupList extends StatelessWidget { )..add(const GridGroupEvent.initial()), child: BlocBuilder( builder: (context, state) { - final cells = state.fieldContexts.map((field) { + final cells = state.fieldContexts.map((fieldContext) { return _GridGroupCell( - fieldContext: field, - key: ValueKey(field.id), + fieldContext: fieldContext, + key: ValueKey(fieldContext.id), ); }).toList(); @@ -51,7 +52,22 @@ class GridGroupList extends StatelessWidget { ); } - void show(BuildContext context) {} + void show(BuildContext context) { + FlowyOverlay.of(context).insertWithAnchor( + widget: OverlayContainer( + constraints: BoxConstraints.loose(const Size(260, 400)), + child: this, + ), + identifier: identifier(), + anchorContext: context, + anchorDirection: AnchorDirection.bottomRight, + style: FlowyOverlayStyle(blur: false), + ); + } + + static String identifier() { + return (GridGroupList).toString(); + } } class _GridGroupCell extends StatelessWidget { @@ -61,23 +77,34 @@ class _GridGroupCell extends StatelessWidget { @override Widget build(BuildContext context) { - final theme = context.watch(); + final theme = context.read(); - // final checkmark = field.visibility - // ? svgWidget('home/show', color: theme.iconColor) - // : svgWidget('home/hide', color: theme.iconColor); + Widget? rightIcon; + if (fieldContext.isGroupField) { + rightIcon = Padding( + padding: const EdgeInsets.all(2.0), + child: svgWidget("grid/checkmark"), + ); + } - // Padding( - // padding: const EdgeInsets.only(right: 6), - // child: svgWidget("grid/checkmark"), - // ), - - return FlowyButton( - text: FlowyText.medium(fieldContext.name, fontSize: 12), - hoverColor: theme.hover, - leftIcon: - svgWidget(fieldContext.fieldType.iconName(), color: theme.iconColor), - onTap: () {}, + return SizedBox( + height: GridSize.typeOptionItemHeight, + child: FlowyButton( + text: FlowyText.medium(fieldContext.name, fontSize: 12), + hoverColor: theme.hover, + leftIcon: svgWidget(fieldContext.fieldType.iconName(), + color: theme.iconColor), + rightIcon: rightIcon, + onTap: () { + context.read().add( + GridGroupEvent.setGroupByField( + fieldContext.id, + fieldContext.fieldType, + ), + ); + FlowyOverlay.of(context).remove(GridGroupList.identifier()); + }, + ), ); } } diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart index e57ff26bcb..f5acbcba2a 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_property.dart @@ -13,7 +13,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:styled_widget/styled_widget.dart'; -import '../../../application/field/field_cache.dart'; +import '../../../application/field/field_controller.dart'; import '../../layout/sizes.dart'; import '../header/field_editor.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_setting.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_setting.dart index 4bbcd66fe2..c793d7eef1 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_setting.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_setting.dart @@ -11,7 +11,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:app_flowy/generated/locale_keys.g.dart'; -import '../../../application/field/field_cache.dart'; +import '../../../application/field/field_controller.dart'; import '../../layout/sizes.dart'; import 'grid_property.dart'; diff --git a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_toolbar.dart b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_toolbar.dart index 56c6947430..61ea099f56 100644 --- a/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_toolbar.dart +++ b/frontend/app_flowy/lib/plugins/grid/presentation/widgets/toolbar/grid_toolbar.dart @@ -5,7 +5,7 @@ import 'package:flowy_infra_ui/style_widget/icon_button.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; -import '../../../application/field/field_cache.dart'; +import '../../../application/field/field_controller.dart'; import '../../layout/sizes.dart'; import 'grid_setting.dart'; diff --git a/frontend/app_flowy/lib/startup/deps_resolver.dart b/frontend/app_flowy/lib/startup/deps_resolver.dart index cd73c3fbbc..cd3cc00ec6 100644 --- a/frontend/app_flowy/lib/startup/deps_resolver.dart +++ b/frontend/app_flowy/lib/startup/deps_resolver.dart @@ -21,7 +21,7 @@ import 'package:flowy_sdk/protobuf/flowy-user/user_profile.pb.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:get_it/get_it.dart'; -import '../plugins/grid/application/field/field_cache.dart'; +import '../plugins/grid/application/field/field_controller.dart'; class DependencyResolver { static Future resolve(GetIt getIt) async { diff --git a/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_data.dart b/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_data.dart index 4c20161691..47e74b37f5 100644 --- a/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_data.dart +++ b/frontend/app_flowy/packages/appflowy_board/lib/src/widgets/board_data.dart @@ -91,6 +91,7 @@ class AFBoardDataController extends ChangeNotifier void clear() { _columnDatas.clear(); + _columnControllers.clear(); notifyListeners(); } diff --git a/frontend/rust-lib/flowy-grid/src/entities/filter_entities/util.rs b/frontend/rust-lib/flowy-grid/src/entities/filter_entities/util.rs index f8588944e7..c6737e8e76 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/filter_entities/util.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/filter_entities/util.rs @@ -78,7 +78,7 @@ pub struct DeleteFilterParams { } #[derive(ProtoBuf, Debug, Default, Clone)] -pub struct CreateGridFilterPayloadPB { +pub struct InsertFilterPayloadPB { #[pb(index = 1)] pub field_id: String, @@ -92,7 +92,7 @@ pub struct CreateGridFilterPayloadPB { pub content: Option, } -impl CreateGridFilterPayloadPB { +impl InsertFilterPayloadPB { #[allow(dead_code)] pub fn new>(field_rev: &FieldRevision, condition: T, content: Option) -> Self { Self { @@ -104,10 +104,10 @@ impl CreateGridFilterPayloadPB { } } -impl TryInto for CreateGridFilterPayloadPB { +impl TryInto for InsertFilterPayloadPB { type Error = ErrorCode; - fn try_into(self) -> Result { + fn try_into(self) -> Result { let field_id = NotEmptyStr::parse(self.field_id) .map_err(|_| ErrorCode::FieldIdIsEmpty)? .0; @@ -130,7 +130,7 @@ impl TryInto for CreateGridFilterPayloadPB { } } - Ok(CreateFilterParams { + Ok(InsertFilterParams { field_id, field_type_rev: self.field_type.into(), condition, @@ -139,7 +139,7 @@ impl TryInto for CreateGridFilterPayloadPB { } } -pub struct CreateFilterParams { +pub struct InsertFilterParams { pub field_id: String, pub field_type_rev: FieldTypeRevision, pub condition: u8, diff --git a/frontend/rust-lib/flowy-grid/src/entities/group_entities/group.rs b/frontend/rust-lib/flowy-grid/src/entities/group_entities/group.rs index 3ed53080ef..de6f920341 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/group_entities/group.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/group_entities/group.rs @@ -130,7 +130,7 @@ impl std::convert::From>> for RepeatedGridGr } #[derive(Eq, PartialEq, ProtoBuf, Debug, Default, Clone)] -pub struct CreateGridGroupPayloadPB { +pub struct InsertGroupPayloadPB { #[pb(index = 1)] pub field_id: String, @@ -138,22 +138,22 @@ pub struct CreateGridGroupPayloadPB { pub field_type: FieldType, } -impl TryInto for CreateGridGroupPayloadPB { +impl TryInto for InsertGroupPayloadPB { type Error = ErrorCode; - fn try_into(self) -> Result { + fn try_into(self) -> Result { let field_id = NotEmptyStr::parse(self.field_id) .map_err(|_| ErrorCode::FieldIdIsEmpty)? .0; - Ok(CreatGroupParams { + Ok(InsertGroupParams { field_id, field_type_rev: self.field_type.into(), }) } } -pub struct CreatGroupParams { +pub struct InsertGroupParams { pub field_id: String, pub field_type_rev: FieldTypeRevision, } diff --git a/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs b/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs index 47efc11861..bbf5af831f 100644 --- a/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs +++ b/frontend/rust-lib/flowy-grid/src/entities/setting_entities.rs @@ -1,13 +1,12 @@ use crate::entities::{ - CreatGroupParams, CreateFilterParams, CreateGridFilterPayloadPB, CreateGridGroupPayloadPB, DeleteFilterParams, - DeleteFilterPayloadPB, DeleteGroupParams, DeleteGroupPayloadPB, RepeatedGridFilterConfigurationPB, + DeleteFilterParams, DeleteFilterPayloadPB, DeleteGroupParams, DeleteGroupPayloadPB, InsertFilterParams, + InsertFilterPayloadPB, InsertGroupParams, InsertGroupPayloadPB, RepeatedGridFilterConfigurationPB, RepeatedGridGroupConfigurationPB, }; use flowy_derive::{ProtoBuf, ProtoBuf_Enum}; use flowy_error::ErrorCode; use flowy_grid_data_model::parser::NotEmptyStr; use flowy_grid_data_model::revision::LayoutRevision; -use std::collections::HashMap; use std::convert::TryInto; use strum::IntoEnumIterator; use strum_macros::EnumIter; @@ -85,13 +84,13 @@ pub struct GridSettingChangesetPayloadPB { pub layout_type: GridLayout, #[pb(index = 3, one_of)] - pub insert_filter: Option, + pub insert_filter: Option, #[pb(index = 4, one_of)] pub delete_filter: Option, #[pb(index = 5, one_of)] - pub insert_group: Option, + pub insert_group: Option, #[pb(index = 6, one_of)] pub delete_group: Option, @@ -102,7 +101,7 @@ impl TryInto for GridSettingChangesetPayloadPB { fn try_into(self) -> Result { let view_id = NotEmptyStr::parse(self.grid_id) - .map_err(|_| ErrorCode::FieldIdIsEmpty)? + .map_err(|_| ErrorCode::ViewIdInvalid)? .0; let insert_filter = match self.insert_filter { @@ -139,9 +138,9 @@ impl TryInto for GridSettingChangesetPayloadPB { pub struct GridSettingChangesetParams { pub grid_id: String, pub layout_type: LayoutRevision, - pub insert_filter: Option, + pub insert_filter: Option, pub delete_filter: Option, - pub insert_group: Option, + pub insert_group: Option, pub delete_group: Option, } diff --git a/frontend/rust-lib/flowy-grid/src/event_handler.rs b/frontend/rust-lib/flowy-grid/src/event_handler.rs index 8a04b2ea30..c9b6cf4662 100644 --- a/frontend/rust-lib/flowy-grid/src/event_handler.rs +++ b/frontend/rust-lib/flowy-grid/src/event_handler.rs @@ -35,6 +35,32 @@ pub(crate) async fn get_grid_setting_handler( data_result(grid_setting) } +#[tracing::instrument(level = "trace", skip(data, manager), err)] +pub(crate) async fn update_grid_setting_handler( + data: Data, + manager: AppData>, +) -> Result<(), FlowyError> { + let params: GridSettingChangesetParams = data.into_inner().try_into()?; + + let editor = manager.get_grid_editor(¶ms.grid_id)?; + if let Some(insert_params) = params.insert_group { + let _ = editor.create_group(insert_params).await?; + } + + if let Some(delete_params) = params.delete_group { + let _ = editor.delete_group(delete_params).await?; + } + + if let Some(create_filter) = params.insert_filter { + let _ = editor.create_filter(create_filter).await?; + } + + if let Some(delete_filter) = params.delete_filter { + let _ = editor.delete_filter(delete_filter).await?; + } + Ok(()) +} + #[tracing::instrument(level = "debug", skip(data, manager), err)] pub(crate) async fn get_grid_blocks_handler( data: Data, diff --git a/frontend/rust-lib/flowy-grid/src/event_map.rs b/frontend/rust-lib/flowy-grid/src/event_map.rs index a78bcb5ed3..e0a5ffcf1b 100644 --- a/frontend/rust-lib/flowy-grid/src/event_map.rs +++ b/frontend/rust-lib/flowy-grid/src/event_map.rs @@ -11,7 +11,7 @@ pub fn create(grid_manager: Arc) -> Module { .event(GridEvent::GetGrid, get_grid_handler) .event(GridEvent::GetGridBlocks, get_grid_blocks_handler) .event(GridEvent::GetGridSetting, get_grid_setting_handler) - // .event(GridEvent::UpdateGridSetting, update_grid_setting_handler) + .event(GridEvent::UpdateGridSetting, update_grid_setting_handler) // Field .event(GridEvent::GetFields, get_fields_handler) .event(GridEvent::UpdateField, update_field_handler) @@ -75,8 +75,8 @@ pub enum GridEvent { /// [UpdateGridSetting] event is used to update the grid's settings. /// - /// The event handler accepts [GridIdPB] and return errors if failed to modify the grid's settings. - #[event(input = "GridIdPB", input = "GridSettingChangesetPayloadPB")] + /// The event handler accepts [GridSettingChangesetPayloadPB] and return errors if failed to modify the grid's settings. + #[event(input = "GridSettingChangesetPayloadPB")] UpdateGridSetting = 3, /// [GetFields] event is used to get the grid's settings. @@ -225,4 +225,7 @@ pub enum GridEvent { #[event(input = "MoveGroupRowPayloadPB")] MoveGroupRow = 112, + + #[event(input = "MoveGroupRowPayloadPB")] + GroupByField = 113, } diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs index 2f72f48d33..320d41cbff 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_editor.rs @@ -211,7 +211,7 @@ impl GridRevisionEditor { Ok(()) } - pub async fn group_field(&self, field_id: &str) -> FlowyResult<()> { + pub async fn group_by_field(&self, field_id: &str) -> FlowyResult<()> { let _ = self.view_manager.group_by_field(field_id).await?; Ok(()) } @@ -536,8 +536,16 @@ impl GridRevisionEditor { self.view_manager.get_filters().await } - pub async fn update_filter(&self, params: CreateFilterParams) -> FlowyResult<()> { - let _ = self.view_manager.update_filter(params).await?; + pub async fn create_group(&self, params: InsertGroupParams) -> FlowyResult<()> { + self.view_manager.insert_or_update_group(params).await + } + + pub async fn delete_group(&self, params: DeleteGroupParams) -> FlowyResult<()> { + self.view_manager.delete_group(params).await + } + + pub async fn create_filter(&self, params: InsertFilterParams) -> FlowyResult<()> { + let _ = self.view_manager.insert_or_update_filter(params).await?; Ok(()) } diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs b/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs index 71d2fb372a..ab8e8bd41f 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_view_editor.rs @@ -1,14 +1,15 @@ use crate::dart_notification::{send_dart_notification, GridNotification}; use crate::entities::{ - CreateFilterParams, CreateRowParams, DeleteFilterParams, GridFilterConfigurationPB, GridGroupConfigurationPB, - GridLayout, GridLayoutPB, GridSettingPB, GroupChangesetPB, GroupPB, GroupViewChangesetPB, InsertedGroupPB, - InsertedRowPB, MoveGroupParams, RepeatedGridFilterConfigurationPB, RepeatedGridGroupConfigurationPB, RowPB, + CreateRowParams, DeleteFilterParams, DeleteGroupParams, GridFilterConfigurationPB, GridGroupConfigurationPB, + GridLayout, GridLayoutPB, GridSettingPB, GroupChangesetPB, GroupPB, GroupViewChangesetPB, InsertFilterParams, + InsertGroupParams, InsertedGroupPB, InsertedRowPB, MoveGroupParams, RepeatedGridFilterConfigurationPB, + RepeatedGridGroupConfigurationPB, RowPB, }; use crate::services::grid_editor_task::GridServiceTaskScheduler; use crate::services::grid_view_manager::{GridViewFieldDelegate, GridViewRowDelegate}; use crate::services::group::{ - find_group_field, make_group_controller, GroupConfigurationReader, GroupConfigurationWriter, GroupController, - MoveGroupRowContext, + default_group_configuration, find_group_field, make_group_controller, GroupConfigurationReader, + GroupConfigurationWriter, GroupController, MoveGroupRowContext, }; use flowy_error::{FlowyError, FlowyResult}; use flowy_grid_data_model::revision::{ @@ -19,7 +20,6 @@ use flowy_revision::{RevisionCloudService, RevisionManager, RevisionObjectBuilde use flowy_sync::client_grid::{GridViewRevisionChangeset, GridViewRevisionPad}; use flowy_sync::entities::revision::Revision; use lib_infra::future::{wrap_future, AFFuture, FutureResult}; -use std::collections::HashMap; use std::future::Future; use std::sync::Arc; use tokio::sync::RwLock; @@ -210,15 +210,40 @@ impl GridViewRevisionEditor { } } - pub(crate) async fn insert_filter(&self, insert_filter: CreateFilterParams) -> FlowyResult<()> { + pub(crate) async fn insert_group(&self, params: InsertGroupParams) -> FlowyResult<()> { + if let Some(field_rev) = self.field_delegate.get_field_rev(¶ms.field_id).await { + let _ = self + .modify(|pad| { + let configuration = default_group_configuration(&field_rev); + let changeset = pad.insert_group(¶ms.field_id, ¶ms.field_type_rev, configuration)?; + Ok(changeset) + }) + .await?; + } + if self.group_controller.read().await.field_id() != params.field_id { + let _ = self.group_by_field(¶ms.field_id).await?; + self.notify_did_update_setting().await; + } + Ok(()) + } + + pub(crate) async fn delete_group(&self, params: DeleteGroupParams) -> FlowyResult<()> { + self.modify(|pad| { + let changeset = pad.delete_filter(¶ms.field_id, ¶ms.field_type_rev, ¶ms.group_id)?; + Ok(changeset) + }) + .await + } + + pub(crate) async fn insert_filter(&self, params: InsertFilterParams) -> FlowyResult<()> { self.modify(|pad| { let filter_rev = FilterConfigurationRevision { id: gen_grid_filter_id(), - field_id: insert_filter.field_id.clone(), - condition: insert_filter.condition, - content: insert_filter.content, + field_id: params.field_id.clone(), + condition: params.condition, + content: params.content, }; - let changeset = pad.insert_filter(&insert_filter.field_id, &insert_filter.field_type_rev, filter_rev)?; + let changeset = pad.insert_filter(¶ms.field_id, ¶ms.field_type_rev, filter_rev)?; Ok(changeset) }) .await @@ -279,6 +304,13 @@ impl GridViewRevisionEditor { Ok(()) } + async fn notify_did_update_setting(&self) { + let setting = self.get_setting().await; + send_dart_notification(&self.view_id, GridNotification::DidUpdateGridSetting) + .payload(setting) + .send(); + } + pub async fn notify_did_update_group(&self, changeset: GroupChangesetPB) { send_dart_notification(&changeset.group_id, GridNotification::DidUpdateGroup) .payload(changeset) diff --git a/frontend/rust-lib/flowy-grid/src/services/grid_view_manager.rs b/frontend/rust-lib/flowy-grid/src/services/grid_view_manager.rs index 460be37a44..b1041a818c 100644 --- a/frontend/rust-lib/flowy-grid/src/services/grid_view_manager.rs +++ b/frontend/rust-lib/flowy-grid/src/services/grid_view_manager.rs @@ -1,6 +1,6 @@ use crate::entities::{ - CreateFilterParams, CreateRowParams, DeleteFilterParams, GridFilterConfigurationPB, GridSettingPB, MoveGroupParams, - RepeatedGridGroupPB, RowPB, + CreateRowParams, DeleteFilterParams, DeleteGroupParams, GridFilterConfigurationPB, GridSettingPB, + InsertFilterParams, InsertGroupParams, MoveGroupParams, RepeatedGridGroupPB, RowPB, }; use crate::manager::GridUser; use crate::services::grid_editor_task::GridServiceTaskScheduler; @@ -110,14 +110,14 @@ impl GridViewManager { Ok(view_editor.get_filters().await) } - pub(crate) async fn update_filter(&self, insert_filter: CreateFilterParams) -> FlowyResult<()> { + pub(crate) async fn insert_or_update_filter(&self, params: InsertFilterParams) -> FlowyResult<()> { let view_editor = self.get_default_view_editor().await?; - view_editor.insert_filter(insert_filter).await + view_editor.insert_filter(params).await } - pub(crate) async fn delete_filter(&self, delete_filter: DeleteFilterParams) -> FlowyResult<()> { + pub(crate) async fn delete_filter(&self, params: DeleteFilterParams) -> FlowyResult<()> { let view_editor = self.get_default_view_editor().await?; - view_editor.delete_filter(delete_filter).await + view_editor.delete_filter(params).await } pub(crate) async fn load_groups(&self) -> FlowyResult { @@ -126,6 +126,16 @@ impl GridViewManager { Ok(RepeatedGridGroupPB { items: groups }) } + pub(crate) async fn insert_or_update_group(&self, params: InsertGroupParams) -> FlowyResult<()> { + let view_editor = self.get_default_view_editor().await?; + view_editor.insert_group(params).await + } + + pub(crate) async fn delete_group(&self, params: DeleteGroupParams) -> FlowyResult<()> { + let view_editor = self.get_default_view_editor().await?; + view_editor.delete_group(params).await + } + pub(crate) async fn move_group(&self, params: MoveGroupParams) -> FlowyResult<()> { let view_editor = self.get_default_view_editor().await?; let _ = view_editor.move_group(params).await?; diff --git a/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs b/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs index 196f619290..c110d01ad4 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/configuration.rs @@ -133,6 +133,7 @@ where } } + #[tracing::instrument(level = "debug", skip(self, generated_groups), err)] pub(crate) fn init_groups( &mut self, generated_groups: Vec, @@ -316,7 +317,8 @@ where fn merge_groups(old_groups: &[GroupRevision], new_groups: Vec) -> MergeGroupResult { let mut merge_result = MergeGroupResult::new(); if old_groups.is_empty() { - merge_result.all_group_revs = new_groups; + merge_result.all_group_revs = new_groups.clone(); + merge_result.new_group_revs = new_groups; return merge_result; } diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller.rs index d2784f0e77..54d001d4a7 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller.rs @@ -89,7 +89,7 @@ where let field_type_rev = field_rev.ty; let type_option = field_rev.get_type_option::(field_type_rev); let groups = G::generate_groups(&field_rev.id, &configuration, &type_option); - let _ = configuration.init_groups(groups, false)?; + let _ = configuration.init_groups(groups, true)?; Ok(Self { field_id: field_rev.id.clone(), diff --git a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/default_controller.rs b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/default_controller.rs index 4ce5523404..938bdd127e 100644 --- a/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/default_controller.rs +++ b/frontend/rust-lib/flowy-grid/src/services/group/controller_impls/default_controller.rs @@ -16,7 +16,7 @@ impl DefaultGroupController { let group = Group::new( DEFAULT_GROUP_CONTROLLER.to_owned(), field_rev.id.clone(), - "Oops".to_owned(), + "".to_owned(), "".to_owned(), ); Self { diff --git a/frontend/rust-lib/flowy-grid/src/services/setting/setting_builder.rs b/frontend/rust-lib/flowy-grid/src/services/setting/setting_builder.rs index 16ee630cc7..2bf8f1bbeb 100644 --- a/frontend/rust-lib/flowy-grid/src/services/setting/setting_builder.rs +++ b/frontend/rust-lib/flowy-grid/src/services/setting/setting_builder.rs @@ -1,4 +1,4 @@ -use crate::entities::{CreateFilterParams, DeleteFilterParams, GridLayout, GridSettingChangesetParams}; +use crate::entities::{DeleteFilterParams, GridLayout, GridSettingChangesetParams, InsertFilterParams}; pub struct GridSettingChangesetBuilder { params: GridSettingChangesetParams, @@ -17,7 +17,7 @@ impl GridSettingChangesetBuilder { Self { params } } - pub fn insert_filter(mut self, params: CreateFilterParams) -> Self { + pub fn insert_filter(mut self, params: InsertFilterParams) -> Self { self.params.insert_filter = Some(params); self } diff --git a/frontend/rust-lib/flowy-grid/tests/grid/filter_test/script.rs b/frontend/rust-lib/flowy-grid/tests/grid/filter_test/script.rs index a1f0b8a0c6..0eff7edaa4 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/filter_test/script.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/filter_test/script.rs @@ -3,14 +3,14 @@ #![allow(dead_code)] #![allow(unused_imports)] -use flowy_grid::entities::{CreateFilterParams, CreateGridFilterPayloadPB, DeleteFilterParams, GridLayout, GridSettingChangesetParams, GridSettingPB}; +use flowy_grid::entities::{InsertFilterParams, InsertFilterPayloadPB, DeleteFilterParams, GridLayout, GridSettingChangesetParams, GridSettingPB}; use flowy_grid::services::setting::GridSettingChangesetBuilder; use flowy_grid_data_model::revision::{FieldRevision, FieldTypeRevision}; use crate::grid::grid_editor::GridEditorTest; pub enum FilterScript { InsertGridTableFilter { - payload: CreateGridFilterPayloadPB, + payload: InsertFilterPayloadPB, }, AssertTableFilterCount { count: i32, @@ -47,8 +47,8 @@ impl GridFilterTest { match script { FilterScript::InsertGridTableFilter { payload } => { - let params: CreateFilterParams = payload.try_into().unwrap(); - let _ = self.editor.update_filter(params).await.unwrap(); + let params: InsertFilterParams = payload.try_into().unwrap(); + let _ = self.editor.create_filter(params).await.unwrap(); } FilterScript::AssertTableFilterCount { count } => { let filters = self.editor.get_grid_filter().await.unwrap(); diff --git a/frontend/rust-lib/flowy-grid/tests/grid/filter_test/text_filter_test.rs b/frontend/rust-lib/flowy-grid/tests/grid/filter_test/text_filter_test.rs index 3e45a4053d..5868e16c2d 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/filter_test/text_filter_test.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/filter_test/text_filter_test.rs @@ -1,13 +1,13 @@ use crate::grid::filter_test::script::FilterScript::*; use crate::grid::filter_test::script::*; -use flowy_grid::entities::{CreateGridFilterPayloadPB, FieldType, TextFilterCondition}; +use flowy_grid::entities::{FieldType, InsertFilterPayloadPB, TextFilterCondition}; use flowy_grid_data_model::revision::FieldRevision; #[tokio::test] async fn grid_filter_create_test() { let mut test = GridFilterTest::new().await; let field_rev = test.get_field_rev(FieldType::RichText); - let payload = CreateGridFilterPayloadPB::new(field_rev, TextFilterCondition::TextIsEmpty, Some("abc".to_owned())); + let payload = InsertFilterPayloadPB::new(field_rev, TextFilterCondition::TextIsEmpty, Some("abc".to_owned())); let scripts = vec![InsertGridTableFilter { payload }, AssertTableFilterCount { count: 1 }]; test.run_scripts(scripts).await; } @@ -19,7 +19,7 @@ async fn grid_filter_invalid_condition_panic_test() { let field_rev = test.get_field_rev(FieldType::RichText).clone(); // 100 is not a valid condition, so this test should be panic. - let payload = CreateGridFilterPayloadPB::new(&field_rev, 100, Some("".to_owned())); + let payload = InsertFilterPayloadPB::new(&field_rev, 100, Some("".to_owned())); let scripts = vec![InsertGridTableFilter { payload }]; test.run_scripts(scripts).await; } @@ -46,6 +46,6 @@ async fn grid_filter_delete_test() { #[tokio::test] async fn grid_filter_get_rows_test() {} -fn create_filter(field_rev: &FieldRevision, condition: TextFilterCondition, s: &str) -> CreateGridFilterPayloadPB { - CreateGridFilterPayloadPB::new(field_rev, condition, Some(s.to_owned())) +fn create_filter(field_rev: &FieldRevision, condition: TextFilterCondition, s: &str) -> InsertFilterPayloadPB { + InsertFilterPayloadPB::new(field_rev, condition, Some(s.to_owned())) } diff --git a/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs b/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs index 373eabdc88..ce6044c39e 100644 --- a/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs +++ b/frontend/rust-lib/flowy-grid/tests/grid/group_test/script.rs @@ -188,7 +188,7 @@ impl GridGroupTest { .await; } GroupScript::GroupByField { field_id } => { - self.editor.group_field(&field_id).await.unwrap(); + self.editor.group_by_field(&field_id).await.unwrap(); } } } diff --git a/shared-lib/flowy-sync/src/client_grid/view_revision_pad.rs b/shared-lib/flowy-sync/src/client_grid/view_revision_pad.rs index e836834265..45989f5b1c 100644 --- a/shared-lib/flowy-sync/src/client_grid/view_revision_pad.rs +++ b/shared-lib/flowy-sync/src/client_grid/view_revision_pad.rs @@ -61,12 +61,12 @@ impl GridViewRevisionPad { &mut self, field_id: &str, field_type: &FieldTypeRevision, - group_rev: GroupConfigurationRevision, + group_configuration_rev: GroupConfigurationRevision, ) -> CollaborateResult> { self.modify(|view| { // Only save one group view.groups.clear(); - view.groups.add_object(field_id, field_type, group_rev); + view.groups.add_object(field_id, field_type, group_configuration_rev); Ok(Some(())) }) }