{"version":3,"sources":["axios.ts","routes.ts","Context/AuthProvider.tsx","hooks/account/useRefreshToken.ts","Context/APIErrorProvider.tsx","hooks/useAPIError.ts","hooks/useMutationWithError.ts","hooks/notification/useMarkNotificationAsSeen.ts","Context/SocketProvider.tsx","hooks/account/useMe.tsx","icons/BookingIcon.tsx","icons/DashboardIcon.tsx","icons/MessagesIcon.tsx","icons/ProfileIcon.tsx","icons/FriendsIcon.tsx","icons/SettingsIcon.tsx","icons/LogOutIcon.tsx","components/Logo.tsx","components/NavigationItem.tsx","components/Navigation.tsx","components/PageContainer.tsx","AppRoute.tsx","components/CustomButton.tsx","hooks/highlightModel.ts","components/Highlight.tsx","components/PageHeader.tsx","hooks/booking/bookingModels.ts","hooks/booking/useActiveUserBookings.ts","hooks/booking/useMaxActiveUserBookings.ts","hooks/class/useClasses.ts","components/PageContent.tsx","hooks/booking/useClassTypeNameWhichDoesNotOccupyBookingSlot.ts","hooks/classTypes/useClassTypeInfos.ts","pages/Booking.tsx","hooks/booking/useBookClass.ts","hooks/booking/useRemoveBookingFromClass.ts","hooks/account/useAutoComplete.tsx","components/AccountAutoComplete.tsx","components/Box.tsx","hooks/booking/useBookingsByClassId.ts","hooks/booking/useFriendshipBookingsByClassId.ts","hooks/class/useClass.ts","components/UserLine.tsx","components/ButtonAligner.tsx","hooks/useMutationForForms.ts","components/form/TextInput.tsx","components/ErrorSummary.tsx","components/form/Dropdown.tsx","pages/Class.tsx","hooks/booking/useRemoveBookingFromClassByUserId.ts","hooks/booking/useMarkBookingAsNoShowByUserId.ts","hooks/booking/useRebuildBookingProjectionsByClassId.ts","hooks/booking/useUnmarkBookingAsNoShowByUserId.ts","hooks/booking/useMoveUserFromWaitlistToParticipant.ts","hooks/booking/useBookClassByUserId.ts","hooks/class/useMessageClass.ts","hooks/classTypes/useClassTypes.ts","hooks/class/useGetClassesByDate.ts","pages/ClassSetup.tsx","hooks/class/useFillClasses.ts","hooks/class/useCreateClass.ts","hooks/class/useCancelClass.ts","hooks/class/useDeleteClass.ts","hooks/class/useUpdateClassTime.ts","hooks/class/useUpdateClassSlots.ts","pages/ClassTypes.tsx","hooks/classTypes/useCreateClassType.ts","hooks/activity/useActivities.ts","hooks/activity/useWeeklyGraph.ts","components/WeeklyStatistics.tsx","components/ErrorBoundry.tsx","icons/TotalIcon.tsx","icons/MonthIcon.tsx","icons/YearIcon.tsx","pages/Dashboard.tsx","hooks/defaultClasses/defaultClassModels.ts","hooks/defaultClasses/useDefaultClasses.ts","pages/DefaultClasses.tsx","hooks/defaultClasses/useCreateDefaultClass.ts","hooks/defaultClasses/useUpdateDefaultClass.ts","hooks/defaultClasses/useDeleteDefaultClass.ts","components/EditUserDetails.tsx","components/form/CheckboxInput.tsx","components/EditUserEmailNotificationSettings.tsx","pages/EditProfile.tsx","hooks/account/useUpdateAccount.ts","hooks/account/useSetEmailSettings.ts","hooks/account/useGetFullUser.tsx","components/EditUserCoachSettings.tsx","pages/EditUser.tsx","hooks/account/useUpdateAccountById.ts","hooks/account/useSetEmailSettingsByUserId.ts","hooks/account/useSetCoachRoleByUserId.ts","hooks/friendship/useFindNewFriend.ts","hooks/friendship/useGetRequested.ts","hooks/friendship/useRequestFriendship.ts","hooks/friendship/useGetFriends.ts","components/FindFriends.tsx","hooks/friendship/useGetFeed.ts","hooks/class/useClassesByIds.ts","hooks/friendship/useGetRequests.ts","hooks/friendship/useDeleteFriendship.ts","hooks/friendship/useApproveFriendship.ts","components/FriendsActivity.tsx","components/FriendsList.tsx","pages/Friends.tsx","hooks/notification/notificationModels.ts","pages/MyClasses.tsx","hooks/notification/useGetNotifications.ts","notifactionTextResolver.tsx","pages/Notifications.tsx","hooks/notification/useMarkNotificationAsRead.ts","hooks/notification/useGetNotificationsSettings.ts","pages/NotificationsSettings.tsx","hooks/notification/useSaveNotificationsSettings.ts","components/UserDetails.tsx","hooks/membership/membershipModels.ts","hooks/membership/useMemberships.ts","hooks/membership/useMembershipsByUserId.ts","hooks/booking/useBookingsByMembershipId.ts","hooks/booking/useBookingsByUserIdAndMembershipId.ts","components/UserMemberships.tsx","hooks/membership/useUpdateMembership.ts","hooks/membership/useCreateMembership.ts","components/UserPicture.tsx","hooks/account/useSetPictureById.ts","hooks/account/useSetPicture.ts","pages/Profile.tsx","hooks/account/useGetUser.tsx","hooks/friendship/useGetUserFeed.ts","pages/User.tsx","hooks/account/useGet.tsx","hooks/membership/useMembershipStats.ts","hooks/membership/useMembershipPBS.ts","hooks/account/useGetUsersById.tsx","hooks/booking/useGetNoShows.ts","pages/Users.tsx","components/Content.tsx","components/APIErrorNotification.tsx","components/UINotifications.tsx","components/Updater.tsx","hooks/notification/useRegisterToUserOnDevice.ts","icons/AppStoreIcon.tsx","pages/public/LogIn.tsx","hooks/account/useLogin.ts","pages/public/LogOut.tsx","hooks/notification/useUnRegisterToUserOnDevice.ts","pages/public/AccountRegister.tsx","hooks/account/useRegisterAccount.ts","pages/public/PrivacyPolicy.tsx","pages/public/Support.tsx","pages/public/RequestResetPassword.tsx","hooks/account/useRequestPasswordReset.ts","pages/public/ResetPassword.tsx","hooks/account/useResetPassword.ts","pages/public/PublicLayout.tsx","Context/PushNotificationProvider.tsx","hooks/notification/useRegisterDevice.ts","hooks/notification/useRegisterRequestedToSendNotifications.ts","hooks/notification/useRegisterToken.ts","App.tsx","serviceWorker.ts","index.tsx"],"names":["instance","axios","create","baseURL","Capacitor","getPlatform","undefined","timeout","params","interceptors","request","use","config","token","localStorage","getItem","headers","error","Promise","reject","response","iter","o","ISO_8601","Object","keys","forEach","k","test","Date","parse","data","CLASS","LOGIN","USER","EDITUSER","AuthStateContext","React","createContext","setToken","user","useAuthState","context","useContext","Error","AuthProvider","children","decodeTokenIntoUser","decodedToken","jwt_decode","roles","userId","sub","expires","exp","useState","setUser","value","setItem","removeItem","useMutation","post","onSuccess","updateData","queryCache","invalidateQueries","refreshTokenMutate","history","useHistory","useEffect","isRefreshing","failedQueue","status","header","originalRequest","indexOf","_retry","resolve","push","then","catch","err","result","prom","Provider","APIErrorContext","addError","removeError","APIErrorProvider","setError","contextValue","useCallback","message","useAPIError","useMutationWithError","mutationFn","mutation","useMarkNotificationAsSeen","notificationIds","notificationId","SocketContext","notificationCount","notifications","removeNotification","SocketProvider","connection","setConnection","connecting","setConnecting","numNotification","setNumNotification","setNotifications","mutate11","authState","userid","App","Plugins","addListener","state","isActive","start","stop","console","log","newConnection","HubConnectionBuilder","withUrl","accessTokenFactory","configureLogging","LogLevel","Information","withAutomaticReconnect","build","HubConnectionState","Disconnected","on","notificationsCpoy","id","model","e","markAsSeen","arr","filter","v","i","a","removeNotification2","getMe","_","get","useMe","useQuery","BookingIcon","xmlns","viewBox","fill","d","DashboardIcon","MessagesIcon","ProfileIcon","FriendsIcon","SettingsIcon","LogOutIcon","Logo","Hello","styled","span","props","mobileOnly","css","desktopOnly","NavigationItem","to","text","icon","exact","requiresRoles","userDetails","hasAccess","Button","component","NavLink","activeClassName","onClick","ContentContainerBackgroundSize","NavigationHello","div","LogoContainer","UserContainer","UserPicture","img","UserName","NavigationTop","Navigation","socketContext","messagesCount","src","picture","alt","firstName","lastName","AppRoute","path","isPrivate","render","pathname","ThemeColor","PageContainer","platform","backgroundSize","large","GetColor","color","Red","Blue","Green","Black","Grey1","Grey2","Grey3","defaultProps","normal","HighlightColor","CustomButton","themecolor","GetTextColor","HighlightChip","hcolor","Highlight","PageHeader","backButton","rest","StyledPageHeader","BackButton","goBack","BigPageHeader","StyledBigPageHeader","BookingState","h1","getBookings","useActiveUserBookings","getClasses","useClasses","PageContent","getClassTypeNameWhichDoesNotOccupyBookingSlot","BookingList","count","BookingDayContainer","BookingDay","BookingContainer","DaysContainer","Day","DayBackground","active","WeekDay","WeekDayLong","DayNumber","DayHasBookings","Booking","getKey","classes","bookings","grouped","x","date","getFullYear","getMonth","slice","getDate","reduce","previous","currentItem","group","inputRef","useRef","Array","inputRef2","setActiveState","scrollOnBack","setScrollOnBack","num","current","length","parseInt","scrollIntoView","setActive","toString","dayCount","entries","map","index","key","mo","moment","hasBooking","classItem","find","b","classId","behavior","inline","ref","el","format","onScroll","newActive","Math","round","currentTarget","scrollLeft","clientWidth","booking","class","showDate","activeBookings","occupyActiveBookingSlot","StyledBookingClass","NameContainer","UserPictureContainer","UserNameContainer","ClassContainer","TimeContainer","ActionContainer","ClassName","ClassInfo","StyledAlert","Alert","StyledSnackbar","Snackbar","BookingClass","bookMutate","delete","removeBookingFromClassMutate","maxNumberOfActiveBookings","classTypeInfos","classTypeNameWhichDoesNotOccupyBookingSlot","removeBookingTime","setHours","getHours","end","show","setShow","handleSubmit","info","className","found","classTypes","includes","dangerouslySetInnerHTML","__html","getInfo","classTypeName","replace","InfoOutlined","cancelled","highlights","h","WaitingList","position","Participating","NoShow","calendar","lastDay","sameDay","nextDay","lastWeek","nextWeek","sameElse","slots","open","anchorOrigin","vertical","horizontal","onClose","severity","AlertTitle","getGet","query","AccountAutoComplete","setValue","inputValue","setInputValue","options","setOptions","accounts","onAccountSelected","newOptions","Autocomplete","style","width","getOptionLabel","option","filterOptions","autoComplete","includeInputInList","filterSelectedOptions","onChange","event","newValue","onInputChange","newInputValue","renderInput","TextField","label","variant","fullWidth","renderOption","Grid","container","alignItems","item","xs","Box","BoxHeader","h2","getClass","NameAndActionContainer","ButtonContainer","Position","HightLightContainer","UserLine","ButtonAligner","useMutationForForms","throwOnError","InputContainer","CssTextField","withStyles","root","borderBottomColor","borderColor","TextInput","control","name","inputProps","type","defaultValue","as","ErrorSummary","errors","fieldName","addServerErrors","join","CssSelectField","Select","Dropdown","renderValue","multiple","InputLabel","shrink","Class","useParams","useClass","_class","classLoading","isLoading","Bookings","FriendshipBookings","useBookingsByClassId","useRemoveBookingFromClassByUserIdMutate","useMarkBookingAsNoShowByUserIdMutate","useRebuildBookingProjectionsByClassIdMutate","useUnmarkBookingAsNoShowByUserIdMutate","useMoveUserFromWaitlistToParticipantMutate","RemoveBooking","setOpen","openMessage","setOpenMessage","handleCloseMessage","handleClose","useBookClassByUserIdMutate","accountToAdd","setAccountToAdd","filtered","waitlist","bookingEnabled","classStarted","useForm","handleMessageSubmit","createData","messageMutate","window","confirm","MarkAsNoShow","UnmarkAsNoShow","MoveUserFromWaitlistToParticipant","alert","RebuildBookingProjections","Dialog","aria-labelledby","DialogTitle","DialogContent","DialogContentText","account","DialogActions","BookClassByUserId","disabled","noValidate","onSubmit","MenuItem","title","useFriendshipBookingsByClassId","useClassTypes","ClassSetup","selectedDate","setSelectedDate","match","useRouteMatch","DatePicker","clearable","animateYearScrolling","ClassSetupByDate","year","month","day","convertedYear","Number","convertedMonth","convertedDay","useGetClassesByDate","useFillClassesMutate","converted","createClassMutate","TableContainer","Paper","Table","aria-label","TableHead","TableRow","TableCell","TableBody","ClassSetupItem","split","values","target","step","payload","useCancelClassMutate","useDeleteClassMutate","openSlots","setOpenSlots","openTime","setOpenTime","handleTimeSubmit","setErrorTime","controlTime","updateClassTimeMutate","handleSlotsSubmit","setErrorSlots","controlSlots","updateClassSlotsMutate","ClassTypes","createMutate","register","required","WeeklyStatistics","hello","invisdata","maxTrainings","types","week","y","trainings","trainingsArray","setIndex","margin","right","animation","onMouseLeave","height","tickSizeInner","tickSizeOuter","hideTicks","tickValues","tickFormat","tick","curve","onNearestX","ii","itemsFormat","titleFormat","ErrorBoundary","hasError","errorInfo","this","Component","TotalIcon","MonthIcon","opacity","YearIcon","DayOfWeekFlag","WeekFlag","DashboardContainer","Next","Prev","DashboardItem","DashboardText","DashboardBigText","Dashboard","activity","classesIsLoading","loading","clicks","setClicks","showDiagnostics","setShowDiagnostics","inputRef22","scrollTo","left","totalBookings","bookingsThisMonth","bookingsThisYear","c","process","names","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday","weekOptions","Even","Odd","DefaultClasses","defaultClasses","personName","setPersonName","weeks","setWeeks","rv","DefaultClassRow","handleChange","days","selected","sort","Checkbox","checked","ListItemText","primary","handleWeekChange","row","updateMutate","deleteMutate","defaultDays","daysOfWeek","defaultWeeks","getUTCHours","padStart","getUTCMinutes","defaultClassId","classTypeId","EditUserDetails","handleCancelEdit","handleSubmitEdit","address","zipCode","city","phone","email","CheckboxInput","defaultChecked","FormControlLabel","EditUserEmailNotificationSettings","sendNotificationsAsEmail","EditProfile","updateAccountMutate","setEmailSettingsMutate","useGetFullUser","enabled","EditUserCoachSettings","isCoach","EditUser","updateAccountByIdMutate","setEmailSettingsByUserIdMutate","enable","setCoachRoleByUserIdMutate","newData","useGetRequested","useRequestFriendship","receiver","useGetFriends","SearchBar","FindFriends","setQuery","users","useFindNewFriend","requested","friends","requestMutate","u","canRequest","classIds","useClassesByIds","useGetRequests","useDeleteFriendship","friendship","useApproveFriendship","FriendsActivity","feed","friendRequests","approveMutate","FriendsList","handleDelete","NotificationState","NotificationType","FriendsContainer","LinksContainer","Link","Content","Friends","MyClasses","NotificationText","reactStringReplace","Notification","Unread","Seen","Time","Notifications","mutate22","notSeen","notification","ClassTimeUpdated","UserAddedAsParticipantOnClass","UserRemovedAsParticipantOnClass","UserRemovedFromWaitlistOnClass","UserRemovedAsParticipantOnClassBecauseClassCancelled","UserRemovedFromWaitlistOnClassBecauseClassCancelled","UserMovedFromWaitlistToParticipantOnClass","UserAddedToWaitlistOnClass","UserMarkedAsNoShowOnClass","UserUnmarkedAsNoShowOnClass","UserWaitlistPositionChangedOnClass","FriendshipApproved","FriendshipCreated","handleNotificationClick","createdTimestamp","fromNow","CustomCheckbox","NotificationsSettings","settings","saveNotificationsSettingsMutate","settingsData","setSettingsData","stickyHeader","size","align","elm","hover","role","tabIndex","typeText","newArray","MembershipType","UserDetails","getMemberships","membershipId","Membership","membership","showDetails","setShowDetails","showEdit","setShowEdit","useBookingsByUserIdAndMembershipId","adminBookings","adminBookingLoading","useBookingsByMembershipId","pesantbookings","pesantBookingLoading","loadingBookings","classesLoading","startDate","setStartDate","endDate","setEndDate","flexGrow","Free","PunchCard","usedPunches","punches","Rolling","pbs","MembershipTable","memberships","UserMemberships","UserMembershipsById","useGetMembershipsByUserId","cctype","setCctype","PictureContainer","Picture","EditOverlay","isAdmin","canEdit","formData","onUploadProgress","loaded","total","setPictureByIdMutate","setPictureMutate","inputFile","handleUploadClick","click","files","FormData","append","display","Profile","versionfromtxt","setversionfromtxt","onlineversion","setonlineversion","autoupdateEnabled","setautoupdateEnabled","getTime","res","friendUserId","User","useGetUser","publicUser","publicuserLoading","requests","isFriends","userFeed","useGetUserfeed","handleRequest","page","pageSize","ids","useGetUsersById","Users","setPage","setTitle","setIds","useGet","usersLoading","stats","PBS","noshows","usersFromStats","usersFromStatsLoading","noShowUsers","accumulator","concat","pbsUsers","onKeyUp","items","showFirstPage","pages","p","showLastPage","totalPages","totalRecords","totalMemberships","freeMemberships","rollingMemberships","punchCardMemberships","expiresSoon","expired","coaches","url","StyledContent","APIErrorNotification","autoHideDuration","UINotifications","reason","WebView","Filesystem","FilePlugin","Updater","checkforupdate","fetchManifest","Path","paths","fullPath","shift","SNAPSHOT_CACHE","progress","setProgress","totalProgress","setTotalProgress","newVersion","currentVersion","plugun","deploymentManifestFiles","currentDeploymentManifestFiles","getServerBasePath","currentServerPath","getAppInfo","dataDir","dataDirectory","promises","totalSize","filesToDownload","filesToCopy","ok","deploymentFile","URL","copy","from","directory","FilesystemDirectory","External","JSON","stringify","j","promise","download","r","downloadedSize","all","applyUpdate","setServerBasePath","persistServerBasePath","setInterval","useRegisterToUserOnDevice","AppStoreIcon","data-name","LogoHolder","Spacer","Divider","AppIcons","Login","Device","registerMutate","loginMutate","deviceId","uuid","href","LogOut","unRegisterMutate","setTimeout","AccountRegister","registerAccountMutate","PrivacyPolicy","Support","RequestResetPassword","sent","setSent","ResetPassword","parsed","qs","location","search","decodeURIComponent","PublicLayoutElement","PublicLayout","PushNotifications","PushNotificationProvider","registerDeviceMutate","registerRequestedToSendNotificationsMutate","registerTokenMutate","requestedToSendNotifications","requestPermission","granted","GlobalStyle","createGlobalStyle","spacing","palette","Layout","theme","createMuiTheme","main","background","success","typography","fontFamily","fontSize","locale","StrictMode","ThemeProvider","utils","DateFnsUtils","daLocale","Boolean","hostname","Sentry","dsn","integrations","Integrations","BrowserTracing","tracesSampleRate","ReactDOM","fallback","document","getElementById","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.f088f5b8.chunk.js","sourcesContent":["import axios from \"axios\";\nimport { Capacitor } from '@capacitor/core';\nconst instance = axios.create({\n baseURL: Capacitor.getPlatform() === 'web' ? undefined : 'https://crossfit.prokode.dk',\n timeout: 10000,\n params: {}, // do not remove this, its added to add params later in the config\n});\n\ninstance.interceptors.request.use(\n function (config) {\n const token = localStorage.getItem(\"token\");\n if (token) {\n config.headers[\"Authorization\"] = \"Bearer \" + token;\n }\n return config;\n },\n function (error) {\n // Do something with request error\n return Promise.reject(error);\n }\n);\n\nfunction iter(o: any) {\n var ISO_8601 = /(\\d{4}-\\d{2}-\\d{2})T(\\d{2}:\\d{2}:\\d{2}(.\\d{3})?)Z/;\n\n Object.keys(o).forEach(function (k) {\n if (o[k] !== null && typeof o[k] === \"object\") {\n iter(o[k]);\n return;\n }\n if (ISO_8601.test(o[k])) {\n o[k] = new Date(Date.parse(o[k]));\n }\n });\n}\n\ninstance.interceptors.response.use(\n function (response) {\n var data = response.data;\n iter(data);\n return response;\n },\n function (error) {\n // Do something with request error\n return Promise.reject(error);\n }\n);\n\nexport default instance;\n","export const DASHBOARD : string = '/'\nexport const BOOKING : string = '/booking'\nexport const MYCLASSES : string = '/mine-hold'\nexport const CLASS : string = '/hold/:classId'\nexport const PROFILE : string = '/profil'\nexport const EDITPROFILE : string = '/profil/opdater'\nexport const MESSAGES : string = '/beskeder'\nexport const NOTIFICATIONSSETTINGS : string = '/beskeder-indstillinger'\nexport const DEFAULTCLASSES : string = '/standard-hold'\nexport const LOGIN : string = '/log-ind'\nexport const LOGOUT : string = '/log-ud'\nexport const USERS : string = '/medlemmer'\nexport const USER : string = '/medlemmer/:userId'\nexport const EDITUSER : string = '/medlemmer/:userId/opdater'\nexport const REGISTERUSER : string = '/opret-mig'\nexport const PRIVACYPOLICY : string = '/privacy-policy'\nexport const REQUESTPASSWORDRESET : string = '/glemt-kodeord'\nexport const PASSWORDRESET : string = '/nulstil-kodeord'\nexport const SUPPORT : string = '/support'\nexport const CLASSTYPES : string = '/hold-typer'\nexport const CLASSSETUP : string = '/hold-opsætning'\nexport const CLASSSETUPDATE : string = '/hold-opsætning/:year-:month-:day'\nexport const FRIENDS : string = '/venner/vis'\nexport const FINDFRIENDS : string = '/venner/find-nye'\nexport const FRIENDSACTIVITY : string = '/venner'\n","import React, { useEffect, useState } from \"react\";\n\nimport jwt_decode from \"jwt-decode\";\nimport axios from \"./../axios\";\nimport useRefreshToken from \"../hooks/account/useRefreshToken\";\nimport { LOGIN } from \"../routes\";\nimport { useHistory } from \"react-router-dom\";\n\nexport type AuthState = {\n token: string | null;\n user: CurrentUser | null;\n};\n\nexport type ContextAuthState = AuthState & {\n setToken: (token: string | null) => void;\n};\n\nexport type CurrentUser = {\n expires: Date;\n userId: string;\n roles: string[];\n};\n\nexport type AuthProviderProps = {\n children: React.ReactNode;\n};\n\nconst AuthStateContext = React.createContext({\n setToken: () => {},\n token: null,\n user: null,\n});\nexport interface TokenDto {\n foo: string;\n sub: string;\n exp: number;\n iat: number;\n given_name: string;\n family_name: string;\n \"http://schemas.microsoft.com/ws/2008/06/identity/claims/role\": string[];\n}\n\nexport function useAuthState() {\n const context = React.useContext(AuthStateContext);\n if (context === undefined) {\n throw new Error(\"useAuthState must be used within a AuthProvider\");\n }\n\n return context;\n}\n\nconst AuthProvider = ({ children }: AuthProviderProps) => {\n const decodeTokenIntoUser = (token: string | null): CurrentUser | null => {\n if (!token) {\n return null;\n }\n const decodedToken = jwt_decode(token);\n\n const roles =\n decodedToken[\n \"http://schemas.microsoft.com/ws/2008/06/identity/claims/role\"\n ];\n return {\n userId: decodedToken.sub,\n expires: new Date(decodedToken.exp * 1000),\n roles: roles ? roles : [],\n };\n };\n\n const setToken = (token: string | null) => {\n if (token) {\n localStorage.setItem(\"token\", token);\n } else {\n localStorage.removeItem(\"token\");\n }\n\n setUser(decodeTokenIntoUser(token));\n };\n\n const [user, setUser] = useState(\n decodeTokenIntoUser(localStorage.getItem(\"token\"))\n );\n\n const value = {\n token: localStorage.getItem(\"token\"),\n user: user,\n setToken: setToken,\n };\n\n const [refreshTokenMutate] = useRefreshToken();\n const history = useHistory();\n const hook = () => {\n let isRefreshing = false;\n let failedQueue: any[] = [];\n\n axios.interceptors.response.use(\n function (response) {\n return response;\n },\n function (error) {\n const status = error.response ? error.response.status : null;\n const header = error.response\n ? error.response.headers[\"www-authenticate\"]\n : null;\n const originalRequest = error.config;\n if (\n status === 401 &&\n header.indexOf(\"token expired\") > -1 &&\n !originalRequest._retry\n ) {\n \n if (isRefreshing) {\n return new Promise(function (resolve, reject) {\n failedQueue.push({ resolve, reject });\n })\n .then(() => { \n const token = localStorage.getItem(\"token\");\n originalRequest.headers[\"Authorization\"] = \"Bearer \" + token;\n return axios(originalRequest);\n })\n .catch((err) => { \n return Promise.reject(err);\n });\n }\n\n originalRequest._retry = true;\n isRefreshing = true;\n\n refreshTokenMutate().then((result) => {\n if (result?.data) {\n var token = result?.data;\n\n localStorage.setItem(\"token\", token);\n setUser(decodeTokenIntoUser(token));\n isRefreshing = false;\n failedQueue.forEach((prom) => {\n prom.resolve();\n });\n\n failedQueue = [];\n }\n }).catch(() => {\n localStorage.removeItem(\"token\");\n history.push(LOGIN);\n });\n }\n\n return Promise.reject(error);\n }\n );\n };\n useEffect(hook, []);\n\n return (\n \n {children}\n \n );\n};\n\nexport default AuthProvider;\n","import { AxiosResponse } from \"axios\";\nimport { queryCache, useMutation } from \"react-query\";\nimport axios from \"./../../axios\";\n\nexport default function useRefreshToken() {\n return useMutation, unknown, null>(\n () => axios.post(\"/api/account/refreshtoken\"),\n {\n onSuccess: (data, updateData) => {\n \n queryCache.invalidateQueries([\"me\"]);\n },\n }\n );\n}\n","// src/common/providers/APIErrorProvider/index.js\nimport React, { useState, useCallback } from \"react\";\n\nexport type APIError = {\n error: ErrorMessage | null;\n addError: (message: string, status: string) => void;\n removeError: () => void;\n};\n\nexport const APIErrorContext = React.createContext({\n error: null,\n addError: () => {},\n removeError: () => {},\n});\n\nexport interface ErrorMessage {\n message: string;\n status: string;\n}\n\nexport type APIErrorProviderProps = {\n children: React.ReactNode;\n};\n\nexport default function APIErrorProvider({ children }: APIErrorProviderProps) {\n const [error, setError] = useState(null);\n\n const removeError = () => setError(null);\n\n const addError = (message: string, status: string) =>\n setError({ message, status });\n\n const contextValue = {\n error,\n addError: useCallback((message, status) => addError(message, status), []),\n removeError: useCallback(() => removeError(), []),\n };\n\n return (\n \n {children}\n \n );\n}\n","import { useContext } from 'react'\nimport { APIErrorContext } from '../Context/APIErrorProvider'\n\nexport default function useAPIError() {\n const { error, addError, removeError } = useContext(APIErrorContext)\n return { error, addError, removeError }\n}\n","import { useEffect } from \"react\";\nimport { useMutation } from \"react-query\";\nimport useAPIError from \"./useAPIError\";\nimport {\n MutationResultPair,\n MutationFunction,\n MutationConfig,\n} from \"react-query/types/core\";\n\nexport default function useMutationWithError<\n TResult,\n TError = unknown,\n TVariables = undefined,\n TSnapshot = unknown\n>(\n mutationFn: MutationFunction,\n config?: MutationConfig\n): MutationResultPair {\n const { addError } = useAPIError();\n\n const mutation = useMutation(\n mutationFn,\n config\n );\n\n const error = mutation[1].error;\n\n useEffect(() => {\n if (error) {\n addError((error as any).response.data, (error as any).response.status);\n }\n }, [addError, error]);\n\n return mutation;\n}\n","import useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\n\nexport default function useMarkNotificationAsSeen() {\n return useMutationWithError(\n (notificationIds) => {\n notificationIds = [...notificationIds];\n return axios.post(`/api/notification/MarkAsSeen`, {\n notificationIds: notificationIds,\n });\n },\n {\n onSuccess: (data, notificationId) => {\n // Query Invalidations\n // queryCache.invalidateQueries([\"bookingsByClassId\", classId]);\n },\n }\n );\n\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","// src/common/providers/APIErrorProvider/index.js\nimport React, { useState, useCallback, useEffect } from \"react\";\nimport {\n HubConnection,\n HubConnectionBuilder,\n HubConnectionState,\n LogLevel,\n} from \"@microsoft/signalr\";\nimport useMarkNotificationAsSeen from \"../hooks/notification/useMarkNotificationAsSeen\";\nimport { Capacitor, Plugins } from \"@capacitor/core\";\nimport { NotificationTextViewModel } from \"../hooks/notification/notificationModels\";\nimport { useAuthState } from \"./AuthProvider\";\n\nexport type SocketContextType = {\n notificationCount: number;\n notifications: UINotification[];\n\n removeNotification: (id: string, markAsSeen: boolean) => void;\n};\n\nexport const SocketContext = React.createContext({\n notificationCount: 0,\n notifications: [],\n removeNotification: () => { },\n});\n\nexport interface Notification {\n model: NotificationTextViewModel;\n id: string;\n}\n\nexport interface UINotification {\n model: NotificationTextViewModel;\n id: string;\n}\nexport interface Message {\n text: string;\n id: string;\n}\n\nexport type APIErrorProviderProps = {\n children: React.ReactNode;\n};\n\nexport default function SocketProvider({ children }: APIErrorProviderProps) {\n const [connection, setConnection] = useState(null);\n const [connecting, setConnecting] = useState(false);\n const [numNotification, setNumNotification] = useState(0);\n const [notifications, setNotifications] = useState([]);\n const [mutate11] = useMarkNotificationAsSeen();\n const authState = useAuthState();\n\n const userid = authState?.user?.userId;\n\n\n\n useEffect(() => {\n const { App } = Plugins;\n if (connection && Capacitor.getPlatform() !== \"web\") {\n App.addListener('appStateChange', (state) => {\n\n if (!state.isActive) {\n if (connection) {\n connection.stop()\n\n }\n \n }else{\n if (connection) {\n connection.start()\n\n }\n }\n })\n }\n\n }, [connection]);\n\n useEffect(() => {\n if (userid) {\n console.log(\"new connection\");\n const newConnection = new HubConnectionBuilder()\n .withUrl(\n Capacitor.getPlatform() === \"web\"\n ? \"/hubs/chat\"\n : \"https://crossfit.prokode.dk/hubs/chat\",\n {\n accessTokenFactory: () => localStorage.getItem(\"token\") ?? \"\",\n }\n )\n .configureLogging(LogLevel.Information)\n .withAutomaticReconnect()\n .build();\n\n setConnection(newConnection);\n } else {\n setConnection(null);\n }\n }, [userid]);\n\n\n useEffect(() => {\n if (!userid && connection && connecting === true) {\n console.log(\"disconnection because logging out\");\n console.log(connection.state);\n // connection.off()\n connection\n .stop()\n .then(() => {\n console.log(\"ok i am disconnected\");\n })\n .catch(() => {\n console.log(\"unable to disconnect\");\n });\n console.log(connection.state);\n setConnection(null);\n setConnecting(false);\n }\n\n if (\n userid &&\n connection &&\n connection.state === HubConnectionState.Disconnected &&\n connecting === false\n ) {\n setConnecting(true);\n\n connection\n .start()\n .then((result) => {\n console.log(\"connected111111\");\n connection.on(\"NewNotification\", (message: Notification) => {\n var notificationsCpoy = [...notifications];\n notificationsCpoy.push({\n id: message.id,\n model: message.model,\n });\n setNotifications(notificationsCpoy);\n });\n\n connection.on(\n \"UpdateNotificationCount\",\n (notificationCount: number) => {\n setNumNotification(notificationCount);\n }\n );\n\n })\n .catch((e) => console.log(\"Connection failed: \", e));\n }\n }, [notifications, connection, userid, connecting]);\n\n const removeNotification2 = (id: string, markAsSeen: boolean) => {\n var arr = notifications.filter((v, i, a) => v.id !== id);\n console.log(\"removing\");\n if (markAsSeen) {\n mutate11([id]);\n }\n setNotifications(arr);\n };\n\n const contextValue = {\n notificationCount: numNotification,\n notifications: notifications,\n\n removeNotification: useCallback(\n (id: string, markAsSeen: boolean) => removeNotification2(id, markAsSeen),\n // eslint-disable-next-line react-hooks/exhaustive-deps\n []\n )\n };\n\n return (\n \n {children}\n \n );\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { FullAccountViewModel } from \"./accountModels\";\n\n\nconst getMe = async (_: any) => {\n const { data } = await axios.get(`/api/account/me`);\n return data;\n};\n\nexport default function useMe() {\n return useQuery([\"me\"], getMe);\n}\n","import React from \"react\";\n\nexport default function BookingIcon() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\n\nexport default function DashboardIcon() {\n return (\n \n \n \n \n );\n}\n","import React from \"react\";\n\nexport default function MessagesIcon() {\n return (\n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\n\nexport default function ProfileIcon() {\n return (\n \n \n \n \n );\n}\n","import React from \"react\";\n\nexport default function FriendsIcon() {\n return (\n \n \n \n \n \n \n );\n}\n","import React from \"react\";\n\nexport default function SettingsIcon() {\n return (\n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\n\nexport default function LogOutIcon() {\n return (\n \n \n \n \n );\n}\n","import React from \"react\";\n\nexport default function Logo() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import { Button } from \"@material-ui/core\";\nimport React from \"react\";\nimport { NavLink } from \"react-router-dom\";\nimport styled, { css } from \"styled-components\";\n\nimport { useAuthState } from \"../Context/AuthProvider\";\nexport type NavigationItemStyledProps = {\n desktopOnly: boolean;\n mobileOnly: boolean;\n};\nconst Hello = styled.span`\n width: 80%;\n margin: 0 auto;\n\n ${(props) =>\n props.mobileOnly &&\n css`\n @media (min-width: 769px) {\n display: none;\n }\n `}\n ${(props) =>\n props.desktopOnly &&\n css`\n @media (max-width: 769px) {\n display: none;\n }\n `}\n .activeimage {\n display: none;\n }\n .active {\n background: var(--grey3);\n color: var(--red);\n .activeimage {\n display: inline;\n }\n .inactiveimage {\n display: none;\n }\n }\n\n a{\n display: block;\n margin-bottom: 10px;\n line-height: 25px;\n }\n\n @media only screen and (min-width: 769px) {\n a span {\n display: flex;\n align-items: center;\n justify-content: start;\n }\n svg {\n width: 20px;\n margin-right: 10px;\n margin-left: 20px;\n }\n }\n @media only screen and (max-width: 769px) {\n \n * { \n font-size: 9px;\n\n }\n\n a {\n height: 100%;\n }\n a span {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: start;\n }\n svg {\n width: 20px;\n }\n }\n`;\n\nexport type NavigationItemProps = {\n to: string;\n text: string;\n icon: React.ReactNode;\n exact: boolean;\n desktopOnly?: boolean;\n mobileOnly?: boolean;\n requiresRoles?: \"Administrator\" | \"Coach\" | null;\n};\n\nconst NavigationItem = ({\n to,\n text,\n icon,\n exact,\n mobileOnly = false,\n desktopOnly = false,\n requiresRoles = null,\n}: NavigationItemProps) => {\n const userDetails = useAuthState();\n let hasAccess = true;\n if (hasAccess && requiresRoles) {\n if (userDetails?.user?.roles)\n hasAccess = userDetails.user.roles.indexOf(requiresRoles) > -1;\n else hasAccess = false;\n }\n if (!hasAccess) return null;\n return (\n \n {\n localStorage.setItem(\"activeBooking\", \"0\");\n }}\n to={to}\n // onTouchStart={(e:any) => {e.currentTarget.click(); e.preventDefault();}}\n >\n {icon}\n {text}\n \n \n );\n};\n\nexport default NavigationItem;\n","import React, { useContext } from \"react\";\nimport styled from \"styled-components\";\nimport { useAuthState } from \"../Context/AuthProvider\";\nimport { SocketContext } from \"../Context/SocketProvider\";\nimport useMe from \"../hooks/account/useMe\";\nimport BookingIcon from \"../icons/BookingIcon\";\nimport DashboardIcon from \"../icons/DashboardIcon\";\nimport MessagesIcon from \"../icons/MessagesIcon\";\nimport ProfileIcon from \"../icons/ProfileIcon\";\nimport FriendsIcon from \"../icons/FriendsIcon\";\nimport SettingsIcon from \"../icons/SettingsIcon\";\nimport LogOutIcon from \"../icons/LogOutIcon\";\nimport {\n BOOKING,\n CLASSSETUP,\n CLASSTYPES,\n DASHBOARD,\n DEFAULTCLASSES,\n FRIENDSACTIVITY,\n LOGOUT,\n MESSAGES,\n PROFILE,\n USERS,\n} from \"../routes\";\nimport Logo from \"./Logo\";\nimport NavigationItem from \"./NavigationItem\";\n\nconst NavigationHello = styled.div`\n background: white;\n\n grid-area: navigation;\n @media only screen and (min-width: 769px) {\n // max-height: 50px;\n box-shadow: 0px 0px 34px 29px rgba(0, 0, 0, 0.02);\n display: flex;\n flex-direction: column;\n justify-content: space-between;\n padding-bottom: 40px;\n }\n\n @media only screen and (max-width: 769px) {\n display: flex;\n }\n`;\n\nconst LogoContainer = styled.div`\n text-align: center;\n padding-top: 30px;\n padding-left: 20px;\n padding-right: 20px;\n @media only screen and (max-width: 769px) {\n display: none;\n }\n`;\n\nconst UserContainer = styled.div`\n padding-top: 30px;\n padding-bottom: 10px;\n text-align: center;\n @media only screen and (max-width: 769px) {\n display: none;\n }\n`;\nconst UserPicture = styled.img`\n border-radius: 50%;\n width: 130px;\n height: 130px;\n border: 2px solid var(--red);\n`;\nconst UserName = styled.div`\n font-size: 16px;\n text-transform: uppercase;\n padding: 30px;\n`;\n\nconst NavigationTop = styled.div`\n @media only screen and (max-width: 769px) {\n display: flex;\n justify-content: space-between;\n width: 100%;\n }\n`;\n\nconst Navigation = () => {\n const socketContext = useContext(SocketContext);\n const userDetails = useAuthState();\n const { data } = useMe();\n if (userDetails === null || userDetails.token === null) return null;\n\n var messagesCount = socketContext.notificationCount;\n return (\n \n \n \n \n \n {data && (\n \n \n \n {data.firstName} {data.lastName}\n \n \n )}\n }\n exact={true}\n text=\"FORSIDE\"\n to={DASHBOARD}\n />\n }\n exact={false}\n text=\"Book hold\"\n to={BOOKING}\n />\n\n }\n exact={false}\n text=\"Venner\"\n to={FRIENDSACTIVITY}\n />\n\n }\n exact={false}\n text={`Beskeder${messagesCount > 0 ? \" (\" + messagesCount + \")\" : \"\"\n }`}\n to={MESSAGES}\n />\n\n }\n exact={false}\n text=\"Profil\"\n to={PROFILE}\n />\n\n\n\n }\n requiresRoles=\"Administrator\"\n desktopOnly={true}\n exact={false}\n text=\"Holdopsætning\"\n to={CLASSSETUP}\n />\n\n }\n requiresRoles=\"Administrator\"\n desktopOnly={true}\n exact={false}\n text=\"Hold typer\"\n to={CLASSTYPES}\n />\n\n }\n requiresRoles=\"Administrator\"\n desktopOnly={true}\n exact={false}\n text=\"Medlemmer\"\n to={USERS}\n />\n\n }\n requiresRoles=\"Administrator\"\n desktopOnly={true}\n exact={false}\n text=\"Standard hold\"\n to={DEFAULTCLASSES}\n />\n \n\n
\n }\n desktopOnly={true}\n exact={false}\n text=\"Log ud\"\n to={LOGOUT}\n />\n
\n
\n );\n};\n\nexport default Navigation;\n","import styled, { css } from \"styled-components\";\n\nimport { Capacitor } from \"@capacitor/core\";\ntype StyledContentContainerProps = {\n platform?: string;\n backgroundSize?: ContentContainerBackgroundSize;\n};\nexport enum ContentContainerBackgroundSize {\n normal,\n large,\n}\nexport const PageContainer = styled.div`\n background: linear-gradient(\n 180deg,\n rgba(190, 23, 49, 1)\n ${(props) => (props.platform !== \"web\" ? \"35%\" : \"25%\")},\n rgba(73, 100, 73, 0) 0%\n );\n\n ${(props) =>\n props.backgroundSize === ContentContainerBackgroundSize.large &&\n css`\n background: linear-gradient(\n 180deg,\n rgba(190, 23, 49, 1) ${props.platform !== \"web\" ? \"55%\" : \"35%\"},\n rgba(73, 100, 73, 0) 0%\n );\n `}\n\n padding-top: calc(10px + var(--platform-top));\n height: 100%;\n width: 100%;\n\n display: grid;\n grid-template-columns: auto;\n grid-template-rows: 50px minmax(0, 1fr);\n \n grid-template-areas:\n \"pageheader\"\n \"pagecontent\";\n`;\n\nPageContainer.defaultProps = {\n platform: Capacitor.getPlatform(),\n backgroundSize: ContentContainerBackgroundSize.normal,\n};\n\ntype Props = {\n backgroundSize?: ContentContainerBackgroundSize;\n};\n\n// export const ContentContainer: React.FC = ({\n// children,\n// backgroundSize = ContentContainerBackgroundSize.normal,\n// }) => {\n// var platform = Capacitor.getPlatform();\n// return (\n// \n// {children}\n// \n// );\n// };\n","import React from \"react\";\n\nimport { Route, Redirect } from \"react-router-dom\";\nimport { useAuthState } from \"./Context/AuthProvider\";\nimport { LOGIN } from \"./routes\";\n\nexport type AppRouteProps = {\n isPrivate: boolean;\n path: string;\n children: React.ReactNode;\n requiresRoles?: 'Administrator' | 'Coach' | null;\n};\n\nconst AppRoute = ({\n children,\n path,\n isPrivate,\n requiresRoles = null,\n}: AppRouteProps ) => {\n const userDetails = useAuthState();\n // if (\n // userDetails != null &&\n // userDetails.token !== null &&\n // new Date() > userDetails.expires\n // ) {\n // alert(\"expired!\");\n // }\n\n let hasAccess = !(\n isPrivate &&\n (userDetails === null ||\n userDetails.token === null ||\n userDetails.user === null)\n );\n\n if (hasAccess && requiresRoles) {\n if (userDetails?.user?.roles)\n hasAccess = userDetails.user.roles.indexOf(requiresRoles) > -1;\n else hasAccess = false;\n }\n return (\n \n !hasAccess ? : children\n }\n />\n );\n};\n\nexport default AppRoute;\n","import { Button, ButtonProps } from \"@material-ui/core\";\nimport styled from \"styled-components\";\n\nexport enum ThemeColor {\n Red,\n Black,\n Grey1,\n Grey2,\n Grey3,\n Green,\n Blue,\n}\n\n\n\nfunction GetColor(color: ThemeColor) {\n switch (color) {\n case ThemeColor.Red:\n return \"var(--red)\";\n case ThemeColor.Blue:\n return \"var(--blue)\";\n case ThemeColor.Green:\n return \"var(--green)\";\n case ThemeColor.Black:\n return \"var(--black)\";\n case ThemeColor.Grey1:\n return \"var(--grey1)\";\n case ThemeColor.Grey2:\n return \"var(--grey2)\";\n case ThemeColor.Grey3:\n return \"var(--grey3)\";\n }\n}\n\nfunction GetTextColor(color: ThemeColor) {\n switch (color) {\n case ThemeColor.Blue:\n case ThemeColor.Green:\n case ThemeColor.Red:\n case ThemeColor.Black:\n return \"var(--white)\";\n case ThemeColor.Grey1:\n case ThemeColor.Grey2:\n case ThemeColor.Grey3:\n return \"var(--black)\";\n }\n}\n\n\ntype StyledContentContainerProps = ButtonProps & {\n themecolor?: ThemeColor;\n component?: any;\n to?: any;\n};\n\nconst CustomButton = \n styled(Button)`\n \n white-space: nowrap;\n background-color: ${(props) => GetColor(props.themecolor ?? ThemeColor.Grey3)};\n color: ${(props) => GetTextColor(props.themecolor ?? ThemeColor.Grey3)};\n &:hover {\n background-color: ${(props) => GetColor(props.themecolor ?? ThemeColor.Grey3)};\n }\n `\n \n \n\n\n // `\n // background-color: ${(props) => GetColor(props.themecolor)};\n // color: ${(props) => GetTextColor(props.themecolor)};\n // &:hover {\n // background-color: ${(props) => GetColor(props.themecolor)};\n // }\nexport default CustomButton;\n","export interface HighlightModel {\n text: string;\n color: HighlightColor\n\n }\n \n export enum HighlightColor{\n Red,\n Black,\n Grey1,\n Grey2,\n Grey3,\n Green,\n Blue\n }","import React from \"react\";\nimport styled from \"styled-components\";\nimport { HighlightColor, HighlightModel } from \"../hooks/highlightModel\";\n\n// const useStyles = makeStyles({\n// root: {\n// backgroundColor: props => GetColor(props.color),\n// },\n// });\n\nfunction GetColor(color: HighlightColor) {\n switch (color) {\n case HighlightColor.Red:\n return \"var(--red)\";\n case HighlightColor.Blue:\n return \"var(--blue)\";\n case HighlightColor.Green:\n return \"var(--green)\";\n case HighlightColor.Black:\n return \"var(--black)\";\n case HighlightColor.Grey1:\n return \"var(--grey1)\";\n case HighlightColor.Grey2:\n return \"var(--grey2)\";\n case HighlightColor.Grey3:\n return \"var(--grey3)\";\n }\n}\n\nfunction GetTextColor(color: HighlightColor) {\n switch (color) {\n case HighlightColor.Green:\n case HighlightColor.Grey3:\n return \"var(--black)\";\n case HighlightColor.Red:\n case HighlightColor.Black:\n case HighlightColor.Grey1:\n case HighlightColor.Grey2:\n case HighlightColor.Blue:\n return \"var(--white)\";\n }\n}\n\nexport type HighlightChipProps = {\n hcolor: HighlightColor;\n};\n\nexport type DayStyledProps = {\n active: boolean;\n hcolor: HighlightColor;\n};\nconst HighlightChip = styled.span`\n font-weight: 400;\n text-transform: uppercase;\n padding-left: 5px;\n padding-right: 5px;\n border-radius: 3px;\n font-size: 10px;\n margin-right: 10px;\n background-color: ${(props) => GetColor(props.hcolor)};\n color: ${(props) => GetTextColor(props.hcolor)};\n display: inline-block;\n`;\n\nconst Highlight = ({ text, color }: HighlightModel) => (\n {text}\n);\n\nexport default Highlight;\n","import styled from \"styled-components\";\nimport React from \"react\";\nimport { useHistory } from \"react-router-dom\";\n\nexport type PageHeaderProps = React.HTMLAttributes & {\n backButton?: boolean;\n};\n\nexport function PageHeader({\n backButton = false,\n children,\n ...rest\n}: PageHeaderProps) {\n const history = useHistory();\n return (\n \n {backButton && (\n {\n history.goBack();\n }}\n />\n )}\n {children}\n \n );\n}\n\nexport function BigPageHeader({\n backButton = false,\n children,\n ...rest\n}: PageHeaderProps) {\n const history = useHistory();\n return (\n \n {backButton && (\n {\n history.goBack();\n }}\n />\n )}\n {children}\n \n );\n}\nexport const BackButton = styled.div`\n position: absolute;\n cursor: pointer;\n left: 0px;\n top: -4px;\n padding-right: 20px;\n transform: rotate(180deg);\n &:after {\n content: url(\"data:image/svg+xml; utf8, \");\n }\n`;\nexport const StyledPageHeader = styled.h1`\n position: relative;\n grid-area: pageheader;\n color: white;\n font-size: 16px;\n text-align: center;\n text-transform: uppercase;\n`;\n\nexport const StyledBigPageHeader = styled(StyledPageHeader)`\n font-size: 18px;\n`;\n","import { AccountWithHightlightsViewModel } from \"../account/accountModels\";\n\nexport interface BookingViewModel {\n classId: string;\n userId: string;\n membershipId: string;\n state: BookingState;\n position: number;\n occupyActiveBookingSlot: boolean;\n}\n\nexport interface BookingFullViewModel extends BookingViewModel {\n user: AccountWithHightlightsViewModel; \n}\n\nexport enum BookingState {\n Participating,\n WaitingList,\n NoShow\n}\n\n\nexport interface NoShowMonthModel {\n month: string;\n users: NoShowUserModel[];\n}\n\nexport interface NoShowUserModel {\n userId: string;\n count: number;\n}","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { BookingViewModel } from \"./bookingModels\";\n\n\nconst getBookings = async (_: any) => {\n const { data } = await axios.get(`/api/booking`);\n return data;\n};\n\nexport default function useActiveUserBookings() {\n return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"../../axios\"\n\n\nconst getBookings = async (_: any) => {\n const { data } = await axios.get(`/api/booking/GetMaxActiveUserBookings`);\n return data;\n};\n\nexport default function useMaxActiveUserBookings() {\n return useQuery([\"maxActiveBookings\"], getBookings);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"../../axios\"\nimport { ClassViewModel } from \"./classModels\";\n\n\nconst getClasses = async (_: any) => {\n const { data } = await axios.get(`/api/class`);\n return data;\n};\n\nexport default function useClasses() {\n return useQuery([\"classes\"], getClasses);\n}\n","import styled from \"styled-components\";\n\n\nexport const PageContent = styled.div`\ngrid-area: pagecontent;\nheight: 100%;\nwidth: 100%;\noverflow: auto;\n`;\n","import { useQuery } from \"react-query\";\nimport axios from \"../../axios\"\n\n\nconst getClassTypeNameWhichDoesNotOccupyBookingSlot = async (_: any) => {\n const { data } = await axios.get(`/api/booking/GetClassTypeNameWhichDoesNotOccupyBookingSlot`);\n return data;\n};\n\nexport default function useClassTypeNameWhichDoesNotOccupyBookingSlot() {\n return useQuery([\"ClassTypeNameWhichDoesNotOccupyBookingSlot\"], getClassTypeNameWhichDoesNotOccupyBookingSlot);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { ClassTypeInfoViewModel} from \"./classTypeModels\";\n\n\nconst getClasses = async (_: any) => {\n const { data } = await axios.get(`/api/classtype/GetClassTypeInfos`);\n return data;\n};\n\nexport default function useClassTypeInfos() {\n return useQuery([\"classTypeInfos\"], getClasses);\n}\n","import moment from \"moment\";\nimport React, { FunctionComponent, useEffect, useRef, useState } from \"react\";\nimport styled, { css } from \"styled-components\";\nimport { PageContainer } from \"../components/PageContainer\";\nimport CustomButton, { ThemeColor } from \"../components/CustomButton\";\nimport Highlight from \"../components/Highlight\";\nimport { PageHeader } from \"../components/PageHeader\";\nimport { BookingState, BookingViewModel } from \"../hooks/booking/bookingModels\";\nimport useActiveUserBookings from \"../hooks/booking/useActiveUserBookings\";\nimport useBookClass from \"../hooks/booking/useBookClass\";\nimport useRemoveBookingFromClass from \"../hooks/booking/useRemoveBookingFromClass\";\nimport useMaxActiveUserBookings from \"../hooks/booking/useMaxActiveUserBookings\";\nimport { ClassViewModel } from \"../hooks/class/classModels\";\nimport useClasses from \"../hooks/class/useClasses\";\nimport { HighlightColor } from \"../hooks/highlightModel\";\nimport { PageContent } from \"../components/PageContent\";\nimport { AccountViewModel } from \"../hooks/account/accountModels\";\nimport { NavLink } from \"react-router-dom\";\nimport { CLASS, USER } from \"../routes\";\nimport useClassTypeNameWhichDoesNotOccupyBookingSlot from \"../hooks/booking/useClassTypeNameWhichDoesNotOccupyBookingSlot\";\nimport { Snackbar } from \"@material-ui/core\";\nimport Alert from \"@material-ui/lab/Alert/Alert\";\nimport { AlertTitle } from \"@material-ui/lab\";\nimport { InfoOutlined } from \"@material-ui/icons\";\nimport useClassTypeInfos from \"../hooks/classTypes/useClassTypeInfos\";\n\n\n\nexport type BookingListProps = {\n count: number;\n};\nconst BookingList = styled.div`\n display: grid;\n @media only screen and (max-width: 769px) {\n grid-template-columns: repeat(${(props) => props.count}, 100%);\n overflow-x: scroll;\n overflow-y: hidden;\n }\n @media only screen and (min-width: 769px) {\n grid-template-columns: repeat(${(props) => props.count}, 250px);\n overflow-y: auto;\n }\n margin-top: 10px;\n\n scroll-snap-type: x mandatory;\n grid-area: booking;\n`;\n\nconst BookingDayContainer = styled.div`\n // background: white;\n scroll-snap-align: start;\n scroll-snap-stop: always;\n padding: 10px;\n\n padding-top: 0px;\n display: flex;\n flex-direction: column;\n max-height: 100%;\n\n @media only screen and (max-width: 769px) {\n overflow-y: auto;\n }\n @media only screen and (min-width: 769px) {\n padding-right: 0;\n }\n`;\nconst BookingDay = styled.div`\n background: white;\n padding: 20px;\n`;\n\nconst BookingContainer = styled(PageContent)`\n grid-gap: 0;\n display: grid;\n grid-template-columns: auto;\n grid-template-rows: 80px minmax(0, 1fr);\n @media only screen and (min-width: 769px) {\n grid-template-rows: 50px minmax(0, 1fr);\n }\n grid-template-areas:\n \"dayscontainer\"\n \"booking\";\n\n @media only screen and (min-width: 769px) {\n overflow-y: auto;\n }\n`;\n\nexport type DaysContainerProps = {\n count: number;\n};\nconst DaysContainer = styled.div`\n grid-area: dayscontainer;\n // white-space: nowrap;\n display: grid;\n grid-template-columns: repeat(${(props) => props.count}, 55px);\n @media only screen and (min-width: 769px) {\n grid-template-columns: repeat(${(props) => props.count}, 250px);\n }\n @media only screen and (max-width: 769px) {\n overflow-x: scroll;\n overflow-y: hidden;\n }\n\n padding-left: 10px;\n padding-right: 10px;\n`;\n\nexport type DayStyledProps = {\n active: boolean;\n};\nconst Day = styled.div``;\n\nexport type DayBackgroundProps = {\n active: boolean;\n};\nconst DayBackground = styled.div`\n color: white;\n border-radius: 16px;\n padding-top: 10px;\n padding-bottom: 5px;\n // margin: 0px 10px;\n display: inline-flex;\n flex-direction: column;\n // width: 50px;\n height: 100%;\n align-items: center;\n @media only screen and (min-width: 769px) {\n flex-direction: row;\n justify-content: start;\n padding: 0;\n padding-left: 10px;\n }\n\n @media only screen and (max-width: 769px) {\n width: 100%;\n }\n ${(props) =>\n props.active &&\n css`\n background: var(--black);\n `}\n`;\nconst WeekDay = styled.div`\n font-size: 13px;\n text-align: center;\n text-transform: uppercase;\n @media only screen and (min-width: 769px) {\n display: none;\n }\n`;\nconst WeekDayLong = styled.div`\n font-size: 13px;\n text-align: center;\n text-transform: uppercase;\n padding-left: 10px;\n @media only screen and (max-width: 769px) {\n display: none;\n }\n`;\nexport type DayNumberProps = {\n active: boolean;\n};\nconst DayNumber = styled.div`\n font-size: 14px;\n text-align: center;\n font-weight: bold;\n width: 30px;\n height: 30px;\n border-radius: 50%;\n line-height: 30px;\n margin-top: 5px;\n @media only screen and (min-width: 769px) {\n margin: 0;\n }\n ${(props) =>\n props.active &&\n css`\n background: var(--white);\n color: var(--black);\n `}\n`;\nexport type DayHasBookingsProps = {\n active: boolean;\n};\nconst DayHasBookings = styled.div`\n width: 3px;\n height: 3px;\n border-radius: 50%;\n margin-top: 5px;\n @media only screen and (min-width: 769px) {\n margin: 0;\n margin-left: 10px;\n margin-right: 10px;\n }\n ${(props) =>\n props.active &&\n css`\n background-color: var(--white);\n `}\n`;\n\nexport default function Booking() {\n const { data: classes } = useClasses();\n const { data: bookings } = useActiveUserBookings();\n\n const groupBy = (list: T[], getKey: (item: T) => K) =>\n list.reduce((previous, currentItem) => {\n const group = getKey(currentItem);\n if (!previous[group]) previous[group] = [];\n previous[group].push(currentItem);\n return previous;\n }, {} as Record);\n\n var grouped =\n classes &&\n groupBy(classes, (x) => {\n var date = new Date(x.start);\n var myDateString = date.getFullYear() + '' + ('0' + (date.getMonth()+1)).slice(-2) + ('0' + date.getDate()).slice(-2);\n return myDateString;\n });\n\n \n const inputRef = useRef(new Array(100));\n const inputRef2 = useRef(new Array(100));\n const [active, setActiveState] = useState(0);\n const [scrollOnBack, setScrollOnBack] = useState(true);\n useEffect(() => {\n var num = localStorage.getItem(\"activeBooking\");\n if (inputRef.current.length > 0 && num !== \"0\" && scrollOnBack) {\n if (inputRef.current[parseInt(num ?? \"0\")]) {\n setScrollOnBack(false);\n inputRef.current[parseInt(num ?? \"0\")].scrollIntoView();\n localStorage.setItem(\"activeBooking\", \"0\");\n }\n }\n //\n // localStorage.setItem(\"activeBooking\", \"0\");\n }, [scrollOnBack, setScrollOnBack]);\n const setActive = (num: number) => {\n setActiveState(num);\n localStorage.setItem(\"activeBooking\", num.toString());\n };\n var dayCount = grouped ? Object.entries(grouped).length : 0;\n return (\n \n Holdoversigt\n \n \n {grouped &&\n Object.entries(grouped).map(([key, value], index) => {\n var mo = moment(key, \"YYYYMMDD\");\n var hasBooking = false;\n for (var i = 0; i < value.length; i++) {\n const classItem = value[i] as ClassViewModel;\n const booking = bookings?.find(\n (b) => b.classId === classItem.id\n );\n if (booking) {\n hasBooking = true;\n break;\n }\n }\n return (\n {\n inputRef.current[index].scrollIntoView();\n inputRef2.current[index].scrollIntoView({\n behavior: \"smooth\",\n inline: \"center\",\n });\n setActive(index);\n }}\n ref={(el) => (inputRef2.current[index] = el)}\n active={index === active}\n >\n \n {mo.format(\"ddd\")}\n \n {mo.format(\"D\")}\n \n {mo.format(\"dddd\")}\n \n \n \n );\n })}\n \n ) => {\n const newActive = Math.round(\n e.currentTarget.scrollLeft / e.currentTarget.clientWidth\n );\n\n if (newActive !== active) {\n setActive(newActive);\n inputRef2.current[newActive].scrollIntoView({\n behavior: \"smooth\",\n inline: \"center\",\n });\n }\n }}\n >\n {grouped &&\n Object.entries(grouped).map(([key, value], index) => {\n return (\n (inputRef.current[index] = el)}\n >\n \n {value.map((x) => {\n const classItem = x as ClassViewModel;\n const booking = bookings?.find(\n (b) => b.classId === classItem.id\n );\n return (\n x.occupyActiveBookingSlot === true).length : 0}\n />\n );\n })}\n \n \n );\n })}\n \n \n \n );\n}\n\ntype CardProps = {\n booking: BookingViewModel | undefined;\n class: ClassViewModel;\n activeBookings: number;\n showDate?: boolean | null;\n user?: AccountViewModel | null;\n};\n\nconst StyledBookingClass = styled.div`\n display: flex;\n justify-content: space-between;\n\n &:not(:last-child) {\n border-bottom: 1px solid var(--grey3);\n padding-bottom: 10px;\n margin-bottom: 10px;\n }\n`;\n\nconst NameContainer = styled.div`\n font-weight: 600;\n text-transform: uppercase;\n color: var(--black);\n`;\nconst UserPictureContainer = styled.div`\n margin-right: 20px;\n display: flex;\n align-items: center;\n`;\nconst UserPicture = styled.img`\n width: 40px;\n border-radius: 50%;\n`;\nconst UserNameContainer = styled.div``;\nconst ClassContainer = styled.div`\n flex-grow: 1;\n`;\nconst UserName = styled.span`\n font-weight: 600;\n`;\nconst TimeContainer = styled.div`\n text-transform: uppercase;\n // font-weight: 600;\n color: var(--grey1);\n`;\nconst ActionContainer = styled.div``;\nconst ClassName = styled.span`\n margin-right: 10px;\n\n`;\nconst ClassInfo = styled.span`\n \n position: relative;\n margin-right: 16px;\n svg{\n height: 16px;\n margin-left: 5px;\n position: absolute;\n\n path:last-child{\n fill: var(--grey1);;\n }\n }\n`;\n\nconst StyledAlert = styled(Alert)`\n // background: var(--green);\n // color: var(--white);\n`;\nconst StyledSnackbar = styled(Snackbar)`\n top: calc(50px + var(--platform-top));\n`;\nexport const BookingClass: FunctionComponent = ({\n booking,\n activeBookings,\n class: classItem,\n showDate,\n user,\n}) => {\n const [bookMutate] = useBookClass();\n const [removeBookingFromClassMutate] = useRemoveBookingFromClass();\n\n function Book(classId: string) {\n bookMutate(classId);\n }\n function RemoveBooking(classId: string) {\n removeBookingFromClassMutate(classId);\n }\n const { data: maxNumberOfActiveBookings } = useMaxActiveUserBookings();\n const { data: classTypeInfos } = useClassTypeInfos();\n const { data: classTypeNameWhichDoesNotOccupyBookingSlot } = useClassTypeNameWhichDoesNotOccupyBookingSlot();\n\n const removeBookingTime = new Date(classItem.start);\n removeBookingTime.setHours(removeBookingTime.getHours() - 2);\n\n const start = moment(classItem.start);\n const end = moment(classItem.end);\n\n const [show, setShow] = useState(false);\n const handleInfoClick = () => {\n setShow(true)\n }\n\n const handleSubmit = () => {\n setShow(false)\n };\n \n const getInfo = (className:string) => {\n\n var found = classTypeInfos?.find(x => x.classTypes.includes(className));\n if(found){\n return
\n }\n return null;\n }\n const info = getInfo(classItem.classTypeName);\n return (\n \n {user && (\n \n \n \n )}\n \n {user && (\n \n \n \n {user.firstName} {user.lastName}\n \n {\" \"}\n har meldt sig på:\n \n )}\n \n \n \n {classItem.classTypeName}\n \n {info != null && }\n \n \n \n \n {/* Do not show class highlights when booked */}\n {(!booking || classItem.cancelled) &&\n classItem.highlights.map((h) => (\n \n ))}\n {!classItem.cancelled &&\n booking &&\n booking.state === BookingState.WaitingList && (\n \n )}\n {!classItem.cancelled &&\n booking &&\n booking.state === BookingState.Participating && (\n \n )}\n {!classItem.cancelled &&\n booking &&\n booking.state === BookingState.NoShow && (\n \n )}\n \n \n \n {showDate &&\n start.calendar(null, {\n lastDay: \"[I går]\",\n sameDay: \"[I dag]\",\n nextDay: \"[I morgen]\",\n lastWeek: \"[sidste] dddd\",\n nextWeek: \"dddd\",\n sameElse: \"Do MMMM\",\n }) + \" - \"}\n {start.format(\"LT\")} - {end.format(\"LT\")}\n \n \n \n {classItem &&\n !classItem.cancelled &&\n booking &&\n removeBookingTime > new Date() && (\n RemoveBooking(classItem.id)}\n themecolor={ThemeColor.Black}\n >\n afmeld\n \n )}\n {classItem &&\n !classItem.cancelled &&\n !booking &&\n ((maxNumberOfActiveBookings && activeBookings < maxNumberOfActiveBookings) || (classTypeNameWhichDoesNotOccupyBookingSlot && classTypeNameWhichDoesNotOccupyBookingSlot?.indexOf(classItem.classTypeName) > -1)) &&\n classItem.slots > 0 && \n classItem.start > new Date() && (\n Book(classItem.id)}\n themecolor={ThemeColor.Grey3}\n >\n tilmeld\n \n )}\n \n {info != null && \n handleSubmit()} severity=\"info\">\n {classItem.classTypeName}\n {info}\n handleSubmit()} themecolor={ThemeColor.Green}>OK\n \n }\n \n );\n};\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\nimport { BookingViewModel } from \"./bookingModels\";\n\nexport default function useBookClass() {\n return useMutationWithError(\n (classId: string) => axios.post(`/api/booking/add?classId=${classId}`),\n {\n onSuccess: (data, classId) => {\n // Query Invalidations\n queryCache.invalidateQueries(\"activeUserBookings\");\n queryCache.invalidateQueries([\"classes\", classId]);\n queryCache.invalidateQueries([\"bookingsByClassId\", classId]);\n }\n }\n );\n // return useQuery([\"activeUserBookings\"], getBookings);\n}","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\nimport { BookingViewModel } from \"./bookingModels\";\n\nexport default function useRemoveBookingFromClass() {\n return useMutationWithError(\n (classId: string) => axios.delete(`/api/booking?classId=${classId}`),\n {\n onSuccess: (data, classId) => {\n // Query Invalidations\n queryCache.invalidateQueries(\"activeUserBookings\");\n queryCache.invalidateQueries(\"bookingsByMembershipId\");\n queryCache.invalidateQueries([\"bookingsByClassId\", classId]);\n queryCache.invalidateQueries([\"classes\", classId]);\n },\n }\n );\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { AccountViewModel } from \"./accountModels\";\n\nconst getGet = async (_: any, query: string) => {\n const { data } = await axios.get(`/api/account/autoComplete`, { params: { query } });\n return data;\n};\n\nexport default function useAutoComplete(query: string) {\n return useQuery([\"account-autoComplete\", query], getGet);\n}\n","import React from \"react\";\nimport TextField from \"@material-ui/core/TextField\";\nimport Autocomplete from \"@material-ui/lab/Autocomplete\";\nimport Grid from \"@material-ui/core/Grid\";\nimport { AccountViewModel } from \"../hooks/account/accountModels\";\nimport useAutoComplete from \"../hooks/account/useAutoComplete\";\n\ninterface AutoCompleteProps {\n onAccountSelected: (account: AccountViewModel | null) => void;\n }\n\nexport default function AccountAutoComplete(props: AutoCompleteProps) {\n\n const [value, setValue] = React.useState(null);\n const [inputValue, setInputValue] = React.useState(\"\");\n const [options, setOptions] = React.useState([]);\n const { data: accounts } = useAutoComplete(inputValue);\n\n React.useEffect(() => {\n props.onAccountSelected(value);\n }, [value, props]);\n\n React.useEffect(() => {\n let active = true;\n\n if (inputValue === \"\") {\n setOptions(value ? [value] : []);\n return undefined;\n }\n\n if (active) {\n let newOptions = [] as AccountViewModel[];\n\n if (value) {\n newOptions = [value];\n }\n\n if (accounts) {\n newOptions = [...newOptions, ...accounts];\n }\n\n setOptions(newOptions);\n }\n\n return () => {\n active = false;\n };\n }, [value, inputValue, accounts]);\n\n return (\n \n typeof option === \"string\" ? option : option.firstName + \" \" + option.lastName\n }\n filterOptions={(x) => x}\n options={options}\n autoComplete\n includeInputInList\n filterSelectedOptions\n value={value}\n onChange={(event: any, newValue: AccountViewModel | null) => {\n setOptions(newValue ? [newValue, ...options] : options);\n setValue(newValue);\n }}\n onInputChange={(event, newInputValue) => {\n setInputValue(newInputValue);\n }}\n renderInput={(params) => (\n \n )}\n renderOption={(option) => {\n return (\n \n \n {option.firstName} {option.lastName}\n \n \n );\n }}\n />\n );\n}\n","import styled from \"styled-components\";\n\nexport const Box = styled.div`\n background: white;\n margin: 10px;\n margin-top: 0px;\n padding: 20px;\n`;\nexport const BoxHeader = styled.h2`\n color: white;\n font-size: 12px;\n color: var(--black);\n text-transform: uppercase;\n padding-top: 0px;\n margin-top: 0px;\n`;\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { BookingFullViewModel } from \"./bookingModels\";\n\n\nconst getBookings = async (_: any, classId: string) => {\n const { data } = await axios.get(`/api/booking/GetByClassId/${classId}`);\n return data;\n};\n\nexport default function useBookingsByClassId(classId: string) {\n return useQuery([\"bookingsByClassId\", classId], getBookings);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { BookingFullViewModel } from \"./bookingModels\";\n\n\nconst getBookings = async (_: any, classId: string) => {\n const { data } = await axios.get(`/api/booking/GetFriendsByClassId?classId=${classId}`);\n return data;\n};\n\nexport default function useFriendshipBookingsByClassId(classId: string) {\n return useQuery([\"friendshipbookingsByClassId\", classId], getBookings);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"../../axios\"\nimport { ClassViewModel } from \"./classModels\";\n\n\nconst getClass = async (_: any,classId: string) => {\n const { data } = await axios.get(`/api/class/${classId}`);\n return data;\n};\n\nexport default function useClass(classId: string) {\n return useQuery([\"classes\", classId], getClass);\n}\n","import React from \"react\";\nimport { AccountWithHightlightsViewModel } from \"../hooks/account/accountModels\";\n\nimport styled from \"styled-components\";\nimport { NavLink } from \"react-router-dom\";\nimport { USER } from \"../routes\";\nimport CustomButton from \"./CustomButton\";\nimport Highlight from \"./Highlight\";\nconst UserPictureContainer = styled.div`\n margin-right: 20px;\n display: flex;\n align-items: center;\n`;\nconst UserPicture = styled.img`\n width: 40px;\n border-radius: 50%;\n`;\n\nconst Hello = styled.div`\n display: flex;\n justify-content: space-between;\n\n &:not(:last-child) {\n border-bottom: 1px solid var(--grey3);\n padding-bottom: 10px;\n margin-bottom: 10px;\n }\n`;\nconst ClassContainer = styled.div`\n float: left;\n margin-bottom: 10px;\n`;\nconst NameAndActionContainer = styled.div`\n flex-grow: 1;\n`;\nconst ButtonContainer = styled.div`\n display: inline-flex;\n float: right;\n align-items: center;\n & ${CustomButton} {\n &:not(:last-child) {\n margin-right: 10px;\n }\n }\n`;\nconst Position = styled.div`\n display: flex;\n align-items: center;\n font-weight: 600;\n padding-right: 5px;\n`;\nconst HightLightContainer = styled.span``;\nconst NameContainer = styled.span`\n padding-right: 5px;\n`;\nexport type UserDetailsProps = {\n user: AccountWithHightlightsViewModel;\n position?: number | null;\n children?: React.ReactNode;\n};\nexport default function UserLine({\n position,\n user,\n children,\n}: UserDetailsProps) {\n return (\n \n {position && #{position}}\n \n \n \n \n \n \n \n {user.firstName} {user.lastName}\n \n \n {user.highlights && (\n \n {user.highlights.map((h) => {\n return ;\n })}\n \n )}\n \n {children}\n \n \n );\n}\n","import React from \"react\";\n\nimport styled from \"styled-components\";\nimport CustomButton from \"./CustomButton\";\nexport type ButtonAlignerProps = {\n children?: React.ReactNode;\n};\nconst ClassContainer = styled.div`\n display: flex;\n flex-direction: column ;\n align-items: center;\n\n & ${CustomButton} {\n &:not(:last-child) {\n \n margin-bottom: 10px;\n } \n }\n`;\nexport default function ButtonAligner({\n \n children,\n}: ButtonAlignerProps) {\n return (\n \n {children}\n \n );\n}\n","import { useMutation } from \"react-query\";\nimport {\n MutationResultPair,\n MutationFunction,\n MutationConfig,\n} from \"react-query/types/core\";\n\nexport default function useMutationForForms<\n TResult,\n TError = unknown,\n TVariables = undefined,\n TSnapshot = unknown\n>(\n mutationFn: MutationFunction,\n config?: MutationConfig\n): MutationResultPair {\n\n const mutation = useMutation(\n mutationFn,\n {throwOnError: true, ...config}\n );\n\n\n return mutation;\n}\n","import React from \"react\";\n\nimport styled, { css } from \"styled-components\";\nimport { OutlinedInputProps, TextField, withStyles } from \"@material-ui/core\";\nimport { Controller } from \"react-hook-form\";\n\nexport type TextInputProps = {\n control: any;\n label: string;\n name: string;\n type?: string;\n defaultValue?: string;\n fullWidth?: boolean;\n inputProps?: OutlinedInputProps[\"inputProps\"];\n};\nexport type ExtraProps = {\n fullWidth: boolean;\n};\nconst InputContainer = styled.div`\n margin-bottom: 10px;\n ${(props) =>\n props.fullWidth &&\n css`\n > div {\n width: 100%;\n }\n `}\n`;\n\nexport const CssTextField = withStyles({\n root: {\n \"& label.Mui-focused\": {\n color: \"var(--red)\",\n },\n \"& .MuiInput-underline:after\": {\n borderBottomColor: \"var(--red)\",\n },\n \"& .MuiOutlinedInput-root\": {\n // '& fieldset': {\n // borderColor: 'red',\n // },\n // '&:hover fieldset': {\n // borderColor: 'yellow',\n // },\n \"&.Mui-focused fieldset\": {\n borderColor: \"var(--red)\",\n },\n },\n },\n})(TextField);\n\nexport default function TextInput({\n control,\n label,\n name,\n inputProps,\n type = \"text\",\n defaultValue = \"\",\n fullWidth = false,\n}: TextInputProps) {\n return (\n \n \n }\n />\n \n );\n}\n","import { ErrorMessage } from \"@hookform/error-message\";\nimport React from \"react\";\nimport { FieldErrors } from \"react-hook-form\";\n\nexport type ErrorSummaryProps = {\n errors: FieldErrors;\n};\nexport default function ErrorSummary({ errors }: ErrorSummaryProps) {\n if (Object.keys(errors).length === 0) {\n return null;\n }\n return (\n
\n {Object.keys(errors).map((fieldName) => (\n \n ))}\n
\n );\n}\n\nexport function addServerErrors(\n errors: { [P in keyof T]?: string[] },\n setError: (\n fieldName: keyof T,\n error: { type: string; message: string }\n ) => void\n) {\n return Object.keys(errors).forEach((key) => {\n setError(key as keyof T, {\n type: \"server\",\n message: errors[key as keyof T]!.join(\". \"),\n });\n });\n}\n","import React from \"react\";\n\nimport styled, { css } from \"styled-components\";\nimport { InputLabel, Select, SelectProps, withStyles } from \"@material-ui/core\";\nimport { Controller } from \"react-hook-form\";\nimport { SelectInputProps } from \"@material-ui/core/Select/SelectInput\";\n\nexport type TextInputProps = {\n control: any;\n label: string;\n name: string;\n type?: string;\n defaultValue?: unknown;\n fullWidth?: boolean;\n value?: unknown;\n multiple?: boolean;\n children: React.ReactNode;\n renderValue?: (value: SelectProps[\"value\"]) => React.ReactNode;\n onChange?: SelectInputProps[\"onChange\"];\n};\n\nexport type ExtraProps = {\n fullWidth: boolean;\n};\nconst InputContainer = styled.div`\n margin-bottom: 10px;\n ${(props) =>\n props.fullWidth &&\n css`\n > div {\n width: 100%;\n }\n `}\n`;\n\nexport const CssSelectField = withStyles({\n root: {\n \"& label.Mui-focused\": {\n color: \"var(--red)\",\n },\n \"& .MuiInput-underline::after\": {\n borderBottomColor: \"var(--red)\",\n },\n \"& .MuiInput-underline::before\": {\n borderBottomColor: \"var(--red)\",\n },\n \"& .MuiOutlinedInput-root\": {\n // '& fieldset': {\n // borderColor: 'red',\n // },\n // '&:hover fieldset': {\n // borderColor: 'yellow',\n // },\n \"&.Mui-focused fieldset\": {\n borderColor: \"var(--red)\",\n },\n },\n },\n})(Select);\n\nexport default function Dropdown({\n control,\n label,\n name,\n children,\n renderValue,\n onChange,\n value,\n defaultValue,\n fullWidth = false,\n multiple = false,\n}: TextInputProps) {\n \n const MySelect = () => {\n return (\n \n {children}\n \n );\n };\n\n return (\n \n <>\n {label}\n \n \n \n );\n}\n","import {\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n MenuItem,\n} from \"@material-ui/core\";\nimport React from \"react\";\nimport { useParams } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport AccountAutoComplete from \"../components/AccountAutoComplete\";\nimport { Box, BoxHeader } from \"../components/Box\";\nimport { PageContainer } from \"../components/PageContainer\";\nimport { AccountViewModel } from \"../hooks/account/accountModels\";\nimport { BookingState } from \"../hooks/booking/bookingModels\";\nimport useBookClassByUserId from \"../hooks/booking/useBookClassByUserId\";\nimport useBookingsByClassId from \"../hooks/booking/useBookingsByClassId\";\nimport useFriendshipBookingsByClassId from \"../hooks/booking/useFriendshipBookingsByClassId\";\nimport useMarkBookingAsNoShowByUserId from \"../hooks/booking/useMarkBookingAsNoShowByUserId\";\nimport useMoveUserFromWaitlistToParticipant from \"../hooks/booking/useMoveUserFromWaitlistToParticipant\";\nimport useRemoveBookingFromClassByUserId from \"../hooks/booking/useRemoveBookingFromClassByUserId\";\nimport useUnmarkBookingAsNoShowByUserId from \"../hooks/booking/useUnmarkBookingAsNoShowByUserId\";\nimport {\n ClassMessageWriteModel,\n ClassViewModel,\n} from \"../hooks/class/classModels\";\nimport useClass from \"../hooks/class/useClass\";\n\nimport useActiveUserBookings from \"../hooks/booking/useActiveUserBookings\";\nimport { PageHeader } from \"../components/PageHeader\";\nimport { PageContent } from \"../components/PageContent\";\nimport CustomButton, { ThemeColor } from \"../components/CustomButton\";\nimport UserLine from \"../components/UserLine\";\nimport { useAuthState } from \"../Context/AuthProvider\";\nimport { BookingClass } from \"./Booking\";\nimport ButtonAligner from \"../components/ButtonAligner\";\nimport { useForm } from \"react-hook-form\";\nimport useMessageClass from \"../hooks/class/useMessageClass\";\nimport TextInput from \"../components/form/TextInput\";\nimport ErrorSummary, { addServerErrors } from \"../components/ErrorSummary\";\nimport { AxiosError } from \"axios\";\nimport Dropdown from \"../components/form/Dropdown\";\nimport useRebuildBookingProjectionsByClassId from \"../hooks/booking/useRebuildBookingProjectionsByClassId\";\ninterface ClassParama {\n classId: string;\n}\n\nexport default function Class() {\n let { classId } = useParams();\n const { data: _class, isLoading: classLoading } = useClass(classId);\n\n const userDetails = useAuthState();\n\n const { data: bookings } = useActiveUserBookings();\n const booking = bookings?.find((b) => b.classId === classId);\n return (\n \n HOLD INFO\n \n {classLoading && Henter info..}\n\n {_class && (\n \n
\n x.occupyActiveBookingSlot === true)\n .length\n : 0\n }\n />\n
\n {userDetails.user && userDetails.user.roles.indexOf(\"Coach\") > -1 && (\n
\n Pladser: {_class.bookings}/{_class.slots}\n
\n )}\n
\n )}\n\n {userDetails.user && userDetails.user.roles.indexOf(\"Coach\") > -1 && (\n \n )}\n\n {userDetails.user && userDetails.user.roles.indexOf(\"Coach\") === -1 && (\n \n )}\n
\n
\n );\n}\ninterface BookingsProps {\n classItem: ClassViewModel | undefined;\n}\n\nexport const ProfilePicture = styled.img`\n border-radius: 50%;\n width: 35px;\n`;\n\nfunction Bookings(props: BookingsProps) {\n let { classId } = useParams();\n const { data: bookings } = useBookingsByClassId(classId);\n const [useRemoveBookingFromClassByUserIdMutate] =\n useRemoveBookingFromClassByUserId();\n\n const [useMarkBookingAsNoShowByUserIdMutate] =\n useMarkBookingAsNoShowByUserId();\n\n const [useRebuildBookingProjectionsByClassIdMutate] =\n useRebuildBookingProjectionsByClassId();\n\n const [useUnmarkBookingAsNoShowByUserIdMutate] =\n useUnmarkBookingAsNoShowByUserId();\n const [useMoveUserFromWaitlistToParticipantMutate] =\n useMoveUserFromWaitlistToParticipant();\n\n function RemoveBooking(classId: string, userId: string) {\n useRemoveBookingFromClassByUserIdMutate({\n classId: classId,\n userId: userId,\n });\n }\n\n function RebuildBookingProjections(classId: string) {\n useRebuildBookingProjectionsByClassIdMutate({\n classId: classId,\n }).then(() => {\n alert(\"Rebuilt\");\n })\n }\n\n function MarkAsNoShow(classId: string, userId: string) {\n useMarkBookingAsNoShowByUserIdMutate({\n classId: classId,\n userId: userId,\n });\n }\n\n function UnmarkAsNoShow(classId: string, userId: string) {\n useUnmarkBookingAsNoShowByUserIdMutate({\n classId: classId,\n userId: userId,\n });\n }\n\n function MoveUserFromWaitlistToParticipant(classId: string, userId: string) {\n useMoveUserFromWaitlistToParticipantMutate({\n classId: classId,\n userId: userId,\n });\n }\n\n const [open, setOpen] = React.useState(false);\n const [openMessage, setOpenMessage] = React.useState(false);\n const handleClickOpenMessage = () => {\n setOpenMessage(true);\n };\n\n const handleCloseMessage = () => {\n setOpenMessage(false);\n };\n const handleClickOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const [useBookClassByUserIdMutate] = useBookClassByUserId();\n\n function BookClassByUserId(classId: string, userId: string) {\n useBookClassByUserIdMutate({ classId: classId, userId: userId });\n }\n const [accountToAdd, setAccountToAdd] =\n React.useState(null);\n\n const filtered = bookings\n ? bookings.filter(\n (x) =>\n x.state === BookingState.Participating ||\n x.state === BookingState.NoShow\n )\n : undefined;\n const waitlist = bookings\n ? bookings.filter((x) => x.state === BookingState.WaitingList)\n : undefined;\n var bookingEnabled =\n props.classItem === undefined || !props.classItem.cancelled;\n\n var classStarted =\n props.classItem !== undefined && props.classItem.start > new Date();\n const {\n handleSubmit: handleMessageSubmit,\n setError,\n errors,\n control,\n } = useForm();\n\n const [messageMutate] = useMessageClass();\n const onSubmit = (data: ClassMessageWriteModel) => {\n data.classId = classId;\n messageMutate(data)\n .then(() => {\n setOpenMessage(false);\n alert(\"Besked sendt\");\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n };\n const userDetails = useAuthState();\n return (\n <>\n {bookings && (\n \n Deltagere ({filtered && filtered.length})\n {/* {isLoading &&
Loader
} */}\n\n
\n {filtered &&\n filtered.map((x) => {\n return (\n \n {!classStarted &&\n bookingEnabled &&\n x.state === BookingState.Participating && (\n {\n if (\n window.confirm(\n \"Marker \" +\n x.user.firstName +\n \" som ikke mødt op?\"\n )\n )\n MarkAsNoShow(classId, x.userId);\n }}\n themecolor={ThemeColor.Grey2}\n >\n Mødte ikke op\n \n )}\n {bookingEnabled && x.state === BookingState.NoShow && (\n UnmarkAsNoShow(classId, x.userId)}\n >\n Mødte op alligevel\n \n )}\n {bookingEnabled && (\n {\n if (\n window.confirm(\n \"Fjern \" + x.user.firstName + \" fra hold?\"\n )\n )\n RemoveBooking(classId, x.userId);\n }}\n themecolor={ThemeColor.Black}\n >\n Afmeld\n \n )}\n \n );\n })}\n
\n
\n
\n {waitlist && waitlist.length > 0 && (\n <>\n Venteliste\n
\n {waitlist &&\n waitlist.map((x) => {\n return (\n \n {\n if (\n window.confirm(\n \"Flyt \" +\n x.user.firstName +\n \" fra venteliste til deltager?\"\n )\n )\n MoveUserFromWaitlistToParticipant(\n classId,\n x.userId\n );\n }}\n themecolor={ThemeColor.Grey2}\n >\n Flyt til deltagere\n \n {\n if (\n window.confirm(\n \"Fjern \" + x.user.firstName + \" fra hold?\"\n )\n )\n RemoveBooking(classId, x.userId);\n }}\n themecolor={ThemeColor.Black}\n >\n Afmeld\n \n \n );\n })}\n
\n \n )}\n\n
\n \n {bookingEnabled && (\n \n Tilføj deltager til hold\n \n )}\n \n Send besked til deltagere\n \n {userDetails.user &&\n userDetails.user.roles.indexOf(\"Administrator\") > -1 && (\n {\n RebuildBookingProjections(classId);\n }}\n >\n Rebuild booking projections\n \n )}\n \n \n Tilføj deltager\n \n \n Tilføj en deltager. Det er ikke muligt at tilføje deltager,\n hvis de ikke har aktivt medlemskab.\n \n {\n setAccountToAdd(account);\n }}\n />\n \n \n Annuller\n {\n setOpen(false);\n if (accountToAdd) {\n BookClassByUserId(classId, accountToAdd.id);\n }\n }}\n disabled={accountToAdd === null}\n >\n Tilføj medlem på hold\n \n \n \n\n \n \n Send besked til deltagere\n \n
\n \n \n \n Alle\n \n \n Kun deltagere\n \n \n Kun veneliste\n \n \n \n\n \n \n \n \n Annuller\n \n \n Send besked\n \n \n
\n \n
\n
\n )}\n \n );\n}\n\nfunction FriendshipBookings(props: BookingsProps) {\n let { classId } = useParams();\n const { data: bookings } = useFriendshipBookingsByClassId(classId);\n\n const filtered = bookings\n ? bookings.filter(\n (x) =>\n x.state === BookingState.Participating ||\n x.state === BookingState.NoShow\n )\n : undefined;\n const waitlist = bookings\n ? bookings.filter((x) => x.state === BookingState.WaitingList)\n : undefined;\n\n return (\n <>\n {bookings && (\n \n Venner som deltager\n {filtered && filtered.length === 0 && (\n
Ingen af dine venner deltager på holdet
\n )}\n
\n {filtered &&\n filtered.map((x) => {\n return ;\n })}\n
\n
\n
\n {waitlist && waitlist.length > 0 && (\n <>\n Venner på venteliste\n
\n {waitlist &&\n waitlist.map((x) => {\n return ;\n })}\n
\n \n )}\n
\n )}\n \n );\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\n\nexport interface RemoveBookingFromClassByUserIdPayload {\n classId: string;\n userId: string;\n}\nexport default function useRemoveBookingFromClassByUserId() {\n return useMutationWithError(\n ({ classId, userId }) =>\n axios.delete(\n `/api/booking/DeleteByUserId?classId=${classId}&userId=${userId}`\n ),\n {\n onSuccess: (data, { classId }) => {\n // Query Invalidations\n queryCache.invalidateQueries(\"activeUserBookings\");\n queryCache.invalidateQueries([\"bookingsByClassId\", classId]);\n queryCache.invalidateQueries([\"classes\", classId]);\n },\n }\n );\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\n\nexport interface useMarkBookingAsNoShowByUserIdPayload {\n classId: string;\n userId: string;\n}\nexport default function useMarkBookingAsNoShowByUserId() {\n return useMutationWithError(\n ({ classId, userId }) =>\n axios.post(\n `/api/booking/MarkAsNoShow?classId=${classId}&userId=${userId}`\n ),\n {\n onSuccess: (data, { classId }) => {\n // Query Invalidations\n queryCache.invalidateQueries([\"bookingsByClassId\", classId]); \n queryCache.invalidateQueries(\"activeUserBookings\");\n },\n }\n );\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\nexport interface RebuildBookingProjectionsByClassIdPayload {\n classId: string;\n}\n\nexport default function useRebuildBookingProjectionsByClassId() {\n return useMutationWithError(\n ({ classId }) => axios.get(`/api/rebuild/rebuildbookings?classId=${classId}`),\n {\n onSuccess: (data, { classId }) => {\n // Query Invalidations\n queryCache.invalidateQueries([\"bookingsByClassId\", classId]);\n queryCache.invalidateQueries([\"classes\", classId]);\n },\n }\n );\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\n\nexport interface useUnmarkBookingAsNoShowByUserIdPayload {\n classId: string;\n userId: string;\n}\nexport default function useUnmarkBookingAsNoShowByUserId() {\n return useMutationWithError(\n ({ classId, userId }) =>\n axios.post(\n `/api/booking/UnmarkAsNoShow?classId=${classId}&userId=${userId}`\n ),\n {\n onSuccess: (data, { classId }) => {\n // Query Invalidations\n queryCache.invalidateQueries(\"activeUserBookings\");\n queryCache.invalidateQueries([\"bookingsByClassId\", classId]);\n },\n }\n );\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\n\nexport interface MoveUserFromWaitlistToParticipantPayload {\n classId: string;\n userId: string;\n}\nexport default function useMoveUserFromWaitlistToParticipant() {\n return useMutationWithError<\n boolean,\n unknown,\n MoveUserFromWaitlistToParticipantPayload\n >(\n ({ classId, userId }) =>\n axios.post(\n `/api/booking/MoveUserFromWaitlistToParticipant?classId=${classId}&userId=${userId}`\n ),\n {\n onSuccess: (data, { classId }) => {\n // Query Invalidations\n \n queryCache.invalidateQueries(\"activeUserBookings\");\n queryCache.invalidateQueries([\"bookingsByClassId\", classId]);\n },\n }\n );\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\nimport { BookingViewModel } from \"./bookingModels\";\nexport interface BookClassByUserIdPayload {\n classId: string;\n userId: string;\n}\n\nexport default function useBookClassByUserId() {\n return useMutationWithError(\n ({ classId, userId }) => axios.post(`/api/booking/AddByUserId?classId=${classId}&userId=${userId}`),\n {\n onSuccess: (data, { classId }) => {\n // Query Invalidations\n queryCache.invalidateQueries([\"bookingsByClassId\", classId]);\n queryCache.invalidateQueries([\"classes\", classId]);\n },\n }\n );\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import { AxiosResponse } from \"axios\";\nimport useMutationForForms from \"../useMutationForForms\";\nimport axios from \"./../../axios\";\nimport { ClassMessageWriteModel } from \"./classModels\";\n\nexport default function useMessageClass() {\n return useMutationForForms, unknown, ClassMessageWriteModel>(\n (data: ClassMessageWriteModel) => axios.post(`/api/class/message`, data),\n {\n onSuccess: (data, createData) => {},\n }\n );\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { ClassTypeViewModel } from \"./classTypeModels\";\n\n\nconst getClasses = async (_: any) => {\n const { data } = await axios.get(`/api/classtype`);\n return data;\n};\n\nexport default function useClassTypes() {\n return useQuery([\"classTypes\"], getClasses);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"../../axios\"\nimport { ClassViewModel } from \"./classModels\";\n\nconst getClasses = async (_: any, date:string) => {\n const { data } = await axios.get(`/api/class/GetByDate?date=${date}`);\n return data;\n};\n\nexport default function useGetClassesByDate(year: number, month: number, day: number) {\n \n return useQuery([\"classes\", `${year}-${month}-${day}`], getClasses);\n}\n","import { AxiosError } from \"axios\";\nimport React, { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport {\n Paper,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n} from \"@material-ui/core\";\nimport {\n Link,\n Route,\n Switch,\n useHistory,\n useParams,\n useRouteMatch,\n} from \"react-router-dom\";\nimport { addServerErrors } from \"../components/ErrorSummary\";\nimport useClassTypes from \"../hooks/classTypes/useClassTypes\";\n\nimport { DatePicker } from \"@material-ui/pickers\";\nimport useGetClassesByDate from \"../hooks/class/useGetClassesByDate\";\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n MenuItem,\n} from \"@material-ui/core\";\nimport { PageHeader } from \"../components/PageHeader\";\nimport { PageContent } from \"../components/PageContent\";\nimport useFillClasses from \"../hooks/class/useFillClasses\";\nimport { CLASS, CLASSSETUPDATE } from \"../routes\";\nimport {\n ClassCreateWriteModel,\n ClassUpdateSlotsWriteModel,\n ClassUpdateTimeWriteModel,\n ClassViewModel,\n} from \"../hooks/class/classModels\";\nimport useCreateClass from \"../hooks/class/useCreateClass\";\nimport useCancelClass from \"../hooks/class/useCancelClass\";\nimport useDeleteClass from \"../hooks/class/useDeleteClass\";\nimport moment from \"moment\";\nimport CustomButton, { ThemeColor } from \"../components/CustomButton\";\nimport Highlight from \"../components/Highlight\";\nimport useUpdateClassTime from \"../hooks/class/useUpdateClassTime\";\nimport useUpdateClassSlots from \"../hooks/class/useUpdateClassSlots\";\nimport TextInput from \"../components/form/TextInput\";\nimport Dropdown from \"../components/form/Dropdown\";\nimport { PageContainer } from \"../components/PageContainer\";\n\nimport { Box, BoxHeader } from \"../components/Box\";\nexport default function ClassSetup() {\n const classTypes = useClassTypes();\n\n let history = useHistory();\n const [selectedDate, setSelectedDate] = useState(new Date());\n\n let match = useRouteMatch();\n const handleDateChange = (date: Date | null) => {\n setSelectedDate(date);\n history.push(\n `${match.path}/${date?.getFullYear()}-${\n (date?.getMonth() ?? 0) + 1\n }-${date?.getDate()}`\n );\n };\n\n return (\n \n Holdopsætning\n \n \n {classTypes.isLoading &&
Loader
}\n\n \n \n \n
\n
\n \n
\n \n
\n
\n
\n
\n );\n}\n\ninterface ParamTypes {\n year: string;\n month: string;\n day: string;\n}\n\nfunction ClassSetupByDate() {\n let { year, month, day } = useParams();\n const convertedYear = Number(year);\n const convertedMonth = Number(month);\n const convertedDay = Number(day);\n const { data: classes, isLoading } = useGetClassesByDate(\n convertedYear,\n convertedMonth,\n convertedDay\n );\n\n const [useFillClassesMutate] = useFillClasses();\n function FillClasses() {\n useFillClassesMutate({\n year: year,\n month: month,\n day: day,\n });\n }\n\n const [open, setOpen] = React.useState(false);\n\n const handleClickOpen = () => {\n setOpen(true);\n };\n\n const handleClose = () => {\n setOpen(false);\n };\n\n const classTypes = useClassTypes();\n\n const {\n handleSubmit,\n setError,\n setValue,\n control,\n } = useForm();\n\n const [createClassMutate] = useCreateClass();\n const onSubmit = (data: ClassCreateWriteModel) => {\n data.start = new Date(\n convertedYear,\n convertedMonth - 1,\n convertedDay,\n Number(data.start.toString().split(\":\")[0]),\n Number(data.start.toString().split(\":\")[1])\n );\n data.end = new Date(\n convertedYear,\n convertedMonth - 1,\n convertedDay,\n Number(data.end.toString().split(\":\")[0]),\n Number(data.end.toString().split(\":\")[1])\n );\n\n createClassMutate(data)\n .then(() => {\n setOpen(false);\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n };\n\n return (\n
\n Hold på valgte dato:\n {isLoading &&
loader
}\n {classes && classes.length === 0 && (\n
\n Ingen hold på denne dato\n
\n FillClasses()}>\n Udfyld dag med standard opsætning\n \n
\n
\n )}\n\n {classes && (\n
\n {classes.length > 0 && (\n \n \n \n \n Navn\n Start\n Slut\n Pladser\n  \n \n \n \n {classes.map((x) => {\n return ;\n })}{\" \"}\n \n
\n
\n )}\n
\n
\n \n Tilføj nyt hold til valgte dato\n \n \n \n Tilføj hold {year}- {month}-{day}\n \n
\n \n
\n \n ) => {\n var values = event.target.value as string;\n setValue(\"classTypeId\", values);\n }}\n >\n {classTypes.data &&\n classTypes.data.map((x) => {\n return (\n \n {x.name}\n \n );\n })}\n \n
\n
\n \n
{\" \"}\n
\n \n
{\" \"}\n
\n \n
\n
\n \n \n Annuller\n \n Tilføj hold\n \n
\n \n
\n )}\n
\n );\n}\n\ninterface ClassSetupItemProps {\n x: ClassViewModel;\n}\nfunction ClassSetupItem({ x }: ClassSetupItemProps) {\n const [useCancelClassMutate] = useCancelClass();\n function CancelClass(classItem: ClassViewModel) {\n useCancelClassMutate({ classId: classItem.id, date: classItem.start });\n }\n\n const [useDeleteClassMutate] = useDeleteClass();\n function DeleteClass(classItem: ClassViewModel) {\n useDeleteClassMutate({ classId: classItem.id, date: classItem.start });\n }\n\n const [openSlots, setOpenSlots] = React.useState(false);\n const [openTime, setOpenTime] = React.useState(false);\n\n const {\n handleSubmit: handleTimeSubmit,\n setError: setErrorTime,\n control: controlTime,\n } = useForm();\n\n const [updateClassTimeMutate] = useUpdateClassTime();\n const onTimeSubmit = (data: ClassUpdateTimeWriteModel) => {\n data.classId = x.id;\n data.start = new Date(\n x.start.getFullYear(),\n x.start.getMonth(),\n x.start.getDate(),\n Number(data.start.toString().split(\":\")[0]),\n Number(data.start.toString().split(\":\")[1])\n );\n data.end = new Date(\n x.end.getFullYear(),\n x.end.getMonth(),\n x.end.getDate(),\n Number(data.end.toString().split(\":\")[0]),\n Number(data.end.toString().split(\":\")[1])\n );\n\n updateClassTimeMutate(data)\n .then(() => {\n setOpenTime(false);\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setErrorTime);\n }\n });\n };\n\n const {\n handleSubmit: handleSlotsSubmit,\n setError: setErrorSlots,\n control: controlSlots,\n } = useForm();\n\n const [updateClassSlotsMutate] = useUpdateClassSlots();\n const onSlotsSubmit = (data: ClassUpdateSlotsWriteModel) => {\n data.classId = x.id;\n\n updateClassSlotsMutate(data)\n .then(() => {\n setOpenSlots(false);\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setErrorSlots);\n }\n });\n };\n\n return (\n <>\n \n \n {x.classTypeName}\n\n {x.highlights.map((h) => (\n \n ))}\n \n\n {moment(x.start).format(\"LT\")}\n {moment(x.end).format(\"LT\")}\n \n {x.bookings}/{x.slots}\n \n \n {!x.cancelled && (\n {\n setOpenTime(true);\n }}\n >\n Ret tidspunkt\n \n )}\n {!x.cancelled && (\n {\n setOpenSlots(true);\n }}\n >\n Ret pladser\n \n )}\n\n {x.bookings !== 0 && !x.cancelled && (\n {\n if (window.confirm(\"Er du sikker på du vil aflyse holdet?\"))\n CancelClass(x);\n }}\n >\n Aflys hold\n \n )}\n {(x.bookings === 0 || x.cancelled) && (\n {\n if (window.confirm(\"Er du sikker på du vil fjernet holdet?\"))\n DeleteClass(x);\n }}\n >\n Fjern hold\n \n )}\n \n \n {\n setOpenTime(false);\n }}\n aria-labelledby=\"form-dialog-title\"\n >\n Ret tidspunkt\n
\n \n Ret tidspunkt\n \n \n \n \n {\n setOpenTime(false);\n }}\n >\n Annuller\n \n \n Gem nyt tidspunkt\n \n \n
\n \n {\n setOpenSlots(false);\n }}\n aria-labelledby=\"form-dialog-title\"\n >\n Ret antal pladser\n
\n \n Ret antal pladser\n \n \n \n {\n setOpenSlots(false);\n }}\n >\n Annuller\n \n \n Gem ny holdstørrelse\n \n \n
\n \n \n );\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\n\nexport type CustomDate = {\n year: string;\n month: string;\n day: string;\n};\n\nexport default function useFillClasses() {\n return useMutationWithError(\n (date: CustomDate) => {\n return axios.post(\n `/api/DefaultClass/FillDate?date=${date.year}-${date.month}-${date.day}`\n );\n },\n {\n onSuccess: (data, date) => {\n // Query Invalidations\n // queryCache.invalidateQueries(\"activeUserBookings\");\n // alert(`${date.year}-${date.month}-${date.day}`)\n queryCache.invalidateQueries([\n \"classes\",\n `${date.year}-${date.month}-${date.day}`,\n ]);\n },\n }\n );\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\nimport { ClassCreateWriteModel, ClassViewModel } from \"./classModels\";\n\nexport default function useCreateClass() {\n return useMutationWithError(\n (data: ClassCreateWriteModel) => axios.post(`/api/class`, data),\n {\n onSuccess: (data, createData) => {\n // Query Invalidations\n var converted = new Date(createData.start) \n // console.log(date)\n queryCache.invalidateQueries([\"classes\", `${converted.getFullYear()}-${converted.getMonth() + 1}-${converted.getDate()}`]);\n },\n }\n );\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\nimport { CancelClassModel } from \"./classModels\";\n\nexport default function useCancelClass() {\n return useMutationWithError(\n ({ classId }) => axios.delete(`/api/class/cancel/${classId}`),\n {\n onSuccess: (data, payload) => {\n // Query Invalidations\n var converted = new Date(payload.date);\n \n queryCache.invalidateQueries([\"classes\", `${converted.getFullYear()}-${converted.getMonth() + 1}-${converted.getDate()}`]);\n },\n }\n );\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\nimport { DeleteClassModel } from \"./classModels\";\n\nexport default function useDeleteClass() {\n return useMutationWithError(\n ({ classId }) => axios.delete(`/api/class/${classId}`),\n {\n onSuccess: (data, payload) => {\n // Query Invalidations\n var converted = new Date(payload.date);\n \n queryCache.invalidateQueries([\"classes\", `${converted.getFullYear()}-${converted.getMonth() + 1}-${converted.getDate()}`]);\n },\n }\n );\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\nimport {\n ClassUpdateTimeWriteModel,\n ClassViewModel,\n} from \"./classModels\";\n\nexport default function useUpdateClassTime() {\n return useMutationWithError<\n ClassViewModel,\n unknown,\n ClassUpdateTimeWriteModel\n >(\n (data: ClassUpdateTimeWriteModel) => axios.post(`/api/class/updatetime`, data),\n {\n onSuccess: (data, createData) => {\n // Query Invalidations\n var converted = new Date(createData.start); \n queryCache.invalidateQueries([\"classes\", `${converted.getFullYear()}-${converted.getMonth() + 1}-${converted.getDate()}`]);\n },\n }\n );\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\nimport { ClassUpdateSlotsWriteModel, ClassViewModel } from \"./classModels\";\n\nexport default function useUpdateClassSlots() {\n return useMutationWithError<\n ClassViewModel,\n unknown,\n ClassUpdateSlotsWriteModel\n >(\n (data: ClassUpdateSlotsWriteModel) =>\n axios.post(`/api/class/updateslots`, data),\n {\n onSuccess: (data: any, createData) => {\n // Query Invalidations\n var converted = new Date(data.data.start);\n \n // console.log(date)\n queryCache.invalidateQueries([\"classes\", `${converted.getFullYear()}-${converted.getMonth() + 1}-${converted.getDate()}`]);\n },\n }\n );\n}\n","\nimport { AxiosError } from \"axios\";\nimport React from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport ErrorSummary, { addServerErrors } from \"../components/ErrorSummary\";\nimport { ClassTypeCreateModel } from \"../hooks/classTypes/classTypeModels\";\nimport useClassTypes from \"../hooks/classTypes/useClassTypes\";\nimport useCreateClassType from \"../hooks/classTypes/useCreateClassType\";\nexport default function ClassTypes() {\n const classTypes = useClassTypes();\n const [createMutate] = useCreateClassType();\n\n const {\n register,\n handleSubmit,\n errors,\n setError,\n } = useForm();\n const onSubmit = (data: ClassTypeCreateModel) => {\n createMutate(data).catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n };\n return (\n <>\n

Hold typer {classTypes.isLoading &&
Loader
}

\n \n {classTypes.data &&\n classTypes.data.map((x) => {\n return (\n \n
\n {x.name} ---- {x.id}\n
\n );\n })}\n \n \n\n
\n {/* register your input into the hook by invoking the \"register\" function */}\n \n\n \n \n \n \n );\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\"\nimport { ClassTypeCreateModel, ClassTypeViewModel } from \"./classTypeModels\";\n\n\nexport default function useCreateClassType() {\n return useMutationWithError(\n (data: ClassTypeCreateModel) => axios.post(`/api/classtype`, data),\n {\n onSuccess: () => {\n // Query Invalidations\n queryCache.invalidateQueries(\"classTypes\");\n },\n }\n );\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { ActivityModel } from \"./activityModels\";\n\nconst getClasses = async (_: any) => {\n const { data } = await axios.get(`/api/Activity/Get`);\n return data;\n};\n\nexport default function useClassTypes() {\n return useQuery([\"activity\"], getClasses);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { WeeklyGraphModel } from \"./activityModels\";\n\nconst getClasses = async (_: any) => {\n const { data } = await axios.get(`/api/Activity/GetWeeklyGraph`);\n return data;\n};\n\nexport default function useWeeklyGraph() {\n return useQuery([\"weeklyGraph\"], getClasses);\n}\n","import React, { useState } from \"react\";\nimport {\n XAxis,\n YAxis,\n FlexibleWidthXYPlot,\n HorizontalGridLines,\n LineSeries,\n Crosshair,\n} from \"react-vis\";\nimport useWeeklyGraph from \"../hooks/activity/useWeeklyGraph\";\n\nconst WeeklyStatistics = () => {\n const { data: hello } = useWeeklyGraph();\n\n const data: any[] = [];\n const invisdata: any[] = [];\n let maxTrainings = 0;\n if (hello) {\n for (let index = 0; index < hello.length; index++) {\n const item = hello[index];\n const types: any[] = [];\n for (const key in item.split) {\n types.push({\n name: key,\n count: item.split[key],\n });\n };\n data.push({ x: index, week: item.week, y: item.trainings, types: types });\n\n if (item.trainings > maxTrainings)\n maxTrainings = item.trainings;\n\n if (index === 0) {\n invisdata.push({ x: item.week, y: 0 });\n }\n }\n }\n\n const trainingsArray = [];\n for (let index = 0; index <= maxTrainings; index++) {\n trainingsArray.push(index);\n }\n const [index, setIndex] = useState(-1);\n\n const _formatCrosshairItems = (values: any[]) => {\n return values[0].types.map((v: any, i: number) => {\n return {\n title: v.name,\n value: v.count,\n };\n });\n };\n\n const _formatCrosshairTitle = (values: any[]) => {\n return {\n title: \"Træninger i uge \" + data[values[0].x].week,\n value: values[0].y,\n };\n };\n\n const _mouseLeaveHandler = () => {\n setIndex(-1);\n };\n\n const _nearestXHandler = (value: any, { index: ii }: any) => {\n\n if (index !== ii) {\n setIndex(ii);\n }\n };\n\n return (\n
\n {data && data.length > 0 && (\n
\n \n \n {\n return Number(tick).toString();\n }}\n />\n item.x)}\n tickFormat={(tick) => {\n return \"uge \" + data[Number(tick)].week.toString();\n }}\n />\n\n \n {/* */}\n -1 ? [data[index]] : []}\n />\n \n
\n )}\n
\n );\n};\n\nexport default WeeklyStatistics;\n","import React, { Component, ErrorInfo, ReactNode } from \"react\";\n\ninterface Props {\n children: ReactNode;\n}\n\ninterface State {\n hasError: boolean;\n}\n\nclass ErrorBoundary extends Component {\n public state: State = {\n hasError: false\n };\n\n public static getDerivedStateFromError(_: Error): State {\n // Update state so the next render will show the fallback UI.\n return { hasError: true };\n }\n\n public componentDidCatch(error: Error, errorInfo: ErrorInfo) {\n console.error(\"Uncaught error:\", error, errorInfo);\n }\n\n public render() {\n if (this.state.hasError) {\n return

Sorry.. there was an error

;\n }\n\n return this.props.children;\n }\n}\n\nexport default ErrorBoundary;","import React from \"react\";\n\nexport default function TotalIcon() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\n\nexport default function MonthIcon() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\n\nexport default function YearIcon() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import CustomButton from \"../components/CustomButton\";\nimport React, { useRef, useState } from \"react\";\nimport { NavLink } from \"react-router-dom\";\nimport { Box, BoxHeader } from \"../components/Box\";\nimport {\n PageContainer,\n ContentContainerBackgroundSize,\n} from \"../components/PageContainer\";\nimport { BigPageHeader } from \"../components/PageHeader\";\nimport useActivities from \"../hooks/activity/useActivities\";\n\nimport useActiveUserBookings from \"../hooks/booking/useActiveUserBookings\";\nimport useClasses from \"../hooks/class/useClasses\";\nimport { BookingClass } from \"../pages/Booking\";\nimport { BOOKING } from \"../routes\";\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n} from \"@material-ui/core\";\nimport { PageContent } from \"../components/PageContent\";\nimport \"../../node_modules/react-vis/dist/style.css\";\nimport WeeklyStatistics from \"../components/WeeklyStatistics\";\nimport styled from \"styled-components\";\nimport ButtonAligner from \"../components/ButtonAligner\";\nimport ErrorBoundary from \"../components/ErrorBoundry\";\nimport TotalIcon from \"../icons/TotalIcon\";\nimport MonthIcon from \"../icons/MonthIcon\";\nimport YearIcon from \"../icons/YearIcon\";\n\nconst DashboardContainer = styled.div`\n text-align: center;\n color: var(--white);\n margin-top: 10px;\n grid-template-columns: 100% 100% 100%;\n display: grid;\n overflow: auto;\n grid-gap: 0;\n width: 100%;\n scroll-snap-type: x mandatory;\n`;\nconst Next = styled.div`\n position: absolute;\n cursor: pointer;\n right: 40px;\n margin-top: 60px;\n &:after {\n content: url(\"data:image/svg+xml; utf8, \");\n }\n`;\nconst Prev = styled.div`\n position: absolute;\n cursor: pointer;\n left: 40px;\n margin-top: 60px;\n transform: rotate(180deg);\n &:after {\n content: url(\"data:image/svg+xml; utf8, \");\n }\n`;\n\nconst DashboardItem = styled.div`\n scroll-snap-align: start;\n scroll-snap-stop: always;\n text-align: center;\n color: var(--white);\n margin-top: 10px;\n svg {\n width: 120px;\n }\n`;\nconst DashboardText = styled.div`\n line-height: 30px;\n margin-bottom: 20px;\n text-transform: uppercase;\n`;\n\nconst DashboardBigText = styled.div`\n font-size: 40px;\n font-weight: 600;\n`;\nexport default function Dashboard() {\n // let match = useRouteMatch();\n\n const { data: activity } = useActivities();\n const { data: classes, isLoading: classesIsLoading } = useClasses();\n const {\n data: bookings,\n isLoading: bookingsLoading,\n } = useActiveUserBookings();\n var loading = bookingsLoading || classesIsLoading;\n const [clicks, setClicks] = useState(0);\n const [showDiagnostics, setShowDiagnostics] = useState(false);\n const handleDashboardClick = () => {\n setClicks(clicks + 1);\n if (clicks > 10) {\n setClicks(0);\n setShowDiagnostics(true);\n }\n };\n\n const inputRef22 = useRef() as React.MutableRefObject;\n const handleNextClick = () => {\n inputRef22.current.scrollTo({\n left: inputRef22.current.clientWidth + inputRef22.current.scrollLeft,\n behavior: \"smooth\",\n });\n };\n const handlePrevClick = () => {\n inputRef22.current.scrollTo({\n left: inputRef22.current.scrollLeft - inputRef22.current.clientWidth,\n behavior: \"smooth\",\n });\n };\n\n const [active, setActive] = useState(0);\n return (\n \n \n CrossFit8500\n \n \n ) => {\n const newActive = Math.round(\n e.currentTarget.scrollLeft / e.currentTarget.clientWidth\n );\n if (active !== newActive) {\n setActive(newActive);\n }\n }}\n >\n {active !== 2 && handleNextClick()} />}\n {active !== 0 && handlePrevClick()} />}\n \n \n \n Du har trænet\n \n {activity && activity.totalBookings}\n \n gange i alt\n \n \n \n \n \n Du har trænet\n \n {activity && activity.bookingsThisMonth}\n \n gange denne måned\n \n \n \n \n \n Du har trænet\n \n {activity && activity.bookingsThisYear}\n \n gange i år\n \n \n \n \n Tilmeldte hold\n {loading &&
Loader
}\n {!loading &&\n bookings &&\n bookings.map((x) => {\n const classItem = classes?.find((c) => c.id === x.classId);\n return (\n classItem && (\n x.occupyActiveBookingSlot === true).length : 0}\n showDate={true}\n booking={x}\n class={classItem}\n />\n )\n );\n })}\n {!loading && bookings && bookings.length === 0 && (\n <>\n

Du har ingen kommende bookinger

\n\n \n \n Gå til booking\n \n \n \n )}\n
\n\n \n Ugentlige træninger\n \n \n \n \n
\n\n {\n setShowDiagnostics(false);\n }}\n >\n Info\n\n \n
\n

OK

\n Version: {process.env.REACT_APP_VERSION}\n
\n
\n \n {\n setShowDiagnostics(false);\n }}\n >\n OK\n \n \n \n
\n );\n}\n","export interface DefaultClassViewModel {\n classTypeName: string;\n id: string;\n classTypeId: string;\n start: Date;\n end: Date;\n slots: number;\n daysOfWeek: DayOfWeekFlag;\n weeks: WeekFlag;\n}\n\nexport interface DefaultClassCreateModel {\n classTypeId: string;\n start: Date;\n end: Date;\n slots: number;\n daysOfWeek: DayOfWeekFlag;\n weeks: WeekFlag;\n}\n\n\nexport interface DefaultClassUpdateModel extends DefaultClassCreateModel {\n defaultClassId: string;\n}\n\nexport enum DayOfWeekFlag {\n None = 0,\n Monday = 1 << 0,\n Tuesday = 1 << 1,\n Wednesday = 1 << 2,\n Thursday = 1 << 3,\n Friday = 1 << 4,\n Saturday = 1 << 5,\n Sunday = 1 << 6,\n}\n\nexport enum WeekFlag {\n None = 0,\n Odd = 1 << 0,\n Even = 1 << 1,\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { DefaultClassViewModel } from \"./defaultClassModels\";\n\n\nconst getClasses = async (_: any) => {\n const { data } = await axios.get(`/api/defaultclass`);\n return data;\n};\n\nexport default function useDefaultClasses() {\n return useQuery([\"defaultClasses\"], getClasses);\n}\n","import { AxiosError } from \"axios\";\nimport React from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport ErrorSummary, { addServerErrors } from \"../components/ErrorSummary\";\nimport {\n DayOfWeekFlag,\n DefaultClassCreateModel,\n DefaultClassUpdateModel,\n DefaultClassViewModel,\n WeekFlag,\n} from \"../hooks/defaultClasses/defaultClassModels\";\nimport useCreateDefaultClass from \"../hooks/defaultClasses/useCreateDefaultClass\";\nimport useDefaultClasses from \"../hooks/defaultClasses/useDefaultClasses\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport ListItemText from \"@material-ui/core/ListItemText\";\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport useClassTypes from \"../hooks/classTypes/useClassTypes\";\n\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from \"@material-ui/core\";\nimport CustomButton, { ThemeColor } from \"../components/CustomButton\";\nimport useDeleteDefaultClass from \"../hooks/defaultClasses/useDeleteDefaultClass\";\nimport useUpdateDefaultClass from \"../hooks/defaultClasses/useUpdateDefaultClass\";\nimport { PageContainer } from \"../components/PageContainer\";\nimport { PageContent } from \"../components/PageContent\";\nimport { PageHeader } from \"../components/PageHeader\";\nimport { Box, BoxHeader } from \"../components/Box\";\nimport TextInput from \"../components/form/TextInput\";\nimport Dropdown from \"../components/form/Dropdown\";\nimport ButtonAligner from \"../components/ButtonAligner\";\nconst names = [\n { text: \"Mandag\", value: DayOfWeekFlag.Monday },\n { text: \"Tirsdag\", value: DayOfWeekFlag.Tuesday },\n { text: \"Onsdag\", value: DayOfWeekFlag.Wednesday },\n { text: \"Torsdag\", value: DayOfWeekFlag.Thursday },\n { text: \"Fredag\", value: DayOfWeekFlag.Friday },\n { text: \"Lørdag\", value: DayOfWeekFlag.Saturday },\n { text: \"Søndag\", value: DayOfWeekFlag.Sunday },\n];\nconst weekOptions = [\n { text: \"Lige\", value: WeekFlag.Even },\n { text: \"Ulige\", value: WeekFlag.Odd },\n];\nexport default function DefaultClasses() {\n const defaultClasses = useDefaultClasses();\n const [createMutate] = useCreateDefaultClass();\n\n const [open, setOpen] = React.useState(false);\n const {\n handleSubmit,\n errors,\n setError,\n setValue,\n control,\n } = useForm();\n const onSubmit = (data: DefaultClassCreateModel) => {\n createMutate(data)\n .then(() => {\n setOpen(false);\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n };\n const [personName, setPersonName] = React.useState([]);\n const [weeks, setWeeks] = React.useState([]);\n\n const handleChange = (event: React.ChangeEvent<{ value: unknown }>) => {\n setPersonName(event.target.value as DayOfWeekFlag[]);\n };\n\n const handleWeekChange = (event: React.ChangeEvent<{ value: unknown }>) => {\n setWeeks(event.target.value as WeekFlag[]);\n };\n\n var groupBy = function (xs: any, key: any) {\n return xs.reduce(function (rv: any, x: any) {\n (rv[key(x)] = rv[key(x)] || []).push(x);\n return rv;\n }, {});\n };\n const classTypes = useClassTypes();\n\n var grouped =\n defaultClasses &&\n defaultClasses.data &&\n groupBy(defaultClasses.data, function (x: DefaultClassViewModel) {\n return x.classTypeName;\n });\n\n return (\n \n \n Hold skema{defaultClasses.isLoading &&
Loader
}\n
\n \n {grouped &&\n Object.entries(grouped).map(([key, value]) => {\n return (\n \n {key}\n\n \n \n \n \n Start\n Slut\n Pladser\n Dage\n Uger\n  \n \n \n \n {value.map((x) => {\n return (\n \n );\n })}\n \n
\n
\n
\n );\n })}\n \n \n setOpen(true)}>\n Opret nyt standard hold\n \n \n \n {\n setOpen(false);\n }}\n aria-labelledby=\"form-dialog-title\"\n >\n \n Opret nyt standard hold\n \n
\n \n Opret nyt standard hold\n\n ) => {\n var values = event.target.value as string;\n setValue(\"classTypeId\", values);\n }}\n >\n {classTypes.data &&\n classTypes.data.map((x) => {\n return (\n \n {x.name}\n \n );\n })}\n \n\n \n \n \n\n ) => {\n // setMarket(event.target.value as string[]);\n handleChange(event);\n var values = event.target.value as DayOfWeekFlag[];\n var days = values.reduce(function (a, b) {\n return a + b;\n });\n setValue(\"daysOfWeek\", days);\n }}\n renderValue={(selected) => {\n return (selected as DayOfWeekFlag[])\n .sort((a, b) => a - b)\n .map((x) => names.find((y) => y.value === x)?.text)\n .join(\", \");\n }}\n >\n {names.map((name) => (\n \n -1} />\n \n \n ))}\n \n\n ) => {\n // setMarket(event.target.value as string[]);\n handleWeekChange(event);\n var values = event.target.value as WeekFlag[];\n var days = values.reduce(function (a, b) {\n return a + b;\n });\n setValue(\"weeks\", days);\n }}\n renderValue={(selected) => {\n return (selected as WeekFlag[])\n .sort((a, b) => a - b)\n .map((x) => weekOptions.find((y) => y.value === x)?.text)\n .join(\", \");\n }}\n >\n {weekOptions.map((name) => (\n \n -1} />\n \n \n ))}\n \n\n \n \n \n {\n setOpen(false);\n }}\n color=\"primary\"\n >\n Annuller\n \n \n Gem\n \n \n
\n \n
\n
\n );\n}\n\ninterface DefaultClassRowProps {\n model: DefaultClassViewModel;\n}\nfunction DefaultClassRow({ model }: DefaultClassRowProps) {\n const row = model;\n\n const [open, setOpen] = React.useState(false);\n const [updateMutate] = useUpdateDefaultClass();\n const [deleteMutate] = useDeleteDefaultClass();\n const handleDelete = (defaultClassId: string) => {\n deleteMutate(defaultClassId);\n };\n\n const {\n handleSubmit,\n errors,\n setError,\n setValue,\n control,\n } = useForm();\n const onSubmit = (data: DefaultClassUpdateModel) => {\n data.defaultClassId = model.id;\n updateMutate(data)\n .then(() => {\n setOpen(false);\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n };\n let days: string[] = [];\n let defaultDays: DayOfWeekFlag[] = [];\n if ((row.daysOfWeek & DayOfWeekFlag.Monday) === DayOfWeekFlag.Monday) {\n days.push(\"mandag\");\n defaultDays.push(DayOfWeekFlag.Monday);\n }\n if ((row.daysOfWeek & DayOfWeekFlag.Tuesday) === DayOfWeekFlag.Tuesday) {\n days.push(\"tirsdag\");\n defaultDays.push(DayOfWeekFlag.Tuesday);\n }\n if ((row.daysOfWeek & DayOfWeekFlag.Wednesday) === DayOfWeekFlag.Wednesday) {\n days.push(\"onsdag\");\n defaultDays.push(DayOfWeekFlag.Wednesday);\n }\n if ((row.daysOfWeek & DayOfWeekFlag.Thursday) === DayOfWeekFlag.Thursday) {\n days.push(\"torsdag\");\n defaultDays.push(DayOfWeekFlag.Thursday);\n }\n if ((row.daysOfWeek & DayOfWeekFlag.Friday) === DayOfWeekFlag.Friday) {\n days.push(\"fredag\");\n defaultDays.push(DayOfWeekFlag.Friday);\n }\n if ((row.daysOfWeek & DayOfWeekFlag.Saturday) === DayOfWeekFlag.Saturday) {\n days.push(\"lørdag\");\n defaultDays.push(DayOfWeekFlag.Saturday);\n }\n if ((row.daysOfWeek & DayOfWeekFlag.Sunday) === DayOfWeekFlag.Sunday) {\n days.push(\"søndag\");\n defaultDays.push(DayOfWeekFlag.Sunday);\n }\n const defaultWeeks: WeekFlag[] = [];\n\n if ((row.weeks & WeekFlag.Even) === WeekFlag.Even) {\n defaultWeeks.push(WeekFlag.Even);\n }\n if ((row.weeks & WeekFlag.Odd) === WeekFlag.Odd) {\n defaultWeeks.push(WeekFlag.Odd);\n }\n\n const [personName, setPersonName] = React.useState(\n defaultDays\n );\n const [weeks, setWeeks] = React.useState(defaultWeeks);\n\n const handleChange = (event: React.ChangeEvent<{ value: unknown }>) => {\n setPersonName(event.target.value as DayOfWeekFlag[]);\n };\n\n const handleWeekChange = (event: React.ChangeEvent<{ value: unknown }>) => {\n setWeeks(event.target.value as WeekFlag[]);\n };\n\n const classTypes = useClassTypes();\n\n return (\n <>\n \n \n {row.start.getUTCHours().toString().padStart(2, \"0\") +\n \":\" +\n row.start.getUTCMinutes().toString().padStart(2, \"0\")}\n \n \n {row.end.getUTCHours().toString().padStart(2, \"0\") +\n \":\" +\n row.end.getUTCMinutes().toString().padStart(2, \"0\")}\n \n {row.slots}\n {days.join(\", \")}\n \n {(row.weeks & WeekFlag.Even) === WeekFlag.Even &&\n (row.weeks & WeekFlag.Odd) === WeekFlag.Odd && Alle}\n {(row.weeks & WeekFlag.Even) !== WeekFlag.Even &&\n (row.weeks & WeekFlag.Odd) !== WeekFlag.Odd && Ingen}\n {(row.weeks & WeekFlag.Even) === WeekFlag.Even &&\n (row.weeks & WeekFlag.Odd) !== WeekFlag.Odd && Lige}\n {(row.weeks & WeekFlag.Even) !== WeekFlag.Even &&\n (row.weeks & WeekFlag.Odd) === WeekFlag.Odd && Ulige}\n \n \n setOpen(true)}>Ret\n {\n if (window.confirm(\"Er du sikker på du vil fjerne holdet?\"))\n handleDelete(row.id);\n }}\n >\n Fjern\n \n \n \n\n {\n setOpen(false);\n }}\n aria-labelledby=\"form-dialog-title\"\n >\n Ret \n
\n \n Ret \n\n ) => {\n var values = event.target.value as string;\n setValue(\"classTypeId\", values);\n }}\n >\n {classTypes.data &&\n classTypes.data.map((x) => {\n return (\n \n {x.name}\n \n );\n })}\n \n\n \n \n \n\n ) => {\n // setMarket(event.target.value as string[]);\n handleChange(event);\n var values = event.target.value as DayOfWeekFlag[];\n var days = values.reduce(function (a, b) {\n return a + b;\n });\n setValue(\"daysOfWeek\", days);\n }}\n renderValue={(selected) => {\n return (selected as DayOfWeekFlag[])\n .sort((a, b) => a - b)\n .map((x) => names.find((y) => y.value === x)?.text)\n .join(\", \");\n }}\n >\n {names.map((name) => (\n \n -1} />\n \n \n ))}\n \n\n ) => {\n // setMarket(event.target.value as string[]);\n handleWeekChange(event);\n var values = event.target.value as WeekFlag[];\n var days = values.reduce(function (a, b) {\n return a + b;\n });\n setValue(\"weeks\", days);\n }}\n renderValue={(selected) => {\n return (selected as WeekFlag[])\n .sort((a, b) => a - b)\n .map((x) => weekOptions.find((y) => y.value === x)?.text)\n .join(\", \");\n }}\n >\n {weekOptions.map((name) => (\n \n -1} />\n \n \n ))}\n \n \n \n \n {\n setOpen(false);\n }}\n color=\"primary\"\n >\n Annuller\n \n \n Gem\n \n \n
\n \n \n );\n}\n","import { queryCache } from \"react-query\";\nimport axios from \"../../axios\"\nimport useMutationWithError from \"../useMutationWithError\";\nimport { DefaultClassCreateModel, DefaultClassViewModel } from \"./defaultClassModels\";\n\n\nexport default function useCreateDefaultClass() {\n return useMutationWithError(\n (data: DefaultClassCreateModel) => axios.post(`/api/defaultclass`, data),\n {\n onSuccess: () => {\n // Query Invalidations\n queryCache.invalidateQueries(\"defaultClasses\");\n },\n }\n );\n}\n","import { queryCache } from \"react-query\";\nimport axios from \"../../axios\"\nimport useMutationWithError from \"../useMutationWithError\";\nimport { DefaultClassUpdateModel, DefaultClassViewModel } from \"./defaultClassModels\";\n\n\nexport default function useUpdateDefaultClass() {\n return useMutationWithError(\n (data: DefaultClassUpdateModel) => axios.post(`/api/defaultclass/update`, data),\n {\n onSuccess: () => {\n // Query Invalidations\n queryCache.invalidateQueries(\"defaultClasses\");\n },\n }\n );\n}\n","import { queryCache } from \"react-query\";\nimport axios from \"../../axios\"\nimport useMutationWithError from \"../useMutationWithError\";\n\n\nexport default function useDeleteDefaultClass() {\n return useMutationWithError(\n (data: string) => axios.delete(`/api/defaultclass/${data}`),\n {\n onSuccess: () => {\n // Query Invalidations\n queryCache.invalidateQueries(\"defaultClasses\");\n },\n }\n );\n}\n","import React from \"react\";\nimport { ErrorOption, FieldName, useForm } from \"react-hook-form\";\nimport {\n FullAccountViewModel,\n UpdateWriteModel,\n} from \"../hooks/account/accountModels\";\nimport { BoxHeader } from \"./Box\";\nimport ButtonAligner from \"./ButtonAligner\";\nimport CustomButton, { ThemeColor } from \"./CustomButton\";\nimport ErrorSummary from \"./ErrorSummary\";\nimport TextInput from \"./form/TextInput\";\n\nexport type EditUserDetailsProps = {\n user: FullAccountViewModel;\n handleCancelEdit: () => void;\n handleSubmitEdit: (\n data: UpdateWriteModel,\n setError: (name: FieldName, error: ErrorOption) => void\n ) => void;\n};\nconst EditUserDetails = ({\n user,\n handleCancelEdit,\n handleSubmitEdit,\n}: EditUserDetailsProps) => {\n const {\n handleSubmit,\n setError,\n errors,\n control,\n } = useForm();\n\n const onSubmit = (data: UpdateWriteModel) => {\n handleSubmitEdit(data, setError);\n };\n return (\n <>\n {user && (\n
\n Personlige oplysninger\n
\n \n \n \n \n \n \n \n\n \n
\n \n Gem oplysninger\n \n Annuller\n \n \n \n
\n )}\n \n );\n};\n\nexport default EditUserDetails;\n","import React from \"react\";\n\nimport styled, { css } from \"styled-components\";\nimport {\n OutlinedInputProps,\n Checkbox,\n withStyles,\n FormControlLabel,\n} from \"@material-ui/core\";\nimport { Controller } from \"react-hook-form\";\n\nexport type TextInputProps = {\n control: any;\n label: string;\n name: string;\n\n defaultChecked?: boolean;\n fullWidth?: boolean;\n inputProps?: OutlinedInputProps[\"inputProps\"];\n};\nexport type ExtraProps = {\n fullWidth: boolean;\n};\nconst InputContainer = styled.div`\n margin-bottom: 10px;\n ${(props) =>\n props.fullWidth &&\n css`\n > div {\n width: 100%;\n }\n `}\n`;\n\nexport const CssTextField = withStyles({\n root: {\n \"& label.Mui-focused\": {\n color: \"var(--red)\",\n },\n \"& .MuiInput-underline:after\": {\n borderBottomColor: \"var(--red)\",\n },\n \"& .MuiOutlinedInput-root\": {\n // '& fieldset': {\n // borderColor: 'red',\n // },\n // '&:hover fieldset': {\n // borderColor: 'yellow',\n // },\n \"&.Mui-focused fieldset\": {\n borderColor: \"var(--red)\",\n },\n },\n },\n})(Checkbox);\n\nexport default function CheckboxInput({\n control,\n label,\n name,\n inputProps,\n defaultChecked,\n fullWidth = false,\n}: TextInputProps) {\n return (\n \n (\n props.onChange(e.target.checked)}\n />\n )}\n />\n }\n />\n \n );\n}\n","import React from \"react\";\nimport { ErrorOption, FieldName, useForm } from \"react-hook-form\";\nimport {\n FullAccountViewModel,\n EmailSettingsWriteModel,\n} from \"../hooks/account/accountModels\";\nimport { BoxHeader } from \"./Box\";\nimport ButtonAligner from \"./ButtonAligner\";\nimport CustomButton, { ThemeColor } from \"./CustomButton\";\nimport ErrorSummary from \"./ErrorSummary\";\nimport CheckboxInput from \"./form/CheckboxInput\";\n\nexport type EditUserEmailNotificationSettingsProps = {\n user: FullAccountViewModel;\n handleCancelEdit: () => void;\n handleSubmitEdit: (\n data: EmailSettingsWriteModel,\n setError: (name: FieldName, error: ErrorOption) => void\n ) => void;\n};\n\nconst EditUserEmailNotificationSettings = ({\n user,\n handleCancelEdit,\n handleSubmitEdit,\n}: EditUserEmailNotificationSettingsProps) => {\n const {\n handleSubmit,\n setError,\n errors,\n control,\n } = useForm();\n\n const onSubmit = (data: EmailSettingsWriteModel) => {\n console.log('data', data);\n handleSubmitEdit(data, setError);\n };\n return (\n <>\n {user && (\n
\n Notifikation indstillinger\n
\n \n \n \n
\n \n Gem indstillinger\n \n Annuller\n \n \n \n
\n )}\n \n );\n};\n\nexport default EditUserEmailNotificationSettings;\n","import React from \"react\";\nimport useMe from \"../hooks/account/useMe\";\nimport { AxiosError } from \"axios\";\nimport { ErrorOption, FieldName } from \"react-hook-form\";\nimport { useHistory } from \"react-router-dom\";\nimport EditUserDetails from \"../components/EditUserDetails\";\nimport { addServerErrors } from \"../components/ErrorSummary\";\nimport {\n UpdateWriteModel,\n EmailSettingsWriteModel,\n} from \"../hooks/account/accountModels\";\nimport { PROFILE } from \"../routes\";\nimport useUpdateAccount from \"../hooks/account/useUpdateAccount\";\n\nimport { Box } from \"../components/Box\";\nimport { PageHeader } from \"../components/PageHeader\";\nimport { PageContent } from \"../components/PageContent\";\n\nimport {\n PageContainer,\n ContentContainerBackgroundSize,\n} from \"../components/PageContainer\";\nimport EditUserEmailNotificationSettings from \"../components/EditUserEmailNotificationSettings\";\nimport useSetEmailSettings from \"../hooks/account/useSetEmailSettings\";\nexport default function EditProfile() {\n // let match = useRouteMatch();\n const { data } = useMe();\n const history = useHistory();\n const [updateAccountMutate] = useUpdateAccount();\n const [setEmailSettingsMutate] = useSetEmailSettings();\n const handleCancelEdit = () => {\n history.push(PROFILE);\n };\n\n const handleSubmitEdit = (\n data: UpdateWriteModel,\n setError: (name: FieldName, error: ErrorOption) => void\n ) => {\n updateAccountMutate(data)\n .then(() => {\n // alert(\"done\");\n history.push(PROFILE);\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n };\n\n const handleSubmitEdit2 = (\n data: EmailSettingsWriteModel,\n setError: (\n name: FieldName,\n error: ErrorOption\n ) => void\n ) => {\n setEmailSettingsMutate(data)\n .then(() => {\n // alert(\"done\");\n history.push(PROFILE);\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n };\n return (\n \n Ret personlige oplysninger\n \n \n {data && (\n \n )}\n \n \n {data && (\n \n )}\n \n \n \n );\n}\n","import { queryCache } from \"react-query\";\nimport useMutationForForms from \"../useMutationForForms\";\nimport axios from \"./../../axios\";\nimport { UpdateWriteModel } from \"./accountModels\";\n\nexport default function useUpdateAccount() {\n return useMutationForForms(\n (data: UpdateWriteModel) => axios.post(`/api/account/update`, data),\n {\n onSuccess: (data, updateData) => {\n \n queryCache.invalidateQueries([\"me\"]);\n },\n }\n );\n}\n","import { queryCache } from \"react-query\";\nimport useMutationForForms from \"../useMutationForForms\";\nimport axios from \"./../../axios\";\nimport { EmailSettingsWriteModel } from \"./accountModels\";\n\nexport default function useSetEmailSettings() {\n return useMutationForForms(\n (data: EmailSettingsWriteModel) => axios.post(`/api/account/SetEmailSettings`, data),\n {\n onSuccess: (data, updateData) => {\n \n queryCache.invalidateQueries([\"me\"]);\n },\n }\n );\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { FullAccountViewModel } from \"./accountModels\";\n\nconst getGet = async (_: any, userId: string) => {\n const { data } = await axios.get(\n `/api/account/getfulluser`,\n { params: { userId } }\n );\n return data;\n};\n\nexport default function useGetFullUser(\n userId: string,\n enabled: boolean = true\n) {\n return useQuery([\"account-get-full\", userId], getGet, { enabled: enabled });\n}\n","import React from \"react\";\nimport { ErrorOption, FieldName, useForm } from \"react-hook-form\";\nimport {\n FullAccountViewModel,\n SetCoachRoleByUserIdWriteModel,\n} from \"../hooks/account/accountModels\";\nimport { BoxHeader } from \"./Box\";\nimport ButtonAligner from \"./ButtonAligner\";\nimport CustomButton, { ThemeColor } from \"./CustomButton\";\nimport ErrorSummary from \"./ErrorSummary\";\nimport CheckboxInput from \"./form/CheckboxInput\";\n\nexport type EditUserEmailNotificationSettingsProps = {\n user: FullAccountViewModel;\n handleCancelEdit: () => void;\n handleSubmitEdit: (\n data: SetCoachRoleByUserIdWriteModel,\n setError: (name: FieldName, error: ErrorOption) => void\n ) => void;\n};\n\nconst EditUserCoachSettings = ({\n user,\n handleCancelEdit,\n handleSubmitEdit,\n}: EditUserEmailNotificationSettingsProps) => {\n const {\n handleSubmit,\n setError,\n errors,\n control,\n } = useForm();\n\n const onSubmit = (data: SetCoachRoleByUserIdWriteModel) => {\n console.log('data', data);\n handleSubmitEdit(data, setError);\n };\n return (\n <>\n {user && (\n
\n Rolle indstillinger\n
\n \n \n \n
\n \n Gem indstillinger\n \n Annuller\n \n \n \n
\n )}\n \n );\n};\n\nexport default EditUserCoachSettings;\n","import { AxiosError } from \"axios\";\nimport React from \"react\";\nimport { ErrorOption, FieldName } from \"react-hook-form\";\nimport { useHistory, useParams } from \"react-router-dom\";\nimport EditUserDetails from \"../components/EditUserDetails\";\nimport { addServerErrors } from \"../components/ErrorSummary\";\nimport {\n EmailSettingsWriteModel,\n SetCoachRoleByUserIdWriteModel,\n UpdateWriteModel,\n} from \"../hooks/account/accountModels\";\nimport useGetFullUser from \"../hooks/account/useGetFullUser\";\nimport useUpdateAccountById from \"../hooks/account/useUpdateAccountById\";\nimport { USER } from \"../routes\";\n\nimport { Box } from \"../components/Box\";\nimport { PageHeader } from \"../components/PageHeader\";\nimport { PageContent } from \"../components/PageContent\";\n\nimport {\n PageContainer,\n ContentContainerBackgroundSize,\n} from \"../components/PageContainer\";\nimport EditUserEmailNotificationSettings from \"../components/EditUserEmailNotificationSettings\";\nimport useSetEmailSettingsByUserId from \"../hooks/account/useSetEmailSettingsByUserId\";\nimport EditUserCoachSettings from \"../components/EditUserCoachSettings\";\nimport useSetCoachRoleByUserId from \"../hooks/account/useSetCoachRoleByUserId\";\ninterface UserParams {\n userId: string;\n}\nexport default function EditUser() {\n const history = useHistory();\n let { userId } = useParams();\n const { data: user } = useGetFullUser(userId);\n const [updateAccountByIdMutate] = useUpdateAccountById();\n const [setEmailSettingsByUserIdMutate] = useSetEmailSettingsByUserId();\n const [setCoachRoleByUserIdMutate] = useSetCoachRoleByUserId();\n const handleCancelEdit = () => {\n history.push(USER.replace(\":userId\", userId));\n };\n const handleSubmitEdit = (\n data: UpdateWriteModel,\n setError: (name: FieldName, error: ErrorOption) => void\n ) => {\n const newData = { userId: userId, ...data };\n updateAccountByIdMutate(newData)\n .then(() => {\n // alert(\"done\");\n history.push(USER.replace(\":userId\", userId));\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n };\n const handleSubmitEdit2 = (\n data: EmailSettingsWriteModel,\n setError: (\n name: FieldName,\n error: ErrorOption\n ) => void\n ) => {\n const newData = { userId: userId, ...data };\n setEmailSettingsByUserIdMutate(newData)\n .then(() => {\n // alert(\"done\");\n history.push(USER.replace(\":userId\", userId));\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n };\n const handleSubmitEditCoach = (\n data: SetCoachRoleByUserIdWriteModel,\n setError: (\n name: FieldName,\n error: ErrorOption\n ) => void\n ) => {\n data.userId = userId;\n setCoachRoleByUserIdMutate(data)\n .then(() => {\n // alert(\"done\");\n history.push(USER.replace(\":userId\", userId));\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n };\n\n return (\n \n Ret bruger oplysninger\n \n \n {user && (\n \n )}\n \n \n {user && (\n \n )}\n \n \n {user && (\n \n )}\n \n \n \n );\n}\n","import { queryCache } from \"react-query\";\nimport useMutationForForms from \"../useMutationForForms\";\nimport axios from \"./../../axios\";\nimport { UpdateWriteModelById } from \"./accountModels\";\n\nexport default function useUpdateAccountById() {\n return useMutationForForms(\n (data: UpdateWriteModelById) =>\n axios.post(`/api/account/UpdateByUserId?userId=${data.userId}`, data),\n {\n onSuccess: (data, updateData) => {\n queryCache.invalidateQueries([\"account-get-full\", updateData.userId]);\n }\n }\n );\n}\n","import { queryCache } from \"react-query\";\nimport useMutationForForms from \"../useMutationForForms\";\nimport axios from \"./../../axios\";\nimport { EmailSettingsWriteModelById } from \"./accountModels\";\n\nexport default function useUpdateAccountById() {\n return useMutationForForms(\n (data: EmailSettingsWriteModelById) =>\n axios.post(`/api/account/SetEmailSettingsByUserId?userId=${data.userId}`, data),\n {\n onSuccess: (data, updateData) => {\n queryCache.invalidateQueries([\"account-get-full\", updateData.userId]);\n }\n }\n );\n}\n","import { queryCache } from \"react-query\";\nimport useMutationForForms from \"../useMutationForForms\";\nimport axios from \"./../../axios\";\nimport { SetCoachRoleByUserIdWriteModel } from \"./accountModels\";\n\nexport default function useSetCoachRoleByUserId() {\n return useMutationForForms(\n (data: SetCoachRoleByUserIdWriteModel) =>\n axios.post(`/api/account/SetCoachRoleByUserId?userId=${data.userId}&enable=${data.enable}`),\n {\n onSuccess: (data, updateData) => {\n queryCache.invalidateQueries([\"account-get-full\", updateData.userId]);\n }\n }\n );\n}\n","import { useQuery } from \"react-query\";\nimport { AccountViewModel } from \"../account/accountModels\";\nimport axios from \"./../../axios\";\n\nconst getClasses = async (_: any, query: string) => {\n const { data } = await axios.get(`/api/Friendship/FindNewFriend`, {\n params: { query },\n });\n return data;\n};\n\nexport default function useFindNewFriend(query: string) {\n return useQuery([\"new-friends\", query], getClasses);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { FriendshipViewModel } from \"./friendshipModels\";\n\n\nconst getClasses = async (_: any) => {\n const { data } = await axios.get(`/api/Friendship/GetRequested`);\n return data;\n};\n\nexport default function useGetRequested() {\n return useQuery([\"friendrequested\"], getClasses);\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\n\nexport default function useRequestFriendship() {\n return useMutationWithError(\n (receiver: string) => axios.post(`/api/Friendship/SendRequest?receiver=${receiver}`),\n {\n onSuccess: (data, receiver) => {\n // Query Invalidations\n queryCache.invalidateQueries([\"friendrequested\"]);\n }\n }\n );\n // return useQuery([\"activeUserBookings\"], getBookings);\n}","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { FriendshipViewModel } from \"./friendshipModels\";\n\n\nconst getClasses = async (_: any) => {\n const { data } = await axios.get(`/api/Friendship/GetFriendships`);\n return data;\n};\n\nexport default function useGetFriends() {\n return useQuery([\"friends\"], getClasses);\n}\n","import React from \"react\";\nimport { Box } from \"../components/Box\";\nimport CustomButton from \"../components/CustomButton\";\nimport useFindNewFriend from \"../hooks/friendship/useFindNewFriend\";\nimport useGetRequested from \"../hooks/friendship/useGetRequested\";\nimport useRequestFriendship from \"../hooks/friendship/useRequestFriendship\";\nimport useGetFriends from \"../hooks/friendship/useGetFriends\";\nimport UserLine from \"./UserLine\";\nimport { CssTextField } from \"./form/TextInput\";\n\nimport styled from \"styled-components\";\nconst SearchBar = styled.div`\n margin-bottom: 20px;\n\n > div {\n width: 100%;\n }\n`;\nexport default function FindFriends() {\n // let match = useRouteMatch();\n const [query, setQuery] = React.useState(\"\");\n\n const { data: users } = useFindNewFriend(query);\n const { data: requested } = useGetRequested();\n const { data: friends } = useGetFriends();\n const [requestMutate] = useRequestFriendship();\n\n const handleRequest = (userId: string) => {\n requestMutate(userId);\n };\n\n return (\n <>\n \n \n {\n console.log(e.target.value)\n setQuery(e.target.value);\n }}\n /> \n \n {users && (\n
\n {users.map((u) => {\n var canRequest =\n requested &&\n !requested.find((x) => x.userId === u.id) &&\n friends &&\n !friends.find((x) => x.userId === u.id);\n return (\n \n {canRequest && (\n {\n handleRequest(u.id);\n }}\n >\n Anmod venskab\n \n )}\n \n );\n })}\n
\n )}\n
\n \n );\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { FriendshipFeedModel } from \"./friendshipModels\";\n\n\nconst getClasses = async (_: any) => {\n const { data } = await axios.get(`/api/Friendship/GetFeed`);\n return data;\n};\n\nexport default function useGetfeed() {\n return useQuery([\"friendfeed\"], getClasses);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"../../axios\";\nimport { ClassViewModel } from \"./classModels\";\n\nconst getClasses = async (_: any, classIds: string[]) => {\n const { data } = await axios.get(\n `/api/class/GetByIds?ids=${classIds.join(\"&ids=\")}`\n );\n return data;\n};\n\nexport default function useClassesByIds(\n classIds: string[],\n enabled: boolean = true\n) {\n return useQuery([\"classesbyids\", classIds], getClasses, {\n enabled: enabled,\n });\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { FriendshipViewModel } from \"./friendshipModels\";\n\n\nconst getClasses = async (_: any) => {\n const { data } = await axios.get(`/api/Friendship/GetRequests`);\n return data;\n};\n\nexport default function useGetRequests() {\n return useQuery([\"friendrequests\"], getClasses);\n}\n","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\n\nexport default function useDeleteFriendship() {\n return useMutationWithError(\n (friendship: string) => axios.delete(`/api/Friendship/delete?friendship=${friendship}`),\n {\n onSuccess: (data, friendship) => {\n // Query Invalidations\n queryCache.invalidateQueries([\"friends\"]);\n queryCache.invalidateQueries([\"friendrequests\"]);\n }\n }\n );\n // return useQuery([\"activeUserBookings\"], getBookings);\n}","import { queryCache } from \"react-query\";\nimport useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\n\nexport default function useApproveFriendship() {\n return useMutationWithError(\n (friendship: string) => axios.post(`/api/Friendship/approve?friendship=${friendship}`),\n {\n onSuccess: (data, friendship) => {\n // Query Invalidations\n queryCache.invalidateQueries([\"friends\"]);\n queryCache.invalidateQueries([\"friendrequests\"]);\n }\n }\n );\n // return useQuery([\"activeUserBookings\"], getBookings);\n}","import React from \"react\";\nimport { NavLink } from \"react-router-dom\";\nimport { Box, BoxHeader } from \"../components/Box\";\nimport useGetFeed from \"../hooks/friendship/useGetFeed\";\nimport useClassesByIds from \"../hooks/class/useClassesByIds\";\nimport useActiveUserBookings from \"../hooks/booking/useActiveUserBookings\";\nimport { BookingClass } from \"./../pages/Booking\";\nimport { FINDFRIENDS } from \"../routes\";\nimport CustomButton, { ThemeColor } from \"../components/CustomButton\";\nimport ButtonAligner from \"../components/ButtonAligner\";\n\nimport useGetRequests from \"../hooks/friendship/useGetRequests\";\nimport useDeleteFriendship from \"../hooks/friendship/useDeleteFriendship\";\nimport useApproveFriendship from \"../hooks/friendship/useApproveFriendship\";\nimport UserLine from \"./UserLine\";\nexport default function FriendsActivity() {\n // let match = useRouteMatch();\n const { data: feed } = useGetFeed();\n\n const { data: classes } = useClassesByIds(\n feed ? feed.map((x) => x.classId) : [],\n feed !== undefined && feed.length !== 0\n );\n\n const { data: bookings } = useActiveUserBookings();\n const { data: friendRequests } = useGetRequests();\n\n const [approveMutate] = useApproveFriendship();\n const [deleteMutate] = useDeleteFriendship();\n const handleApprove = (friendship: string) => {\n approveMutate(friendship);\n };\n const handleDelete = (friendship: string) => {\n deleteMutate(friendship);\n };\n return (\n <> \n {friendRequests && friendRequests.length > 0 && (\n \n Venneanmodninger\n\n
\n {friendRequests.map((x) => {\n return (\n \n {\n handleApprove(x.id);\n }}\n >\n Godkend\n \n {\n if (window.confirm(\"Er du sikker?\")) {\n handleDelete(x.id);\n }\n }}\n themecolor={ThemeColor.Black}\n >\n Afvis\n \n \n );\n })}\n
\n
\n )}\n \n {feed && (\n <>\n {feed.map((x) => {\n const classItem = classes?.find((b) => b.id === x.classId);\n const booking = bookings?.find((b) => b.classId === x.classId);\n return (\n classItem && (\n x.occupyActiveBookingSlot === true).length : 0}\n user={{\n firstName: x.firstName,\n lastName: x.lastName,\n id: x.userId,\n picture: x.picture,\n }}\n />\n )\n );\n })}\n {feed.length === 0 && (\n
\n

Ingen af dine venner har noget aktivitet

\n\n \n \n Find nye venner\n \n \n
\n )}\n \n )}\n
\n \n );\n}\n","import React from \"react\";\nimport { NavLink } from \"react-router-dom\";\nimport { Box, BoxHeader } from \"../components/Box\";\nimport { FINDFRIENDS } from \"../routes\";\nimport CustomButton, { ThemeColor } from \"../components/CustomButton\";\nimport ButtonAligner from \"../components/ButtonAligner\";\nimport useGetFriends from \"../hooks/friendship/useGetFriends\";\nimport useGetRequests from \"../hooks/friendship/useGetRequests\";\nimport useDeleteFriendship from \"../hooks/friendship/useDeleteFriendship\";\nimport useApproveFriendship from \"../hooks/friendship/useApproveFriendship\";\nimport UserLine from \"./UserLine\";\n\nexport default function FriendsList() {\n // let match = useRouteMatch();\n const { data: friends } = useGetFriends();\n const { data: friendRequests } = useGetRequests();\n\n const [approveMutate] = useApproveFriendship();\n const [deleteMutate] = useDeleteFriendship();\n const handleApprove = (friendship: string) => {\n approveMutate(friendship);\n };\n const handleDelete = (friendship: string) => {\n deleteMutate(friendship);\n };\n return (\n <>\n {friendRequests && friendRequests.length > 0 && (\n \n Venneanmodninger\n\n
\n {friendRequests.map((x) => {\n return (\n \n {\n handleApprove(x.id);\n }}\n >\n Godkend\n \n {\n if (window.confirm(\"Er du sikker?\")) {\n handleDelete(x.id);\n }\n }}\n themecolor={ThemeColor.Black}\n >\n Afvis\n \n \n );\n })}\n
\n
\n )}\n \n {friends && (\n
\n {friends.map((x) => {\n return (\n \n {\n if (window.confirm(\"Er du sikker?\")) {\n handleDelete(x.id);\n }\n }}\n themecolor={ThemeColor.Black}\n >\n Fjern venskab\n \n \n );\n })}\n {friends.length === 0 &&

Du har ingen venner endnu.

}\n
\n )}\n\n \n \n Find nye venner\n \n \n
\n \n );\n}\n","import React from \"react\";\nimport { NavLink, Route, Switch } from \"react-router-dom\";\nimport {\n PageContainer,\n ContentContainerBackgroundSize,\n} from \"../components/PageContainer\";\n\nimport { PageHeader } from \"../components/PageHeader\";\nimport {\n FINDFRIENDS,\n FRIENDS,\n FRIENDSACTIVITY,\n} from \"../routes\";\nimport { PageContent } from \"../components/PageContent\";\nimport styled from \"styled-components\";\nimport FindFriends from \"../components/FindFriends\";\nimport FriendsActivity from \"../components/FriendsActivity\";\nimport FriendsList from \"../components/FriendsList\";\n\nconst FriendsContainer = styled(PageContent)`\n grid-gap: 0;\n display: grid;\n grid-template-columns: auto;\n grid-template-rows: 80px minmax(0, 1fr);\n @media only screen and (min-width: 769px) {\n grid-template-rows: 50px minmax(0, 1fr);\n }\n grid-template-areas:\n \"friendslinks\"\n \"friendscontent\";\n\n @media only screen and (min-width: 769px) {\n overflow-y: auto;\n }\n`;\n\nconst LinksContainer = styled.div`\n grid-area: friendslinks;\n text-align: center;\n`;\n\nconst Link = styled(NavLink)`\n display: inline-block;\n padding: 10px 20px;\n margin: 0px 10px;\n text-decoration: none;\n font-weight: 600;\n\n color: var(--white);\n &:hover{\n color: var(--white);\n }\n border-radius: 16px;\n &.active {\n background: var(--black);\n }\n`;\nconst Content = styled.div`\n grid-area: friendscontent;\n`;\n\nexport default function Friends() {\n\n return (\n \n venner\n \n \n \n VENNE AKTIVITET\n \n \n MINE VENNER\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","export enum NotificationState {\n Unread = 0,\n Seen = 1,\n Read = 2,\n}\n\nexport enum NotificationType {\n UserAddedAsParticipantOnClass,\n ClassTimeUpdated,\n UserRemovedAsParticipantOnClass,\n UserRemovedAsParticipantOnClassBecauseClassCancelled,\n UserMovedFromWaitlistToParticipantOnClass,\n UserRemovedFromWaitlistOnClass,\n UserRemovedFromWaitlistOnClassBecauseClassCancelled,\n UserAddedToWaitlistOnClass,\n UserMarkedAsNoShowOnClass,\n UserUnmarkedAsNoShowOnClass,\n UserWaitlistPositionChangedOnClass,\n // UserParticipantPositionChangedOnClass,\n FriendshipCreated,\n FriendshipApproved,\n // FriendshipDeleted,\n MembershipCreated,\n MembershipUpdated,\n UserCreated,\n UserDetialsUpdated,\n UserPictureUpdated\n}\n\nexport interface NotificationSettingItem {\n type: NotificationType;\n typeText: string;\n push: boolean;\n email: boolean;\n}\n\nexport interface NotificationTextViewModel {\n id: string;\n userId: string;\n createdTimestamp: Date;\n readTimestamp?: Date;\n seenTimestamp?: Date;\n data: any;\n title: any;\n text: any;\n state: NotificationState;\n type: NotificationType;\n}\nexport interface UserAddedAsParticipantModel \n{\n classId: string;\n}\nexport interface UserAddedAsParticipantExtendedModel \n{\n className: string;\n start: Date;\n}\nexport interface SaveSettingsModel \n{\n notifications: NotificationSettingItem[];\n}\nexport interface RegisterTokenPayload \n{\n token: string;\n deviceId: string;\n}\n\nexport interface RegisterDevicePayload \n{\n deviceId: string;\n}\nexport interface RegisterDeviceResponse\n{\n requestedToSendNotifications: boolean;\n}\nexport interface RegisterToUserOnDevicePayload \n{\n deviceId: string;\n}\nexport interface UnRegisterToUserOnDevicePayload \n{\n deviceId: string;\n}\nexport interface RegisterRequestedToSendNotificationsPayload \n{\n deviceId: string;\n}","import React from \"react\";\n\nimport useActiveUserBookings from \"../hooks/booking/useActiveUserBookings\";\nimport useClasses from \"../hooks/class/useClasses\";\nimport { BookingClass } from \"../pages/Booking\";\n\nexport default function MyClasses() {\n // let match = useRouteMatch();\n\n const { data: classes, isLoading: classesIsLoading } = useClasses();\n const {\n data: bookings,\n isLoading: bookingsLoading,\n } = useActiveUserBookings();\n\n if (bookingsLoading || classesIsLoading) {\n return
Loading
;\n }\n return (\n
\n {bookings &&\n bookings.map((x) => {\n const classItem = classes?.find((c) => c.id === x.classId);\n return (\n classItem && (\n x.occupyActiveBookingSlot === true).length : 0}\n showDate={true}\n booking={x}\n class={classItem}\n />\n )\n );\n })}\n
\n );\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { NotificationTextViewModel } from \"./notificationModels\";\n\nconst get = async (_: any) => {\n const { data } = await axios.get(`/api/notification`);\n return data;\n};\n\nexport default function useGetNotifications() {\n return useQuery([\"notifications\"], get);\n}\n","import {\n // NotificationType,\n NotificationTextViewModel,\n // UserAddedAsParticipantExtendedModel,\n} from \"./hooks/notification/notificationModels\";\n\nimport React from \"react\";\nimport reactStringReplace from \"react-string-replace\";\n// import moment from \"moment\";\n\nexport interface NotiticationTextProps {\n model: NotificationTextViewModel;\n}\nexport function NotificationText({ model }: NotiticationTextProps) {\n var result = reactStringReplace(model.text, /#(.*?)#/g, (match, i) => {\n return {match};\n });\n return <>{result};\n\n // switch (model.type) {\n // case NotificationType.UserAddedToClass:\n // return ResolveUserAddedToClassNotificationText(model);\n\n // default:\n // return null;\n // }\n}\n\n// function ResolveUserAddedToClassNotificationText(model: NotificationTextViewModel) {\n// // var dataModel = model.data as UserAddedAsParticipantModel;\n// var extenedDataModel = model.extendedData as UserAddedAsParticipantExtendedModel;\n// if (!extenedDataModel) return null;\n// var start = moment(extenedDataModel.start);\n// return (\n// <>\n// {\" \"}\n// Du er på {extenedDataModel.className}{\" \"}\n// \n// {start.calendar(null, {\n// lastDay: \"[I går]\",\n// sameDay: \"[I dag]\",\n// nextDay: \"[I morgen]\",\n// lastWeek: \"[sidste] dddd\",\n// nextWeek: \"[på] dddd\",\n// sameElse: \"Do MMMM\",\n// })}\n// \n// {\" kl. \"}\n// {start.format(\"LT\")}\n// \n// );\n// }\n","import moment from \"moment\";\nimport React, { useEffect } from \"react\";\nimport { Box } from \"../components/Box\";\nimport {\n PageContainer,\n ContentContainerBackgroundSize,\n} from \"../components/PageContainer\";\nimport { PageHeader } from \"../components/PageHeader\";\nimport {\n NotificationState,\n NotificationTextViewModel,\n NotificationType,\n} from \"../hooks/notification/notificationModels\";\nimport useGetNotifications from \"../hooks/notification/useGetNotifications\";\nimport useMarkNotificationAsSeen from \"../hooks/notification/useMarkNotificationAsSeen\";\nimport { NotificationText } from \"../notifactionTextResolver\";\n\nimport styled, { css } from \"styled-components\";\nimport { PageContent } from \"../components/PageContent\";\nimport {\n // NavLink, \n useHistory,\n} from \"react-router-dom\";\nimport {\n CLASS,\n // NOTIFICATIONSSETTINGS,\n USER,\n} from \"../routes\";\nimport useMarkNotificationAsRead from \"../hooks/notification/useMarkNotificationAsRead\";\n// import ButtonAligner from \"../components/ButtonAligner\";\n// import CustomButton from \"../components/CustomButton\";\n\ntype NotificationProps = {\n state: NotificationState;\n};\nconst Notification = styled.div`\n &:not(:last-child) {\n border-bottom: 1px solid var(--grey3);\n padding-bottom: 10px;\n }\n\n &:not(:first-child) {\n padding-top: 10px;\n }\n\n cursor: pointer;\n ${(props) =>\n props.state === NotificationState.Unread &&\n css`\n background: rgba(236, 236, 236, 0.5);\n `}\n ${(props) =>\n props.state === NotificationState.Seen &&\n css`\n background: rgba(236, 236, 236, 0.25);\n `}\n`;\n\nconst Time = styled.div`\n text-transform: uppercase;\n // font-weight: 600;\n color: var(--grey2);\n`;\n\nexport default function Notifications() {\n const notifications = useGetNotifications();\n const [mutate11] = useMarkNotificationAsSeen();\n const [mutate22] = useMarkNotificationAsRead();\n const history = useHistory();\n const handleNotificationClick = (notification: NotificationTextViewModel) => {\n mutate22([notification.id]);\n switch (notification.type) {\n case NotificationType.ClassTimeUpdated:\n case NotificationType.UserAddedAsParticipantOnClass:\n case NotificationType.UserRemovedAsParticipantOnClass:\n case NotificationType.UserRemovedFromWaitlistOnClass:\n case NotificationType.UserRemovedAsParticipantOnClassBecauseClassCancelled:\n case NotificationType.UserRemovedFromWaitlistOnClassBecauseClassCancelled:\n case NotificationType.UserMovedFromWaitlistToParticipantOnClass:\n case NotificationType.UserAddedToWaitlistOnClass:\n case NotificationType.UserMarkedAsNoShowOnClass:\n case NotificationType.UserUnmarkedAsNoShowOnClass:\n case NotificationType.UserWaitlistPositionChangedOnClass:\n history.push(CLASS.replace(\":classId\", notification.data.classId));\n break;\n case NotificationType.FriendshipApproved:\n case NotificationType.FriendshipCreated:\n history.push(USER.replace(\":userId\", notification.data.userId));\n break;\n }\n };\n\n useEffect(() => {\n if (notifications.data) {\n var notSeen = notifications.data\n .filter((x) => x.state === NotificationState.Unread)\n .map((x) => x.id);\n if (notSeen.length > 0) {\n mutate11(notSeen);\n }\n }\n }, [mutate11, notifications.data]);\n return (\n \n Beskeder\n \n \n {notifications.isLoading &&
Loader
}\n {notifications.data &&\n notifications.data.map((x) => {\n var text = ;\n return (\n text && (\n handleNotificationClick(x)}\n >\n {text}\n \n \n )\n );\n })}\n
\n {/* \n \n \n Notifikationsindstillinger\n \n \n */}\n
\n
\n );\n}\n","import useMutationWithError from \"../useMutationWithError\";\nimport axios from \"./../../axios\";\n\nexport default function useMarkNotificationAsRead() {\n return useMutationWithError(\n (notificationIds) => {\n notificationIds = [...notificationIds];\n return axios.post(`/api/notification/MarkAsRead`, {\n notificationIds: notificationIds,\n });\n },\n {\n onSuccess: (data, notificationId) => {\n // Query Invalidations\n // queryCache.invalidateQueries([\"bookingsByClassId\", classId]);\n },\n }\n );\n\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { NotificationSettingItem } from \"./notificationModels\";\n\nconst get = async (_: any) => {\n const { data } = await axios.get(`/api/notification/GetSettings`);\n return data;\n};\n\nexport default function useGetNotificationsSettings() {\n return useQuery([\"notificationsSettings\"], get);\n}\n","import React, { useEffect, useState } from \"react\";\n\nimport { Box } from \"../components/Box\";\nimport {\n PageContainer,\n ContentContainerBackgroundSize,\n} from \"../components/PageContainer\";\nimport { PageHeader } from \"../components/PageHeader\";\nimport {\n NotificationSettingItem,\n NotificationState\n} from \"../hooks/notification/notificationModels\";\n\nimport styled from \"styled-components\";\nimport { PageContent } from \"../components/PageContent\";\nimport { useHistory } from \"react-router-dom\";\nimport { MESSAGES } from \"../routes\";\nimport {\n Checkbox,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n} from \"@material-ui/core\";\nimport ButtonAligner from \"../components/ButtonAligner\";\nimport CustomButton, { ThemeColor } from \"../components/CustomButton\";\nimport useGetNotificationsSettings from \"../hooks/notification/useGetNotificationsSettings\";\nimport useSaveNotificationsSettings from \"../hooks/notification/useSaveNotificationsSettings\";\n\ntype NotificationProps = {\n state: NotificationState;\n};\n\n\n\nconst CustomCheckbox = styled(Checkbox)`\n color: var(--red) !important;\n`;\n\nexport default function NotificationsSettings() {\n const history = useHistory();\n const settings = useGetNotificationsSettings();\n const [saveNotificationsSettingsMutate] = useSaveNotificationsSettings();\n const [settingsData, setSettingsData] = useState(\n []\n );\n const handleSave = () => {\n saveNotificationsSettingsMutate({ notifications: settingsData });\n history.push(MESSAGES)\n };\n useEffect(() => {\n if (settings.data) setSettingsData(settings.data);\n }, [settings.data]);\n return (\n \n Notifikationsindstillinger\n \n \n \n \n \n \n Type\n Mobil push\n E-mail\n \n \n \n {settingsData &&\n settingsData.map((elm, index) => {\n return (\n \n {elm.typeText}\n \n {\n var newArray = [...settingsData];\n newArray[index].push = !newArray[index].push;\n setSettingsData(newArray);\n }}\n />\n \n \n {\n var newArray = [...settingsData];\n newArray[index].email = !newArray[index].email;\n setSettingsData(newArray);\n }}\n />\n \n \n );\n })}\n \n
\n
\n
\n \n \n Gem Notifikationsindstillinger\n \n {\n history.goBack();\n }}\n themecolor={ThemeColor.Black}\n >\n Annuller\n \n \n
\n
\n
\n );\n}\n","import { useMutation } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { queryCache } from \"react-query\";\nimport { SaveSettingsModel } from \"./notificationModels\";\n\nexport default function useSaveNotificationsSettings() {\n return useMutation(\n (payload) => {\n return axios.post(`/api/notification/SaveSettings`, payload);\n },\n {\n onSuccess: (data, notificationId) => {\n // alert(\"ok ok\")\n // Query Invalidations\n queryCache.invalidateQueries([\"notificationsSettings\"]);\n },\n }\n );\n\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import React from \"react\";\nimport { FullAccountViewModel } from \"../hooks/account/accountModels\";\nimport { Box, BoxHeader } from \"./Box\";\n\nexport type UserDetailsProps = {\n user: FullAccountViewModel;\n children: React.ReactNode;\n};\nconst UserDetails = ({ user, children }: UserDetailsProps) => {\n return (\n <>\n {user && (\n \n Personlige oplysninger\n\n
\n NAVN\n
\n {user.firstName} {user.lastName}\n
\n
\n ADRESSE\n
\n {user.address}, {user.zipCode} {user.city}\n
\n
\n TELEFON\n
\n {user.phone}\n
\n
\n EMAIL ADRESSE\n
\n {user.email}\n
\n
\n {children}\n
\n )}\n \n );\n};\n\nexport default UserDetails;\n","export interface MembershipViewModel {\n id: string;\n userId: string;\n start: Date;\n expires: Date | null;\n type: MembershipType;\n punches: number;\n usedPunches: number;\n pbs: string;\n}\n\nexport interface MembershipCreateModel {\n userId: string;\n start: Date;\n expires: Date | null;\n type: MembershipType;\n punches: number;\n PBS: string;\n}\n\nexport interface MembershipUpdateModel {\n userId: string;\n start: Date;\n expires: Date | null;\n membershipId: string;\n punches: number;\n PBS: string;\n}\n\nexport enum MembershipType {\n Free = 0,\n Rolling = 1,\n PunchCard = 2\n}\n\n\n\nexport interface MembershipStatsModel {\n totalMemberships: string[];\n freeMemberships: string[];\n rollingMemberships: string[];\n punchCardMemberships:string[];\n expiresSoon: string[];\n expired: string[];\n coaches: string[];\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { MembershipViewModel } from \"./membershipModels\";\n\n\nconst getMemberships = async (_: any) => {\n const { data } = await axios.get(`/api/Membership`);\n return data;\n};\n\nexport default function useGetMemberships() {\n return useQuery([\"memberships\"], getMemberships);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { MembershipViewModel } from \"./membershipModels\";\n\n\nconst getMemberships = async (_: any, userId: string) => {\n const { data } = await axios.get(`/api/Membership/GetByUserId/${userId}`);\n return data;\n};\n\nexport default function useMembershipsByUserId(userId: string) {\n return useQuery([\"memberships\", userId], getMemberships);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { BookingViewModel } from \"./bookingModels\";\n\nconst getBookings = async (_: any, membershipId: string) => {\n const { data } = await axios.get(\n `/api/booking/GetByMembershipId?membershipId=${membershipId}`\n );\n return data;\n};\n\nexport default function useBookingsByMembershipId(\n membershipId: string,\n enabled: boolean = true\n) {\n return useQuery(\n [\"bookingsByMembershipId\", membershipId],\n getBookings,\n {\n enabled: enabled,\n }\n );\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { BookingViewModel } from \"./bookingModels\";\n\nconst getBookings = async (_: any, userId: string, membershipId: string) => {\n const { data } = await axios.get(\n `/api/booking/GetByUserIdAndMembershipId?userId=${userId}&membershipId=${membershipId}`\n );\n return data;\n};\n\nexport default function useBookingsByUserIdAndMembershipId(\n userid: string,\n membershipId: string,\n enabled: boolean = true\n) {\n return useQuery(\n [\"bookingsByMembershipId\", userid, membershipId],\n getBookings,\n { enabled: enabled }\n );\n}\n","import React, { useState } from \"react\";\nimport { AxiosError } from \"axios\";\n\nimport styled from \"styled-components\";\nimport { useForm } from \"react-hook-form\";\nimport ErrorSummary, { addServerErrors } from \"../components/ErrorSummary\";\nimport {\n MembershipCreateModel,\n MembershipType,\n MembershipUpdateModel,\n MembershipViewModel,\n} from \"../hooks/membership/membershipModels\";\nimport useCreateMembership from \"../hooks/membership/useCreateMembership\";\nimport useGetMemberships from \"../hooks/membership/useMemberships\";\nimport useGetMembershipsByUserId from \"../hooks/membership/useMembershipsByUserId\";\nimport moment from \"moment\";\nimport { Box, BoxHeader } from \"./Box\";\nimport useBookingsByMembershipId from \"../hooks/booking/useBookingsByMembershipId\";\nimport useBookingsByUserIdAndMembershipId from \"../hooks/booking/useBookingsByUserIdAndMembershipId\";\nimport useClassesByIds from \"../hooks/class/useClassesByIds\";\nimport { BookingClass } from \"../pages/Booking\";\nimport { DatePicker } from \"@material-ui/pickers\";\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n MenuItem,\n} from \"@material-ui/core\";\nimport useUpdateMembership from \"../hooks/membership/useUpdateMembership\";\nimport CustomButton from \"./CustomButton\";\nimport ButtonAligner from \"./ButtonAligner\";\nimport TextInput from \"./form/TextInput\";\nimport Dropdown from \"./form/Dropdown\";\nexport type UserMembershipsProps = {\n userId: string;\n};\n\nexport type MembershipProps = {\n membership: MembershipViewModel;\n userid: string | undefined;\n};\nexport type MembershipTableProps = {\n memberships: MembershipViewModel[] | undefined;\n userid: string | undefined;\n};\n\nconst Hello = styled.div`\n display: flex;\n justify-content: space-between;\n\n &:not(:last-child) {\n border-bottom: 1px solid var(--grey3);\n padding-bottom: 10px;\n margin-bottom: 10px;\n }\n`;\nconst Bookings = styled.div`\n &:not(:last-child) {\n border-bottom: 1px solid var(--grey3);\n padding-bottom: 10px;\n margin-bottom: 10px;\n }\n`;\n\nconst Membership = ({ membership, userid }: MembershipProps) => {\n const [showDetails, setShowDetails] = useState(false);\n const [showEdit, setShowEdit] = useState(false);\n\n const {\n data: adminBookings,\n isLoading: adminBookingLoading,\n } = useBookingsByUserIdAndMembershipId(\n userid ? userid : \"\",\n membership.id,\n\n showDetails && userid !== undefined\n );\n\n const {\n data: pesantbookings,\n isLoading: pesantBookingLoading,\n } = useBookingsByMembershipId(\n membership.id,\n showDetails && userid === undefined\n );\n\n const bookings = adminBookings || pesantbookings;\n const loadingBookings = adminBookingLoading || pesantBookingLoading;\n\n const { data: classes, isLoading: classesLoading } = useClassesByIds(\n bookings ? bookings.map((x) => x.classId) : [],\n bookings !== undefined && bookings.length !== 0\n );\n const handleClickOpen = () => {\n setShowEdit(true);\n };\n\n const handleClose = () => {\n setShowEdit(false);\n };\n\n const {\n handleSubmit,\n setError,\n\n control,\n } = useForm();\n\n const [startDate, setStartDate] = useState(membership.start);\n const [endDate, setEndDate] = useState(membership.expires);\n const [createClassMutate] = useUpdateMembership();\n const onSubmit = (data: MembershipUpdateModel) => {\n data.membershipId = membership.id;\n data.userId = membership.userId;\n data.start = startDate;\n data.expires = endDate;\n createClassMutate(data)\n .then(() => {\n setShowEdit(false);\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n };\n return (\n <>\n \n
\n
\n \n {userid !== undefined &&\n membership.type === MembershipType.Free && <>Gratis}\n {membership.type === MembershipType.PunchCard && (\n <>\n KLIPPEKORT - {membership.usedPunches} ud af{\" \"}\n {membership.punches} klip brugt{\" \"}\n \n )}\n {userid !== undefined &&\n membership.type === MembershipType.Rolling && <>Almindelig}\n {\" \"}\n
\n
\n START: {moment(membership.start).format(\"LL\")}\n
\n {membership.expires && (\n
\n UDLØB: {moment(membership.expires).format(\"LL\")}\n
\n )}\n {userid !== undefined && membership.pbs && (\n
\n PBS: {membership.pbs}\n
\n )}\n
\n
\n {!loadingBookings && !classesLoading && (\n {\n setShowDetails(!showDetails);\n }}\n >\n {showDetails\n ? \"Skjul bookinger\"\n : \"Vis bookinger (\" + membership.usedPunches + \")\"}\n \n )}\n {userid !== undefined && (\n {\n handleClickOpen();\n }}\n >\n RET\n \n )}\n
\n \n Ret\n
\n \n Ret medlemskab\n\n
\n {\n if (date) setStartDate(date);\n }}\n animateYearScrolling\n />\n
\n
\n {\n setEndDate(date);\n }}\n animateYearScrolling\n />\n
\n\n {membership.type === 2 && (\n \n )}\n {membership.type === 1 && (\n \n )}\n
\n \n \n Annuller\n \n \n Ret medlemskab\n \n \n
\n \n
\n {showDetails && (\n \n {showDetails &&\n bookings &&\n bookings.map((booking) => {\n const classItem = classes?.find((b) => b.id === booking.classId);\n if (!classItem) {\n return null;\n }\n return (\n x.occupyActiveBookingSlot === true).length : 0}\n />\n );\n })}\n {showDetails &&\n bookings &&\n bookings.length === 0 &&\n !loadingBookings &&
Ingen bookinger
}\n
\n )}\n \n );\n};\n\nconst MembershipTable = ({ memberships, userid }: MembershipTableProps) => {\n return (\n <>\n {memberships && (\n
\n {memberships.map((x) => (\n \n ))}\n
\n )}\n \n );\n};\nexport const UserMemberships = () => {\n const { data: memberships, isLoading } = useGetMemberships();\n\n return (\n \n Medlemsskab\n {isLoading &&
Loader..
}\n {memberships && memberships.length > 0 && (\n \n )}\n {memberships && memberships.length === 0 && (\n

Du har ikke et aktivt medlemskab. Kontakt CrossFit8500.

\n )}\n
\n );\n};\nconst UserMembershipsById = ({ userId }: UserMembershipsProps) => {\n // const { data: memberships, isLoading } = userId ? useGetMembershipsByUserId(userId) : useGetMemberships();\n const { data: memberships, isLoading } = useGetMembershipsByUserId(userId);\n\n const [createMutate] = useCreateMembership();\n const {\n register,\n handleSubmit,\n errors,\n control,\n setValue,\n setError,\n } = useForm();\n\n const [startDate, setStartDate] = useState(new Date());\n const [endDate, setEndDate] = useState(null);\n\n const onSubmit = (data: MembershipCreateModel) => {\n data.start = startDate;\n data.expires = endDate;\n createMutate(data)\n .then(() => {\n setOpen(false);\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n };\n\n const [open, setOpen] = React.useState(false);\n const [cctype, setCctype] = React.useState(1);\n\n return (\n \n Medlemsskab\n\n {isLoading &&
Loading
}\n \n \n setOpen(true)}>\n Tilføj nyt medlemskab\n \n \n {\n setOpen(false);\n }}\n aria-labelledby=\"form-dialog-title\"\n >\n Tilføj medlemskab\n
\n \n Tilføj medlemskab\n {/* register your input into the hook by invoking the \"register\" function */}\n \n ) => {\n var values = event.target.value as number;\n setValue(\"type\", values);\n setCctype(values);\n }}\n >\n Almindelig\n Klippekort\n Gratis\n \n {cctype === 2 && (\n \n )}\n
\n {\n if (date) setStartDate(date);\n }}\n animateYearScrolling\n />\n
{\" \"}\n
\n {\n setEndDate(date);\n }}\n animateYearScrolling\n />\n
\n {cctype === 1 && (\n \n )}\n \n
\n \n {\n setOpen(false);\n }}\n color=\"primary\"\n >\n Annuller\n \n \n Gem\n \n \n
\n \n
\n );\n};\n\nexport default UserMembershipsById;\n","import { queryCache } from \"react-query\";\nimport axios from \"../../axios\"\nimport useMutationWithError from \"../useMutationWithError\";\nimport { MembershipUpdateModel, MembershipViewModel } from \"./membershipModels\";\n\n\nexport default function useUpdateMembership() {\n return useMutationWithError(\n (data: MembershipUpdateModel) => axios.post(`/api/membership/update`, data),\n {\n onSuccess: () => {\n // Query Invalidations\n queryCache.invalidateQueries(\"memberships\");\n },\n }\n );\n}\n","import { queryCache } from \"react-query\";\nimport axios from \"../../axios\"\nimport useMutationWithError from \"../useMutationWithError\";\nimport { MembershipCreateModel, MembershipViewModel } from \"./membershipModels\";\n\n\nexport default function useCreateMembership() {\n return useMutationWithError(\n (data: MembershipCreateModel) => axios.post(`/api/membership`, data),\n {\n onSuccess: () => {\n // Query Invalidations\n queryCache.invalidateQueries(\"memberships\");\n },\n }\n );\n}\n","import React from \"react\";\nimport { useRef } from \"react\";\nimport { AccountViewModel } from \"../hooks/account/accountModels\";\nimport useSetPicture from \"../hooks/account/useSetPicture\";\nimport useSetPictureById from \"../hooks/account/useSetPictureById\";\n\nimport styled from \"styled-components\";\nexport type UserDetailsProps = {\n user: AccountViewModel;\n isAdmin: boolean;\n canEdit: boolean;\n};\n\nconst PictureContainer = styled.div`\n text-align: center;\n position: relative;\n`;\nconst Picture = styled.img`\n width: 150px;\n height: 150px;\n border-radius: 50%;\n margin: 10px;\n`;\n\nconst EditOverlay = styled.div`\n width: 150px;\n height: 150px;\n border-radius: 50%;\n margin: 10px;\n position: absolute;\n overflow: hidden;\n display: inline-block;\n\n & div {\n height: 45px;\n position: absolute;\n width: 100%;\n bottom: 0;\n color: var(--white);\n background-color: rgba(0, 0, 0, 0.7);\n padding-top: 10px;\n text-transform: uppercase;\n font-size: 12px;\n }\n`;\n\nconst UserPicture = ({ user, isAdmin, canEdit }: UserDetailsProps) => {\n const [setPictureByIdMutate] = useSetPictureById();\n\n const [setPictureMutate] = useSetPicture();\n const inputFile = useRef(null);\n const handleUploadClick = () => {\n if (!canEdit) {\n return;\n }\n if (inputFile !== null && inputFile.current !== null) {\n inputFile.current.click();\n }\n };\n const handleInputChange = (e: React.ChangeEvent) => {\n if (!canEdit) {\n return;\n }\n var files = e?.target?.files;\n if (files !== null && files.length > 0) {\n let formData = new FormData();\n formData.append(\"picture\", files[0]);\n if (files !== null && files.length > 0) {\n if (isAdmin) {\n setPictureByIdMutate({\n userId: user.id,\n formData: formData,\n });\n } else {\n setPictureMutate({\n formData: formData,\n });\n }\n }\n // const model: SetPictureWriteModel = {};\n //\n // axios.post(\"/api/account/SetPicture\", formData, {\n // headers: {\n // \"Content-Type\": \"multipart/form-data\",\n // },\n // onUploadProgress: (event: any) => {\n // console.log(Math.round((100 * event.loaded) / event.total));\n // },\n // });\n }\n };\n return (\n \n {canEdit && (\n \n
Nyt billede
\n
\n )}\n \n\n \n
\n );\n};\n\nexport default UserPicture;\n","import { queryCache } from \"react-query\";\nimport useMutationForForms from \"../useMutationForForms\";\nimport axios from \"./../../axios\";\nimport { SetPictureWriteModelById } from \"./accountModels\";\n\nexport default function useSetPictureById() {\n return useMutationForForms(\n (data: SetPictureWriteModelById) =>\n axios.post(\n `/api/account/SetPictureByUserId?userId=${data.userId}`,\n data.formData,\n {\n headers: {\n \"Content-Type\": \"multipart/form-data\",\n },\n onUploadProgress: (event: any) => {\n console.log(Math.round((100 * event.loaded) / event.total));\n },\n }\n ),\n {\n onSuccess: (data, updateData) => {\n queryCache.invalidateQueries([\"me\"]);\n },\n }\n );\n}\n","import { queryCache } from \"react-query\";\nimport useMutationForForms from \"../useMutationForForms\";\nimport axios from \"./../../axios\";\nimport { SetPictureWriteModel } from \"./accountModels\";\n\nexport default function useSetPicture() {\n return useMutationForForms(\n (data: SetPictureWriteModel) =>\n axios.post(`/api/account/SetPicture`, data.formData, {\n headers: {\n \"Content-Type\": \"multipart/form-data\",\n },\n onUploadProgress: (event: any) => {\n console.log(Math.round((100 * event.loaded) / event.total));\n },\n }),\n {\n onSuccess: (data, updateData) => {\n queryCache.invalidateQueries([\"me\"]);\n },\n }\n );\n}\n","import React, { useState } from \"react\";\nimport { NavLink } from \"react-router-dom\";\nimport {\n PageContainer,\n ContentContainerBackgroundSize,\n} from \"../components/PageContainer\";\n\nimport { Box, BoxHeader } from \"../components/Box\";\nimport { PageHeader } from \"../components/PageHeader\";\nimport { PageContent } from \"../components/PageContent\";\nimport UserDetails from \"../components/UserDetails\";\nimport { UserMemberships } from \"../components/UserMemberships\";\nimport UserPicture from \"../components/UserPicture\";\nimport useMe from \"../hooks/account/useMe\";\nimport { EDITPROFILE, LOGOUT } from \"../routes\";\nimport CustomButton from \"../components/CustomButton\";\nimport ButtonAligner from \"../components/ButtonAligner\";\nimport axios from \"../axios\";\n\nexport default function Profile() {\n // let match = useRouteMatch();\n const { data } = useMe();\n\n const [clicks, setClicks] = useState(0);\n const [versionfromtxt, setversionfromtxt] = useState(\"\");\n const [onlineversion, setonlineversion] = useState(\"\");\n const [autoupdateEnabled, setautoupdateEnabled] = useState(localStorage.getItem(\"autoupdate\") === 'true');\n const [showDiagnostics, setShowDiagnostics] = useState(false);\n const handleHiddenClick = () => {\n setClicks(clicks + 1);\n if (clicks > 3) {\n setClicks(0);\n setShowDiagnostics(true);\n axios\n .get(`/current-version.txt?timestamp=${new Date().getTime()}`, {\n //set to override default base url\n baseURL: \"\",\n })\n .then((res) => {\n setversionfromtxt(res.data);\n });\n axios\n .get(\n `https://crossfit.prokode.dk/current-version.txt?timestamp=${new Date().getTime()}`\n )\n .then((res) => {\n setonlineversion(res.data);\n });\n }\n };\n\n const toggleAutoUpdate = () => {\n if (localStorage.getItem(\"autoupdate\")) {\n localStorage.removeItem(\"autoupdate\");\n setautoupdateEnabled(false);\n } else {\n localStorage.setItem(\"autoupdate\", \"true\");\n setautoupdateEnabled(true);\n }\n };\n return (\n \n Profil\n \n {data && }\n {data && (\n \n \n \n Ret mine oplysninger\n \n \n \n )}\n\n \n {showDiagnostics && (\n \n Debug\n

\n Akutuelle version fra env:{\" \"}\n {process.env.REACT_APP_VERSION}\n

\n

\n Akutuelle version fra txt: {versionfromtxt}\n

\n

\n Tilgængelig version fra txt (web):{\" \"}\n {onlineversion}\n

\n

Auto update enabled: {autoupdateEnabled ? \"Ja\" : \"Nej\"}

\n \n \n Toggle auto update\n \n \n
\n )}\n \n \n \n Log ud\n \n \n {/* Opdater */}\n \n
\n
\n );\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { AccountViewModel } from \"./accountModels\";\n\nconst getGet = async (_: any, userId: string) => {\n const { data } = await axios.get(\n `/api/account/getuser`,\n { params: { userId } }\n );\n return data;\n};\n\nexport default function useGetUser(\n userId: string,\n enabled: boolean = true\n) {\n return useQuery([\"account-get\", userId], getGet, { enabled: enabled });\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\"\nimport { FriendshipFeedModel } from \"./friendshipModels\";\n\n\nconst getClasses = async (_: any, friendUserId: string) => {\n const { data } = await axios.get(`/api/Friendship/GetUserFeed?friendUserId=${friendUserId}`);\n return data;\n};\n\nexport default function useGetUserfeed(friendUserId: string, enabled: boolean = true) {\n return useQuery([\"friendfeed\", friendUserId], getClasses, {enabled:enabled});\n} \n ","import React from \"react\";\nimport { NavLink, useParams } from \"react-router-dom\";\nimport UserDetails from \"../components/UserDetails\";\nimport UserMemberships from \"../components/UserMemberships\";\nimport UserPicture from \"../components/UserPicture\";\nimport useGetFullUser from \"../hooks/account/useGetFullUser\";\nimport useGetUser from \"../hooks/account/useGetUser\";\nimport useGetUserfeed from \"../hooks/friendship/useGetUserFeed\";\nimport { EDITUSER } from \"../routes\";\nimport {\n PageContainer,\n ContentContainerBackgroundSize,\n} from \"../components/PageContainer\";\n\nimport useActiveUserBookings from \"../hooks/booking/useActiveUserBookings\";\nimport styled from \"styled-components\";\nimport { Box, BoxHeader } from \"../components/Box\";\nimport { PageHeader } from \"../components/PageHeader\";\nimport { PageContent } from \"../components/PageContent\";\nimport { useAuthState } from \"../Context/AuthProvider\";\nimport useGetRequested from \"../hooks/friendship/useGetRequested\";\nimport useRequestFriendship from \"../hooks/friendship/useRequestFriendship\";\nimport useGetFriends from \"../hooks/friendship/useGetFriends\";\nimport CustomButton, { ThemeColor } from \"../components/CustomButton\";\nimport ButtonAligner from \"../components/ButtonAligner\";\nimport useClassesByIds from \"../hooks/class/useClassesByIds\";\nimport { BookingClass } from \"./Booking\";\nimport useGetRequests from \"../hooks/friendship/useGetRequests\";\nimport useDeleteFriendship from \"../hooks/friendship/useDeleteFriendship\";\nimport useApproveFriendship from \"../hooks/friendship/useApproveFriendship\";\ninterface UserParams {\n userId: string;\n}\nconst UserName = styled.div`\n color: var(--white);\n font-weight: 600;\n font-size: 14px;\n text-align: center;\n text-transform: uppercase;\n margin-bottom: 10px;\n`;\nexport default function User() {\n let { userId } = useParams();\n\n const userDetails = useAuthState();\n const isAdmin =\n (userDetails.user &&\n userDetails?.user?.roles?.indexOf(\"Administrator\") > -1) === true;\n const { data: user } = useGetFullUser(userId, isAdmin);\n const { data: publicUser, isLoading: publicuserLoading } = useGetUser(userId);\n const { data: requested } = useGetRequested();\n const { data: requests } = useGetRequests();\n\n const { data: friends } = useGetFriends();\n const isFriends =\n (friends && friends.find((x) => x.userId === userId)) !== undefined;\n const { data: userFeed } = useGetUserfeed(userId, isFriends || isAdmin);\n const [requestMutate] = useRequestFriendship();\n\n var request = requests && requests.find((x) => x.userId === userId);\n\n var canRequest =\n requested &&\n !requested.find((x) => x.userId === userId) &&\n !request &&\n friends &&\n !friends.find((x) => x.userId === userId);\n\n const handleRequest = (userId: string) => {\n requestMutate(userId);\n };\n\n const [approveMutate] = useApproveFriendship();\n const [deleteMutate] = useDeleteFriendship();\n const handleApprove = (friendship: string) => {\n approveMutate(friendship);\n };\n const handleDelete = (friendship: string) => {\n deleteMutate(friendship);\n };\n const { data: classes } = useClassesByIds(\n userFeed ? userFeed.map((x) => x.classId) : [],\n userFeed !== undefined && userFeed.length !== 0\n );\n\n const { data: bookings } = useActiveUserBookings();\n\n return (\n \n Medlem\n \n {publicUser && (\n \n )}\n {publicUser && (\n \n {publicUser.firstName} {publicUser.lastName}\n \n )}\n {publicuserLoading && Henter info..}\n\n {isAdmin && user && (\n \n \n \n Ret oplysninger\n \n \n \n )}\n\n {isAdmin && }\n\n {(isFriends || isAdmin) && (\n \n AKTIVITET\n\n {userFeed &&\n userFeed.map((x) => {\n const classItem = classes?.find((b) => b.id === x.classId);\n const booking = bookings?.find((b) => b.classId === x.classId);\n return (\n classItem && (\n x.occupyActiveBookingSlot === true).length : 0}\n user={{\n firstName: x.firstName,\n lastName: x.lastName,\n id: x.userId,\n picture: x.picture,\n }}\n />\n )\n );\n })}\n {userFeed && userFeed.length === 0 && <>Ingen aktivitet}\n \n )}\n {!isFriends && (\n \n {canRequest && (\n \n {\n handleRequest(userId);\n }}\n >\n Anmod om venskab\n \n \n )}\n {request && (\n \n {\n if (request) handleApprove(request.id);\n }}\n >\n Godkend\n \n {\n if (window.confirm(\"Er du sikker?\")) {\n if (request) handleDelete(request.id);\n }\n }}\n themecolor={ThemeColor.Black}\n >\n Afvis\n \n \n )}\n \n )}\n \n \n );\n}\n","import { useQuery } from \"react-query\";\nimport { PagedResultModel } from \"../pagedResultModel\";\nimport axios from \"./../../axios\"\nimport { AccountWithHightlightsViewModel } from \"./accountModels\";\n\n\nconst getGet = async (_: any, page: number, pageSize: number, query: string) => {\n\n const { data } = await axios.get>(`/api/account/get`, { params: { page, pageSize, query } });\n return data;\n};\n\nexport default function useGet(page: number, pageSize: number, query: string) {\n return useQuery([\"account-get\", page, pageSize, query], getGet);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { MembershipStatsModel } from \"./membershipModels\";\n\nconst getMemberships = async (_: any) => {\n const { data } = await axios.get(`/api/membership/GetStats`);\n return data;\n};\n\nexport default function useMembershipStats() {\n return useQuery([\"membership-stats\"], getMemberships);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { MembershipViewModel } from \"./membershipModels\";\n\nconst getMemberships = async (_: any) => {\n const { data } = await axios.get(`/api/membership/GetPBS`);\n return data;\n};\n\nexport default function useMembershipPBS() {\n return useQuery([\"membership-pbs\"], getMemberships);\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { AccountWithHightlightsViewModel } from \"./accountModels\";\n\nconst getGet = async (_: any, ids: string[]) => {\n const { data } = await axios.post<\n AccountWithHightlightsViewModel[]\n >(`/api/account/GetUsersById`, { ids: ids });\n return data;\n};\n\nexport default function useGetUsersById(\n ids: string[],\n enabled: boolean = true\n) {\n return useQuery([\"account-get-by-ids\", ids], getGet, { enabled: enabled });\n}\n","import { useQuery } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { NoShowMonthModel } from \"./bookingModels\";\n\nconst getMemberships = async (_: any) => {\n const { data } = await axios.get(`/api/booking/GetNoShows`);\n return data;\n};\n\nexport default function useGetNoShows() {\n return useQuery([\"GetNoShows\"], getMemberships);\n}\n","import CustomButton from \"../components/CustomButton\";\nimport React from \"react\";\nimport { Link, useRouteMatch } from \"react-router-dom\";\nimport useGet from \"../hooks/account/useGet\";\nimport {\n PageContainer,\n ContentContainerBackgroundSize,\n} from \"../components/PageContainer\";\nimport { PageHeader } from \"../components/PageHeader\";\nimport { Box, BoxHeader } from \"../components/Box\";\nimport useMembershipStats from \"../hooks/membership/useMembershipStats\";\nimport useMembershipPBS from \"../hooks/membership/useMembershipPBS\";\nimport useGetUsersById from \"../hooks/account/useGetUsersById\";\nimport useGetNoShows from \"../hooks/booking/useGetNoShows\";\nimport UserLine from \"../components/UserLine\";\nimport { PageContent } from \"../components/PageContent\";\nimport {\n Paper,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n} from \"@material-ui/core\";\nimport moment from \"moment\";\nexport default function Users() {\n const [page, setPage] = React.useState(1);\n const [title, setTitle] = React.useState(\"\");\n const [ids, setIds] = React.useState([]);\n const [query, setQuery] = React.useState(\"\");\n const { data: users, isLoading: usersLoading } = useGet(page, 10, query);\n const { data: stats } = useMembershipStats();\n const { data: PBS } = useMembershipPBS();\n const { data: noshows } = useGetNoShows();\n const { data: usersFromStats, isLoading: usersFromStatsLoading } =\n useGetUsersById(ids, ids.length > 0);\n\n const { data: noShowUsers } = useGetUsersById(\n noshows !== undefined\n ? noshows\n .map((x) => x.users.map((y) => y.userId))\n .reduce((accumulator, value) => accumulator.concat(value), [])\n : [],\n noshows && noshows.length > 0\n );\n\n const { data: pbsUsers } = useGetUsersById(\n PBS !== undefined ? PBS.map((x) => x.userId) : [],\n PBS && PBS.length > 0\n );\n\n const show = (title: string, ids: string[]) => {\n setTitle(title);\n setIds(ids);\n };\n let match = useRouteMatch();\n return (\n \n Medlemmer\n \n \n SØG MEDLEM\n {\n setQuery(e.currentTarget.value);\n }}\n />\n {usersLoading &&
Loading
}\n {users && (\n
\n {users.items.map((u) => {\n return ;\n })}\n\n {users.showFirstPage && (\n <>\n {\n setPage(1);\n }}\n >\n 1\n \n ...\n \n )}\n {users.pages.map((p) => (\n {\n setPage(p);\n }}\n >\n {p}\n \n ))}\n\n {users.showLastPage && (\n <>\n ...\n {\n setPage(users.totalPages);\n }}\n >\n {users.totalPages}\n \n \n )}\n
\n )}\n
\n\n \n MEDLEM STATISTIK\n

\n Antal brugere: {users?.totalRecords}\n

\n MEDLEMSKAB STATISTIK\n

\n Antal aktive medlemskaber:{\" \"}\n {stats?.totalMemberships.length}{\" \"}\n {stats && (\n {\n show(\"Aktive\", stats.totalMemberships);\n }}\n >\n Vis brugere\n \n )}{\" \"}\n
\n Antal med gratis medlemskab:{\" \"}\n {stats?.freeMemberships.length}.{\" \"}\n {stats && (\n {\n show(\"Gratis\", stats.freeMemberships);\n }}\n >\n Vis brugere\n \n )}\n
\n Antal med almindeligt medlemskab:{\" \"}\n {stats?.rollingMemberships.length}.{\" \"}\n {stats && (\n {\n show(\"Almindelig\", stats.rollingMemberships);\n }}\n >\n Vis brugere\n \n )}\n
\n Antal med klippekort medlemskab:{\" \"}\n {stats?.punchCardMemberships.length}.\n {stats && (\n {\n show(\"Klippekort\", stats.punchCardMemberships);\n }}\n >\n Vis brugere\n \n )}{\" \"}\n

\n

\n Brugere hvis medlemskab udløber inden for næste 14\n dage: {stats?.expiresSoon.length}{\" \"}\n {stats && (\n {\n show(\"Udløber næste 14 dage\", stats.expiresSoon);\n }}\n >\n Vis brugere\n \n )}\n

\n

\n Brugere hvis medlemskab udløb inden for sidste 7\n dage: {stats?.expired.length}\n {stats && (\n {\n show(\"Udløbet sidste 7 dage\", stats.expired);\n }}\n >\n Vis brugere\n \n )}\n

\n

\n Brugere som er instrukører: {stats?.coaches.length}\n {stats && (\n {\n show(\"Instruktører\", stats.coaches);\n }}\n >\n Vis brugere\n \n )}\n

\n\n {title !== \"\" && (usersFromStats || usersFromStatsLoading) && (\n <>\n {title}\n

\n {usersFromStats &&\n usersFromStats.map((u) => {\n return (\n

\n \n {u.firstName} {u.lastName}\n \n
\n );\n })}\n

\n \n )}\n\n IKKE MØDT OP STATISTIK\n

\n {noshows &&\n noshows.map((x) => {\n return (\n

\n

\n {x.month}\n

\n {x.users.map((y) => {\n const user =\n noShowUsers &&\n noShowUsers.find((x) => x.id === y.userId);\n return (\n
\n {user && (\n \n {user.firstName} {user.lastName}\n \n )}{\" \"}\n ikke mødt op {y.count} gange\n
\n );\n })}\n
\n );\n })}\n

\n PBS LISTE\n \n \n \n \n Navn\n PBS\n Start\n Udløb\n \n \n \n {PBS &&\n PBS.map((x) => {\n const user = pbsUsers && pbsUsers.find((y) => y.id === x.userId);\n return (\n \n \n {user && (\n \n {user.firstName} {user.lastName}\n \n )}{\" \"}\n \n {x.pbs}\n {moment(x.start).format(\"LL\")}\n {x.expires ? moment(x.expires).format(\"LL\") : \"-\"}\n\n \n );\n })}\n \n
\n
\n
\n
\n
\n );\n}\n","import React from \"react\";\nimport { Switch } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport AppRoute from \"../AppRoute\";\nimport Booking from \"../pages/Booking\";\nimport Class from \"../pages/Class\";\nimport ClassSetup from \"../pages/ClassSetup\";\nimport ClassTypes from \"../pages/ClassTypes\";\nimport Dashboard from \"../pages/Dashboard\";\nimport DefaultClasses from \"../pages/DefaultClasses\";\nimport EditProfile from \"../pages/EditProfile\";\nimport EditUser from \"../pages/EditUser\";\nimport Friends from \"../pages/Friends\";\nimport MyClasses from \"../pages/MyClasses\";\nimport Notifications from \"../pages/Notifications\";\nimport NotificationsSettings from \"../pages/NotificationsSettings\";\nimport Profile from \"../pages/Profile\";\nimport User from \"../pages/User\";\nimport Users from \"../pages/Users\";\nimport {\n BOOKING,\n CLASS,\n CLASSSETUP,\n CLASSTYPES,\n DASHBOARD,\n DEFAULTCLASSES,\n EDITPROFILE,\n EDITUSER,\n FRIENDSACTIVITY,\n MESSAGES,\n MYCLASSES,\n NOTIFICATIONSSETTINGS,\n PROFILE,\n USER,\n USERS,\n} from \"../routes\";\n\nconst StyledContent = styled.div`\n // background: red;\n grid-area: content;\n overflow: auto;\n // padding: 24px;\n @media only screen and (max-width: 769px) {\n // height: 100%;\n }\n`;\n\nconst Content = () => (\n \n \n \n \n \n\n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n);\n\nexport default Content;\n\n","// src/components/APIErrorNotification/index.js\nimport { Snackbar } from \"@material-ui/core\";\nimport Alert from \"@material-ui/lab/Alert/Alert\";\nimport React from \"react\";\nimport useAPIError from \"../hooks/useAPIError\";\n\nexport default function APIErrorNotification() {\n const { error, removeError } = useAPIError();\n\n const handleSubmit = () => {\n removeError();\n };\n\n return (\n \n \n {error && error.message && error.message}\n \n \n );\n}\n","// src/components/APIErrorNotification/index.js\nimport { Snackbar } from \"@material-ui/core\";\nimport Alert from \"@material-ui/lab/Alert/Alert\";\nimport React, { useContext } from \"react\";\nimport styled from \"styled-components\";\nimport { SocketContext } from \"../Context/SocketProvider\";\nimport { NotificationText } from \"../notifactionTextResolver\";\n\nconst StyledAlert = styled(Alert)`\n background: var(--green);\n color: var(--white);\n`;\nconst StyledSnackbar = styled(Snackbar)`\n top: calc(50px + var(--platform-top));\n`;\nexport default function UINotifications() {\n const socketContext = useContext(SocketContext);\n\n const handleSubmit = (id: string, markAsSeen: boolean) => {\n socketContext.removeNotification(id, markAsSeen);\n };\n return (\n <>\n {socketContext.notifications.map((x) => { \n return (\n {\n if (reason === \"timeout\") {\n handleSubmit(x.id, false);\n }\n }}\n anchorOrigin={{ vertical: \"top\", horizontal: \"center\" }}\n >\n handleSubmit(x.id, true)} severity=\"success\">\n \n \n \n );\n })}\n \n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { FilePluginPlugin } from \"@kekridk/prokode-file-plugin\";\nimport axios from \"../axios\";\nimport \"@kekridk/prokode-file-plugin\";\nimport { Plugins, FilesystemDirectory, Capacitor } from \"@capacitor/core\";\nconst { WebView, Filesystem, FilePlugin } = Plugins;\n\ntype DeploymentManifestFile = {\n path: string;\n size: number;\n checksum: string;\n};\n\nexport type UpdaterProps = {\n children: React.ReactNode;\n};\n\nexport default function Updater({ children }: UpdaterProps) {\n\n const checkforupdateTimer = () => {\n \n if (Capacitor.getPlatform() === \"web\") {\n return;\n }\n\n if(localStorage.getItem('autoupdate') !== 'true'){\n return;\n }\n \n\n var plugun = FilePlugin as FilePluginPlugin;\n plugun.getAppInfo().then(({ dataDirectory: dataDir }) => {\n\n // Filesystem.readdir({\n\n // path: '',\n // directory: dataDir\n\n // })\n\n });\n\n checkforupdate();\n window.setInterval(() => {\n checkforupdate();\n }, 30 * 1000)\n }\n const checkforupdate = () => {\n\n var currentVersion = process.env.REACT_APP_VERSION;\n axios\n .get(`/current-version.txt?timestamp=${new Date().getTime()}`)\n .then((result) => {\n if (currentVersion && currentVersion !== result.data) {\n // alert(\"Ny app version tilgængelige - hentes nu..\");\n fetchManifest(result.data, currentVersion);\n }\n });\n };\n\n class Path {\n static join(...paths: string[]): string {\n let fullPath: string = paths.shift() || \"\";\n for (const path of paths) {\n if (fullPath && fullPath.slice(-1) !== \"/\") {\n fullPath += \"/\";\n }\n fullPath =\n path.slice(0, 1) !== \"/\" ? fullPath + path : fullPath + path.slice(1);\n }\n return fullPath;\n }\n }\n\n const SNAPSHOT_CACHE = \"ionic_built_snapshots\";\n\n const [progress, setProgress] = useState(0);\n const [totalProgress, setTotalProgress] = useState(0);\n console.log(totalProgress);\n const fetchManifest = (newVersion: string, currentVersion: string) => {\n var plugun = FilePlugin as FilePluginPlugin;\n axios\n .get(\n `/deployment-manifest.json?timestamp=${new Date().getTime()}`\n )\n .then(({ data: deploymentManifestFiles }) => {\n axios\n .get(\n `/deployment-manifest.json?timestamp=${new Date().getTime()}`,\n {\n baseURL: undefined,\n }\n )\n .then(({ data: currentDeploymentManifestFiles }) => {\n WebView.getServerBasePath().then(({ path: currentServerPath }) => {\n plugun.getAppInfo().then(({ dataDirectory: dataDir }) => {\n\n var promises: any[] = [];\n\n var totalSize = 0;\n\n const filesToDownload: DeploymentManifestFile[] = [];\n const filesToCopy: DeploymentManifestFile[] = [];\n const ok = currentDeploymentManifestFiles;\n console.log(ok);\n for (var i = 0; i < deploymentManifestFiles.length; i++) {\n const deploymentFile = deploymentManifestFiles[i];\n // var file = currentDeploymentManifestFiles.find(x => x.path === deploymentFile.path)\n // if (file) {\n // if (file.checksum === deploymentFile.checksum) {\n // filesToCopy.push(deploymentFile);\n // } else {\n // filesToDownload.push(deploymentFile);\n // }\n // } else {\n //TODO: fix copy current base - to save data\n filesToDownload.push(deploymentFile);\n // }\n }\n\n for (var u = 0; u < filesToCopy.length; u++) {\n const deploymentFile = filesToCopy[u];\n alert(currentServerPath);\n alert(\n new URL(\n Path.join(\n SNAPSHOT_CACHE,\n currentVersion,\n deploymentFile.path\n )\n ).pathname\n );\n\n Filesystem.copy({\n from: new URL(\n Path.join(\n SNAPSHOT_CACHE,\n currentVersion,\n deploymentFile.path\n )\n ).pathname,\n to: new URL(\n Path.join(SNAPSHOT_CACHE, newVersion, deploymentFile.path)\n ).pathname,\n directory: FilesystemDirectory.External,\n })\n .then(() => {\n alert(\"file copied\");\n })\n .catch((e: any) => {\n alert(JSON.stringify(e));\n });\n }\n\n for (var j = 0; j < filesToDownload.length; j++) {\n const deploymentFile = filesToDownload[j];\n totalSize = totalSize + deploymentFile.size;\n //alert(\"downloading\" + \"https://crossfit.prokode.dk\" + deploymentFile.path)\n var promise = plugun\n .download({\n url: \"https://crossfit.prokode.dk\" + deploymentFile.path,\n target: new URL(\n Path.join(\n dataDir,\n SNAPSHOT_CACHE,\n newVersion,\n deploymentFile.path\n )\n ).pathname,\n })\n .then((r: any) => {\n const downloadedSize = progress + deploymentFile.size;\n setProgress(downloadedSize);\n // alert(\"downloaded\")\n })\n .catch((e: any) => {\n alert(JSON.stringify(e));\n });\n promises.push(promise);\n }\n\n setTotalProgress(totalSize);\n Promise.all(promises).then(() => {\n applyUpdate(dataDir, newVersion);\n });\n });\n });\n });\n });\n };\n\n const applyUpdate = (dataDir: string, newVersion: string) => {\n // alert(\"Ny app version aktiveres\");\n\n WebView.setServerBasePath({\n path: new URL(Path.join(dataDir, SNAPSHOT_CACHE, newVersion)).pathname,\n }).then(() => {\n WebView.persistServerBasePath();\n });\n };\n\n useEffect(checkforupdateTimer, []);\n\n return <>{children};\n}\n","import { useMutation } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { RegisterToUserOnDevicePayload } from \"./notificationModels\";\n\nexport default function useRegisterToUserOnDevice() {\n return useMutation(\n (payload) => {\n // alert(JSON.stringify(payload))\n return axios.post(`/api/notification/RegisterToUserOnDevice`, payload);\n },\n {\n onSuccess: (data, notificationId) => {\n // Query Invalidations\n // queryCache.invalidateQueries([\"bookingsByClassId\", classId]);\n },\n }\n );\n\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import React from \"react\";\n\nexport default function AppStoreIcon() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import { AxiosError } from \"axios\";\nimport React from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { useHistory } from \"react-router-dom\";\nimport ErrorSummary, { addServerErrors } from \"../../components/ErrorSummary\";\nimport { useAuthState } from \"../../Context/AuthProvider\";\nimport { LoginPayload } from \"../../Context/actions\";\nimport { DASHBOARD, REGISTERUSER, REQUESTPASSWORDRESET } from \"../../routes\";\n\nimport styled from \"styled-components\";\nimport CustomButton from \"../../components/CustomButton\";\nimport useLogin from \"../../hooks/account/useLogin\";\nimport Logo from \"../../components/Logo\";\n\nimport TextInput from \"../../components/form/TextInput\";\n\nimport { Plugins, Capacitor } from \"@capacitor/core\";\n\nimport useRegisterToUserOnDevice from \"../../hooks/notification/useRegisterToUserOnDevice\";\nimport { BoxHeader } from \"../../components/Box\";\nimport AppStoreIcon from \"../../icons/AppStoreIcon\";\nconst LogoHolder = styled.div`\n padding-bottom: 40px;\n`;\n\nconst Spacer = styled.div`\n margin-bottom: 20px;\n`;\nconst Divider = styled.div`\n margin-top: 20px;\n border-top: 1px solid var(--grey3);\n padding-top: 20px;\n`;\n\nconst AppIcons = styled.div`\n display: flex;\n flex-direction: row;\n justify-content: space-between;\n align-items: center;\n\n img{\n height: 60px;\n }\n\n`;\nexport default function Login() {\n const { Device } = Plugins;\n const history = useHistory();\n const { handleSubmit, errors, setError, control } = useForm();\n\n const [registerMutate] = useRegisterToUserOnDevice();\n const [loginMutate] = useLogin();\n const { setToken } = useAuthState();\n const onSubmit = (data: LoginPayload) => {\n loginMutate(data)\n .then((result) => {\n if (result?.data) {\n setToken(result?.data);\n if (Capacitor.getPlatform() !== \"web\") {\n Device.getInfo().then((info) => {\n //alert(info.uuid)\n registerMutate({ deviceId: info.uuid });\n });\n }\n history.push(DASHBOARD);\n }\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n };\n\n return (\n <>\n \n \n \n
\n \n \n \n \n \n Log ind{\" \"}\n {\n history.push(REQUESTPASSWORDRESET);\n }}\n >\n Glemt kodeord?\n \n \n \n Er du ny?\n {\n history.push(REGISTERUSER);\n }}\n >\n Opret bruger\n \n \n {Capacitor.getPlatform() === \"web\" && (\n \n Hent som app\n

\n Hent booking platform som app - få en bedre oplevelse med\n notifikatiner.\n

\n \n \n \n {\" \"}\n \n \n \n \n \n
\n )}\n \n );\n}\n","import { AxiosResponse } from \"axios\";\nimport { queryCache } from \"react-query\";\nimport { LoginPayload } from \"../../Context/actions\";\nimport useMutationForForms from \"../useMutationForForms\";\nimport axios from \"./../../axios\";\n\nexport default function useRegisterAccount() {\n return useMutationForForms, unknown, LoginPayload>(\n (data: LoginPayload) => axios.post(`/api/account/token`, data),\n {\n onSuccess: (data, updateData) => {\n \n queryCache.invalidateQueries([\"me\"]);\n },\n }\n );\n}\n","import {\n Plugins,\n Capacitor,\n} from \"@capacitor/core\";\n\nimport React, { useEffect } from \"react\";\nimport { useHistory } from \"react-router-dom\";\nimport { useAuthState } from \"../../Context/AuthProvider\";\nimport useUnRegisterToUserOnDevice from \"../../hooks/notification/useUnRegisterToUserOnDevice\";\nimport { LOGIN } from \"../../routes\";\n\nconst { Device } = Plugins;\nexport default function LogOut() {\n const history = useHistory();\n\n const { setToken } = useAuthState();\n\n const [unRegisterMutate] = useUnRegisterToUserOnDevice();\n\n const logout = () => {\n if (Capacitor.getPlatform() !== \"web\") {\n Device.getInfo().then((info) => {\n unRegisterMutate({ deviceId: info.uuid });\n });\n }\n \n window.setTimeout(() => {\n setToken(null);\n history.push(LOGIN);\n }, 1000);\n };\n useEffect(logout, []);\n\n return

Logger ud....

;\n}\n","import { useMutation } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { UnRegisterToUserOnDevicePayload } from \"./notificationModels\";\n\nexport default function useUnRegisterToUserOnDevice() {\n return useMutation(\n (payload) => {\n \n return axios.post(`/api/notification/UnRegisterToUserOnDevice`, payload);\n },\n {\n onSuccess: (data, notificationId) => {\n // Query Invalidations\n // queryCache.invalidateQueries([\"bookingsByClassId\", classId]);\n },\n }\n );\n\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import { AxiosError } from \"axios\";\nimport React from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { useHistory } from \"react-router-dom\";\nimport { BoxHeader } from \"../../components/Box\";\n\nimport styled from \"styled-components\";\nimport CustomButton from \"../../components/CustomButton\";\nimport ErrorSummary, { addServerErrors } from \"../../components/ErrorSummary\";\nimport { RegisterModel } from \"../../hooks/account/accountModels\";\nimport { DASHBOARD, LOGIN } from \"../../routes\";\nimport useRegisterAccount from \"../../hooks/account/useRegisterAccount\";\nimport { useAuthState } from \"../../Context/AuthProvider\";\nimport TextInput from \"../../components/form/TextInput\";\n\nconst Spacer = styled.div`\n margin-bottom: 20px;\n \n `;\nexport default function AccountRegister() {\n const history = useHistory();\n const { handleSubmit, errors, setError, control } = useForm();\n const { setToken } = useAuthState();\n const [registerAccountMutate] = useRegisterAccount();\n const onSubmit = (data: RegisterModel) => {\n registerAccountMutate(data)\n .then((result) => {\n if (result?.data) {\n setToken(result?.data);\n\n history.push(DASHBOARD);\n }\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n // loginUser(dispatch, data)\n // .then((dd) => {\n // history.push(DASHBOARD);\n // })\n // .catch((err: AxiosError) => {\n // if (err.response?.data.errors) {\n // addServerErrors(err.response?.data.errors, setError);\n // }\n // });\n };\n const handleCancelEdit = () => {\n history.push(LOGIN);\n };\n return (\n <>\n
\n \n LOGIN OPLYSNIGER\n \n \n \n \n \n PERSNOLIGE OPLYSNIGER\n \n \n \n \n \n \n \n \n Opret bruger eller{\" \"}\n \n Annuller\n \n
\n \n );\n}\n","import { AxiosResponse } from \"axios\";\nimport { queryCache } from \"react-query\";\nimport useMutationForForms from \"../useMutationForForms\";\nimport axios from \"./../../axios\";\nimport { RegisterModel } from \"./accountModels\";\n\nexport default function useRegisterAccount() {\n return useMutationForForms, unknown, RegisterModel>(\n (data: RegisterModel) => axios.post(`/api/account/register`, data),\n {\n onSuccess: (data, updateData) => {\n \n queryCache.invalidateQueries([\"me\"]);\n },\n }\n );\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport Logo from \"../../components/Logo\";\nimport { BoxHeader } from \"../../components/Box\";\n\nconst LogoHolder = styled.div`\n padding-bottom: 40px;\n`;\n\nexport default function PrivacyPolicy() {\n\n return (\n <>\n \n \n \n 1.Informationsindsamling\n

\n Vi indsamler information fra dig, når du registrerer dig på vores side,\n logger ind på din konto, foretager køb, tilmelder dig konkurrencer,\n og/eller når du logger ud. De indsamlede informationer inkluderer dit\n navn, e-mailadresse, telefonnummer, og/eller kreditkort. Dertil kommer,\n at vi automatisk modtager og optager informationer fra din computer og\n browser, inkluderet din IP adresse, software og hardware egenskaber, og\n siden du forespørger.\n

\n 2. Informationsbrug\n

\n Enhver af informationerne vi indsamler fra dig, kan blive anvendt til:\n

    \n
  • \n Personalisere din oplevelse og reagere på dine individuelle behov\n
  • \n
  • Give brugerdefineret reklameindhold
  • \n
  • Forbedre vores webside
  • \n
  • Forbedre kundeservice og dine support behov
  • \n
  • Kontakte dig via e-mail
  • \n
  • Forvalte en konkurrence, kampagne eller undersøgelse
  • \n
\n

\n 3. E-handels fortrolighed\n

\n Vi er ene ejere af informationerne indsamlet på denne side. Dine\n personlige identificerbare informationer vil ikke blive solgt,\n udvekslet, overført eller givet til nogen anden virksomhed af nogen\n grund overhovedet, uden din accept, udover når nødvendigt for at\n gennemføre en forespørgsel og/eller transaktion, eksempelvis forsendelse\n af en ordre.\n

\n 4. Tredje part aftale\n

\n Vi hverken sælger, handler eller på anden vis overfører dine personligt\n identificerbare informationer til ekstern part. Dette inkluderer ikke\n betroet 3de parts, som bistår os i håndteringen af vores webside eller\n udfører vores forretning, så længe disse accepterer at holde disse\n informationer fortrolige. Vi mener det er nødvendigt at dele\n informationer, for at kunne undersøge, undgå eller tage skridt i\n forbindelse med illegale aktiviteter, mistanke om bedrageri, situationer\n som involverer potentiel trussel mod den fysiske sikkerhed af enhver\n person, brud på vores brugerbetingelser, eller på anden vis påkrævet ved\n lov. Ikke private informationer kan derimod videregives til andre parter\n til brug for marketing, reklame eller andet.\n

\n 5. Informationsbeskyttelse\n

\n Vi implementerer en række sikkerhedsforanstaltninger, for at fastholde\n sikkerheden af dine personlige informationer. Vi bruge state-of-the-art\n kryptering til beskyttelse af følsomme informationer transmitteret\n online. VpnMentor beskytter også dine informationer offline. Kun\n ansatte, som skal udføre specifikke jobs (eksempelvis fakturering eller\n kundeservice) gives adgang til personligt identificerbare informationer.\n Computerne/serverne som anvendes til at opbevare personligt\n identificerbare informationer, opbevares i et sikkert miljø. Anvender vi\n cookies? Ja. Vores cookies forbedrer adgang til vores side og\n identificerer gentagne besøgende. Dertil kommer at vores cookies øger en\n brugers oplevelse ved at spore og målrette hans/hendes interesser. Denne\n cookie brug, er dog på ingen måde forbundet til nogen personligt\n identificerbare informationer på vores side.\n

\n 6. Afmeld\n

\n Vi bruger e-mailadressen som du giver, til at sende dig informationer og\n opdateringer vedrørende din ordre, lejlighedsvise virksomhedsnyheder,\n relateret produktinformation, osv. Hvis du på noget tidspunkt ønsker at\n afmelde dig modtagelse af fremtidige e-mails, så inkluderer vi\n detaljeret instruktioner til afmeldelse i bunden af hver e-mail.\n

\n 7. Samtykke\n

\n Ved brug af vores side, giver du samtykke til vores\n fortrolighedspolitik.\n

\n \n );\n}\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport Logo from \"../../components/Logo\";\nimport { BoxHeader } from \"../../components/Box\";\n\nconst LogoHolder = styled.div`\n padding-bottom: 40px;\n`;\n\nexport default function Support() {\n return (\n <>\n \n \n \n Support\n

\n Har du problemer med at logge ind, booking, eller anden funktionalitet,\n venligst kontakt support.\n

\n

Du kan kontakte support på info@crossfit8500.dk via email.

\n \n );\n}\n","import { AxiosError } from \"axios\";\nimport React, { useState } from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { useHistory } from \"react-router-dom\";\nimport { BoxHeader } from \"../../components/Box\";\n\nimport styled from \"styled-components\";\nimport CustomButton, { ThemeColor } from \"../../components/CustomButton\";\nimport ErrorSummary, { addServerErrors } from \"../../components/ErrorSummary\";\nimport { RequestPasswordResetModel } from \"../../hooks/account/accountModels\";\nimport { LOGIN } from \"../../routes\";\nimport useRequestPasswordReset from \"../../hooks/account/useRequestPasswordReset\";\nimport TextInput from \"../../components/form/TextInput\";\n\nconst Spacer = styled.div`\n margin-bottom: 20px;\n`;\nexport default function RequestResetPassword() {\n const history = useHistory();\n const [sent, setSent] = useState(false);\n const {\n handleSubmit,\n errors,\n setError,\n control,\n } = useForm();\n const [registerAccountMutate] = useRequestPasswordReset();\n const onSubmit = (data: RequestPasswordResetModel) => {\n registerAccountMutate(data)\n .then(() => {\n setSent(true);\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n // loginUser(dispatch, data)\n // .then((dd) => {\n // history.push(DASHBOARD);\n // })\n // .catch((err: AxiosError) => {\n // if (err.response?.data.errors) {\n // addServerErrors(err.response?.data.errors, setError);\n // }\n // });\n };\n const handleCancelEdit = () => {\n history.push(LOGIN);\n };\n return (\n <>\n {!sent && (\n
\n \n GLEMT KODEORD?\n\n \n \n \n Nustil KODEORD{\" \"}\n \n Annuller\n \n \n )}\n\n {sent && (\n <>\n \n

Der er sendt en e-mail, hvis du har en bruger

\n
\n \n Tilbage til login\n \n \n )}\n \n );\n}\n","import { AxiosResponse } from \"axios\";\nimport useMutationForForms from \"../useMutationForForms\";\nimport axios from \"./../../axios\";\nimport { RequestPasswordResetModel } from \"./accountModels\";\n\nexport default function useRequestPasswordReset() {\n return useMutationForForms, unknown, RequestPasswordResetModel>(\n (data: RequestPasswordResetModel) => axios.post(`/api/account/RequestPasswordReset`, data),\n {\n onSuccess: (data, updateData) => {\n \n \n },\n }\n );\n}\n","import { AxiosError } from \"axios\";\nimport React from \"react\";\nimport { useForm } from \"react-hook-form\";\nimport { useHistory } from \"react-router-dom\";\nimport ErrorSummary, { addServerErrors } from \"../../components/ErrorSummary\";\nimport { useAuthState } from \"../../Context/AuthProvider\";\nimport { DASHBOARD } from \"../../routes\";\nimport qs from 'query-string'\nimport styled from \"styled-components\";\nimport CustomButton from \"../../components/CustomButton\";\nimport useResetPassword from \"../../hooks/account/useResetPassword\";\nimport Logo from \"../../components/Logo\";\n\nimport TextInput from \"../../components/form/TextInput\";\n\nimport { Plugins, Capacitor } from \"@capacitor/core\";\n\nimport useRegisterToUserOnDevice from \"../../hooks/notification/useRegisterToUserOnDevice\";\nimport { BoxHeader } from \"../../components/Box\";\nimport { PasswordResetModel } from \"../../hooks/account/accountModels\";\nconst LogoHolder = styled.div`\n padding-bottom: 40px;\n`;\n\nconst Spacer = styled.div`\n margin-bottom: 20px;\n`;\n\nexport default function ResetPassword() {\n \n const { Device } = Plugins;\n const history = useHistory();\n const { handleSubmit, errors, setError, control } = useForm();\n\n const [registerMutate] = useRegisterToUserOnDevice();\n const [loginMutate] = useResetPassword();\n const { setToken } = useAuthState();\n const onSubmit = (data: PasswordResetModel) => {\n const parsed = qs.parse(window.location.search);\n\n//=> {foo: 'bar'} \n\n data.token = decodeURIComponent(parsed.token?.toString() ?? \"\");\n data.email = decodeURIComponent(parsed.email?.toString() ?? \"\");\n loginMutate(data)\n .then((result) => {\n if (result?.data) {\n setToken(result?.data);\n if (Capacitor.getPlatform() !== \"web\") {\n Device.getInfo().then((info) => {\n //alert(info.uuid)\n registerMutate({ deviceId: info.uuid });\n });\n }\n history.push(DASHBOARD);\n }\n })\n .catch((err: AxiosError) => {\n if (err.response?.data.errors) {\n addServerErrors(err.response?.data.errors, setError);\n }\n });\n };\n\n return (\n <>\n \n \n \n
\n \n Nulstil kodeord\n \n \n \n \n Gem ny kode og log ind\n
\n \n );\n}\n","import { AxiosResponse } from \"axios\";\nimport useMutationForForms from \"../useMutationForForms\";\nimport axios from \"./../../axios\";\nimport { PasswordResetModel } from \"./accountModels\";\n\nexport default function useResetPassword() {\n return useMutationForForms, unknown, PasswordResetModel>(\n (data: PasswordResetModel) => axios.post(`/api/account/PasswordReset`, data),\n {\n onSuccess: (data, updateData) => {\n \n \n },\n }\n );\n}\n","import React from \"react\";\n\nimport { Route, Switch } from \"react-router-dom\";\nimport styled from \"styled-components\";\nimport {\n LOGOUT,\n LOGIN,\n REGISTERUSER,\n PRIVACYPOLICY,\n SUPPORT,\n REQUESTPASSWORDRESET,\n PASSWORDRESET,\n} from \"../../routes\";\nimport Login from \"./LogIn\";\nimport LogOut from \"./LogOut\";\nimport AccountRegister from \"./AccountRegister\";\nimport PrivacyPolicy from \"./PrivacyPolicy\";\nimport Support from \"./Support\";\nimport RequestResetPassword from \"./RequestResetPassword\";\nimport ResetPassword from \"./ResetPassword\";\n\nconst Box = styled.div`\n width: 350px;\n background: white;\n margin-top: -10%;\n margin-left: 10px;\n margin-right: 10px;\n padding: 30px;\n max-height: 80%;\n overflow: auto;\n`;\n\nconst PublicLayoutElement = styled.div`\n height: 100%;\n width: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n`;\n\nexport default function PublicLayout() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","// src/common/providers/APIErrorProvider/index.js\nimport React, { useEffect } from \"react\";\nimport {\n Plugins,\n PushNotificationToken,\n Capacitor,\n} from \"@capacitor/core\";\nimport useRegisterToken from \"../hooks/notification/useRegisterToken\";\nimport useRegisterDevice from \"../hooks/notification/useRegisterDevice\";\nimport useRegisterRequestedToSendNotifications from \"../hooks/notification/useRegisterRequestedToSendNotifications\";\n\nconst { PushNotifications, Device } = Plugins;\nexport type PushNotificationProviderProps = {\n children: React.ReactNode;\n};\n\nexport default function PushNotificationProvider({\n children,\n}: PushNotificationProviderProps) {\n const [registerDeviceMutate] = useRegisterDevice();\n const [\n registerRequestedToSendNotificationsMutate,\n ] = useRegisterRequestedToSendNotifications();\n const [registerTokenMutate] = useRegisterToken();\n\n const register = () => {\n if (Capacitor.getPlatform() !== \"web\") {\n\n\n // On success, we should be able to receive notifications\n PushNotifications.addListener(\n \"registration\",\n (token: PushNotificationToken) => {\n\n // alert('Push registration success, token: ' + token.value);\n Device.getInfo().then((info) => {\n registerTokenMutate({ token: token.value, deviceId: info.uuid });\n registerRequestedToSendNotificationsMutate({ deviceId: info.uuid });\n });\n }\n );\n\n // Some issue with our setup and push will not work\n PushNotifications.addListener(\"registrationError\", (error: any) => {\n alert(\"Error on registration: \" + JSON.stringify(error));\n });\n\n\n Device.getInfo().then((info) => {\n //alert(info.uuid)\n registerDeviceMutate({ deviceId: info.uuid }).then((r) => {\n //alert(JSON.stringify(r));\n if (!r?.data?.requestedToSendNotifications) {\n PushNotifications.requestPermission().then((result) => {\n if (result.granted) {\n // Register with Apple / Google to receive push via APNS/FCM\n PushNotifications.register();\n } else {\n registerRequestedToSendNotificationsMutate({\n deviceId: info.uuid,\n });\n // Show some error\n }\n });\n }\n });\n });\n }\n }\n\n\n useEffect(register, []);\n\n\n return <>{children};\n}\n","import { AxiosResponse } from \"axios\";\nimport { useMutation } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { RegisterDevicePayload, RegisterDeviceResponse } from \"./notificationModels\";\n\nexport default function useRegisterDevice() {\n return useMutation, unknown, RegisterDevicePayload>(\n (payload) => {\n \n return axios.post(`/api/notification/RegisterDevice`, payload);\n },\n {\n onSuccess: (data, notificationId) => {\n // Query Invalidations\n // queryCache.invalidateQueries([\"bookingsByClassId\", classId]);\n },\n }\n );\n\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import { useMutation } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { RegisterRequestedToSendNotificationsPayload } from \"./notificationModels\";\n\nexport default function useRegisterRequestedToSendNotifications() {\n return useMutation(\n (payload) => { \n return axios.post(`/api/notification/RegisterRequestedToSendNotifications`, payload);\n },\n {\n onSuccess: (data, notificationId) => {\n // Query Invalidations\n // queryCache.invalidateQueries([\"bookingsByClassId\", classId]);\n },\n }\n );\n\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import { useMutation } from \"react-query\";\nimport axios from \"./../../axios\";\nimport { RegisterTokenPayload } from \"./notificationModels\";\n\nexport default function useRegisterToken() {\n return useMutation(\n (payload) => {\n \n return axios.post(`/api/notification/RegisterToken`, payload);\n },\n {\n onSuccess: (data, notificationId) => {\n // alert(\"ok ok\")\n // Query Invalidations\n // queryCache.invalidateQueries([\"bookingsByClassId\", classId]);\n },\n }\n );\n\n // return useQuery([\"activeUserBookings\"], getBookings);\n}\n","import React from \"react\";\nimport { BrowserRouter as Router, Route, Switch } from \"react-router-dom\";\nimport moment from \"moment\";\nimport \"moment/locale/da\";\nimport AuthProvider from \"./Context/AuthProvider\";\nimport \"typeface-open-sans\";\nimport styled, { createGlobalStyle } from \"styled-components\";\nimport {\n palette,\n PaletteProps,\n spacing,\n SpacingProps,\n} from \"@material-ui/system\";\nimport CssBaseline from \"@material-ui/core/CssBaseline/CssBaseline\";\nimport { ThemeProvider, createMuiTheme } from \"@material-ui/core/styles\";\nimport Navigation from \"./components/Navigation\";\nimport Content from \"./components/Content\";\nimport daLocale from \"date-fns/locale/da\";\nimport { MuiPickersUtilsProvider } from \"@material-ui/pickers\";\nimport DateFnsUtils from \"@date-io/date-fns\";\nimport APIErrorProvider from \"./Context/APIErrorProvider\";\nimport APIErrorNotification from \"./components/APIErrorNotification\";\n\nimport SocketProvider from \"./Context/SocketProvider\";\nimport UINotifications from \"./components/UINotifications\";\nimport Updater from \"./components/Updater\";\nimport { Capacitor } from \"@capacitor/core\";\nimport { LOGIN, LOGOUT, PASSWORDRESET, PRIVACYPOLICY, REGISTERUSER, REQUESTPASSWORDRESET, SUPPORT } from \"./routes\";\nimport PublicLayout from \"./pages/public/PublicLayout\";\nimport PushNotificationProvider from \"./Context/PushNotificationProvider\";\n\nconst GlobalStyle = createGlobalStyle`\n:root {\n --red: rgb(190,23,49);\n --black: rgb(0,0,0);\n --white: rgb(255,255,255);\n --grey1: rgb(134,135,134);\n --grey2: rgb(197,198,198);\n --grey3: rgb(236,236,236);\n --green: rgb(146,184,126);\n --blue: rgb(37,142,171);\n --platform-top: ${(props) => (props.platform === \"ios\" ? \"30px\" : \"0px\")};\n --platform-bottom: ${(props) => (props.platform === \"ios\" ? \"15px\" : \"0px\")};\n\n}\n#root{\n\n display: flex;\n}\n #root, html, body {\n height: 100%;\n background: var(--grey3);\n color: var(--black)\n }\n a {\n color: var(--black);\n text-decoration-color: var(--grey2);\n }\n a:hover{\n color: var(--red)\n }\n @media only screen and (max-width: 769px) {\n * {\n -ms-overflow-style: none; /* Internet Explorer 10+ */\n scrollbar-width: none; /* Firefox */\n}\n*::-webkit-scrollbar { \n display: none; /* Safari and Chrome */\n}\n}\n `;\nconst Box = styled.div`\n ${spacing}${palette}\n\n // background: white;\n height: 100%;\n width: 100%;\n @media only screen and (min-width: 769px) {\n margin: auto;\n height: 90%;\n border-radius: 18px;\n box-shadow: 0px 0px 34px 29px rgba(0, 0, 0, 0.02);\n min-width: 1024px;\n min-height: 768px;\n width: 80%;\n }\n`;\n\nexport type PlatformProps = {\n platform: string;\n};\nconst Layout = styled.div`\n height: 100%;\n display: grid;\n grid-template-columns: 250px auto;\n grid-template-rows: auto;\n grid-template-areas: \"navigation content\";\n @media only screen and (max-width: 769px) {\n grid-gap: 0;\n grid-template-columns: auto;\n grid-template-rows: auto calc(55px + var(--platform-bottom));\n grid-template-areas:\n \"content \"\n \"navigation\";\n }\n`;\n\nconst theme = createMuiTheme({\n // status: {\n // danger: orange[500],\n // },\n palette: {\n primary: {\n main: \"#ff00ff\",\n },\n background: {\n // default: \"#EEF5F5\",\n // default: \"#EFF1F3\",\n },\n success: {\n main: \"rgb(146,184,126)\",\n // contrastText:\n },\n },\n typography: {\n fontFamily: ['\"Open Sans\"'].join(\",\"),\n fontSize: 12,\n },\n});\n\nfunction App() {\n const locale = \"da\";\n\n // const { Filesystem } = Plugins;\n // const readDir = (path: string, index: number) => {\n // Filesystem.readdir({\n // path: path,\n // directory: FilesystemDirectory.Documents,\n // }).then((val) => {\n // console.log(\"\".padEnd(index, \"-\") + \"\" + path);\n // val.files.map((file) => {\n // var newIndex = index + 1;\n // readDir(path + file + \"/\", newIndex);\n // return null;\n // });\n // });\n // };\n // readDir(\"../\", 0);\n moment.locale(locale);\n\n // // Show us the notification payload if the app is open on our device\n // PushNotifications.addListener(\n // \"pushNotificationReceived\",\n // (notification: PushNotification) => {\n // alert(\"Push received: \" + JSON.stringify(notification));\n // }\n // );\n\n // // Method called when tapping on a notification\n // PushNotifications.addListener(\n // \"pushNotificationActionPerformed\",\n // (notification: PushNotificationActionPerformed) => {\n // alert(\"Push action performed: \" + JSON.stringify(notification));\n // }\n // );\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n process.env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport \"./index.css\";\nimport App from \"./App\";\nimport * as serviceWorker from \"./serviceWorker\";\nimport * as Sentry from \"@sentry/react\";\nimport { Integrations } from \"@sentry/tracing\";\n\nSentry.init({\n dsn:\n \"https://dcd90f1dca5245cf8697c0d40305f163@o532819.ingest.sentry.io/5652176\",\n integrations: [new Integrations.BrowserTracing()],\n\n // We recommend adjusting this value in production, or using tracesSampler\n // for finer control\n tracesSampleRate: 0.0,\n});\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n"],"sourceRoot":""}