Skip to content

Commit ecfac8c

Browse files
committed
Manually order the days and improve keys used when mapping
See wger-project/wger/issues#1980
1 parent 5d0cec5 commit ecfac8c

File tree

7 files changed

+32
-16
lines changed

7 files changed

+32
-16
lines changed

src/components/Dashboard/RoutineCard.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ const RoutineCardContent = (props: { routine: Routine }) => {
5353
{/* Note: not 500 like the other cards, but a bit more since we don't have an action icon... */}
5454
<CardContent sx={{ height: "510px", overflow: "auto" }}>
5555
<List>
56-
{props.routine.dayDataCurrentIteration.filter(dayData => dayData.day !== null).map((dayData, index) =>
57-
<DayListItem dayData={dayData} key={index} />)}
56+
{props.routine.dayDataCurrentIterationNoNulls.map((dayData) =>
57+
<DayListItem dayData={dayData} key={`dayDetails-${dayData.date.toISOString()}`} />)}
5858
</List>
5959
</CardContent>
6060

src/components/WorkoutRoutines/Detail/RoutineDetail.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,13 @@ export const RoutineDetail = () => {
5050
href={makeLink(WgerLink.ROUTINE_COPY, i18n.language, { id: routineId })}
5151
variant={"contained"}
5252
>{t('routines.copyAndUseTemplate')}</Button>}
53-
54-
{routine!.dayDataCurrentIteration.filter((dayData) => dayData.day !== null).map((dayData, index) =>
55-
// {routine!.dayDataCurrentIteration.map((dayData, index) =>
56-
<DayDetailsCard routineId={routineId} dayData={dayData} key={index}
57-
readOnly={routine!.isTemplate} />
53+
{routine!.dayDataCurrentIterationNoNulls.map((dayData) =>
54+
<DayDetailsCard
55+
routineId={routineId}
56+
dayData={dayData}
57+
key={`dayDetails-${dayData.date.toISOString()}`}
58+
readOnly={routine!.isTemplate}
59+
/>
5860
)}
5961
</Stack>
6062
}

src/components/WorkoutRoutines/Detail/TemplateDetail.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,12 @@ export const TemplateDetail = () => {
4747
variant={"contained"}
4848
>{t('routines.copyAndUseTemplate')}</Button>
4949

50-
{routine!.dayDataCurrentIteration.filter((dayData) => dayData.day !== null).map((dayData, index) =>
50+
{routine!.dayDataCurrentIterationNoNulls.map((dayData) =>
5151
<DayDetailsCard
5252
dayData={dayData}
5353
routineId={routineId}
5454
readOnly={true}
55-
key={`dayDetails-${index}`}
55+
key={`dayDetails-${dayData.date.toISOString()}`}
5656
/>
5757
)}
5858
</Stack>

src/components/WorkoutRoutines/models/Routine.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,10 +62,18 @@ export class Routine {
6262

6363
get dayDataCurrentIteration() {
6464
const iteration = this.getIteration() ?? 1;
65-
6665
return this.dayData.filter(dayData => dayData.iteration === iteration);
6766
}
6867

68+
/*
69+
* Filter out dayData entries with null days
70+
*/
71+
get dayDataCurrentIterationNoNulls() {
72+
return this.dayDataCurrentIteration
73+
.filter((dayData) => dayData.day !== null)
74+
.sort((a, b) => a.day!.order - b.day!.order);
75+
}
76+
6977
get groupedDayDataByIteration() {
7078
const groupedDayData: { [key: number]: RoutineDayData[] } = {};
7179
for (const dayData of this.dayData) {

src/components/WorkoutRoutines/models/RoutineDayData.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,22 @@ export class RoutineDayData {
1515
) {
1616
this.slots = slots ?? [];
1717
}
18+
19+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
20+
static fromJson(json: any) {
21+
return adapter.fromJson(json);
22+
}
1823
}
1924

2025

21-
export class RoutineDayDataAdapter implements Adapter<RoutineDayData> {
26+
class RoutineDayDataAdapter implements Adapter<RoutineDayData> {
2227
fromJson = (item: any) => new RoutineDayData(
2328
item.iteration,
2429
new Date(item.date),
2530
item.label,
2631
item.day != null ? Day.fromJson(item.day) : null,
2732
item.slots.map((slot: any) => new SlotDataAdapter().fromJson(slot))
2833
);
29-
}
34+
}
35+
36+
const adapter = new RoutineDayDataAdapter();

src/components/WorkoutRoutines/widgets/RoutineDetailsCard.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@ export const DayDetailsCard = (props: { dayData: RoutineDayData, routineId: numb
173173
<IconButton
174174
href={makeLink(WgerLink.ROUTINE_ADD_LOG, i18n.language, {
175175
id: props.routineId,
176-
id2: props.dayData.day!.id
176+
id2: props.dayData.day!.id!
177177
})}>
178178
<Addchart />
179179
</IconButton>

src/services/routine.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Exercise } from "components/Exercises/models/exercise";
33
import { Day } from "components/WorkoutRoutines/models/Day";
44
import { RoutineStatsData, RoutineStatsDataAdapter } from "components/WorkoutRoutines/models/LogStats";
55
import { Routine } from "components/WorkoutRoutines/models/Routine";
6-
import { RoutineDayData, RoutineDayDataAdapter } from "components/WorkoutRoutines/models/RoutineDayData";
6+
import { RoutineDayData } from "components/WorkoutRoutines/models/RoutineDayData";
77
import { RoutineLogData, RoutineLogDataAdapter } from "components/WorkoutRoutines/models/RoutineLogData";
88
import { getExercise } from "services/exercise";
99
import { getRoutineRepUnits, getRoutineWeightUnits } from "services/workoutUnits";
@@ -215,9 +215,8 @@ export const getRoutineDayDataAllIterations = async (routineId: number): Promise
215215
{ headers: makeHeader() }
216216
);
217217

218-
const adapter = new RoutineDayDataAdapter();
219218
// eslint-disable-next-line @typescript-eslint/no-explicit-any
220-
return response.data.map((data: any) => adapter.fromJson(data));
219+
return response.data.map((data: any) => RoutineDayData.fromJson(data));
221220
};
222221

223222
export const getRoutineStructure = async (routineId: number): Promise<Day[]> => {

0 commit comments

Comments
 (0)