ソースを参照

feat: support editing name when creating page (#3297)

Lucas.Xu 1 年間 前
コミット
e8f124b97c

+ 1 - 0
frontend/appflowy_flutter/integration_test/util/common_operations.dart

@@ -279,6 +279,7 @@ extension CommonOperations on WidgetTester {
     // create a new page
     await tapAddViewButton(name: parentName ?? gettingStarted);
     await tapButtonWithName(layout.menuName);
+    await tapOKButton();
     await pumpAndSettle();
 
     // hover on it and change it's name

+ 17 - 7
frontend/appflowy_flutter/lib/workspace/presentation/home/menu/sidebar/folder/personal_folder.dart

@@ -5,6 +5,7 @@ import 'package:appflowy/workspace/application/menu/menu_bloc.dart';
 import 'package:appflowy/workspace/application/sidebar/folder/folder_bloc.dart';
 import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart';
 import 'package:appflowy/workspace/presentation/home/menu/view/view_item.dart';
+import 'package:appflowy/workspace/presentation/widgets/dialogs.dart';
 import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flowy_infra_ui/flowy_infra_ui.dart';
@@ -117,13 +118,22 @@ class _PersonalFolderHeaderState extends State<PersonalFolderHeader> {
               width: iconSize,
               icon: const FlowySvg(FlowySvgs.add_s),
               onPressed: () {
-                context.read<MenuBloc>().add(
-                      MenuEvent.createApp(
-                        LocaleKeys.menuAppHeader_defaultNewPageName.tr(),
-                        index: 0,
-                      ),
-                    );
-                widget.onAdded();
+                NavigatorTextFieldDialog(
+                  title: LocaleKeys.newPageText.tr(),
+                  value: '',
+                  confirm: (value) {
+                    if (value.isNotEmpty) {
+                      context.read<MenuBloc>().add(
+                            MenuEvent.createApp(
+                              value,
+                              index: 0,
+                            ),
+                          );
+
+                      widget.onAdded();
+                    }
+                  },
+                ).show(context);
               },
             ),
           ]

+ 31 - 8
frontend/appflowy_flutter/lib/workspace/presentation/home/menu/view/view_item.dart

@@ -12,9 +12,9 @@ import 'package:appflowy/workspace/presentation/home/menu/view/view_action_type.
 import 'package:appflowy/workspace/presentation/home/menu/view/view_add_button.dart';
 import 'package:appflowy/workspace/presentation/home/menu/view/view_more_action_button.dart';
 import 'package:appflowy/workspace/presentation/widgets/dialogs.dart';
+import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
 import 'package:easy_localization/easy_localization.dart';
 import 'package:flowy_infra_ui/flowy_infra_ui.dart';
-import 'package:appflowy_backend/protobuf/flowy-folder2/view.pb.dart';
 import 'package:flowy_infra_ui/style_widget/hover.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_bloc/flutter_bloc.dart';
@@ -350,13 +350,22 @@ class _SingleInnerViewItemState extends State<SingleInnerViewItem> {
           createNewView,
         ) {
           if (createNewView) {
-            context.read<ViewBloc>().add(
-                  ViewEvent.createView(
-                    name ?? LocaleKeys.menuAppHeader_defaultNewPageName.tr(),
-                    pluginBuilder.layoutType!,
-                    openAfterCreated: openAfterCreated,
-                  ),
-                );
+            NavigatorTextFieldDialog(
+              title: _convertLayoutToHintText(pluginBuilder.layoutType!),
+              value: LocaleKeys.menuAppHeader_defaultNewPageName.tr(),
+              autoSelectAllText: true,
+              confirm: (value) {
+                if (value.isNotEmpty) {
+                  context.read<ViewBloc>().add(
+                        ViewEvent.createView(
+                          value,
+                          pluginBuilder.layoutType!,
+                          openAfterCreated: openAfterCreated,
+                        ),
+                      );
+                }
+              },
+            ).show(context);
           }
           context.read<ViewBloc>().add(
                 const ViewEvent.setIsExpanded(true),
@@ -408,6 +417,20 @@ class _SingleInnerViewItemState extends State<SingleInnerViewItem> {
       ),
     );
   }
+
+  String _convertLayoutToHintText(ViewLayoutPB layout) {
+    switch (layout) {
+      case ViewLayoutPB.Document:
+        return LocaleKeys.newDocumentText.tr();
+      case ViewLayoutPB.Grid:
+        return LocaleKeys.newGridText.tr();
+      case ViewLayoutPB.Board:
+        return LocaleKeys.newBoardText.tr();
+      case ViewLayoutPB.Calendar:
+        return LocaleKeys.newCalendarText.tr();
+    }
+    return LocaleKeys.newPageText.tr();
+  }
 }
 
 class _DotIconWidget extends StatelessWidget {

+ 4 - 0
frontend/resources/translations/en.json

@@ -86,6 +86,10 @@
   },
   "blankPageTitle": "Blank page",
   "newPageText": "New page",
+  "newDocumentText": "New document",
+  "newGridText": "New grid",
+  "newCalendarText": "New calendar",
+  "newBoardText": "New board",
   "trash": {
     "text": "Trash",
     "restoreAll": "Restore All",