From b270c86576b9e01ce423a7a86ce1ac17ce9c7723 Mon Sep 17 00:00:00 2001 From: Peter Stockings Date: Sun, 27 Nov 2022 14:06:31 +1100 Subject: [PATCH] Only display column for exercise if the person has completed a topset with said exercise --- app.py | 19 +++++++------------ utils.py | 9 +++++++++ 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/app.py b/app.py index 3e4fc9e..e8d16a8 100644 --- a/app.py +++ b/app.py @@ -4,7 +4,7 @@ from flask import Flask, render_template, redirect, request, url_for import jinja_partials from decorators import validate_person, validate_topset, validate_workout from db import DataBase -from utils import get_people_and_exercise_rep_maxes, convert_str_to_date, get_earliest_and_latest_workout_date, filter_workout_topsets +from utils import get_people_and_exercise_rep_maxes, convert_str_to_date, get_earliest_and_latest_workout_date, filter_workout_topsets, get_exercise_ids_from_workouts from flask_htmx import HTMX app = Flask(__name__) @@ -49,21 +49,16 @@ def get_person(person_id): person['Workouts'] = [filter_workout_topsets(workout, selected_exercise_ids) for workout in person['Workouts'] if workout['StartDate'] <= max_date and workout['StartDate'] >= min_date] - if selected_exercise_ids: - filtered_exercises = filter( - lambda e: e['ExerciseId'] in selected_exercise_ids, person['Exercises']) - person['FilteredExercises'] = list(filtered_exercises) - if htmx: - return render_template('partials/page/person.html', - person=person, is_filtered=True, selected_exercise_ids=selected_exercise_ids, max_date=max_date, min_date=min_date), 200, {"HX-Trigger": "updatedPeople"} - - return render_template('person.html', person=person, is_filtered=True, selected_exercise_ids=selected_exercise_ids, max_date=max_date, min_date=min_date) + active_exercise_ids = get_exercise_ids_from_workouts(person['Workouts']) + filtered_exercises = filter( + lambda e: e['ExerciseId'] in active_exercise_ids, person['Exercises']) + person['FilteredExercises'] = list(filtered_exercises) if htmx: return render_template('partials/page/person.html', - person=person, is_filtered=False, max_date=max_date, min_date=min_date), 200, {"HX-Trigger": "updatedPeople"} + person=person, is_filtered=True, selected_exercise_ids=active_exercise_ids, max_date=max_date, min_date=min_date), 200, {"HX-Trigger": "updatedPeople"} - return render_template('person.html', person=person, max_date=max_date, min_date=min_date) + return render_template('person.html', person=person, is_filtered=True, selected_exercise_ids=active_exercise_ids, max_date=max_date, min_date=min_date) @ app.route("/person//workout", methods=['POST']) diff --git a/utils.py b/utils.py index 97488bf..c38da10 100644 --- a/utils.py +++ b/utils.py @@ -138,3 +138,12 @@ def filter_workout_topsets(workout, selected_exercise_ids): workout['TopSets'] = [topset for topset in workout['TopSets'] if topset['ExerciseId'] in selected_exercise_ids] return workout + + +def get_exercise_ids_from_workouts(workouts): + return list(set(flatten_list(list(map(lambda x: list( + map(lambda y: y['ExerciseId'], x['TopSets'])), workouts))))) + + +def flatten_list(list_of_lists): + return [item for sublist in list_of_lists for item in sublist]