chore: make dropdowns in bot settings popup visually disabled for non-admins (#2701)
This commit is contained in:
parent
2113376a1c
commit
7f417ff311
2 changed files with 37 additions and 64 deletions
|
|
@ -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…
Add table
Reference in a new issue