From b5357a811fe2794a4ae67d9deb64258f26a41f37 Mon Sep 17 00:00:00 2001 From: Dobromir Dobrev Date: Tue, 18 Feb 2025 13:52:38 +0200 Subject: [PATCH] Store progress for downloading survey results [#4799] --- assets/strings.en.json | 3 ++ assets/strings.es.json | 3 ++ assets/strings.zh.json | 3 ++ lib/ui/events2/Event2AdminSettingsPanel.dart | 48 ++++++++++++++++++-- lib/ui/events2/Event2DetailPanel.dart | 1 + 5 files changed, 53 insertions(+), 5 deletions(-) diff --git a/assets/strings.en.json b/assets/strings.en.json index 3b57c9d3a..7a404c73a 100644 --- a/assets/strings.en.json +++ b/assets/strings.en.json @@ -1644,6 +1644,9 @@ "panel.event2.detail.attendance.prompt.event_capacity_reached.description": "Mark as attended?", "panel.event2.detail.attendance.prompt.attendee_already_registered.description": "Already marked as attended.", + "panel.event2.detail.admin_settings.header.title": "There is no survey for this event.", + "panel.event2.detail.admin_settings.survey.responses.missing.msg": "There are no survey responses available.", + "panel.event2.detail.button.register.title": "Register", "panel.event2.detail.button.login.register.title": "Sign In to Register", "panel.event2.detail.button.unregister.title": "Unregister", diff --git a/assets/strings.es.json b/assets/strings.es.json index 4109db5c4..d590f3bc6 100644 --- a/assets/strings.es.json +++ b/assets/strings.es.json @@ -1642,6 +1642,9 @@ "panel.event2.detail.attendance.prompt.event_capacity_reached.description": "Mark as attended?", "panel.event2.detail.attendance.prompt.attendee_already_registered.description": "Already marked as attended.", + "panel.event2.detail.admin_settings.header.title": "No hay ninguna encuesta para este evento.", + "panel.event2.detail.admin_settings.survey.responses.missing.msg": "No hay respuestas de encuesta disponibles.", + "panel.event2.detail.button.register.title": "Registrarse", "panel.event2.detail.button.login.register.title": "Iniciar Sesión para Registrarse", "panel.event2.detail.button.unregister.title": "Cancelar el Registro", diff --git a/assets/strings.zh.json b/assets/strings.zh.json index 37afcf7ff..02cb41ba6 100644 --- a/assets/strings.zh.json +++ b/assets/strings.zh.json @@ -1629,6 +1629,9 @@ "panel.event2.detail.attendance.prompt.event_capacity_reached.description": "Mark as attended?", "panel.event2.detail.attendance.prompt.attendee_already_registered.description": "Already marked as attended.", + "panel.event2.detail.admin_settings.header.title": "此活動沒有調查。", + "panel.event2.detail.admin_settings.survey.responses.missing.msg": "尚無可用的調查回覆。", + "panel.event2.detail.button.register.title": "注册", "panel.event2.detail.button.login.register.title": "请登入以注册", "panel.event2.detail.button.unregister.title": "取消注册", diff --git a/lib/ui/events2/Event2AdminSettingsPanel.dart b/lib/ui/events2/Event2AdminSettingsPanel.dart index 8b223443d..ea418d0a3 100644 --- a/lib/ui/events2/Event2AdminSettingsPanel.dart +++ b/lib/ui/events2/Event2AdminSettingsPanel.dart @@ -5,10 +5,15 @@ import 'package:illinois/ui/events2/Even2SetupSuperEvent.dart'; import 'package:illinois/ui/events2/Event2SetupNotificationsPanel.dart'; import 'package:illinois/ui/events2/Event2Widgets.dart'; import 'package:illinois/utils/AppUtils.dart'; +import 'package:rokwire_plugin/model/auth2.directory.dart'; import 'package:rokwire_plugin/model/event2.dart'; +import 'package:rokwire_plugin/model/survey.dart'; +import 'package:rokwire_plugin/service/auth2.dart'; +import 'package:rokwire_plugin/service/auth2.directory.dart'; import 'package:rokwire_plugin/service/events2.dart'; import 'package:rokwire_plugin/service/localization.dart'; import 'package:rokwire_plugin/service/styles.dart'; +import 'package:rokwire_plugin/service/surveys.dart'; import 'package:rokwire_plugin/utils/utils.dart'; import '../../service/Analytics.dart'; @@ -18,8 +23,9 @@ import 'Event2CreatePanel.dart'; class Event2AdminSettingsPanel extends StatefulWidget{ final Event2? event; + final String? surveyId; - const Event2AdminSettingsPanel({super.key, this.event}); + const Event2AdminSettingsPanel({super.key, this.event, this.surveyId}); @override State createState() => Event2AdminSettingsState(); @@ -27,6 +33,7 @@ class Event2AdminSettingsPanel extends StatefulWidget{ class Event2AdminSettingsState extends State{ bool _duplicating = false; + bool _loadingSurveyResponses = false; @override Widget build(BuildContext context) { @@ -75,10 +82,11 @@ class Event2AdminSettingsState extends State{ title: 'UPLOAD ATTENDANCE .csv', onTap: _onUploadAttendance), ), - Visibility(visible: _canUploadCsv, + Visibility(visible: (_canUploadCsv && _hasSurvey), child: _ButtonWidget( title: 'DOWNLOAD SURVEY RESULTS', - onTap: _onDownloadSurveyResults), + onTap: _onDownloadSurveyResults, + progress: _loadingSurveyResponses), ) ]), ) @@ -124,9 +132,37 @@ class Event2AdminSettingsState extends State{ AppToast.showMessage("TBD"); } - void _onDownloadSurveyResults() { + void _onDownloadSurveyResults() async { Analytics().logSelect(target: "Download Survey Results"); - AppToast.showMessage("TBD"); + String? surveyId = widget.surveyId; + if (StringUtils.isEmpty(surveyId)) { + AppAlert.showDialogResult(context, + Localization().getStringEx('panel.event2.detail.admin_settings.survey.missing.msg', 'There is no survey for this event.')); + return; + } + setStateIfMounted(() { + _loadingSurveyResponses = true; + }); + List? responses = await Surveys().loadAllSurveyResponses(surveyId!); + if (CollectionUtils.isEmpty(responses)) { + setStateIfMounted(() { + _loadingSurveyResponses = false; + }); + AppAlert.showDialogResult( + context, + Localization() + .getStringEx('panel.event2.detail.admin_settings.survey.responses.missing.msg', 'There are no survey responses available.')); + return; + } + List? accountIds = responses!.map((response) => StringUtils.ensureNotEmpty(response.userId)).toList(); + List? accounts = await Auth2().loadDirectoryAccounts(ids: accountIds); + if (CollectionUtils.isEmpty(accounts)) { + debugPrint('Download survey responses - failed to load public accounts.'); + } + //TBD: DD - continue implementation + setStateIfMounted(() { + _loadingSurveyResponses = false; + }); } void _onSettingDuplicateEvent() { @@ -189,6 +225,8 @@ class Event2AdminSettingsState extends State{ bool get _showSuperEvent => true /*_event?.isSuperEventChild == false*/; bool get _canUploadCsv => PlatformUtils.isWeb; + + bool get _hasSurvey => StringUtils.isNotEmpty(widget.surveyId); } class _ButtonWidget extends StatelessWidget{ diff --git a/lib/ui/events2/Event2DetailPanel.dart b/lib/ui/events2/Event2DetailPanel.dart index de037c349..63e689b95 100644 --- a/lib/ui/events2/Event2DetailPanel.dart +++ b/lib/ui/events2/Event2DetailPanel.dart @@ -1121,6 +1121,7 @@ class _Event2DetailPanelState extends Event2Selector2State im if (_event != null) { Navigator.push(context, CupertinoPageRoute(builder: (context) => Event2AdminSettingsPanel( event: _event, + surveyId: _survey?.id, ))); } }