diff --git a/lib/Components/multi_input_modal.dart b/lib/Components/multi_input_modal.dart index f026acc..b6f2f3c 100644 --- a/lib/Components/multi_input_modal.dart +++ b/lib/Components/multi_input_modal.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:manager_app/Components/resource_input_container.dart'; import 'package:manager_app/Components/rounded_button.dart'; import 'package:manager_app/Components/text_form_input_container.dart'; import 'package:manager_app/Models/managerContext.dart'; @@ -12,7 +13,7 @@ import 'package:provider/provider.dart'; import 'audio_input_container.dart'; import 'flag_decoration.dart'; -showMultiStringInput (String label, String modalLabel, bool isTitle, List values, List newValues, Function onGetResult, int maxLines, bool isAudio, BuildContext context) { /*Function onSelect,*/ +showMultiStringInput (String label, String modalLabel, bool isTitle, List values, List newValues, Function onGetResult, int maxLines, List? resourceTypes, BuildContext context) { /*Function onSelect,*/ showDialog( builder: (BuildContext context) => AlertDialog( shape: RoundedRectangleBorder( @@ -26,7 +27,7 @@ showMultiStringInput (String label, String modalLabel, bool isTitle, List(context), label, isTitle, isAudio, newValues), + children: getTranslations(context, Provider.of(context), label, isTitle, resourceTypes, newValues), ), ), ), @@ -93,7 +94,7 @@ showMultiStringInput (String label, String modalLabel, bool isTitle, List newValues) { +getTranslations(BuildContext context, AppContext appContext, String label, bool isTitle, List? resourceTypes, List newValues) { List translations = []; ManagerAppContext managerAppContext = appContext.getContext(); for(var language in managerAppContext.selectedConfiguration!.languages!) { @@ -121,7 +122,7 @@ getTranslations(BuildContext context, AppContext appContext, String label, bool mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.center, children: [ - !isAudio ? + resourceTypes == null ? TextFormInputContainer( label: label, color: kWhite, @@ -136,14 +137,21 @@ getTranslations(BuildContext context, AppContext appContext, String label, bool height: 100, //color: Colors.blueAccent, child: Center( - child: AudioInputContainer( + child: ResourceInputContainer( + label: "", + initialValue: newValues.where((element) => element.language == language).first.value == null ? null : newValues.where((element) => element.language == language).first.value!, + inResourceTypes: resourceTypes, + onChanged: (ResourceDTO resource) { + newValues.where((element) => element.language == language).first.value = resource.id; + }, + )/*AudioInputContainer( //label: "Audio :", initialValue: newValues.where((element) => element.language == language).first.value, color: kPrimaryColor, onChanged: (ResourceDTO resource) { newValues.where((element) => element.language == language).first.value = resource.id; }, - ), + ),*/ ), ), ], diff --git a/lib/Components/multi_string_input_and_resource_container.dart b/lib/Components/multi_string_input_and_resource_container.dart index 32c3455..0d23f2e 100644 --- a/lib/Components/multi_string_input_and_resource_container.dart +++ b/lib/Components/multi_string_input_and_resource_container.dart @@ -17,7 +17,7 @@ class MultiStringInputAndResourceContainer extends StatelessWidget { final Function onGetResult; final int maxLines; final bool isTitle; - final bool isAudio; + final List? resourceTypes; final double fontSize; const MultiStringInputAndResourceContainer({ Key? key, @@ -28,7 +28,7 @@ class MultiStringInputAndResourceContainer extends StatelessWidget { required this.onGetResult, required this.maxLines, required this.isTitle, - this.isAudio = false, + this.resourceTypes = null, this.fontSize = 25, }) : super(key: key); @@ -69,7 +69,7 @@ class MultiStringInputAndResourceContainer extends StatelessWidget { } }); - showMultiStringInputAndResourceHTML(label, modalLabel, isTitle, initials, newValues, onGetResult, maxLines, isAudio, context); + showMultiStringInputAndResourceHTML(label, modalLabel, isTitle, initials, newValues, onGetResult, maxLines, resourceTypes, context); }, child: Container( decoration: BoxDecoration( @@ -80,7 +80,7 @@ class MultiStringInputAndResourceContainer extends StatelessWidget { padding: const EdgeInsets.only(left: 5, right: 5, top: 15, bottom: 15), child: Center( child: AutoSizeText( - isAudio ? "Changer audios" : "Changer traductions", + resourceTypes == null ? "Changer traductions" : "Changer ressources", style: TextStyle(color: kWhite), maxLines: 2, ) diff --git a/lib/Components/multi_string_input_container.dart b/lib/Components/multi_string_input_container.dart index 4fd7679..2f6cb89 100644 --- a/lib/Components/multi_string_input_container.dart +++ b/lib/Components/multi_string_input_container.dart @@ -18,7 +18,7 @@ class MultiStringInputContainer extends StatelessWidget { final Function onGetResult; final int maxLines; final bool isTitle; - final bool isAudio; + final List? resourceTypes; final bool isHTML; final double fontSize; final bool isMandatory; @@ -31,7 +31,7 @@ class MultiStringInputContainer extends StatelessWidget { required this.onGetResult, required this.maxLines, required this.isTitle, - this.isAudio = false, + this.resourceTypes = null, this.isHTML = false, this.fontSize = 25, this.isMandatory = true, @@ -76,13 +76,14 @@ class MultiStringInputContainer extends StatelessWidget { }); if(isHTML) { - showMultiStringInputHTML(label, modalLabel, isTitle, initials, newValues, onGetResult, maxLines, isAudio, context, isMandatory); + showMultiStringInputHTML(label, modalLabel, isTitle, initials, newValues, onGetResult, maxLines, resourceTypes, context, isMandatory); } else { - showMultiStringInput(label, modalLabel, isTitle, initials, newValues, onGetResult, maxLines, isAudio, context); + showMultiStringInput(label, modalLabel, isTitle, initials, newValues, onGetResult, maxLines, resourceTypes, context); } }, child: Container( + constraints: BoxConstraints(maxHeight: 100), decoration: BoxDecoration( color: color, borderRadius: BorderRadius.circular(50), @@ -91,7 +92,7 @@ class MultiStringInputContainer extends StatelessWidget { padding: const EdgeInsets.only(left: 5, right: 5, top: 15, bottom: 15), child: Center( child: AutoSizeText( - isAudio ? "Changer audios" : "Changer traductions", + resourceTypes == null ? "Changer traductions" : "Changer ressources", style: TextStyle(color: kWhite), maxLines: 2, ) diff --git a/lib/Components/multi_string_input_html_modal.dart b/lib/Components/multi_string_input_html_modal.dart index c320890..6d704b4 100644 --- a/lib/Components/multi_string_input_html_modal.dart +++ b/lib/Components/multi_string_input_html_modal.dart @@ -7,7 +7,7 @@ import 'package:manager_app/constants.dart'; import 'package:manager_api_new/api.dart'; import 'package:collection/collection.dart'; -showMultiStringInputHTML (String label, String modalLabel, bool isTitle, List values, List newValues, Function onGetResult, int maxLines, bool isAudio, BuildContext context, bool isMandatory) { +showMultiStringInputHTML (String label, String modalLabel, bool isTitle, List values, List newValues, Function onGetResult, int maxLines, List? resourceTypes, BuildContext context, bool isMandatory) { showDialog( builder: (BuildContext context) { return AlertDialog( @@ -16,7 +16,7 @@ showMultiStringInputHTML (String label, String modalLabel, bool isTitle, List[ Row( @@ -68,7 +68,7 @@ showMultiStringInputHTML (String label, String modalLabel, bool isTitle, List values, List newValues, Function onGetResult, int maxLines, bool isAudio, BuildContext context) { +showMultiStringInputAndResourceHTML (String label, String modalLabel, bool isTitle, List values, List newValues, Function onGetResult, int maxLines, List? resourceTypes, BuildContext context) { showDialog( builder: (BuildContext context) { return AlertDialog( @@ -77,7 +77,7 @@ showMultiStringInputAndResourceHTML (String label, String modalLabel, bool isTit ), title: Center(child: Text(modalLabel)), content: SingleChildScrollView( - child: TranslationInputAndResourceContainer(isTitle: isTitle, values: values, newValues: newValues, onGetResult: onGetResult, maxLines: maxLines, isAudio: isAudio) + child: TranslationInputAndResourceContainer(isTitle: isTitle, values: values, newValues: newValues, onGetResult: onGetResult, maxLines: maxLines, resourceTypes: resourceTypes) ), actions: [ Row( diff --git a/lib/Components/translation_input_and_resource_container.dart b/lib/Components/translation_input_and_resource_container.dart index 5d8584a..d5a6032 100644 --- a/lib/Components/translation_input_and_resource_container.dart +++ b/lib/Components/translation_input_and_resource_container.dart @@ -53,7 +53,7 @@ class _TranslationInputAndResourceContainerState extends State Tab(icon: FlagDecoration(language: v.language!))).toList(), // text: v.language!.toUpperCase(), ), ), - getTranslation(context, Provider.of(context), controllerQuill, customToolBarList, widget.isTitle, widget.isAudio, widget.newValues, currentLanguage!) + getTranslation(context, Provider.of(context), controllerQuill, customToolBarList, widget.isTitle, widget.resourceTypes, widget.newValues, currentLanguage!) ], ), ), ); } - getTranslation(BuildContext context, AppContext appContext, QuillEditorController controllerQuill, List customToolBarList, bool isTitle, bool isAudio, List newValues, ValueNotifier currentLanguage) { + getTranslation(BuildContext context, AppContext appContext, QuillEditorController controllerQuill, List customToolBarList, bool isTitle, List? resourceTypes, List newValues, ValueNotifier currentLanguage) { return Padding( padding: const EdgeInsets.all(6.0), child: Padding( @@ -127,7 +127,7 @@ class _TranslationInputAndResourceContainerState extends State( valueListenable: currentLanguage, builder: (context, value, _) { + return ResourceInputContainer( + label: "", + initialValue: newValues.where((element) => element.language! == value).first.resourceId, + inResourceTypes: widget.resourceTypes!, + onChanged: (ResourceDTO resource) { + newValues.where((element) => element.language! == value).first.value = resource.id; + } + ); return AudioInputContainer( initialValue: newValues.where((element) => element.language! == value).first.value, color: kPrimaryColor, @@ -232,7 +240,7 @@ class TranslationInputAndResourceContainer extends StatefulWidget { required this.newValues, required this.onGetResult, required this.maxLines, - required this.isAudio, + required this.resourceTypes, }) : super(key: key); bool isTitle; @@ -240,7 +248,7 @@ class TranslationInputAndResourceContainer extends StatefulWidget { List newValues; Function onGetResult; int maxLines; - bool isAudio; + List? resourceTypes; @override State createState() => _TranslationInputAndResourceContainerState(); diff --git a/lib/Components/translation_input_container.dart b/lib/Components/translation_input_container.dart index bcbcf3e..51ec42e 100644 --- a/lib/Components/translation_input_container.dart +++ b/lib/Components/translation_input_container.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:manager_api_new/api.dart'; import 'package:manager_app/Components/audio_input_container.dart'; +import 'package:manager_app/Components/resource_input_container.dart'; import 'package:manager_app/app_context.dart'; import 'package:manager_app/constants.dart'; import 'package:provider/provider.dart'; @@ -51,7 +52,7 @@ class _TranslationInputContainerState extends State w if (!_tabController!.indexIsChanging) { setState(() { currentLanguage!.value = widget.newValues[_tabController!.index].language; - if(!widget.isAudio) { + if(widget.resourceTypes == null) { print("insert try without ress"); print(widget.newValues[_tabController!.index].value!); controllerQuill.clear(); @@ -68,7 +69,7 @@ class _TranslationInputContainerState extends State w _tabController!.dispose(); } - getTranslation(BuildContext context, AppContext appContext, QuillEditorController controllerQuill, List customToolBarList, bool isTitle, bool isAudio, List newValues, ValueNotifier currentLanguage) { + getTranslation(BuildContext context, AppContext appContext, QuillEditorController controllerQuill, List customToolBarList, bool isTitle, List? resourceTypes, List newValues, ValueNotifier currentLanguage) { return Padding( padding: const EdgeInsets.all(6.0), child: Padding( @@ -80,7 +81,7 @@ class _TranslationInputContainerState extends State w mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.center, children: [ - !isAudio ? + resourceTypes == null ? Column( children: [ ToolBar( @@ -155,14 +156,22 @@ class _TranslationInputContainerState extends State w child: ValueListenableBuilder( valueListenable: currentLanguage, builder: (context, value, _) { - return AudioInputContainer( + return ResourceInputContainer( + label: "", + initialValue: newValues.where((element) => element.language! == value).first.value, + inResourceTypes: widget.resourceTypes!, + onChanged: (ResourceDTO resource) { + newValues.where((element) => element.language! == value).first.value = resource.id; + } + ); + /*return AudioInputContainer( //label: "Audio :", initialValue: newValues.where((element) => element.language! == value).first.value, color: kPrimaryColor, onChanged: (ResourceDTO resource) { newValues.where((element) => element.language! == value).first.value = resource.id; }, - ); + );*/ }, ), ), @@ -213,7 +222,7 @@ class _TranslationInputContainerState extends State w tabs: widget.newValues.map((v) => Tab(icon: FlagDecoration(language: v.language!))).toList(), // text: v.language!.toUpperCase(), ), ), - getTranslation(context, Provider.of(context), controllerQuill, customToolBarList, widget.isTitle, widget.isAudio, widget.newValues, currentLanguage!) + getTranslation(context, Provider.of(context), controllerQuill, customToolBarList, widget.isTitle, widget.resourceTypes, widget.newValues, currentLanguage!) /*TabContainer( radius: 0, tabs: values.map((v) => v.language!.toUpperCase()).toList(), @@ -239,7 +248,7 @@ class TranslationInputContainer extends StatefulWidget { required this.newValues, required this.onGetResult, required this.maxLines, - required this.isAudio, + required this.resourceTypes, }) : super(key: key); bool isTitle; @@ -247,7 +256,7 @@ class TranslationInputContainer extends StatefulWidget { List newValues; Function onGetResult; int maxLines; - bool isAudio; + List? resourceTypes; @override State createState() => _TranslationInputContainerState(); diff --git a/lib/Screens/Configurations/Section/SubSection/Agenda/agenda_config.dart b/lib/Screens/Configurations/Section/SubSection/Agenda/agenda_config.dart index e156e63..3e65b94 100644 --- a/lib/Screens/Configurations/Section/SubSection/Agenda/agenda_config.dart +++ b/lib/Screens/Configurations/Section/SubSection/Agenda/agenda_config.dart @@ -1,9 +1,12 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:manager_app/Components/multi_string_input_container.dart'; import 'package:manager_app/Components/resource_input_container.dart'; import 'package:manager_api_new/api.dart'; import 'dart:convert'; +import 'package:manager_app/constants.dart'; + class AgendaConfig extends StatefulWidget { final String? color; final String? label; @@ -33,7 +36,25 @@ class _AgendaConfigState extends State { @override Widget build(BuildContext context) { - return ResourceInputContainer( + return MultiStringInputContainer( + label: "Fichiers json :", + resourceTypes: [ResourceType.Json, ResourceType.JsonUrl], + modalLabel: "JSON", + color: kPrimaryColor, + initialValue: agendaDTO.resourceIds!, + isTitle: false, + onGetResult: (value) { + setState(() { + if (agendaDTO.resourceIds != value) { + agendaDTO.resourceIds = value; + //save(true, articleDTO, appContext); + widget.onChanged(jsonEncode(agendaDTO).toString()); + } + }); + }, + maxLines: 1, + ); + /*return ResourceInputContainer( label: "Fichier JSON :", initialValue: agendaDTO.resourceId == null ? '': agendaDTO.resourceId, inResourceTypes: [ResourceType.Json, ResourceType.JsonUrl], @@ -42,6 +63,6 @@ class _AgendaConfigState extends State { agendaDTO.resourceId = resourceDTO.id; widget.onChanged(jsonEncode(agendaDTO).toString()); } - ); + );*/ } } diff --git a/lib/Screens/Configurations/Section/SubSection/Article/article_config.dart b/lib/Screens/Configurations/Section/SubSection/Article/article_config.dart index fd738f6..a7bd268 100644 --- a/lib/Screens/Configurations/Section/SubSection/Article/article_config.dart +++ b/lib/Screens/Configurations/Section/SubSection/Article/article_config.dart @@ -114,7 +114,7 @@ class _ArticleConfigState extends State { children: [ MultiStringInputContainer( label: "Audio :", - isAudio: true, + resourceTypes: [ResourceType.Audio], modalLabel: "Audio", color: kPrimaryColor, initialValue: articleDTO != null ? articleDTO.audioIds! : [], diff --git a/lib/Screens/Configurations/Section/SubSection/Quizz/new_update_score_quizz - deprecated.dart b/lib/Screens/Configurations/Section/SubSection/Quizz/new_update_score_quizz - deprecated.dart index 13f2c6d..a21a77c 100644 --- a/lib/Screens/Configurations/Section/SubSection/Quizz/new_update_score_quizz - deprecated.dart +++ b/lib/Screens/Configurations/Section/SubSection/Quizz/new_update_score_quizz - deprecated.dart @@ -50,7 +50,7 @@ Future showNewOrUpdateScoreQuizz(LevelDTO? inputLevelDTO, AppContext print(levelDTO); return levelDTO; } - }, 1, false, context); + }, 1, [], context); diff --git a/lib/Screens/Configurations/Section/SubSection/Quizz/quizz_answer_list.dart b/lib/Screens/Configurations/Section/SubSection/Quizz/quizz_answer_list.dart index c7bdcd2..c6b5206 100644 --- a/lib/Screens/Configurations/Section/SubSection/Quizz/quizz_answer_list.dart +++ b/lib/Screens/Configurations/Section/SubSection/Quizz/quizz_answer_list.dart @@ -127,7 +127,7 @@ class _QuizzResponseListState extends State { widget.onChanged(responsesMiddle); }); } - }, 1, false, context); + }, 1, [], context); }, child: Container( height: MediaQuery.of(context).size.width * 0.04, @@ -225,7 +225,7 @@ class _QuizzResponseListState extends State { widget.onChanged(responsesMiddle); } }); - }, 1, false, context); + }, 1, [], context); }, child: Padding( padding: const EdgeInsets.all(8.0), diff --git a/lib/Screens/Configurations/Section/SubSection/Quizz/quizz_config.dart b/lib/Screens/Configurations/Section/SubSection/Quizz/quizz_config.dart index 0b4ce80..baf64f6 100644 --- a/lib/Screens/Configurations/Section/SubSection/Quizz/quizz_config.dart +++ b/lib/Screens/Configurations/Section/SubSection/Quizz/quizz_config.dart @@ -364,7 +364,7 @@ class _QuizzConfigState extends State { widget.onChanged(jsonEncode(quizzDTO).toString()); }); } - }, 1, false, context); + }, 1, [], context); } } diff --git a/lib/api/swagger.yaml b/lib/api/swagger.yaml index b88b613..ffda81a 100644 --- a/lib/api/swagger.yaml +++ b/lib/api/swagger.yaml @@ -2424,12 +2424,11 @@ components: type: object additionalProperties: false properties: - resourceId: - type: string - nullable: true - resourceUrl: - type: string + resourceIds: + type: array nullable: true + items: + $ref: '#/components/schemas/TranslationDTO' User: type: object additionalProperties: false diff --git a/manager_api_new/doc/AgendaDTO.md b/manager_api_new/doc/AgendaDTO.md index 8b47e93..48800b2 100644 --- a/manager_api_new/doc/AgendaDTO.md +++ b/manager_api_new/doc/AgendaDTO.md @@ -8,8 +8,7 @@ import 'package:manager_api_new/api.dart'; ## Properties Name | Type | Description | Notes ------------ | ------------- | ------------- | ------------- -**resourceId** | **String** | | [optional] -**resourceUrl** | **String** | | [optional] +**resourceIds** | [**List**](TranslationDTO.md) | | [optional] [default to const []] [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/manager_api_new/lib/model/agenda_dto.dart b/manager_api_new/lib/model/agenda_dto.dart index 1e46c8d..e3cac18 100644 --- a/manager_api_new/lib/model/agenda_dto.dart +++ b/manager_api_new/lib/model/agenda_dto.dart @@ -13,39 +13,29 @@ part of openapi.api; class AgendaDTO { /// Returns a new [AgendaDTO] instance. AgendaDTO({ - this.resourceId, - this.resourceUrl, + this.resourceIds = const [], }); - String? resourceId; - - String? resourceUrl; + List? resourceIds; @override bool operator ==(Object other) => identical(this, other) || other is AgendaDTO && - other.resourceId == resourceId && - other.resourceUrl == resourceUrl; + other.resourceIds == resourceIds; @override int get hashCode => // ignore: unnecessary_parenthesis - (resourceId == null ? 0 : resourceId!.hashCode) + - (resourceUrl == null ? 0 : resourceUrl!.hashCode); + (resourceIds == null ? 0 : resourceIds!.hashCode); @override - String toString() => 'AgendaDTO[resourceId=$resourceId, resourceUrl=$resourceUrl]'; + String toString() => 'AgendaDTO[resourceIds=$resourceIds]'; Map toJson() { final json = {}; - if (this.resourceId != null) { - json[r'resourceId'] = this.resourceId; + if (this.resourceIds != null) { + json[r'resourceIds'] = this.resourceIds; } else { - json[r'resourceId'] = null; - } - if (this.resourceUrl != null) { - json[r'resourceUrl'] = this.resourceUrl; - } else { - json[r'resourceUrl'] = null; + json[r'resourceIds'] = null; } return json; } @@ -69,8 +59,7 @@ class AgendaDTO { }()); return AgendaDTO( - resourceId: mapValueOfType(json, r'resourceId'), - resourceUrl: mapValueOfType(json, r'resourceUrl'), + resourceIds: TranslationDTO.listFromJson(json[r'resourceIds']), ); } return null;