@wger-project/react-components 25.10.16
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/LICENSE +661 -0
- package/README.md +58 -0
- package/build/OpenSans-Bold.woff +0 -0
- package/build/OpenSans-Light.woff +0 -0
- package/build/assets/index.css +1 -0
- package/build/chunks/browser-ponyfill-DL_vVusK.js +3 -0
- package/build/chunks/browser-ponyfill-DL_vVusK.js.map +1 -0
- package/build/favicon.ico +0 -0
- package/build/index.html +60 -0
- package/build/locales/README.md +10 -0
- package/build/locales/ar/translation.json +240 -0
- package/build/locales/ca/translation.json +35 -0
- package/build/locales/cs/translation.json +257 -0
- package/build/locales/de/translation.json +338 -0
- package/build/locales/el/translation.json +97 -0
- package/build/locales/en/translation.json +332 -0
- package/build/locales/es/translation.json +335 -0
- package/build/locales/fa/translation.json +127 -0
- package/build/locales/fr/translation.json +341 -0
- package/build/locales/he/translation.json +146 -0
- package/build/locales/hr/translation.json +249 -0
- package/build/locales/it/translation.json +338 -0
- package/build/locales/ko/translation.json +331 -0
- package/build/locales/nb_NO/translation.json +50 -0
- package/build/locales/nl/translation.json +242 -0
- package/build/locales/pl/translation.json +261 -0
- package/build/locales/pt/translation.json +342 -0
- package/build/locales/pt_BR/translation.json +259 -0
- package/build/locales/pt_PT/translation.json +334 -0
- package/build/locales/ru/translation.json +116 -0
- package/build/locales/sk/translation.json +10 -0
- package/build/locales/sl/translation.json +326 -0
- package/build/locales/sr/translation.json +240 -0
- package/build/locales/sv/translation.json +165 -0
- package/build/locales/ta/translation.json +331 -0
- package/build/locales/th/translation.json +27 -0
- package/build/locales/tr/translation.json +238 -0
- package/build/locales/uk/translation.json +339 -0
- package/build/locales/uz/translation.json +56 -0
- package/build/locales/vi/translation.json +70 -0
- package/build/locales/zh_Hans/translation.json +336 -0
- package/build/locales/zh_Hant/translation.json +246 -0
- package/build/logo192.png +0 -0
- package/build/logo512.png +0 -0
- package/build/main.js +542 -0
- package/build/main.js.map +1 -0
- package/build/manifest.json +25 -0
- package/build/muscles/SOURCES +2 -0
- package/build/muscles/main/muscle-1.svg +72 -0
- package/build/muscles/main/muscle-10.svg +73 -0
- package/build/muscles/main/muscle-11.svg +72 -0
- package/build/muscles/main/muscle-12.svg +72 -0
- package/build/muscles/main/muscle-13.svg +92 -0
- package/build/muscles/main/muscle-14.svg +73 -0
- package/build/muscles/main/muscle-15.svg +72 -0
- package/build/muscles/main/muscle-16.svg +73 -0
- package/build/muscles/main/muscle-2.svg +72 -0
- package/build/muscles/main/muscle-3.svg +72 -0
- package/build/muscles/main/muscle-4.svg +72 -0
- package/build/muscles/main/muscle-5.svg +72 -0
- package/build/muscles/main/muscle-6.svg +73 -0
- package/build/muscles/main/muscle-7.svg +72 -0
- package/build/muscles/main/muscle-8.svg +72 -0
- package/build/muscles/main/muscle-9.svg +72 -0
- package/build/muscles/muscular_system_back.svg +118 -0
- package/build/muscles/muscular_system_front.svg +99 -0
- package/build/muscles/secondary/muscle-1.svg +72 -0
- package/build/muscles/secondary/muscle-10.svg +73 -0
- package/build/muscles/secondary/muscle-11.svg +72 -0
- package/build/muscles/secondary/muscle-12.svg +72 -0
- package/build/muscles/secondary/muscle-13.svg +92 -0
- package/build/muscles/secondary/muscle-14.svg +73 -0
- package/build/muscles/secondary/muscle-15.svg +72 -0
- package/build/muscles/secondary/muscle-16.svg +73 -0
- package/build/muscles/secondary/muscle-2.svg +72 -0
- package/build/muscles/secondary/muscle-3.svg +72 -0
- package/build/muscles/secondary/muscle-4.svg +72 -0
- package/build/muscles/secondary/muscle-5.svg +72 -0
- package/build/muscles/secondary/muscle-6.svg +73 -0
- package/build/muscles/secondary/muscle-7.svg +72 -0
- package/build/muscles/secondary/muscle-8.svg +72 -0
- package/build/muscles/secondary/muscle-9.svg +72 -0
- package/build/robots.txt +3 -0
- package/index.html +59 -0
- package/package.json +125 -0
- package/src/.sass-cache/166f82406a0edab65b7f8fd8256819ee2f34bebf/App.module.scssc +0 -0
- package/src/@types/i18next.d.ts +13 -0
- package/src/App.tsx +25 -0
- package/src/assets/images/discord-logo.svg +1 -0
- package/src/assets/images/get-it-on-google-play.svg +1 -0
- package/src/assets/images/logo.png +0 -0
- package/src/assets/images/twitter-logo-50.png +0 -0
- package/src/assets/images/twitter.svg +5 -0
- package/src/components/BodyWeight/Form/WeightForm.test.tsx +100 -0
- package/src/components/BodyWeight/Form/WeightForm.tsx +102 -0
- package/src/components/BodyWeight/Table/ActionButton/ActionButton.test.tsx +65 -0
- package/src/components/BodyWeight/Table/ActionButton/ActionButton.tsx +67 -0
- package/src/components/BodyWeight/Table/Fab/Fab.tsx +35 -0
- package/src/components/BodyWeight/Table/index.test.tsx +33 -0
- package/src/components/BodyWeight/Table/index.tsx +98 -0
- package/src/components/BodyWeight/Table/table.module.css +5 -0
- package/src/components/BodyWeight/Table/table.module.css.map +1 -0
- package/src/components/BodyWeight/Table/table.module.scss +0 -0
- package/src/components/BodyWeight/Table/table.mosule.css +2 -0
- package/src/components/BodyWeight/Table/table.mosule.css.map +1 -0
- package/src/components/BodyWeight/TableDashboard/TableDashboard.test.tsx +24 -0
- package/src/components/BodyWeight/TableDashboard/TableDashboard.tsx +62 -0
- package/src/components/BodyWeight/WeightChart/index.test.tsx +66 -0
- package/src/components/BodyWeight/WeightChart/index.tsx +105 -0
- package/src/components/BodyWeight/body_weight.module.css +8 -0
- package/src/components/BodyWeight/body_weight.module.css.map +1 -0
- package/src/components/BodyWeight/body_weight.module.scss +8 -0
- package/src/components/BodyWeight/index.test.tsx +92 -0
- package/src/components/BodyWeight/index.tsx +40 -0
- package/src/components/BodyWeight/model.ts +40 -0
- package/src/components/BodyWeight/queries/index.ts +49 -0
- package/src/components/BodyWeight/utils.test.ts +44 -0
- package/src/components/BodyWeight/utils.ts +22 -0
- package/src/components/BodyWeight/widgets/FilterButtons.test.tsx +57 -0
- package/src/components/BodyWeight/widgets/FilterButtons.tsx +69 -0
- package/src/components/BodyWeight/widgets/fab.tsx +33 -0
- package/src/components/Calendar/Components/CalendarComponent.test.tsx +141 -0
- package/src/components/Calendar/Components/CalendarComponent.tsx +250 -0
- package/src/components/Calendar/Components/CalendarDay.tsx +105 -0
- package/src/components/Calendar/Components/CalendarDayGrid.tsx +53 -0
- package/src/components/Calendar/Components/CalendarHeader.tsx +39 -0
- package/src/components/Calendar/Components/Entries.test.tsx +81 -0
- package/src/components/Calendar/Components/Entries.tsx +163 -0
- package/src/components/Calendar/Helpers/CalendarMeasurement.tsx +10 -0
- package/src/components/Carousel/carousel.module.css +43 -0
- package/src/components/Carousel/carousel.module.css.map +1 -0
- package/src/components/Carousel/carousel.module.scss +46 -0
- package/src/components/Carousel/index.tsx +66 -0
- package/src/components/Common/forms/LicenseAuthor.tsx +19 -0
- package/src/components/Common/forms/LicenseAuthorUrl.tsx +20 -0
- package/src/components/Common/forms/LicenseDerivativeSourceUrl.tsx +20 -0
- package/src/components/Common/forms/LicenseObjectUrl.tsx +20 -0
- package/src/components/Common/forms/LicenseTitle.tsx +19 -0
- package/src/components/Common/forms/WgerTextField.tsx +27 -0
- package/src/components/Core/LoadingWidget/LoadingWidget.tsx +22 -0
- package/src/components/Core/Modals/DeleteConfirmationModal.test.tsx +57 -0
- package/src/components/Core/Modals/DeleteConfirmationModal.tsx +74 -0
- package/src/components/Core/Modals/WgerModal.test.tsx +45 -0
- package/src/components/Core/Modals/WgerModal.tsx +46 -0
- package/src/components/Core/Notifications/index.tsx +57 -0
- package/src/components/Core/Notifications/notifications.module.css +8 -0
- package/src/components/Core/Notifications/notifications.module.css.map +1 -0
- package/src/components/Core/Notifications/notifications.module.scss +6 -0
- package/src/components/Core/Tooltips/LightToolTip.tsx +14 -0
- package/src/components/Core/Widgets/Container.tsx +98 -0
- package/src/components/Core/Widgets/FormError.tsx +64 -0
- package/src/components/Core/Widgets/OverviewEmpty.tsx +26 -0
- package/src/components/Core/Widgets/RenderLoadingQuery.tsx +28 -0
- package/src/components/Core/queries/index.ts +2 -0
- package/src/components/Core/queries/languageCheck.ts +31 -0
- package/src/components/Dashboard/Dashboard.tsx +22 -0
- package/src/components/Dashboard/EmptyCard.tsx +56 -0
- package/src/components/Dashboard/NutritionCard.test.tsx +89 -0
- package/src/components/Dashboard/NutritionCard.tsx +178 -0
- package/src/components/Dashboard/RoutineCard.test.tsx +66 -0
- package/src/components/Dashboard/RoutineCard.tsx +107 -0
- package/src/components/Dashboard/WeightCard.test.tsx +81 -0
- package/src/components/Dashboard/WeightCard.tsx +72 -0
- package/src/components/Exercises/Add/AddExerciseStepper.test.tsx +26 -0
- package/src/components/Exercises/Add/AddExerciseStepper.tsx +97 -0
- package/src/components/Exercises/Add/NotEnoughRights.tsx +37 -0
- package/src/components/Exercises/Add/Step1Basics.test.tsx +133 -0
- package/src/components/Exercises/Add/Step1Basics.tsx +179 -0
- package/src/components/Exercises/Add/Step2Variations.test.tsx +149 -0
- package/src/components/Exercises/Add/Step2Variations.tsx +237 -0
- package/src/components/Exercises/Add/Step3Description.test.tsx +66 -0
- package/src/components/Exercises/Add/Step3Description.tsx +96 -0
- package/src/components/Exercises/Add/Step4Translation.test.tsx +119 -0
- package/src/components/Exercises/Add/Step4Translations.tsx +183 -0
- package/src/components/Exercises/Add/Step5Images.test.tsx +28 -0
- package/src/components/Exercises/Add/Step5Images.tsx +269 -0
- package/src/components/Exercises/Add/Step6Overview.test.tsx +128 -0
- package/src/components/Exercises/Add/Step6Overview.tsx +262 -0
- package/src/components/Exercises/Detail/ExerciseDetailEdit.test.tsx +248 -0
- package/src/components/Exercises/Detail/ExerciseDetailEdit.tsx +340 -0
- package/src/components/Exercises/Detail/ExerciseDetailView.test.tsx +96 -0
- package/src/components/Exercises/Detail/ExerciseDetailView.tsx +242 -0
- package/src/components/Exercises/Detail/ExerciseDetails.test.tsx +88 -0
- package/src/components/Exercises/Detail/ExerciseDetails.tsx +119 -0
- package/src/components/Exercises/Detail/ExerciseImageAvatar.tsx +20 -0
- package/src/components/Exercises/Detail/ExerciseImagePlaceholder.tsx +21 -0
- package/src/components/Exercises/Detail/Head/ExerciseDeleteDialog.test.tsx +125 -0
- package/src/components/Exercises/Detail/Head/ExerciseDeleteDialog.tsx +185 -0
- package/src/components/Exercises/Detail/Head/head.module.css +73 -0
- package/src/components/Exercises/Detail/Head/head.module.css.map +7 -0
- package/src/components/Exercises/Detail/Head/head.module.scss +111 -0
- package/src/components/Exercises/Detail/Head/index.tsx +175 -0
- package/src/components/Exercises/Detail/OverviewCard.test.tsx +98 -0
- package/src/components/Exercises/Detail/OverviewCard.tsx +68 -0
- package/src/components/Exercises/Detail/SideGallery/index.tsx +65 -0
- package/src/components/Exercises/Detail/SideGallery/side_gallery.module.css +26 -0
- package/src/components/Exercises/Detail/SideGallery/side_gallery.module.css.map +7 -0
- package/src/components/Exercises/Detail/SideGallery/side_gallery.module.scss +34 -0
- package/src/components/Exercises/ExerciseOverview.test.tsx +183 -0
- package/src/components/Exercises/ExerciseOverview.tsx +293 -0
- package/src/components/Exercises/Filter/CategoryFilter.test.tsx +57 -0
- package/src/components/Exercises/Filter/CategoryFilter.tsx +105 -0
- package/src/components/Exercises/Filter/EquipmentFilter.test.tsx +55 -0
- package/src/components/Exercises/Filter/EquipmentFilter.tsx +105 -0
- package/src/components/Exercises/Filter/ExerciseFiltersContext.tsx +16 -0
- package/src/components/Exercises/Filter/FilterDrawer.tsx +38 -0
- package/src/components/Exercises/Filter/MuscleFilter.test.tsx +50 -0
- package/src/components/Exercises/Filter/MuscleFilter.tsx +130 -0
- package/src/components/Exercises/Filter/NameAutcompleter.tsx +146 -0
- package/src/components/Exercises/Filter/NameAutocompleter.test.tsx +76 -0
- package/src/components/Exercises/Overview/ExerciseGrid.tsx +44 -0
- package/src/components/Exercises/Overview/ExerciseGridLoadingSkeleton.test.tsx +10 -0
- package/src/components/Exercises/Overview/ExerciseGridLoadingSkeleton.tsx +26 -0
- package/src/components/Exercises/forms/Category.test.tsx +49 -0
- package/src/components/Exercises/forms/Category.tsx +41 -0
- package/src/components/Exercises/forms/Equipment.test.tsx +84 -0
- package/src/components/Exercises/forms/Equipment.tsx +38 -0
- package/src/components/Exercises/forms/ExerciseAliases.tsx +37 -0
- package/src/components/Exercises/forms/ExerciseDescription.tsx +57 -0
- package/src/components/Exercises/forms/ExerciseEquipmentSelect.tsx +29 -0
- package/src/components/Exercises/forms/ExerciseName.tsx +19 -0
- package/src/components/Exercises/forms/ExerciseNotes.tsx +72 -0
- package/src/components/Exercises/forms/ExerciseSelect.tsx +28 -0
- package/src/components/Exercises/forms/ImageCard.tsx +101 -0
- package/src/components/Exercises/forms/ImageStyle.tsx +74 -0
- package/src/components/Exercises/forms/Muscle.test.tsx +74 -0
- package/src/components/Exercises/forms/Muscle.tsx +41 -0
- package/src/components/Exercises/forms/VideoCard.tsx +109 -0
- package/src/components/Exercises/forms/yupValidators.ts +46 -0
- package/src/components/Exercises/models/alias.ts +29 -0
- package/src/components/Exercises/models/category.ts +35 -0
- package/src/components/Exercises/models/equipment.ts +33 -0
- package/src/components/Exercises/models/exercise.test.ts +74 -0
- package/src/components/Exercises/models/exercise.ts +159 -0
- package/src/components/Exercises/models/image.ts +41 -0
- package/src/components/Exercises/models/language.ts +23 -0
- package/src/components/Exercises/models/muscle.test.ts +17 -0
- package/src/components/Exercises/models/muscle.ts +39 -0
- package/src/components/Exercises/models/note.ts +29 -0
- package/src/components/Exercises/models/translation.test.ts +68 -0
- package/src/components/Exercises/models/translation.ts +83 -0
- package/src/components/Exercises/models/video.ts +30 -0
- package/src/components/Exercises/queries/exercises.ts +29 -0
- package/src/components/Exercises/queries/index.ts +133 -0
- package/src/components/Exercises/queries/variations.ts +15 -0
- package/src/components/Header/SubMenus/BodyWeightSubMenu.tsx +27 -0
- package/src/components/Header/SubMenus/MeasurementsSubMenu.tsx +28 -0
- package/src/components/Header/SubMenus/NutritionSubMenu.tsx +28 -0
- package/src/components/Header/SubMenus/TrainingSubMenu.tsx +43 -0
- package/src/components/Header/SubMenus/WorkoutSubMenu.tsx +28 -0
- package/src/components/Header/index.tsx +27 -0
- package/src/components/Measurements/Screens/MeasurementCategoryDetail.test.tsx +67 -0
- package/src/components/Measurements/Screens/MeasurementCategoryDetail.tsx +37 -0
- package/src/components/Measurements/Screens/MeasurementCategoryOverview.test.tsx +59 -0
- package/src/components/Measurements/Screens/MeasurementCategoryOverview.tsx +64 -0
- package/src/components/Measurements/models/Category.ts +38 -0
- package/src/components/Measurements/models/Entry.ts +37 -0
- package/src/components/Measurements/queries/index.ts +121 -0
- package/src/components/Measurements/widgets/CategoryDetailDataGrid.tsx +209 -0
- package/src/components/Measurements/widgets/CategoryDetailDropdown.tsx +83 -0
- package/src/components/Measurements/widgets/CategoryForm.test.tsx +96 -0
- package/src/components/Measurements/widgets/CategoryForm.tsx +88 -0
- package/src/components/Measurements/widgets/EntryForm.test.tsx +120 -0
- package/src/components/Measurements/widgets/EntryForm.tsx +139 -0
- package/src/components/Measurements/widgets/MeasurementChart.tsx +52 -0
- package/src/components/Measurements/widgets/fab.tsx +65 -0
- package/src/components/Muscles/MuscleOverview.tsx +37 -0
- package/src/components/Nutrition/components/BmiCalculator.test.tsx +55 -0
- package/src/components/Nutrition/components/BmiCalculator.tsx +203 -0
- package/src/components/Nutrition/components/IngredientSearch.tsx +24 -0
- package/src/components/Nutrition/components/NutritionDiaryOverview.test.tsx +51 -0
- package/src/components/Nutrition/components/NutritionDiaryOverview.tsx +47 -0
- package/src/components/Nutrition/components/PlanDetail.test.tsx +58 -0
- package/src/components/Nutrition/components/PlanDetail.tsx +100 -0
- package/src/components/Nutrition/components/PlanOverview.test.tsx +37 -0
- package/src/components/Nutrition/components/PlansOverview.tsx +62 -0
- package/src/components/Nutrition/helpers/nutritionalValues.test.ts +108 -0
- package/src/components/Nutrition/helpers/nutritionalValues.ts +128 -0
- package/src/components/Nutrition/models/Ingredient.ts +84 -0
- package/src/components/Nutrition/models/IngredientImage.ts +57 -0
- package/src/components/Nutrition/models/IngredientImageThumbnails.ts +59 -0
- package/src/components/Nutrition/models/diaryEntry.ts +129 -0
- package/src/components/Nutrition/models/ingredient.test.ts +37 -0
- package/src/components/Nutrition/models/meal.test.ts +54 -0
- package/src/components/Nutrition/models/meal.ts +128 -0
- package/src/components/Nutrition/models/mealItem.test.ts +23 -0
- package/src/components/Nutrition/models/mealItem.ts +134 -0
- package/src/components/Nutrition/models/nutritionalPlan.test.ts +169 -0
- package/src/components/Nutrition/models/nutritionalPlan.ts +268 -0
- package/src/components/Nutrition/models/weightUnit.ts +24 -0
- package/src/components/Nutrition/queries/diary.ts +59 -0
- package/src/components/Nutrition/queries/index.ts +20 -0
- package/src/components/Nutrition/queries/ingredient.ts +12 -0
- package/src/components/Nutrition/queries/meal.ts +41 -0
- package/src/components/Nutrition/queries/mealItem.ts +43 -0
- package/src/components/Nutrition/queries/plan.ts +93 -0
- package/src/components/Nutrition/widgets/DiaryDetail.tsx +39 -0
- package/src/components/Nutrition/widgets/DiaryOverview.tsx +51 -0
- package/src/components/Nutrition/widgets/Fab.tsx +65 -0
- package/src/components/Nutrition/widgets/IngredientAutcompleter.tsx +140 -0
- package/src/components/Nutrition/widgets/IngredientAutocompleter.test.tsx +60 -0
- package/src/components/Nutrition/widgets/IngredientDetailTable.tsx +91 -0
- package/src/components/Nutrition/widgets/LoggedPlannedNutritionalValuesTable.tsx +138 -0
- package/src/components/Nutrition/widgets/MealDetail.tsx +170 -0
- package/src/components/Nutrition/widgets/MealDetailDropdown.tsx +117 -0
- package/src/components/Nutrition/widgets/NutritionalValuesTable.tsx +103 -0
- package/src/components/Nutrition/widgets/PlanDetailDropdown.tsx +82 -0
- package/src/components/Nutrition/widgets/PlanSidebar.tsx +44 -0
- package/src/components/Nutrition/widgets/charts/LinearPlannedLoggedChart.tsx +27 -0
- package/src/components/Nutrition/widgets/charts/MacrosPieChart.tsx +66 -0
- package/src/components/Nutrition/widgets/charts/NutritionDiaryChart.tsx +95 -0
- package/src/components/Nutrition/widgets/charts/NutritionalValuesDashboardChart.tsx +84 -0
- package/src/components/Nutrition/widgets/charts/NutritionalValuesPlannedLoggedChart.tsx +54 -0
- package/src/components/Nutrition/widgets/forms/MealForm.test.tsx +85 -0
- package/src/components/Nutrition/widgets/forms/MealForm.tsx +105 -0
- package/src/components/Nutrition/widgets/forms/MealItemForm.test.tsx +106 -0
- package/src/components/Nutrition/widgets/forms/MealItemForm.tsx +118 -0
- package/src/components/Nutrition/widgets/forms/NutritionDiaryEntryForm.test.tsx +165 -0
- package/src/components/Nutrition/widgets/forms/NutritionDiaryEntryForm.tsx +161 -0
- package/src/components/Nutrition/widgets/forms/PlanForm.test.tsx +101 -0
- package/src/components/Nutrition/widgets/forms/PlanForm.tsx +361 -0
- package/src/components/User/models/profile.ts +81 -0
- package/src/components/User/queries/contribute.test.ts +132 -0
- package/src/components/User/queries/contribute.ts +33 -0
- package/src/components/User/queries/permission.ts +11 -0
- package/src/components/User/queries/profile.ts +22 -0
- package/src/components/WorkoutRoutines/Detail/RoutineAdd.tsx +12 -0
- package/src/components/WorkoutRoutines/Detail/RoutineDetail.test.tsx +71 -0
- package/src/components/WorkoutRoutines/Detail/RoutineDetail.tsx +87 -0
- package/src/components/WorkoutRoutines/Detail/RoutineDetailsTable.test.tsx +83 -0
- package/src/components/WorkoutRoutines/Detail/RoutineDetailsTable.tsx +371 -0
- package/src/components/WorkoutRoutines/Detail/RoutineEdit.test.tsx +51 -0
- package/src/components/WorkoutRoutines/Detail/RoutineEdit.tsx +95 -0
- package/src/components/WorkoutRoutines/Detail/SessionAdd.test.tsx +43 -0
- package/src/components/WorkoutRoutines/Detail/SessionAdd.tsx +50 -0
- package/src/components/WorkoutRoutines/Detail/SlotProgressionEdit.test.tsx +41 -0
- package/src/components/WorkoutRoutines/Detail/SlotProgressionEdit.tsx +145 -0
- package/src/components/WorkoutRoutines/Detail/TemplateDetail.test.tsx +44 -0
- package/src/components/WorkoutRoutines/Detail/TemplateDetail.tsx +84 -0
- package/src/components/WorkoutRoutines/Detail/WorkoutLogs.test.tsx +64 -0
- package/src/components/WorkoutRoutines/Detail/WorkoutLogs.tsx +98 -0
- package/src/components/WorkoutRoutines/Detail/WorkoutStats.test.tsx +65 -0
- package/src/components/WorkoutRoutines/Detail/WorkoutStats.tsx +244 -0
- package/src/components/WorkoutRoutines/Overview/Fab.tsx +91 -0
- package/src/components/WorkoutRoutines/Overview/PrivateTemplateOverview.test.tsx +36 -0
- package/src/components/WorkoutRoutines/Overview/PrivateTemplateOverview.tsx +41 -0
- package/src/components/WorkoutRoutines/Overview/PublicTemplateOverview.test.tsx +36 -0
- package/src/components/WorkoutRoutines/Overview/PublicTemplateOverview.tsx +40 -0
- package/src/components/WorkoutRoutines/Overview/RoutineOverview.test.tsx +38 -0
- package/src/components/WorkoutRoutines/Overview/RoutineOverview.tsx +76 -0
- package/src/components/WorkoutRoutines/models/BaseConfig.ts +118 -0
- package/src/components/WorkoutRoutines/models/Day.test.ts +15 -0
- package/src/components/WorkoutRoutines/models/Day.ts +117 -0
- package/src/components/WorkoutRoutines/models/LogStats.test.ts +44 -0
- package/src/components/WorkoutRoutines/models/LogStats.ts +110 -0
- package/src/components/WorkoutRoutines/models/RepetitionUnit.ts +22 -0
- package/src/components/WorkoutRoutines/models/Routine.test.ts +113 -0
- package/src/components/WorkoutRoutines/models/Routine.ts +218 -0
- package/src/components/WorkoutRoutines/models/RoutineDayData.ts +38 -0
- package/src/components/WorkoutRoutines/models/RoutineLogData.ts +22 -0
- package/src/components/WorkoutRoutines/models/SetConfigData.ts +121 -0
- package/src/components/WorkoutRoutines/models/Slot.test.ts +19 -0
- package/src/components/WorkoutRoutines/models/Slot.ts +83 -0
- package/src/components/WorkoutRoutines/models/SlotData.ts +30 -0
- package/src/components/WorkoutRoutines/models/SlotEntry.test.ts +31 -0
- package/src/components/WorkoutRoutines/models/SlotEntry.ts +245 -0
- package/src/components/WorkoutRoutines/models/WeightUnit.ts +22 -0
- package/src/components/WorkoutRoutines/models/WorkoutLog.ts +159 -0
- package/src/components/WorkoutRoutines/models/WorkoutSession.ts +124 -0
- package/src/components/WorkoutRoutines/queries/configs.ts +393 -0
- package/src/components/WorkoutRoutines/queries/days.ts +42 -0
- package/src/components/WorkoutRoutines/queries/index.ts +64 -0
- package/src/components/WorkoutRoutines/queries/logs.ts +49 -0
- package/src/components/WorkoutRoutines/queries/routines.ts +121 -0
- package/src/components/WorkoutRoutines/queries/sessions.ts +41 -0
- package/src/components/WorkoutRoutines/queries/slot_entries.ts +33 -0
- package/src/components/WorkoutRoutines/queries/slots.ts +40 -0
- package/src/components/WorkoutRoutines/queries/units.ts +15 -0
- package/src/components/WorkoutRoutines/widgets/DayDetails.test.tsx +69 -0
- package/src/components/WorkoutRoutines/widgets/DayDetails.tsx +441 -0
- package/src/components/WorkoutRoutines/widgets/LogWidgets.test.tsx +91 -0
- package/src/components/WorkoutRoutines/widgets/LogWidgets.tsx +334 -0
- package/src/components/WorkoutRoutines/widgets/RoutineDetailDropdown.test.tsx +36 -0
- package/src/components/WorkoutRoutines/widgets/RoutineDetailDropdown.tsx +184 -0
- package/src/components/WorkoutRoutines/widgets/RoutineDetailsCard.test.tsx +42 -0
- package/src/components/WorkoutRoutines/widgets/RoutineDetailsCard.tsx +202 -0
- package/src/components/WorkoutRoutines/widgets/RoutineStatistics.test.tsx +364 -0
- package/src/components/WorkoutRoutines/widgets/RoutineStatistics.tsx +249 -0
- package/src/components/WorkoutRoutines/widgets/SlotDetails.test.tsx +72 -0
- package/src/components/WorkoutRoutines/widgets/SlotDetails.tsx +233 -0
- package/src/components/WorkoutRoutines/widgets/forms/BaseConfigForm.test.tsx +161 -0
- package/src/components/WorkoutRoutines/widgets/forms/BaseConfigForm.tsx +508 -0
- package/src/components/WorkoutRoutines/widgets/forms/DayForm.test.tsx +86 -0
- package/src/components/WorkoutRoutines/widgets/forms/DayForm.tsx +202 -0
- package/src/components/WorkoutRoutines/widgets/forms/ProgressionForm.test.tsx +176 -0
- package/src/components/WorkoutRoutines/widgets/forms/ProgressionForm.tsx +494 -0
- package/src/components/WorkoutRoutines/widgets/forms/RoutineForm.test.tsx +94 -0
- package/src/components/WorkoutRoutines/widgets/forms/RoutineForm.tsx +309 -0
- package/src/components/WorkoutRoutines/widgets/forms/RoutineTemplateForm.test.tsx +70 -0
- package/src/components/WorkoutRoutines/widgets/forms/RoutineTemplateForm.tsx +68 -0
- package/src/components/WorkoutRoutines/widgets/forms/SessionForm.test.tsx +164 -0
- package/src/components/WorkoutRoutines/widgets/forms/SessionForm.tsx +263 -0
- package/src/components/WorkoutRoutines/widgets/forms/SessionLogsForm.test.tsx +126 -0
- package/src/components/WorkoutRoutines/widgets/forms/SessionLogsForm.tsx +330 -0
- package/src/components/WorkoutRoutines/widgets/forms/SlotEntryForm.test.tsx +227 -0
- package/src/components/WorkoutRoutines/widgets/forms/SlotEntryForm.tsx +206 -0
- package/src/components/WorkoutRoutines/widgets/forms/SlotForm.test.tsx +44 -0
- package/src/components/WorkoutRoutines/widgets/forms/SlotForm.tsx +36 -0
- package/src/components/index.ts +3 -0
- package/src/config.ts +12 -0
- package/src/i18n.ts +63 -0
- package/src/i18n.tsx +52 -0
- package/src/index.css +13 -0
- package/src/index.tsx +184 -0
- package/src/locales/README.md +7 -0
- package/src/pages/About/index.tsx +9 -0
- package/src/pages/AddExercise/index.tsx +15 -0
- package/src/pages/AddWeight/index.tsx +9 -0
- package/src/pages/ApiPage/index.tsx +9 -0
- package/src/pages/Calendar/index.tsx +10 -0
- package/src/pages/CaloriesCalculator/index.tsx +9 -0
- package/src/pages/Equipments/index.tsx +9 -0
- package/src/pages/ExerciseDetails/index.tsx +6 -0
- package/src/pages/Ingrdedients/index.tsx +9 -0
- package/src/pages/Login/index.tsx +9 -0
- package/src/pages/Preferences/index.tsx +9 -0
- package/src/pages/PublicTemplate/index.tsx +9 -0
- package/src/pages/TemplatePage/index.tsx +9 -0
- package/src/pages/WeightOverview/index.tsx +6 -0
- package/src/pages/index.ts +14 -0
- package/src/permissions/index.ts +13 -0
- package/src/reportWebVitals.ts +15 -0
- package/src/routes.tsx +137 -0
- package/src/services/alias.test.ts +47 -0
- package/src/services/alias.ts +34 -0
- package/src/services/base_config.test.ts +48 -0
- package/src/services/base_config.ts +86 -0
- package/src/services/category.test.ts +44 -0
- package/src/services/category.ts +21 -0
- package/src/services/config.test.ts +213 -0
- package/src/services/config.ts +50 -0
- package/src/services/day.test.ts +118 -0
- package/src/services/day.ts +44 -0
- package/src/services/equipment.test.ts +46 -0
- package/src/services/equipment.ts +20 -0
- package/src/services/exercise.test.ts +98 -0
- package/src/services/exercise.ts +182 -0
- package/src/services/exerciseTranslation.test.ts +98 -0
- package/src/services/exerciseTranslation.ts +112 -0
- package/src/services/image.test.ts +77 -0
- package/src/services/image.ts +54 -0
- package/src/services/index.ts +104 -0
- package/src/services/ingredient.test.ts +81 -0
- package/src/services/ingredient.ts +70 -0
- package/src/services/ingredientweightunit.ts +29 -0
- package/src/services/language.test.ts +86 -0
- package/src/services/language.ts +35 -0
- package/src/services/languageCheck.ts +33 -0
- package/src/services/meal.ts +67 -0
- package/src/services/mealItem.ts +32 -0
- package/src/services/measurements.test.ts +106 -0
- package/src/services/measurements.ts +173 -0
- package/src/services/muscles.test.ts +46 -0
- package/src/services/muscles.ts +20 -0
- package/src/services/note.ts +39 -0
- package/src/services/nutritionalDiary.test.ts +35 -0
- package/src/services/nutritionalDiary.ts +70 -0
- package/src/services/nutritionalPlan.test.ts +74 -0
- package/src/services/nutritionalPlan.ts +104 -0
- package/src/services/permission.ts +26 -0
- package/src/services/permissions.test.ts +34 -0
- package/src/services/profile.test.ts +40 -0
- package/src/services/profile.ts +49 -0
- package/src/services/responseType.ts +35 -0
- package/src/services/routine.test.ts +195 -0
- package/src/services/routine.ts +250 -0
- package/src/services/session.test.ts +157 -0
- package/src/services/session.ts +99 -0
- package/src/services/slot.test.ts +68 -0
- package/src/services/slot.ts +43 -0
- package/src/services/slot_entry.ts +43 -0
- package/src/services/variation.test.ts +24 -0
- package/src/services/variation.ts +18 -0
- package/src/services/video.test.ts +65 -0
- package/src/services/video.ts +47 -0
- package/src/services/weight.test.ts +75 -0
- package/src/services/weight.ts +58 -0
- package/src/services/workoutLogs.test.ts +148 -0
- package/src/services/workoutLogs.ts +89 -0
- package/src/services/workoutUnits.ts +29 -0
- package/src/setupTests.ts +40 -0
- package/src/state/exerciseSubmissionReducer.ts +170 -0
- package/src/state/exerciseSubmissionState.tsx +75 -0
- package/src/state/index.ts +15 -0
- package/src/state/notificationReducer.ts +29 -0
- package/src/state/notificationState.tsx +32 -0
- package/src/state/stateTypes.ts +24 -0
- package/src/tests/api/ingredientInfoEndpoint.ts +72 -0
- package/src/tests/exerciseTestdata.ts +159 -0
- package/src/tests/exercises/searchResponse.ts +23 -0
- package/src/tests/ingredientTestdata.ts +76 -0
- package/src/tests/measurementsTestData.ts +40 -0
- package/src/tests/nutritionDiaryTestdata.ts +167 -0
- package/src/tests/nutritionTestdata.ts +200 -0
- package/src/tests/queryClient/index.ts +7 -0
- package/src/tests/responseApi.ts +197 -0
- package/src/tests/setup.ts +10 -0
- package/src/tests/slotEntryApiResponse.ts +144 -0
- package/src/tests/userTestdata.ts +43 -0
- package/src/tests/weight/testData.ts +7 -0
- package/src/tests/workoutLogsRoutinesTestData.ts +90 -0
- package/src/tests/workoutRoutinesTestData.ts +451 -0
- package/src/tests/workoutStatisticsTestData.ts +219 -0
- package/src/theme.ts +73 -0
- package/src/types.ts +144 -0
- package/src/utils/Adapter.ts +10 -0
- package/src/utils/colors.test.ts +38 -0
- package/src/utils/colors.ts +17 -0
- package/src/utils/consts.ts +160 -0
- package/src/utils/date.test.ts +56 -0
- package/src/utils/date.ts +145 -0
- package/src/utils/forms.test.ts +41 -0
- package/src/utils/forms.ts +54 -0
- package/src/utils/numbers.test.ts +55 -0
- package/src/utils/numbers.ts +42 -0
- package/src/utils/requests.test.ts +61 -0
- package/src/utils/requests.ts +22 -0
- package/src/utils/strings.test.ts +62 -0
- package/src/utils/strings.ts +28 -0
- package/src/utils/url.test.ts +127 -0
- package/src/utils/url.ts +237 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import {
|
|
2
|
+
addMaxRepetitionsConfig,
|
|
3
|
+
addMaxRestConfig,
|
|
4
|
+
addMaxWeightConfig,
|
|
5
|
+
addNrOfSetsConfig,
|
|
6
|
+
addRepetitionsConfig,
|
|
7
|
+
addRestConfig,
|
|
8
|
+
addRirConfig,
|
|
9
|
+
addWeightConfig,
|
|
10
|
+
deleteMaxRepetitionsConfig,
|
|
11
|
+
deleteMaxRestConfig,
|
|
12
|
+
deleteMaxWeightConfig,
|
|
13
|
+
deleteNrOfSetsConfig,
|
|
14
|
+
deleteRepetitionsConfig,
|
|
15
|
+
deleteRestConfig,
|
|
16
|
+
deleteRirConfig,
|
|
17
|
+
deleteWeightConfig,
|
|
18
|
+
editMaxRepetitionsConfig,
|
|
19
|
+
editMaxRestConfig,
|
|
20
|
+
editMaxWeightConfig,
|
|
21
|
+
editNrOfSetsConfig,
|
|
22
|
+
editRepetitionsConfig,
|
|
23
|
+
editRestConfig,
|
|
24
|
+
editRirConfig,
|
|
25
|
+
editWeightConfig
|
|
26
|
+
} from "services";
|
|
27
|
+
import {
|
|
28
|
+
addBaseConfig,
|
|
29
|
+
AddBaseConfigParams,
|
|
30
|
+
deleteBaseConfig,
|
|
31
|
+
editBaseConfig,
|
|
32
|
+
EditBaseConfigParams
|
|
33
|
+
} from "services/base_config";
|
|
34
|
+
import { ApiPath } from "utils/consts";
|
|
35
|
+
|
|
36
|
+
jest.mock("services/base_config", () => {
|
|
37
|
+
const originalModule = jest.requireActual("services/base_config");
|
|
38
|
+
return {
|
|
39
|
+
__esModule: true,
|
|
40
|
+
...originalModule, // Include all original exports
|
|
41
|
+
editBaseConfig: jest.fn(),
|
|
42
|
+
addBaseConfig: jest.fn(),
|
|
43
|
+
deleteBaseConfig: jest.fn(),
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
describe('Config Service - Edit Functions', () => {
|
|
48
|
+
const mockEditData: EditBaseConfigParams = { id: 1, value: 10 };
|
|
49
|
+
// eslint-disable-next-line camelcase
|
|
50
|
+
const mockAddData: AddBaseConfigParams = { value: 10, slot_entry: 1 };
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
beforeEach(() => {
|
|
54
|
+
jest.clearAllMocks();
|
|
55
|
+
|
|
56
|
+
(editBaseConfig as jest.Mock).mockResolvedValue({ data: mockEditData });
|
|
57
|
+
(addBaseConfig as jest.Mock).mockResolvedValue({ id: 2, value: 200 });
|
|
58
|
+
(deleteBaseConfig as jest.Mock).mockResolvedValue(undefined);
|
|
59
|
+
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
it('should call editBaseConfig with correct params for editWeightConfig', async () => {
|
|
63
|
+
await editWeightConfig(mockEditData);
|
|
64
|
+
expect(editBaseConfig).toHaveBeenCalledTimes(1);
|
|
65
|
+
expect(editBaseConfig).toHaveBeenCalledWith(mockEditData, ApiPath.WEIGHT_CONFIG);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('should call addBaseConfig with correct params for addWeightConfig', async () => {
|
|
69
|
+
await addWeightConfig(mockAddData);
|
|
70
|
+
expect(addBaseConfig).toHaveBeenCalledTimes(1);
|
|
71
|
+
expect(addBaseConfig).toHaveBeenCalledWith(mockAddData, ApiPath.WEIGHT_CONFIG);
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it('should call deleteBaseConfig with correct params for deleteWeightConfig', async () => {
|
|
75
|
+
const id = 1;
|
|
76
|
+
await deleteWeightConfig(id);
|
|
77
|
+
expect(deleteBaseConfig).toHaveBeenCalledTimes(1);
|
|
78
|
+
expect(deleteBaseConfig).toHaveBeenCalledWith(id, ApiPath.WEIGHT_CONFIG);
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
it('should call editBaseConfig with correct params for editMaxWeightConfig', async () => {
|
|
82
|
+
await editMaxWeightConfig(mockEditData);
|
|
83
|
+
expect(editBaseConfig).toHaveBeenCalledTimes(1);
|
|
84
|
+
expect(editBaseConfig).toHaveBeenCalledWith(mockEditData, ApiPath.MAX_WEIGHT_CONFIG);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it('should call addBaseConfig with correct params for addMaxWeightConfig', async () => {
|
|
88
|
+
await addMaxWeightConfig(mockAddData);
|
|
89
|
+
expect(addBaseConfig).toHaveBeenCalledTimes(1);
|
|
90
|
+
expect(addBaseConfig).toHaveBeenCalledWith(mockAddData, ApiPath.MAX_WEIGHT_CONFIG);
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
it('should call deleteBaseConfig with correct params for deleteMaxWeightConfig', async () => {
|
|
94
|
+
const id = 1;
|
|
95
|
+
await deleteMaxWeightConfig(id);
|
|
96
|
+
expect(deleteBaseConfig).toHaveBeenCalledTimes(1);
|
|
97
|
+
expect(deleteBaseConfig).toHaveBeenCalledWith(id, ApiPath.MAX_WEIGHT_CONFIG);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it('should call editBaseConfig with correct params for editRepsConfig', async () => {
|
|
101
|
+
await editRepetitionsConfig(mockEditData);
|
|
102
|
+
expect(editBaseConfig).toHaveBeenCalledTimes(1);
|
|
103
|
+
expect(editBaseConfig).toHaveBeenCalledWith(mockEditData, ApiPath.REPETITIONS_CONFIG);
|
|
104
|
+
});
|
|
105
|
+
|
|
106
|
+
it('should call addBaseConfig with correct params for addRepsConfig', async () => {
|
|
107
|
+
await addRepetitionsConfig(mockAddData);
|
|
108
|
+
expect(addBaseConfig).toHaveBeenCalledTimes(1);
|
|
109
|
+
expect(addBaseConfig).toHaveBeenCalledWith(mockAddData, ApiPath.REPETITIONS_CONFIG);
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it('should call deleteBaseConfig with correct params for deleteRepsConfig', async () => {
|
|
113
|
+
const id = 1;
|
|
114
|
+
await deleteRepetitionsConfig(id);
|
|
115
|
+
expect(deleteBaseConfig).toHaveBeenCalledTimes(1);
|
|
116
|
+
expect(deleteBaseConfig).toHaveBeenCalledWith(id, ApiPath.REPETITIONS_CONFIG);
|
|
117
|
+
});
|
|
118
|
+
|
|
119
|
+
it('should call editBaseConfig with correct params for editMaxRepsConfig', async () => {
|
|
120
|
+
await editMaxRepetitionsConfig(mockEditData);
|
|
121
|
+
expect(editBaseConfig).toHaveBeenCalledTimes(1);
|
|
122
|
+
expect(editBaseConfig).toHaveBeenCalledWith(mockEditData, ApiPath.MAX_REPS_CONFIG);
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
it('should call addBaseConfig with correct params for addMaxRepsConfig', async () => {
|
|
126
|
+
await addMaxRepetitionsConfig(mockAddData);
|
|
127
|
+
expect(addBaseConfig).toHaveBeenCalledTimes(1);
|
|
128
|
+
expect(addBaseConfig).toHaveBeenCalledWith(mockAddData, ApiPath.MAX_REPS_CONFIG);
|
|
129
|
+
});
|
|
130
|
+
|
|
131
|
+
it('should call deleteBaseConfig with correct params for deleteMaxRepsConfig', async () => {
|
|
132
|
+
const id = 1;
|
|
133
|
+
await deleteMaxRepetitionsConfig(id);
|
|
134
|
+
expect(deleteBaseConfig).toHaveBeenCalledTimes(1);
|
|
135
|
+
expect(deleteBaseConfig).toHaveBeenCalledWith(id, ApiPath.MAX_REPS_CONFIG);
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
it('should call editBaseConfig with correct params for editNrOfSetsConfig', async () => {
|
|
139
|
+
await editNrOfSetsConfig(mockEditData);
|
|
140
|
+
expect(editBaseConfig).toHaveBeenCalledTimes(1);
|
|
141
|
+
expect(editBaseConfig).toHaveBeenCalledWith(mockEditData, ApiPath.NR_OF_SETS_CONFIG);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it('should call addBaseConfig with correct params for addNrOfSetsConfig', async () => {
|
|
145
|
+
await addNrOfSetsConfig(mockAddData);
|
|
146
|
+
expect(addBaseConfig).toHaveBeenCalledTimes(1);
|
|
147
|
+
expect(addBaseConfig).toHaveBeenCalledWith(mockAddData, ApiPath.NR_OF_SETS_CONFIG);
|
|
148
|
+
});
|
|
149
|
+
|
|
150
|
+
it('should call deleteBaseConfig with correct params for deleteNrOfSetsConfig', async () => {
|
|
151
|
+
const id = 1;
|
|
152
|
+
await deleteNrOfSetsConfig(id);
|
|
153
|
+
expect(deleteBaseConfig).toHaveBeenCalledTimes(1);
|
|
154
|
+
expect(deleteBaseConfig).toHaveBeenCalledWith(id, ApiPath.NR_OF_SETS_CONFIG);
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
it('should call editBaseConfig with correct params for editRirConfig', async () => {
|
|
158
|
+
await editRirConfig(mockEditData);
|
|
159
|
+
expect(editBaseConfig).toHaveBeenCalledTimes(1);
|
|
160
|
+
expect(editBaseConfig).toHaveBeenCalledWith(mockEditData, ApiPath.RIR_CONFIG);
|
|
161
|
+
});
|
|
162
|
+
|
|
163
|
+
it('should call addBaseConfig with correct params for addRirConfig', async () => {
|
|
164
|
+
await addRirConfig(mockAddData);
|
|
165
|
+
expect(addBaseConfig).toHaveBeenCalledTimes(1);
|
|
166
|
+
expect(addBaseConfig).toHaveBeenCalledWith(mockAddData, ApiPath.RIR_CONFIG);
|
|
167
|
+
});
|
|
168
|
+
|
|
169
|
+
it('should call deleteBaseConfig with correct params for deleteRirConfig', async () => {
|
|
170
|
+
const id = 1;
|
|
171
|
+
await deleteRirConfig(id);
|
|
172
|
+
expect(deleteBaseConfig).toHaveBeenCalledTimes(1);
|
|
173
|
+
expect(deleteBaseConfig).toHaveBeenCalledWith(id, ApiPath.RIR_CONFIG);
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it('should call editBaseConfig with correct params for editRestConfig', async () => {
|
|
177
|
+
await editRestConfig(mockEditData);
|
|
178
|
+
expect(editBaseConfig).toHaveBeenCalledTimes(1);
|
|
179
|
+
expect(editBaseConfig).toHaveBeenCalledWith(mockEditData, ApiPath.REST_CONFIG);
|
|
180
|
+
});
|
|
181
|
+
|
|
182
|
+
it('should call addBaseConfig with correct params for addRestConfig', async () => {
|
|
183
|
+
await addRestConfig(mockAddData);
|
|
184
|
+
expect(addBaseConfig).toHaveBeenCalledTimes(1);
|
|
185
|
+
expect(addBaseConfig).toHaveBeenCalledWith(mockAddData, ApiPath.REST_CONFIG);
|
|
186
|
+
});
|
|
187
|
+
|
|
188
|
+
it('should call deleteBaseConfig with correct params for deleteRestConfig', async () => {
|
|
189
|
+
const id = 1;
|
|
190
|
+
await deleteRestConfig(id);
|
|
191
|
+
expect(deleteBaseConfig).toHaveBeenCalledTimes(1);
|
|
192
|
+
expect(deleteBaseConfig).toHaveBeenCalledWith(id, ApiPath.REST_CONFIG);
|
|
193
|
+
});
|
|
194
|
+
|
|
195
|
+
it('should call editBaseConfig with correct params for editMaxRestConfig', async () => {
|
|
196
|
+
await editMaxRestConfig(mockEditData);
|
|
197
|
+
expect(editBaseConfig).toHaveBeenCalledTimes(1);
|
|
198
|
+
expect(editBaseConfig).toHaveBeenCalledWith(mockEditData, ApiPath.MAX_REST_CONFIG);
|
|
199
|
+
});
|
|
200
|
+
|
|
201
|
+
it('should call addBaseConfig with correct params for addMaxRestConfig', async () => {
|
|
202
|
+
await addMaxRestConfig(mockAddData);
|
|
203
|
+
expect(addBaseConfig).toHaveBeenCalledTimes(1);
|
|
204
|
+
expect(addBaseConfig).toHaveBeenCalledWith(mockAddData, ApiPath.MAX_REST_CONFIG);
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
it('should call deleteBaseConfig with correct params for deleteMaxRestConfig', async () => {
|
|
208
|
+
const id = 1;
|
|
209
|
+
await deleteMaxRestConfig(id);
|
|
210
|
+
expect(deleteBaseConfig).toHaveBeenCalledTimes(1);
|
|
211
|
+
expect(deleteBaseConfig).toHaveBeenCalledWith(id, ApiPath.MAX_REST_CONFIG);
|
|
212
|
+
});
|
|
213
|
+
});
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import {
|
|
2
|
+
addBaseConfig,
|
|
3
|
+
AddBaseConfigParams,
|
|
4
|
+
deleteBaseConfig,
|
|
5
|
+
editBaseConfig,
|
|
6
|
+
EditBaseConfigParams
|
|
7
|
+
} from "services/base_config";
|
|
8
|
+
import { ApiPath } from "utils/consts";
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
export const editWeightConfig = async (data: EditBaseConfigParams) => await editBaseConfig(data, ApiPath.WEIGHT_CONFIG);
|
|
12
|
+
export const addWeightConfig = async (data: AddBaseConfigParams) => await addBaseConfig(data, ApiPath.WEIGHT_CONFIG);
|
|
13
|
+
export const deleteWeightConfig = async (id: number) => await deleteBaseConfig(id, ApiPath.WEIGHT_CONFIG);
|
|
14
|
+
|
|
15
|
+
export const editMaxWeightConfig = async (data: EditBaseConfigParams) => await editBaseConfig(data, ApiPath.MAX_WEIGHT_CONFIG);
|
|
16
|
+
export const addMaxWeightConfig = async (data: AddBaseConfigParams) => await addBaseConfig(data, ApiPath.MAX_WEIGHT_CONFIG);
|
|
17
|
+
export const deleteMaxWeightConfig = async (id: number) => await deleteBaseConfig(id, ApiPath.MAX_WEIGHT_CONFIG);
|
|
18
|
+
|
|
19
|
+
export const editRepetitionsConfig = async (data: EditBaseConfigParams) => await editBaseConfig(data, ApiPath.REPETITIONS_CONFIG);
|
|
20
|
+
export const addRepetitionsConfig = async (data: AddBaseConfigParams) => await addBaseConfig(data, ApiPath.REPETITIONS_CONFIG);
|
|
21
|
+
export const deleteRepetitionsConfig = async (id: number) => await deleteBaseConfig(id, ApiPath.REPETITIONS_CONFIG);
|
|
22
|
+
|
|
23
|
+
export const editMaxRepetitionsConfig = async (data: EditBaseConfigParams) => await editBaseConfig(data, ApiPath.MAX_REPS_CONFIG);
|
|
24
|
+
export const addMaxRepetitionsConfig = async (data: AddBaseConfigParams) => await addBaseConfig(data, ApiPath.MAX_REPS_CONFIG);
|
|
25
|
+
export const deleteMaxRepetitionsConfig = async (id: number) => await deleteBaseConfig(id, ApiPath.MAX_REPS_CONFIG);
|
|
26
|
+
|
|
27
|
+
export const editNrOfSetsConfig = async (data: EditBaseConfigParams) => await editBaseConfig(data, ApiPath.NR_OF_SETS_CONFIG);
|
|
28
|
+
export const addNrOfSetsConfig = async (data: AddBaseConfigParams) => await addBaseConfig(data, ApiPath.NR_OF_SETS_CONFIG);
|
|
29
|
+
export const deleteNrOfSetsConfig = async (id: number) => await deleteBaseConfig(id, ApiPath.NR_OF_SETS_CONFIG);
|
|
30
|
+
|
|
31
|
+
export const editMaxNrOfSetsConfig = async (data: EditBaseConfigParams) => await editBaseConfig(data, ApiPath.MAX_NR_OF_SETS_CONFIG);
|
|
32
|
+
export const addMaxNrOfSetsConfig = async (data: AddBaseConfigParams) => await addBaseConfig(data, ApiPath.MAX_NR_OF_SETS_CONFIG);
|
|
33
|
+
export const deleteMaxNrOfSetsConfig = async (id: number) => await deleteBaseConfig(id, ApiPath.MAX_NR_OF_SETS_CONFIG);
|
|
34
|
+
|
|
35
|
+
export const editRirConfig = async (data: EditBaseConfigParams) => await editBaseConfig(data, ApiPath.RIR_CONFIG);
|
|
36
|
+
export const addRirConfig = async (data: AddBaseConfigParams) => await addBaseConfig(data, ApiPath.RIR_CONFIG);
|
|
37
|
+
export const deleteRirConfig = async (id: number) => await deleteBaseConfig(id, ApiPath.RIR_CONFIG);
|
|
38
|
+
|
|
39
|
+
export const editMaxRirConfig = async (data: EditBaseConfigParams) => await editBaseConfig(data, ApiPath.MAX_RIR_CONFIG);
|
|
40
|
+
export const addMaxRirConfig = async (data: AddBaseConfigParams) => await addBaseConfig(data, ApiPath.MAX_RIR_CONFIG);
|
|
41
|
+
export const deleteMaxRirConfig = async (id: number) => await deleteBaseConfig(id, ApiPath.MAX_RIR_CONFIG);
|
|
42
|
+
|
|
43
|
+
export const editRestConfig = async (data: EditBaseConfigParams) => await editBaseConfig(data, ApiPath.REST_CONFIG);
|
|
44
|
+
export const addRestConfig = async (data: AddBaseConfigParams) => await addBaseConfig(data, ApiPath.REST_CONFIG);
|
|
45
|
+
export const deleteRestConfig = async (id: number) => await deleteBaseConfig(id, ApiPath.REST_CONFIG);
|
|
46
|
+
|
|
47
|
+
export const editMaxRestConfig = async (data: EditBaseConfigParams) => await editBaseConfig(data, ApiPath.MAX_REST_CONFIG);
|
|
48
|
+
export const addMaxRestConfig = async (data: AddBaseConfigParams) => await addBaseConfig(data, ApiPath.MAX_REST_CONFIG);
|
|
49
|
+
export const deleteMaxRestConfig = async (id: number) => await deleteBaseConfig(id, ApiPath.MAX_REST_CONFIG);
|
|
50
|
+
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import { Day } from "components/WorkoutRoutines/models/Day";
|
|
3
|
+
import { addDay, deleteDay, editDay } from "services";
|
|
4
|
+
|
|
5
|
+
jest.mock('axios');
|
|
6
|
+
const mockedAxios = axios as jest.Mocked<typeof axios>;
|
|
7
|
+
|
|
8
|
+
describe('editDay', () => {
|
|
9
|
+
|
|
10
|
+
const mockDayData = {
|
|
11
|
+
id: 1,
|
|
12
|
+
routine: 1,
|
|
13
|
+
name: 'Test Day',
|
|
14
|
+
description: 'A test day',
|
|
15
|
+
order: 1,
|
|
16
|
+
// eslint-disable-next-line camelcase
|
|
17
|
+
is_rest: false,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const testDay = Day.fromJson(mockDayData);
|
|
21
|
+
testDay.name = 'Test Day';
|
|
22
|
+
|
|
23
|
+
beforeEach(() => {
|
|
24
|
+
// Reset mocks before each test
|
|
25
|
+
jest.clearAllMocks();
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
test('should update a day and return the updated day', async () => {
|
|
29
|
+
mockedAxios.patch.mockResolvedValue({ data: mockDayData });
|
|
30
|
+
|
|
31
|
+
const updatedDay = await editDay(testDay);
|
|
32
|
+
|
|
33
|
+
expect(axios.patch).toHaveBeenCalledTimes(1);
|
|
34
|
+
expect(updatedDay).toEqual(Day.fromJson(mockDayData));
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('should handle errors gracefully', async () => {
|
|
38
|
+
const errorMessage = 'Network Error';
|
|
39
|
+
mockedAxios.patch.mockRejectedValue(new Error(errorMessage));
|
|
40
|
+
|
|
41
|
+
await expect(editDay(testDay)).rejects.toThrow(errorMessage);
|
|
42
|
+
expect(axios.patch).toHaveBeenCalledTimes(1);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
describe('addDay', () => {
|
|
48
|
+
const mockDayData = {
|
|
49
|
+
id: 1,
|
|
50
|
+
routine: 1,
|
|
51
|
+
name: 'Test Day',
|
|
52
|
+
description: 'A test day',
|
|
53
|
+
order: 1,
|
|
54
|
+
// eslint-disable-next-line camelcase
|
|
55
|
+
is_rest: false,
|
|
56
|
+
// eslint-disable-next-line camelcase
|
|
57
|
+
need_logs_to_advance: false,
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const testDay = new Day({
|
|
61
|
+
routineId: 1,
|
|
62
|
+
name: 'Test Day',
|
|
63
|
+
description: 'A test day',
|
|
64
|
+
order: 1,
|
|
65
|
+
isRest: false,
|
|
66
|
+
needLogsToAdvance: false,
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
beforeEach(() => {
|
|
70
|
+
jest.clearAllMocks();
|
|
71
|
+
});
|
|
72
|
+
|
|
73
|
+
test('should create a new day and return the created day', async () => {
|
|
74
|
+
mockedAxios.post.mockResolvedValue({ data: mockDayData });
|
|
75
|
+
|
|
76
|
+
const newDay = await addDay(testDay);
|
|
77
|
+
|
|
78
|
+
expect(axios.post).toHaveBeenCalledTimes(1);
|
|
79
|
+
expect(newDay).toEqual(Day.fromJson(mockDayData));
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
test('should handle errors gracefully', async () => {
|
|
83
|
+
const errorMessage = 'Network Error';
|
|
84
|
+
mockedAxios.post.mockRejectedValue(new Error(errorMessage));
|
|
85
|
+
|
|
86
|
+
await expect(addDay(testDay)).rejects.toThrow(errorMessage);
|
|
87
|
+
expect(axios.post).toHaveBeenCalledTimes(1);
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
describe('deleteDay', () => {
|
|
93
|
+
const mockDayId = 1;
|
|
94
|
+
|
|
95
|
+
beforeEach(() => {
|
|
96
|
+
jest.clearAllMocks();
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
test('should delete a day', async () => {
|
|
100
|
+
mockedAxios.delete.mockResolvedValue({ status: 204 }); // Assuming a successful delete returns 204 No Content
|
|
101
|
+
|
|
102
|
+
await deleteDay(mockDayId);
|
|
103
|
+
|
|
104
|
+
expect(axios.delete).toHaveBeenCalledTimes(1);
|
|
105
|
+
expect(axios.delete).toHaveBeenCalledWith(
|
|
106
|
+
expect.any(String),
|
|
107
|
+
expect.any(Object)
|
|
108
|
+
);
|
|
109
|
+
});
|
|
110
|
+
|
|
111
|
+
test('should handle errors gracefully', async () => {
|
|
112
|
+
const errorMessage = 'Network Error';
|
|
113
|
+
mockedAxios.delete.mockRejectedValue(new Error(errorMessage));
|
|
114
|
+
|
|
115
|
+
await expect(deleteDay(mockDayId)).rejects.toThrow(errorMessage);
|
|
116
|
+
expect(axios.delete).toHaveBeenCalledTimes(1);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { Day } from "components/WorkoutRoutines/models/Day";
|
|
3
|
+
import { ApiPath } from "utils/consts";
|
|
4
|
+
import { makeHeader, makeUrl } from "utils/url";
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
/*
|
|
8
|
+
* Update a day
|
|
9
|
+
*/
|
|
10
|
+
export const editDay = async (day: Day): Promise<Day> => {
|
|
11
|
+
const response = await axios.patch(
|
|
12
|
+
makeUrl(ApiPath.DAY, { id: day.id! }),
|
|
13
|
+
day.toJson(),
|
|
14
|
+
{ headers: makeHeader() }
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
return Day.fromJson(response.data);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
* Creates a new day
|
|
23
|
+
*/
|
|
24
|
+
export const addDay = async (day: Day): Promise<Day> => {
|
|
25
|
+
const response = await axios.post(
|
|
26
|
+
makeUrl(ApiPath.DAY),
|
|
27
|
+
day.toJson(),
|
|
28
|
+
{ headers: makeHeader() }
|
|
29
|
+
);
|
|
30
|
+
|
|
31
|
+
return Day.fromJson(response.data);
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
* Deletes an existing day
|
|
36
|
+
*/
|
|
37
|
+
export const deleteDay = async (id: number): Promise<void> => {
|
|
38
|
+
await axios.delete(
|
|
39
|
+
makeUrl(ApiPath.DAY, { id: id }),
|
|
40
|
+
{ headers: makeHeader() }
|
|
41
|
+
);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import { Equipment } from "components/Exercises/models/equipment";
|
|
3
|
+
import { getEquipment } from "services";
|
|
4
|
+
|
|
5
|
+
jest.mock("axios");
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
describe("equipment service tests", () => {
|
|
9
|
+
|
|
10
|
+
test('GET equipment entries', async () => {
|
|
11
|
+
|
|
12
|
+
// Arrange
|
|
13
|
+
const response = {
|
|
14
|
+
count: 3,
|
|
15
|
+
next: null,
|
|
16
|
+
previous: null,
|
|
17
|
+
results: [
|
|
18
|
+
{
|
|
19
|
+
"id": 1,
|
|
20
|
+
"name": "Barbell"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"id": 8,
|
|
24
|
+
"name": "Bench"
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
"id": 3,
|
|
28
|
+
"name": "Dumbbell"
|
|
29
|
+
},
|
|
30
|
+
]
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
// Act
|
|
35
|
+
(axios.get as jest.Mock).mockImplementation(() => Promise.resolve({ data: response }));
|
|
36
|
+
const result = await getEquipment();
|
|
37
|
+
|
|
38
|
+
// Assert
|
|
39
|
+
expect(axios.get).toHaveBeenCalledTimes(1);
|
|
40
|
+
expect(result).toStrictEqual([
|
|
41
|
+
new Equipment(1, "Barbell"),
|
|
42
|
+
new Equipment(8, "Bench"),
|
|
43
|
+
new Equipment(3, "Dumbbell"),
|
|
44
|
+
]);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import axios from 'axios';
|
|
2
|
+
import { Equipment, EquipmentAdapter } from "components/Exercises/models/equipment";
|
|
3
|
+
import { ApiEquipmentType } from 'types';
|
|
4
|
+
import { makeHeader, makeUrl } from "utils/url";
|
|
5
|
+
import { ResponseType } from "./responseType";
|
|
6
|
+
|
|
7
|
+
export const EQUIPMENT_PATH = 'equipment';
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
* Fetch all equipment
|
|
12
|
+
*/
|
|
13
|
+
export const getEquipment = async (): Promise<Equipment[]> => {
|
|
14
|
+
const url = makeUrl(EQUIPMENT_PATH);
|
|
15
|
+
const { data: receivedEquipment } = await axios.get<ResponseType<ApiEquipmentType>>(url, {
|
|
16
|
+
headers: makeHeader(),
|
|
17
|
+
});
|
|
18
|
+
const adapter = new EquipmentAdapter();
|
|
19
|
+
return receivedEquipment.results.map(e => adapter.fromJson(e));
|
|
20
|
+
};
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import { deleteExercise, editExercise, getExercise, getExercises, processExerciseApiData } from "services";
|
|
3
|
+
import { responseApiExerciseInfo, testApiExercise1 } from "tests/responseApi";
|
|
4
|
+
|
|
5
|
+
jest.mock("axios");
|
|
6
|
+
|
|
7
|
+
describe("Exercise service API tests", () => {
|
|
8
|
+
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
jest.resetAllMocks();
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
test('GET exercise data entries', async () => {
|
|
14
|
+
|
|
15
|
+
// Arrange
|
|
16
|
+
(axios.get as jest.Mock).mockImplementation(() => Promise.resolve({ data: responseApiExerciseInfo }));
|
|
17
|
+
|
|
18
|
+
// Act
|
|
19
|
+
const result = await getExercises();
|
|
20
|
+
|
|
21
|
+
// Assert
|
|
22
|
+
expect(axios.get).toHaveBeenCalledTimes(1);
|
|
23
|
+
expect(result).toEqual([testApiExercise1]);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
test('GET exercise data for single entry', async () => {
|
|
27
|
+
|
|
28
|
+
// Arrange
|
|
29
|
+
(axios.get as jest.Mock).mockImplementation(() => Promise.resolve({ data: responseApiExerciseInfo.results[0] }));
|
|
30
|
+
|
|
31
|
+
// Act
|
|
32
|
+
const result = await getExercise(345);
|
|
33
|
+
|
|
34
|
+
// Assert
|
|
35
|
+
expect(axios.get).toHaveBeenCalledTimes(1);
|
|
36
|
+
expect(result).toEqual(testApiExercise1);
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
test('EDIT an existing exercise', async () => {
|
|
40
|
+
|
|
41
|
+
// Arrange
|
|
42
|
+
const response = {
|
|
43
|
+
"id": 749,
|
|
44
|
+
"uuid": "1b020b3a-3732-4c7e-92fd-a0cec90ed69b",
|
|
45
|
+
"creation_date": "2022-06-23",
|
|
46
|
+
"update_date": "2022-06-23T18:22:54.909478+02:00",
|
|
47
|
+
"category": 3,
|
|
48
|
+
"muscles": [3, 4],
|
|
49
|
+
"muscles_secondary": [9],
|
|
50
|
+
"equipment": [1, 2],
|
|
51
|
+
"variations": null
|
|
52
|
+
};
|
|
53
|
+
(axios.patch as jest.Mock).mockImplementation(() => Promise.resolve({ data: response, status: 200 }));
|
|
54
|
+
|
|
55
|
+
// Act
|
|
56
|
+
const result = await editExercise(
|
|
57
|
+
749,
|
|
58
|
+
{
|
|
59
|
+
category: 3,
|
|
60
|
+
equipment: [1, 2],
|
|
61
|
+
muscles: [3, 4],
|
|
62
|
+
// eslint-disable-next-line camelcase
|
|
63
|
+
muscles_secondary: [9]
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
// Assert
|
|
68
|
+
expect(axios.patch).toHaveBeenCalled();
|
|
69
|
+
expect(result).toEqual(200);
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
test('DELETE exercise', async () => {
|
|
73
|
+
|
|
74
|
+
// Arrange
|
|
75
|
+
(axios.delete as jest.Mock).mockImplementation(() => Promise.resolve({ status: 204 }));
|
|
76
|
+
|
|
77
|
+
// Act
|
|
78
|
+
const result = await deleteExercise(1);
|
|
79
|
+
|
|
80
|
+
// Assert
|
|
81
|
+
expect(axios.delete).toHaveBeenCalled();
|
|
82
|
+
expect(result).toEqual(204);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
describe("Exercise service parser tests", () => {
|
|
89
|
+
|
|
90
|
+
test('process api data', () => {
|
|
91
|
+
|
|
92
|
+
// Act
|
|
93
|
+
const result = processExerciseApiData(responseApiExerciseInfo);
|
|
94
|
+
|
|
95
|
+
// Assert
|
|
96
|
+
expect(result).toEqual([testApiExercise1]);
|
|
97
|
+
});
|
|
98
|
+
});
|