{"version":3,"sources":["api/auth.ts","api/exercise.ts","models/exercise.ts","components/SetDropdown.tsx","api/file.ts","components/ImageFromFile.tsx","components/ImageFromServer.tsx","components/VideoFromFile.tsx","components/VideoFromServer.tsx","components/EditExercise.tsx","models/soundType.ts","components/Exercise.tsx","components/EditableExercise.tsx","assets/logo192.png","components/CreateExercise.tsx","pages/Exercises.tsx","api/theme.ts","pages/Themes.tsx","models/user.ts","pages/Login.tsx","api/user.ts","pages/Users.tsx","api/set.ts","pages/Sets.tsx","pages/public/VerificationComplete.tsx","pages/public/Datenschutz.tsx","api/export.ts","pages/Export.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["login","user","fetch","process","headers","Accept","body","JSON","stringify","method","resp","ok","console","log","localStorage","setItem","json","token","access_token","warn","fetchWithReauth","input","init","force","userString","getItem","localUser","parse","Authorization","getToken","result","status","createExercise","exercise","newExercise","updateExercise","copyExercise","copyDTO","getExerciseList","getSetList","forceRelogin","setList","undefined","deleteExercise","id","Category","SetDropdown","props","value","selectedSet","onChange","e","find","s","target","setChanged","map","selected","toString","name","uploadFile","file","formData","FormData","append","response","fileId","getFile","blob","get","mimeType","ImageFromFile","image","useState","imageBase64","setImageBase64","r","FileReader","readAsDataURL","onloadend","alt","className","src","ImageFromServer","imageNotFound","setImageNotFound","useEffect","load","fileCache","has","set","VideoFromFile","video","videoBase64","setVideoBase64","controls","VideoFromServer","videoNotFound","setVideoNotFound","SoundType","EditExercise","setId","creatorId","setSelectedSet","setExercise","type","imageId","setImage","files","videoId","setVideo","category","Object","keys","filter","key","isNaN","Number","v","style","minWidth","minHeight","description","Exercise","templateConfig","weight","marginTop","repetitions","time","useTimer","EditableExercise","editMode","setEditMode","exerciseEl","onClick","exerciseId","targetSetId","onCopyExercise","onDeleteExercise","CreateExercise","loadDefaultImage","defaultImage","clickButton","onCreateExercise","alert","Map","Exercises","exerciseList","setExerciseList","filteredExerciseList","setFilteredExerciseList","setSetList","setFilter","createFilteredExerciseList","l","fl","initialize","padding","filtered","getThemeNameList","getThemeList","getThemeByName","updateTheme","theme","Role","Themes","themeList","setThemeList","themeName","setThemeName","renderTheme","setRenderTheme","t","SoundSelector","soundFile","setSoundFile","soundFileUri","setSoundFileUri","soundMap","soundId","display","soundIndex","background","URL","createObjectURL","justifyContent","RenderColorSelector","css","color","activeTintColor","headerColor","headerTintColor","tabIconDefault","tabIconSelected","tint","text","largeInfoTextColor","i","RenderSoundSelectors","RenderTheme","title","setColor","width","textAlign","Login","username","setUsername","password","setPassword","onLogin","getUserList","deleteUserById","deleteUserId","deleteResult","createUser","createResult","Users","userList","setUserList","roles","User","active","newUser","setNewUser","EditUser","setUser","newServerUser","u","length","String","setIds","sid","confirm","userId","ul","backgroundColor","updateSet","newSet","createSet","assignSet","unAssignSet","setAsDefault","setAsDefaultSet","deleteSet","Sets","createSetName","setCreateSetName","sl","useTimerForAllExercises","SetRow","selectedUser","setSelectedUser","unSelectedUser","setUnSelectedUser","some","checked","UserDropdown","includes","userChanged","push","deleteExercises","VerificationComplete","useParams","Datenschutz","href","rel","downloadExport","themeId","zip","Export","selectedTheme","setSelectedTheme","tl","SetDropDown","ThemeDropDown","themeChanged","url","window","link","document","createElement","setAttribute","appendChild","click","removeChild","App","isLoggedIn","stickyValue","path","children","location","to","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","getElementById"],"mappings":"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","file":"static/js/main.f33d2eaa.chunk.js","sourcesContent":["import { LoginUser } from '../models/user';\n\nexport async function login(user: LoginUser): Promise {\n const resp = await fetch(`${process.env.REACT_APP_PUBLIC_URL}/api/user/auth/login`, {\n headers: {\n Accept: 'application/json',\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(user),\n method: 'POST',\n });\n if (resp.ok) {\n console.log('User successfully logged in');\n localStorage.setItem('user', JSON.stringify(user));\n const token = (await resp.json()).access_token;\n localStorage.setItem('token', JSON.stringify(token));\n return true;\n } else {\n console.warn('Login failed');\n return false;\n }\n}\n\n//TODO: This is problematic if used in parallel, Promise.all etc.\n//Better to update session jwt in this case. (separate method)\nexport async function fetchWithReauth(input: RequestInfo, init?: RequestInit | undefined, force?: boolean) {\n const userString = localStorage.getItem('user');\n const localUser = JSON.parse(userString ?? '');\n let result = await fetch(input, {\n ...init,\n headers: { ...init?.headers, ...{ Authorization: `Bearer ${getToken()}` } },\n });\n if ((result.status === 401 && localUser) || force) {\n console.log('Session is probably expired. Trying to login with stored credentials.');\n await login(localUser);\n return await fetch(input, {\n ...init,\n headers: {\n ...init?.headers,\n ...{ Authorization: `Bearer ${getToken()}` },\n },\n });\n } else return result;\n}\n\nconst getToken = () => {\n return JSON.parse(localStorage.getItem('token') || '');\n};\n","import { CopyExerciseDTO, Exercise } from './../models/exercise';\nimport { fetchWithReauth } from './auth';\nimport { Set } from '../models/set';\n\nexport async function createExercise(exercise: Exercise) {\n let newExercise = await fetchWithReauth('/api/exercise/create', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(exercise),\n });\n return newExercise.json();\n}\n\nexport async function updateExercise(exercise: Exercise) {\n await fetchWithReauth(`/api/exercise/update`, {\n method: 'PUT',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(exercise),\n });\n}\n\nexport async function copyExercise(copyDTO: CopyExerciseDTO) {\n await fetchWithReauth(`/api/exercise/copy`, {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(copyDTO),\n });\n}\n\nexport async function getExerciseList(): Promise> {\n return await (await fetchWithReauth('/api/exercise')).json();\n}\n\nexport async function getSetList(forceRelogin = false): Promise> {\n const setList = await fetchWithReauth('/api/set/all', {}, forceRelogin);\n return setList.ok ? await setList.json() : undefined;\n}\n\nexport async function deleteExercise(id: string): Promise {\n return await fetchWithReauth(`/api/exercise/${id}`, { method: 'DELETE' });\n}\n","export interface Exercise {\n id?: string;\n name: string;\n setId?: string;\n description: string;\n templateConfig: TemplateConfig;\n imageId?: string;\n videoId?: string;\n category: Category;\n}\n\nexport interface TemplateConfig {\n weight?: number;\n time?: number;\n repetitions?: number;\n useTimer?: boolean;\n}\n\nexport enum Category {\n legs,\n arms,\n core,\n cardio,\n chest,\n back,\n stretching,\n}\n\nexport interface CopyExerciseDTO {\n exerciseId: string;\n targetSetId: string;\n}\n","import {Set} from '../models/set';\n\nexport const SetDropdown = (props: any) => {\n return \n }","import { FileResponse } from '../models/fileResponse';\nimport { fetchWithReauth } from './auth';\n\nexport const uploadFile = async (file: File) => {\n const formData = new FormData();\n formData.append('file', file);\n\n const response = await fetchWithReauth('/api/file/upload', {\n method: 'POST',\n body: formData,\n });\n const fileId = (await response.json()).fileId;\n return fileId;\n};\n\nexport async function getFile(fileId: string): Promise {\n const response = await fetchWithReauth(`/api/file/${fileId}`, {\n method: 'GET',\n });\n if (response.ok)\n return {\n blob: await response.blob(),\n mimeType: response.headers.get('content-type')?.toString(),\n };\n else return response;\n}\n","import { useState } from \"react\";\n\nexport const ImageFromFile = ({image} : any) => {\n const [imageBase64, setImageBase64] = useState();\n let r = new FileReader();\n r.readAsDataURL(image);\n r.onloadend = (e) => {setImageBase64(r.result?.toString())};\n return ()\n }\n ","import { useEffect, useState } from \"react\";\nimport { getFile } from \"../api/file\";\nimport { FileResponse } from \"../models/fileResponse\";\n\nexport function ImageFromServer(props : any){\n const [imageBase64, setImageBase64] = useState();\n const [imageNotFound, setImageNotFound] = useState(false);\n let r = new FileReader();\n useEffect(() => {\n const load = async () => {\n if(!props.id){\n console.warn(\"File not defined.\")\n return;\n }\n const response = await getFile(props.id);\n if(response.blob && typeof(response.blob) === \"object\")\n r.readAsDataURL((response as FileResponse).blob);\n else\n setImageNotFound(true);\n\n }\n if(!props?.fileCache?.has(props.id))\n load();\n else\n setImageBase64(props.fileCache.get(props.id))\n },[]);\n \n \n r.onloadend = (e) => {\n const result = r.result?.toString();\n if(result){\n props?.fileCache?.set(props.id, result);\n setImageBase64(result);\n }\n };\n\n if(imageNotFound)\n return (
Image not found
)\n\n if(imageBase64)\n return ()\n return (
No Image
)\n}","import { useState } from \"react\";\n\nexport const VideoFromFile = ({video} : any) => {\n const [videoBase64, setVideoBase64] = useState();\n let r = new FileReader();\n r.readAsDataURL(video);\n r.onloadend = (e) => {setVideoBase64(r.result?.toString())};\n return ()\n }\n ","import { useEffect, useState } from \"react\";\nimport { getFile } from \"../api/file\";\nimport { FileResponse } from \"../models/fileResponse\";\n\nexport function VideoFromServer(props : any){\n const [videoBase64, setVideoBase64] = useState();\n const [videoNotFound, setVideoNotFound] = useState();\n let r = new FileReader();\n useEffect(() => {\n const load = async () => {\n if(!props.id) return;\n const response = await getFile(props.id);\n if(response.blob && typeof(response.blob) === \"object\")r.readAsDataURL((response as FileResponse).blob);\n else setVideoNotFound(true);\n }\n if(!props?.fileCache?.has(props.id))\n load();\n else\n setVideoBase64(props.fileCache.get(props.id))\n },[]);\n \n \n r.onloadend = (e) => {\n const result = r.result?.toString();\n if(result){\n props?.fileCache?.set(props.id, result);\n setVideoBase64(result);\n }\n };\n\n if(videoNotFound)return (
Video not found
)\n\n if(videoBase64)\n return ()\n return (
No Video
)\n}","import { useState } from 'react';\nimport { Category, Exercise } from '../models/exercise';\nimport { Set } from '../models/set';\nimport { ImageFromFile } from './ImageFromFile';\nimport { ImageFromServer } from './ImageFromServer';\nimport { SetDropdown } from './SetDropdown';\nimport { VideoFromFile } from './VideoFromFile';\nimport { VideoFromServer } from './VideoFromServer';\n\ninterface EditExerciseProps {\n setList?: Array;\n fileCache: Map;\n exercise: Exercise;\n setExercise: (e: Exercise) => void;\n image: any;\n setImage: (image: any) => void;\n video: any;\n setVideo: (video: any) => void;\n}\n\nexport const EditExercise = (props: EditExerciseProps) => {\n const [selectedSet, setSelectedSet] = useState(props.setList?.find((s: Set) => s.id === props.exercise.setId) || { name: '', id: '', creatorId: '' });\n\n const enumToArray = () => Object.keys(Category).filter((key) => isNaN(Number(key)));\n return (\n
\n
\n Title: props.setExercise({ ...props.exercise, name: e.target.value })} type=\"text\">\n
\n
\n {props.image ? : }\n props.setImage(e.target.files ? e.target.files[0] : null)} />\n
\n
\n {props.video ? : }\n props.setVideo(e.target.files ? e.target.files[0] : null)} />\n
\n
\n {\n setSelectedSet(s);\n props.setExercise({ ...props.exercise, setId: s?.id });\n }}\n selectedSet={selectedSet}\n >{' '}\n
\n
\n {/*
props.setExercise({...props.exercise, difficulty: e.target.value })}>
*/}\n
\n \n
\n
\n {\n props.setExercise({ ...props.exercise, description: e.target.value });\n }}\n value={props.exercise.description}\n >\n
\n
\n );\n};\n","export enum SoundType {\n skip,\n new_plan,\n download,\n short_beep,\n long_beep,\n whistle,\n swap,\n drop,\n cheer,\n}\n","import { Category, Exercise as ExerciseModel } from '../models/exercise';\nimport { Set } from '../models/set';\nimport { ImageFromServer } from './ImageFromServer';\nimport { VideoFromServer } from './VideoFromServer';\n\ninterface ExerciseProps {\n exercise: ExerciseModel;\n setList: Array | undefined;\n fileCache: Map;\n}\n\nexport const Exercise = (props: ExerciseProps) => {\n return (\n
\n
{props.exercise.name}
\n
\n \n
\n
\n \n
\n

\n Weight:{props.exercise.templateConfig.weight}\n

\n Reps: {props.exercise.templateConfig.repetitions}\n
\n Time: {props.exercise.templateConfig.time}\n
\n {props.exercise.templateConfig.useTimer ? 'Use Timer' : undefined}\n

\n\n
{Category[props.exercise.category]}
\n {props.exercise.setId ?
{props.setList?.find((s) => s.id === props.exercise.setId)?.name}
: null}\n
{props.exercise.description}
\n
\n );\n};\n","import { useState } from \"react\";\nimport { copyExercise, deleteExercise, updateExercise } from \"../api/exercise\";\nimport { uploadFile } from \"../api/file\";\nimport { Exercise as ExerciseModel } from \"../models/exercise\";\nimport {Set} from \"../models/set\";\nimport { EditExercise } from \"./EditExercise\";\nimport { Exercise } from \"./Exercise\";\nimport { SetDropdown } from \"./SetDropdown\";\n\n\ninterface EditableExerciseProps {\n exercise : ExerciseModel;\n fileCache: Map;\n selectedSet?: Set;\n setList:Array| undefined;\n onDeleteExercise?: (id: string) => void;\n onCopyExercise?:() => void;\n}\n\n export const EditableExercise = (props : EditableExerciseProps) => {\n const [editMode, setEditMode] = useState(false);\n \n\n const [exerciseEl, setExercise] = useState(props.exercise);\n const [video, setVideo] = useState();\n const [image, setImage] = useState();\n\n if(!editMode)\n return (\n
\n \n
\n
\n
\n \n \n
\n
\n )\n else\n return (
\n \n
\n
\n
)\n \n}\n","export default \"data:image/png;base64,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\"","import { useEffect, useState } from 'react';\nimport { fetchWithReauth } from '../api/auth';\nimport { createExercise } from '../api/exercise';\nimport { uploadFile } from '../api/file';\nimport { Exercise } from '../models/exercise';\nimport { EditExercise } from './EditExercise';\nimport { Set } from '../models/set';\nimport defaultImage from '../assets/logo192.png';\n\ninterface CreateExerciseProps {\n fileCache: Map;\n setList?: Array;\n onCreateExercise?: (exercise: Exercise) => void;\n}\n\nexport const CreateExercise = (props: CreateExerciseProps) => {\n const [exercise, setExercise] = useState({ category: 0, templateConfig: {}, description: '', name: '' });\n const [image, setImage] = useState();\n const [video, setVideo] = useState();\n\n useEffect(() => {\n const loadDefaultImage = async () => {\n setImage(await (await fetchWithReauth(defaultImage)).blob());\n };\n loadDefaultImage();\n }, []);\n\n const clickButton = async (e: any) => {\n if (exercise.name && exercise.description && image) {\n const imageId = await uploadFile(image);\n let videoId;\n if (video) videoId = await uploadFile(video);\n let newExercise = await createExercise({ ...exercise, imageId: imageId, videoId: videoId });\n console.log(newExercise);\n setExercise({ category: 0, templateConfig: {}, description: '', name: '', setId: '' });\n setImage(await (await fetchWithReauth(defaultImage)).blob());\n if (props.onCreateExercise) props.onCreateExercise(exercise);\n } else alert('Error, data missing.');\n };\n return (\n
\n \n
\n \n
\n
\n );\n};\n","import { useEffect, useState } from \"react\";\nimport { getExerciseList, getSetList } from \"../api/exercise\";\nimport { Exercise } from \"../models/exercise\";\nimport './Exercises.css';\nimport {Set } from \"../models/set\";\nimport { SetDropdown } from \"../components/SetDropdown\";\nimport { EditableExercise } from \"../components/EditableExercise\";\nimport { CreateExercise } from \"../components/CreateExercise\";\n\nconst fileCache = new Map();\n\nexport function Exercises(){\n const [exerciseList, setExerciseList] = useState>();\n const [filteredExerciseList, setFilteredExerciseList] = useState>();\n \n const [setList, setSetList] = useState>();\n const [filter,setFilter] = useState();\n const [selectedSet, setSelectedSet] = useState();\n \n const createFilteredExerciseList = (exerciseList : Array) => {\n return exerciseList?.filter(e => !filter ? true : e.setId === filter?.id);\n }\n\n useEffect( () => {\n async function initialize(){\n if(!exerciseList){\n const l = await getExerciseList();\n setExerciseList(l);\n }\n if(filter && exerciseList ){\n const fl = createFilteredExerciseList(exerciseList);\n setFilteredExerciseList(fl);\n }else if(!filter){\n setFilteredExerciseList(exerciseList);\n }\n \n if(!setList)\n setSetList(await getSetList());\n }\n initialize();\n }, [ exerciseList, setList,filter]);\n\n return (\n
\n
\n
Exercise Manager
\n { setExerciseList([...(exerciseList??[]), e])}} />\n
\n
\n Set Filter\n { setFilter(set)}}>\n Set Select\n {setSelectedSet(s)}} selectedSet={selectedSet}>\n
\n
\n \n {filteredExerciseList?.map((e : any) => ( {setExerciseList(await getExerciseList());}}\n onDeleteExercise={async (id) => {\n const filtered = exerciseList?.filter(e => e.id !== id)|| [];\n setExerciseList(filtered);\n }}/>))\n }\n
\n );\n}\n\n\n \n","import { Theme } from '../models/theme';\nimport { fetchWithReauth } from './auth';\n\nexport async function getThemeNameList(): Promise> {\n return await (await fetchWithReauth('/api/theme')).json();\n}\n\nexport async function getThemeList(): Promise> {\n return await await (await fetchWithReauth('/api/theme/list')).json();\n}\n\nexport async function getThemeByName(name: string): Promise {\n return await (await fetchWithReauth(`/api/theme/${name}`)).json();\n}\n\nexport async function updateTheme(theme: Theme): Promise {\n return await (\n await fetchWithReauth('/api/theme/update', {\n method: 'PUT',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(theme),\n })\n ).json();\n}\n","import { useEffect, useState } from 'react';\nimport { getFile, uploadFile } from '../api/file';\nimport { getThemeByName, getThemeNameList, updateTheme } from '../api/theme';\nimport { FileResponse } from '../models/fileResponse';\nimport { SoundType } from '../models/soundType';\nimport { SoundMap, Theme } from '../models/theme';\n\nconst enumToArray = () => Object.keys(SoundType).filter((key) => isNaN(Number(key)));\n\nexport function Themes() {\n const [themeList, setThemeList] = useState>();\n const [themeName, setThemeName] = useState('');\n const [renderTheme, setRenderTheme] = useState();\n\n useEffect(() => {\n async function initialize() {\n if (!themeList) {\n const l = await getThemeNameList();\n setThemeList(l);\n }\n if (themeName !== '') {\n console.log('Getting theme from server');\n const t = await getThemeByName(themeName);\n setRenderTheme(t);\n setThemeName('');\n }\n }\n initialize();\n }, [themeList, themeName]);\n\n return (\n
\n

Themes

\n
\n {themeList?.map(RenderThemeName)}\n
 
\n {renderTheme ? RenderTheme() : null}\n
\n );\n\n function RenderThemeName(themeName: string) {\n return (\n {\n setThemeName(themeName);\n }}\n >\n {themeName}\n
\n );\n }\n\n function RenderTheme() {\n interface SoundMapProps {\n soundIndex: number;\n soundMap?: SoundMap;\n }\n\n const SoundSelector = (props: SoundMapProps) => {\n const [soundFile, setSoundFile] = useState();\n const [soundFileUri, setSoundFileUri] = useState('');\n\n let r = new FileReader();\n useEffect(() => {\n const load = async () => {\n if (props.soundMap?.id) {\n const response = await getFile(props.soundMap.soundId);\n if (response.blob && typeof response.blob === 'object') {\n r.readAsDataURL((response as FileResponse).blob);\n }\n }\n };\n load();\n }, []);\n\n r.onloadend = (e) => {\n const result = r.result?.toString();\n if (result) {\n setSoundFileUri(result);\n }\n };\n\n return (\n
\n
ID: {props.soundIndex}
\n {\n let f = e.target.files ? e.target.files[0] : '';\n if (e.target.files) {\n setSoundFile(e.target.files[0]);\n }\n }}\n />\n\n {soundFile !== undefined && soundFile !== null ? (\n
\n {SoundType[props.soundIndex]}\n {\n const fileId: string = await uploadFile(soundFile);\n let soundMap: SoundMap = { id: props.soundIndex, soundId: fileId };\n if (renderTheme) {\n renderTheme.soundMap[props.soundIndex] = soundMap;\n setRenderTheme(renderTheme);\n }\n }}\n >\n Upload\n \n \n
\n ) : (\n
\n {SoundType[props.soundIndex]}\n \n
\n )}\n
\n );\n };\n\n const RenderSoundSelectors = (theme: Theme) => {\n return (\n <>\n
\n

Sounds:

\n {enumToArray().map((s, i) => (\n \n ))}\n
\n \n );\n };\n return (\n <>\n
\n
\n
Theme Name: {renderTheme!.name}
\n
 
\n {\n let t = renderTheme;\n updateTheme(t!);\n }}\n >\n Save\n \n
\n {RenderCss(renderTheme!)}\n {RenderSoundSelectors(renderTheme!)}\n
\n \n );\n function RenderCss(theme: Theme) {\n return (\n <>\n
\n {RenderColorSelector('Background', theme.css.background, (color) => setRenderTheme({ ...renderTheme!, css: { ...renderTheme!.css, background: color } }))}\n {RenderColorSelector('ActiveTintColor', theme.css.activeTintColor, (color) =>\n setRenderTheme({ ...renderTheme!, css: { ...renderTheme!.css, activeTintColor: color } }),\n )}\n {RenderColorSelector('HeaderColor', theme.css.headerColor, (color) => setRenderTheme({ ...renderTheme!, css: { ...renderTheme!.css, headerColor: color } }))}\n {RenderColorSelector('HeaderTintColor', theme.css.headerTintColor, (color) =>\n setRenderTheme({ ...renderTheme!, css: { ...renderTheme!.css, headerTintColor: color } }),\n )}\n {RenderColorSelector('TabIconDefault', theme.css.tabIconDefault, (color) => setRenderTheme({ ...renderTheme!, css: { ...renderTheme!.css, tabIconDefault: color } }))}\n {RenderColorSelector('TabIconSelected', theme.css.tabIconSelected, (color) =>\n setRenderTheme({ ...renderTheme!, css: { ...renderTheme!.css, tabIconSelected: color } }),\n )}\n {RenderColorSelector('Tint', theme.css.tint, (color) => setRenderTheme({ ...renderTheme!, css: { ...renderTheme!.css, tint: color } }))}\n {RenderColorSelector('Text', theme.css.text, (color) => setRenderTheme({ ...renderTheme!, css: { ...renderTheme!.css, text: color } }))}\n\n {RenderColorSelector('LargeInfoTextColor', theme.css.largeInfoTextColor, (color) =>\n setRenderTheme({ ...renderTheme!, css: { ...renderTheme!.css, largeInfoTextColor: color } }),\n )}\n
\n \n );\n }\n }\n}\n\nfunction RenderColorSelector(title: string, color: string, setColor: (s: string) => void) {\n return (\n
\n {title}: setColor(e.target.value)}>\n
\n );\n}\n","export interface LoginUser {\n username: string;\n password: string;\n}\n\nexport interface User {\n userId: string;\n setIds: Array;\n roles: Array;\n active: boolean;\n username: string;\n password: string;\n}\n\nexport interface CreateUser {\n username: string;\n password: string;\n active: boolean;\n roles: Array;\n}\n\nexport enum Role {\n User = \"user\",\n Uploader = \"uploader\",\n Admin = \"admin\",\n}\n","import { useState } from \"react\";\nimport { login } from \"../api/auth\";\n\nexport function Login(props: any){\n const [username, setUsername] = useState();\n const [password, setPassword] = useState();\n\nreturn (\n
\n
\n
Login
\n
\n
\n Username:\n
\n
\n {setUsername(e.target.value)}} />\n
\n
\n Password\n
\n
\n {setPassword(e.target.value)}} />\n
\n
\n \n
\n
\n \n \n \n
\n );\n}\n","import { CreateUser } from \"./../models/user\";\nimport { User } from \"../models/user\";\nimport { fetchWithReauth } from \"./auth\";\n\nexport async function getUserList(): Promise> {\n return await (await fetchWithReauth(\"/api/user\")).json();\n}\n\nexport async function deleteUserById(deleteUserId: string) {\n const deleteResult = await fetchWithReauth(`/api/user/${deleteUserId}`, {\n method: \"DELETE\",\n headers: { \"content-type\": \"application/json\" },\n //body: JSON.stringify(deleteSet),\n });\n return deleteResult.status;\n}\n\nexport async function createUser(createUser: CreateUser) {\n const createResult = await fetchWithReauth(`/api/user/`, {\n method: \"POST\",\n headers: { \"content-type\": \"application/json\" },\n body: JSON.stringify(createUser),\n });\n return await createResult.json();\n}\n","import { useEffect, useState } from \"react\";\nimport { createUser, deleteUserById, getUserList } from \"../api/user\";\nimport { CreateUser, Role, User } from \"../models/user\";\nimport {Set} from \"../models/set\";\nimport { getSetList } from \"../api/exercise\";\n\n\nexport function Users(){\n const [userList, setUserList] = useState>();\n const [setList, setSetList] = useState>();\n const [newUser, setNewUser] = useState({password:\"\", roles: [Role.User], username:\"\", active: true});\n \n useEffect( () => {\n async function initialize(){\n if(!userList){\n const l = await getUserList();\n setUserList(l);\n }\n if(!setList)\n setSetList(await getSetList());\n }\n initialize();\n }, [setList, userList]);\n\n return
\n
\n
User Manager
\n \n \n
\n
\n\n {userList?.map((u : User) =>
\n
\n {u.username}\n
\n
\n Roles:{u.roles.map((r,i) => r + ( i !== u.roles.length - 1 ? \", \" : \"\"))} \n
\n
\n Active: {String(u.active)}\n
\n
\n Sets: \n {u.setIds.map((sid, i) => setList?.find(s => sid === s.id)?.name + (i !== u.setIds.length -1 ? \", \" : \"\"))} \n
\n \n
\n \n )}\n
\n}\n\nfunction EditUser(props: any){\n return(\n
\n Name: props.setUser({...props.user, username: e.target.value})} type='text'>\n \n \n Password: props.setUser({...props.user, password: e.target.value })}> \n \n Primary Role:\n \n
)\n}","import { DeleteSet, SetAsDefaultSet } from './../models/set';\nimport { fetchWithReauth } from './auth';\nimport { AssignSet, Set } from '../models/set';\n\nexport async function getSetList(): Promise> {\n return await (await fetchWithReauth('/api/exercise')).json();\n}\n\nexport async function updateSet(set: Set) {\n let newSet = await fetchWithReauth('/api/set/', {\n method: 'PUT',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(set),\n });\n return newSet.json();\n}\n\nexport async function createSet(set: Set) {\n let newSet = await fetchWithReauth('/api/set/', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(set),\n });\n return newSet.json();\n}\n\nexport async function assignSet(assignSet: AssignSet) {\n await fetchWithReauth('/api/set/assign', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(assignSet),\n });\n}\n\nexport async function unAssignSet(assignSet: AssignSet) {\n await fetchWithReauth('/api/set/unassign', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(assignSet),\n });\n}\n\nexport async function setAsDefault(setAsDefaultSet: SetAsDefaultSet) {\n await fetchWithReauth('/api/set/setDefaultSet', {\n method: 'POST',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(setAsDefaultSet),\n });\n}\n\nexport async function deleteSet(deleteSet: DeleteSet) {\n await fetchWithReauth('/api/set/', {\n method: 'DELETE',\n headers: { 'content-type': 'application/json' },\n body: JSON.stringify(deleteSet),\n });\n}\n","import { useEffect, useState } from \"react\";\nimport { getSetList } from \"../api/exercise\";\nimport { assignSet, createSet, deleteSet, setAsDefault, unAssignSet, updateSet } from \"../api/set\";\nimport { getUserList } from \"../api/user\";\nimport {Set} from '../models/set';\nimport { User } from \"../models/user\";\n\nexport function Sets(){\n const [setList, setSetList] = useState>();\n const [userList, setUserList] = useState>();\n const [createSetName, setCreateSetName] = useState(\"\");\n\n useEffect( () => {\n async function initialize(){\n if(!setList){\n const sl = await getSetList();\n setSetList(sl);\n }\n if(!userList){\n const ul = await getUserList();\n setUserList(ul);\n }\n }\n initialize();\n }, [setList, userList]); \n\n return
\n \n \n
\n
Set Manager
\n
\n
\n
Name: setCreateSetName(e.target.value)} type='text'>\n \n
\n
\n {setList?.map((s : Set) => )=> { setSetList(s)}}>)}\n
\n}\n\ninterface SetRowProps{\n userList: Array;\n setUserList:(setList: Array) => void\n setList: Array;\n set:Set;\n setSetList:(setList: Array) => void\n}\n\nfunction SetRow(props: SetRowProps){\n const [selectedUser, setSelectedUser] = useState();\n const [unSelectedUser, setUnSelectedUser] = useState();\n return <>\n
Name:{props.set?.name} Assigned Users: {props.userList?.filter(u => u.setIds.some(s => s === props.set.id)).map(u => u.username + \" \")}\n Creator/Owner: {props.userList.find(u => u.userId === props.set.creatorId)?.username}\n
\n Timer\n {\n props.set.useTimerForAllExercises = !props.set.useTimerForAllExercises;\n props.setSetList([...props.setList]);\n await updateSet(props.set);\n }} checked={props.set?.useTimerForAllExercises ?? false}>\n !u.setIds?.includes(props.set.id || \"\"))} setId={props.set?.id} userChanged={(u:User)=> {setSelectedUser(u)}} >\n {props.set?.id ? <>\n \n\n u.setIds?.includes(props.set.id || \"\"))} setId={props.set?.id} userChanged={(u:User)=> {setUnSelectedUser(u)}} >\n \n \n \n \n \n : null}\n}\n\nfunction UserDropdown(props: any){\n //props.userList?.forEach((u:User)=> console.log(!u.setIds?.includes(props.setId)));\n \n return \n }","import { useParams } from \"react-router-dom\";\n\nexport function VerificationComplete(props: any){\n let {result} = useParams();\n return (\n
\n
\n
{result === \"true\" ? \"Verification Complete\" : \"Verification Failed\"}
\n
\n
\n
\n
\n
\n );\n}","export function Datenschutz(){\n return (<>\n

Privacy Policy

\n

Last updated: January 03, 2022

\n

This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information when You use the Service and tells You about Your privacy rights and how the law protects You.

\n

We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy. This Privacy Policy has been created with the help of the Privacy Policy Template.

\n

Interpretation and Definitions

\n

Interpretation

\n

The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural.

\n

Definitions

\n

For the purposes of this Privacy Policy:

\n
    \n
  • \n

    Account means a unique account created for You to access our Service or parts of our Service.

    \n
  • \n
  • \n

    Affiliate means an entity that controls, is controlled by or is under common control with a party, where "control" means ownership of 50% or more of the shares, equity interest or other securities entitled to vote for election of directors or other managing authority.

    \n
  • \n
  • \n

    Application means the software program provided by the Company downloaded by You on any electronic device, named SSFit

    \n
  • \n
  • \n

    Company (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to SSFit.

    \n
  • \n
  • \n

    Country refers to: Austria

    \n
  • \n
  • \n

    Device means any device that can access the Service such as a computer, a cellphone or a digital tablet.

    \n
  • \n
  • \n

    Personal Data is any information that relates to an identified or identifiable individual.

    \n
  • \n
  • \n

    Service refers to the Application.

    \n
  • \n
  • \n

    Service Provider means any natural or legal person who processes the data on behalf of the Company. It refers to third-party companies or individuals employed by the Company to facilitate the Service, to provide the Service on behalf of the Company, to perform services related to the Service or to assist the Company in analyzing how the Service is used.

    \n
  • \n
  • \n

    Usage Data refers to data collected automatically, either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit).

    \n
  • \n
  • \n

    You means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable.

    \n
  • \n
\n

Collecting and Using Your Personal Data

\n

Types of Data Collected

\n

Personal Data

\n

While using Our Service, We may ask You to provide Us with certain personally identifiable information that can be used to contact or identify You. Personally identifiable information may include, but is not limited to:

\n
    \n
  • \n

    Email address

    \n
  • \n
  • \n

    First name and last name

    \n
  • \n
  • \n

    Usage Data

    \n
  • \n
\n

Usage Data

\n

Usage Data is collected automatically when using the Service.

\n

Usage Data may include information such as Your Device's Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that You visit, the time and date of Your visit, the time spent on those pages, unique device identifiers and other diagnostic data.

\n

When You access the Service by or through a mobile device, We may collect certain information automatically, including, but not limited to, the type of mobile device You use, Your mobile device unique ID, the IP address of Your mobile device, Your mobile operating system, the type of mobile Internet browser You use, unique device identifiers and other diagnostic data.

\n

We may also collect information that Your browser sends whenever You visit our Service or when You access the Service by or through a mobile device.

\n

Use of Your Personal Data

\n

The Company may use Personal Data for the following purposes:

\n
    \n
  • \n

    To provide and maintain our Service, including to monitor the usage of our Service.

    \n
  • \n
  • \n

    To manage Your Account: to manage Your registration as a user of the Service. The Personal Data You provide can give You access to different functionalities of the Service that are available to You as a registered user.

    \n
  • \n
  • \n

    For the performance of a contract: the development, compliance and undertaking of the purchase contract for the products, items or services You have purchased or of any other contract with Us through the Service.

    \n
  • \n
  • \n

    To contact You: To contact You by email, telephone calls, SMS, or other equivalent forms of electronic communication, such as a mobile application's push notifications regarding updates or informative communications related to the functionalities, products or contracted services, including the security updates, when necessary or reasonable for their implementation.

    \n
  • \n
  • \n

    To provide You with news, special offers and general information about other goods, services and events which we offer that are similar to those that you have already purchased or enquired about unless You have opted not to receive such information.

    \n
  • \n
  • \n

    To manage Your requests: To attend and manage Your requests to Us.

    \n
  • \n
  • \n

    For business transfers: We may use Your information to evaluate or conduct a merger, divestiture, restructuring, reorganization, dissolution, or other sale or transfer of some or all of Our assets, whether as a going concern or as part of bankruptcy, liquidation, or similar proceeding, in which Personal Data held by Us about our Service users is among the assets transferred.

    \n
  • \n
  • \n

    For other purposes: We may use Your information for other purposes, such as data analysis, identifying usage trends, determining the effectiveness of our promotional campaigns and to evaluate and improve our Service, products, services, marketing and your experience.

    \n
  • \n
\n

We may share Your personal information in the following situations:

\n
    \n
  • With Service Providers: We may share Your personal information with Service Providers to monitor and analyze the use of our Service, to contact You.
  • \n
  • For business transfers: We may share or transfer Your personal information in connection with, or during negotiations of, any merger, sale of Company assets, financing, or acquisition of all or a portion of Our business to another company.
  • \n
  • With Affiliates: We may share Your information with Our affiliates, in which case we will require those affiliates to honor this Privacy Policy. Affiliates include Our parent company and any other subsidiaries, joint venture partners or other companies that We control or that are under common control with Us.
  • \n
  • With business partners: We may share Your information with Our business partners to offer You certain products, services or promotions.
  • \n
  • With other users: when You share personal information or otherwise interact in the public areas with other users, such information may be viewed by all users and may be publicly distributed outside.
  • \n
  • With Your consent: We may disclose Your personal information for any other purpose with Your consent.
  • \n
\n

Retention of Your Personal Data

\n

The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies.

\n

The Company will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a shorter period of time, except when this data is used to strengthen the security or to improve the functionality of Our Service, or We are legally obligated to retain this data for longer time periods.

\n

Transfer of Your Personal Data

\n

Your information, including Personal Data, is processed at the Company's operating offices and in any other places where the parties involved in the processing are located. It means that this information may be transferred to — and maintained on — computers located outside of Your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from Your jurisdiction.

\n

Your consent to this Privacy Policy followed by Your submission of such information represents Your agreement to that transfer.

\n

The Company will take all steps reasonably necessary to ensure that Your data is treated securely and in accordance with this Privacy Policy and no transfer of Your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of Your data and other personal information.

\n

Disclosure of Your Personal Data

\n

Business Transactions

\n

If the Company is involved in a merger, acquisition or asset sale, Your Personal Data may be transferred. We will provide notice before Your Personal Data is transferred and becomes subject to a different Privacy Policy.

\n

Law enforcement

\n

Under certain circumstances, the Company may be required to disclose Your Personal Data if required to do so by law or in response to valid requests by public authorities (e.g. a court or a government agency).

\n

Other legal requirements

\n

The Company may disclose Your Personal Data in the good faith belief that such action is necessary to:

\n
    \n
  • Comply with a legal obligation
  • \n
  • Protect and defend the rights or property of the Company
  • \n
  • Prevent or investigate possible wrongdoing in connection with the Service
  • \n
  • Protect the personal safety of Users of the Service or the public
  • \n
  • Protect against legal liability
  • \n
\n

Security of Your Personal Data

\n

The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While We strive to use commercially acceptable means to protect Your Personal Data, We cannot guarantee its absolute security.

\n

Children's Privacy

\n

Our Service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from anyone under the age of 13. If You are a parent or guardian and You are aware that Your child has provided Us with Personal Data, please contact Us. If We become aware that We have collected Personal Data from anyone under the age of 13 without verification of parental consent, We take steps to remove that information from Our servers.

\n

If We need to rely on consent as a legal basis for processing Your information and Your country requires consent from a parent, We may require Your parent's consent before We collect and use that information.

\n

Links to Other Websites

\n

Our Service may contain links to other websites that are not operated by Us. If You click on a third party link, You will be directed to that third party's site. We strongly advise You to review the Privacy Policy of every site You visit.

\n

We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.

\n

Changes to this Privacy Policy

\n

We may update Our Privacy Policy from time to time. We will notify You of any changes by posting the new Privacy Policy on this page.

\n

We will let You know via email and/or a prominent notice on Our Service, prior to the change becoming effective and update the "Last updated" date at the top of this Privacy Policy.

\n

You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.

\n

Contact Us

\n

If you have any questions about this Privacy Policy, You can contact us:

\n\n

Quelle: Datenschutz-Konfigurator von mein-datenschutzbeauftragter.de

\n \n \n );\n}","import { fetchWithReauth } from './auth';\n\nexport async function downloadExport(setId: string, themeId: string) {\n const zip = await fetchWithReauth(`/api/export?setId=${setId}&themeId=${themeId}`, {\n method: 'GET',\n headers: { 'content-type': 'application/json' },\n });\n return await zip.blob();\n}\n","import { useEffect, useState } from \"react\";\nimport { getSetList } from \"../api/exercise\";\nimport { downloadExport } from \"../api/export\";\nimport { getThemeList } from \"../api/theme\";\nimport {Set} from '../models/set';\nimport { Theme } from \"../models/theme\";\n\nexport function Export(){\n const [setList, setSetList] = useState>();\n const [themeList, setThemeList] = useState>();\n const [selectedSet, setSelectedSet] = useState();\n const [selectedTheme, setSelectedTheme] = useState();\n\n useEffect( () => {\n async function initialize(){\n if(!setList){\n const sl = await getSetList();\n setSetList(sl);\n setSelectedSet(sl[0]);\n }\n if(!themeList){\n const tl = await getThemeList();\n setThemeList(tl);\n setSelectedTheme(tl[0]);\n }\n }\n initialize();\n }, [setList, themeList]); \n\n return
\n \n \n
\n
Exporter
\n
\n
\n
\n Set: setSelectedSet(s)} />\n Theme: setSelectedTheme(t)} />\n \n
\n
\n {/* {setList?.map((s : Set) => )=> { setSetList(s)}}>)} */}\n
\n}\n\nfunction ThemeDropDown(props: any){\n return \n }\n\nfunction SetDropDown(props: any){\n return \n }","import './App.css';\nimport { BrowserRouter as Router, Switch, Route, Link } from 'react-router-dom';\nimport { Exercises } from './pages/Exercises';\nimport { Themes } from './pages/Themes';\nimport { Login } from './pages/Login';\nimport { Users } from './pages/Users';\nimport { Sets } from './pages/Sets';\nimport { VerificationComplete } from './pages/public/VerificationComplete';\nimport { Datenschutz } from './pages/public/Datenschutz';\nimport { Export } from './pages/Export';\n\nfunction App() {\n const isLoggedIn = (() => {\n const stickyValue = window.localStorage.getItem('isLoggedIn');\n return stickyValue !== null ? JSON.parse(stickyValue) : false;\n })();\n return (\n \n \n } />\n \n {\n window.localStorage.setItem('isLoggedIn', JSON.stringify(r));\n window.location.href = '/';\n }}\n />\n \n \n \n \n \n {!isLoggedIn ? (\n {\n window.localStorage.setItem('isLoggedIn', JSON.stringify(r));\n window.location.href = '/exercises';\n }}\n />\n ) : (\n \n )}\n \n \n {!isLoggedIn ? (\n {\n window.localStorage.setItem('isLoggedIn', JSON.stringify(r));\n window.location.href = '/themes';\n }}\n />\n ) : (\n \n )}\n \n \n {!isLoggedIn ? (\n {\n window.localStorage.setItem('isLoggedIn', JSON.stringify(r));\n window.location.href = '/users';\n }}\n />\n ) : (\n \n )}\n \n \n {!isLoggedIn ? (\n {\n window.localStorage.setItem('isLoggedIn', JSON.stringify(r));\n window.location.href = '/sets';\n }}\n />\n ) : (\n \n )}\n \n \n {!isLoggedIn ? (\n {\n window.localStorage.setItem('isLoggedIn', JSON.stringify(r));\n window.location.href = '/export';\n }}\n />\n ) : (\n \n )}\n \n \n {!isLoggedIn ? (\n {\n window.localStorage.setItem('isLoggedIn', JSON.stringify(r));\n window.location.href = '/';\n }}\n />\n ) : (\n renderMenu()\n )}\n \n \n \n );\n}\n\nfunction renderMenu() {\n return (\n
\n \n
\n );\n}\n\nexport default App;\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}