Skip to content

Commit 6745f3b

Browse files
dobromirdobrevTodorBachvarovroberlander2Mihail Varbanovmihail-varbanov
authored
Release/v5.0.78+1878 (#3803)
* Hide Laundry location button even if it's location is valid [#1674] * Rename Attendee List to Registrants in Event2AttendanceDetailPanel [#3647] * Groups load upcoming events [#3645] * sync plugin * Fix typo. Rename Chineese to Chinese [#3646] * Version: 5.0.56+1856 * start improving survey preview [#3581] * override survey preview popup message [#3581] * Sync plugin. * Merge string.en.json [#3665] * Merge string.zh.json [#3665] * Add missing entries from strings.en.json [#3665] * Update CHANGELOG.md [#3665] * Show assistance tab depending on group membership for "Assistant" * Remove description from Attendance panels * Implement new Mobile access flow for requesting mobile credentials. [#3651] * Update CHANGELOG.md [#3651] * Version: 5.0.57+1857 * Acknowledge the new model for mobile id credentials from Identity BB [#3679] * Load mobile access details after successful device registration [#3679] * Read delete timout from config [#3679] * Update CHANGELOG.md [#3679] * Change To-Do item header title [#3677] * Update CHANGELOG.md [#3677] * sync plugin * keep content.attributes consistent with the ContentBB content * version: 5.0.58+1858 * Rename "i-card" to "Illini ID" [#3685] * Update CHANGELOG.md [#3685] * Do not show Illini ID FAQs for users that are not allowed to have Mobile Access [#3687] * Update CHANGELOG.md [#3687] * Fix wording for team roster and staff [#3682] * Update CHANGELOG.md [#3682] * Events Feed renamed to All Events [#3690] * Added dialog prompt to Star an event after successful registration [#3692] * Removed members selection when Create/Add event to group [#3672] * update changelog * version: 5.0.59+1859 * Hide Illini ID FAQs for all [#3696] * Update CHANGELOG.md [#3696] * Show Mobile Access based on mobile id status from studentid API [#3698] * Update CHANGELOG.md [#3698] * Remove warning. * - Bring back dialog for adding event to multiple groups that user is admin of [#3695] * - Group events load private events for group members[#3674] * remove hardcoded test message * version: 5.0.60+1860 * hook EventSelector.finishSelection * Event2CreatePanel update attendance description [#3702] * Acknowledge location description when presenting event locations [#3510]. * version: 5.0.61+1861 * Display right number of registrations [#3671]. * Update texts for Attendance panels * Update Texts for Event registration panel * Highlight Attendees count when their count reaches or exceeds event capacity [#3671]. * Show Guest List in Registration Panel * update changelog.md * Do not allow register button if event capacity is filled, display proper info status in this case [#3671]. * Updated CHANGELOG.md [#3671]. * version: 5.0.62+1862 * SavedPanel: load events from events/lite (includes private events) * Fix android studio INTERPRETER_PATH to use Mac OS path * Display game events date time in local time zone - 3.1 [#3714] * Show "Past" and "Upcoming" games based on the event day/time until midnight local time - 3.2 [#3714] * Show only participants in the Registration Panel guest list [#3678+] * Update CHANGELOG.md [#3714] * Version: 5.0.63+1863 * Fixed DSYM upload for Firebase Crashlytics on iOS. * Replace & with 'and' for event Categories * replace & with 'and' for group categories * replace & with 'and' for event sub category 'category' field * Display event2 time in local timezone [#3718] * Sync plugin [#3718] * Use local timezone for events time [#3718] * Update CHANGELOG.md [#3718] * Tidy source code [#3718]. * Tidy source code [#3718]. * Sync plugin [rokwire/app-flutter-plugin#377]. * Version: 5.0.64+1864 * Upgrade to connectivity_plus plugin [#rokmetro/vogue-app/issues/45). * Android: Update HID / Origo sdk to latest 1.9.1 version [#3725] * Update CHANGELOG.md [#3725] * iOS: update HID / Origo sdk to the latest 1.10.0 [#3727] * Update CHANGELOG.md [#3727] * Display registration type in attendees list [#3722]. * Load live games based on local timezone. [#3729] * Update CHANGELOG.md [#3729] * Play sound when adding attendee [#3722]. * Updated CHANGELOG.md [#3722]. * Version: 5.0.65+1865 * Show "am/pm" in lower case [#3735] * Show display date time formatted in the game [#3735] * Update CHANGELOG.md [#3735] * Sync plugin. * Do not show "Event Attendance" when modifying event. It is not acknolwedged from the backend [#3656] * Sync plugin. * Do not allow adding additional attendance taker if one's netid is in the registrant list [#3656] * Update CHANGELOG.md [#3656] * Version: 5.0.66+1866 * Do not show Register button until we are sure that registration is available for the event [#3671]. * Undo do not show "Event Attendance" when modifying event [#3656]. * Undo do not allow adding additional attendance taker if one's netid is in the registrant list [#3656]. * Updated CHANGELOG.md [#3656]. * version: 5.0.67+1867 * Updated plugin [#3743]. * Updated CHANGELOG.md [#3743]. * Do not show additional attendance takers edit when creating/updating event [#3656]. * Add event selector to AthleticsGameDetailPanel * update CHANGELOG * fix warning * version: 5.0.68+1868 * allow editing of event survey from bottom modal only if event has attendance details set * update changelog * fix typo, fix event survey refresh * Submit updated strings.zh.json [#3749] * Add missing key-value pairs [#3749] * Update CHANGELOG.md [#3749] * Tuned refreshing of event detail [#3723]. * sync assets/extra/content.attributes.json with latest on bb [#3749] * version: 5.0.69+1869 * Plugin version 1.5.0 * SECURITY.md version 5.0.69 * better handling of event survey update errors * pop to the details panel if survey creation fails after event creation * Sync plugin. * Updated CHANGELOG.md [rokwire/app-flutter-plugin#381]. * App version 5.0.70, Plugin version 1.5.1 * Acknowledge the new service APIs for the new /group/events/v3 backend APIs [#3733]. * Updated attendance taking message [#3762]. * Acknowledge 'can_renew_mobileid' value from studentid endpoint [#3763] * Check for invalid attendance takers before updating event attendance [#3762]. * Updated CHANGELOG.md [#3762]. * Show "Pending" / "Issuing" label based on the mobile id status that Identity BB returns [#3763] * Bring back "Renew" mobile id button. Show it based on the response from the /studentid API [#3763] * Implement "Renew" mobile access button. [#3763] * Update CHANGELOG.md [#3763] * Version: 5.0.71+1871 * Fixed unused import warnings. * Show progress indicator in GroupAllEventsPanel [#3733]. * Updated CHANGELOG.md [#3733]. * App version 5.0.72+1872 / Plugin version: 1.5.2 * Check if attendee candidate is registered for an event before registering it [#3722]. * Check if maual attendee is already added before adding it [#3722]. * Added a marker for checking if scanned attendee is already added before adding it [#3722]. * Added methods for capacity check and prompt, commented for now [#3722]. * Update strings.en.json file [#3770] * Change "Self Registered" to "Self-Registered" - 5.2 [#3770] * Update CHANGELOG.md [#3770] * Check for scanned attendees if they are already registered [#3722]. * Check for event capacity reached [#3722]. * Updated CHANGELOG.md [#3722]. * App version 5.0.73+1873 / Plugin version 1.5.3 * Acknowledge selected and highlighted states when guest list item is disabled [#3722]. * version: 5.0.74+1874 * version: 5.0.74+1874 / SECURITY.md * Improve Accessibility for Event2CreatePanel * Replace ampersand "&" with "and" [#3780] * Update CHANGELOG.md [#3780] * Update group privacy message * Update changelog * Version: 5.0.75+1875 * Sync plugin [#3781] * Get rid of Onboarding2.loginAccountScope as this is the default login scope now [#3781]. * Sync plugin [#3781]. * Implement paging for group events. Show correct number for events [#3790] * Update CHANGELOG.md [#3790] * Version: 5.0.76+1876 * Commit missed Podfile.lock file after plugin version change. * Update SECURITY.md with the latest app version. * Update SECURITY.md to set proper version. * Event2DetailPanel update follow up survey message [#3788] * Fix message * Fix DeviceCalendar add to calendar functionality [#3789] * update Settings title "My Calendar Settings" to "Add to My Device's Calendar" * Removed "My" section from Browse panel, "My Athletics" and "My News" moved to "Athletics" section, most of the Athletics section entries renamed [#3787]. * version: 5.0.77+1877 * Implement paging for linked events in Event2DetailPanel [#3790] * Update CHANGELOG.md [#3790] * Version: 5.0.78+1878 --------- Co-authored-by: Todor Bachvarov <tobachvarov@gmail.com> Co-authored-by: Ryan Oberlander <reoberlander2@gmail.com> Co-authored-by: Mihail Varbanov <mihail.varbanov@inabyte.com> Co-authored-by: Mihail Varbanov <misho@inabyte.com>
1 parent 30ebf1c commit 6745f3b

File tree

4 files changed

+80
-9
lines changed

4 files changed

+80
-9
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
66

77
## Unreleased
88

9+
## [5.0.78] - 2023-10-10
10+
### Fixed
11+
- Showing all sub-events in Events2DetailPanel [#3790](https://github.com/rokwire/illinois-app/issues/3790).
12+
913
## [5.0.77] - 2023-10-09
1014
### Changed
1115
- Event2DetailPanel update follow up survey message [#3788](https://github.com/rokwire/illinois-app/issues/3788).

SECURITY.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ Patches for [ **illinois-app** ] will only be applied to the following versions:
66

77
| Version | Supported |
88
|----------| ------------------ |
9-
| 5.0.77 | :white_check_mark: |
10-
| < 5.0.77 | :x: |
9+
| 5.0.78 | :white_check_mark: |
10+
| < 5.0.78 | :x: |
1111
| 4.3.61 | :white_check_mark: |
1212
| < 4.3.61 | :x: |
1313
| 4.2.52 | :white_check_mark: |

lib/ui/events2/Event2DetailPanel.dart

Lines changed: 73 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,17 @@ class _Event2DetailPanelState extends State<Event2DetailPanel> implements Notifi
6565
Survey? _survey;
6666
bool? _hasSurveyResponse;
6767
Event2PersonsResult? _persons;
68-
List<Event2>? _linkedEvents;
6968
Event2? _superEvent;
7069

70+
List<Event2>? _linkedEvents;
71+
bool _linkedEventsLoading = false;
72+
int? _totalLinkedEventsCount;
73+
bool _extendingLinkedEvents = false;
74+
bool? _lastPageLoadedAllLinkedEvents;
75+
static const int _linkedEventsPageLength = 20;
76+
77+
ScrollController _scrollController = ScrollController();
78+
7179
// Keep a copy of the user position in the State because it gets cleared somehow in the widget
7280
// when sending the appliction to background in iOS.
7381
Position? _userLocation;
@@ -76,7 +84,6 @@ class _Event2DetailPanelState extends State<Event2DetailPanel> implements Notifi
7684
bool _registrationLoading = false;
7785
bool _eventLoading = false;
7886
bool _eventProcessing = false;
79-
bool _linkedEventsLoading = false;
8087
bool _registrationLaunching = false;
8188
bool _websiteLaunching = false;
8289
bool _onlineLaunching = false;
@@ -90,6 +97,7 @@ class _Event2DetailPanelState extends State<Event2DetailPanel> implements Notifi
9097
Auth2.notifyLoginChanged,
9198
Events2.notifyUpdated,
9299
]);
100+
_scrollController.addListener(_scrollListener);
93101
_event = widget.event;
94102
_superEvent = widget.superEvent;
95103
_survey = widget.survey;
@@ -149,7 +157,7 @@ class _Event2DetailPanelState extends State<Event2DetailPanel> implements Notifi
149157

150158
Widget get _eventContent =>
151159
RefreshIndicator(onRefresh: _refreshEvent, child:
152-
CustomScrollView(slivers: <Widget>[
160+
CustomScrollView(controller: _scrollController, slivers: <Widget>[
153161
SliverToutHeaderBar(
154162
title: _event?.name,
155163
flexImageUrl: _event?.imageUrl,
@@ -683,6 +691,9 @@ class _Event2DetailPanelState extends State<Event2DetailPanel> implements Notifi
683691
));
684692
}
685693
}
694+
if (_extendingLinkedEvents) {
695+
cardWidgets.add(Padding(padding: EdgeInsets.only(top: cardWidgets.isNotEmpty ? 8 : 0), child: _extendingLinkedEventsIndicator));
696+
}
686697
}
687698
if (cardWidgets.isEmpty) {
688699
String? message;
@@ -715,6 +726,15 @@ class _Event2DetailPanelState extends State<Event2DetailPanel> implements Notifi
715726
)
716727
);
717728

729+
Widget get _extendingLinkedEventsIndicator => Container(
730+
padding: EdgeInsets.symmetric(horizontal: 16, vertical: 32),
731+
child: Align(
732+
alignment: Alignment.center,
733+
child: SizedBox(
734+
width: 24,
735+
height: 24,
736+
child: CircularProgressIndicator(
737+
strokeWidth: 3, valueColor: AlwaysStoppedAnimation<Color?>(Styles().colors!.fillColorSecondary)))));
718738

719739
List<Widget>? get _selectorWidget {
720740
Widget? customSelectorWidget = widget.eventSelector?.buildWidget(this);
@@ -1156,7 +1176,7 @@ class _Event2DetailPanelState extends State<Event2DetailPanel> implements Notifi
11561176
Event2Grouping? linkedEventsGrouping = _event?.linkedEventsGroupingQuery;
11571177
int? linkedEventsIndex = ((linkedEventsGrouping != null) && (_linkedEvents == null)) ? futures.length : null;
11581178
if (linkedEventsIndex != null) {
1159-
futures.add(Events2().loadEvents(Events2Query(grouping: linkedEventsGrouping)));
1179+
futures.add(Events2().loadEvents(Events2Query(grouping: linkedEventsGrouping, limit: _linkedEventsPageLength)));
11601180
//TMP: futures.add(Events2().loadEvents(Events2Query(searchText: 'Prairie')));
11611181
setState(() {
11621182
_linkedEventsLoading = true;
@@ -1195,6 +1215,10 @@ class _Event2DetailPanelState extends State<Event2DetailPanel> implements Notifi
11951215
}
11961216
if (linkedEventsResult?.events != null) {
11971217
_linkedEvents = linkedEventsResult?.events;
1218+
_lastPageLoadedAllLinkedEvents = (linkedEventsResult!.events!.length >= _linkedEventsPageLength);
1219+
if (linkedEventsResult.totalCount != null) {
1220+
_totalLinkedEventsCount = linkedEventsResult.totalCount;
1221+
}
11981222
}
11991223
if (superEvent != null) {
12001224
_superEvent = superEvent;
@@ -1235,7 +1259,7 @@ class _Event2DetailPanelState extends State<Event2DetailPanel> implements Notifi
12351259
Event2Grouping? linkedEventsGrouping = event.linkedEventsGroupingQuery;
12361260
int? linkedEventsIndex = (linkedEventsGrouping != null) ? futures.length : null;
12371261
if (linkedEventsIndex != null) {
1238-
futures.add(Events2().loadEvents(Events2Query(grouping: linkedEventsGrouping)));
1262+
futures.add(Events2().loadEvents(Events2Query(grouping: linkedEventsGrouping, limit: (_linkedEvents?.length ?? _linkedEventsPageLength))));
12391263
}
12401264

12411265
int? superEventIndex = event.isSuperEventChild ? futures.length : null;
@@ -1275,6 +1299,10 @@ class _Event2DetailPanelState extends State<Event2DetailPanel> implements Notifi
12751299
}
12761300
if (linkedEventsResult?.events != null) {
12771301
_linkedEvents = linkedEventsResult?.events;
1302+
_lastPageLoadedAllLinkedEvents = (linkedEventsResult!.events!.length >= _linkedEventsPageLength);
1303+
if (linkedEventsResult.totalCount != null) {
1304+
_totalLinkedEventsCount = linkedEventsResult.totalCount;
1305+
}
12781306
}
12791307
if (superEvent != null) {
12801308
_superEvent = superEvent;
@@ -1305,6 +1333,45 @@ class _Event2DetailPanelState extends State<Event2DetailPanel> implements Notifi
13051333
}
13061334
}
13071335

1336+
void _scrollListener() {
1337+
if ((_event?.hasLinkedEvents == true) &&
1338+
(_scrollController.offset >= _scrollController.position.maxScrollExtent) &&
1339+
(_hasMoreLinkedEvents != false) &&
1340+
!_linkedEventsLoading &&
1341+
!_extendingLinkedEvents) {
1342+
_extendLinkedEvents();
1343+
}
1344+
}
1345+
1346+
Future<void> _extendLinkedEvents() async {
1347+
Event2Grouping? linkedEventsGrouping = _event?.linkedEventsGroupingQuery;
1348+
if ((linkedEventsGrouping != null) && !_linkedEventsLoading && !_extendingLinkedEvents) {
1349+
setStateIfMounted(() {
1350+
_extendingLinkedEvents = true;
1351+
});
1352+
Events2ListResult? linkedEventsListResult = await Events2().loadEvents(Events2Query(grouping: linkedEventsGrouping, offset: _linkedEvents?.length ?? 0, limit: _linkedEventsPageLength));
1353+
List<Event2>? events = linkedEventsListResult?.events;
1354+
int? totalCount = linkedEventsListResult?.totalCount;
1355+
1356+
if (mounted && _extendingLinkedEvents && !_linkedEventsLoading) {
1357+
setState(() {
1358+
if (events != null) {
1359+
if (_linkedEvents != null) {
1360+
_linkedEvents?.addAll(events);
1361+
} else {
1362+
_linkedEvents = List<Event2>.from(events);
1363+
}
1364+
_lastPageLoadedAllLinkedEvents = (events.length >= _linkedEventsPageLength);
1365+
}
1366+
if (totalCount != null) {
1367+
_totalLinkedEventsCount = totalCount;
1368+
}
1369+
_extendingLinkedEvents = false;
1370+
});
1371+
}
1372+
}
1373+
}
1374+
13081375
//Event getters
13091376
bool get _isAdmin => _event?.userRole == Event2UserRole.admin;
13101377
bool get _isAttendanceTaker => _event?.userRole == Event2UserRole.attendanceTaker;
@@ -1313,7 +1380,7 @@ class _Event2DetailPanelState extends State<Event2DetailPanel> implements Notifi
13131380
bool get _hasDisplayCategories => (_displayCategories?.isNotEmpty == true);
13141381
bool get _isInternalRegistrationAvailable => (_event?.registrationDetails?.type == Event2RegistrationType.internal) &&
13151382
(_event?.registrationDetails?.isRegistrationAvailable(_persons?.registrationOccupancy) == true);
1316-
1383+
bool? get _hasMoreLinkedEvents => (_totalLinkedEventsCount != null) ? ((_linkedEvents?.length ?? 0) < _totalLinkedEventsCount!) : _lastPageLoadedAllLinkedEvents;
13171384

13181385
String? get _eventId => widget.event?.id ?? widget.eventId;
13191386

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ description: Illinois client application.
1111
# In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion.
1212
# Read more about iOS versioning at
1313
# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html
14-
version: 5.0.77+1877
14+
version: 5.0.78+1878
1515

1616
publish_to: none
1717

0 commit comments

Comments
 (0)