Skip to content

Commit

Permalink
Merge pull request #179 from CubingZA/feature/tied-records
Browse files Browse the repository at this point in the history
Handle ties in Provincial and National Records
  • Loading branch information
AlphaSheep authored Oct 27, 2023
2 parents da4ab23 + a1d2ba1 commit c1858f4
Show file tree
Hide file tree
Showing 16 changed files with 452 additions and 262 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ <h2>South African Records</h2>
<tbody>
<tr *ngFor="let record of records" class="record-table-row">

<td class="table-single">
<a href="{{link.toPerson(record.singleId)}}" target="_blank" rel=noopener>{{record.singleName}}</a>
<td class="table-single table-name">
<div *ngFor="let wcaId of record.singleId; index as i">
<a href="{{link.toPerson(wcaId)}}" target="_blank" rel=noopener>{{record.singleName[i]}}</a>
</div>
</td>
<td class="table-middle">
<a href="{{link.toRankings(record.eventId, 'single')}}" target="_blank" rel=noopener>
Expand All @@ -42,8 +44,10 @@ <h2>South African Records</h2>
</a>
</td>

<td class="table-average">
<a href="{{link.toPerson(record.averageId)}}" target="_blank" rel=noopener>{{record.averageName}}</a>
<td class="table-average table-name">
<div *ngFor="let wcaId of record.averageId; index as i">
<a href="{{link.toPerson(wcaId)}}" target="_blank" rel=noopener>{{record.averageName[i]}}</a>
</div>
</td>

</tr>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,14 @@
text-align: center;
}

.table-name {
padding-top: 0.4em;
padding-bottom: 0.4em;
div:not(:first-child) {
margin-top: 0.4em;
}
}

.label {
font-size: 0.8em;
padding: 0.15em 0.4em 0.3em 0.4em;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,27 +14,27 @@ const mockRecordData: Record[] = [
{
eventName: "3x3x3 Cube",
eventId: "333",
singleName: "John Doe",
singleResult: "1:00:00",
singleId: "1",
singleDate: mockPastDate,
averageName: "John Doe",
singleName: ["John Doe"],
singleId: ["1"],
singleDate: [mockPastDate],
averageResult: "1:30:00",
averageId: "1",
averageDate: mockPastDate,
averageName: ["John Doe"],
averageId: ["1"],
averageDate: [mockPastDate],
eventRank: 1
},
{
eventName: "Skewb",
eventId: "skewb",
singleName: "Bob Person",
singleResult: "0:30:00",
singleId: "2",
singleDate: mockNewDate,
averageName: "Someone Else",
singleName: ["Bob Person"],
singleId: ["2"],
singleDate: [mockNewDate],
averageResult: "0:40:00",
averageId: "3",
averageDate: mockNewDate,
averageName: ["Someone Else"],
averageId: ["3"],
averageDate: [mockNewDate],
eventRank: 2
}
];
Expand Down Expand Up @@ -103,12 +103,28 @@ describe('NationalRecordsListComponent', () => {
describe('isNew', () => {

it('should return true for dates within the last month', () => {
expect(component.isNew(mockToday)).toBeTrue();
expect(component.isNew(mockNewDate)).toBeTrue();
expect(component.isNew([mockToday])).toBeTrue();
expect(component.isNew([mockNewDate])).toBeTrue();
});

it('should return false for dates older than a month', () => {
expect(component.isNew(mockPastDate)).toBeFalse();
expect(component.isNew([mockPastDate])).toBeFalse();
});

it('should return false for empty dates', () => {
expect(component.isNew([])).toBeFalse();
});

it('should return false for multiple past dates', () => {
expect(component.isNew([mockPastDate, mockPastDate])).toBeFalse();
});

it('should return true for multiple new dates', () => {
expect(component.isNew([mockToday, mockNewDate])).toBeTrue();
});

it('should return true for a mix of new and old dates', () => {
expect(component.isNew([mockToday, mockPastDate])).toBeTrue();
});

it('should show a NEW tag for new records', () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,15 @@ export class NationalRecordsListComponent {
});
}

isNew(date?: Date) {
if (!date) return false;
isNew(dates?: Date[]) {
if (!dates) return false;

const today = new Date();
const lastMonth = new Date(today.getFullYear(), today.getMonth() - 1, today.getDate());
return date > lastMonth;

for (let i in dates) {
if (dates[i] > lastMonth) return true;
}
return false
}
}
19 changes: 11 additions & 8 deletions client/src/app/interfaces/record/record.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
export interface Record {
eventName: string;
eventId: string;
singleName: string;
eventRank?: number;

province?: string;

singleResult: string;
singleId: string;
singleDate?: Date;
singleName: string[];
singleId: string[];
singleDate?: Date[];
singleNR?: boolean;
averageName: string;

averageResult: string;
averageId: string;
averageDate?: Date;
averageName: string[];
averageId: string[];
averageDate?: Date[];
averageNR?: boolean;
eventRank?: number;
province?: string;
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@ <h2><span class="cubing-icon event-{{eventId}}"></span>{{getEventName(eventId)}}
</thead>
<tbody>
<tr *ngFor="let record of getRecordsForEvent(eventId)">
<td class="table-single">
<a href="{{link.toPerson(record.singleId)}}" target="_blank" rel=noopener>{{record.singleName}}</a>
<td class="table-single table-name">
<div *ngFor="let wcaId of record.singleId; index as i">
<a href="{{link.toPerson(wcaId)}}" target="_blank" rel=noopener>{{record.singleName[i]}}</a>
</div>
</td>
<td class="table-middle" [ngClass]="{'national-record': record.singleNR}">
<a href="{{link.toRankings(record.eventId, 'single')}}" target="_blank" rel=noopener>
Expand All @@ -45,8 +47,10 @@ <h2><span class="cubing-icon event-{{eventId}}"></span>{{getEventName(eventId)}}
{{record.averageResult}}
</a>
</td>
<td class="table-average" *ngIf="showAvgForEvent(eventId)">
<a href="{{link.toPerson(record.averageId)}}" target="_blank" rel=noopener>{{record.averageName}}</a>
<td class="table-average table-name" *ngIf="showAvgForEvent(eventId)">
<div *ngFor="let wcaId of record.averageId; index as i">
<a href="{{link.toPerson(wcaId)}}" target="_blank" rel=noopener>{{record.averageName[i]}}</a>
</div>
</td>
</tr>
<tr *ngIf="!getRecordsForEvent(eventId)">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,5 +80,13 @@
.table-middle {
text-align: center;
}

.table-name {
padding-top: 0.4em;
padding-bottom: 0.4em;
div:not(:first-child) {
margin-top: 0.4em;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,47 +16,47 @@ const mockProvincialRecords: ProvincialRecordTable = {
{
eventName: "3x3x3 Cube",
eventId: "333",
singleName: "Test Person",
singleResult: "1:00:00",
singleId: "2345TEST01",
averageName: "Test Person",
singleName: ["Test Person"],
singleId: ["2345TEST01"],
averageResult: "1:30:00",
averageId: "2345TEST02",
averageName: ["Test Person"],
averageId: ["2345TEST02"],
province: "GT"
},
{
eventName: "3x3x3 Cube",
eventId: "333",
singleName: "Test Person",
singleResult: "1:00:00",
singleId: "2345TEST03",
averageName: "Another Person",
singleName: ["Test Person"],
singleId: ["2345TEST03"],
averageResult: "1:30:00",
averageId: "2345TEST04",
averageName: ["Another Person"],
averageId: ["2345TEST04"],
province: "WC"
}
],
"222": [
{
eventName: "2x2x2 Cube",
eventId: "222",
singleName: "Someone Else",
singleResult: "1:00:00",
singleId: "2345TEST01",
averageName: "",
singleName: ["Someone Else"],
singleId: ["2345TEST01"],
averageResult: "",
averageId: "",
averageName: [],
averageId: [],
province: "GT"
},
{
eventName: "2x2x2 Cube",
eventId: "222",
singleName: "Test Person",
singleResult: "1:00:00",
singleId: "2345TEST03",
averageName: "",
singleName: ["Test Person"],
singleId: ["2345TEST03"],
averageResult: "",
averageId: "",
averageName: [],
averageId: [],
province: "WC"
}
]
Expand Down
60 changes: 30 additions & 30 deletions client/src/app/services/record/record.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,28 +26,28 @@ describe('RecordService', () => {
{
eventName: "3x3x3 Cube",
eventId: "333",
singleName: "John Doe",
eventRank: 1,
singleResult: "1:00:00",
singleId: "1",
averageName: "John Doe",
singleName: ["John Doe"],
singleId: ["1"],
singleDate: [new Date()],
averageResult: "1:30:00",
averageId: "1",
eventRank: 1,
singleDate: new Date(),
averageDate: new Date()
averageName: ["John Doe"],
averageId: ["1"],
averageDate: [new Date()]
},
{
eventName: "Skewb",
eventId: "skewb",
singleName: "Bob Person",
eventRank: 2,
singleResult: "0:30:00",
singleId: "2",
averageName: "Someone Else",
singleName: ["Bob Person"],
singleId: ["2"],
singleDate: [new Date()],
averageResult: "0:40:00",
averageId: "3",
eventRank: 2,
singleDate: new Date(),
averageDate: new Date()
averageName: ["Someone Else"],
averageId: ["3"],
averageDate: [new Date()]
}
];

Expand All @@ -72,7 +72,7 @@ describe('RecordService', () => {
const mockRecordResponse: ProvincialRecordResponse = {
"333": {
"GT": {
"single": {
"single": [{
_id: "1",
userId: "1",
wcaID: "2345TEST01",
Expand All @@ -82,8 +82,8 @@ describe('RecordService', () => {
personName: "Test Person",
province: "GT",
provinceRank: 1
},
"average": {
}],
"average": [{
_id: "2",
userId: "2",
wcaID: "2345TEST02",
Expand All @@ -93,10 +93,10 @@ describe('RecordService', () => {
personName: "Test Person",
province: "GT",
provinceRank: 2
}
}]
},
"WC": {
"single": {
"single": [{
_id: "3",
userId: "3",
wcaID: "2345TEST03",
Expand All @@ -106,7 +106,7 @@ describe('RecordService', () => {
personName: "Test Person",
province: "WC",
provinceRank: 1
}
}]
}
}
};
Expand All @@ -116,28 +116,28 @@ describe('RecordService', () => {
{
eventName: "3x3x3 Cube",
eventId: "333",
singleName: "Test Person",
province: "GT",
singleResult: "1:00:00",
singleId: "2345TEST01",
singleName: ["Test Person"],
singleId: ["2345TEST01"],
singleNR: true,
averageName: "Test Person",
averageResult: "1:30:00",
averageId: "2345TEST02",
averageName: ["Test Person"],
averageId: ["2345TEST02"],
averageNR: false,
province: "GT"
},
{
eventName: "3x3x3 Cube",
eventId: "333",
singleName: "Test Person",
province: "WC",
singleResult: "1:00:00",
singleId: "2345TEST03",
singleName: ["Test Person"],
singleId: ["2345TEST03"],
singleNR: false,
averageName: "",
averageResult: "",
averageId: "",
averageName: [],
averageId: [],
averageNR: false,
province: "WC"
}
]
}
Expand Down
Loading

0 comments on commit c1858f4

Please sign in to comment.