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: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/learning_settings/enums/language_level_type_enum.dart';
import 'package:fluffychat/pangea/learning_settings/utils/p_language_store.dart';
@ -45,68 +44,29 @@ class ConversationBotSettingsForm extends StatelessWidget {
Widget build(BuildContext context) {
return Column(
children: [
InkWell(
onTap: hasPermission ? null : () => showNoPermissionDialog(context),
child: PLanguageDropdown(
decorationText: L10n.of(context).targetLanguage,
languages:
MatrixState.pangeaController.pLanguageStore.targetOptions,
onChange: (lang) => hasPermission && enabled
? onUpdateBotLanguage(lang.langCode)
: null,
initialLanguage: botOptions.targetLanguage != null
? PLanguageStore.byLangCode(botOptions.targetLanguage!)
: null,
),
PLanguageDropdown(
decorationText: L10n.of(context).targetLanguage,
languages: MatrixState.pangeaController.pLanguageStore.targetOptions,
onChange: (lang) => hasPermission && enabled
? onUpdateBotLanguage(lang.langCode)
: null,
initialLanguage: botOptions.targetLanguage != null
? PLanguageStore.byLangCode(botOptions.targetLanguage!)
: null,
enabled: enabled && hasPermission,
),
const SizedBox(height: 12),
InkWell(
onTap: hasPermission ? null : () => showNoPermissionDialog(context),
child: LanguageLevelDropdown(
initialLevel: botOptions.languageLevel,
onChanged: hasPermission && enabled
? (value) =>
onUpdateBotLanguageLevel(value as LanguageLevelTypeEnum?)
: null,
validator: (value) => enabled && value == null
? L10n.of(context).enterLanguageLevel
: null,
enabled: enabled,
),
LanguageLevelDropdown(
initialLevel: botOptions.languageLevel,
onChanged: hasPermission && enabled
? (value) =>
onUpdateBotLanguageLevel(value as LanguageLevelTypeEnum?)
: null,
validator: (value) => enabled && value == null
? L10n.of(context).enterLanguageLevel
: null,
enabled: enabled && hasPermission,
),
// 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 Color? backgroundColor;
final bool hasError;
final bool enabled;
const PLanguageDropdown({
super.key,
@ -34,6 +35,7 @@ class PLanguageDropdown extends StatefulWidget {
this.validator,
this.backgroundColor,
this.hasError = false,
this.enabled = true,
});
@override
@ -87,12 +89,14 @@ class PLanguageDropdownState extends State<PLanguageDropdown> {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
DropdownButtonFormField2<LanguageModel>(
enableFeedback: widget.enabled,
customButton: widget.initialLanguage != null &&
sortedLanguages.contains(widget.initialLanguage)
? LanguageDropDownEntry(
languageModel: widget.initialLanguage!,
isL2List: widget.isL2List,
isDropdown: true,
enabled: widget.enabled,
)
: null,
menuItemStyleData: const MenuItemStyleData(
@ -131,6 +135,7 @@ class PLanguageDropdownState extends State<PLanguageDropdown> {
if (widget.showMultilingual)
DropdownMenuItem(
value: LanguageModel.multiLingual(context),
enabled: widget.enabled,
child: LanguageDropDownEntry(
languageModel: LanguageModel.multiLingual(context),
isL2List: widget.isL2List,
@ -150,12 +155,13 @@ class PLanguageDropdownState extends State<PLanguageDropdown> {
child: LanguageDropDownEntry(
languageModel: languageModel,
isL2List: widget.isL2List,
enabled: widget.enabled,
),
),
),
),
],
onChanged: (value) => widget.onChange(value!),
onChanged: widget.enabled ? (value) => widget.onChange(value!) : null,
value: widget.initialLanguage,
validator: (value) => widget.validator?.call(value),
dropdownSearchData: DropdownSearchData(
@ -210,20 +216,25 @@ class LanguageDropDownEntry extends StatelessWidget {
final LanguageModel languageModel;
final bool isL2List;
final bool isDropdown;
final bool enabled;
const LanguageDropDownEntry({
super.key,
required this.languageModel,
required this.isL2List,
this.isDropdown = false,
this.enabled = true,
});
@override
Widget build(BuildContext context) {
return Row(
children: [
LanguageFlag(
language: languageModel,
Opacity(
opacity: enabled ? 1 : 0.5,
child: LanguageFlag(
language: languageModel,
),
),
const SizedBox(width: 10),
Expanded(
@ -232,7 +243,9 @@ class LanguageDropDownEntry extends StatelessWidget {
Text(
languageModel.getDisplayName(context) ?? "",
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,
),
overflow: TextOverflow.ellipsis,

Loading…
Cancel
Save