chore: disable add messages to page when chat is empty (#7518)

This commit is contained in:
Richard Shiue 2025-03-13 09:50:46 +08:00 committed by GitHub
parent 1f76412790
commit 392964ffd2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 36 additions and 9 deletions

View File

@ -19,9 +19,17 @@ class ChatSelectMessageBloc
on<ChatSelectMessageEvent>(
(event, emit) {
event.when(
enableStartSelectingMessages: () {
emit(state.copyWith(enabled: true));
},
toggleSelectingMessages: () {
if (state.isSelectingMessages) {
emit(ChatSelectMessageState.initial());
emit(
state.copyWith(
isSelectingMessages: false,
selectedMessages: [],
),
);
} else {
emit(state.copyWith(isSelectingMessages: true));
}
@ -50,8 +58,13 @@ class ChatSelectMessageBloc
unselectAllMessages: () {
emit(state.copyWith(selectedMessages: const []));
},
saveAsPage: () {
emit(ChatSelectMessageState.initial());
reset: () {
emit(
state.copyWith(
isSelectingMessages: false,
selectedMessages: [],
),
);
},
);
},
@ -70,6 +83,8 @@ class ChatSelectMessageBloc
@freezed
class ChatSelectMessageEvent with _$ChatSelectMessageEvent {
const factory ChatSelectMessageEvent.enableStartSelectingMessages() =
_EnableStartSelectingMessages;
const factory ChatSelectMessageEvent.toggleSelectingMessages() =
_ToggleSelectingMessages;
const factory ChatSelectMessageEvent.toggleSelectMessage(Message message) =
@ -79,7 +94,7 @@ class ChatSelectMessageEvent with _$ChatSelectMessageEvent {
) = _SelectAllMessages;
const factory ChatSelectMessageEvent.unselectAllMessages() =
_UnselectAllMessages;
const factory ChatSelectMessageEvent.saveAsPage() = _SaveAsPage;
const factory ChatSelectMessageEvent.reset() = _Reset;
}
@freezed
@ -87,9 +102,11 @@ class ChatSelectMessageState with _$ChatSelectMessageState {
const factory ChatSelectMessageState({
required bool isSelectingMessages,
required List<Message> selectedMessages,
required bool enabled,
}) = _ChatSelectMessageState;
factory ChatSelectMessageState.initial() => const ChatSelectMessageState(
enabled: false,
isSelectingMessages: false,
selectedMessages: [],
);

View File

@ -178,6 +178,7 @@ class AIChatPagePluginWidgetBuilder extends PluginWidgetBuilder
customActions: [
CustomViewAction(
view: notifier.view,
disabled: !state.enabled,
leftIcon: FlowySvgs.ai_add_to_page_s,
label: LocaleKeys.moreAction_saveAsNewPage.tr(),
onTap: () {

View File

@ -319,6 +319,10 @@ class _ChatContentPage extends StatelessWidget {
);
}
context
.read<ChatSelectMessageBloc>()
.add(ChatSelectMessageEvent.enableStartSelectingMessages());
return BlocSelector<ChatSelectMessageBloc, ChatSelectMessageState, bool>(
selector: (state) => state.isSelectingMessages,
builder: (context, isSelectingMessages) {

View File

@ -250,7 +250,7 @@ class _SaveToPageButtonState extends State<SaveToPageButton> {
showSaveMessageSuccessToast(context, view);
}
bloc.add(const ChatSelectMessageEvent.saveAsPage());
bloc.add(const ChatSelectMessageEvent.reset());
return view;
}
@ -275,7 +275,7 @@ class _SaveToPageButtonState extends State<SaveToPageButton> {
showSaveMessageSuccessToast(context, newView);
openPageFromMessage(context, newView);
}
bloc.add(const ChatSelectMessageEvent.saveAsPage());
bloc.add(const ChatSelectMessageEvent.reset());
}
Future<void> forceReload(String documentId) async {

View File

@ -107,6 +107,7 @@ class CustomViewAction extends StatelessWidget {
required this.view,
required this.leftIcon,
required this.label,
this.disabled = false,
this.onTap,
this.mutex,
});
@ -114,6 +115,7 @@ class CustomViewAction extends StatelessWidget {
final ViewPB view;
final FlowySvgData leftIcon;
final String label;
final bool disabled;
final VoidCallback? onTap;
final PopoverMutex? mutex;
@ -122,17 +124,20 @@ class CustomViewAction extends StatelessWidget {
return Container(
height: 34,
padding: const EdgeInsets.symmetric(vertical: 2.0),
child: FlowyIconTextButton(
child: FlowyButton(
margin: const EdgeInsets.symmetric(horizontal: 6),
disable: disabled,
onTap: onTap,
leftIconBuilder: (onHover) => FlowySvg(
leftIcon: FlowySvg(
leftIcon,
size: const Size.square(16.0),
color: disabled ? Theme.of(context).disabledColor : null,
),
iconPadding: 10.0,
textBuilder: (onHover) => FlowyText(
text: FlowyText(
label,
figmaLineHeight: 18.0,
color: disabled ? Theme.of(context).disabledColor : null,
),
),
);