@quesmed/types 1.5.1 → 1.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/models/OsceMarksheet.d.ts +8 -0
- package/models/OsceMarksheet.js +64 -1
- package/models/OsceMarksheet.mjs +62 -0
- package/models/User.d.ts +2 -1
- package/package.json +1 -1
- package/resolvers/fragments/osce.js +1 -0
- package/resolvers/fragments/osce.mjs +1 -0
- package/resolvers/mutation/restricted/osce.d.ts +0 -2
- package/resolvers/mutation/restricted/osce.js +2 -14
- package/resolvers/mutation/restricted/osce.mjs +2 -14
- package/resolvers/subscription/osce.d.ts +2 -2
- package/resolvers/subscription/osce.js +1 -0
- package/resolvers/subscription/osce.mjs +1 -0
- package/utils/index.d.ts +1 -0
- package/utils/index.js +19 -1
- package/utils/index.mjs +17 -0
|
@@ -64,6 +64,7 @@ export interface IOsceMarksheet {
|
|
|
64
64
|
pausedAt: number | Date;
|
|
65
65
|
timeRemaining: string;
|
|
66
66
|
totalStationTime: string;
|
|
67
|
+
stage: EOsceStage;
|
|
67
68
|
marks: IOsceMarksheetMark[];
|
|
68
69
|
users: IOsceMarksheetUser[];
|
|
69
70
|
members: IUser[];
|
|
@@ -87,9 +88,16 @@ export declare enum EOsceTimerState {
|
|
|
87
88
|
PAUSE = 1,
|
|
88
89
|
COMPLETED = 2
|
|
89
90
|
}
|
|
91
|
+
export declare enum EOsceStage {
|
|
92
|
+
READING = 0,
|
|
93
|
+
STATION = 1,
|
|
94
|
+
FEEDBACK = 2
|
|
95
|
+
}
|
|
90
96
|
export interface IOsceMarksheetTimer {
|
|
91
97
|
osceMarksheetId: number;
|
|
92
98
|
timeRemaining: string;
|
|
93
99
|
totalStationTime: string;
|
|
100
|
+
stage: EOsceStage;
|
|
94
101
|
state: EOsceTimerState;
|
|
95
102
|
}
|
|
103
|
+
export declare function createTimerPayload(osceMarksheet: Partial<Omit<IOsceMarksheet, 'marks'>>): IOsceMarksheetTimer;
|
package/models/OsceMarksheet.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EOsceTimerState = exports.EOsceMarksheetState = exports.EOsceMarksheetAction = exports.EOsceRoles = void 0;
|
|
3
|
+
exports.createTimerPayload = exports.EOsceStage = exports.EOsceTimerState = exports.EOsceMarksheetState = exports.EOsceMarksheetAction = exports.EOsceRoles = void 0;
|
|
4
|
+
const utils_1 = require("../utils");
|
|
4
5
|
var EOsceRoles;
|
|
5
6
|
(function (EOsceRoles) {
|
|
6
7
|
EOsceRoles[EOsceRoles["ALL"] = 0] = "ALL";
|
|
@@ -34,3 +35,65 @@ var EOsceTimerState;
|
|
|
34
35
|
EOsceTimerState[EOsceTimerState["PAUSE"] = 1] = "PAUSE";
|
|
35
36
|
EOsceTimerState[EOsceTimerState["COMPLETED"] = 2] = "COMPLETED";
|
|
36
37
|
})(EOsceTimerState = exports.EOsceTimerState || (exports.EOsceTimerState = {}));
|
|
38
|
+
var EOsceStage;
|
|
39
|
+
(function (EOsceStage) {
|
|
40
|
+
EOsceStage[EOsceStage["READING"] = 0] = "READING";
|
|
41
|
+
EOsceStage[EOsceStage["STATION"] = 1] = "STATION";
|
|
42
|
+
EOsceStage[EOsceStage["FEEDBACK"] = 2] = "FEEDBACK";
|
|
43
|
+
})(EOsceStage = exports.EOsceStage || (exports.EOsceStage = {}));
|
|
44
|
+
function createTimerPayload(osceMarksheet) {
|
|
45
|
+
const payload = {
|
|
46
|
+
osceMarksheetId: osceMarksheet.id,
|
|
47
|
+
timeRemaining: '00:00',
|
|
48
|
+
totalStationTime: '00:00',
|
|
49
|
+
stage: EOsceStage.READING,
|
|
50
|
+
state: EOsceTimerState.PAUSE,
|
|
51
|
+
};
|
|
52
|
+
if (!osceMarksheet.startedAt ||
|
|
53
|
+
!osceMarksheet.endedAt ||
|
|
54
|
+
!osceMarksheet.readingTime ||
|
|
55
|
+
!osceMarksheet.stationTime ||
|
|
56
|
+
!osceMarksheet.feedbackTime) {
|
|
57
|
+
return payload;
|
|
58
|
+
}
|
|
59
|
+
payload.state = EOsceTimerState.START;
|
|
60
|
+
const stationDuration = osceMarksheet.readingTime +
|
|
61
|
+
(osceMarksheet.stationTime + osceMarksheet.feedbackTime) * 60;
|
|
62
|
+
payload.totalStationTime = (0, utils_1.printDuration)(stationDuration);
|
|
63
|
+
let endedAt;
|
|
64
|
+
if (typeof osceMarksheet.endedAt === 'number') {
|
|
65
|
+
endedAt = osceMarksheet.endedAt;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
endedAt = Math.floor(osceMarksheet.endedAt.getTime() / 1000);
|
|
69
|
+
}
|
|
70
|
+
// calculate duration from pause timestamp or from current time
|
|
71
|
+
let timeRemainingDuration = endedAt - Math.floor(Date.now() / 1000);
|
|
72
|
+
if (osceMarksheet.completed || timeRemainingDuration < 0) {
|
|
73
|
+
payload.state = EOsceTimerState.COMPLETED;
|
|
74
|
+
}
|
|
75
|
+
if (osceMarksheet.pausedAt) {
|
|
76
|
+
let pausedAt;
|
|
77
|
+
if (typeof osceMarksheet.pausedAt === 'number') {
|
|
78
|
+
pausedAt = osceMarksheet.pausedAt;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
pausedAt = Math.floor(osceMarksheet.pausedAt.getTime() / 1000);
|
|
82
|
+
}
|
|
83
|
+
timeRemainingDuration = endedAt - pausedAt;
|
|
84
|
+
payload.state = EOsceTimerState.PAUSE;
|
|
85
|
+
}
|
|
86
|
+
if (timeRemainingDuration > stationDuration - osceMarksheet.readingTime) {
|
|
87
|
+
payload.stage = EOsceStage.READING;
|
|
88
|
+
}
|
|
89
|
+
else if (timeRemainingDuration >
|
|
90
|
+
stationDuration - osceMarksheet.readingTime - osceMarksheet.stationTime * 60) {
|
|
91
|
+
payload.stage = EOsceStage.STATION;
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
payload.stage = EOsceStage.FEEDBACK;
|
|
95
|
+
}
|
|
96
|
+
payload.timeRemaining = (0, utils_1.printDuration)(timeRemainingDuration);
|
|
97
|
+
return payload;
|
|
98
|
+
}
|
|
99
|
+
exports.createTimerPayload = createTimerPayload;
|
package/models/OsceMarksheet.mjs
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { printDuration } from '../utils';
|
|
1
2
|
export var EOsceRoles;
|
|
2
3
|
(function (EOsceRoles) {
|
|
3
4
|
EOsceRoles[EOsceRoles["ALL"] = 0] = "ALL";
|
|
@@ -31,3 +32,64 @@ export var EOsceTimerState;
|
|
|
31
32
|
EOsceTimerState[EOsceTimerState["PAUSE"] = 1] = "PAUSE";
|
|
32
33
|
EOsceTimerState[EOsceTimerState["COMPLETED"] = 2] = "COMPLETED";
|
|
33
34
|
})(EOsceTimerState || (EOsceTimerState = {}));
|
|
35
|
+
export var EOsceStage;
|
|
36
|
+
(function (EOsceStage) {
|
|
37
|
+
EOsceStage[EOsceStage["READING"] = 0] = "READING";
|
|
38
|
+
EOsceStage[EOsceStage["STATION"] = 1] = "STATION";
|
|
39
|
+
EOsceStage[EOsceStage["FEEDBACK"] = 2] = "FEEDBACK";
|
|
40
|
+
})(EOsceStage || (EOsceStage = {}));
|
|
41
|
+
export function createTimerPayload(osceMarksheet) {
|
|
42
|
+
const payload = {
|
|
43
|
+
osceMarksheetId: osceMarksheet.id,
|
|
44
|
+
timeRemaining: '00:00',
|
|
45
|
+
totalStationTime: '00:00',
|
|
46
|
+
stage: EOsceStage.READING,
|
|
47
|
+
state: EOsceTimerState.PAUSE,
|
|
48
|
+
};
|
|
49
|
+
if (!osceMarksheet.startedAt ||
|
|
50
|
+
!osceMarksheet.endedAt ||
|
|
51
|
+
!osceMarksheet.readingTime ||
|
|
52
|
+
!osceMarksheet.stationTime ||
|
|
53
|
+
!osceMarksheet.feedbackTime) {
|
|
54
|
+
return payload;
|
|
55
|
+
}
|
|
56
|
+
payload.state = EOsceTimerState.START;
|
|
57
|
+
const stationDuration = osceMarksheet.readingTime +
|
|
58
|
+
(osceMarksheet.stationTime + osceMarksheet.feedbackTime) * 60;
|
|
59
|
+
payload.totalStationTime = printDuration(stationDuration);
|
|
60
|
+
let endedAt;
|
|
61
|
+
if (typeof osceMarksheet.endedAt === 'number') {
|
|
62
|
+
endedAt = osceMarksheet.endedAt;
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
endedAt = Math.floor(osceMarksheet.endedAt.getTime() / 1000);
|
|
66
|
+
}
|
|
67
|
+
// calculate duration from pause timestamp or from current time
|
|
68
|
+
let timeRemainingDuration = endedAt - Math.floor(Date.now() / 1000);
|
|
69
|
+
if (osceMarksheet.completed || timeRemainingDuration < 0) {
|
|
70
|
+
payload.state = EOsceTimerState.COMPLETED;
|
|
71
|
+
}
|
|
72
|
+
if (osceMarksheet.pausedAt) {
|
|
73
|
+
let pausedAt;
|
|
74
|
+
if (typeof osceMarksheet.pausedAt === 'number') {
|
|
75
|
+
pausedAt = osceMarksheet.pausedAt;
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
pausedAt = Math.floor(osceMarksheet.pausedAt.getTime() / 1000);
|
|
79
|
+
}
|
|
80
|
+
timeRemainingDuration = endedAt - pausedAt;
|
|
81
|
+
payload.state = EOsceTimerState.PAUSE;
|
|
82
|
+
}
|
|
83
|
+
if (timeRemainingDuration > stationDuration - osceMarksheet.readingTime) {
|
|
84
|
+
payload.stage = EOsceStage.READING;
|
|
85
|
+
}
|
|
86
|
+
else if (timeRemainingDuration >
|
|
87
|
+
stationDuration - osceMarksheet.readingTime - osceMarksheet.stationTime * 60) {
|
|
88
|
+
payload.stage = EOsceStage.STATION;
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
payload.stage = EOsceStage.FEEDBACK;
|
|
92
|
+
}
|
|
93
|
+
payload.timeRemaining = printDuration(timeRemainingDuration);
|
|
94
|
+
return payload;
|
|
95
|
+
}
|
package/models/User.d.ts
CHANGED
|
@@ -5,6 +5,7 @@ import { IQuestion } from './Question';
|
|
|
5
5
|
import { ISubscription } from './Subscription';
|
|
6
6
|
import { ITopic } from './Topic';
|
|
7
7
|
import { Id } from './Type';
|
|
8
|
+
export declare type IAccessLevel = 'subscriber' | 'administrator' | 'tutor';
|
|
8
9
|
export declare type IClassYear = 'Year 1' | 'Year 2' | 'Year 3' | 'Year 4' | 'Year 5' | 'Graduated' | 'PhD' | 'BSc' | 'MSc' | 'Beta Tester';
|
|
9
10
|
export declare const classYears: IClassYear[];
|
|
10
11
|
export declare enum EClassYearGroup {
|
|
@@ -20,7 +21,7 @@ export interface IPayload {
|
|
|
20
21
|
firstName: string;
|
|
21
22
|
lastName: string;
|
|
22
23
|
username: string;
|
|
23
|
-
accessLevel:
|
|
24
|
+
accessLevel: IAccessLevel;
|
|
24
25
|
tocAccepted: boolean;
|
|
25
26
|
exp: number;
|
|
26
27
|
stripeSubscriptionEndDate: number | null;
|
package/package.json
CHANGED
|
@@ -67,14 +67,12 @@ export declare const SAVE_OSCE_MARKSHEET: import("@apollo/client").DocumentNode;
|
|
|
67
67
|
export interface ISaveOsceMarksheetVar {
|
|
68
68
|
osceMarksheetId: Id;
|
|
69
69
|
globalScore?: number;
|
|
70
|
-
timeTaken?: number;
|
|
71
70
|
feedback?: string;
|
|
72
71
|
}
|
|
73
72
|
export declare type ISaveOsceMarksheetData = RestrictedData<graphqlNormalize & IOsceMarksheet, 'saveOsceMarksheet'>;
|
|
74
73
|
export declare const OSCE_MARKSHEET_ACTIONS: import("@apollo/client").DocumentNode;
|
|
75
74
|
export interface IOsceMarksheetActionsVar {
|
|
76
75
|
osceMarksheetId: Id;
|
|
77
|
-
agoraId: string;
|
|
78
76
|
action: EOsceMarksheetAction;
|
|
79
77
|
}
|
|
80
78
|
export declare type IOsceMarksheetActionsData = RestrictedData<number, 'osceMarksheetActions'>;
|
|
@@ -168,14 +168,12 @@ exports.SAVE_OSCE_MARKSHEET = (0, client_1.gql) `
|
|
|
168
168
|
$osceMarksheetId: Int!
|
|
169
169
|
$feedback: String
|
|
170
170
|
$globalScore: Int
|
|
171
|
-
$timeTaken: Int
|
|
172
171
|
) {
|
|
173
172
|
restricted {
|
|
174
173
|
saveOsceMarksheet(
|
|
175
174
|
osceMarksheetId: $osceMarksheetId
|
|
176
175
|
feedback: $feedback
|
|
177
176
|
globalScore: $globalScore
|
|
178
|
-
timeTaken: $timeTaken
|
|
179
177
|
) {
|
|
180
178
|
...OsceMarksheetFields
|
|
181
179
|
}
|
|
@@ -183,17 +181,9 @@ exports.SAVE_OSCE_MARKSHEET = (0, client_1.gql) `
|
|
|
183
181
|
}
|
|
184
182
|
`;
|
|
185
183
|
exports.OSCE_MARKSHEET_ACTIONS = (0, client_1.gql) `
|
|
186
|
-
mutation OsceMarksheetActions(
|
|
187
|
-
$osceMarksheetId: Int!
|
|
188
|
-
$agoraId: String!
|
|
189
|
-
$action: Int!
|
|
190
|
-
) {
|
|
184
|
+
mutation OsceMarksheetActions($osceMarksheetId: Int!, $action: Int!) {
|
|
191
185
|
restricted {
|
|
192
|
-
osceMarksheetActions(
|
|
193
|
-
osceMarksheetId: $osceMarksheetId
|
|
194
|
-
agoraId: $agoraId
|
|
195
|
-
action: $action
|
|
196
|
-
)
|
|
186
|
+
osceMarksheetActions(osceMarksheetId: $osceMarksheetId, action: $action)
|
|
197
187
|
}
|
|
198
188
|
}
|
|
199
189
|
`;
|
|
@@ -203,14 +193,12 @@ exports.END_OSCE_MARKSHEET = (0, client_1.gql) `
|
|
|
203
193
|
$osceMarksheetId: Int!
|
|
204
194
|
$feedback: String
|
|
205
195
|
$globalScore: Int
|
|
206
|
-
$timeTaken: Int
|
|
207
196
|
) {
|
|
208
197
|
restricted {
|
|
209
198
|
endOsceMarksheet(
|
|
210
199
|
osceMarksheetId: $osceMarksheetId
|
|
211
200
|
feedback: $feedback
|
|
212
201
|
globalScore: $globalScore
|
|
213
|
-
timeTaken: $timeTaken
|
|
214
202
|
) {
|
|
215
203
|
...OsceMarksheetFields
|
|
216
204
|
}
|
|
@@ -164,14 +164,12 @@ export const SAVE_OSCE_MARKSHEET = gql `
|
|
|
164
164
|
$osceMarksheetId: Int!
|
|
165
165
|
$feedback: String
|
|
166
166
|
$globalScore: Int
|
|
167
|
-
$timeTaken: Int
|
|
168
167
|
) {
|
|
169
168
|
restricted {
|
|
170
169
|
saveOsceMarksheet(
|
|
171
170
|
osceMarksheetId: $osceMarksheetId
|
|
172
171
|
feedback: $feedback
|
|
173
172
|
globalScore: $globalScore
|
|
174
|
-
timeTaken: $timeTaken
|
|
175
173
|
) {
|
|
176
174
|
...OsceMarksheetFields
|
|
177
175
|
}
|
|
@@ -179,17 +177,9 @@ export const SAVE_OSCE_MARKSHEET = gql `
|
|
|
179
177
|
}
|
|
180
178
|
`;
|
|
181
179
|
export const OSCE_MARKSHEET_ACTIONS = gql `
|
|
182
|
-
mutation OsceMarksheetActions(
|
|
183
|
-
$osceMarksheetId: Int!
|
|
184
|
-
$agoraId: String!
|
|
185
|
-
$action: Int!
|
|
186
|
-
) {
|
|
180
|
+
mutation OsceMarksheetActions($osceMarksheetId: Int!, $action: Int!) {
|
|
187
181
|
restricted {
|
|
188
|
-
osceMarksheetActions(
|
|
189
|
-
osceMarksheetId: $osceMarksheetId
|
|
190
|
-
agoraId: $agoraId
|
|
191
|
-
action: $action
|
|
192
|
-
)
|
|
182
|
+
osceMarksheetActions(osceMarksheetId: $osceMarksheetId, action: $action)
|
|
193
183
|
}
|
|
194
184
|
}
|
|
195
185
|
`;
|
|
@@ -199,14 +189,12 @@ export const END_OSCE_MARKSHEET = gql `
|
|
|
199
189
|
$osceMarksheetId: Int!
|
|
200
190
|
$feedback: String
|
|
201
191
|
$globalScore: Int
|
|
202
|
-
$timeTaken: Int
|
|
203
192
|
) {
|
|
204
193
|
restricted {
|
|
205
194
|
endOsceMarksheet(
|
|
206
195
|
osceMarksheetId: $osceMarksheetId
|
|
207
196
|
feedback: $feedback
|
|
208
197
|
globalScore: $globalScore
|
|
209
|
-
timeTaken: $timeTaken
|
|
210
198
|
) {
|
|
211
199
|
...OsceMarksheetFields
|
|
212
200
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import { EOsceMarksheetAction, EOsceRoles, IClassYear, Id, IOsceMarksheetTimer, IOsceMarksheetUser, IUser } from '../../models';
|
|
1
|
+
import { EClassYearGroup, EOsceMarksheetAction, EOsceRoles, IAccessLevel, IClassYear, Id, IOsceMarksheetTimer, IOsceMarksheetUser, IUser } from '../../models';
|
|
2
2
|
import { RootData } from '../types';
|
|
3
|
-
import { EClassYearGroup } from './../../models/User';
|
|
4
3
|
export declare const OSCE_ROLE_CHANGE_KEY = "OSCE_ROLE_CHANGE";
|
|
5
4
|
export declare const OSCE_MARKSHEET_ACTION_KEY = "OSCE_MARKSHEET_ACTION";
|
|
6
5
|
export declare const OSCE_MARKSHEET_TIMER_KEY = "OSCE_MARKSHEET_TIMER";
|
|
@@ -44,6 +43,7 @@ export interface IOsceMatchmakingAction {
|
|
|
44
43
|
userId: Id;
|
|
45
44
|
classYear: IClassYear;
|
|
46
45
|
classYearGroup: EClassYearGroup;
|
|
46
|
+
accessLevel: IAccessLevel;
|
|
47
47
|
lastSyncAt: number;
|
|
48
48
|
startedAt: number;
|
|
49
49
|
grouped: boolean;
|
package/utils/index.d.ts
CHANGED
package/utils/index.js
CHANGED
|
@@ -13,7 +13,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
14
|
};
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
-
exports.Uuid4 = void 0;
|
|
16
|
+
exports.printDuration = exports.Uuid4 = void 0;
|
|
17
17
|
__exportStar(require("./commonFunctions"), exports);
|
|
18
18
|
__exportStar(require("./lightgallery"), exports);
|
|
19
19
|
__exportStar(require("./offlineLink"), exports);
|
|
@@ -22,3 +22,21 @@ __exportStar(require("./webSocketLink"), exports);
|
|
|
22
22
|
__exportStar(require("./wordsToNumber"), exports);
|
|
23
23
|
const uuid4_1 = __importDefault(require("./uuid4"));
|
|
24
24
|
exports.Uuid4 = uuid4_1.default;
|
|
25
|
+
function printDuration(duration) {
|
|
26
|
+
let timeRemainingMins = Math.floor(duration / 60);
|
|
27
|
+
if (timeRemainingMins < 0) {
|
|
28
|
+
timeRemainingMins = 0;
|
|
29
|
+
}
|
|
30
|
+
const timeRemainingMinsStr = timeRemainingMins >= 10
|
|
31
|
+
? timeRemainingMins.toString()
|
|
32
|
+
: `0${timeRemainingMins}`;
|
|
33
|
+
let timeRemainingSecs = duration % 60;
|
|
34
|
+
if (timeRemainingSecs < 0) {
|
|
35
|
+
timeRemainingSecs = 0;
|
|
36
|
+
}
|
|
37
|
+
const timeRemainingSecsStr = timeRemainingSecs >= 10
|
|
38
|
+
? timeRemainingSecs.toString()
|
|
39
|
+
: `0${timeRemainingSecs}`;
|
|
40
|
+
return `${timeRemainingMinsStr}:${timeRemainingSecsStr}`;
|
|
41
|
+
}
|
|
42
|
+
exports.printDuration = printDuration;
|
package/utils/index.mjs
CHANGED
|
@@ -6,3 +6,20 @@ export * from './webSocketLink';
|
|
|
6
6
|
export * from './wordsToNumber';
|
|
7
7
|
import uuid from './uuid4';
|
|
8
8
|
export const Uuid4 = uuid;
|
|
9
|
+
export function printDuration(duration) {
|
|
10
|
+
let timeRemainingMins = Math.floor(duration / 60);
|
|
11
|
+
if (timeRemainingMins < 0) {
|
|
12
|
+
timeRemainingMins = 0;
|
|
13
|
+
}
|
|
14
|
+
const timeRemainingMinsStr = timeRemainingMins >= 10
|
|
15
|
+
? timeRemainingMins.toString()
|
|
16
|
+
: `0${timeRemainingMins}`;
|
|
17
|
+
let timeRemainingSecs = duration % 60;
|
|
18
|
+
if (timeRemainingSecs < 0) {
|
|
19
|
+
timeRemainingSecs = 0;
|
|
20
|
+
}
|
|
21
|
+
const timeRemainingSecsStr = timeRemainingSecs >= 10
|
|
22
|
+
? timeRemainingSecs.toString()
|
|
23
|
+
: `0${timeRemainingSecs}`;
|
|
24
|
+
return `${timeRemainingMinsStr}:${timeRemainingSecsStr}`;
|
|
25
|
+
}
|