diff --git a/projects/gameboard-ui/src/app/game/gamespace-quiz/gamespace-quiz.component.ts b/projects/gameboard-ui/src/app/game/gamespace-quiz/gamespace-quiz.component.ts
index d7ff4d98..42db89b1 100644
--- a/projects/gameboard-ui/src/app/game/gamespace-quiz/gamespace-quiz.component.ts
+++ b/projects/gameboard-ui/src/app/game/gamespace-quiz/gamespace-quiz.component.ts
@@ -122,7 +122,7 @@ export class GamespaceQuizComponent implements OnInit, OnChanges {
}
- // if the teamID changed, managed the team hub
+ // if the teamID changed, manage the team hub
if (changes?.spec?.previousValue?.instance?.teamId !== this.spec?.instance?.teamId) {
// (manage the team hub subscription separately to avoid orphaning subscriptions when the teamid changes)
this._teamHubEventsSubscription?.unsubscribe();
diff --git a/projects/gameboard-ui/src/app/game/pages/gameboard-page/gameboard-page.component.html b/projects/gameboard-ui/src/app/game/pages/gameboard-page/gameboard-page.component.html
index 9018d821..87a816e3 100644
--- a/projects/gameboard-ui/src/app/game/pages/gameboard-page/gameboard-page.component.html
+++ b/projects/gameboard-ui/src/app/game/pages/gameboard-page/gameboard-page.component.html
@@ -11,8 +11,7 @@
diff --git a/projects/gameboard-ui/src/app/game/pages/gameboard-page/gameboard-page.component.ts b/projects/gameboard-ui/src/app/game/pages/gameboard-page/gameboard-page.component.ts
index 3f831807..a2258545 100644
--- a/projects/gameboard-ui/src/app/game/pages/gameboard-page/gameboard-page.component.ts
+++ b/projects/gameboard-ui/src/app/game/pages/gameboard-page/gameboard-page.component.ts
@@ -14,7 +14,6 @@ import { ApiUser } from '@/api/user-models';
import { ConfigService } from '@/utility/config.service';
import { NotificationService } from '@/services/notification.service';
import { UserService } from '@/utility/user.service';
-import { GameboardPerformanceSummaryViewModel } from '@/core/components/gameboard-performance-summary/gameboard-performance-summary.component';
import { BrowserService } from '@/services/browser.service';
import { HttpErrorResponse } from '@angular/common/http';
import { ApiError } from '@/api/models';
@@ -47,17 +46,16 @@ export class GameboardPageComponent {
variant = 0;
user$: Observable
;
cid = '';
- performanceSummaryViewModel?: GameboardPerformanceSummaryViewModel;
@ViewChild("startChallengeConfirmButton") protected startChallengeConfirmButton?: ConfirmButtonComponent;
constructor(
+ challengeService: ChallengesService,
route: ActivatedRoute,
title: Title,
usersvc: UserService,
private browserService: BrowserService,
private api: BoardService,
- private challengeService: ChallengesService,
private config: ConfigService,
private hub: NotificationService,
private unsub: UnsubscriberService
@@ -81,20 +79,6 @@ export class GameboardPageComponent {
tap(b => {
this.ctx = b;
title.setTitle(`${b.game.name} | ${this.config.appName}`);
-
- this.performanceSummaryViewModel = {
- player: {
- id: b.id,
- teamId: b.teamId,
- session: b.session,
- scoring: {
- rank: b.rank,
- score: b.score,
- partialCount: b.partialCount,
- correctCount: b.correctCount
- }
- }
- };
}),
tap(b => this.startHub(b)),
tap(() => this.reselect())
diff --git a/projects/gameboard-ui/src/app/game/player-session/player-session.component.html b/projects/gameboard-ui/src/app/game/player-session/player-session.component.html
index b2d25042..96e0eb70 100644
--- a/projects/gameboard-ui/src/app/game/player-session/player-session.component.html
+++ b/projects/gameboard-ui/src/app/game/player-session/player-session.component.html
@@ -45,8 +45,8 @@
[isSyncStartGame]="ctx.game.requireSynchronizedStart">
-
+
diff --git a/projects/gameboard-ui/src/app/game/player-session/player-session.component.ts b/projects/gameboard-ui/src/app/game/player-session/player-session.component.ts
index 39120f21..6c2ac07c 100644
--- a/projects/gameboard-ui/src/app/game/player-session/player-session.component.ts
+++ b/projects/gameboard-ui/src/app/game/player-session/player-session.component.ts
@@ -10,7 +10,6 @@ import { PlayerService } from '../../api/player.service';
import { UserService } from '@/api/user.service';
import { UserService as LocalUserService } from "@/utility/user.service";
import { fa } from '@/services/font-awesome.service';
-import { GameboardPerformanceSummaryViewModel } from '../../core/components/gameboard-performance-summary/gameboard-performance-summary.component';
import { ModalConfirmConfig } from '@/core/components/modal/modal.models';
import { ModalConfirmService } from '@/services/modal-confirm.service';
import { TeamService } from '@/api/team.service';
@@ -36,12 +35,10 @@ export class PlayerSessionComponent implements OnDestroy {
// sets up the modal if it's a team game that needs confirmation
protected modalConfig?: ModalConfirmConfig;
protected isDoubleChecking = false;
- protected performanceSummaryViewModel$ = new BehaviorSubject(undefined);
protected canAdminStart = false;
protected canIgnoreSessionResetSettings$ = this.localUserService.can$("Play_IgnoreSessionResetSettings");
protected hasTimeRemaining = false;
- protected performanceSummaryViewModel?: GameboardPerformanceSummaryViewModel;
protected timeRemainingMs$?: Observable;
constructor(
@@ -55,25 +52,6 @@ export class PlayerSessionComponent implements OnDestroy {
async ngOnInit() {
this.ctxSub = this.ctx$.pipe(
tap(ctx => {
- let vm: GameboardPerformanceSummaryViewModel | undefined = undefined;
-
- if (ctx) {
- vm = {
- player: {
- id: ctx.player.id,
- teamId: ctx.player.teamId,
- session: ctx.player.session,
- scoring: {
- rank: ctx.player.rank,
- score: ctx.player.score,
- correctCount: ctx.player.correctCount,
- partialCount: ctx.player.partialCount
- }
- }
- };
- }
-
- this.performanceSummaryViewModel$.next(vm);
this.player$.next(ctx?.player);
}),
tap(ctx => {
diff --git a/projects/gameboard-ui/src/app/reports/components/report-stat-summary/report-stat-summary.component.html b/projects/gameboard-ui/src/app/reports/components/report-stat-summary/report-stat-summary.component.html
index b70c83c9..97bbafb1 100644
--- a/projects/gameboard-ui/src/app/reports/components/report-stat-summary/report-stat-summary.component.html
+++ b/projects/gameboard-ui/src/app/reports/components/report-stat-summary/report-stat-summary.component.html
@@ -13,7 +13,7 @@ Summary
-
+
{{ stat.value }}
{{ stat.label }}
diff --git a/projects/gameboard-ui/src/app/reports/components/reports/enrollment-report/enrollment-report.component.ts b/projects/gameboard-ui/src/app/reports/components/reports/enrollment-report/enrollment-report.component.ts
index 3edb51cb..5cec5331 100644
--- a/projects/gameboard-ui/src/app/reports/components/reports/enrollment-report/enrollment-report.component.ts
+++ b/projects/gameboard-ui/src/app/reports/components/reports/enrollment-report/enrollment-report.component.ts
@@ -129,7 +129,9 @@ export class EnrollmentReportComponent extends ReportComponentBase
!!e)
.map(e => e! as ReportSummaryStat);
diff --git a/projects/gameboard-ui/src/app/reports/components/reports/enrollment-report/enrollment-report.models.ts b/projects/gameboard-ui/src/app/reports/components/reports/enrollment-report/enrollment-report.models.ts
index 8c4d4177..420dcd83 100644
--- a/projects/gameboard-ui/src/app/reports/components/reports/enrollment-report/enrollment-report.models.ts
+++ b/projects/gameboard-ui/src/app/reports/components/reports/enrollment-report/enrollment-report.models.ts
@@ -82,6 +82,8 @@ export interface EnrollmentReportStatSummary {
sponsor: ReportSponsor,
distinctPlayerCount: number;
}
+ teamsWithNoSessionCount: number;
+ teamsWithNoStartedChallengeCount: number;
}
export interface EnrollmentReportLineChartGroup {
diff --git a/projects/gameboard-ui/src/app/services/event-horizon-rendering.service.ts b/projects/gameboard-ui/src/app/services/event-horizon-rendering.service.ts
index d0267d06..badf5497 100644
--- a/projects/gameboard-ui/src/app/services/event-horizon-rendering.service.ts
+++ b/projects/gameboard-ui/src/app/services/event-horizon-rendering.service.ts
@@ -71,7 +71,7 @@ export class EventHorizonRenderingService {
return `${groupData.content}
`;
}
- public toModalHtmlContent(timelineEvent: EventHorizonGenericEvent, challengeSpec: EventHorizonChallengeSpec): string {
+ public toModalHtmlContent(timelineEvent: EventHorizonGenericEvent, challengeSpec: EventHorizonChallengeSpec, includeClipboardPrompt?: boolean): string {
if (!timelineEvent)
return "";
@@ -80,32 +80,37 @@ export class EventHorizonRenderingService {
switch (timelineEvent.type) {
case "challengeStarted":
- detail = this.toChallengeStartedModalContent(timelineEvent, challengeSpec);
+ detail = this.toChallengeStartedMarkdown(timelineEvent, challengeSpec);
break;
case "solveComplete":
- detail = this.toSolveCompleteModalContent(timelineEvent as EventHorizonSolveCompleteEvent, challengeSpec);
+ detail = this.toSolveCompleteMarkdown(timelineEvent as EventHorizonSolveCompleteEvent, challengeSpec);
break;
case "submissionScored":
- detail = this.toSubmissionScoredModalContent(timelineEvent as EventHorizonSubmissionScoredEvent, challengeSpec);
+ detail = this.toSubmissionScoredMarkdown(timelineEvent as EventHorizonSubmissionScoredEvent, challengeSpec);
break;
}
+ let retVal = header;
+
if (detail) {
- return `${header}\n\n${detail}\n\n_Click to copy this event to your clipboard as markdown_`;
+ retVal = `${retVal}\n\n${detail}`;
+
+ if (includeClipboardPrompt)
+ retVal = `${retVal}\n\n_Click to copy this event to your clipboard as markdown_`;
}
- return "";
+ return retVal;
}
private getTooltipHeader(timelineEvent: EventHorizonGenericEvent) {
return `#### ${this.toFriendlyName(timelineEvent.type)}\n##### ${timelineEvent.timestamp.toLocaleString(DateTime.DATETIME_MED)}`;
}
- private toChallengeStartedModalContent(timelineEvent: EventHorizonGenericEvent, challengeSpec: EventHorizonChallengeSpec) {
+ private toChallengeStartedMarkdown(timelineEvent: EventHorizonGenericEvent, challengeSpec: EventHorizonChallengeSpec) {
return `${challengeSpec.name} began.`;
}
- private toSubmissionScoredModalContent(timelineEvent: EventHorizonSubmissionScoredEvent, challengeSpec: EventHorizonChallengeSpec) {
+ private toSubmissionScoredMarkdown(timelineEvent: EventHorizonSubmissionScoredEvent, challengeSpec: EventHorizonChallengeSpec) {
let attemptSummary = `${timelineEvent.eventData.attemptNumber}`;
if (challengeSpec.maxAttempts)
attemptSummary = `${attemptSummary}/${challengeSpec.maxAttempts}`;
@@ -119,7 +124,7 @@ export class EventHorizonRenderingService {
`.trim();
}
- private toSolveCompleteModalContent(timelineEvent: EventHorizonSolveCompleteEvent, challengeSpec: EventHorizonChallengeSpec) {
+ private toSolveCompleteMarkdown(timelineEvent: EventHorizonSolveCompleteEvent, challengeSpec: EventHorizonChallengeSpec) {
let attemptSummary = `${timelineEvent.eventData.attemptsUsed}`;
if (challengeSpec.maxAttempts)
attemptSummary = `${attemptSummary}/${challengeSpec.maxAttempts}`;
@@ -138,7 +143,7 @@ export class EventHorizonRenderingService {
content: eventName,
className: `eh-event ${isClickable ? "eh-event-clickable" : ""} ${className}`,
isClickable,
- title: this.markdownHelpers.toHtml(this.toModalHtmlContent(timelineEvent, challengeSpec)),
+ title: this.markdownHelpers.toHtml(this.toModalHtmlContent(timelineEvent, challengeSpec, true)),
eventData: null
};
}