chore: make dropdowns in bot settings popup visually disabled for non-admins (#2701)

pull/2245/head
ggurdin 6 months ago committed by GitHub
parent 2113376a1c
commit 7f417ff311
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -3,7 +3,6 @@ import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart'; import 'package:flutter_gen/gen_l10n/l10n.dart';
import 'package:fluffychat/pangea/chat_settings/models/bot_options_model.dart'; import 'package:fluffychat/pangea/chat_settings/models/bot_options_model.dart';
import 'package:fluffychat/pangea/chat_settings/widgets/conversation_bot/conversation_bot_no_permission_dialog.dart';
import 'package:fluffychat/pangea/chat_settings/widgets/language_level_dropdown.dart'; import 'package:fluffychat/pangea/chat_settings/widgets/language_level_dropdown.dart';
import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart'; import 'package:fluffychat/pangea/learning_settings/enums/language_level_type_enum.dart';
import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart'; import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart';
@ -45,68 +44,29 @@ class ConversationBotSettingsForm extends StatelessWidget {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Column( return Column(
children: [ children: [
InkWell( PLanguageDropdown(
onTap: hasPermission ? null : () => showNoPermissionDialog(context), decorationText: L10n.of(context).targetLanguage,
child: PLanguageDropdown( languages: MatrixState.pangeaController.pLanguageStore.targetOptions,
decorationText: L10n.of(context).targetLanguage, onChange: (lang) => hasPermission && enabled
languages: ? onUpdateBotLanguage(lang.langCode)
MatrixState.pangeaController.pLanguageStore.targetOptions, : null,
onChange: (lang) => hasPermission && enabled initialLanguage: botOptions.targetLanguage != null
? onUpdateBotLanguage(lang.langCode) ? PLanguageStore.byLangCode(botOptions.targetLanguage!)
: null, : null,
initialLanguage: botOptions.targetLanguage != null enabled: enabled && hasPermission,
? PLanguageStore.byLangCode(botOptions.targetLanguage!)
: null,
),
), ),
const SizedBox(height: 12), const SizedBox(height: 12),
InkWell( LanguageLevelDropdown(
onTap: hasPermission ? null : () => showNoPermissionDialog(context), initialLevel: botOptions.languageLevel,
child: LanguageLevelDropdown( onChanged: hasPermission && enabled
initialLevel: botOptions.languageLevel, ? (value) =>
onChanged: hasPermission && enabled onUpdateBotLanguageLevel(value as LanguageLevelTypeEnum?)
? (value) => : null,
onUpdateBotLanguageLevel(value as LanguageLevelTypeEnum?) validator: (value) => enabled && value == null
: null, ? L10n.of(context).enterLanguageLevel
validator: (value) => enabled && value == null : null,
? L10n.of(context).enterLanguageLevel enabled: enabled && hasPermission,
: null,
enabled: enabled,
),
), ),
// const SizedBox(height: 12),
// Align(
// alignment: Alignment.centerLeft,
// child: Padding(
// padding: const EdgeInsets.symmetric(vertical: 12),
// child: Text(
// L10n.of(context).conversationBotModeSelectDescription,
// style: Theme.of(context).textTheme.titleLarge,
// ),
// ),
// ),
// InkWell(
// onTap: hasPermission ? null : () => showNoPermissionDialog(context),
// child: ConversationBotModeSelect(
// initialMode: hasUpdatedMode ? botOptions.mode : null,
// onChanged: hasPermission && enabled ? onUpdateBotMode : null,
// enabled: enabled,
// validator: (value) {
// return value == null && enabled
// ? L10n.of(context).botModeValidation
// : null;
// },
// ),
// ),
// const SizedBox(height: 12),
// ConversationBotModeDynamicZone(
// discussionTopicController: discussionTopicController,
// discussionKeywordsController: discussionKeywordsController,
// customSystemPromptController: customSystemPromptController,
// enabled: enabled,
// hasPermission: hasPermission,
// mode: hasUpdatedMode ? botOptions.mode : null,
// ),
], ],
); );
} }

@ -21,6 +21,7 @@ class PLanguageDropdown extends StatefulWidget {
final String? Function(LanguageModel?)? validator; final String? Function(LanguageModel?)? validator;
final Color? backgroundColor; final Color? backgroundColor;
final bool hasError; final bool hasError;
final bool enabled;
const PLanguageDropdown({ const PLanguageDropdown({
super.key, super.key,
@ -34,6 +35,7 @@ class PLanguageDropdown extends StatefulWidget {
this.validator, this.validator,
this.backgroundColor, this.backgroundColor,
this.hasError = false, this.hasError = false,
this.enabled = true,
}); });
@override @override
@ -87,12 +89,14 @@ class PLanguageDropdownState extends State<PLanguageDropdown> {
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
DropdownButtonFormField2<LanguageModel>( DropdownButtonFormField2<LanguageModel>(
enableFeedback: widget.enabled,
customButton: widget.initialLanguage != null && customButton: widget.initialLanguage != null &&
sortedLanguages.contains(widget.initialLanguage) sortedLanguages.contains(widget.initialLanguage)
? LanguageDropDownEntry( ? LanguageDropDownEntry(
languageModel: widget.initialLanguage!, languageModel: widget.initialLanguage!,
isL2List: widget.isL2List, isL2List: widget.isL2List,
isDropdown: true, isDropdown: true,
enabled: widget.enabled,
) )
: null, : null,
menuItemStyleData: const MenuItemStyleData( menuItemStyleData: const MenuItemStyleData(
@ -131,6 +135,7 @@ class PLanguageDropdownState extends State<PLanguageDropdown> {
if (widget.showMultilingual) if (widget.showMultilingual)
DropdownMenuItem( DropdownMenuItem(
value: LanguageModel.multiLingual(context), value: LanguageModel.multiLingual(context),
enabled: widget.enabled,
child: LanguageDropDownEntry( child: LanguageDropDownEntry(
languageModel: LanguageModel.multiLingual(context), languageModel: LanguageModel.multiLingual(context),
isL2List: widget.isL2List, isL2List: widget.isL2List,
@ -150,12 +155,13 @@ class PLanguageDropdownState extends State<PLanguageDropdown> {
child: LanguageDropDownEntry( child: LanguageDropDownEntry(
languageModel: languageModel, languageModel: languageModel,
isL2List: widget.isL2List, isL2List: widget.isL2List,
enabled: widget.enabled,
), ),
), ),
), ),
), ),
], ],
onChanged: (value) => widget.onChange(value!), onChanged: widget.enabled ? (value) => widget.onChange(value!) : null,
value: widget.initialLanguage, value: widget.initialLanguage,
validator: (value) => widget.validator?.call(value), validator: (value) => widget.validator?.call(value),
dropdownSearchData: DropdownSearchData( dropdownSearchData: DropdownSearchData(
@ -210,20 +216,25 @@ class LanguageDropDownEntry extends StatelessWidget {
final LanguageModel languageModel; final LanguageModel languageModel;
final bool isL2List; final bool isL2List;
final bool isDropdown; final bool isDropdown;
final bool enabled;
const LanguageDropDownEntry({ const LanguageDropDownEntry({
super.key, super.key,
required this.languageModel, required this.languageModel,
required this.isL2List, required this.isL2List,
this.isDropdown = false, this.isDropdown = false,
this.enabled = true,
}); });
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Row( return Row(
children: [ children: [
LanguageFlag( Opacity(
language: languageModel, opacity: enabled ? 1 : 0.5,
child: LanguageFlag(
language: languageModel,
),
), ),
const SizedBox(width: 10), const SizedBox(width: 10),
Expanded( Expanded(
@ -232,7 +243,9 @@ class LanguageDropDownEntry extends StatelessWidget {
Text( Text(
languageModel.getDisplayName(context) ?? "", languageModel.getDisplayName(context) ?? "",
style: const TextStyle().copyWith( style: const TextStyle().copyWith(
color: Theme.of(context).textTheme.bodyLarge!.color, color: enabled
? Theme.of(context).textTheme.bodyLarge!.color
: Theme.of(context).disabledColor,
fontSize: 14, fontSize: 14,
), ),
overflow: TextOverflow.ellipsis, overflow: TextOverflow.ellipsis,

Loading…
Cancel
Save