From 49b4c279cf4dcb927e2af101139fdb1d2c495ea6 Mon Sep 17 00:00:00 2001 From: Sam Date: Sat, 23 Jul 2022 08:20:02 +0200 Subject: [PATCH] Client - display ascent record depending on user preference --- .../Dashboard/UserRecords/index.vue | 3 +- fittrackee_client/src/utils/records.ts | 47 +++++++----- .../tests/unit/utils/records.spec.ts | 74 ++++++++++++++++++- 3 files changed, 105 insertions(+), 19 deletions(-) diff --git a/fittrackee_client/src/components/Dashboard/UserRecords/index.vue b/fittrackee_client/src/components/Dashboard/UserRecords/index.vue index 4d7d72c8..c75736c9 100644 --- a/fittrackee_client/src/components/Dashboard/UserRecords/index.vue +++ b/fittrackee_client/src/components/Dashboard/UserRecords/index.vue @@ -42,7 +42,8 @@ props.user.records, translateSports(props.sports, t), props.user.timezone, - props.user.imperial_units + props.user.imperial_units, + props.user.display_ascent ) ) diff --git a/fittrackee_client/src/utils/records.ts b/fittrackee_client/src/utils/records.ts index 453a7ff0..b5d0662a 100644 --- a/fittrackee_client/src/utils/records.ts +++ b/fittrackee_client/src/utils/records.ts @@ -29,10 +29,20 @@ export const formatRecord = ( )} ${distanceUnitTo}/h` break case 'FD': - value = `${convertDistance(+record.value, distanceUnitFrom, distanceUnitTo, 3)} ${distanceUnitTo}` + value = `${convertDistance( + +record.value, + distanceUnitFrom, + distanceUnitTo, + 3 + )} ${distanceUnitTo}` break case 'HA': - value = `${convertDistance(+record.value, ascentUnitFrom, ascentUnitTo, 2)} ${ascentUnitTo}` + value = `${convertDistance( + +record.value, + ascentUnitFrom, + ascentUnitTo, + 2 + )} ${ascentUnitTo}` break case 'LD': value = record.value @@ -62,21 +72,24 @@ export const getRecordsBySports = ( records: IRecord[], translatedSports: ITranslatedSport[], tz: string, - useImperialUnits: boolean + useImperialUnits: boolean, + display_ascent: boolean ): IRecordsBySports => - records.reduce((sportList: IRecordsBySports, record) => { - const sport = translatedSports.find((s) => s.id === record.sport_id) - if (sport && sport.label) { - if (sportList[sport.translatedLabel] === void 0) { - sportList[sport.translatedLabel] = { - label: sport.label, - color: sport.color, - records: [], + records + .filter((r) => (display_ascent ? true : r.record_type !== 'HA')) + .reduce((sportList: IRecordsBySports, record) => { + const sport = translatedSports.find((s) => s.id === record.sport_id) + if (sport && sport.label) { + if (sportList[sport.translatedLabel] === void 0) { + sportList[sport.translatedLabel] = { + label: sport.label, + color: sport.color, + records: [], + } } + sportList[sport.translatedLabel].records.push( + formatRecord(record, tz, useImperialUnits) + ) } - sportList[sport.translatedLabel].records.push( - formatRecord(record, tz, useImperialUnits) - ) - } - return sportList - }, {}) + return sportList + }, {}) diff --git a/fittrackee_client/tests/unit/utils/records.spec.ts b/fittrackee_client/tests/unit/utils/records.spec.ts index 09ca4bcd..21c0f450 100644 --- a/fittrackee_client/tests/unit/utils/records.spec.ts +++ b/fittrackee_client/tests/unit/utils/records.spec.ts @@ -400,7 +400,8 @@ describe('getRecordsBySports', () => { testParams.input.records, translatedSports, testParams.input.tz, - false + false, + true ), // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore @@ -530,6 +531,7 @@ describe('getRecordsBySports after conversion', () => { testParams.input.records, translatedSports, testParams.input.tz, + true, true ), // eslint-disable-next-line @typescript-eslint/ban-ts-comment @@ -539,3 +541,73 @@ describe('getRecordsBySports after conversion', () => { }) ) }) + +describe('getRecordsBySports with HA record', () => { + const testsParams = [ + { + description: 'returns empty object if no records', + input: { + records: [], + tz: 'Europe/Paris', + }, + expected: {}, + }, + { + description: 'returns records except HA record', + input: { + records: [ + { + id: 9, + record_type: 'AS', + sport_id: 1, + user: 'admin', + value: 18, + workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT', + workout_id: 'hvYBqYBRa7wwXpaStWR4V2', + }, + { + id: 9, + record_type: 'HA', + sport_id: 1, + user: 'admin', + value: 235, + workout_date: 'Sun, 07 Jul 2019 08:00:00 GMT', + workout_id: 'hvYBqYBRa7wwXpaStWR4V2', + }, + ], + tz: 'Europe/Paris', + }, + expected: { + 'Cycling (Sport)': { + color: null, + label: 'Cycling (Sport)', + records: [ + { + id: 9, + record_type: 'AS', + value: '18 km/h', + workout_date: '2019/07/07', + workout_id: 'hvYBqYBRa7wwXpaStWR4V2', + }, + ], + }, + }, + }, + ] + testsParams.map((testParams) => + it(testParams.description, () => { + assert.deepEqual( + getRecordsBySports( + testParams.input.records, + translatedSports, + testParams.input.tz, + false, + false + ), + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + testParams.expected + ) + }) + ) +})