mirror of
https://github.com/AppFlowy-IO/AppFlowy.git
synced 2025-09-26 00:40:13 +00:00
feat: add toast messages for ai chat interactions (#7086)
This commit is contained in:
parent
5ffa27f545
commit
20b16cf174
@ -274,7 +274,7 @@ class _SaveToPageButtonState extends State<SaveToPageButton> {
|
|||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
final documentId = getOpenedDocumentId();
|
final documentId = getOpenedDocumentId();
|
||||||
if (documentId != null) {
|
if (documentId != null) {
|
||||||
await onAddToExistingPage(documentId);
|
await onAddToExistingPage(context, documentId);
|
||||||
await forceReloadAndUpdateSelection(documentId);
|
await forceReloadAndUpdateSelection(documentId);
|
||||||
} else {
|
} else {
|
||||||
widget.onOverrideVisibility?.call(true);
|
widget.onOverrideVisibility?.call(true);
|
||||||
@ -298,9 +298,8 @@ class _SaveToPageButtonState extends State<SaveToPageButton> {
|
|||||||
},
|
},
|
||||||
onAddToExistingPage: (documentId) async {
|
onAddToExistingPage: (documentId) async {
|
||||||
popoverController.close();
|
popoverController.close();
|
||||||
await onAddToExistingPage(documentId);
|
final view = await onAddToExistingPage(context, documentId);
|
||||||
final view =
|
|
||||||
await ViewBackendService.getView(documentId).toNullable();
|
|
||||||
if (context.mounted) {
|
if (context.mounted) {
|
||||||
openPageFromMessage(context, view);
|
openPageFromMessage(context, view);
|
||||||
}
|
}
|
||||||
@ -309,12 +308,20 @@ class _SaveToPageButtonState extends State<SaveToPageButton> {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> onAddToExistingPage(String documentId) async {
|
Future<ViewPB?> onAddToExistingPage(
|
||||||
|
BuildContext context,
|
||||||
|
String documentId,
|
||||||
|
) async {
|
||||||
await ChatEditDocumentService.addMessageToPage(
|
await ChatEditDocumentService.addMessageToPage(
|
||||||
documentId,
|
documentId,
|
||||||
widget.textMessage,
|
widget.textMessage,
|
||||||
);
|
);
|
||||||
await Future.delayed(const Duration(milliseconds: 500));
|
await Future.delayed(const Duration(milliseconds: 500));
|
||||||
|
final view = await ViewBackendService.getView(documentId).toNullable();
|
||||||
|
if (context.mounted) {
|
||||||
|
showSaveMessageSuccessToast(context, view);
|
||||||
|
}
|
||||||
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
void addMessageToNewPage(BuildContext context) async {
|
void addMessageToNewPage(BuildContext context) async {
|
||||||
@ -327,12 +334,43 @@ class _SaveToPageButtonState extends State<SaveToPageButton> {
|
|||||||
chatView.parentViewId,
|
chatView.parentViewId,
|
||||||
[widget.textMessage],
|
[widget.textMessage],
|
||||||
);
|
);
|
||||||
|
|
||||||
if (context.mounted) {
|
if (context.mounted) {
|
||||||
|
showSaveMessageSuccessToast(context, newView);
|
||||||
openPageFromMessage(context, newView);
|
openPageFromMessage(context, newView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void showSaveMessageSuccessToast(BuildContext context, ViewPB? view) {
|
||||||
|
if (view == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
showToastNotification(
|
||||||
|
context,
|
||||||
|
richMessage: TextSpan(
|
||||||
|
children: [
|
||||||
|
TextSpan(
|
||||||
|
text: LocaleKeys.chat_addToNewPageSuccessToast.tr(),
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||||
|
color: const Color(0xFFFFFFFF),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const TextSpan(
|
||||||
|
text: ' ',
|
||||||
|
),
|
||||||
|
TextSpan(
|
||||||
|
text: view.nameOrDefault,
|
||||||
|
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
|
||||||
|
color: const Color(0xFFFFFFFF),
|
||||||
|
fontWeight: FontWeight.w700,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
Future<void> forceReloadAndUpdateSelection(String documentId) async {
|
Future<void> forceReloadAndUpdateSelection(String documentId) async {
|
||||||
final bloc = DocumentBloc.findOpen(documentId);
|
final bloc = DocumentBloc.findOpen(documentId);
|
||||||
if (bloc == null) {
|
if (bloc == null) {
|
||||||
|
@ -90,6 +90,7 @@ class _AIMessageMetadataState extends State<AIMessageMetadata> {
|
|||||||
data == null) {
|
data == null) {
|
||||||
return _MetadataButton(
|
return _MetadataButton(
|
||||||
name: m.name,
|
name: m.name,
|
||||||
|
onTap: () => widget.onSelectedMetadata?.call(m),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
return BlocProvider(
|
return BlocProvider(
|
||||||
|
@ -1,8 +1,11 @@
|
|||||||
|
import 'package:appflowy/generated/locale_keys.g.dart';
|
||||||
import 'package:appflowy/mobile/application/mobile_router.dart';
|
import 'package:appflowy/mobile/application/mobile_router.dart';
|
||||||
import 'package:appflowy/startup/startup.dart';
|
import 'package:appflowy/startup/startup.dart';
|
||||||
import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart';
|
import 'package:appflowy/workspace/application/tabs/tabs_bloc.dart';
|
||||||
import 'package:appflowy/workspace/application/view/view_ext.dart';
|
import 'package:appflowy/workspace/application/view/view_ext.dart';
|
||||||
|
import 'package:appflowy/workspace/presentation/widgets/dialogs.dart';
|
||||||
import 'package:appflowy_backend/protobuf/flowy-folder/protobuf.dart';
|
import 'package:appflowy_backend/protobuf/flowy-folder/protobuf.dart';
|
||||||
|
import 'package:easy_localization/easy_localization.dart';
|
||||||
import 'package:flutter/widgets.dart';
|
import 'package:flutter/widgets.dart';
|
||||||
import 'package:universal_platform/universal_platform.dart';
|
import 'package:universal_platform/universal_platform.dart';
|
||||||
|
|
||||||
@ -10,6 +13,11 @@ import 'package:universal_platform/universal_platform.dart';
|
|||||||
/// on mobile
|
/// on mobile
|
||||||
void openPageFromMessage(BuildContext context, ViewPB? view) {
|
void openPageFromMessage(BuildContext context, ViewPB? view) {
|
||||||
if (view == null) {
|
if (view == null) {
|
||||||
|
showToastNotification(
|
||||||
|
context,
|
||||||
|
message: LocaleKeys.chat_openPagePreviewFailedToast.tr(),
|
||||||
|
type: ToastificationType.error,
|
||||||
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (UniversalPlatform.isDesktop) {
|
if (UniversalPlatform.isDesktop) {
|
||||||
|
@ -218,7 +218,9 @@
|
|||||||
"addToPageButton": "Add to page",
|
"addToPageButton": "Add to page",
|
||||||
"addToPageTitle": "Add message to...",
|
"addToPageTitle": "Add message to...",
|
||||||
"addToNewPage": "Add to a new page",
|
"addToNewPage": "Add to a new page",
|
||||||
"addToNewPageName": "Messages extracted from \"{}\""
|
"addToNewPageName": "Messages extracted from \"{}\"",
|
||||||
|
"addToNewPageSuccessToast": "Message added to",
|
||||||
|
"openPagePreviewFailedToast": "Failed to open page"
|
||||||
},
|
},
|
||||||
"trash": {
|
"trash": {
|
||||||
"text": "Trash",
|
"text": "Trash",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user