From 48f17377a86aba9d8aff8d8c66c951dfdbdf4cf1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Apr 2024 23:48:48 -0400 Subject: [PATCH 1/2] Bump tough-cookie from 4.1.2 to 4.1.3 in /admin (#195) Bumps [tough-cookie](https://github.com/salesforce/tough-cookie) from 4.1.2 to 4.1.3. - [Release notes](https://github.com/salesforce/tough-cookie/releases) - [Changelog](https://github.com/salesforce/tough-cookie/blob/master/CHANGELOG.md) - [Commits](https://github.com/salesforce/tough-cookie/compare/v4.1.2...v4.1.3) --- updated-dependencies: - dependency-name: tough-cookie dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- admin/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/admin/package-lock.json b/admin/package-lock.json index ef6fbaee..d692422c 100644 --- a/admin/package-lock.json +++ b/admin/package-lock.json @@ -14959,9 +14959,9 @@ } }, "node_modules/tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -26902,9 +26902,9 @@ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, "tough-cookie": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", - "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", "requires": { "psl": "^1.1.33", "punycode": "^2.1.1", From aed437d23198c78c5f09c3d40a8d60f06bbfc8f3 Mon Sep 17 00:00:00 2001 From: Brian La <43937402+BrianLa0616@users.noreply.github.com> Date: Wed, 17 Apr 2024 20:24:55 -0400 Subject: [PATCH 2/2] Byl8/completed challenges page (#196) * Initial commit (untested) * Connected to back end * Fix flutter format --- .../lib/profile/completed_challenge_cell.dart | 2 +- .../profile/completed_challenges_page.dart | 155 +++++++++++------- 2 files changed, 100 insertions(+), 57 deletions(-) diff --git a/game/lib/profile/completed_challenge_cell.dart b/game/lib/profile/completed_challenge_cell.dart index c81c2d4a..fd21dc21 100644 --- a/game/lib/profile/completed_challenge_cell.dart +++ b/game/lib/profile/completed_challenge_cell.dart @@ -78,7 +78,7 @@ class _CompletedChallengeFullState extends State { builder: (BuildContext context) { return ClipRRect( borderRadius: BorderRadius.circular(8), - child: Image.asset( + child: Image.network( picture, fit: BoxFit.cover, ), diff --git a/game/lib/profile/completed_challenges_page.dart b/game/lib/profile/completed_challenges_page.dart index 8d4cea4e..c87e97be 100644 --- a/game/lib/profile/completed_challenges_page.dart +++ b/game/lib/profile/completed_challenges_page.dart @@ -1,72 +1,115 @@ import 'package:flutter/material.dart'; +import 'package:game/api/game_client_dto.dart'; +import 'package:game/model/challenge_model.dart'; +import 'package:game/model/event_model.dart'; +import 'package:game/model/tracker_model.dart'; +import 'package:game/model/user_model.dart'; import 'package:game/profile/profile_page.dart'; import 'package:game/profile/completed_challenge_cell.dart'; +import 'package:game/utils/utility_functions.dart'; +import 'package:intl/intl.dart'; +import 'package:provider/provider.dart'; +import 'package:tuple/tuple.dart'; /* The page view of all the completed challenges */ class CompletedChallengesPage extends StatelessWidget { - // final locationImage = "assets/images/adwhite.jpeg"; - // final locationImage2 = "assets/images/38582.jpg"; - - final pictureList = ["assets/images/adwhite.jpeg", "assets/images/38582.jpg"]; - @override Widget build(BuildContext context) { return Scaffold( - backgroundColor: Color.fromARGB(255, 255, 248, 241), - appBar: AppBar( - backgroundColor: Color.fromARGB(255, 237, 86, 86), - leading: IconButton( - icon: const Icon(Icons.navigate_before), - color: Colors.white, - onPressed: () { - Navigator.pop( - context, - ); - }, - ), - title: const Text( - 'Completed', - style: TextStyle( + backgroundColor: Color.fromARGB(255, 255, 248, 241), + appBar: AppBar( + backgroundColor: Color.fromARGB(255, 237, 86, 86), + leading: IconButton( + icon: const Icon(Icons.navigate_before), color: Colors.white, - fontFamily: 'Poppins', - fontWeight: FontWeight.bold, + onPressed: () { + Navigator.pop( + context, + ); + }, ), - ), - actions: [], - ), - body: SingleChildScrollView( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Align( - child: CompletedChallengeFull( - name: 'Cornell Cafes', - pictures: pictureList, - type: 'Journeys', - date: 'January 19, 2023', - location: 'Arts Quad', - difficulty: 'Easy', - points: 120, - ), - ), - Align( - child: CompletedChallengeFull( - name: 'Libe Slope', - pictures: [ - "assets/images/adwhite.jpeg", - "assets/images/38582.jpg", - ], - type: 'Journeys', - date: 'February 20, 2023', - location: 'Arts Quad', - difficulty: 'Hard', - points: 120, - ), + title: const Text( + 'Completed', + style: TextStyle( + color: Colors.white, + fontFamily: 'Poppins', + fontWeight: FontWeight.bold, ), - ], + ), + actions: [], ), - ), - ); + body: Consumer4( + builder: (context, userModel, eventModel, trackerModel, + challengeModel, child) { + if (userModel.userData == null) { + return Center( + child: CircularProgressIndicator(), + ); + } + var username = userModel.userData?.username; + var score = userModel.userData?.score; + + List> completedEvents = []; + + //Get completed events + for (var eventId in userModel.userData!.trackedEvents!) { + var tracker = trackerModel.trackerByEventId(eventId); + EventDto? event = eventModel.getEventById(eventId); + if (tracker == null || event == null) { + continue; + } + if (tracker.prevChallengeDates!.length != + event.challenges!.length) { + continue; + } + + var completedDate = tracker.prevChallengeDates!.last; + DateTime date = + DateFormat("E, d MMM y HH:mm:ss").parse(completedDate); + + completedEvents.add(Tuple2(date, event)); + } + //Sort so that the most recent events are first + completedEvents.sort((a, b) => b.item1.compareTo(a.item1)); + final itemCount = completedEvents.length; + return ListView.separated( + itemBuilder: (context, index) { + var event = completedEvents[index].item2; + var date = completedEvents[index].item1; + var type = + event.challenges!.length > 1 ? "Journeys" : "Challenge"; + + var pictureList = []; + var locationList = []; + for (var challengeId in event.challenges ?? []) { + var challenge = challengeModel.getChallengeById(challengeId); + if (challenge != null) { + pictureList.add(challenge.imageUrl!); + locationList.add(challenge.location); + } + } + + //Calculate totalPoints. + var totalPoints = 0; + for (var challengeId in event.challenges ?? []) { + var challenge = challengeModel.getChallengeById(challengeId); + if (challenge != null) { + totalPoints += challenge.points ?? 0; + } + } + return CompletedChallengeFull( + name: event.name!, + pictures: pictureList, + type: type, + date: DateFormat("MMMM d, y").format(date), + location: locationList[0], + difficulty: difficultyToString[event.difficulty]!, + points: totalPoints, + ); + }, + separatorBuilder: (context, index) => const Divider(), + itemCount: itemCount); + })); } }